more changes to support Default pane

This commit is contained in:
Shaun Walker
2022-09-05 15:49:38 -04:00
parent 01fabc8d9e
commit dd170bb41a
4 changed files with 159 additions and 148 deletions

View File

@ -431,160 +431,160 @@
} }
} }
private async Task ToggleEditMode(bool EditMode) private async Task ToggleEditMode(bool EditMode)
{ {
if (_showEditMode) if (_showEditMode)
{ {
if (EditMode) if (EditMode)
{ {
PageState.EditMode = false; PageState.EditMode = false;
} }
else else
{ {
PageState.EditMode = true; PageState.EditMode = true;
} }
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"))); NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0")));
} }
else else
{ {
if (PageState.Page.IsPersonalizable && PageState.User != null) if (PageState.Page.IsPersonalizable && PageState.User != null)
{ {
await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId); await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
PageState.EditMode = true; PageState.EditMode = true;
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"))); NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0")));
} }
} }
} }
private void Navigate(string location) private void Navigate(string location)
{ {
Module module; Module module;
switch (location) switch (location)
{ {
case "Admin": case "Admin":
// get admin dashboard moduleid // get admin dashboard moduleid
module = PageState.Modules.FirstOrDefault(item => item.ModuleDefinitionName == Constants.AdminDashboardModule); module = PageState.Modules.FirstOrDefault(item => item.ModuleDefinitionName == Constants.AdminDashboardModule);
if (module != null) if (module != null)
{ {
NavigationManager.NavigateTo(EditUrl(PageState.Page.Path, module.ModuleId, "Index", "")); NavigationManager.NavigateTo(EditUrl(PageState.Page.Path, module.ModuleId, "Index", ""));
} }
break; break;
case "Add": case "Add":
case "Edit": case "Edit":
string url = ""; string url = "";
// get page management moduleid // get page management moduleid
module = PageState.Modules.FirstOrDefault(item => item.ModuleDefinitionName == Constants.PageManagementModule); module = PageState.Modules.FirstOrDefault(item => item.ModuleDefinitionName == Constants.PageManagementModule);
if (module != null) if (module != null)
{ {
switch (location) switch (location)
{ {
case "Add": case "Add":
url = EditUrl(PageState.Page.Path, module.ModuleId, location, "cp=" + PageState.Page.PageId); url = EditUrl(PageState.Page.Path, module.ModuleId, location, "cp=" + PageState.Page.PageId);
break; break;
case "Edit": case "Edit":
url = EditUrl(PageState.Page.Path, module.ModuleId, location, "id=" + PageState.Page.PageId.ToString() + "&cp=" + PageState.Page.PageId); url = EditUrl(PageState.Page.Path, module.ModuleId, location, "id=" + PageState.Page.PageId.ToString() + "&cp=" + PageState.Page.PageId);
break; break;
} }
} }
if (url != "") if (url != "")
{ {
NavigationManager.NavigateTo(url); NavigationManager.NavigateTo(url);
} }
break; break;
} }
} }
private async void Publish(string action) private async void Publish(string action)
{ {
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions))
{ {
List<PermissionString> permissions; List<PermissionString> permissions;
// publish/unpublish page // publish/unpublish page
var page = PageState.Page; var page = PageState.Page;
permissions = UserSecurity.GetPermissionStrings(page.Permissions); permissions = UserSecurity.GetPermissionStrings(page.Permissions);
foreach (var permissionstring in permissions) foreach (var permissionstring in permissions)
{ {
if (permissionstring.PermissionName == PermissionNames.View) if (permissionstring.PermissionName == PermissionNames.View)
{ {
List<string> ids = permissionstring.Permissions.Split(';').ToList(); List<string> ids = permissionstring.Permissions.Split(';').ToList();
switch (action) switch (action)
{ {
case "publish": case "publish":
if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone); if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone);
if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered); if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered);
break; break;
case "unpublish": case "unpublish":
ids.Remove(RoleNames.Everyone); ids.Remove(RoleNames.Everyone);
ids.Remove(RoleNames.Registered); ids.Remove(RoleNames.Registered);
break; break;
} }
permissionstring.Permissions = string.Join(";", ids.ToArray()); permissionstring.Permissions = string.Join(";", ids.ToArray());
} }
} }
page.Permissions = UserSecurity.SetPermissionStrings(permissions); page.Permissions = UserSecurity.SetPermissionStrings(permissions);
await PageService.UpdatePageAsync(page); await PageService.UpdatePageAsync(page);
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true)); NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true));
} }
} }
private void ConfirmDelete() private void ConfirmDelete()
{ {
_deleteConfirmation = !_deleteConfirmation; _deleteConfirmation = !_deleteConfirmation;
StateHasChanged(); StateHasChanged();
} }
private async Task DeletePage() private async Task DeletePage()
{ {
ConfirmDelete(); ConfirmDelete();
var page = PageState.Page; var page = PageState.Page;
try try
{ {
if (page.UserId == null) if (page.UserId == null)
{ {
page.IsDeleted = true; page.IsDeleted = true;
await PageService.UpdatePageAsync(page); await PageService.UpdatePageAsync(page);
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page); await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page);
NavigationManager.NavigateTo(NavigateUrl("")); NavigationManager.NavigateTo(NavigateUrl(""));
} }
else // personalized page else // personalized page
{ {
await PageService.DeletePageAsync(page.PageId); await PageService.DeletePageAsync(page.PageId);
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page); await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page);
NavigationManager.NavigateTo(NavigateUrl()); NavigationManager.NavigateTo(NavigateUrl());
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, ex, "Page Deleted {Page} {Error}", page, ex.Message); await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, ex, "Page Deleted {Page} {Error}", page, ex.Message);
} }
} }
private string settingCategory = "CP-category"; private string settingCategory = "CP-category";
private string settingPane = "CP-pane"; private string settingPane = "CP-pane";
private string _pane = ""; private string _pane = "";
private async Task LoadSettingsAsync() private async Task LoadSettingsAsync()
{ {
Dictionary<string, string> settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); Dictionary<string, string> settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId);
_category = SettingService.GetSetting(settings, settingCategory, "Common"); _category = SettingService.GetSetting(settings, settingCategory, "Common");
var pane = SettingService.GetSetting(settings, settingPane, ""); var pane = SettingService.GetSetting(settings, settingPane, "");
if (PageState.Page.Panes.Contains(pane)) if (PageState.Page.Panes.Contains(pane))
{ {
_pane = pane; _pane = pane;
} }
else else
{ {
if (PageState.Page.Panes.Count != 0) if (PageState.Page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1)
{ {
_pane = PageState.Page.Panes[0]; _pane = PaneNames.Default;
} }
else else
{ {

View File

@ -17,13 +17,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="container">
<div class="row">
<div class="col-md-12">
<Pane Name="@PaneNames.Admin" />
</div>
</div>
</div>
<Pane Name="Top Full Width" /> <Pane Name="Top Full Width" />
<div class="container"> <div class="container">
<div class="row"> <div class="row">
@ -115,7 +108,7 @@
@code { @code {
public override string Name => "Default Theme"; public override string Name => "Default Theme";
public override string Panes => PaneNames.Default + ",Top Full Width,Top 100%,Left 50%,Right 50%,Left 33%,Center 33%,Right 33%,Left Outer 25%,Left Inner 25%,Right Inner 25%,Right Outer 25%,Left 25%,Center 50%,Right 25%,Left Sidebar 66%,Right Sidebar 33%,Left Sidebar 33%,Right Sidebar 66%,Bottom 100%,Bottom Full Width,Footer," + PaneNames.Admin; public override string Panes => PaneNames.Default + ",Top Full Width,Top 100%,Left 50%,Right 50%,Left 33%,Center 33%,Right 33%,Left Outer 25%,Left Inner 25%,Right Inner 25%,Right Outer 25%,Left 25%,Center 50%,Right 25%,Left Sidebar 66%,Right Sidebar 33%,Left Sidebar 33%,Right Sidebar 66%,Bottom 100%,Bottom Full Width,Footer";
public override List<Resource> Resources => new List<Resource>() public override List<Resource> Resources => new List<Resource>()
{ {

View File

@ -45,8 +45,18 @@ else
{ {
if (PageState.ModuleId != -1 && PageState.Action != Constants.DefaultAction) if (PageState.ModuleId != -1 && PageState.Action != Constants.DefaultAction)
{ {
// an admin pane is required in every theme so that module controls can be rendered in a specific location // action route needs to inject module control into specific pane
if (Name.ToLower() == PaneNames.Admin.ToLower()) string pane = "";
if (PageState.Page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1)
{
pane = PaneNames.Default;
}
else
{
pane = PaneNames.Admin;
}
if (Name.ToLower() == pane.ToLower())
{ {
Module module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId); Module module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId);
if (module != null) if (module != null)

View File

@ -16,7 +16,7 @@
@if (!string.IsNullOrEmpty(_error)) @if (!string.IsNullOrEmpty(_error))
{ {
<ModuleMessage Message="@_error" Type="@MessageType.Error" /> <ModuleMessage Message="@_error" Type="@MessageType.Warning" />
} }
@DynamicComponent @DynamicComponent
@ -359,9 +359,9 @@
if (!string.IsNullOrEmpty(panes)) if (!string.IsNullOrEmpty(panes))
{ {
page.Panes = panes.Replace(";", ",").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); page.Panes = panes.Replace(";", ",").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
if (!page.Panes.Contains(PaneNames.Admin)) if (!page.Panes.Contains(PaneNames.Default) && !page.Panes.Contains(PaneNames.Admin))
{ {
_error = "The Current Theme Does Not Contain An Admin Pane"; _error = "The Current Theme Does Not Contain A Default Or Admin Pane";
} }
} }
else else
@ -460,10 +460,18 @@
} }
} }
// ensure module's pane exists in current page and if not, fallback to the admin pane // validate that module's pane exists in current page
if (page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1) if (page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1)
{ {
module.Pane = PaneNames.Admin; // fallback to default pane if it exists
if (page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1)
{
module.Pane = PaneNames.Default;
}
else // otherwise admin pane (legacy)
{
module.Pane = PaneNames.Admin;
}
} }
// calculate module position within pane // calculate module position within pane