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 = _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<PageModule> 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);
}
}

View File

@ -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<ModuleContent>(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);

View File

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