Merge pull request #5732 from sbwalker/dev

fix #5671 - copy page and module settings from parent
This commit is contained in:
Shaun Walker
2025-10-20 11:57:09 -04:00
committed by GitHub
3 changed files with 42 additions and 3 deletions

View File

@@ -216,6 +216,13 @@ namespace Oqtane.Controllers
page.UserId = int.Parse(userid); page.UserId = int.Parse(userid);
page = _pages.AddPage(page); 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 // copy modules
List<PageModule> pagemodules = _pageModules.GetPageModules(page.SiteId).ToList(); List<PageModule> pagemodules = _pageModules.GetPageModules(page.SiteId).ToList();
foreach (PageModule pm in pagemodules.Where(item => item.PageId == parent.PageId && !item.IsDeleted)) 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); _syncManager.AddSyncEvent(_alias, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
// set user personalized page path // 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(new Setting { EntityName = EntityNames.User, EntityId = page.UserId.Value, SettingName = $"PersonalizedPagePath:{page.SiteId}:{parent.PageId}", SettingValue = path, IsPrivate = false });
_settings.AddSetting(setting);
_syncManager.AddSyncEvent(_alias, EntityNames.User, user.UserId, SyncEventActions.Update); _syncManager.AddSyncEvent(_alias, EntityNames.User, user.UserId, SyncEventActions.Update);
} }
} }

View File

@@ -110,9 +110,12 @@ namespace Oqtane.Repository
ModuleDefinition moduledefinition = moduledefinitions.FirstOrDefault(item => item.ModuleDefinitionName == module.ModuleDefinitionName); ModuleDefinition moduledefinition = moduledefinitions.FirstOrDefault(item => item.ModuleDefinitionName == module.ModuleDefinitionName);
if (moduledefinition != null) if (moduledefinition != null)
{ {
var settings = _settings.GetSettings(EntityNames.Module, moduleId);
ModuleContent modulecontent = new ModuleContent(); ModuleContent modulecontent = new ModuleContent();
modulecontent.ModuleDefinitionName = moduledefinition.ModuleDefinitionName; modulecontent.ModuleDefinitionName = moduledefinition.ModuleDefinitionName;
modulecontent.Version = moduledefinition.Version; modulecontent.Version = moduledefinition.Version;
modulecontent.Settings = settings.Where(item => !item.IsPrivate).ToDictionary(x => x.SettingName, x => x.SettingValue);
modulecontent.Content = ""; modulecontent.Content = "";
if (moduledefinition.ServerManagerType != "") if (moduledefinition.ServerManagerType != "")
@@ -122,7 +125,7 @@ namespace Oqtane.Repository
{ {
try 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); var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
modulecontent.Content = ((IPortable)moduleobject).ExportModule(module); modulecontent.Content = ((IPortable)moduleobject).ExportModule(module);
} }
@@ -160,6 +163,29 @@ namespace Oqtane.Repository
ModuleContent modulecontent = JsonSerializer.Deserialize<ModuleContent>(content.Replace("\n", "")); ModuleContent modulecontent = JsonSerializer.Deserialize<ModuleContent>(content.Replace("\n", ""));
if (modulecontent.ModuleDefinitionName == moduledefinition.ModuleDefinitionName) 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 != "") if (moduledefinition.ServerManagerType != "")
{ {
Type moduletype = Type.GetType(moduledefinition.ServerManagerType); Type moduletype = Type.GetType(moduledefinition.ServerManagerType);

View File

@@ -1,3 +1,5 @@
using System.Collections.Generic;
namespace Oqtane.Models namespace Oqtane.Models
{ {
/// <summary> /// <summary>
@@ -15,6 +17,11 @@ namespace Oqtane.Models
/// </summary> /// </summary>
public string Version { get; set; } public string Version { get; set; }
/// <summary>
/// Serialized Settings of the module for import/export.
/// </summary>
public Dictionary<string, string> Settings { get; set; }
/// <summary> /// <summary>
/// Serialized Content of the module for import/export. /// Serialized Content of the module for import/export.
/// </summary> /// </summary>