diff --git a/Oqtane.Client/Resources/Themes/Controls/ControlPanelInteractive.resx b/Oqtane.Client/Resources/Themes/Controls/ControlPanelInteractive.resx index 9fa2eac6..6a8302d7 100644 --- a/Oqtane.Client/Resources/Themes/Controls/ControlPanelInteractive.resx +++ b/Oqtane.Client/Resources/Themes/Controls/ControlPanelInteractive.resx @@ -154,7 +154,7 @@ Not Authorized - You Must Select A Module + You Must Select A Module. Module Management: @@ -162,6 +162,15 @@ Select Module + + Select Copy Mode + + + Sync + + + Copy + Page Management: @@ -198,4 +207,13 @@ Top + + You Must Select A Module And The Copy Mode. + + + The Module's Content Will Not Be Synchronized. + + + Copy Existing Module + \ No newline at end of file diff --git a/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor b/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor index bd386c01..d33b1d21 100644 --- a/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor +++ b/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor @@ -15,6 +15,7 @@ @inject ILogService LoggingService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer +@inject IServiceProvider ServiceProvider @@ -97,7 +98,8 @@ @Localizer["Module.AddNew"] @if (PageState.Page.UserId == null) { - @Localizer["Module.AddExisting"] + @Localizer["Module.AddExisting"] + @Localizer["Module.CopyExisting"] } @if (_moduleType == "new") @@ -148,13 +150,14 @@ @p.Name } - + ModuleIdChanged()"> <@Localizer["Module.Select"]> @foreach (Module module in _modules) { @module.Title } + @((MarkupString)_copyModuleMessage) } @@ -267,6 +270,7 @@ protected int _location { get; private set; } = int.MaxValue; protected string _visibility { get; private set; } = "view"; protected string _message { get; private set; } = ""; + protected string _copyModuleMessage { get; private set; } = ""; private string settingCategory = "CP-category"; private string settingPane = "CP-pane"; @@ -351,12 +355,26 @@ StateHasChanged(); } + private void ModuleIdChanged() + { + _copyModuleMessage = string.Empty; + if(_moduleId != "-") + { + var module = _modules.FirstOrDefault(item => item.ModuleId == int.Parse(_moduleId)); + if (module != null && !module.ModuleDefinition.IsPortable) + { + _copyModuleMessage = $"{Localizer["Message.Module.NotPortable"]}"; + } + } + } + private async Task AddModule() { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) { if ((_moduleType == "new" && _moduleDefinitionName != "-") || (_moduleType != "new" && _moduleId != "-")) { + var newModuleId = _moduleId != "-" ? int.Parse(_moduleId) : 0; if (_moduleType == "new") { Module module = new Module(); @@ -364,33 +382,37 @@ module.PageId = PageState.Page.PageId; module.ModuleDefinitionName = _moduleDefinitionName; module.AllPages = false; - - var permissions = new List(); - if (_visibility == "view") - { - // set module view permissions to page view permissions - permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.View); - } - else - { - // set module view permissions to page edit permissions - permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.Edit); - } - // set module edit permissions to page edit permissions - permissions = SetPermissions(permissions, module.SiteId, PermissionNames.Edit, PermissionNames.Edit); - module.PermissionList = permissions; + module.PermissionList = GenerateDefaultPermissions(module.SiteId); module = await ModuleService.AddModuleAsync(module); - _moduleId = module.ModuleId.ToString(); + newModuleId = module.ModuleId; + } + else if (_moduleType == "exsiting.copy") + { + var module = await ModuleService.GetModuleAsync(int.Parse(_moduleId)); + module.ModuleId = 0; + module.SiteId = PageState.Site.SiteId; + module.PageId = PageState.Page.PageId; + module.AllPages = false; + module.PermissionList = GenerateDefaultPermissions(module.SiteId); + + module = await ModuleService.AddModuleAsync(module); + var moduleContent = await ModuleService.ExportModuleAsync(int.Parse(_moduleId), PageState.Page.PageId); + if (!string.IsNullOrEmpty(moduleContent)) + { + await ModuleService.ImportModuleAsync(module.ModuleId, PageState.Page.PageId, moduleContent); + } + + newModuleId = module.ModuleId; } var pageModule = new PageModule { PageId = PageState.Page.PageId, - ModuleId = int.Parse(_moduleId), + ModuleId = newModuleId, Title = _title }; - if (pageModule.Title == "") + if (string.IsNullOrEmpty(pageModule.Title)) { if (_moduleType == "new") { @@ -430,6 +452,25 @@ } } + private List GenerateDefaultPermissions(int siteId) + { + var permissions = new List(); + if (_visibility == "view") + { + // set module view permissions to page view permissions + permissions = SetPermissions(permissions, siteId, PermissionNames.View, PermissionNames.View); + } + else + { + // set module view permissions to page edit permissions + permissions = SetPermissions(permissions, siteId, PermissionNames.View, PermissionNames.Edit); + } + // set module edit permissions to page edit permissions + permissions = SetPermissions(permissions, siteId, PermissionNames.Edit, PermissionNames.Edit); + + return permissions; + } + private List SetPermissions(List permissions, int siteId, string modulePermission, string pagePermission) { foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission))