From 5875c1caa776ce810d265bb706c7623a0ec00844 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Mon, 20 Oct 2025 11:56:53 -0400 Subject: [PATCH] fix #5671 - copy page and module settings from parent --- Oqtane.Server/Controllers/PageController.cs | 10 +++++-- Oqtane.Server/Repository/ModuleRepository.cs | 28 +++++++++++++++++++- Oqtane.Shared/Models/ModuleContent.cs | 7 +++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Oqtane.Server/Controllers/PageController.cs b/Oqtane.Server/Controllers/PageController.cs index 6086bd0f..cb7b8ee5 100644 --- a/Oqtane.Server/Controllers/PageController.cs +++ b/Oqtane.Server/Controllers/PageController.cs @@ -216,6 +216,13 @@ namespace Oqtane.Controllers page.UserId = int.Parse(userid); page = _pages.AddPage(page); + // copy parent page settings + var settings = _settings.GetSettings(EntityNames.Page, parent.PageId); + foreach (var setting in settings) + { + _settings.AddSetting(new Setting { EntityName = EntityNames.Page, EntityId = page.PageId, SettingName = setting.SettingName, SettingValue = setting.SettingValue, IsPrivate = setting.IsPrivate }); + } + // copy modules List pagemodules = _pageModules.GetPageModules(page.SiteId).ToList(); foreach (PageModule pm in pagemodules.Where(item => item.PageId == parent.PageId && !item.IsDeleted)) @@ -258,8 +265,7 @@ namespace Oqtane.Controllers _syncManager.AddSyncEvent(_alias, EntityNames.Site, page.SiteId, SyncEventActions.Refresh); // set user personalized page path - var setting = new Setting { EntityName = EntityNames.User, EntityId = page.UserId.Value, SettingName = $"PersonalizedPagePath:{page.SiteId}:{parent.PageId}", SettingValue = path, IsPrivate = false }; - _settings.AddSetting(setting); + _settings.AddSetting(new Setting { EntityName = EntityNames.User, EntityId = page.UserId.Value, SettingName = $"PersonalizedPagePath:{page.SiteId}:{parent.PageId}", SettingValue = path, IsPrivate = false }); _syncManager.AddSyncEvent(_alias, EntityNames.User, user.UserId, SyncEventActions.Update); } } diff --git a/Oqtane.Server/Repository/ModuleRepository.cs b/Oqtane.Server/Repository/ModuleRepository.cs index 18cbd05f..94291d5b 100644 --- a/Oqtane.Server/Repository/ModuleRepository.cs +++ b/Oqtane.Server/Repository/ModuleRepository.cs @@ -110,9 +110,12 @@ namespace Oqtane.Repository ModuleDefinition moduledefinition = moduledefinitions.FirstOrDefault(item => item.ModuleDefinitionName == module.ModuleDefinitionName); if (moduledefinition != null) { + var settings = _settings.GetSettings(EntityNames.Module, moduleId); + ModuleContent modulecontent = new ModuleContent(); modulecontent.ModuleDefinitionName = moduledefinition.ModuleDefinitionName; modulecontent.Version = moduledefinition.Version; + modulecontent.Settings = settings.Where(item => !item.IsPrivate).ToDictionary(x => x.SettingName, x => x.SettingValue); modulecontent.Content = ""; if (moduledefinition.ServerManagerType != "") @@ -122,7 +125,7 @@ namespace Oqtane.Repository { try { - module.Settings = _settings.GetSettings(EntityNames.Module, moduleId).ToDictionary(x => x.SettingName, x => x.SettingValue); + module.Settings = settings.ToDictionary(x => x.SettingName, x => x.SettingValue); var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype); modulecontent.Content = ((IPortable)moduleobject).ExportModule(module); } @@ -160,6 +163,29 @@ namespace Oqtane.Repository ModuleContent modulecontent = JsonSerializer.Deserialize(content.Replace("\n", "")); if (modulecontent.ModuleDefinitionName == moduledefinition.ModuleDefinitionName) { + var settings = _settings.GetSettings(EntityNames.Module, moduleId); + + if (modulecontent.Settings != null) + { + foreach (var kvp in modulecontent.Settings) + { + var setting = settings.FirstOrDefault(item => item.SettingName == kvp.Key); + if (setting == null) + { + setting = new Setting { EntityName = EntityNames.Module, EntityId = moduleId, SettingName = kvp.Key, SettingValue = kvp.Value, IsPrivate = false }; + _settings.AddSetting(setting); + } + else + { + if (setting.SettingValue != kvp.Value) + { + setting.SettingValue = kvp.Value; + _settings.UpdateSetting(setting); + } + } + } + } + if (moduledefinition.ServerManagerType != "") { Type moduletype = Type.GetType(moduledefinition.ServerManagerType); diff --git a/Oqtane.Shared/Models/ModuleContent.cs b/Oqtane.Shared/Models/ModuleContent.cs index c1f5abf7..8c1269f3 100644 --- a/Oqtane.Shared/Models/ModuleContent.cs +++ b/Oqtane.Shared/Models/ModuleContent.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; + namespace Oqtane.Models { /// @@ -15,6 +17,11 @@ namespace Oqtane.Models /// public string Version { get; set; } + /// + /// Serialized Settings of the module for import/export. + /// + public Dictionary Settings { get; set; } + /// /// Serialized Content of the module for import/export. ///