From 7d5e35c6375cbe106fd6b1784971acd2a2ec7c7b Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 14 Sep 2019 15:31:12 -0400 Subject: [PATCH] updated namespaces, improved page management, --- Oqtane.Client/App.razor | 1 - .../Admin/{Admin => Dashboard}/Index.razor | 5 +- Oqtane.Client/Modules/Admin/Login/Index.razor | 1 + .../Modules/Admin/ModuleDefinitions/Add.razor | 3 +- .../Admin/ModuleDefinitions/Index.razor | 4 +- .../Modules/Admin/ModuleSettings/Index.razor | 3 +- Oqtane.Client/Modules/Admin/Pages/Add.razor | 107 +++++++--- .../Modules/Admin/Pages/Delete.razor | 14 +- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 106 ++++++++-- Oqtane.Client/Modules/Admin/Pages/Index.razor | 20 +- .../Modules/Admin/Profile/Index.razor | 3 +- .../Modules/Admin/Register/Index.razor | 1 + Oqtane.Client/Modules/Admin/Roles/Index.razor | 3 +- Oqtane.Client/Modules/Admin/Sites/Add.razor | 89 ++++---- Oqtane.Client/Modules/Admin/Sites/Index.razor | 3 +- .../Modules/Admin/Themes/Index.razor | 1 + Oqtane.Client/Modules/Admin/Users/Index.razor | 3 +- .../Modules/Controls/ActionLink.razor | 1 + .../Modules/Controls/AuditInfo.razor | 9 +- .../Modules/Controls/FileUpload.razor | 4 +- .../Modules/Controls/ModuleMessage.razor | 7 +- .../Modules/Controls/PermissionGrid.razor | 1 + .../Modules/Controls/TriStateCheckBox.razor | 4 +- Oqtane.Client/Modules/Counter/Index.razor | 4 +- Oqtane.Client/Modules/Counter/Module.cs | 2 +- Oqtane.Client/Modules/HtmlText/Edit.razor | 10 +- Oqtane.Client/Modules/HtmlText/Index.razor | 12 +- Oqtane.Client/Modules/HtmlText/Module.cs | 2 +- .../HtmlText/Services/HtmlTextService.cs | 4 +- .../HtmlText/Services/IHtmlTextService.cs | 4 +- Oqtane.Client/Modules/Weather/Index.razor | 3 +- .../Modules/Weather/Models/WeatherForecast.cs | 2 +- Oqtane.Client/Modules/Weather/Module.cs | 2 +- .../Services/IWeatherForecastService.cs | 2 +- .../Services/WeatherForecastService.cs | 2 +- .../Services/Interfaces/IPageService.cs | 1 + Oqtane.Client/Services/PageService.cs | 41 +++- ...Container.razor => ContainerBuilder.razor} | 5 +- Oqtane.Client/Shared/Installer.razor | 1 + Oqtane.Client/Shared/ModuleInstance.razor | 5 +- Oqtane.Client/Shared/Pane.razor | 17 +- Oqtane.Client/Shared/PaneLayout.razor | 5 +- Oqtane.Client/Shared/SiteRouter.razor | 1 + .../{Theme.razor => ThemeBuilder.razor} | 5 +- Oqtane.Client/Shared/Utilities.cs | 6 +- Oqtane.Client/Themes/AdminContainer.razor | 5 +- .../Themes/Controls/ControlPanel.razor | 4 +- Oqtane.Client/Themes/Controls/Login.razor | 1 + Oqtane.Client/Themes/Controls/Logo.razor | 1 + Oqtane.Client/Themes/Controls/Menu.razor | 7 +- Oqtane.Client/Themes/Controls/Menu2.razor | 68 ++++++ .../Themes/Controls/ModuleActions.razor | 3 +- .../Themes/Controls/ModuleTitle.razor | 1 + Oqtane.Client/Themes/Controls/Profile.razor | 1 + Oqtane.Client/Themes/DefaultContainer.razor | 6 +- Oqtane.Client/Themes/Theme1/Container1.razor | 5 +- Oqtane.Client/Themes/Theme1/Theme1.razor | 5 +- Oqtane.Client/Themes/Theme2/Container2.razor | 5 +- Oqtane.Client/Themes/Theme2/Theme2.razor | 5 +- .../Themes/Theme3/HorizontalLayout.razor | 3 +- Oqtane.Client/Themes/Theme3/Theme3.razor | 5 +- .../Themes/Theme3/VerticalLayout.razor | 3 +- Oqtane.Server/Controllers/PageController.cs | 19 ++ .../Controllers/HtmlTextController.cs | 6 +- .../HtmlText/Repository/HtmlTextContext.cs | 4 +- .../HtmlText/Repository/HtmlTextRepository.cs | 4 +- .../Repository/IHtmlTextRepository.cs | 4 +- Oqtane.Server/Scripts/00.00.00.sql | 195 +++++++++--------- Oqtane.Server/wwwroot/css/site.css | 8 + Oqtane.Shared/Models/HtmlTextInfo.cs | 2 +- Oqtane.Shared/Models/Page.cs | 4 + Oqtane.Shared/Models/Site.cs | 2 + Oqtane.Shared/Shared/Constants.cs | 12 +- 73 files changed, 608 insertions(+), 309 deletions(-) rename Oqtane.Client/Modules/Admin/{Admin => Dashboard}/Index.razor (94%) rename Oqtane.Client/Shared/{Container.razor => ContainerBuilder.razor} (87%) rename Oqtane.Client/Shared/{Theme.razor => ThemeBuilder.razor} (81%) create mode 100644 Oqtane.Client/Themes/Controls/Menu2.razor diff --git a/Oqtane.Client/App.razor b/Oqtane.Client/App.razor index bb666be4..9e2793d7 100644 --- a/Oqtane.Client/App.razor +++ b/Oqtane.Client/App.razor @@ -1,5 +1,4 @@ @using Oqtane.Shared -@using Oqtane.Client.Shared @using Oqtane.Services @inject IInstallationService InstallationService diff --git a/Oqtane.Client/Modules/Admin/Admin/Index.razor b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor similarity index 94% rename from Oqtane.Client/Modules/Admin/Admin/Index.razor rename to Oqtane.Client/Modules/Admin/Dashboard/Index.razor index 1717112b..0e2d7fa9 100644 --- a/Oqtane.Client/Modules/Admin/Admin/Index.razor +++ b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor @@ -3,7 +3,7 @@ @using Oqtane.Services @using Oqtane.Models; @using Oqtane.Security -@using Oqtane.Client.Modules.Controls +@namespace Oqtane.Modules.Admin.Dashboard @inherits ModuleBase @inject IPageService PageService @inject IUserService UserService @@ -22,7 +22,8 @@ } } -

+
+
@code { List pages; diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index 5f852efa..2f24c684 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -5,6 +5,7 @@ @using Oqtane.Services @using Oqtane.Providers @using Oqtane.Shared +@namespace Oqtane.Modules.Admin.Login @inherits ModuleBase @inject IUriHelper UriHelper @inject IJSRuntime jsRuntime diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index 9050489e..49980307 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -1,8 +1,9 @@ @using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Modules @using Oqtane.Services @using Oqtane.Shared +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject IUriHelper UriHelper @inject IFileService FileService diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index 9b21ba5e..53ad0d55 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -1,9 +1,9 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase - @inject IModuleDefinitionService ModuleDefinitionService @if (moduledefinitions == null) diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor index 90fb186e..b57abb63 100644 --- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -4,7 +4,8 @@ @using Oqtane.Modules @using Oqtane.Shared @using Oqtane.Security -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls +@namespace Oqtane.Modules.Admin.ModuleSettings @inherits ModuleBase @inject IUriHelper UriHelper @inject IThemeService ThemeService diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 606e1f1b..f67b9184 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -1,10 +1,11 @@ @using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Models @using Oqtane.Services @using Oqtane.Modules @using Oqtane.Shared @using Oqtane.Security +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject IUriHelper UriHelper @inject IPageService PageService @@ -21,34 +22,44 @@ - - - - - - - - - + + @foreach (Page page in pages) { - + } - + - + + @if (children != null && children.Count > 0 && (insert == "<" || insert == ">")) + { + + } @@ -129,10 +140,12 @@ Dictionary themes = new Dictionary(); Dictionary panelayouts = new Dictionary(); + List pages; string name; - string path; string parentid; - string order = ""; + string insert; + List children; + int childid = -1; string isnavigation = "True"; string editmode = "False"; string themetype; @@ -146,6 +159,9 @@ { try { + pages = PageState.Pages.Where(item => item.IsNavigation).ToList(); + children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList(); + themes = ThemeService.GetThemeTypes(PageState.Themes); panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); @@ -160,23 +176,63 @@ } } + private void ParentChanged(UIChangeEventArgs e) + { + try + { + parentid = (string)e.Value; + if (string.IsNullOrEmpty(parentid)) + { + children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList(); + } + else + { + children = PageState.Pages.Where(item => item.ParentId == int.Parse(parentid) && item.IsNavigation).OrderBy(item => item.Order).ToList(); + } + StateHasChanged(); + } + catch (Exception ex) + { + message = ex.Message; + } + } + private async Task SavePage() { try { Page page = new Page(); page.SiteId = PageState.Page.SiteId; + page.Name = name; if (string.IsNullOrEmpty(parentid)) { page.ParentId = null; + page.Path = page.Name.ToLower(); } else { page.ParentId = Int32.Parse(parentid); + Page parent = PageState.Pages.Where(item => item.ParentId == page.ParentId).FirstOrDefault(); + page.Path = parent.Path + "/" + page.Name.ToLower(); + } + 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.Name = name; - page.Path = path; - page.Order = (order == null ? 1 : Int32.Parse(order)); page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); page.EditMode = (editmode == null ? true : Boolean.Parse(editmode)); page.ThemeType = themetype; @@ -195,20 +251,15 @@ page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); page.Permissions = permissiongrid.GetPermissions(); await PageService.AddPageAsync(page); + await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); PageState.Reload = Constants.ReloadSite; - if (PageState.Page.Name == "Page Management") - { - UriHelper.NavigateTo(NavigateUrl()); - } - else - { - UriHelper.NavigateTo(NavigateUrl(path)); - } + UriHelper.NavigateTo(NavigateUrl()); } catch (Exception ex) { message = ex.Message; } } + } diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor index 40749f3b..932597c9 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Delete.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -1,10 +1,11 @@ @using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Models @using Oqtane.Services @using Oqtane.Modules @using Oqtane.Shared @using Oqtane.Security +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject IUriHelper UriHelper @inject IPageService PageService @@ -43,14 +44,6 @@ - - - - - - - - @@ -136,7 +129,6 @@ string name; string path; string parentid; - string order; string isnavigation; string editmode; string themetype; @@ -163,8 +155,6 @@ { name = page.Name; path = page.Path; - - order = page.Order.ToString(); isnavigation = page.IsNavigation.ToString(); editmode = page.EditMode.ToString(); themetype = page.ThemeType; diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index 3b25fb35..ad5ee932 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -1,10 +1,11 @@ @using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Models @using Oqtane.Services @using Oqtane.Modules @using Oqtane.Shared @using Oqtane.Security +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject IUriHelper UriHelper @inject IPageService PageService @@ -26,7 +27,7 @@ - + @@ -34,21 +35,40 @@ - + + @foreach (Page page in pages) { - + } - + - + + @if (children != null && children.Count > 0 && (insert == "<" || insert == ">")) + { + + } @@ -132,11 +152,14 @@ Dictionary themes = new Dictionary(); Dictionary panelayouts = new Dictionary(); + List pages; int PageId; string name; string path; string parentid; - string order; + string insert = ""; + List children; + int childid = -1; string isnavigation; string editmode; string themetype; @@ -154,6 +177,9 @@ { try { + pages = PageState.Pages.Where(item => item.IsNavigation).ToList(); + children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList(); + themes = ThemeService.GetThemeTypes(PageState.Themes); panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); @@ -171,7 +197,6 @@ { parentid = page.ParentId.ToString(); } - order = page.Order.ToString(); isnavigation = page.IsNavigation.ToString(); editmode = page.EditMode.ToString(); themetype = page.ThemeType; @@ -190,23 +215,67 @@ } } + private void ParentChanged(UIChangeEventArgs e) + { + try + { + parentid = (string)e.Value; + if (string.IsNullOrEmpty(parentid)) + { + children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList(); + } + else + { + children = PageState.Pages.Where(item => item.ParentId == int.Parse(parentid) && item.IsNavigation).OrderBy(item => item.Order).ToList(); + } + StateHasChanged(); + } + catch (Exception ex) + { + message = ex.Message; + } + } + private async Task SavePage() { try { Page page = PageState.Page; + int? currentparentid = page.ParentId; page.PageId = Int32.Parse(PageState.QueryString["id"]); + page.Name = name; if (string.IsNullOrEmpty(parentid)) { page.ParentId = null; + page.Path = page.Name.ToLower(); } else { page.ParentId = Int32.Parse(parentid); + Page parent = PageState.Pages.Where(item => item.ParentId == page.ParentId).FirstOrDefault(); + page.Path = parent.Path + "/" + page.Name.ToLower(); + } + 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.Name = name; - page.Path = path; - page.Order = (order == null ? 1 : Int32.Parse(order)); page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); page.EditMode = (editmode == null ? true : Boolean.Parse(editmode)); page.ThemeType = themetype; @@ -225,16 +294,11 @@ page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); page.Permissions = permissiongrid.GetPermissions(); await PageService.UpdatePageAsync(page); + await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); + await PageService.UpdatePageOrderAsync(page.SiteId, currentparentid); PageState.Reload = Constants.ReloadSite; - if (PageState.Page.Name == "Page Management") - { - UriHelper.NavigateTo(NavigateUrl()); - } - else - { - UriHelper.NavigateTo(NavigateUrl(path)); - } + UriHelper.NavigateTo(NavigateUrl()); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index 7f4c861b..1d765897 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -1,15 +1,12 @@ -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules +@using Oqtane.Shared +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase -@inject IPageService PageService -@if (PageState.Pages == null) -{ -

Loading...

-} -else +@if (PageState.Pages != null) { @@ -17,7 +14,6 @@ else - @@ -27,14 +23,14 @@ else - - + } -
   Path Name
@(page.Path)@(page.Name)@(new string('-', page.Level * 2))@(page.Name)
+ + } @code { public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } -} \ No newline at end of file +} diff --git a/Oqtane.Client/Modules/Admin/Profile/Index.razor b/Oqtane.Client/Modules/Admin/Profile/Index.razor index 5139bd11..3aebe474 100644 --- a/Oqtane.Client/Modules/Admin/Profile/Index.razor +++ b/Oqtane.Client/Modules/Admin/Profile/Index.razor @@ -1,8 +1,9 @@ @using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Modules @using Oqtane.Models @using Oqtane.Services +@namespace Oqtane.Modules.Admin.Profile @inherits ModuleBase @inject IUriHelper UriHelper @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor index 3ef9ed16..c9708440 100644 --- a/Oqtane.Client/Modules/Admin/Register/Index.razor +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -2,6 +2,7 @@ @using Oqtane.Modules @using Oqtane.Models @using Oqtane.Services +@namespace Oqtane.Modules.Admin.Register @inherits ModuleBase @inject IUriHelper UriHelper @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Admin/Roles/Index.razor b/Oqtane.Client/Modules/Admin/Roles/Index.razor index 012f2052..f6c55e8e 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Index.razor @@ -1,7 +1,8 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls +@namespace Oqtane.Modules.Admin.Roles @inherits ModuleBase @inject IRoleService RoleService diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor index d55e955f..f71372b9 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Add.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -4,6 +4,7 @@ @using Oqtane.Modules @using Oqtane.Shared @using Oqtane.Security +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject IUriHelper UriHelper @inject ITenantService TenantService @@ -13,52 +14,52 @@ @if (tenants == null) { -

Loading...

+

Loading...

} else { - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- -Cancel + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + Cancel } @code { @@ -98,7 +99,7 @@ else p.Path = ""; p.Order = 1; p.IsNavigation = true; - p.ThemeType = "Oqtane.Client.Themes.Theme1.Theme1, Oqtane.Client"; // TODO: should not hardcode + p.ThemeType = PageState.Site.DefaultThemeType; p.LayoutType = ""; p.Icon = ""; Type type = Type.GetType(p.ThemeType); diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index f80dd108..5520bd54 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -1,7 +1,8 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject ISiteService SiteService diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index 34855ec8..0fbdc3ac 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -1,6 +1,7 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules +@namespace Oqtane.Modules.Admin.Themes @inherits ModuleBase @inject IThemeService ThemeService diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index 481e0ae4..b5e54377 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -1,7 +1,8 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls +@namespace Oqtane.Modules.Admin.Users @inherits ModuleBase @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor index 264a02bd..f1e8c6ce 100644 --- a/Oqtane.Client/Modules/Controls/ActionLink.razor +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -3,6 +3,7 @@ @using Oqtane.Services @using Oqtane.Shared @using Oqtane.Security +@namespace Oqtane.Modules.Controls @inherits ModuleBase @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Controls/AuditInfo.razor b/Oqtane.Client/Modules/Controls/AuditInfo.razor index f03a832b..bba7d0ba 100644 --- a/Oqtane.Client/Modules/Controls/AuditInfo.razor +++ b/Oqtane.Client/Modules/Controls/AuditInfo.razor @@ -1,7 +1,11 @@ @using Oqtane.Modules +@namespace Oqtane.Modules.Controls @inherits ModuleBase -@((MarkupString)@text) +@if (text != "") +{ + @((MarkupString)@text) +} @code { [Parameter] @@ -21,8 +25,9 @@ string text = ""; - protected override void OnInitialized() + protected override void OnParametersSet() { + text = ""; if (!String.IsNullOrEmpty(CreatedBy) || CreatedOn != null) { text += "

Created "; diff --git a/Oqtane.Client/Modules/Controls/FileUpload.razor b/Oqtane.Client/Modules/Controls/FileUpload.razor index b93de437..6f19a0f5 100644 --- a/Oqtane.Client/Modules/Controls/FileUpload.razor +++ b/Oqtane.Client/Modules/Controls/FileUpload.razor @@ -1,4 +1,6 @@ -@if (multiple) +@namespace Oqtane.Modules.Controls + +@if (multiple) { } diff --git a/Oqtane.Client/Modules/Controls/ModuleMessage.razor b/Oqtane.Client/Modules/Controls/ModuleMessage.razor index 5b006331..18b7694e 100644 --- a/Oqtane.Client/Modules/Controls/ModuleMessage.razor +++ b/Oqtane.Client/Modules/Controls/ModuleMessage.razor @@ -1,9 +1,12 @@ @using Oqtane.Modules +@namespace Oqtane.Modules.Controls @inherits ModuleBase @if (Message != "") { -

@Message


+
@Message
+
+
} @code { @@ -13,7 +16,7 @@ [Parameter] public MessageType Type { get; set; } - string type = "alert alert-danger"; + string type = "alert alert-danger"; protected override void OnInitialized() { diff --git a/Oqtane.Client/Modules/Controls/PermissionGrid.razor b/Oqtane.Client/Modules/Controls/PermissionGrid.razor index fa1c9774..0174d1fa 100644 --- a/Oqtane.Client/Modules/Controls/PermissionGrid.razor +++ b/Oqtane.Client/Modules/Controls/PermissionGrid.razor @@ -3,6 +3,7 @@ @using Oqtane.Models @using Oqtane.Security @using Oqtane.Shared +@namespace Oqtane.Modules.Controls @inherits ModuleBase @inject IRoleService RoleService @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor b/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor index 9c75e34d..c8881f3f 100644 --- a/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor +++ b/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor @@ -1,4 +1,6 @@ - +@namespace Oqtane.Modules.Controls + + @code { [Parameter] diff --git a/Oqtane.Client/Modules/Counter/Index.razor b/Oqtane.Client/Modules/Counter/Index.razor index 175aeb38..9b1ef774 100644 --- a/Oqtane.Client/Modules/Counter/Index.razor +++ b/Oqtane.Client/Modules/Counter/Index.razor @@ -1,9 +1,11 @@ @using Oqtane.Modules +@namespace Oqtane.Modules.Counter @inherits ModuleBase Current count: @currentCount
-

+
+
@code { int currentCount = 0; diff --git a/Oqtane.Client/Modules/Counter/Module.cs b/Oqtane.Client/Modules/Counter/Module.cs index c7c95897..972e366f 100644 --- a/Oqtane.Client/Modules/Counter/Module.cs +++ b/Oqtane.Client/Modules/Counter/Module.cs @@ -1,7 +1,7 @@ using Oqtane.Modules; using System.Collections.Generic; -namespace Oqtane.Client.Modules.Counter +namespace Oqtane.Modules.Counter { public class Module : IModule { diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor index 981ce7fe..2ba17971 100644 --- a/Oqtane.Client/Modules/HtmlText/Edit.razor +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -1,10 +1,11 @@ @using Microsoft.AspNetCore.Components.Routing @using Oqtane.Modules -@using Oqtane.Client.Modules.Controls -@using Oqtane.Client.Modules.HtmlText.Services -@using Oqtane.Shared.Modules.HtmlText.Models +@using Oqtane.Modules.Controls +@using Oqtane.Modules.HtmlText.Services +@using Oqtane.Modules.HtmlText.Models @using System.Net.Http; @using Oqtane.Shared; +@namespace Oqtane.Modules.HtmlText @inherits ModuleBase @inject IUriHelper UriHelper @inject HttpClient http @@ -24,7 +25,8 @@ Cancel -

+
+
@code { diff --git a/Oqtane.Client/Modules/HtmlText/Index.razor b/Oqtane.Client/Modules/HtmlText/Index.razor index b635ea9c..c27172b1 100644 --- a/Oqtane.Client/Modules/HtmlText/Index.razor +++ b/Oqtane.Client/Modules/HtmlText/Index.razor @@ -1,9 +1,10 @@ -@using Oqtane.Client.Modules.HtmlText.Services +@using Oqtane.Modules.HtmlText.Services @using Oqtane.Modules -@using Oqtane.Shared.Modules.HtmlText.Models +@using Oqtane.Modules.HtmlText.Models @using System.Net.Http; -@using Oqtane.Client.Modules.Controls +@using Oqtane.Modules.Controls @using Oqtane.Shared; +@namespace Oqtane.Modules.HtmlText @inherits ModuleBase @inject IUriHelper UriHelper @inject HttpClient http @@ -13,7 +14,10 @@ @((MarkupString)content) -


+
+ +
+
@code { string message = ""; diff --git a/Oqtane.Client/Modules/HtmlText/Module.cs b/Oqtane.Client/Modules/HtmlText/Module.cs index c21d8023..2928d111 100644 --- a/Oqtane.Client/Modules/HtmlText/Module.cs +++ b/Oqtane.Client/Modules/HtmlText/Module.cs @@ -1,7 +1,7 @@ using Oqtane.Modules; using System.Collections.Generic; -namespace Oqtane.Client.Modules.HtmlText +namespace Oqtane.Modules.HtmlText { public class Module : IModule { diff --git a/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs b/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs index e5fb4e85..e2849879 100644 --- a/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs +++ b/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs @@ -4,10 +4,10 @@ using System.Threading.Tasks; using System.Net.Http; using Microsoft.AspNetCore.Components; using Oqtane.Services; -using Oqtane.Shared.Modules.HtmlText.Models; +using Oqtane.Modules.HtmlText.Models; using Oqtane.Shared; -namespace Oqtane.Client.Modules.HtmlText.Services +namespace Oqtane.Modules.HtmlText.Services { public class HtmlTextService : ServiceBase, IHtmlTextService { diff --git a/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs b/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs index fe880d87..6ce1d646 100644 --- a/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs +++ b/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Threading.Tasks; -using Oqtane.Shared.Modules.HtmlText.Models; +using Oqtane.Modules.HtmlText.Models; -namespace Oqtane.Client.Modules.HtmlText.Services +namespace Oqtane.Modules.HtmlText.Services { public interface IHtmlTextService { diff --git a/Oqtane.Client/Modules/Weather/Index.razor b/Oqtane.Client/Modules/Weather/Index.razor index 200b279e..55ff47a2 100644 --- a/Oqtane.Client/Modules/Weather/Index.razor +++ b/Oqtane.Client/Modules/Weather/Index.razor @@ -1,5 +1,6 @@ @using Oqtane.Modules -@using Oqtane.Client.Modules.Weather.Services +@using Oqtane.Modules.Weather.Services +@namespace Oqtane.Modules.Weather @inherits ModuleBase @if (forecasts == null) diff --git a/Oqtane.Client/Modules/Weather/Models/WeatherForecast.cs b/Oqtane.Client/Modules/Weather/Models/WeatherForecast.cs index 5831c6f4..7e02ea8a 100644 --- a/Oqtane.Client/Modules/Weather/Models/WeatherForecast.cs +++ b/Oqtane.Client/Modules/Weather/Models/WeatherForecast.cs @@ -1,6 +1,6 @@ using System; -namespace Oqtane.Client.Modules.Weather +namespace Oqtane.Modules.Weather { public class WeatherForecast { diff --git a/Oqtane.Client/Modules/Weather/Module.cs b/Oqtane.Client/Modules/Weather/Module.cs index e4134815..04286cba 100644 --- a/Oqtane.Client/Modules/Weather/Module.cs +++ b/Oqtane.Client/Modules/Weather/Module.cs @@ -1,7 +1,7 @@ using Oqtane.Modules; using System.Collections.Generic; -namespace Oqtane.Client.Modules.Weather +namespace Oqtane.Modules.Weather { public class Module : IModule { diff --git a/Oqtane.Client/Modules/Weather/Services/IWeatherForecastService.cs b/Oqtane.Client/Modules/Weather/Services/IWeatherForecastService.cs index 883ce664..743848fb 100644 --- a/Oqtane.Client/Modules/Weather/Services/IWeatherForecastService.cs +++ b/Oqtane.Client/Modules/Weather/Services/IWeatherForecastService.cs @@ -1,7 +1,7 @@ using System; using System.Threading.Tasks; -namespace Oqtane.Client.Modules.Weather.Services +namespace Oqtane.Modules.Weather.Services { public interface IWeatherForecastService { diff --git a/Oqtane.Client/Modules/Weather/Services/WeatherForecastService.cs b/Oqtane.Client/Modules/Weather/Services/WeatherForecastService.cs index e2c02b23..e6ad13d9 100644 --- a/Oqtane.Client/Modules/Weather/Services/WeatherForecastService.cs +++ b/Oqtane.Client/Modules/Weather/Services/WeatherForecastService.cs @@ -3,7 +3,7 @@ using System; using System.Linq; using System.Threading.Tasks; -namespace Oqtane.Client.Modules.Weather.Services +namespace Oqtane.Modules.Weather.Services { public class WeatherForecastService : IWeatherForecastService { diff --git a/Oqtane.Client/Services/Interfaces/IPageService.cs b/Oqtane.Client/Services/Interfaces/IPageService.cs index 846c7b9a..d1ec74f4 100644 --- a/Oqtane.Client/Services/Interfaces/IPageService.cs +++ b/Oqtane.Client/Services/Interfaces/IPageService.cs @@ -10,6 +10,7 @@ namespace Oqtane.Services Task GetPageAsync(int PageId); Task AddPageAsync(Page Page); Task UpdatePageAsync(Page Page); + Task UpdatePageOrderAsync(int SiteId, int? ParentId); Task DeletePageAsync(int PageId); } } diff --git a/Oqtane.Client/Services/PageService.cs b/Oqtane.Client/Services/PageService.cs index 74f75e15..e23ea0f1 100644 --- a/Oqtane.Client/Services/PageService.cs +++ b/Oqtane.Client/Services/PageService.cs @@ -5,6 +5,7 @@ using System.Net.Http; using Microsoft.AspNetCore.Components; using System.Collections.Generic; using Oqtane.Shared; +using System; namespace Oqtane.Services { @@ -29,7 +30,8 @@ namespace Oqtane.Services public async Task> GetPagesAsync(int SiteId) { List pages = await http.GetJsonAsync>(apiurl + "?siteid=" + SiteId.ToString()); - return pages.OrderBy(item => item.Order).ToList(); + pages = GetPagesHierarchy(pages); + return pages; } public async Task GetPageAsync(int PageId) @@ -46,9 +48,46 @@ namespace Oqtane.Services { return await http.PutJsonAsync(apiurl + "/" + Page.PageId.ToString(), Page); } + + public async Task UpdatePageOrderAsync(int SiteId, int? ParentId) + { + await http.PutJsonAsync(apiurl + "/?siteid=" + SiteId.ToString() + "&parentid=" + ((ParentId == null) ? "" : ParentId.ToString()), null); + } + public async Task DeletePageAsync(int PageId) { await http.DeleteAsync(apiurl + "/" + PageId.ToString()); } + + private static List GetPagesHierarchy(List Pages) + { + List hierarchy = new List(); + Action, Page> GetPath = null; + GetPath = (List pages, Page page) => + { + IEnumerable children; + int level; + if (page == null) + { + level = -1; + children = Pages.Where(item => item.ParentId == null); + } + else + { + level = page.Level; + children = Pages.Where(item => item.ParentId == page.PageId); + } + foreach (Page child in children) + { + child.Level = level + 1; + child.HasChildren = Pages.Where(item => item.ParentId == child.PageId).Any(); + hierarchy.Add(child); + GetPath(pages, child); + } + }; + Pages = Pages.OrderBy(item => item.Order).ToList(); + GetPath(Pages, null); + return hierarchy; + } } } diff --git a/Oqtane.Client/Shared/Container.razor b/Oqtane.Client/Shared/ContainerBuilder.razor similarity index 87% rename from Oqtane.Client/Shared/Container.razor rename to Oqtane.Client/Shared/ContainerBuilder.razor index 3f18b975..10e30bf7 100644 --- a/Oqtane.Client/Shared/Container.razor +++ b/Oqtane.Client/Shared/ContainerBuilder.razor @@ -1,6 +1,7 @@ @using Oqtane.Models @using Oqtane.Shared @using Oqtane.Modules +@namespace Oqtane.Shared @DynamicComponent @@ -36,8 +37,8 @@ } else { - // container does not exist with type specified - builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl)); + // container does not exist with type specified + builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl)); builder.AddAttribute(1, "Message", "Error Loading Module Container " + container); builder.CloseComponent(); } diff --git a/Oqtane.Client/Shared/Installer.razor b/Oqtane.Client/Shared/Installer.razor index 7be53818..de2bf1b4 100644 --- a/Oqtane.Client/Shared/Installer.razor +++ b/Oqtane.Client/Shared/Installer.razor @@ -1,6 +1,7 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Shared +@namespace Oqtane.Shared @inject IUriHelper UriHelper @inject IInstallationService InstallationService @inject IUserService UserService diff --git a/Oqtane.Client/Shared/ModuleInstance.razor b/Oqtane.Client/Shared/ModuleInstance.razor index d1f8ef2e..2b67de38 100644 --- a/Oqtane.Client/Shared/ModuleInstance.razor +++ b/Oqtane.Client/Shared/ModuleInstance.razor @@ -1,6 +1,7 @@ @using Oqtane.Models @using Oqtane.Shared @using Oqtane.Modules +@namespace Oqtane.Shared @DynamicComponent @@ -34,8 +35,8 @@ } else { - // module does not exist with typename specified - builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl)); + // module does not exist with typename specified + builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl)); builder.AddAttribute(1, "Message", "Error Loading Component For Module " + ModuleState.ModuleDefinitionName); builder.CloseComponent(); } diff --git a/Oqtane.Client/Shared/Pane.razor b/Oqtane.Client/Shared/Pane.razor index 7da6fe9a..cb66c01e 100644 --- a/Oqtane.Client/Shared/Pane.razor +++ b/Oqtane.Client/Shared/Pane.razor @@ -5,6 +5,7 @@ @using Oqtane.Shared @using Oqtane.Security @using System.Linq +@namespace Oqtane.Shared @inject IUserService UserService @inject IModuleService ModuleService @inject IModuleDefinitionService ModuleDefinitionService @@ -66,8 +67,8 @@ } else { - // verify security access level for this module control - switch (module.SecurityAccessLevel) + // verify security access level for this module control + switch (module.SecurityAccessLevel) { case SecurityAccessLevel.Anonymous: authorized = true; @@ -99,8 +100,8 @@ } else { - // module control does not exist with name specified - } + // module control does not exist with name specified + } } } } @@ -111,8 +112,8 @@ Module module = PageState.Modules.Where(item => item.ModuleId == PageState.ModuleId).FirstOrDefault(); if (module != null && module.Pane == Name) { - // check if user is authorized to view module - if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions)) + // check if user is authorized to view module + if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions)) { builder.OpenComponent(0, Type.GetType(Constants.DefaultContainer)); builder.AddAttribute(1, "Module", module); @@ -124,8 +125,8 @@ { foreach (Module module in PageState.Modules.Where(item => item.Pane == Name).OrderBy(x => x.Order).ToArray()) { - // check if user is authorized to view module - if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions)) + // check if user is authorized to view module + if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions)) { builder.OpenComponent(0, Type.GetType(Constants.DefaultContainer)); builder.AddAttribute(1, "Module", module); diff --git a/Oqtane.Client/Shared/PaneLayout.razor b/Oqtane.Client/Shared/PaneLayout.razor index 268d9ecc..71366a87 100644 --- a/Oqtane.Client/Shared/PaneLayout.razor +++ b/Oqtane.Client/Shared/PaneLayout.razor @@ -1,5 +1,6 @@ @using System @using Oqtane.Shared +@namespace Oqtane.Shared @DynamicComponent @@ -21,8 +22,8 @@ } else { - // layout does not exist with type specified - } + // layout does not exist with type specified + } }; } } \ No newline at end of file diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor index 74e23b2b..779de435 100644 --- a/Oqtane.Client/Shared/SiteRouter.razor +++ b/Oqtane.Client/Shared/SiteRouter.razor @@ -7,6 +7,7 @@ @using Oqtane.Shared @using Oqtane.Security @using Microsoft.AspNetCore.Components.Routing +@namespace Oqtane.Shared @inject AuthenticationStateProvider AuthenticationStateProvider @inject SiteState SiteState @inject IUriHelper UriHelper diff --git a/Oqtane.Client/Shared/Theme.razor b/Oqtane.Client/Shared/ThemeBuilder.razor similarity index 81% rename from Oqtane.Client/Shared/Theme.razor rename to Oqtane.Client/Shared/ThemeBuilder.razor index fd29a0df..63cdc8da 100644 --- a/Oqtane.Client/Shared/Theme.razor +++ b/Oqtane.Client/Shared/ThemeBuilder.razor @@ -1,5 +1,6 @@ @using Oqtane.Shared @using Oqtane.Modules +@namespace Oqtane.Shared @DynamicComponent @@ -20,8 +21,8 @@ } else { - // theme does not exist with type specified - builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl)); + // theme does not exist with type specified + builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl)); builder.AddAttribute(1, "Message", "Error Loading Page Theme " + PageState.Page.ThemeType); builder.CloseComponent(); } diff --git a/Oqtane.Client/Shared/Utilities.cs b/Oqtane.Client/Shared/Utilities.cs index f4a60e71..f25ead1c 100644 --- a/Oqtane.Client/Shared/Utilities.cs +++ b/Oqtane.Client/Shared/Utilities.cs @@ -1,5 +1,7 @@ -using System; -using Oqtane.Models; +using Oqtane.Models; +using System; +using System.Collections.Generic; +using System.Linq; namespace Oqtane.Shared { diff --git a/Oqtane.Client/Themes/AdminContainer.razor b/Oqtane.Client/Themes/AdminContainer.razor index ff2f67f1..c7380739 100644 --- a/Oqtane.Client/Themes/AdminContainer.razor +++ b/Oqtane.Client/Themes/AdminContainer.razor @@ -1,7 +1,6 @@ @using Oqtane.Shared -@using Oqtane.Themes -@using Oqtane.Client.Themes.Controls -@using Oqtane.Client.Shared +@using Oqtane.Themes.Controls +@namespace Oqtane.Themes @inherits ContainerBase