Fix #4030: add copy module option for add existing module function.

This commit is contained in:
Ben 2024-04-27 12:32:31 +08:00
parent 09b8087787
commit 436eb30490
2 changed files with 60 additions and 20 deletions

View File

@ -154,7 +154,7 @@
<value>Not Authorized</value>
</data>
<data name="Message.Require.ModuleSelect" xml:space="preserve">
<value>You Must Select A Module</value>
<value>You Must Select A Module And The Copy Mode.</value>
</data>
<data name="Module.Manage" xml:space="preserve">
<value>Module Management:</value>
@ -162,6 +162,15 @@
<data name="Module.Select" xml:space="preserve">
<value>Select Module</value>
</data>
<data name="CopyMode.Select" xml:space="preserve">
<value>Select Copy Mode</value>
</data>
<data name="CopyMode.Sync" xml:space="preserve">
<value>Sync</value>
</data>
<data name="CopyMode.Copy" xml:space="preserve">
<value>Copy</value>
</data>
<data name="Page.Manage" xml:space="preserve">
<value>Page Management:</value>
</data>

View File

@ -15,6 +15,7 @@
@inject ILogService LoggingService
@inject IStringLocalizer<ControlPanelInteractive> Localizer
@inject IStringLocalizer<SharedResources> SharedLocalizer
@inject IServiceProvider ServiceProvider
<button type="button" class="btn @ButtonClass ms-1" data-bs-toggle="offcanvas" data-bs-target="#offcanvasControlPanel" aria-controls="offcanvasControlPanel" @onclick="ClearMessage">
<span class="oi oi-cog"></span>
@ -155,6 +156,11 @@
<option value="@module.ModuleId">@module.Title</option>
}
</select>
<select class="form-select mt-1" @bind="@_copyMode">
<option value="-">&lt;@Localizer["CopyMode.Select"]&gt;</option>
<option value="sync">&lt;@Localizer["CopyMode.Sync"]&gt;</option>
<option value="copy">&lt;@Localizer["CopyMode.Copy"]&gt;</option>
</select>
}
</div>
</div>
@ -261,6 +267,7 @@
protected string _moduleId { get; private set; } = "-";
protected string _moduleType { get; private set; } = "new";
protected string _moduleDefinitionName { get; private set; } = "-";
protected string _copyMode { get; private set; } = "-";
protected string _title { get; private set; } = "";
protected string _containerType { get; private set; } = "";
@ -355,8 +362,9 @@
{
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList))
{
if ((_moduleType == "new" && _moduleDefinitionName != "-") || (_moduleType != "new" && _moduleId != "-"))
if ((_moduleType == "new" && _moduleDefinitionName != "-") || (_moduleType != "new" && _moduleId != "-" && _copyMode != "-"))
{
var newModuleId = int.Parse(_moduleId);
if (_moduleType == "new")
{
Module module = new Module();
@ -364,33 +372,37 @@
module.PageId = PageState.Page.PageId;
module.ModuleDefinitionName = _moduleDefinitionName;
module.AllPages = false;
var permissions = new List<Permission>();
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(_copyMode == "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 +442,25 @@
}
}
private List<Permission> GenerateDefaultPermissions(int siteId)
{
var permissions = new List<Permission>();
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<Permission> SetPermissions(List<Permission> permissions, int siteId, string modulePermission, string pagePermission)
{
foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission))