@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 @inject ISettingService SettingService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (ShowLanguageSwitcher) { } @if (_showEditMode || (PageState.Page.IsPersonalizable && PageState.User != null && UserSecurity.IsAuthorized(PageState.User, RoleNames.Registered))) { if (PageState.EditMode) { } else { } } @if (_canViewAdminDashboard || UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) {
@Localizer["ControlPanel"]
@if (_canViewAdminDashboard) {

} @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin)) {
@if (UserSecurity.ContainsRole(PageState.Page.PermissionList, PermissionNames.View, RoleNames.Everyone)) { } else { }

@if (_deleteConfirmation) {
} } @if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) {
@if (ModuleType == "new") { @if (_moduleDefinitions != null) { } } else { }
@if (_pane.Length > 1) {
}
@((MarkupString)Message) }
} @code{ private bool _canViewAdminDashboard = false; private bool _showEditMode = false; private bool _deleteConfirmation = false; private List _categories = new List(); private List _allModuleDefinitions; private List _moduleDefinitions; private List _pages = new List(); private List _modules = new List(); private List _containers = new List(); private string _category = "Common"; protected string PageId { get; private set; } = "-"; protected string ModuleId { get; private set; } = "-"; protected string ModuleType { get; private set; } = "new"; protected string ModuleDefinitionName { get; private set; } = "-"; protected string Category { get => _category; private set { if (_category != value) { _category = value; _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(Category)).ToList(); ModuleDefinitionName = "-"; Message = ""; StateHasChanged(); _ = UpdateSettingsAsync(); } } } protected string Pane { get => _pane; private set { if (_pane != value) { _pane = value; _ = UpdateSettingsAsync(); } } } protected string Title { get; private set; } = ""; protected string ContainerType { get; private set; } = ""; protected string Visibility { get; private set; } = "view"; protected string Message { get; private set; } = ""; [Parameter] public string ButtonClass { get; set; } = "btn-outline-secondary"; [Parameter] public string ContainerClass { get; set; } = "offcanvas offcanvas-end"; [Parameter] public string HeaderClass { get; set; } = "offcanvas-header"; [Parameter] public string BodyClass { get; set; } = "offcanvas-body overflow-auto"; [Parameter] public bool ShowLanguageSwitcher { get; set; } = true; protected override async Task OnParametersSetAsync() { _canViewAdminDashboard = CanViewAdminDashboard(); _showEditMode = false; if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) { _showEditMode = true; _pages?.Clear(); foreach (Page p in PageState.Pages) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) { _pages.Add(p); } } await LoadSettingsAsync(); var themes = await ThemeService.GetThemesAsync(); _containers = ThemeService.GetContainerControls(themes, PageState.Page.ThemeType); ContainerType = PageState.Site.DefaultContainerType; _allModuleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(Category)).ToList(); _categories = _allModuleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList(); } else { foreach (var module in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId)) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, module.PermissionList)) { _showEditMode = true; break; } } } } private bool CanViewAdminDashboard() { var admin = PageState.Pages.FirstOrDefault(item => item.Path == "admin"); if (admin != null) { foreach (var page in PageState.Pages.Where(item => item.ParentId == admin?.PageId)) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, page.PermissionList)) { return true; } } } return false; } private void CategoryChanged(ChangeEventArgs e) { Category = (string)e.Value; } private void ModuleChanged(ChangeEventArgs e) { ModuleDefinitionName = (string)e.Value; if (ModuleDefinitionName != "-") { var moduleDefinition = _moduleDefinitions.FirstOrDefault(item => item.ModuleDefinitionName == ModuleDefinitionName); Message = "
" + moduleDefinition.Description + "
"; } else { Message = ""; } StateHasChanged(); } private void PageChanged(ChangeEventArgs e) { PageId = (string)e.Value; if (PageId != "-") { _modules = PageState.Modules .Where(module => module.PageId == int.Parse(PageId) && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList)) .ToList(); } ModuleId = "-"; StateHasChanged(); } private async Task AddModule() { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) { if ((ModuleType == "new" && ModuleDefinitionName != "-") || (ModuleType != "new" && ModuleId != "-")) { if (ModuleType == "new") { Module module = new Module(); module.SiteId = PageState.Site.SiteId; module.PageId = PageState.Page.PageId; module.ModuleDefinitionName = ModuleDefinitionName; module.AllPages = false; var permissions = new List(); 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); ModuleId = module.ModuleId.ToString(); } var pageModule = new PageModule { PageId = PageState.Page.PageId, ModuleId = int.Parse(ModuleId), Title = Title }; if (pageModule.Title == "") { if (ModuleType == "new") { pageModule.Title = _moduleDefinitions.FirstOrDefault(item => item.ModuleDefinitionName == ModuleDefinitionName)?.Name; } else { pageModule.Title = _modules.FirstOrDefault(item => item.ModuleId == int.Parse(ModuleId))?.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 = $"
{Localizer["Success.Page.ModuleAdd"]}
"; Title = ""; NavigationManager.NavigateTo(NavigateUrl()); } else { Message = $"
{Localizer["Message.Require.ModuleSelect"]}
"; } } else { Message = $"
{Localizer["Error.Authorize.No"]}
"; } } private List SetPermissions(List permissions, int siteId, string modulePermission, string pagePermission) { foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission)) { permissions.Add(new Permission { SiteId = siteId, EntityName = EntityNames.Module, PermissionName = modulePermission, RoleId = permission.RoleId, UserId = permission.UserId, IsAuthorized = permission.IsAuthorized }); } return permissions; } private async Task ToggleEditMode(bool EditMode) { if (_showEditMode) { if (EditMode) { PageState.EditMode = false; } else { PageState.EditMode = true; } NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"))); } else { if (PageState.Page.IsPersonalizable && PageState.User != null) { await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId); PageState.EditMode = true; NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"))); } } } private void Navigate(string location) { Module module; switch (location) { case "Admin": // get admin dashboard moduleid module = PageState.Modules.FirstOrDefault(item => item.ModuleDefinitionName == Constants.AdminDashboardModule); 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.FirstOrDefault(item => item.ModuleDefinitionName == Constants.PageManagementModule); if (module != null) { switch (location) { case "Add": url = EditUrl(PageState.Page.Path, module.ModuleId, location, "cp=" + PageState.Page.PageId); break; case "Edit": url = EditUrl(PageState.Page.Path, module.ModuleId, location, "id=" + PageState.Page.PageId.ToString() + "&cp=" + PageState.Page.PageId); break; } } if (url != "") { NavigationManager.NavigateTo(url); } break; } } private async void Publish(string action) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) { var permissions = PageState.Page.PermissionList; if (!permissions.Any(item => item.PermissionName == PermissionNames.View && item.RoleName == RoleNames.Everyone)) { permissions.Add(new Permission(PageState.Site.SiteId, EntityNames.Page, PageState.Page.PageId, PermissionNames.View, RoleNames.Everyone, null, true)); } if (!permissions.Any(item => item.PermissionName == PermissionNames.View && item.RoleName == RoleNames.Registered)) { permissions.Add(new Permission(PageState.Site.SiteId, EntityNames.Page, PageState.Page.PageId, PermissionNames.View, RoleNames.Registered, null, true)); } PageState.Page.PermissionList = permissions; await PageService.UpdatePageAsync(PageState.Page); NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true)); } } private void ConfirmDelete() { _deleteConfirmation = !_deleteConfirmation; StateHasChanged(); } private async Task DeletePage() { ConfirmDelete(); var page = PageState.Page; try { if (page.UserId == null) { page.IsDeleted = true; 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); NavigationManager.NavigateTo(NavigateUrl("")); } else // personalized page { 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); NavigationManager.NavigateTo(NavigateUrl()); } } 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); } } private string settingCategory = "CP-category"; private string settingPane = "CP-pane"; private string _pane = ""; private async Task LoadSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); _category = SettingService.GetSetting(settings, settingCategory, "Common"); var pane = SettingService.GetSetting(settings, settingPane, ""); if (PageState.Page.Panes.Contains(pane)) { _pane = pane; } else { if (PageState.Page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1) { _pane = PaneNames.Default; } else { _pane = PaneNames.Admin; } } } private async Task UpdateSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); settings = SettingService.SetSetting(settings, settingCategory, _category); settings = SettingService.SetSetting(settings, settingPane, _pane); await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); } }