Skip to content

Commit

Permalink
Merge pull request oqtane#4198 from zyhfish/task/fix-issue-4030
Browse files Browse the repository at this point in the history
Fix oqtane#4030: add copy module option for add existing module function.
  • Loading branch information
sbwalker authored Apr 29, 2024
2 parents af8037a + be1c936 commit a2fb728
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,23 @@
<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.</value>
</data>
<data name="Module.Manage" xml:space="preserve">
<value>Module Management:</value>
</data>
<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>
Expand Down Expand Up @@ -198,4 +207,13 @@
<data name="LocationTop" xml:space="preserve">
<value>Top</value>
</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>
77 changes: 59 additions & 18 deletions Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -97,7 +98,8 @@
<option value="new">@Localizer["Module.AddNew"]</option>
@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>
@if (_moduleType == "new")
Expand Down Expand Up @@ -148,13 +150,14 @@
<option value="@p.PageId">@p.Name</option>
}
</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>
@foreach (Module module in _modules)
{
<option value="@module.ModuleId">@module.Title</option>
}
</select>
@((MarkupString)_copyModuleMessage)
}
</div>
</div>
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -351,46 +355,64 @@
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()
{
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();
module.SiteId = PageState.Site.SiteId;
module.PageId = PageState.Page.PageId;
module.ModuleDefinitionName = _moduleDefinitionName;
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
module = await ModuleService.AddModuleAsync(module);
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))
{
// set module view permissions to page edit permissions
permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.Edit);
await ModuleService.ImportModuleAsync(module.ModuleId, PageState.Page.PageId, moduleContent);
}
// 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);
_moduleId = module.ModuleId.ToString();
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")
{
Expand Down Expand Up @@ -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)
{
foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission))
Expand Down

0 comments on commit a2fb728

Please sign in to comment.