@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService @inject IThemeService ThemeService
@if (children != null && children.Count > 0 && (insert == "<" || insert == ">")) { }
Cancel

@code { public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } Dictionary themes = new Dictionary(); Dictionary panelayouts = new Dictionary(); List pages; int PageId; string name; string path; string currentparentid; string parentid; string insert = "="; List children; int childid = -1; string isnavigation; string ispersonalizable; string mode; string themetype; string layouttype; string icon; string permissions; string createdby; DateTime createdon; string modifiedby; DateTime modifiedon; string deletedby; DateTime? deletedon; PermissionGrid permissiongrid; protected override async Task OnInitializedAsync() { try { pages = PageState.Pages; children = PageState.Pages.Where(item => item.ParentId == null).ToList(); themes = ThemeService.GetThemeTypes(PageState.Themes); PageId = Int32.Parse(PageState.QueryString["id"]); Page page = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); if (page != null) { name = page.Name; path = page.Path; if (path.Contains("/")) { path = path.Substring(path.LastIndexOf("/") + 1); } if (page.ParentId == null) { parentid = ""; } else { parentid = page.ParentId.ToString(); } currentparentid = parentid; isnavigation = page.IsNavigation.ToString(); ispersonalizable = page.IsPersonalizable.ToString(); mode = (page.EditMode) ? "edit" : "view"; themetype = page.ThemeType; panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); layouttype = page.LayoutType; icon = page.Icon; permissions = page.Permissions; createdby = page.CreatedBy; createdon = page.CreatedOn; modifiedby = page.ModifiedBy; modifiedon = page.ModifiedOn; deletedby = page.DeletedBy; deletedon = page.DeletedOn; } } catch (Exception ex) { await logger.LogError(ex, "Error Loading Page {PageId} {Error}", PageId, ex.Message); AddModuleMessage("Error Loading Page", MessageType.Error); } } private async void ParentChanged(ChangeEventArgs e) { try { parentid = (string)e.Value; if (parentid == "-1") { children = PageState.Pages.Where(item => item.ParentId == null).ToList(); } else { children = PageState.Pages.Where(item => item.ParentId == int.Parse(parentid)).ToList(); } if (parentid == currentparentid) { insert = "="; } else { insert = ">>"; } StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Child Pages For Parent {PageId} {Error}", parentid, ex.Message); AddModuleMessage("Error Loading Child Pages For Parent", MessageType.Error); } } private async void ThemeChanged(ChangeEventArgs e) { try { themetype = (string)e.Value; if (themetype != "") { panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); } else { panelayouts = new Dictionary(); } StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", themetype, ex.Message); AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); } } private async Task SavePage() { Page page = null; try { if (name != "" && !string.IsNullOrEmpty(themetype) && (panelayouts.Count == 0 || !string.IsNullOrEmpty(layouttype))) { page = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); string currentpath = page.Path; page.Name = name; if (path == "" && name.ToLower() != "home") { path = name; } if (path.Contains("/")) { path = path.Substring(path.LastIndexOf("/") + 1); } if (string.IsNullOrEmpty(parentid)) { page.ParentId = null; page.Path = Utilities.GetFriendlyUrl(path); } else { page.ParentId = Int32.Parse(parentid); Page parent = PageState.Pages.Where(item => item.PageId == page.ParentId).FirstOrDefault(); if (parent.Path == "") { page.Path = Utilities.GetFriendlyUrl(parent.Name) + "/" + Utilities.GetFriendlyUrl(path); } else { page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(path); } } if (insert != "=") { Page child; switch (insert) { case "<<": page.Order = 0; break; case "<": child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); page.Order = child.Order - 1; break; case ">": child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); page.Order = child.Order + 1; break; case ">>": page.Order = int.MaxValue; break; } } page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); page.EditMode = (mode == "edit" ? true : false); page.ThemeType = themetype; page.LayoutType = (layouttype == null ? "" : layouttype); page.Icon = (icon == null ? "" : icon); page.Permissions = permissiongrid.GetPermissions(); if (page.ThemeType == PageState.Site.DefaultThemeType) { page.ThemeType = ""; } if (page.LayoutType == PageState.Site.DefaultLayoutType) { page.LayoutType = ""; } page.IsPersonalizable = (ispersonalizable == null ? false : Boolean.Parse(ispersonalizable)); page.UserId = null; await PageService.UpdatePageAsync(page); await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId); if (currentparentid == "") { await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, null); } else { await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, int.Parse(currentparentid)); } // update child paths if (parentid != currentparentid) { foreach (Page p in PageState.Pages.Where(item => item.Path.StartsWith(currentpath))) { p.Path = p.Path.Replace(currentpath, page.Path); await PageService.UpdatePageAsync(p); } } await logger.LogInformation("Page Saved {Page}", page); NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } else { AddModuleMessage("You Must Provide Page Name And Theme", MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Page {Page} {Error}", page, ex.Message); AddModuleMessage("Error Saving Page", MessageType.Error); } } }