add property to Module class to indicate how the IPortable interface is being invoked (Export Module, Import Module, Copy Page, Global Replace, Site Template)

This commit is contained in:
sbwalker
2026-03-05 12:55:24 -05:00
parent ae9beedca2
commit c2bb6be2da
5 changed files with 45 additions and 46 deletions

View File

@@ -20,7 +20,9 @@ namespace Oqtane.Repository
Module GetModule(int moduleId, bool tracking);
void DeleteModule(int moduleId);
string ExportModule(int moduleId);
string ExportModule(Module module);
bool ImportModule(int moduleId, string content);
bool ImportModule(Module module, string content);
}
public class ModuleRepository : IModuleRepository
@@ -99,18 +101,23 @@ namespace Oqtane.Repository
}
public string ExportModule(int moduleId)
{
Module module = GetModule(moduleId);
return ExportModule(module);
}
public string ExportModule(Module module)
{
string content = "";
try
{
Module module = GetModule(moduleId);
if (module != null)
{
List<ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(module.SiteId).ToList();
ModuleDefinition moduledefinition = moduledefinitions.FirstOrDefault(item => item.ModuleDefinitionName == module.ModuleDefinitionName);
if (moduledefinition != null)
{
var settings = _settings.GetSettings(EntityNames.Module, moduleId);
var settings = _settings.GetSettings(EntityNames.Module, module.ModuleId);
ModuleContent modulecontent = new ModuleContent();
modulecontent.ModuleDefinitionName = moduledefinition.ModuleDefinitionName;
@@ -125,6 +132,7 @@ namespace Oqtane.Repository
{
try
{
module.IPortable = "Export Module";
module.Settings = settings.ToDictionary(x => x.SettingName, x => x.SettingValue);
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
modulecontent.Content = ((IPortable)moduleobject).ExportModule(module);
@@ -149,11 +157,16 @@ namespace Oqtane.Repository
}
public bool ImportModule(int moduleId, string content)
{
Module module = GetModule(moduleId);
return ImportModule(module, content);
}
public bool ImportModule(Module module, string content)
{
bool success = false;
try
{
Module module = GetModule(moduleId);
if (module != null)
{
List<ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(module.SiteId).ToList();
@@ -163,7 +176,7 @@ namespace Oqtane.Repository
ModuleContent modulecontent = JsonSerializer.Deserialize<ModuleContent>(content.Replace("\n", ""));
if (modulecontent.ModuleDefinitionName == moduledefinition.ModuleDefinitionName)
{
var settings = _settings.GetSettings(EntityNames.Module, moduleId);
var settings = _settings.GetSettings(EntityNames.Module, module.ModuleId);
if (modulecontent.Settings != null)
{
@@ -172,7 +185,7 @@ namespace Oqtane.Repository
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 };
setting = new Setting { EntityName = EntityNames.Module, EntityId = module.ModuleId, SettingName = kvp.Key, SettingValue = kvp.Value, IsPrivate = false };
_settings.AddSetting(setting);
}
else
@@ -193,7 +206,8 @@ namespace Oqtane.Repository
{
try
{
module.Settings = _settings.GetSettings(EntityNames.Module, moduleId).ToDictionary(x => x.SettingName, x => x.SettingValue);
module.IPortable = "Import Module";
module.Settings = _settings.GetSettings(EntityNames.Module, module.ModuleId).ToDictionary(x => x.SettingName, x => x.SettingValue);
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
((IPortable)moduleobject).ImportModule(module, modulecontent.Content, modulecontent.Version);
success = true;

View File

@@ -532,27 +532,15 @@ namespace Oqtane.Repository
_logger.Log(LogLevel.Error, "Site Template", LogFunction.Other, ex, "Error Processing Page Module {PageModule}", pageModule);
}
}
if (pageTemplateModule.Content != "" && moduleDefinition.ServerManagerType != "")
if (!string.IsNullOrEmpty(pageTemplateModule.Content))
{
Type moduletype = Type.GetType(moduleDefinition.ServerManagerType);
if (moduletype != null && moduletype.GetInterface(nameof(IPortable)) != null)
var module = _moduleRepository.GetModule(pageModule.ModuleId);
module.IPortable = "Site Template";
if (!_moduleRepository.ImportModule(module, pageTemplateModule.Content))
{
try
if (alias != null)
{
var module = _moduleRepository.GetModule(pageModule.ModuleId);
if (module != null)
{
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
((IPortable)moduleobject).ImportModule(module, pageTemplateModule.Content, moduleDefinition.Version);
}
}
catch (Exception ex)
{
if (alias != null)
{
_logger.Log(LogLevel.Error, "Site Template", LogFunction.Other, ex, "Error Importing Content For {ModuleDefinitionName}", pageTemplateModule.ModuleDefinitionName);
}
_logger.Log(LogLevel.Error, "Site Template", LogFunction.Other, "Error Importing Content For {ModuleDefinitionName}", pageTemplateModule.ModuleDefinitionName);
}
}
}