@namespace Oqtane.Themes.Controls @inherits ThemeControlBase @inject NavigationManager NavigationManager @inject IUserService UserService @inject IModuleDefinitionService ModuleDefinitionService @inject IThemeService ThemeService @inject IModuleService ModuleService @inject IPageService PageService @inject IPageModuleService PageModuleService @inject ILogService logger @if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) {
Control Panel

@if (moduletype == "new") { @if (moduledefinitions != null) { } } else { }
@((MarkupString)@message)
} @if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions) || (PageState.Page.IsPersonalizable && PageState.User != null)) { @if (PageState.EditMode) { } else { } } @if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) { } @code { [Parameter] public string ButtonClass { get; set; } [Parameter] public string CardClass { get; set; } [Parameter] public string HeaderClass { get; set; } [Parameter] public string BodyClass { get; set; } bool deleteconfirmation = false; string moduletype = "new"; List categories = new List(); List moduledefinitions; List pages = new List(); string pageid = ""; string moduleid = "-"; List modules = new List(); Dictionary containers = new Dictionary(); string moduledefinitionname = "-"; string pane = ""; string title = ""; string containertype = ""; string display = "display: none;"; string message = ""; protected override void OnParametersSet() { if (string.IsNullOrEmpty(ButtonClass)) { ButtonClass = "btn-outline-primary"; } if (string.IsNullOrEmpty(CardClass)) { CardClass = "card bg-secondary mb-3"; } if (string.IsNullOrEmpty(HeaderClass)) { HeaderClass = "card-header text-white"; } if (string.IsNullOrEmpty(BodyClass)) { BodyClass = "card-body"; } if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) { pages?.Clear(); foreach (ModuleDefinition moduledefinition in PageState.ModuleDefinitions) { if (moduledefinition.Categories != "") { foreach (string category in moduledefinition.Categories.Split(',')) { if (!categories.Contains(category)) { categories.Add(category); } } } } moduledefinitions = PageState.ModuleDefinitions.Where(item => item.Categories == "").ToList(); foreach (Page p in PageState.Pages) { if (UserSecurity.IsAuthorized(PageState.User, "View", p.Permissions)) { pages.Add(p); } } var panes = PageState.Page.Panes.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); pane = panes.Count() == 1 ? panes.SingleOrDefault() : ""; containers = ThemeService.GetContainerTypes(PageState.Themes); containertype = PageState.Site.DefaultContainerType; } } private void CategoryChanged(ChangeEventArgs e) { string category = (string)e.Value; if (category == "-") { moduledefinitions = PageState.ModuleDefinitions.Where(item => item.Categories == "").ToList(); } else { moduledefinitions = PageState.ModuleDefinitions.Where(item => item.Categories.Contains(category)).ToList(); } moduledefinitionname = "-"; StateHasChanged(); } private void PageChanged(ChangeEventArgs e) { pageid = (string)e.Value; modules?.Clear(); if (pageid != "") { foreach (Module module in PageState.Modules.Where(item => item.PageId == int.Parse(pageid) && !item.IsDeleted)) { if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions)) { modules.Add(module); } } } moduleid = "-"; StateHasChanged(); } private async Task AddModule() { if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) { if (moduletype == "new") { Module module = new Module(); module.SiteId = PageState.Site.SiteId; module.ModuleDefinitionName = moduledefinitionname; module.Permissions = PageState.Page.Permissions; module = await ModuleService.AddModuleAsync(module); moduleid = module.ModuleId.ToString(); } PageModule pagemodule = new PageModule(); pagemodule.PageId = string.IsNullOrEmpty(pageid) ? PageState.Page.PageId : int.Parse(pageid); pagemodule.ModuleId = int.Parse(moduleid); pagemodule.Title = title; if (pagemodule.Title == "") { if (moduletype == "new") { pagemodule.Title = moduledefinitions.Where(item => item.ModuleDefinitionName == moduledefinitionname).FirstOrDefault().Name; } else { pagemodule.Title = modules.Where(item => item.ModuleId == int.Parse(moduleid)).FirstOrDefault().Title; } } pagemodule.Pane = pane; pagemodule.Order = int.MaxValue; pagemodule.ContainerType = containertype; if (pagemodule.ContainerType == PageState.Site.DefaultContainerType) { pagemodule.ContainerType = ""; } await PageModuleService.AddPageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); message = "
Module Added To Page
"; moduledefinitionname = "-"; pane = ""; title = ""; containertype = ""; moduleid = "-"; NavigationManager.NavigateTo(NavigateUrl(Reload.Page)); } } private async Task ToggleEditMode(bool EditMode) { if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) { if (EditMode) { PageState.EditMode = false; PageState.DesignMode = false; } else { PageState.EditMode = true; PageState.DesignMode = true; } NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"), Reload.Page)); } else { if (PageState.Page.IsPersonalizable && PageState.User != null) { await CreatePersonalizedPage(); PageState.EditMode = true; PageState.DesignMode = true; NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"), Reload.Page)); } } } private void ShowControlPanel() { message = ""; display = "width: 25%;"; StateHasChanged(); } private void HideControlPanel() { message = ""; display = "width: 0%;"; StateHasChanged(); } private void Navigate(string location) { HideControlPanel(); Module module; switch (location) { case "Admin": // get admin dashboard moduleid module = PageState.Modules.Where(item => item.ModuleDefinitionName == Constants.AdminDashboardModule).FirstOrDefault(); if (module != null) { NavigationManager.NavigateTo(EditUrl(PageState.Page.Path, module.ModuleId, "Index", "")); } break; case "Add": case "Edit": string url = ""; // get page management moduleid module = PageState.Modules.Where(item => item.ModuleDefinitionName == Constants.PageManagementModule).FirstOrDefault(); if (module != null) { switch (location) { case "Add": url = EditUrl(PageState.Page.Path, module.ModuleId, location, ""); break; case "Edit": url = EditUrl(PageState.Page.Path, module.ModuleId, location, "id=" + PageState.Page.PageId.ToString()); break; } } if (url != "") { NavigationManager.NavigateTo(url); } break; } } private void ConfirmDelete() { deleteconfirmation = !deleteconfirmation; StateHasChanged(); } private async Task DeletePage() { ConfirmDelete(); Page page = PageState.Page; try { if (page.UserId == null) { page.IsDeleted = true; await PageService.UpdatePageAsync(page); await logger.Log(page.PageId, null, PageState.User.UserId, this.GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page); NavigationManager.NavigateTo(NavigateUrl("", Reload.Site)); } else // personalized page { await PageService.DeletePageAsync(page.PageId); await logger.Log(page.PageId, null, PageState.User.UserId, this.GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page); NavigationManager.NavigateTo(NavigateUrl(Reload.Page)); } } catch (Exception ex) { await logger.Log(page.PageId, null, PageState.User.UserId, this.GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, ex, "Page Deleted {Page} {Error}", page, ex.Message); } } private async Task CreatePersonalizedPage() { Page page = new Page(); page.SiteId = PageState.Page.SiteId; page.Name = PageState.Page.Name; page.Path = PageState.Page.Path; page.ParentId = PageState.Page.ParentId; page.Order = 0; page.IsNavigation = false; page.EditMode = false; page.ThemeType = PageState.Page.ThemeType; if (page.ThemeType == PageState.Site.DefaultThemeType) { page.ThemeType = ""; } page.LayoutType = PageState.Page.LayoutType; if (page.LayoutType == PageState.Site.DefaultLayoutType) { page.LayoutType = ""; } page.Icon = PageState.Page.Icon; List permissions = new List(); permissions.Add(new PermissionString { PermissionName = "View", Permissions = "[" + PageState.User.UserId.ToString() + "]" }); permissions.Add(new PermissionString { PermissionName = "Edit", Permissions = "[" + PageState.User.UserId.ToString() + "]" }); page.Permissions = UserSecurity.SetPermissionStrings(permissions); page.IsPersonalizable = false; page.UserId = PageState.User.UserId; page = await PageService.AddPageAsync(page); // copy modules foreach (Module m in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId && !item.IsDeleted)) { Module module = new Module(); module.SiteId = m.SiteId; module.ModuleDefinitionName = m.ModuleDefinitionName; permissions = new List(); permissions.Add(new PermissionString { PermissionName = "View", Permissions = "[" + PageState.User.UserId.ToString() + "]" }); permissions.Add(new PermissionString { PermissionName = "Edit", Permissions = "[" + PageState.User.UserId.ToString() + "]" }); module.Permissions = UserSecurity.SetPermissionStrings(permissions); module = await ModuleService.AddModuleAsync(module); string content = await ModuleService.ExportModuleAsync(m.ModuleId); if (content != "") { await ModuleService.ImportModuleAsync(module.ModuleId, content); } PageModule pagemodule = new PageModule(); pagemodule.PageId = page.PageId; pagemodule.ModuleId = module.ModuleId; pagemodule.Title = m.Title; pagemodule.Pane = m.Pane; pagemodule.Order = m.Order; pagemodule.ContainerType = m.ContainerType; if (pagemodule.ContainerType == PageState.Site.DefaultContainerType) { pagemodule.ContainerType = ""; } await PageModuleService.AddPageModuleAsync(pagemodule); } } }