@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 @if (_moduleDefinitions != null && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) {
@Localizer["Control Panel"]
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin)) {


@if (UserSecurity.GetPermissionStrings(PageState.Page.Permissions).FirstOrDefault(item => item.PermissionName == PermissionNames.View).Permissions.Split(';').Contains(RoleNames.Everyone)) {
} else {
}
} @if (_deleteConfirmation) {
}
@if (ModuleType == "new") { @if (_moduleDefinitions != null) { @((MarkupString) Description) } } else { }
@if (_pane.Length > 1) {
}

@((MarkupString) Message)
} @if (ShowLanguageSwitcher) { } @if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions) || (PageState.Page.IsPersonalizable && PageState.User != null)) { if (PageState.EditMode) { } else { } } @if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) { } @code{ 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 _display = "display: none;"; 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 = "-"; Description = ""; StateHasChanged(); _ = UpdateSettingsAsync(); } } } protected string Pane { get => _pane; private set { if (_pane != value) { _pane = value; _ = UpdateSettingsAsync(); } } } protected string Description { get; private set; } = ""; protected string Title { get; private set; } = ""; protected string ContainerType { get; private set; } = ""; protected string Message { get; private set; } = ""; [Parameter] public string ButtonClass { get; set; } = "btn-outline-secondary"; [Parameter] public string CardClass { get; set; } = "card border-secondary mb-3"; [Parameter] public string HeaderClass { get; set; } = "card-header"; [Parameter] public string BodyClass { get; set; } = "card-body"; [Parameter] public bool ShowLanguageSwitcher { get; set; } = true; protected override async Task OnParametersSetAsync() { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) { _pages?.Clear(); foreach (Page p in PageState.Pages) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.Permissions)) { _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(); } } 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); Description = "
" + moduleDefinition.Description + "
"; } else { Description = ""; } StateHasChanged(); } private void PageChanged(ChangeEventArgs e) { PageId = (string)e.Value; if (PageId != "-") { _modules = PageState.Modules .Where(module => module.PageId == int.Parse(PageId) && !module.IsDeleted && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.Permissions)) .ToList(); } ModuleId = "-"; StateHasChanged(); } private async Task AddModule() { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) { 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; List permissions = UserSecurity.GetPermissionStrings(PageState.Page.Permissions); permissions.Remove(permissions.Find(p => p.PermissionName == PermissionNames.View)); List editpermissions = permissions.Find(p => p.PermissionName == PermissionNames.Edit).Permissions.Split(";").ToList(); permissions.Add(new PermissionString { PermissionName = PermissionNames.View, Permissions = string.Join(";", editpermissions.ToArray()) }); 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["Module Added To Page"]}
"; NavigationManager.NavigateTo(NavigateUrl()); } else { Message = $"
{Localizer["You Must Select A Module"]}
"; } } else { Message = $"
{Localizer["Not Authorized"]}
"; } } private async Task ToggleEditMode(bool EditMode) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) { 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 ShowControlPanel() { Message = ""; _display = "width: 25%; min-width: 375px;"; 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.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.Permissions)) { List permissions; if (action == "publish") { // publish all modules foreach (var module in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId)) { permissions = UserSecurity.GetPermissionStrings(module.Permissions); foreach (var permissionstring in permissions) { if (permissionstring.PermissionName == PermissionNames.View) { List ids = permissionstring.Permissions.Split(';').ToList(); if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone); if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered); permissionstring.Permissions = string.Join(";", ids.ToArray()); } } module.Permissions = UserSecurity.SetPermissionStrings(permissions); await ModuleService.UpdateModuleAsync(module); } } // publish page var page = PageState.Page; permissions = UserSecurity.GetPermissionStrings(page.Permissions); foreach (var permissionstring in permissions) { if (permissionstring.PermissionName == PermissionNames.View) { List ids = permissionstring.Permissions.Split(';').ToList(); switch (action) { case "publish": if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone); if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered); break; case "unpublish": ids.Remove(RoleNames.Everyone); ids.Remove(RoleNames.Registered); break; } permissionstring.Permissions = string.Join(";", ids.ToArray()); } } page.Permissions = UserSecurity.SetPermissionStrings(permissions); await PageService.UpdatePageAsync(page); NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "reload")); } } 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, ""); _pane = PageState.Page.Panes.Contains(pane) ? pane : PaneNames.Admin; } private async Task UpdateSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); SettingService.SetSetting(settings, settingCategory, _category); SettingService.SetSetting(settings, settingPane, _pane); await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); } }