Merge pull request #4198 from zyhfish/task/fix-issue-4030

Fix #4030: add copy module option for add existing module function.
This commit is contained in:
Shaun Walker 2024-04-29 13:38:34 -04:00 committed by GitHub
commit a2fb728d3b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 80 additions and 21 deletions

View File

@ -154,7 +154,7 @@
<value>Not Authorized</value> <value>Not Authorized</value>
</data> </data>
<data name="Message.Require.ModuleSelect" xml:space="preserve"> <data name="Message.Require.ModuleSelect" xml:space="preserve">
<value>You Must Select A Module</value> <value>You Must Select A Module.</value>
</data> </data>
<data name="Module.Manage" xml:space="preserve"> <data name="Module.Manage" xml:space="preserve">
<value>Module Management:</value> <value>Module Management:</value>
@ -162,6 +162,15 @@
<data name="Module.Select" xml:space="preserve"> <data name="Module.Select" xml:space="preserve">
<value>Select Module</value> <value>Select Module</value>
</data> </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"> <data name="Page.Manage" xml:space="preserve">
<value>Page Management:</value> <value>Page Management:</value>
</data> </data>
@ -198,4 +207,13 @@
<data name="LocationTop" xml:space="preserve"> <data name="LocationTop" xml:space="preserve">
<value>Top</value> <value>Top</value>
</data> </data>
<data name="Message.Require.ModuleAndCopyModeSelect" xml:space="preserve">
<value>You Must Select A Module And The Copy Mode.</value>
</data>
<data name="Message.Module.NotPortable" xml:space="preserve">
<value>The Module's Content Will Not Be Synchronized.</value>
</data>
<data name="Module.CopyExisting" xml:space="preserve">
<value>Copy Existing Module</value>
</data>
</root> </root>

View File

@ -15,6 +15,7 @@
@inject ILogService LoggingService @inject ILogService LoggingService
@inject IStringLocalizer<ControlPanelInteractive> Localizer @inject IStringLocalizer<ControlPanelInteractive> Localizer
@inject IStringLocalizer<SharedResources> SharedLocalizer @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"> <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> <span class="oi oi-cog"></span>
@ -97,7 +98,8 @@
<option value="new">@Localizer["Module.AddNew"]</option> <option value="new">@Localizer["Module.AddNew"]</option>
@if (PageState.Page.UserId == null) @if (PageState.Page.UserId == null)
{ {
<option value="existing">@Localizer["Module.AddExisting"]</option> <option value="existing.add">@Localizer["Module.AddExisting"]</option>
<option value="existing.copy">@Localizer["Module.CopyExisting"]</option>
} }
</select> </select>
@if (_moduleType == "new") @if (_moduleType == "new")
@ -148,13 +150,14 @@
<option value="@p.PageId">@p.Name</option> <option value="@p.PageId">@p.Name</option>
} }
</select> </select>
<select class="form-select mt-1" @bind="@_moduleId"> <select class="form-select mt-1" @bind="@_moduleId" @bind:after="() => ModuleIdChanged()">
<option value="-">&lt;@Localizer["Module.Select"]&gt;</option> <option value="-">&lt;@Localizer["Module.Select"]&gt;</option>
@foreach (Module module in _modules) @foreach (Module module in _modules)
{ {
<option value="@module.ModuleId">@module.Title</option> <option value="@module.ModuleId">@module.Title</option>
} }
</select> </select>
@((MarkupString)_copyModuleMessage)
} }
</div> </div>
</div> </div>
@ -267,6 +270,7 @@
protected int _location { get; private set; } = int.MaxValue; protected int _location { get; private set; } = int.MaxValue;
protected string _visibility { get; private set; } = "view"; protected string _visibility { get; private set; } = "view";
protected string _message { get; private set; } = ""; protected string _message { get; private set; } = "";
protected string _copyModuleMessage { get; private set; } = "";
private string settingCategory = "CP-category"; private string settingCategory = "CP-category";
private string settingPane = "CP-pane"; private string settingPane = "CP-pane";
@ -351,12 +355,26 @@
StateHasChanged(); 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 = $"<div class=\"alert alert-warning mt-2 text-center\" role=\"alert\">{Localizer["Message.Module.NotPortable"]}</div>";
}
}
}
private async Task AddModule() private async Task AddModule()
{ {
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList))
{ {
if ((_moduleType == "new" && _moduleDefinitionName != "-") || (_moduleType != "new" && _moduleId != "-")) if ((_moduleType == "new" && _moduleDefinitionName != "-") || (_moduleType != "new" && _moduleId != "-"))
{ {
var newModuleId = _moduleId != "-" ? int.Parse(_moduleId) : 0;
if (_moduleType == "new") if (_moduleType == "new")
{ {
Module module = new Module(); Module module = new Module();
@ -364,33 +382,37 @@
module.PageId = PageState.Page.PageId; module.PageId = PageState.Page.PageId;
module.ModuleDefinitionName = _moduleDefinitionName; module.ModuleDefinitionName = _moduleDefinitionName;
module.AllPages = false; module.AllPages = false;
module.PermissionList = GenerateDefaultPermissions(module.SiteId);
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 = await ModuleService.AddModuleAsync(module); 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 var pageModule = new PageModule
{ {
PageId = PageState.Page.PageId, PageId = PageState.Page.PageId,
ModuleId = int.Parse(_moduleId), ModuleId = newModuleId,
Title = _title Title = _title
}; };
if (pageModule.Title == "") if (string.IsNullOrEmpty(pageModule.Title))
{ {
if (_moduleType == "new") if (_moduleType == "new")
{ {
@ -430,6 +452,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) 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)) foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission))