@namespace Oqtane.Themes.Controls @inherits ThemeControlBase @attribute [OqtaneIgnore] @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 @if (_moduleDefinitions != null && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions)) {
Control Panel
@if (UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole)) {

} @if (_deleteConfirmation) {
}
@if (ModuleType == "new") { @if (_moduleDefinitions != null) { @((MarkupString) Description) } } else { }

@((MarkupString) Message)
} @if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions) || (PageState.Page.IsPersonalizable && PageState.User != null)) { @if (PageState.Page.EditMode) { } else { 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 Description { get; private set; } = ""; protected string Pane { 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; } [Parameter] public string CardClass { get; set; } [Parameter] public string HeaderClass { get; set; } [Parameter] public string BodyClass { get; set; } protected override async Task OnInitializedAsync() { if (string.IsNullOrEmpty(ButtonClass)) { ButtonClass = "btn-outline-secondary"; } if (string.IsNullOrEmpty(CardClass)) { CardClass = "card border-secondary mb-3"; } if (string.IsNullOrEmpty(HeaderClass)) { HeaderClass = "card-header"; } if (string.IsNullOrEmpty(BodyClass)) { BodyClass = "card-body"; } 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 panes = PageState.Page.Panes; Pane = panes.Count() == 1 ? panes.SingleOrDefault() : ""; 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; module.Permissions = PageState.Page.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 = "
Module Added To Page
"; NavigationManager.NavigateTo(NavigateUrl()); } else { Message = "
You Must Select A Module
"; } } else { Message = "
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, ""); 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(); 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 settingName = "CP-category"; private async Task LoadSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); _category = SettingService.GetSetting(settings, settingName, "Common"); } private async Task UpdateSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); SettingService.SetSetting(settings, settingName, _category); await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); } }