From d2b5e7ab6a4b934259e607539d2de3d2bc2096c6 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Wed, 26 Feb 2025 13:06:34 +1100 Subject: [PATCH] exporting: remember last options for documents/user flags/device flags --- .../Modules/DeviceFlagsConfiguration.cs | 18 +++ .../Modules/DocumentsConfiguration.cs | 6 + .../Modules/UserFlagsConfiguration.cs | 18 +++ .../Configuration/SystemConfiguration.cs | 120 +++++------------- Disco.Data/Disco.Data.csproj | 2 + .../API/Controllers/DeviceFlagController.cs | 5 + .../Controllers/DocumentTemplateController.cs | 5 + .../API/Controllers/UserFlagController.cs | 5 + .../Controllers/DeviceFlagController.cs | 2 +- .../Controllers/DocumentTemplateController.cs | 2 +- .../Config/Controllers/UserFlagController.cs | 2 +- 11 files changed, 94 insertions(+), 91 deletions(-) create mode 100644 Disco.Data/Configuration/Modules/DeviceFlagsConfiguration.cs create mode 100644 Disco.Data/Configuration/Modules/UserFlagsConfiguration.cs diff --git a/Disco.Data/Configuration/Modules/DeviceFlagsConfiguration.cs b/Disco.Data/Configuration/Modules/DeviceFlagsConfiguration.cs new file mode 100644 index 00000000..926e3001 --- /dev/null +++ b/Disco.Data/Configuration/Modules/DeviceFlagsConfiguration.cs @@ -0,0 +1,18 @@ +using Disco.Data.Repository; +using Disco.Models.Services.Devices.DeviceFlag; + +namespace Disco.Data.Configuration.Modules +{ + public class DeviceFlagsConfiguration : ConfigurationBase + { + public DeviceFlagsConfiguration(DiscoDataContext database) : base(database) { } + + public override string Scope { get; } = "DeviceFlags"; + + public DeviceFlagExportOptions LastExportOptions + { + get => Get(DeviceFlagExportOptions.DefaultOptions()); + set => Set(value); + } + } +} diff --git a/Disco.Data/Configuration/Modules/DocumentsConfiguration.cs b/Disco.Data/Configuration/Modules/DocumentsConfiguration.cs index 4fde929a..ec43d76a 100644 --- a/Disco.Data/Configuration/Modules/DocumentsConfiguration.cs +++ b/Disco.Data/Configuration/Modules/DocumentsConfiguration.cs @@ -15,5 +15,11 @@ namespace Disco.Data.Configuration.Modules get { return Get>(null); } set { Set(value); } } + + public DocumentExportOptions LastExportOptions + { + get => Get(DocumentExportOptions.DefaultOptions()); + set => Set(value); + } } } diff --git a/Disco.Data/Configuration/Modules/UserFlagsConfiguration.cs b/Disco.Data/Configuration/Modules/UserFlagsConfiguration.cs new file mode 100644 index 00000000..16fb3afa --- /dev/null +++ b/Disco.Data/Configuration/Modules/UserFlagsConfiguration.cs @@ -0,0 +1,18 @@ +using Disco.Data.Repository; +using Disco.Models.Services.Users.UserFlags; + +namespace Disco.Data.Configuration.Modules +{ + public class UserFlagsConfiguration : ConfigurationBase + { + public UserFlagsConfiguration(DiscoDataContext database) : base(database) { } + + public override string Scope { get; } = "UserFlags"; + + public UserFlagExportOptions LastExportOptions + { + get => Get(UserFlagExportOptions.DefaultOptions()); + set => Set(value); + } + } +} diff --git a/Disco.Data/Configuration/SystemConfiguration.cs b/Disco.Data/Configuration/SystemConfiguration.cs index c03537a5..71536be6 100644 --- a/Disco.Data/Configuration/SystemConfiguration.cs +++ b/Disco.Data/Configuration/SystemConfiguration.cs @@ -20,6 +20,8 @@ namespace Disco.Data.Configuration moduleActiveDirectoryConfiguration = new Lazy(() => new Modules.ActiveDirectoryConfiguration(Database)); moduleDevicesConfiguration = new Lazy(() => new Modules.DevicesConfiguration(Database)); moduleDocumentsConfiguration = new Lazy(() => new Modules.DocumentsConfiguration(Database)); + moduleUserFlagsConfiguration = new Lazy(() => new Modules.UserFlagsConfiguration(Database)); + moduleDeviceFlagsConfiguration = new Lazy(() => new Modules.DeviceFlagsConfiguration(Database)); } #region Configuration Modules @@ -31,57 +33,18 @@ namespace Disco.Data.Configuration private Lazy moduleActiveDirectoryConfiguration; private Lazy moduleDevicesConfiguration; private Lazy moduleDocumentsConfiguration; + private Lazy moduleUserFlagsConfiguration; + private Lazy moduleDeviceFlagsConfiguration; - public Modules.BootstrapperConfiguration Bootstrapper - { - get - { - return moduleBootstrapperConfiguration.Value; - } - } - public Modules.DeviceProfilesConfiguration DeviceProfiles - { - get - { - return moduleDeviceProfilesConfiguration.Value; - } - } - public Modules.OrganisationAddressesConfiguration OrganisationAddresses - { - get - { - return moduleOrganisationAddressesConfiguration.Value; - } - } - public Modules.JobPreferencesConfiguration JobPreferences - { - get - { - return moduleJobPreferencesConfiguration.Value; - } - } - public Modules.ActiveDirectoryConfiguration ActiveDirectory - { - get - { - return moduleActiveDirectoryConfiguration.Value; - } - } - public Modules.DevicesConfiguration Devices - { - get - { - return moduleDevicesConfiguration.Value; - } - } - - public Modules.DocumentsConfiguration Documents - { - get - { - return moduleDocumentsConfiguration.Value; - } - } + public Modules.BootstrapperConfiguration Bootstrapper => moduleBootstrapperConfiguration.Value; + public Modules.DeviceProfilesConfiguration DeviceProfiles => moduleDeviceProfilesConfiguration.Value; + public Modules.OrganisationAddressesConfiguration OrganisationAddresses => moduleOrganisationAddressesConfiguration.Value; + public Modules.JobPreferencesConfiguration JobPreferences => moduleJobPreferencesConfiguration.Value; + public Modules.ActiveDirectoryConfiguration ActiveDirectory => moduleActiveDirectoryConfiguration.Value; + public Modules.DevicesConfiguration Devices => moduleDevicesConfiguration.Value; + public Modules.DocumentsConfiguration Documents => moduleDocumentsConfiguration.Value; + public Modules.UserFlagsConfiguration UserFlags => moduleUserFlagsConfiguration.Value; + public Modules.DeviceFlagsConfiguration DeviceFlags => moduleDeviceFlagsConfiguration.Value; #endregion @@ -95,26 +58,27 @@ namespace Disco.Data.Configuration if (result == null) { var appDataPath = System.Web.HttpContext.Current.Server.MapPath("~/App_Data"); - if (appDataPath.EndsWith("\\")) - return appDataPath; - else - return string.Concat(appDataPath, '\\'); + + if (!appDataPath.EndsWith(@"\")) + appDataPath += @"\"; + + return appDataPath; } else return result; } set { - if (value == null) - throw new ArgumentNullException("value"); - if (!System.IO.Directory.Exists(value)) - throw new System.IO.DirectoryNotFoundException(string.Format("DataStoreLocation: '{0}' could not be found", value)); - string storePath; - if (value.EndsWith("\\")) - storePath = value; - else - storePath = string.Concat(value, '\\'); - Set(storePath); + if (string.IsNullOrWhiteSpace(value)) + throw new ArgumentNullException(nameof(value)); + + if (!Directory.Exists(value)) + throw new DirectoryNotFoundException($"DataStoreLocation: '{value}' could not be found"); + + if (!value.EndsWith(@"\")) + value += @"\"; + + Set(value); } } @@ -131,30 +95,10 @@ namespace Disco.Data.Configuration } #region Plugin Locations - public string PluginsLocation - { - get - { - return System.IO.Path.Combine(DataStoreLocation, @"Plugins\"); - } - } - public string PluginStorageLocation - { - get - { - return System.IO.Path.Combine(DataStoreLocation, @"PluginStorage\"); - } - } - public string PluginPackagesLocation - { - get - { - return System.IO.Path.Combine(DataStoreLocation, @"PluginPackages\"); - } - } - - public string PluginUserPhotosLocation - => Path.Combine(DataStoreLocation, @"PluginUserPhotos\"); + public string PluginsLocation => Path.Combine(DataStoreLocation, @"Plugins\"); + public string PluginStorageLocation => Path.Combine(DataStoreLocation, @"PluginStorage\"); + public string PluginPackagesLocation => Path.Combine(DataStoreLocation, @"PluginPackages\"); + public string PluginUserPhotosLocation => Path.Combine(DataStoreLocation, @"PluginUserPhotos\"); public DateTime PluginDetailsCacheExpiration { diff --git a/Disco.Data/Disco.Data.csproj b/Disco.Data/Disco.Data.csproj index 04a4c91b..6a476b10 100644 --- a/Disco.Data/Disco.Data.csproj +++ b/Disco.Data/Disco.Data.csproj @@ -77,6 +77,8 @@ + + diff --git a/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs b/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs index 566cdede..9d0327cd 100644 --- a/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs +++ b/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs @@ -409,6 +409,9 @@ namespace Disco.Web.Areas.API.Controllers if (Model == null || Model.Options == null) throw new ArgumentNullException(nameof(Model)); + Database.DiscoConfiguration.DeviceFlags.LastExportOptions = Model.Options; + Database.SaveChanges(); + // Start Export var exportContext = new DeviceFlagExport(Model.Options); var taskContext = ExportTask.ScheduleNowCacheResult(exportContext, id => Url.Action(MVC.Config.DeviceFlag.Export(id, null, null))); @@ -444,6 +447,8 @@ namespace Disco.Web.Areas.API.Controllers [HttpPost, ValidateAntiForgeryToken] public virtual ActionResult SaveExport(ExportModel Model) { + Database.DiscoConfiguration.DeviceFlags.LastExportOptions = Model.Options; + var export = new DeviceFlagExport(Model.Options); var savedExport = SavedExports.SaveExport(export, Database, CurrentUser); diff --git a/Disco.Web/Areas/API/Controllers/DocumentTemplateController.cs b/Disco.Web/Areas/API/Controllers/DocumentTemplateController.cs index 663b0c1a..643dcc1a 100644 --- a/Disco.Web/Areas/API/Controllers/DocumentTemplateController.cs +++ b/Disco.Web/Areas/API/Controllers/DocumentTemplateController.cs @@ -1462,6 +1462,9 @@ namespace Disco.Web.Areas.API.Controllers if (Model.Options.DocumentTemplateIds.Count == 1) templateId = Model.Options.DocumentTemplateIds.First(); + Database.DiscoConfiguration.Documents.LastExportOptions = Model.Options; + Database.SaveChanges(); + // Start Export var exportContext = new DocumentExport(Model.Options); var taskContext = ExportTask.ScheduleNowCacheResult(exportContext, id => Url.Action(MVC.Config.DocumentTemplate.Export(templateId, id))); @@ -1494,6 +1497,8 @@ namespace Disco.Web.Areas.API.Controllers [HttpPost, ValidateAntiForgeryToken] public virtual ActionResult SaveExport(ExportModel Model) { + Database.DiscoConfiguration.Documents.LastExportOptions = Model.Options; + var export = new DocumentExport(Model.Options); var savedExport = SavedExports.SaveExport(export, Database, CurrentUser); diff --git a/Disco.Web/Areas/API/Controllers/UserFlagController.cs b/Disco.Web/Areas/API/Controllers/UserFlagController.cs index 926e2658..507afcd5 100644 --- a/Disco.Web/Areas/API/Controllers/UserFlagController.cs +++ b/Disco.Web/Areas/API/Controllers/UserFlagController.cs @@ -414,6 +414,9 @@ namespace Disco.Web.Areas.API.Controllers if (Model == null || Model.Options == null) throw new ArgumentNullException(nameof(Model)); + Database.DiscoConfiguration.UserFlags.LastExportOptions = Model.Options; + Database.SaveChanges(); + // Start Export var exportContext = new UserFlagExport(Model.Options); var taskContext = ExportTask.ScheduleNowCacheResult(exportContext, id => Url.Action(MVC.Config.UserFlag.Export(id, null, null))); @@ -446,6 +449,8 @@ namespace Disco.Web.Areas.API.Controllers [HttpPost, ValidateAntiForgeryToken] public virtual ActionResult SaveExport(ExportModel Model) { + Database.DiscoConfiguration.UserFlags.LastExportOptions = Model.Options; + var export = new UserFlagExport(Model.Options); var savedExport = SavedExports.SaveExport(export, Database, CurrentUser); diff --git a/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs b/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs index 3a873dc4..c0d309f4 100644 --- a/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs +++ b/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs @@ -125,7 +125,7 @@ namespace Disco.Web.Areas.Config.Controllers { var m = new ExportModel() { - Options = DeviceFlagExportOptions.DefaultOptions(), + Options = Database.DiscoConfiguration.DeviceFlags.LastExportOptions, DeviceFlags = DeviceFlagService.GetDeviceFlags(), }; diff --git a/Disco.Web/Areas/Config/Controllers/DocumentTemplateController.cs b/Disco.Web/Areas/Config/Controllers/DocumentTemplateController.cs index b9c993d8..50f27c83 100644 --- a/Disco.Web/Areas/Config/Controllers/DocumentTemplateController.cs +++ b/Disco.Web/Areas/Config/Controllers/DocumentTemplateController.cs @@ -302,7 +302,7 @@ namespace Disco.Web.Areas.Config.Controllers { var m = new ExportModel() { - Options = DocumentExportOptions.DefaultOptions(), + Options = Database.DiscoConfiguration.Documents.LastExportOptions, DocumentTemplates = Database.DocumentTemplates.OrderBy(d => d.Id).ToList(), }; diff --git a/Disco.Web/Areas/Config/Controllers/UserFlagController.cs b/Disco.Web/Areas/Config/Controllers/UserFlagController.cs index a8578830..c5f77cd4 100644 --- a/Disco.Web/Areas/Config/Controllers/UserFlagController.cs +++ b/Disco.Web/Areas/Config/Controllers/UserFlagController.cs @@ -128,7 +128,7 @@ namespace Disco.Web.Areas.Config.Controllers { var m = new ExportModel() { - Options = UserFlagExportOptions.DefaultOptions(), + Options = Database.DiscoConfiguration.UserFlags.LastExportOptions, UserFlags = UserFlagService.GetUserFlags(), };