From 35b9b9e89b273a09d53bbe46b74c6568b5f2c597 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Mon, 16 Sep 2019 16:14:17 -0400 Subject: [PATCH 01/96] Optimized page reloading --- Oqtane.Client/Modules/Admin/Login/Index.razor | 3 +- .../Modules/Admin/ModuleDefinitions/Add.razor | 3 +- .../Modules/Admin/ModuleSettings/Index.razor | 3 +- Oqtane.Client/Modules/Admin/Pages/Add.razor | 3 +- .../Modules/Admin/Pages/Delete.razor | 10 +--- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 3 +- Oqtane.Client/Modules/Admin/Themes/Add.razor | 50 +++++++++++++++++ .../Modules/Admin/Themes/Index.razor | 3 +- Oqtane.Client/Modules/HtmlText/Edit.razor | 3 +- .../HtmlText/Services/HtmlTextService.cs | 13 ++++- Oqtane.Client/Modules/ModuleBase.cs | 19 ++++++- .../Services/Interfaces/IThemeService.cs | 1 + Oqtane.Client/Services/ThemeService.cs | 5 ++ Oqtane.Client/Shared/PageState.cs | 1 - Oqtane.Client/Shared/Reload.cs | 10 ++++ Oqtane.Client/Shared/SiteRouter.razor | 56 ++++++++++--------- Oqtane.Client/Shared/Utilities.cs | 8 ++- Oqtane.Client/Themes/ContainerBase.cs | 20 ++++++- .../Themes/Controls/ControlPanel.razor | 6 +- Oqtane.Client/Themes/Controls/Login.razor | 3 +- .../Themes/Controls/ModuleActions.razor | 3 +- Oqtane.Client/Themes/ThemeBase.cs | 19 ++++++- Oqtane.Client/Themes/ThemeObjectBase.cs | 19 ++++++- Oqtane.Server/Controllers/ThemeController.cs | 50 ++++++++++++++++- Oqtane.Server/Repository/ThemeRepository.cs | 2 +- Oqtane.Server/Scripts/00.00.00.sql | 25 +++++---- Oqtane.Server/Startup.cs | 33 +++++++++-- Oqtane.Shared/Models/Alias.cs | 18 +++++- Oqtane.Shared/Models/Role.cs | 1 + 29 files changed, 304 insertions(+), 89 deletions(-) create mode 100644 Oqtane.Client/Modules/Admin/Themes/Add.razor create mode 100644 Oqtane.Client/Shared/Reload.cs diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index b8a77ec6..06157646 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -89,8 +89,7 @@ if (user.IsAuthenticated) { authstateprovider.NotifyAuthenticationChanged(); - PageState.Reload = Constants.ReloadSite; - NavigationManager.NavigateTo(NavigateUrl(ReturnUrl)); + NavigationManager.NavigateTo(NavigateUrl(ReturnUrl, Reload.Site)); } else { diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index 4789f600..b9a6ea41 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -45,7 +45,6 @@ else private async Task InstallFile() { await ModuleDefinitionService.InstallModulesAsync(); - PageState.Reload = Constants.ReloadApplication; - NavigationManager.NavigateTo(NavigateUrl()); + NavigationManager.NavigateTo(NavigateUrl(Reload.Application)); } } diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor index 26c7ebfe..51869930 100644 --- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -121,8 +121,7 @@ moduleType.GetMethod("UpdateSettings").Invoke(settings, null); // method must be public in settings component } - PageState.Reload = Constants.ReloadPage; - NavigationManager.NavigateTo(NavigateUrl()); + NavigationManager.NavigateTo(NavigateUrl(Reload.Page)); } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index bcf77cf5..2a105bcf 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -278,8 +278,7 @@ await PageService.AddPageAsync(page); await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); - PageState.Reload = Constants.ReloadSite; - NavigationManager.NavigateTo(NavigateUrl(page.Path)); + NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor index 37075775..7a4fc272 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Delete.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -179,15 +179,7 @@ try { await PageService.DeletePageAsync(Int32.Parse(PageState.QueryString["id"])); - PageState.Reload = Constants.ReloadSite; - if (PageState.Page.Name == "Page Management") - { - NavigationManager.NavigateTo(NavigateUrl()); - } - else - { - NavigationManager.NavigateTo(NavigateUrl("")); - } + NavigationManager.NavigateTo(NavigateUrl("", Reload.Site)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index 65107ecc..80cca79d 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -354,8 +354,7 @@ } } - PageState.Reload = Constants.ReloadSite; - NavigationManager.NavigateTo(NavigateUrl(page.Path)); + NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor new file mode 100644 index 00000000..6e9d80c5 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -0,0 +1,50 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Oqtane.Modules.Controls +@using Oqtane.Modules +@using Oqtane.Services +@using Oqtane.Shared +@namespace Oqtane.Modules.Admin.Themes +@inherits ModuleBase +@inject NavigationManager NavigationManager +@inject IFileService FileService +@inject IThemeService ThemeService + + + + + + +
+ + + +
+@if (uploaded) +{ + +} +else +{ + +} +Cancel + +@code { + public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } + + bool uploaded = false; + + private async Task UploadFile() + { + await FileService.UploadFilesAsync("Themes"); + uploaded = true; + StateHasChanged(); + } + + private async Task InstallFile() + { + await ThemeService.InstallThemesAsync(); + NavigationManager.NavigateTo(NavigateUrl(Reload.Application)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index f272dba6..d1c188fb 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -2,9 +2,9 @@ @using Oqtane.Services @using Oqtane.Models @using Oqtane.Modules +@using Oqtane.Modules.Controls @namespace Oqtane.Modules.Admin.Themes @inherits ModuleBase - @inject IThemeService ThemeService @if (Themes == null) @@ -13,6 +13,7 @@ } else { + diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor index 887bd056..aa3a20ae 100644 --- a/Oqtane.Client/Modules/HtmlText/Edit.razor +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -80,8 +80,7 @@ htmltext.Content = content; await htmltextservice.AddHtmlTextAsync(htmltext); } - PageState.Reload = Constants.ReloadPage; - NavigationManager.NavigateTo(NavigateUrl()); + NavigationManager.NavigateTo(NavigateUrl(Reload.Page)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs b/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs index d3c602c7..47244ed3 100644 --- a/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs +++ b/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Components; using Oqtane.Services; using Oqtane.Modules.HtmlText.Models; using Oqtane.Shared; +using System.Text.Json; namespace Oqtane.Modules.HtmlText.Services { @@ -29,7 +30,17 @@ namespace Oqtane.Modules.HtmlText.Services public async Task GetHtmlTextAsync(int ModuleId) { - return await http.GetJsonAsync(apiurl + "/" + ModuleId.ToString() + "?entityid=" + ModuleId.ToString()); + HtmlTextInfo htmltext; + try + { + // exception handling is required because GetJsonAsync() returns an error if no content exists for the ModuleId ( https://github.com/aspnet/AspNetCore/issues/14041 ) + htmltext = await http.GetJsonAsync(apiurl + "/" + ModuleId.ToString() + "?entityid=" + ModuleId.ToString()); + } + catch + { + htmltext = null; + } + return htmltext; } public async Task AddHtmlTextAsync(HtmlTextInfo htmltext) diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index 6f176c38..0f2fba26 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -25,14 +25,29 @@ namespace Oqtane.Modules return NavigateUrl(PageState.Page.Path); } + public string NavigateUrl(Reload reload) + { + return NavigateUrl(PageState.Page.Path, reload); + } + public string NavigateUrl(string path) { - return NavigateUrl(path, ""); + return NavigateUrl(path, "", Reload.None); + } + + public string NavigateUrl(string path, Reload reload) + { + return NavigateUrl(path, "", reload); } public string NavigateUrl(string path, string parameters) { - return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters); + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None); + } + + public string NavigateUrl(string path, string parameters, Reload reload) + { + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload); } public string EditUrl(string action) diff --git a/Oqtane.Client/Services/Interfaces/IThemeService.cs b/Oqtane.Client/Services/Interfaces/IThemeService.cs index dcc6f674..8ed4db1e 100644 --- a/Oqtane.Client/Services/Interfaces/IThemeService.cs +++ b/Oqtane.Client/Services/Interfaces/IThemeService.cs @@ -10,5 +10,6 @@ namespace Oqtane.Services Dictionary GetThemeTypes(List themes); Dictionary GetPaneLayoutTypes(List themes); Dictionary GetContainerTypes(List themes); + Task InstallThemesAsync(); } } diff --git a/Oqtane.Client/Services/ThemeService.cs b/Oqtane.Client/Services/ThemeService.cs index 46a75c9e..670372f1 100644 --- a/Oqtane.Client/Services/ThemeService.cs +++ b/Oqtane.Client/Services/ThemeService.cs @@ -99,5 +99,10 @@ namespace Oqtane.Services } return selectableContainers; } + + public async Task InstallThemesAsync() + { + await http.GetJsonAsync>(apiurl + "/install"); + } } } diff --git a/Oqtane.Client/Shared/PageState.cs b/Oqtane.Client/Shared/PageState.cs index 37721465..f8dfe93e 100644 --- a/Oqtane.Client/Shared/PageState.cs +++ b/Oqtane.Client/Shared/PageState.cs @@ -21,6 +21,5 @@ namespace Oqtane.Shared public string Control { get; set; } public bool EditMode { get; set; } public bool DesignMode { get; set; } - public int Reload { get; set; } } } diff --git a/Oqtane.Client/Shared/Reload.cs b/Oqtane.Client/Shared/Reload.cs new file mode 100644 index 00000000..18e8f448 --- /dev/null +++ b/Oqtane.Client/Shared/Reload.cs @@ -0,0 +1,10 @@ +namespace Oqtane.Shared +{ + public enum Reload + { + None, + Page, + Site, + Application + } +} diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor index e4c9d1d1..c32d15d1 100644 --- a/Oqtane.Client/Shared/SiteRouter.razor +++ b/Oqtane.Client/Shared/SiteRouter.razor @@ -90,16 +90,34 @@ string control = ""; bool editmode = false; bool designmode = false; - int reload = 0; + Reload reload = Reload.None; + + // get Url path and querystring ( and remove anchors ) + string path = new Uri(_absoluteUri).PathAndQuery.Substring(1); + if (path.IndexOf("#") != -1) + { + path = path.Substring(0, path.IndexOf("#")); + } + + // parse querystring and remove + Dictionary querystring = new Dictionary(); + if (path.IndexOf("?") != -1) + { + querystring = ParseQueryString(path); + path = path.Substring(0, path.IndexOf("?")); + } + if (querystring.ContainsKey("reload")) + { + reload = (Reload)int.Parse(querystring["reload"]); + } if (PageState != null) { - reload = PageState.Reload; editmode = PageState.EditMode; designmode = PageState.DesignMode; } - if (PageState == null || reload == Constants.ReloadApplication) + if (PageState == null || reload == Reload.Application) { moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); themes = await ThemeService.GetThemesAsync(); @@ -119,9 +137,9 @@ { alias = GetAlias(_absoluteUri, aliases); SiteState.Alias = alias; // set state for services - reload = Constants.ReloadSite; + reload = Reload.Site; } - if (PageState == null || reload <= Constants.ReloadSite) + if (PageState == null || reload <= Reload.Site) { site = await SiteService.GetSiteAsync(alias.SiteId); } @@ -131,7 +149,7 @@ } if (site != null) { - if (PageState == null || reload >= Constants.ReloadSite) + if (PageState == null || reload >= Reload.Site) { pages = await PageService.GetPagesAsync(site.SiteId); } @@ -140,21 +158,6 @@ pages = PageState.Pages; } - // get Url path and querystring ( and remove anchors ) - string path = new Uri(_absoluteUri).PathAndQuery.Substring(1); - if (path.IndexOf("#") != -1) - { - path = path.Substring(0, path.IndexOf("#")); - } - - // parse querystring and remove - Dictionary querystring = new Dictionary(); - if (path.IndexOf("?") != -1) - { - querystring = ParseQueryString(path); - path = path.Substring(0, path.IndexOf("?")); - } - // format path and remove alias path = path.Replace("//", "/"); if (!path.EndsWith("/")) { path += "/"; } @@ -185,7 +188,7 @@ // remove trailing slash so it can be used as a key for Pages if (path.EndsWith("/")) path = path.Substring(0, path.Length - 1); - if (PageState == null || reload >= Constants.ReloadPage) + if (PageState == null || reload >= Reload.Page) { page = pages.Where(item => item.Path == path).FirstOrDefault(); } @@ -204,13 +207,13 @@ if (page.Path != path) { page = pages.Where(item => item.Path == path).FirstOrDefault(); - reload = Constants.ReloadPage; + reload = Reload.Page; editmode = page.EditMode; designmode = false; } user = null; - if (PageState == null || reload >= Constants.ReloadPage) + if (PageState == null || reload >= Reload.Page) { var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); if (authState.User.Identity.IsAuthenticated) @@ -244,10 +247,10 @@ if (PageState != null && (PageState.ModuleId != pagestate.ModuleId || PageState.Control != pagestate.Control)) { - reload = Constants.ReloadPage; + reload = Reload.Page; } - if (PageState == null || reload >= Constants.ReloadPage) + if (PageState == null || reload >= Reload.Page) { modules = await ModuleService.GetModulesAsync(page.PageId); modules = ProcessModules(modules, moduledefinitions, pagestate.Control, page.Panes); @@ -259,7 +262,6 @@ pagestate.Modules = modules; pagestate.EditMode = editmode; pagestate.DesignMode = designmode; - pagestate.Reload = Constants.ReloadReset; OnStateChange?.Invoke(pagestate); } diff --git a/Oqtane.Client/Shared/Utilities.cs b/Oqtane.Client/Shared/Utilities.cs index b4775f6d..cd2af1d3 100644 --- a/Oqtane.Client/Shared/Utilities.cs +++ b/Oqtane.Client/Shared/Utilities.cs @@ -6,7 +6,7 @@ namespace Oqtane.Shared public class Utilities { - public static string NavigateUrl(string alias, string path, string parameters) + public static string NavigateUrl(string alias, string path, string parameters, Reload reload) { string url = ""; if (alias != "") @@ -25,6 +25,10 @@ namespace Oqtane.Shared { url += "?" + parameters; } + if (reload != Reload.None) + { + url += ((string.IsNullOrEmpty(parameters)) ? "?" : "&") + "reload=" + ((int)reload).ToString(); + } if (!url.StartsWith("/")) { url = "/" + url; @@ -34,7 +38,7 @@ namespace Oqtane.Shared public static string EditUrl(string alias, string path, int moduleid, string action, string parameters) { - string url = NavigateUrl(alias, path, ""); + string url = NavigateUrl(alias, path, "", Reload.None); if (url == "/") url = ""; if (moduleid != -1) { diff --git a/Oqtane.Client/Themes/ContainerBase.cs b/Oqtane.Client/Themes/ContainerBase.cs index 6a939f5b..d234002d 100644 --- a/Oqtane.Client/Themes/ContainerBase.cs +++ b/Oqtane.Client/Themes/ContainerBase.cs @@ -19,15 +19,31 @@ namespace Oqtane.Themes return NavigateUrl(PageState.Page.Path); } + public string NavigateUrl(Reload reload) + { + return NavigateUrl(PageState.Page.Path, reload); + } + public string NavigateUrl(string path) { - return NavigateUrl(path, ""); + return NavigateUrl(path, "", Reload.None); + } + + public string NavigateUrl(string path, Reload reload) + { + return NavigateUrl(path, "", reload); } public string NavigateUrl(string path, string parameters) { - return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters); + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None); } + + public string NavigateUrl(string path, string parameters, Reload reload) + { + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload); + } + public string EditUrl(string action, string parameters) { return EditUrl(ModuleState.ModuleId, action, parameters); diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index 3d95a44f..0ad52951 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -164,8 +164,7 @@ await PageModuleService.AddPageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); - PageState.Reload = Constants.ReloadPage; - NavigationManager.NavigateTo(NavigateUrl()); + NavigationManager.NavigateTo(NavigateUrl(Reload.Page)); } } @@ -204,8 +203,7 @@ PageState.EditMode = true; PageState.DesignMode = true; } - PageState.Reload = Constants.ReloadPage; - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + PageState.EditMode.ToString().ToLower())); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + PageState.EditMode.ToString().ToLower(), Reload.Page)); } } } \ No newline at end of file diff --git a/Oqtane.Client/Themes/Controls/Login.razor b/Oqtane.Client/Themes/Controls/Login.razor index 83106017..14aa4f75 100644 --- a/Oqtane.Client/Themes/Controls/Login.razor +++ b/Oqtane.Client/Themes/Controls/Login.razor @@ -53,8 +53,7 @@ { // client-side Blazor authstateprovider.NotifyAuthenticationChanged(); - PageState.Reload = Constants.ReloadSite; - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "logout")); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "logout", Reload.Site)); } } } diff --git a/Oqtane.Client/Themes/Controls/ModuleActions.razor b/Oqtane.Client/Themes/Controls/ModuleActions.razor index a1f3d7d1..eb8b698e 100644 --- a/Oqtane.Client/Themes/Controls/ModuleActions.razor +++ b/Oqtane.Client/Themes/Controls/ModuleActions.razor @@ -65,7 +65,7 @@ { PageModule pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId); - string url = NavigateUrl(); + string url = NavigateUrl(Reload.Page); switch (action) { case "<<": @@ -104,7 +104,6 @@ await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pane); break; } - PageState.Reload = Constants.ReloadPage; NavigationManager.NavigateTo(url); } } diff --git a/Oqtane.Client/Themes/ThemeBase.cs b/Oqtane.Client/Themes/ThemeBase.cs index 2ad2956c..dd539a39 100644 --- a/Oqtane.Client/Themes/ThemeBase.cs +++ b/Oqtane.Client/Themes/ThemeBase.cs @@ -15,14 +15,29 @@ namespace Oqtane.Themes return NavigateUrl(PageState.Page.Path); } + public string NavigateUrl(Reload reload) + { + return NavigateUrl(PageState.Page.Path, reload); + } + public string NavigateUrl(string path) { - return NavigateUrl(path, ""); + return NavigateUrl(path, "", Reload.None); + } + + public string NavigateUrl(string path, Reload reload) + { + return NavigateUrl(path, "", reload); } public string NavigateUrl(string path, string parameters) { - return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters); + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None); + } + + public string NavigateUrl(string path, string parameters, Reload reload) + { + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload); } } diff --git a/Oqtane.Client/Themes/ThemeObjectBase.cs b/Oqtane.Client/Themes/ThemeObjectBase.cs index efa59f63..e5284b7f 100644 --- a/Oqtane.Client/Themes/ThemeObjectBase.cs +++ b/Oqtane.Client/Themes/ThemeObjectBase.cs @@ -13,14 +13,29 @@ namespace Oqtane.Themes return NavigateUrl(PageState.Page.Path); } + public string NavigateUrl(Reload reload) + { + return NavigateUrl(PageState.Page.Path, reload); + } + public string NavigateUrl(string path) { - return NavigateUrl(path, ""); + return NavigateUrl(path, "", Reload.None); + } + + public string NavigateUrl(string path, Reload reload) + { + return NavigateUrl(path, "", reload); } public string NavigateUrl(string path, string parameters) { - return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters); + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None); + } + + public string NavigateUrl(string path, string parameters, Reload reload) + { + return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload); } public string EditUrl(int moduleid, string action) diff --git a/Oqtane.Server/Controllers/ThemeController.cs b/Oqtane.Server/Controllers/ThemeController.cs index 8cb7afe9..c8e409fb 100644 --- a/Oqtane.Server/Controllers/ThemeController.cs +++ b/Oqtane.Server/Controllers/ThemeController.cs @@ -2,6 +2,13 @@ using Microsoft.AspNetCore.Mvc; using Oqtane.Repository; using Oqtane.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Hosting; +using Oqtane.Shared; +using System.IO; +using Microsoft.AspNetCore.Hosting; +using System.Reflection; +using System.IO.Compression; namespace Oqtane.Controllers { @@ -9,10 +16,14 @@ namespace Oqtane.Controllers public class ThemeController : Controller { private readonly IThemeRepository Themes; + private readonly IHostApplicationLifetime HostApplicationLifetime; + private readonly IWebHostEnvironment environment; - public ThemeController(IThemeRepository Themes) + public ThemeController(IThemeRepository Themes, IHostApplicationLifetime HostApplicationLifetime, IWebHostEnvironment environment) { this.Themes = Themes; + this.HostApplicationLifetime = HostApplicationLifetime; + this.environment = environment; } // GET: api/ @@ -21,5 +32,42 @@ namespace Oqtane.Controllers { return Themes.GetThemes(); } + + [HttpGet("install")] + [Authorize(Roles = Constants.HostRole)] + public void InstallThemes() + { + bool install = false; + string themefolder = Path.Combine(environment.WebRootPath, "Themes"); + string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + + // iterate through theme packages + foreach (string packagename in Directory.GetFiles(themefolder, "*.nupkg")) + { + // iterate through files and deploy to appropriate locations + using (ZipArchive archive = ZipFile.OpenRead(packagename)) + { + foreach (ZipArchiveEntry entry in archive.Entries) + { + string filename = Path.GetFileName(entry.FullName); + switch (Path.GetExtension(filename)) + { + case ".dll": + entry.ExtractToFile(Path.Combine(binfolder, filename)); + break; + } + } + } + // remove theme package + System.IO.File.Delete(packagename); + install = true; + } + + if (install) + { + // restart application + HostApplicationLifetime.StopApplication(); + } + } } } diff --git a/Oqtane.Server/Repository/ThemeRepository.cs b/Oqtane.Server/Repository/ThemeRepository.cs index 5cac43fc..b9547e93 100644 --- a/Oqtane.Server/Repository/ThemeRepository.cs +++ b/Oqtane.Server/Repository/ThemeRepository.cs @@ -24,7 +24,7 @@ namespace Oqtane.Repository // iterate through Oqtane theme assemblies Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies() .Where(item => item.FullName.StartsWith("Oqtane.") || item.FullName.Contains(".Theme.")).ToArray(); - foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) + foreach (Assembly assembly in assemblies) { Themes = LoadThemesFromAssembly(Themes, assembly); } diff --git a/Oqtane.Server/Scripts/00.00.00.sql b/Oqtane.Server/Scripts/00.00.00.sql index 3c6c6b7f..153357f7 100644 --- a/Oqtane.Server/Scripts/00.00.00.sql +++ b/Oqtane.Server/Scripts/00.00.00.sql @@ -116,6 +116,7 @@ CREATE TABLE [dbo].[Role]( [Name] [nvarchar](256) NOT NULL, [Description] [nvarchar](50) NOT NULL, [IsAutoAssigned] [bit] NOT NULL, + [IsSystem] [bit] NOT NULL, [CreatedBy] [nvarchar](256) NOT NULL, [CreatedOn] [datetime] NOT NULL, [ModifiedBy] [nvarchar](256) NOT NULL, @@ -361,23 +362,23 @@ GO SET IDENTITY_INSERT [dbo].[Role] ON GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (-1, null, N'All Users', N'All Users', 0, '', getdate(), '', getdate()) +INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) +VALUES (-1, null, N'All Users', N'All Users', 0, 1, '', getdate(), '', getdate()) GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (0, null, N'Host Users', N'Host Users', 0, '', getdate(), '', getdate()) +INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) +VALUES (0, null, N'Host Users', N'Host Users', 0, 1, '', getdate(), '', getdate()) GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, 1, N'Administrators', N'Site Administrators', 0, '', getdate(), '', getdate()) +INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) +VALUES (1, 1, N'Administrators', N'Site Administrators', 0, 1, '', getdate(), '', getdate()) GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, 1, N'Registered Users', N'Registered Users', 1, '', getdate(), '', getdate()) +INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) +VALUES (2, 1, N'Registered Users', N'Registered Users', 1, 1, '', getdate(), '', getdate()) GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, 2, N'Administrators', N'Site Administrators', 0, '', getdate(), '', getdate()) +INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) +VALUES (3, 2, N'Administrators', N'Site Administrators', 0, 1, '', getdate(), '', getdate()) GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, 2, N'Registered Users', N'Registered Users', 1, '', getdate(), '', getdate()) +INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) +VALUES (4, 2, N'Registered Users', N'Registered Users', 1, 1, '', getdate(), '', getdate()) GO SET IDENTITY_INSERT [dbo].[Role] OFF GO diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 9f7a77bf..8eac0f46 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -146,11 +146,11 @@ namespace Oqtane.Server // get list of loaded assemblies Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); - - // iterate through Oqtane module assemblies in /bin ( filter is narrow to optimize loading process ) string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); DirectoryInfo folder = new DirectoryInfo(path); List moduleassemblies = new List(); + + // iterate through Oqtane module assemblies in /bin ( filter is narrow to optimize loading process ) foreach (FileInfo file in folder.EnumerateFiles("*.Module.*.dll")) { // check if assembly is already loaded @@ -163,6 +163,18 @@ namespace Oqtane.Server } } + // iterate through Oqtane theme assemblies in /bin ( filter is narrow to optimize loading process ) + foreach (FileInfo file in folder.EnumerateFiles("*.Theme.*.dll")) + { + // check if assembly is already loaded + Assembly assembly = assemblies.Where(item => item.Location == file.FullName).FirstOrDefault(); + if (assembly == null) + { + // load assembly ( as long as dependencies are in /bin they will load as well ) + assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(file.FullName); + } + } + services.AddMvc().AddModuleAssemblies(moduleassemblies).AddNewtonsoftJson(); // register singleton scoped core services @@ -313,11 +325,11 @@ namespace Oqtane.Server // get list of loaded assemblies Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); - - // iterate through Oqtane module assemblies in /bin ( filter is narrow to optimize loading process ) string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); DirectoryInfo folder = new DirectoryInfo(path); List moduleassemblies = new List(); + + // iterate through Oqtane module assemblies in /bin ( filter is narrow to optimize loading process ) foreach (FileInfo file in folder.EnumerateFiles("*.Module.*.dll")) { // check if assembly is already loaded @@ -330,6 +342,18 @@ namespace Oqtane.Server } } + // iterate through Oqtane theme assemblies in /bin ( filter is narrow to optimize loading process ) + foreach (FileInfo file in folder.EnumerateFiles("*.Theme.*.dll")) + { + // check if assembly is already loaded + Assembly assembly = assemblies.Where(item => item.Location == file.FullName).FirstOrDefault(); + if (assembly == null) + { + // load assembly ( as long as dependencies are in /bin they will load as well ) + assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(file.FullName); + } + } + services.AddMvc().AddModuleAssemblies(moduleassemblies).AddNewtonsoftJson(); // register singleton scoped core services @@ -399,6 +423,7 @@ namespace Oqtane.Server } app.UseClientSideBlazorFiles(); + app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); diff --git a/Oqtane.Shared/Models/Alias.cs b/Oqtane.Shared/Models/Alias.cs index f22648b8..92442601 100644 --- a/Oqtane.Shared/Models/Alias.cs +++ b/Oqtane.Shared/Models/Alias.cs @@ -28,6 +28,20 @@ namespace Oqtane.Models } } + [NotMapped] + public string BaseUrl + { + get + { + string name = Name; + if (name.Contains("/")) + { + name = name.Substring(0, name.IndexOf("/")); + } + return Scheme + "://" + name; + } + } + [NotMapped] public string Path { @@ -58,7 +72,7 @@ namespace Oqtane.Models { get { - return Url + "/Tenants/" + TenantId.ToString() + "/"; + return BaseUrl + "/Tenants/" + TenantId.ToString() + "/"; } } @@ -76,7 +90,7 @@ namespace Oqtane.Models { get { - return Url + "/Tenants/" + TenantId.ToString() + "/Sites/" + SiteId.ToString() + "/"; + return BaseUrl + "/Tenants/" + TenantId.ToString() + "/Sites/" + SiteId.ToString() + "/"; } } } diff --git a/Oqtane.Shared/Models/Role.cs b/Oqtane.Shared/Models/Role.cs index 03da1f77..c9a316b5 100644 --- a/Oqtane.Shared/Models/Role.cs +++ b/Oqtane.Shared/Models/Role.cs @@ -9,6 +9,7 @@ namespace Oqtane.Models public string Name { get; set; } public string Description { get; set; } public bool IsAutoAssigned { get; set; } + public bool IsSystem { get; set; } public string CreatedBy { get; set; } public DateTime CreatedOn { get; set; } From ec89e0ed4db3ec30a9c6047c214cf5af51710b70 Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Tue, 17 Sep 2019 11:17:17 +0200 Subject: [PATCH 02/96] update to RC1 --- Oqtane.Client/Oqtane.Client.csproj | 8 ++++---- Oqtane.Server/Oqtane.Server.csproj | 10 +++++----- Oqtane.Shared/Oqtane.Shared.csproj | 4 ++-- README.md | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj index 8e2d7039..e5fd25d8 100644 --- a/Oqtane.Client/Oqtane.Client.csproj +++ b/Oqtane.Client/Oqtane.Client.csproj @@ -27,10 +27,10 @@ - - - - + + + + diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj index 94f97e2f..9dce1d41 100644 --- a/Oqtane.Server/Oqtane.Server.csproj +++ b/Oqtane.Server/Oqtane.Server.csproj @@ -38,11 +38,11 @@ - - - - - + + + + + diff --git a/Oqtane.Shared/Oqtane.Shared.csproj b/Oqtane.Shared/Oqtane.Shared.csproj index 080a5c8c..4db70474 100644 --- a/Oqtane.Shared/Oqtane.Shared.csproj +++ b/Oqtane.Shared/Oqtane.Shared.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/README.md b/README.md index be3b3a1f..195c8091 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Oqtane uses Blazor, a new web framework for .NET Core that lets you build intera **To get started with Oqtane:** - 1. Oqtane is currently compatible with **[.NET Core 3.0 Preview 9 SDK (3.0.0-preview9.19424.4)](https://dotnet.microsoft.com/download/dotnet-core/3.0)**. + 1. Oqtane is currently compatible with **[.NET Core 3.0 RC 1 SDK (3.0.100-rc1-014190)](https://dotnet.microsoft.com/download/dotnet-core/3.0)**. 2. Install the latest **Preview** edition of [Visual Studio 2019](https://visualstudio.com/preview) with the **ASP.NET and web development** workload. Installing the latest **Preview** edition will also install the latest preview of .NET Core 3. From 83a212e7e3733e03f7f95de915a6c5343fbca480 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Thu, 19 Sep 2019 16:33:48 -0400 Subject: [PATCH 03/96] Refactor host user security model, support static assets in modules and themes, module definition permissions and categories, paging control, remove SiteUsers, move seed data from script to site template for installation --- .../Modules/Admin/Dashboard/Index.razor | 16 +- .../Admin/ModuleDefinitions/Edit.razor | 91 +++ .../Admin/ModuleDefinitions/Index.razor | 12 +- .../Modules/Admin/ModuleSettings/Index.razor | 4 +- Oqtane.Client/Modules/Admin/Pages/Add.razor | 4 +- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 4 +- Oqtane.Client/Modules/Admin/Pages/Index.razor | 33 +- .../Modules/Admin/Register/Index.razor | 1 - Oqtane.Client/Modules/Admin/Sites/Add.razor | 66 ++- Oqtane.Client/Modules/Admin/Tenants/Add.razor | 62 +++ .../Modules/Admin/Tenants/Index.razor | 43 ++ Oqtane.Client/Modules/Admin/Users/Index.razor | 15 +- Oqtane.Client/Modules/Controls/Pager.razor | 150 +++++ .../Modules/Controls/PermissionGrid.razor | 6 +- Oqtane.Client/Modules/ModuleBase.cs | 5 + .../{Interfaces => }/InstallationService.cs | 0 .../Interfaces/IModuleDefinitionService.cs | 3 +- .../Services/Interfaces/ITenantService.cs | 2 + .../Services/Interfaces/IUserRoleService.cs | 2 +- .../Services/Interfaces/IUserService.cs | 2 +- .../Services/ModuleDefinitionService.cs | 9 +- Oqtane.Client/Services/TenantService.cs | 5 + Oqtane.Client/Services/UserRoleService.cs | 4 +- Oqtane.Client/Services/UserService.cs | 4 +- Oqtane.Client/Shared/Installer.razor | 12 +- Oqtane.Client/Shared/SiteRouter.razor | 4 +- .../Themes/Controls/ControlPanel.razor | 53 +- Oqtane.Client/Themes/Controls/Login.razor | 4 +- Oqtane.Client/Themes/Controls/Logo.razor | 2 +- Oqtane.Client/Themes/Controls/Menu.razor | 4 +- Oqtane.Client/Themes/Controls/Profile.razor | 2 +- Oqtane.Client/Themes/ThemeBase.cs | 19 + ...ThemeObjectBase.cs => ThemeControlBase.cs} | 2 +- .../Controllers/ModuleDefinitionController.cs | 61 +- Oqtane.Server/Controllers/SiteController.cs | 16 +- Oqtane.Server/Controllers/ThemeController.cs | 46 +- Oqtane.Server/Controllers/UserController.cs | 153 ++--- .../Controllers/UserRoleController.cs | 6 +- Oqtane.Server/Infrastructure/IInstallation.cs | 7 + Oqtane.Server/Infrastructure/Installation.cs | 72 +++ .../Repository/Context/MasterDBContext.cs | 1 + .../Repository/Context/TenantDBContext.cs | 1 - .../Interfaces/IModuleDefinitionRepository.cs | 4 +- .../Interfaces/ISiteUserRepository.cs | 16 - .../Interfaces/IUserRoleRepository.cs | 2 +- .../Repository/ModuleDefinitionRepository.cs | 52 +- Oqtane.Server/Repository/SiteRepository.cs | 114 +++- .../Repository/SiteUserRepository.cs | 60 -- Oqtane.Server/Repository/ThemeRepository.cs | 17 +- .../Repository/UserRoleRepository.cs | 15 +- Oqtane.Server/Scripts/00.00.00.sql | 525 +----------------- Oqtane.Server/Scripts/Master.sql | 17 +- .../Security/ClaimsPrincipalFactory.cs | 18 +- Oqtane.Server/Startup.cs | 55 +- Oqtane.Shared/Models/ModuleDefinition.cs | 34 +- Oqtane.Shared/Models/PageTemplate.cs | 18 + Oqtane.Shared/Models/Site.cs | 1 + Oqtane.Shared/Models/SiteUser.cs | 18 - Oqtane.Shared/Models/User.cs | 2 +- Oqtane.Shared/Models/UserRole.cs | 2 + Oqtane.Shared/Shared/Constants.cs | 1 + 61 files changed, 1000 insertions(+), 979 deletions(-) create mode 100644 Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor create mode 100644 Oqtane.Client/Modules/Admin/Tenants/Add.razor create mode 100644 Oqtane.Client/Modules/Admin/Tenants/Index.razor create mode 100644 Oqtane.Client/Modules/Controls/Pager.razor rename Oqtane.Client/Services/{Interfaces => }/InstallationService.cs (100%) rename Oqtane.Client/Themes/{ThemeObjectBase.cs => ThemeControlBase.cs} (96%) create mode 100644 Oqtane.Server/Infrastructure/IInstallation.cs create mode 100644 Oqtane.Server/Infrastructure/Installation.cs delete mode 100644 Oqtane.Server/Repository/Interfaces/ISiteUserRepository.cs delete mode 100644 Oqtane.Server/Repository/SiteUserRepository.cs create mode 100644 Oqtane.Shared/Models/PageTemplate.cs delete mode 100644 Oqtane.Shared/Models/SiteUser.cs diff --git a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor index f2eb40b9..ec2be216 100644 --- a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor +++ b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor @@ -9,20 +9,20 @@ @inject IPageService PageService @inject IUserService UserService -
    +
    @foreach (var p in pages) { if (UserSecurity.IsAuthorized(PageState.User, "View", p.Permissions)) { string url = NavigateUrl(p.Path); -
  • +
    - @p.Name +

    @p.Name
    -
  • +
    } } -
+

@@ -31,7 +31,7 @@ protected override void OnInitialized() { - // display list of pages which are children of current page - pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).ToList(); + // display list of pages which are children of current page + pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).ToList(); } -} \ No newline at end of file +} diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor new file mode 100644 index 00000000..d14c0647 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor @@ -0,0 +1,91 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Oqtane.Modules.Controls +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Security +@namespace Oqtane.Modules.Admin.ModuleDefinitions +@inherits ModuleBase +@inject IModuleDefinitionService ModuleDefinitionService +@inject NavigationManager NavigationManager + + + +
+ + + + + + + + +
+ + + +
+ + + +
+ +Cancel +
+
+ + +@code { + public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } + + string message = ""; + + int ModuleDefinitionId; + string name; + string permissions; + string createdby; + DateTime createdon; + string modifiedby; + DateTime modifiedon; + + PermissionGrid permissiongrid; + + protected override void OnInitialized() + { + try + { + ModuleDefinitionId = Int32.Parse(PageState.QueryString["id"]); + ModuleDefinition moduledefinition = PageState.ModuleDefinitions.Where(item => item.ModuleDefinitionId == ModuleDefinitionId).FirstOrDefault(); + if (moduledefinition != null) + { + name = moduledefinition.Name; + permissions = moduledefinition.Permissions; + createdby = moduledefinition.CreatedBy; + createdon = moduledefinition.CreatedOn; + modifiedby = moduledefinition.ModifiedBy; + modifiedon = moduledefinition.ModifiedOn; + } + } + catch (Exception ex) + { + message = ex.Message; + } + } + + private async Task SaveModuleDefinition() + { + try + { + ModuleDefinition moduledefinition = PageState.ModuleDefinitions.Where(item => item.ModuleDefinitionId == ModuleDefinitionId).FirstOrDefault(); + moduledefinition.Permissions = permissiongrid.GetPermissions(); + await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition); + NavigationManager.NavigateTo(NavigateUrl(Reload.Site)); + } + catch (Exception ex) + { + message = ex.Message; + } + } +} diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index f887bfa8..5bc1eac1 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -17,15 +17,19 @@ else + + @foreach (var moduledefinition in moduledefinitions) { - - - + + + + + }
  NameVersion
@moduledefinition.Name
@moduledefinition.Name@moduledefinition.Version
@@ -38,6 +42,6 @@ else protected override async Task OnInitializedAsync() { - moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); + moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); } } \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor index 51869930..469c9499 100644 --- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -44,7 +44,7 @@ - + @@ -76,6 +76,7 @@ Dictionary containers = new Dictionary(); string title; string containertype; + string permissionnames = ""; string permissions; string pageid; @@ -90,6 +91,7 @@ containers = ThemeService.GetContainerTypes(await ThemeService.GetThemesAsync()); containertype = ModuleState.ContainerType; permissions = ModuleState.Permissions; + permissionnames = PageState.ModuleDefinitions.Find(item => item.ModuleDefinitionName == ModuleState.ModuleDefinitionName).PermissionNames; pageid = ModuleState.PageId.ToString(); DynamicComponent = builder => diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 2a105bcf..b5f12f42 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -37,7 +37,7 @@ - + @foreach (Page page in pages) { if (page.PageId.ToString() == parentid) @@ -237,7 +237,7 @@ try { parentid = (string)e.Value; - if (string.IsNullOrEmpty(parentid)) + if (parentid == "-1") { children = PageState.Pages.Where(item => item.ParentId == null).ToList(); } diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index 0f6cdf99..5e6e69da 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -9,27 +9,20 @@ @if (PageState.Pages != null) { - - - - - - - - - - - @foreach (Page page in PageState.Pages) - { - - - - - - } - -
  Name
@(new string('-', page.Level * 2))@(page.Name)
+ + +
+ Name +   +   +
+ + @(new string('-', context.Level * 2))@(context.Name) + + + +
} @code { diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor index a85e78eb..54e5640e 100644 --- a/Oqtane.Client/Modules/Admin/Register/Index.razor +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -34,7 +34,6 @@ user.Username = Email; user.DisplayName = Email; user.Email = Email; - user.IsHost = false; user.Password = Password; await UserService.AddUserAsync(user); NavigationManager.NavigateTo(""); diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor index 83315f12..62cec359 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Add.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -11,7 +11,7 @@ @inject ITenantService TenantService @inject IAliasService AliasService @inject ISiteService SiteService -@inject IPageService PageService +@inject IThemeService ThemeService @if (tenants == null) { @@ -58,6 +58,34 @@ else + + + + + + + + + + + + + + + + Cancel @@ -66,15 +94,23 @@ else @code { public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } + Dictionary themes = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + List tenants; string tenantid = ""; string name = ""; string url = ""; string logo = ""; + string themetype; + string layouttype; protected override async Task OnInitializedAsync() { tenants = await TenantService.GetTenantsAsync(); + url = PageState.Alias.Name; + themes = ThemeService.GetThemeTypes(PageState.Themes); + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); } private async Task SaveSite() @@ -82,9 +118,9 @@ else Site site = new Site(); site.Name = name; site.Logo = (logo == null ? "" : logo); - await SiteService.AddSiteAsync(site); - List sites = await SiteService.GetSitesAsync(); - site = sites.Where(item => item.Name == name).FirstOrDefault(); + site.DefaultThemeType = themetype; + site.DefaultLayoutType = (layouttype == null ? "" : layouttype); + site = await SiteService.AddSiteAsync(site); Alias alias = new Alias(); alias.Name = url; @@ -92,28 +128,6 @@ else alias.SiteId = site.SiteId; await AliasService.AddAliasAsync(alias); - // need to add a home page and admin pages - Page p = new Page(); - p.SiteId = site.SiteId; - p.ParentId = null; - p.Name = "Home"; - p.Path = ""; - p.Order = 1; - p.IsNavigation = true; - p.ThemeType = PageState.Site.DefaultThemeType; - p.LayoutType = ""; - p.Icon = ""; - Type type = Type.GetType(p.ThemeType); - System.Reflection.PropertyInfo property = type.GetProperty("Panes"); - p.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); - - List permissionstrings = new List(); - permissionstrings.Add(new PermissionString { PermissionName = "View", Permissions = Constants.AllUsersRole }); - permissionstrings.Add(new PermissionString { PermissionName = "Edit", Permissions = Constants.AdminRole }); - p.Permissions = UserSecurity.SetPermissionStrings(permissionstrings); - - await PageService.AddPageAsync(p); - NavigationManager.NavigateTo(url, true); } } diff --git a/Oqtane.Client/Modules/Admin/Tenants/Add.razor b/Oqtane.Client/Modules/Admin/Tenants/Add.razor new file mode 100644 index 00000000..50a2e0bd --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Tenants/Add.razor @@ -0,0 +1,62 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Security +@namespace Oqtane.Modules.Admin.Tenants +@inherits ModuleBase +@inject NavigationManager NavigationManager +@inject ITenantService TenantService +@inject IAliasService AliasService +@inject ISiteService SiteService +@inject IPageService PageService + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@code { + public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } + + string name = ""; + string connectionstring = ""; + string schema = ""; + + private async Task SaveTenant() + { + Tenant tenant = new Tenant(); + tenant.Name = name; + tenant.DBConnectionString = connectionstring; + tenant.DBSchema = schema; + await TenantService.AddTenantAsync(tenant); + + NavigationManager.NavigateTo(NavigateUrl()); + } +} diff --git a/Oqtane.Client/Modules/Admin/Tenants/Index.razor b/Oqtane.Client/Modules/Admin/Tenants/Index.razor new file mode 100644 index 00000000..1f1f618e --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Tenants/Index.razor @@ -0,0 +1,43 @@ +@using Microsoft.AspNetCore.Components.Web +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Modules.Controls +@namespace Oqtane.Modules.Admin.Tenants +@inherits ModuleBase +@inject ITenantService TenantService + +@if (Tenants == null) +{ +

Loading...

+} +else +{ + + + + + + + + + @foreach (var Tenant in Tenants) + { + + + + } + +
Name
@Tenant.Name
+} + +@code { + public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } + + List Tenants; + + protected override async Task OnInitializedAsync() + { + Tenants = await TenantService.GetTenantsAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index d7c6e048..bc0cf117 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -3,12 +3,12 @@ @using Oqtane.Models @using Oqtane.Modules @using Oqtane.Modules.Controls +@using Oqtane.Shared @namespace Oqtane.Modules.Admin.Users @inherits ModuleBase +@inject IUserRoleService UserRoleService -@inject IUserService UserService - -@if (Users == null) +@if (userroles == null) {

Loading...

} @@ -21,10 +21,10 @@ else - @foreach (var User in Users) + @foreach (UserRole userrole in userroles) { - @User.Username + @userrole.User.Username } @@ -34,10 +34,11 @@ else @code { public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } - List Users; + List userroles; protected override async Task OnInitializedAsync() { - Users = await UserService.GetUsersAsync(PageState.Site.SiteId); + userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); + userroles = userroles.Where(item => item.Role.Name == Constants.RegisteredRole).ToList(); } } \ No newline at end of file diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor new file mode 100644 index 00000000..60c2a8f8 --- /dev/null +++ b/Oqtane.Client/Modules/Controls/Pager.razor @@ -0,0 +1,150 @@ +@using Oqtane.Modules +@using Microsoft.AspNetCore.Components.Web +@namespace Oqtane.Modules.Controls +@inherits ModuleBase +@typeparam TableItem + +

+ + + @Header + + + @foreach (var item in ItemList) + { + @Row(item) + } + +
+

+

+ +@code { + int Pages; + int Page; + int MaxItems; + int MaxPages; + int StartPage; + int EndPage; + + [Parameter] + public RenderFragment Header { get; set; } + + [Parameter] + public RenderFragment Row { get; set; } + + [Parameter] + public IEnumerable Items { get; set; } + + [Parameter] + public string PageSize { get; set; } + + [Parameter] + public string DisplayPages { get; set; } + + IEnumerable ItemList { get; set; } + + protected override void OnInitialized() + { + if (string.IsNullOrEmpty(PageSize)) + { + MaxItems = 5; + } + else + { + MaxItems = int.Parse(PageSize); + } + if (string.IsNullOrEmpty(DisplayPages)) + { + MaxPages = 5; + } + else + { + MaxPages = int.Parse(DisplayPages); + } + Page = 1; + + ItemList = Items.Skip((Page - 1) * MaxItems).Take(MaxItems); + Pages = (int)Math.Ceiling(Items.Count() / (decimal)MaxItems); + + SetPagerSize("forward"); + } + + public void UpdateList(int CurrentPage) + { + ItemList = Items.Skip((Page - 1) * MaxItems).Take(MaxItems); + Page = CurrentPage; + StateHasChanged(); + } + + public void SetPagerSize(string direction) + { + if (direction == "forward") + { + StartPage = EndPage + 1; + if (EndPage + MaxPages < Pages) + { + EndPage = StartPage + MaxPages - 1; + } + else + { + EndPage = Pages; + } + StateHasChanged(); + } + else if (direction == "back") + { + EndPage = StartPage - 1; + StartPage = StartPage - MaxPages; + } + } + + public void NavigateToPage(string direction) + { + if (direction == "next") + { + if (Page < Pages) + { + if (Page == EndPage) + { + SetPagerSize("forward"); + } + Page += 1; + } + } + else if (direction == "previous") + { + if (Page > 1) + { + if (Page == StartPage) + { + SetPagerSize("back"); + } + Page -= 1; + } + } + UpdateList(Page); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Controls/PermissionGrid.razor b/Oqtane.Client/Modules/Controls/PermissionGrid.razor index 130b0dde..8aa2e331 100644 --- a/Oqtane.Client/Modules/Controls/PermissionGrid.razor +++ b/Oqtane.Client/Modules/Controls/PermissionGrid.razor @@ -83,6 +83,9 @@ [Parameter] public string EntityName { get; set; } + [Parameter] + public string PermissionNames { get; set; } + [Parameter] public string Permissions { get; set; } @@ -95,8 +98,7 @@ protected override async Task OnInitializedAsync() { - permissionnames = PageState.ModuleDefinitions.Find(item => item.ModuleDefinitionName == ModuleState.ModuleDefinitionName).Permissions; - if (string.IsNullOrEmpty(permissionnames)) + if (string.IsNullOrEmpty(PermissionNames)) { permissionnames = "View,Edit"; } diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index 0f2fba26..be430e57 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -20,6 +20,11 @@ namespace Oqtane.Modules public virtual bool UseAdminContainer { get { return true; } } + public string ModulePath() + { + return "Modules/" + this.GetType().Namespace + "/"; + } + public string NavigateUrl() { return NavigateUrl(PageState.Page.Path); diff --git a/Oqtane.Client/Services/Interfaces/InstallationService.cs b/Oqtane.Client/Services/InstallationService.cs similarity index 100% rename from Oqtane.Client/Services/Interfaces/InstallationService.cs rename to Oqtane.Client/Services/InstallationService.cs diff --git a/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs b/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs index 6d54bbc9..47872218 100644 --- a/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs +++ b/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs @@ -6,7 +6,8 @@ namespace Oqtane.Services { public interface IModuleDefinitionService { - Task> GetModuleDefinitionsAsync(); + Task> GetModuleDefinitionsAsync(int SiteId); + Task UpdateModuleDefinitionAsync(ModuleDefinition ModuleDefinition); Task InstallModulesAsync(); } } diff --git a/Oqtane.Client/Services/Interfaces/ITenantService.cs b/Oqtane.Client/Services/Interfaces/ITenantService.cs index bf6b5c08..1b93116a 100644 --- a/Oqtane.Client/Services/Interfaces/ITenantService.cs +++ b/Oqtane.Client/Services/Interfaces/ITenantService.cs @@ -9,5 +9,7 @@ namespace Oqtane.Services Task> GetTenantsAsync(); Task GetTenantAsync(); + + Task AddTenantAsync(Tenant Tenant); } } diff --git a/Oqtane.Client/Services/Interfaces/IUserRoleService.cs b/Oqtane.Client/Services/Interfaces/IUserRoleService.cs index 9030e2c1..f3bcfaa6 100644 --- a/Oqtane.Client/Services/Interfaces/IUserRoleService.cs +++ b/Oqtane.Client/Services/Interfaces/IUserRoleService.cs @@ -7,7 +7,7 @@ namespace Oqtane.Services public interface IUserRoleService { Task> GetUserRolesAsync(); - Task> GetUserRolesAsync(int UserId); + Task> GetUserRolesAsync(int SiteId); Task GetUserRoleAsync(int UserRoleId); Task AddUserRoleAsync(UserRole UserRole); Task UpdateUserRoleAsync(UserRole UserRole); diff --git a/Oqtane.Client/Services/Interfaces/IUserService.cs b/Oqtane.Client/Services/Interfaces/IUserService.cs index 9b0a0ead..9544b355 100644 --- a/Oqtane.Client/Services/Interfaces/IUserService.cs +++ b/Oqtane.Client/Services/Interfaces/IUserService.cs @@ -6,7 +6,7 @@ namespace Oqtane.Services { public interface IUserService { - Task> GetUsersAsync(int SiteId); + Task> GetUsersAsync(); Task GetUserAsync(int UserId, int SiteId); diff --git a/Oqtane.Client/Services/ModuleDefinitionService.cs b/Oqtane.Client/Services/ModuleDefinitionService.cs index a75e94e2..e3a84994 100644 --- a/Oqtane.Client/Services/ModuleDefinitionService.cs +++ b/Oqtane.Client/Services/ModuleDefinitionService.cs @@ -28,10 +28,10 @@ namespace Oqtane.Services get { return CreateApiUrl(sitestate.Alias, NavigationManager.Uri, "ModuleDefinition"); } } - public async Task> GetModuleDefinitionsAsync() + public async Task> GetModuleDefinitionsAsync(int SiteId) { // get list of modules from the server - List moduledefinitions = await http.GetJsonAsync>(apiurl); + List moduledefinitions = await http.GetJsonAsync>(apiurl + "?siteid=" + SiteId.ToString()); // get list of loaded assemblies on the client ( in the client-side hosting module the browser client has its own app domain ) Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); @@ -64,6 +64,11 @@ namespace Oqtane.Services return moduledefinitions.OrderBy(item => item.Name).ToList(); } + public async Task UpdateModuleDefinitionAsync(ModuleDefinition ModuleDefinition) + { + await http.PutJsonAsync(apiurl + "/" + ModuleDefinition.ModuleDefinitionId.ToString(), ModuleDefinition); + } + public async Task InstallModulesAsync() { await http.GetJsonAsync>(apiurl + "/install"); diff --git a/Oqtane.Client/Services/TenantService.cs b/Oqtane.Client/Services/TenantService.cs index cfd868c4..73205612 100644 --- a/Oqtane.Client/Services/TenantService.cs +++ b/Oqtane.Client/Services/TenantService.cs @@ -36,5 +36,10 @@ namespace Oqtane.Services { return await http.GetJsonAsync(apiurl); } + + public async Task AddTenantAsync(Tenant Tenant) + { + return await http.PostJsonAsync(apiurl, Tenant); + } } } diff --git a/Oqtane.Client/Services/UserRoleService.cs b/Oqtane.Client/Services/UserRoleService.cs index 148173bf..bd384ef2 100644 --- a/Oqtane.Client/Services/UserRoleService.cs +++ b/Oqtane.Client/Services/UserRoleService.cs @@ -31,9 +31,9 @@ namespace Oqtane.Services return await http.GetJsonAsync>(apiurl); } - public async Task> GetUserRolesAsync(int UserId) + public async Task> GetUserRolesAsync(int SiteId) { - return await http.GetJsonAsync>(apiurl + "?userid=" + UserId.ToString()); + return await http.GetJsonAsync>(apiurl + "?siteid=" + SiteId.ToString()); } public async Task GetUserRoleAsync(int UserRoleId) diff --git a/Oqtane.Client/Services/UserService.cs b/Oqtane.Client/Services/UserService.cs index ecf3ed7a..23156458 100644 --- a/Oqtane.Client/Services/UserService.cs +++ b/Oqtane.Client/Services/UserService.cs @@ -27,9 +27,9 @@ namespace Oqtane.Services get { return CreateApiUrl(sitestate.Alias, NavigationManager.Uri, "User"); } } - public async Task> GetUsersAsync(int SiteId) + public async Task> GetUsersAsync() { - List users = await http.GetJsonAsync>(apiurl + "?siteid=" + SiteId.ToString()); + List users = await http.GetJsonAsync>(apiurl); return users.OrderBy(item => item.DisplayName).ToList(); } diff --git a/Oqtane.Client/Shared/Installer.razor b/Oqtane.Client/Shared/Installer.razor index 5c62bdcc..3b278a54 100644 --- a/Oqtane.Client/Shared/Installer.razor +++ b/Oqtane.Client/Shared/Installer.razor @@ -5,6 +5,8 @@ @namespace Oqtane.Shared @inject NavigationManager NavigationManager @inject IInstallationService InstallationService +@inject ISiteService SiteService +@inject IAliasService AliasService @inject IUserService UserService
@@ -165,12 +167,18 @@ GenericResponse response = await InstallationService.Install(connectionstring); if (response.Success) { + Site site = new Site(); + site.Name = "Site1"; + site.Logo = "oqtane.png"; + site.DefaultThemeType = "Oqtane.Themes.Theme2.Theme2, Oqtane.Client"; + site.DefaultLayoutType = ""; + site = await SiteService.AddSiteAsync(site); + User user = new User(); - user.SiteId = 1; + user.SiteId = site.SiteId; user.Username = Email; user.DisplayName = Email; user.Email = Email; - user.IsHost = true; user.Password = HostPassword; user = await UserService.AddUserAsync(user); diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor index c32d15d1..3f4c06ce 100644 --- a/Oqtane.Client/Shared/SiteRouter.razor +++ b/Oqtane.Client/Shared/SiteRouter.razor @@ -119,14 +119,12 @@ if (PageState == null || reload == Reload.Application) { - moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); themes = await ThemeService.GetThemesAsync(); aliases = await AliasService.GetAliasesAsync(); alias = null; } else { - moduledefinitions = PageState.ModuleDefinitions; themes = PageState.Themes; aliases = PageState.Aliases; alias = PageState.Alias; @@ -151,10 +149,12 @@ { if (PageState == null || reload >= Reload.Site) { + moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(site.SiteId); pages = await PageService.GetPagesAsync(site.SiteId); } else { + moduledefinitions = PageState.ModuleDefinitions; pages = PageState.Pages; } diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index 0ad52951..38d5be96 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -6,7 +6,7 @@ @using Oqtane.Shared @using Oqtane.Security @namespace Oqtane.Themes.Controls -@inherits ThemeObjectBase +@inherits ThemeControlBase @inject NavigationManager NavigationManager @inject IUserService UserService @inject IModuleDefinitionService ModuleDefinitionService @@ -40,11 +40,21 @@ @if (moduledefinitions != null) { + } @@ -115,9 +125,11 @@ } @code { + List categories = new List(); List moduledefinitions; Dictionary containers = new Dictionary(); int pagemanagementmoduleid = -1; + string category = ""; string moduledefinitionname = ""; string pane = ""; string title = ""; @@ -127,7 +139,20 @@ { if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) { - moduledefinitions = PageState.ModuleDefinitions; + foreach(ModuleDefinition moduledefinition in PageState.ModuleDefinitions) + { + if (moduledefinition.Categories != "") + { + foreach(string category in moduledefinition.Categories.Split(',')) + { + if (!categories.Contains(category)) + { + categories.Add(category); + } + } + } + } + moduledefinitions = PageState.ModuleDefinitions.Where(item => item.Categories == "").ToList(); containers = ThemeService.GetContainerTypes(PageState.Themes); List modules = await ModuleService.GetModulesAsync(PageState.Site.SiteId, Constants.PageManagementModule); if (modules.Count > 0) @@ -137,6 +162,21 @@ } } + private void CategoryChanged(ChangeEventArgs e) + { + string category = (string)e.Value; + if (category == "-") + { + moduledefinitions = PageState.ModuleDefinitions.Where(item => item.Categories == "").ToList(); + } + else + { + moduledefinitions = PageState.ModuleDefinitions.Where(item => item.Categories.Contains(e.Value.ToString())).ToList(); + } + moduledefinitionname = ""; + StateHasChanged(); + } + private async Task AddModule() { if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) @@ -145,14 +185,11 @@ module.SiteId = PageState.Site.SiteId; module.ModuleDefinitionName = moduledefinitionname; module.Permissions = PageState.Page.Permissions; - await ModuleService.AddModuleAsync(module); - - List modules = await ModuleService.GetModulesAsync(PageState.Site.SiteId, moduledefinitionname); - int ModuleId = modules.LastOrDefault().ModuleId; + module = await ModuleService.AddModuleAsync(module); PageModule pagemodule = new PageModule(); pagemodule.PageId = PageState.Page.PageId; - pagemodule.ModuleId = ModuleId; + pagemodule.ModuleId = module.ModuleId; if (title == "") { title = moduledefinitions.Where(item => item.ModuleDefinitionName == moduledefinitionname).FirstOrDefault().Name; diff --git a/Oqtane.Client/Themes/Controls/Login.razor b/Oqtane.Client/Themes/Controls/Login.razor index 14aa4f75..b8b1d788 100644 --- a/Oqtane.Client/Themes/Controls/Login.razor +++ b/Oqtane.Client/Themes/Controls/Login.razor @@ -6,7 +6,7 @@ @using Oqtane.Shared @using Microsoft.JSInterop @namespace Oqtane.Themes.Controls -@inherits ThemeObjectBase +@inherits ThemeControlBase @inject NavigationManager NavigationManager @inject IUserService UserService @inject IJSRuntime jsRuntime @@ -33,7 +33,7 @@ { returnurl += "/" + PageState.Page.Path; } - NavigationManager.NavigateTo("login?returnurl=" + returnurl); + NavigationManager.NavigateTo(NavigateUrl("login", "returnurl=" + returnurl)); } private async Task LogoutUser() diff --git a/Oqtane.Client/Themes/Controls/Logo.razor b/Oqtane.Client/Themes/Controls/Logo.razor index fc319ed7..549660b8 100644 --- a/Oqtane.Client/Themes/Controls/Logo.razor +++ b/Oqtane.Client/Themes/Controls/Logo.razor @@ -1,7 +1,7 @@ @using Microsoft.AspNetCore.Components.Web @using Oqtane.Themes @namespace Oqtane.Themes.Controls -@inherits ThemeObjectBase +@inherits ThemeControlBase @((MarkupString)logo) diff --git a/Oqtane.Client/Themes/Controls/Menu.razor b/Oqtane.Client/Themes/Controls/Menu.razor index 7aca05a8..00cf792f 100644 --- a/Oqtane.Client/Themes/Controls/Menu.razor +++ b/Oqtane.Client/Themes/Controls/Menu.razor @@ -5,7 +5,7 @@ @using Oqtane.Models; @using Oqtane.Security @namespace Oqtane.Themes.Controls -@inherits ThemeObjectBase +@inherits ThemeControlBase @inject IUserService UserService @if (menu != "") @@ -37,7 +37,7 @@ } if (p.Icon != "") { - menu += ""; + menu += ""; } menu += p.Name; menu += "\n"; diff --git a/Oqtane.Client/Themes/Controls/Profile.razor b/Oqtane.Client/Themes/Controls/Profile.razor index df71f803..012a77c4 100644 --- a/Oqtane.Client/Themes/Controls/Profile.razor +++ b/Oqtane.Client/Themes/Controls/Profile.razor @@ -2,7 +2,7 @@ @using Microsoft.AspNetCore.Components.Web @using Oqtane.Themes @namespace Oqtane.Themes.Controls -@inherits ThemeObjectBase +@inherits ThemeControlBase @inject NavigationManager NavigationManager diff --git a/Oqtane.Client/Themes/ThemeBase.cs b/Oqtane.Client/Themes/ThemeBase.cs index dd539a39..874d76e4 100644 --- a/Oqtane.Client/Themes/ThemeBase.cs +++ b/Oqtane.Client/Themes/ThemeBase.cs @@ -10,6 +10,11 @@ namespace Oqtane.Themes public virtual string Name { get; set; } public virtual string Panes { get; set; } + public string ThemePath() + { + return "Themes/" + this.GetType().Namespace + "/"; + } + public string NavigateUrl() { return NavigateUrl(PageState.Page.Path); @@ -40,5 +45,19 @@ namespace Oqtane.Themes return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload); } + public string EditUrl(int moduleid, string action) + { + return EditUrl(moduleid, action, ""); + } + + public string EditUrl(int moduleid, string action, string parameters) + { + return EditUrl(PageState.Page.Path, moduleid, action, parameters); + } + + public string EditUrl(string path, int moduleid, string action, string parameters) + { + return Utilities.EditUrl(PageState.Alias.Path, path, moduleid, action, parameters); + } } } diff --git a/Oqtane.Client/Themes/ThemeObjectBase.cs b/Oqtane.Client/Themes/ThemeControlBase.cs similarity index 96% rename from Oqtane.Client/Themes/ThemeObjectBase.cs rename to Oqtane.Client/Themes/ThemeControlBase.cs index e5284b7f..014cd5b6 100644 --- a/Oqtane.Client/Themes/ThemeObjectBase.cs +++ b/Oqtane.Client/Themes/ThemeControlBase.cs @@ -3,7 +3,7 @@ using Oqtane.Shared; namespace Oqtane.Themes { - public class ThemeObjectBase : ComponentBase + public class ThemeControlBase : ComponentBase { [CascadingParameter] protected PageState PageState { get; set; } diff --git a/Oqtane.Server/Controllers/ModuleDefinitionController.cs b/Oqtane.Server/Controllers/ModuleDefinitionController.cs index 8844e9b6..8fa846eb 100644 --- a/Oqtane.Server/Controllers/ModuleDefinitionController.cs +++ b/Oqtane.Server/Controllers/ModuleDefinitionController.cs @@ -4,11 +4,7 @@ using Oqtane.Repository; using Oqtane.Models; using Oqtane.Shared; using Microsoft.AspNetCore.Authorization; -using Microsoft.Extensions.Hosting; -using System.IO.Compression; -using Microsoft.AspNetCore.Hosting; -using System.IO; -using System.Reflection; +using Oqtane.Infrastructure; namespace Oqtane.Controllers { @@ -16,58 +12,37 @@ namespace Oqtane.Controllers public class ModuleDefinitionController : Controller { private readonly IModuleDefinitionRepository ModuleDefinitions; - private readonly IHostApplicationLifetime HostApplicationLifetime; - private readonly IWebHostEnvironment environment; + private readonly IInstallation Installation; - public ModuleDefinitionController(IModuleDefinitionRepository ModuleDefinitions, IHostApplicationLifetime HostApplicationLifetime, IWebHostEnvironment environment) + public ModuleDefinitionController(IModuleDefinitionRepository ModuleDefinitions, IInstallation Installation) { this.ModuleDefinitions = ModuleDefinitions; - this.HostApplicationLifetime = HostApplicationLifetime; - this.environment = environment; + this.Installation = Installation; } // GET: api/ [HttpGet] - public IEnumerable Get() + public IEnumerable Get(string siteid) { - return ModuleDefinitions.GetModuleDefinitions(); + return ModuleDefinitions.GetModuleDefinitions(int.Parse(siteid)); + } + + // PUT api//5 + [HttpPut("{id}")] + [Authorize(Roles = Constants.AdminRole)] + public void Put(int id, [FromBody] ModuleDefinition ModuleDefinition) + { + if (ModelState.IsValid) + { + ModuleDefinitions.UpdateModuleDefinition(ModuleDefinition); + } } [HttpGet("install")] [Authorize(Roles = Constants.HostRole)] public void InstallModules() { - bool install = false; - string modulefolder = Path.Combine(environment.WebRootPath, "Modules"); - string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); - - // iterate through module packages - foreach (string packagename in Directory.GetFiles(modulefolder, "*.nupkg")) - { - // iterate through files and deploy to appropriate locations - using (ZipArchive archive = ZipFile.OpenRead(packagename)) - { - foreach (ZipArchiveEntry entry in archive.Entries) - { - string filename = Path.GetFileName(entry.FullName); - switch (Path.GetExtension(filename)) - { - case ".dll": - entry.ExtractToFile(Path.Combine(binfolder, filename)); - break; - } - } - } - // remove module package - System.IO.File.Delete(packagename); - install = true; - } - - if (install) - { - // restart application - HostApplicationLifetime.StopApplication(); - } + Installation.Install("Modules"); } } } diff --git a/Oqtane.Server/Controllers/SiteController.cs b/Oqtane.Server/Controllers/SiteController.cs index 802cac83..41d8cf01 100644 --- a/Oqtane.Server/Controllers/SiteController.cs +++ b/Oqtane.Server/Controllers/SiteController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Authorization; using Oqtane.Repository; using Oqtane.Models; using Oqtane.Shared; +using System.Linq; namespace Oqtane.Controllers { @@ -33,12 +34,23 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.HostRole)] public Site Post([FromBody] Site Site) { if (ModelState.IsValid) { - Site = Sites.AddSite(Site); + bool authorized; + if (!Sites.GetSites().Any()) + { + authorized = true; // provision initial site during installation + } + else + { + authorized = User.IsInRole(Constants.HostRole); + } + if (authorized) + { + Site = Sites.AddSite(Site); + } } return Site; } diff --git a/Oqtane.Server/Controllers/ThemeController.cs b/Oqtane.Server/Controllers/ThemeController.cs index c8e409fb..7cf466b8 100644 --- a/Oqtane.Server/Controllers/ThemeController.cs +++ b/Oqtane.Server/Controllers/ThemeController.cs @@ -3,12 +3,8 @@ using Microsoft.AspNetCore.Mvc; using Oqtane.Repository; using Oqtane.Models; using Microsoft.AspNetCore.Authorization; -using Microsoft.Extensions.Hosting; using Oqtane.Shared; -using System.IO; -using Microsoft.AspNetCore.Hosting; -using System.Reflection; -using System.IO.Compression; +using Oqtane.Infrastructure; namespace Oqtane.Controllers { @@ -16,14 +12,12 @@ namespace Oqtane.Controllers public class ThemeController : Controller { private readonly IThemeRepository Themes; - private readonly IHostApplicationLifetime HostApplicationLifetime; - private readonly IWebHostEnvironment environment; + private readonly IInstallation Installation; - public ThemeController(IThemeRepository Themes, IHostApplicationLifetime HostApplicationLifetime, IWebHostEnvironment environment) + public ThemeController(IThemeRepository Themes, IInstallation Installation) { this.Themes = Themes; - this.HostApplicationLifetime = HostApplicationLifetime; - this.environment = environment; + this.Installation = Installation; } // GET: api/ @@ -37,37 +31,7 @@ namespace Oqtane.Controllers [Authorize(Roles = Constants.HostRole)] public void InstallThemes() { - bool install = false; - string themefolder = Path.Combine(environment.WebRootPath, "Themes"); - string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); - - // iterate through theme packages - foreach (string packagename in Directory.GetFiles(themefolder, "*.nupkg")) - { - // iterate through files and deploy to appropriate locations - using (ZipArchive archive = ZipFile.OpenRead(packagename)) - { - foreach (ZipArchiveEntry entry in archive.Entries) - { - string filename = Path.GetFileName(entry.FullName); - switch (Path.GetExtension(filename)) - { - case ".dll": - entry.ExtractToFile(Path.Combine(binfolder, filename)); - break; - } - } - } - // remove theme package - System.IO.File.Delete(packagename); - install = true; - } - - if (install) - { - // restart application - HostApplicationLifetime.StopApplication(); - } + Installation.Install("Themes"); } } } diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs index 6ac89937..74efcb2d 100644 --- a/Oqtane.Server/Controllers/UserController.cs +++ b/Oqtane.Server/Controllers/UserController.cs @@ -16,16 +16,14 @@ namespace Oqtane.Controllers public class UserController : Controller { private readonly IUserRepository Users; - private readonly ISiteUserRepository SiteUsers; private readonly IRoleRepository Roles; private readonly IUserRoleRepository UserRoles; private readonly UserManager IdentityUserManager; private readonly SignInManager IdentitySignInManager; - public UserController(IUserRepository Users, ISiteUserRepository SiteUsers, IRoleRepository Roles, IUserRoleRepository UserRoles, UserManager IdentityUserManager, SignInManager IdentitySignInManager) + public UserController(IUserRepository Users, IRoleRepository Roles, IUserRoleRepository UserRoles, UserManager IdentityUserManager, SignInManager IdentitySignInManager) { this.Users = Users; - this.SiteUsers = SiteUsers; this.Roles = Roles; this.UserRoles = UserRoles; this.IdentityUserManager = IdentityUserManager; @@ -34,17 +32,9 @@ namespace Oqtane.Controllers // GET: api/?siteid=x [HttpGet] - public IEnumerable Get(string siteid) + public IEnumerable Get() { - List users = new List(); - IEnumerable siteusers = SiteUsers.GetSiteUsers(int.Parse(siteid)); - foreach (SiteUser siteuser in siteusers) - { - User user = siteuser.User; - user.SiteId = siteuser.SiteId; - users.Add(user); - } - return users; + return Users.GetUsers(); } // GET api//5?siteid=x @@ -55,18 +45,7 @@ namespace Oqtane.Controllers if (user != null) { user.SiteId = int.Parse(siteid); - if (!user.IsHost) // host users are part of every site by default - { - SiteUser siteuser = SiteUsers.GetSiteUser(user.SiteId, id); - if (siteuser != null) - { - user.Roles = GetUserRoles(user.UserId, user.SiteId); - } - } - else - { - user.Roles = ";" + Constants.HostRole + ";" + Constants.AdminRole + ";"; - } + user.Roles = GetUserRoles(user.UserId, user.SiteId); } return user; } @@ -79,22 +58,7 @@ namespace Oqtane.Controllers if (user != null) { user.SiteId = int.Parse(siteid); - if (!user.IsHost) // host users are part of every site by default - { - SiteUser siteuser = SiteUsers.GetSiteUser(user.SiteId, user.UserId); - if (siteuser != null) - { - user.Roles = GetUserRoles(user.UserId, user.SiteId); - } - else - { - user = null; - } - } - else - { - user.Roles = ";" + Constants.HostRole + ";" + Constants.AdminRole + ";"; - } + user.Roles = GetUserRoles(user.UserId, user.SiteId); } return user; } @@ -107,11 +71,12 @@ namespace Oqtane.Controllers if (ModelState.IsValid) { - //bool installed = true; - //if (!Users.GetUsers().Any()) - //{ - // installed = false; // during initial installation we need to be able to create the host user - //} + int hostroleid = -1; + if (!Users.GetUsers().Any()) + { + hostroleid = Roles.GetRoles(User.SiteId, true).Where(item => item.Name == Constants.HostRole).FirstOrDefault().RoleId; + } + IdentityUser identityuser = await IdentityUserManager.FindByNameAsync(User.Username); if (identityuser == null) { @@ -122,50 +87,45 @@ namespace Oqtane.Controllers if (result.Succeeded) { user = Users.AddUser(User); - if (!user.IsHost) // host users are part of every site by default - { - SiteUser siteuser = new SiteUser(); - siteuser.SiteId = User.SiteId; - siteuser.UserId = user.UserId; - SiteUsers.AddSiteUser(siteuser); - List roles = Roles.GetRoles(user.SiteId).Where(item => item.IsAutoAssigned == true).ToList(); - foreach (Role role in roles) - { - UserRole userrole = new UserRole(); - userrole.UserId = user.UserId; - userrole.RoleId = role.RoleId; - userrole.EffectiveDate = null; - userrole.ExpiryDate = null; - UserRoles.AddUserRole(userrole); - } + // assign to host role if this is the initial installation + if (hostroleid != -1) + { + UserRole userrole = new UserRole(); + userrole.UserId = user.UserId; + userrole.RoleId = hostroleid; + userrole.EffectiveDate = null; + userrole.ExpiryDate = null; + UserRoles.AddUserRole(userrole); + } + + // add auto assigned roles to user for site + List roles = Roles.GetRoles(user.SiteId).Where(item => item.IsAutoAssigned == true).ToList(); + foreach (Role role in roles) + { + UserRole userrole = new UserRole(); + userrole.UserId = user.UserId; + userrole.RoleId = role.RoleId; + userrole.EffectiveDate = null; + userrole.ExpiryDate = null; + UserRoles.AddUserRole(userrole); } } } else { user = Users.GetUser(User.Username); - SiteUser siteuser = SiteUsers.GetSiteUser(User.SiteId, user.UserId); - if (siteuser == null) - { - if (!user.IsHost) // host users are part of every site by default - { - siteuser = new SiteUser(); - siteuser.SiteId = User.SiteId; - siteuser.UserId = user.UserId; - SiteUsers.AddSiteUser(siteuser); - List roles = Roles.GetRoles(User.SiteId).Where(item => item.IsAutoAssigned == true).ToList(); - foreach (Role role in roles) - { - UserRole userrole = new UserRole(); - userrole.UserId = user.UserId; - userrole.RoleId = role.RoleId; - userrole.EffectiveDate = null; - userrole.ExpiryDate = null; - UserRoles.AddUserRole(userrole); - } - } + // add auto assigned roles to user for site + List roles = Roles.GetRoles(User.SiteId).Where(item => item.IsAutoAssigned == true).ToList(); + foreach (Role role in roles) + { + UserRole userrole = new UserRole(); + userrole.UserId = user.UserId; + userrole.RoleId = role.RoleId; + userrole.EffectiveDate = null; + userrole.ExpiryDate = null; + UserRoles.AddUserRole(userrole); } } } @@ -188,13 +148,9 @@ namespace Oqtane.Controllers // DELETE api//5?siteid=x [HttpDelete("{id}")] [Authorize(Roles = Constants.AdminRole)] - public void Delete(int id, string siteid) + public void Delete(int id) { - SiteUser siteuser = SiteUsers.GetSiteUser(id, int.Parse(siteid)); - if (siteuser != null) - { - SiteUsers.DeleteSiteUser(siteuser.SiteUserId); - } + Users.DeleteUser(id); } // POST api//login @@ -214,19 +170,8 @@ namespace Oqtane.Controllers user = Users.GetUser(identityuser.UserName); if (user != null) { - if (!user.IsHost) // host users are part of every site by default - { - SiteUser siteuser = SiteUsers.GetSiteUser(User.SiteId, user.UserId); - if (siteuser != null) - { - user.IsAuthenticated = true; - } - } - else - { - user.IsAuthenticated = true; - } - if (user.IsAuthenticated && SetCookie) + user.IsAuthenticated = true; + if (SetCookie) { await IdentitySignInManager.SignInAsync(identityuser, IsPersistent); } @@ -266,10 +211,14 @@ namespace Oqtane.Controllers private string GetUserRoles(int UserId, int SiteId) { string roles = ""; - IEnumerable userroles = UserRoles.GetUserRoles(UserId, SiteId); + List userroles = UserRoles.GetUserRoles(UserId, SiteId).ToList(); foreach (UserRole userrole in userroles) { roles += userrole.Role.Name + ";"; + if (userrole.Role.Name == Constants.HostRole && userroles.Where(item => item.Role.Name == Constants.AdminRole).FirstOrDefault() == null) + { + roles += Constants.AdminRole + ";"; + } } if (roles != "") roles = ";" + roles; return roles; diff --git a/Oqtane.Server/Controllers/UserRoleController.cs b/Oqtane.Server/Controllers/UserRoleController.cs index 752adddb..07daee27 100644 --- a/Oqtane.Server/Controllers/UserRoleController.cs +++ b/Oqtane.Server/Controllers/UserRoleController.cs @@ -19,15 +19,15 @@ namespace Oqtane.Controllers // GET: api/?userid=x [HttpGet] - public IEnumerable Get(string userid) + public IEnumerable Get(string siteid) { - if (userid == "") + if (siteid == "") { return UserRoles.GetUserRoles(); } else { - return UserRoles.GetUserRoles(int.Parse(userid)); + return UserRoles.GetUserRoles(int.Parse(siteid)); } } diff --git a/Oqtane.Server/Infrastructure/IInstallation.cs b/Oqtane.Server/Infrastructure/IInstallation.cs new file mode 100644 index 00000000..c7a501dc --- /dev/null +++ b/Oqtane.Server/Infrastructure/IInstallation.cs @@ -0,0 +1,7 @@ +namespace Oqtane.Infrastructure +{ + public interface IInstallation + { + void Install(string Folders); + } +} diff --git a/Oqtane.Server/Infrastructure/Installation.cs b/Oqtane.Server/Infrastructure/Installation.cs new file mode 100644 index 00000000..b8dbcb0e --- /dev/null +++ b/Oqtane.Server/Infrastructure/Installation.cs @@ -0,0 +1,72 @@ +using System.Reflection; +using System.IO; +using System.IO.Compression; +using Microsoft.Extensions.Hosting; +using Microsoft.AspNetCore.Hosting; + +namespace Oqtane.Infrastructure +{ + public class Installation : IInstallation + { + private readonly IHostApplicationLifetime HostApplicationLifetime; + private readonly IWebHostEnvironment environment; + + public Installation(IHostApplicationLifetime HostApplicationLifetime, IWebHostEnvironment environment) + { + this.HostApplicationLifetime = HostApplicationLifetime; + this.environment = environment; + } + + public void Install(string Folders) + { + bool install = false; + string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + + foreach (string Folder in Folders.Split(',')) + { + string folder = Path.Combine(environment.WebRootPath, Folder); + + // iterate through theme packages + foreach (string packagename in Directory.GetFiles(folder, "*.nupkg")) + { + string name = Path.GetFileNameWithoutExtension(packagename); + string[] segments = name.Split('.'); + name = string.Join('.', segments, 0, segments.Length - 3); + + // iterate through files and deploy to appropriate locations + using (ZipArchive archive = ZipFile.OpenRead(packagename)) + { + foreach (ZipArchiveEntry entry in archive.Entries) + { + string filename = Path.GetFileName(entry.FullName); + switch (Path.GetExtension(filename)) + { + case ".dll": + entry.ExtractToFile(Path.Combine(binfolder, filename), true); + break; + case ".png": + case ".jpg": + case ".jpeg": + case ".gif": + case ".svg": + case ".js": + case ".css": + entry.ExtractToFile(folder + "\\" + entry.FullName.Replace("wwwroot", name).Replace("/","\\"), true); + break; + } + } + } + // remove package + File.Delete(packagename); + install = true; + } + } + + if (install) + { + // restart application + HostApplicationLifetime.StopApplication(); + } + } + } +} diff --git a/Oqtane.Server/Repository/Context/MasterDBContext.cs b/Oqtane.Server/Repository/Context/MasterDBContext.cs index 0cc802a6..e6791525 100644 --- a/Oqtane.Server/Repository/Context/MasterDBContext.cs +++ b/Oqtane.Server/Repository/Context/MasterDBContext.cs @@ -17,6 +17,7 @@ namespace Oqtane.Repository public virtual DbSet Alias { get; set; } public virtual DbSet Tenant { get; set; } + public virtual DbSet ModuleDefinition { get; set; } public override int SaveChanges() { diff --git a/Oqtane.Server/Repository/Context/TenantDBContext.cs b/Oqtane.Server/Repository/Context/TenantDBContext.cs index 6cf6a7b9..f21256bb 100644 --- a/Oqtane.Server/Repository/Context/TenantDBContext.cs +++ b/Oqtane.Server/Repository/Context/TenantDBContext.cs @@ -12,7 +12,6 @@ namespace Oqtane.Repository public virtual DbSet Module { get; set; } public virtual DbSet User { get; set; } public virtual DbSet Profile { get; set; } - public virtual DbSet SiteUser { get; set; } public virtual DbSet Role { get; set; } public virtual DbSet UserRole { get; set; } public virtual DbSet Permission { get; set; } diff --git a/Oqtane.Server/Repository/Interfaces/IModuleDefinitionRepository.cs b/Oqtane.Server/Repository/Interfaces/IModuleDefinitionRepository.cs index 2a751958..bd56414b 100644 --- a/Oqtane.Server/Repository/Interfaces/IModuleDefinitionRepository.cs +++ b/Oqtane.Server/Repository/Interfaces/IModuleDefinitionRepository.cs @@ -5,6 +5,8 @@ namespace Oqtane.Repository { public interface IModuleDefinitionRepository { - IEnumerable GetModuleDefinitions(); + IEnumerable GetModuleDefinitions(int SideId); + void UpdateModuleDefinition(ModuleDefinition ModuleDefinition); + } } diff --git a/Oqtane.Server/Repository/Interfaces/ISiteUserRepository.cs b/Oqtane.Server/Repository/Interfaces/ISiteUserRepository.cs deleted file mode 100644 index 67beb7d2..00000000 --- a/Oqtane.Server/Repository/Interfaces/ISiteUserRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections.Generic; -using Oqtane.Models; - -namespace Oqtane.Repository -{ - public interface ISiteUserRepository - { - IEnumerable GetSiteUsers(); - IEnumerable GetSiteUsers(int SiteId); - SiteUser AddSiteUser(SiteUser SiteUser); - SiteUser UpdateSiteUser(SiteUser SiteUser); - SiteUser GetSiteUser(int SiteUserId); - SiteUser GetSiteUser(int SiteId, int UserId); - void DeleteSiteUser(int SiteUserId); - } -} diff --git a/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs b/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs index d2141a13..3655a93a 100644 --- a/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs +++ b/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs @@ -6,7 +6,7 @@ namespace Oqtane.Repository public interface IUserRoleRepository { IEnumerable GetUserRoles(); - IEnumerable GetUserRoles(int UserId); + IEnumerable GetUserRoles(int SiteId); IEnumerable GetUserRoles(int UserId, int SiteId); UserRole AddUserRole(UserRole UserRole); UserRole UpdateUserRole(UserRole UserRole); diff --git a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs index b02bee82..49d46798 100644 --- a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs +++ b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs @@ -10,14 +10,16 @@ namespace Oqtane.Repository { public class ModuleDefinitionRepository : IModuleDefinitionRepository { - private readonly List ModuleDefinitions; + private MasterDBContext db; + private readonly IPermissionRepository Permissions; - public ModuleDefinitionRepository() + public ModuleDefinitionRepository(MasterDBContext context, IPermissionRepository Permissions) { - ModuleDefinitions = LoadModuleDefinitions(); + db = context; + this.Permissions = Permissions; } - private List LoadModuleDefinitions() + private List LoadModuleDefinitions(int SiteId) { List ModuleDefinitions = new List(); @@ -29,6 +31,27 @@ namespace Oqtane.Repository ModuleDefinitions = LoadModuleDefinitionsFromAssembly(ModuleDefinitions, assembly); } + // sync module definitions with database + List moduledefs = db.ModuleDefinition.ToList(); + foreach (ModuleDefinition moduledefinition in ModuleDefinitions) + { + IEnumerable permissions = Permissions.GetPermissions(SiteId, "ModuleDefinition").ToList(); + ModuleDefinition moduledef = moduledefs.Where(item => item.ModuleDefinitionName == moduledefinition.ModuleDefinitionName).FirstOrDefault(); + if (moduledef == null) + { + moduledef = new ModuleDefinition { ModuleDefinitionName = moduledefinition.ModuleDefinitionName }; + db.ModuleDefinition.Add(moduledef); + db.SaveChanges(); + } + moduledefinition.ModuleDefinitionId = moduledef.ModuleDefinitionId; + moduledefinition.SiteId = SiteId; + moduledefinition.Permissions = Permissions.EncodePermissions(moduledefinition.ModuleDefinitionId, permissions); + moduledefinition.CreatedBy = moduledef.CreatedBy; + moduledefinition.CreatedOn = moduledef.CreatedOn; + moduledefinition.ModifiedBy = moduledef.ModifiedBy; + moduledefinition.ModifiedOn = moduledef.ModifiedOn; + } + return ModuleDefinitions; } @@ -64,13 +87,14 @@ namespace Oqtane.Repository ModuleDefinitionName = QualifiedModuleType, Name = GetProperty(properties, "Name"), Description = GetProperty(properties, "Description"), + Categories = GetProperty(properties, "Categories"), Version = GetProperty(properties, "Version"), Owner = GetProperty(properties, "Owner"), Url = GetProperty(properties, "Url"), Contact = GetProperty(properties, "Contact"), License = GetProperty(properties, "License"), Dependencies = GetProperty(properties, "Dependencies"), - Permissions = GetProperty(properties, "Permissions"), + PermissionNames = GetProperty(properties, "PermissionNames"), ControlTypeTemplate = ModuleType + ".{Control}" + ", " + typename[1], ControlTypeRoutes = "", AssemblyName = assembly.FullName.Split(",")[0] @@ -83,13 +107,14 @@ namespace Oqtane.Repository ModuleDefinitionName = QualifiedModuleType, Name = ModuleType.Substring(ModuleType.LastIndexOf(".") + 1), Description = ModuleType.Substring(ModuleType.LastIndexOf(".") + 1), + Categories = ((QualifiedModuleType.StartsWith("Oqtane.Modules.Admin.")) ? "Admin" : ""), Version = new Version(1, 0, 0).ToString(), Owner = "", Url = "", Contact = "", License = "", Dependencies = "", - Permissions = "", + PermissionNames = "", ControlTypeTemplate = ModuleType + ".{Control}" + ", " + typename[1], ControlTypeRoutes = "", AssemblyName = assembly.FullName.Split(",")[0] @@ -116,11 +141,6 @@ namespace Oqtane.Repository return moduledefinitions; } - public IEnumerable GetModuleDefinitions() - { - return ModuleDefinitions; - } - private string GetProperty(Dictionary Properties, string Key) { string Value = ""; @@ -130,5 +150,15 @@ namespace Oqtane.Repository } return Value; } + + public IEnumerable GetModuleDefinitions(int SiteId) + { + return LoadModuleDefinitions(SiteId); + } + + public void UpdateModuleDefinition(ModuleDefinition ModuleDefinition) + { + Permissions.UpdatePermissions(ModuleDefinition.SiteId, "ModuleDefinition", ModuleDefinition.ModuleDefinitionId, ModuleDefinition.Permissions); + } } } diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index 3f200162..519b41cd 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -2,18 +2,56 @@ using System.Collections.Generic; using System.Linq; using Oqtane.Models; +using Oqtane.Shared; +using System; namespace Oqtane.Repository { public class SiteRepository : ISiteRepository { - private TenantDBContext db; + private readonly TenantDBContext db; + private readonly IRoleRepository RoleRepository; + private readonly IProfileRepository ProfileRepository; + private readonly IPageRepository PageRepository; + private readonly IModuleRepository ModuleRepository; + private readonly IPageModuleRepository PageModuleRepository; + private readonly List SiteTemplate; - public SiteRepository(TenantDBContext context) + public SiteRepository(TenantDBContext context, IRoleRepository RoleRepository, IProfileRepository ProfileRepository, IPageRepository PageRepository, IModuleRepository ModuleRepository, IPageModuleRepository PageModuleRepository) { db = context; + this.RoleRepository = RoleRepository; + this.ProfileRepository = ProfileRepository; + this.PageRepository = PageRepository; + this.ModuleRepository = ModuleRepository; + this.PageModuleRepository = PageModuleRepository; + + // defines the default site template + SiteTemplate = new List(); + SiteTemplate.Add(new PageTemplate { Name = "Home", Parent = "", Path = "", Order = 1, Icon = "home", IsNavigation = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "", ModulePermissions = "", Title = "", Pane = "", ContainerType = "" }); + SiteTemplate.Add(new PageTemplate { Name = "Admin", Parent = "", Path = "admin", Order = 1, Icon = "", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Dashboard, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Administration", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Site Management", Parent = "Admin", Path = "admin/sites", Order = 1, Icon = "globe", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Sites, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Site Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Page Management", Parent = "Admin", Path = "admin/pages", Order = 1, Icon = "layers", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Pages, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Page Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Module Management", Parent = "Admin", Path = "admin/modules", Order = 1, Icon = "browser", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.ModuleDefinitions, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Module Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Theme Management", Parent = "Admin", Path = "admin/themes", Order = 1, Icon = "brush", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Themes, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Theme Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "User Management", Parent = "Admin", Path = "admin/users", Order = 1, Icon = "person", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Users, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "User Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Role Management", Parent = "Admin", Path = "admin/roles", Order = 1, Icon = "lock-locked", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Roles, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Role Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Login", Parent = "", Path = "login", Order = 1, Icon = "lock-locked", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Login, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Login", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Register", Parent = "", Path = "register", Order = 1, Icon = "person", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Register, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Register", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); + SiteTemplate.Add(new PageTemplate { Name = "Profile", Parent = "", Path = "profile", Order = 1, Icon = "person", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + ModuleDefinitionName = "Oqtane.Modules.Admin.Profile, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "User Profile", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); } - + public IEnumerable GetSites() { return db.Site; @@ -23,6 +61,7 @@ namespace Oqtane.Repository { db.Site.Add(Site); db.SaveChanges(); + CreateSite(Site); return Site; } @@ -44,5 +83,74 @@ namespace Oqtane.Repository db.Site.Remove(site); db.SaveChanges(); } + + private void CreateSite(Site site) + { + RoleRepository.AddRole(new Role { SiteId = null, Name = Constants.AllUsersRole, Description = "All Users", IsAutoAssigned = false, IsSystem = true }); + RoleRepository.AddRole(new Role { SiteId = null, Name = Constants.HostRole, Description = "Application Administrators", IsAutoAssigned = false, IsSystem = true }); + + RoleRepository.AddRole(new Role { SiteId = site.SiteId, Name = Constants.RegisteredRole, Description = "Registered Users", IsAutoAssigned = true, IsSystem = true }); + RoleRepository.AddRole(new Role { SiteId = site.SiteId, Name = Constants.AdminRole, Description = "Site Administrators", IsAutoAssigned = false, IsSystem = true }); + + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "FirstName", Title = "First Name", Description = "Your First Or Given Name", Category = "Name", ViewOrder = 1, MaxLength = 50, DefaultValue = "", IsRequired = true, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "LastName", Title = "Last Name", Description = "Your Last Or Family Name", Category = "Name", ViewOrder = 2, MaxLength = 50, DefaultValue = "", IsRequired = true, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "Street", Title = "Street", Description = "Street Or Building Address", Category = "Address", ViewOrder = 3, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "City", Title = "City", Description = "City", Category = "Address", ViewOrder = 4, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "Region", Title = "Region", Description = "State Or Province", Category = "Address", ViewOrder = 5, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "Country", Title = "Country", Description = "Country", Category = "Address", ViewOrder = 6, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "PostalCode", Title = "Postal Code", Description = "Postal Code Or Zip Code", Category = "Address", ViewOrder = 7, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false }); + ProfileRepository.AddProfile(new Profile { SiteId = site.SiteId, Name = "Phone", Title = "Phone Number", Description = "Phone Number", Category = "Contact", ViewOrder = 8, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false }); + + foreach (PageTemplate pagetemplate in SiteTemplate) + { + int? parentid = null; + if (pagetemplate.Parent != "") + { + List pages = PageRepository.GetPages(site.SiteId).ToList(); + Page parent = pages.Where(item => item.Name == pagetemplate.Parent).FirstOrDefault(); + parentid = parent.PageId; + } + + Page page = new Page + { + SiteId = site.SiteId, + ParentId = parentid, + Name = pagetemplate.Name, + Path = pagetemplate.Path, + Order = pagetemplate.Order, + IsNavigation = pagetemplate.IsNavigation, + ThemeType = site.DefaultThemeType, + LayoutType = site.DefaultLayoutType, + Icon = pagetemplate.Icon, + Permissions = pagetemplate.PagePermissions + }; + Type type = Type.GetType(page.ThemeType); + System.Reflection.PropertyInfo property = type.GetProperty("Panes"); + page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); + page = PageRepository.AddPage(page); + + if (pagetemplate.ModuleDefinitionName != "") + { + Module module = new Module + { + SiteId = site.SiteId, + ModuleDefinitionName = pagetemplate.ModuleDefinitionName, + Permissions = pagetemplate.ModulePermissions, + }; + module = ModuleRepository.AddModule(module); + + PageModule pagemodule = new PageModule + { + PageId = page.PageId, + ModuleId = module.ModuleId, + Title = pagetemplate.Title, + Pane = pagetemplate.Pane, + Order = 1, + ContainerType = pagetemplate.ContainerType + }; + PageModuleRepository.AddPageModule(pagemodule); + } + } + } } } diff --git a/Oqtane.Server/Repository/SiteUserRepository.cs b/Oqtane.Server/Repository/SiteUserRepository.cs deleted file mode 100644 index 4d7cb1b6..00000000 --- a/Oqtane.Server/Repository/SiteUserRepository.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using System.Collections.Generic; -using System.Linq; -using Oqtane.Models; - -namespace Oqtane.Repository -{ - public class SiteUserRepository : ISiteUserRepository - { - private TenantDBContext db; - - public SiteUserRepository(TenantDBContext context) - { - db = context; - } - - public IEnumerable GetSiteUsers() - { - return db.SiteUser; - } - public IEnumerable GetSiteUsers(int SiteId) - { - return db.SiteUser.Where(item => item.SiteId == SiteId) - .Include(item => item.User); // eager load users - } - - public SiteUser AddSiteUser(SiteUser SiteUser) - { - db.SiteUser.Add(SiteUser); - db.SaveChanges(); - return SiteUser; - } - - public SiteUser UpdateSiteUser(SiteUser SiteUser) - { - db.Entry(SiteUser).State = EntityState.Modified; - db.SaveChanges(); - return SiteUser; - } - - public SiteUser GetSiteUser(int SiteUserId) - { - return db.SiteUser.Include(item => item.User) // eager load users - .SingleOrDefault(item => item.SiteUserId == SiteUserId); - } - - public SiteUser GetSiteUser(int SiteId, int UserId) - { - return db.SiteUser.Where(item => item.SiteId == SiteId) - .Where(item => item.UserId == UserId).FirstOrDefault(); - } - - public void DeleteSiteUser(int SiteUserId) - { - SiteUser SiteUser = db.SiteUser.Find(SiteUserId); - db.SiteUser.Remove(SiteUser); - db.SaveChanges(); - } - } -} diff --git a/Oqtane.Server/Repository/ThemeRepository.cs b/Oqtane.Server/Repository/ThemeRepository.cs index b9547e93..578ac3e3 100644 --- a/Oqtane.Server/Repository/ThemeRepository.cs +++ b/Oqtane.Server/Repository/ThemeRepository.cs @@ -10,13 +10,6 @@ namespace Oqtane.Repository { public class ThemeRepository : IThemeRepository { - private readonly List Themes; - - public ThemeRepository() - { - Themes = LoadThemes(); - } - private List LoadThemes() { List Themes = new List(); @@ -119,11 +112,6 @@ namespace Oqtane.Repository return themes; } - public IEnumerable GetThemes() - { - return Themes; - } - private string GetProperty(Dictionary Properties, string Key) { string Value = ""; @@ -133,5 +121,10 @@ namespace Oqtane.Repository } return Value; } + + public IEnumerable GetThemes() + { + return LoadThemes(); + } } } diff --git a/Oqtane.Server/Repository/UserRoleRepository.cs b/Oqtane.Server/Repository/UserRoleRepository.cs index e752c832..3d4a262a 100644 --- a/Oqtane.Server/Repository/UserRoleRepository.cs +++ b/Oqtane.Server/Repository/UserRoleRepository.cs @@ -18,17 +18,20 @@ namespace Oqtane.Repository { return db.UserRole; } - public IEnumerable GetUserRoles(int UserId) + public IEnumerable GetUserRoles(int SiteId) { - return db.UserRole.Where(item => item.UserId == UserId) - .Include(item => item.Role); // eager load roles + return db.UserRole + .Include(item => item.Role) // eager load roles + .Include(item => item.User) // eager load users + .Where(item => item.Role.SiteId == SiteId); } public IEnumerable GetUserRoles(int UserId, int SiteId) { return db.UserRole.Where(item => item.UserId == UserId) .Include(item => item.Role) // eager load roles - .Where(item => item.Role.SiteId == SiteId); + .Include(item => item.User) // eager load users + .Where(item => item.Role.SiteId == SiteId || item.Role.SiteId == null); } public UserRole AddUserRole(UserRole UserRole) @@ -47,7 +50,9 @@ namespace Oqtane.Repository public UserRole GetUserRole(int UserRoleId) { - return db.UserRole.Include(item => item.Role) // eager load roles + return db.UserRole + .Include(item => item.Role) // eager load roles + .Include(item => item.User) // eager load users .SingleOrDefault(item => item.UserRoleId == UserRoleId); } diff --git a/Oqtane.Server/Scripts/00.00.00.sql b/Oqtane.Server/Scripts/00.00.00.sql index 153357f7..e4bac809 100644 --- a/Oqtane.Server/Scripts/00.00.00.sql +++ b/Oqtane.Server/Scripts/00.00.00.sql @@ -8,7 +8,8 @@ CREATE TABLE [dbo].[Site]( [SiteId] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](200) NOT NULL, [Logo] [nvarchar](50) NOT NULL, - [DefaultThemeType] [nvarchar](200) NULL, + [DefaultThemeType] [nvarchar](200) NOT NULL, + [DefaultLayoutType] [nvarchar](200) NOT NULL, [CreatedBy] [nvarchar](256) NOT NULL, [CreatedOn] [datetime] NOT NULL, [ModifiedBy] [nvarchar](256) NOT NULL, @@ -83,7 +84,6 @@ CREATE TABLE [dbo].[User]( [Username] [nvarchar](256) NOT NULL, [DisplayName] [nvarchar](50) NOT NULL, [Email] [nvarchar](256) NOT NULL, - [IsHost] [bit] NOT NULL, [CreatedBy] [nvarchar](256) NOT NULL, [CreatedOn] [datetime] NOT NULL, [ModifiedBy] [nvarchar](256) NOT NULL, @@ -95,21 +95,6 @@ CREATE TABLE [dbo].[User]( ) GO -CREATE TABLE [dbo].[SiteUser]( - [SiteUserId] [int] IDENTITY(1,1) NOT NULL, - [SiteId] [int] NOT NULL, - [UserId] [int] NOT NULL, - [CreatedBy] [nvarchar](256) NOT NULL, - [CreatedOn] [datetime] NOT NULL, - [ModifiedBy] [nvarchar](256) NOT NULL, - [ModifiedOn] [datetime] NOT NULL, - CONSTRAINT [PK_SiteUser] PRIMARY KEY CLUSTERED - ( - [SiteUserId] ASC - ) -) -GO - CREATE TABLE [dbo].[Role]( [RoleId] [int] IDENTITY(1,1) NOT NULL, [SiteId] [int] NULL, @@ -245,20 +230,6 @@ REFERENCES [dbo].[Page] ([PageId]) ON DELETE CASCADE GO -ALTER TABLE [dbo].[SiteUser] WITH CHECK ADD CONSTRAINT [FK_SiteUser_Site] FOREIGN KEY([SiteId]) -REFERENCES [dbo].[Site] ([SiteId]) -ON DELETE CASCADE -GO - -ALTER TABLE [dbo].[SiteUser] WITH CHECK ADD CONSTRAINT [FK_SiteUser_User] FOREIGN KEY([UserId]) -REFERENCES [dbo].[User] ([UserId]) -GO - -ALTER TABLE [dbo].[HtmlText] WITH CHECK ADD CONSTRAINT [FK_HtmlText_Module] FOREIGN KEY([ModuleId]) -REFERENCES [dbo].[Module] ([ModuleId]) -ON DELETE CASCADE -GO - ALTER TABLE [dbo].[Role] WITH CHECK ADD CONSTRAINT [FK_Role_Site] FOREIGN KEY ([SiteId]) REFERENCES [dbo].[Site] ([SiteId]) ON DELETE CASCADE @@ -291,6 +262,12 @@ REFERENCES [dbo].[Site] ([SiteId]) ON DELETE CASCADE GO +ALTER TABLE [dbo].[HtmlText] WITH CHECK ADD CONSTRAINT [FK_HtmlText_Module] FOREIGN KEY([ModuleId]) +REFERENCES [dbo].[Module] ([ModuleId]) +ON DELETE CASCADE +GO + + /* Create indexes @@ -311,13 +288,6 @@ CREATE UNIQUE NONCLUSTERED INDEX IX_User ON dbo.[User] ) ON [PRIMARY] GO -CREATE UNIQUE NONCLUSTERED INDEX IX_SiteUser ON dbo.SiteUser - ( - SiteId, - UserId - ) ON [PRIMARY] -GO - CREATE UNIQUE NONCLUSTERED INDEX IX_Permission ON dbo.Permission ( SiteId, @@ -343,482 +313,3 @@ CREATE UNIQUE NONCLUSTERED INDEX IX_UserRole ON dbo.UserRole ) ON [PRIMARY] GO -/* - -Create seed data - -*/ - -SET IDENTITY_INSERT [dbo].[Site] ON -GO -INSERT [dbo].[Site] ([SiteId], [Name], [Logo], [DefaultThemeType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, N'Site1', N'oqtane.png', N'Oqtane.Themes.Theme1.Theme1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Site] ([SiteId], [Name], [Logo], [DefaultThemeType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, N'Site2', N'oqtane.png', N'Oqtane.Themes.Theme1.Theme1, Oqtane.Client', '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[Site] OFF -GO - -SET IDENTITY_INSERT [dbo].[Role] ON -GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (-1, null, N'All Users', N'All Users', 0, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (0, null, N'Host Users', N'Host Users', 0, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, 1, N'Administrators', N'Site Administrators', 0, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, 1, N'Registered Users', N'Registered Users', 1, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, 2, N'Administrators', N'Site Administrators', 0, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Role] ([RoleId], [SiteId], [Name], [Description], [IsAutoAssigned], [IsSystem], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, 2, N'Registered Users', N'Registered Users', 1, 1, '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[Role] OFF -GO - -SET IDENTITY_INSERT [dbo].[Profile] ON -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, null, 'FirstName', 'First Name', 'Your First Or Given Name', 'Name', 1, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, null, 'LastName', 'Last Name', 'Your Last Or family Name', 'Name', 2, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, null, 'Street', 'Street', 'Street Or Building Address', 'Address', 3, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, null, 'City', 'City', 'City', 'Address', 4, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (5, null, 'Region', 'Region', 'State Or Province', 'Address', 5, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (6, null, 'Country', 'Country', 'Country', 'Address', 6, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (7, null, 'PostalCode', 'Postal Code', 'Postal Code Or Zip Code', 'Address', 7, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Profile]([ProfileId], [SiteId], [Name], [Title], [Description], [Category], [ViewOrder], [MaxLength], [DefaultValue], [IsRequired], [IsPrivate], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (8, null, 'Phone', 'Phone Number', 'Phone Number', 'Contact', 8, 50, '', 1, 0, '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[Profile] OFF -GO - -SET IDENTITY_INSERT [dbo].[Page] ON -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, 1, N'Page1', N'', N'Oqtane.Themes.Theme1.Theme1, Oqtane.Client', N'oi-home', N'Left;Right', NULL, 1, 1, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 1, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 1, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 1, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, 1, N'Page2', N'page2', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'oi-plus', N'Top;Bottom', NULL, 3, 1, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 2, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 2, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, 1, N'Page3', N'page3', N'Oqtane.Themes.Theme3.Theme3, Oqtane.Client', N'oi-list-rich', N'Left;Right', NULL, 5, 1, N'Oqtane.Themes.Theme3.HorizontalLayout, Oqtane.Client', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 3, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 3, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 3, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, 1, N'Admin', N'admin', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'oi-home', N'Top;Bottom', NULL, 7, 0, N'', '', 1, getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 4, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 4, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (8, 1, N'Site Management', N'admin/sites', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', 4, 1, 0, N'', 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 8, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 8, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (5, 1, N'Page Management', N'admin/pages', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', 4, 3, 0, N'', 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 5, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 5, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (10, 1, N'Module Management', N'admin/modules', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', 4, 5, 0, N'', 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 10, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 10, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (11, 1, N'Theme Management', N'admin/themes', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', 4, 7, 0, N'', 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 11, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 11, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (9, 1, N'User Management', N'admin/users', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', 4, 9, 0, N'', 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 9, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 9, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (16, 1, N'Role Management', N'admin/roles', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', 4, 11, 0, N'', 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 16, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 16, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (6, 1, N'Login', N'login', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', NULL, 7, 0, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 6, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 6, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 6, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (7, 1, N'Register', N'register', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', NULL, 9, 0, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 7, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 7, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 7, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (17, 1, N'Profile', N'profile', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', NULL, 11, 0, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 17, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 17, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Page', 17, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (12, 2, N'Page1', N'', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'oi-home', N'Top;Bottom', NULL, 1, 1, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 12, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 12, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 12, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (13, 2, N'Page2', N'page2', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'oi-home', N'Top;Bottom', NULL, 3, 1, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 13, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 13, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 13, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (14, 2, N'Login', N'login', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', NULL, 5, 0, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 14, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 14, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 14, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ParentId], [Order], [IsNavigation], [LayoutType], [EditMode], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (15, 2, N'Register', N'register', N'Oqtane.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', NULL, 7, 0, N'', 0, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 15, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 15, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Page', 15, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[Page] OFF -GO - -SET IDENTITY_INSERT [dbo].[Module] ON -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, 1, N'Oqtane.Modules.Weather, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 1, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 1, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 1, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, 1, N'Oqtane.Modules.Counter, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 2, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 2, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 2, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, 1, N'Oqtane.Modules.HtmlText, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 3, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 3, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 3, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, 1, N'Oqtane.Modules.Weather, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 4, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 4, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 4, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (5, 1, N'Oqtane.Modules.HtmlText, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 5, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 5, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 5, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (6, 1, N'Oqtane.Modules.HtmlText, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 6, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 6, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 6, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (7, 1, N'Oqtane.Modules.HtmlText, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 7, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 7, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (8, 1, N'Oqtane.Modules.Admin.Pages, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 8, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 8, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (9, 1, N'Oqtane.Modules.Admin.Login, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 9, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 9, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 9, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (10, 1, N'Oqtane.Modules.Admin.Register, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 10, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 10, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 10, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (11, 1, N'Oqtane.Modules.Admin.Dashboard, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 11, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 11, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (12, 1, N'Oqtane.Modules.Admin.Sites, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 12, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 12, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (13, 1, N'Oqtane.Modules.Admin.Users, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 13, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 13, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (14, 1, N'Oqtane.Modules.Admin.ModuleDefinitions, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 14, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 14, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (15, 1, N'Oqtane.Modules.Admin.Themes, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 15, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 15, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (16, 2, N'Oqtane.Modules.HtmlText, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 16, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 16, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 16, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (17, 2, N'Oqtane.Modules.HtmlText, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 17, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 17, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 17, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (18, 2, N'Oqtane.Modules.Admin.Login, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 18, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 18, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 18, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (19, 2, N'Oqtane.Modules.Admin.Register, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 19, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 19, 'View', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (2, 'Module', 19, 'Edit', 3, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (20, 1, N'Oqtane.Modules.Admin.Roles, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 20, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 20, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (21, 1, N'Oqtane.Modules.Admin.Profile, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 21, 'View', -1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 21, 'View', 1, null, 1, '', getdate(), '', getdate()) -GO -INSERT [dbo].[Permission] ([SiteId], [EntityName], [EntityId], [PermissionName], [RoleId], [UserId], [IsAuthorized], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, 'Module', 21, 'Edit', 1, null, 1, '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[Module] OFF -GO - -SET IDENTITY_INSERT [dbo].[PageModule] ON -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, 1, 1, N'Weather', N'Right', 1, N'Oqtane.Themes.Theme1.Container1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, 1, 2, N'Counter', N'Left', 1, N'Oqtane.Themes.Theme1.Container1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, 1, 3, N'Lorem ipsum', N'Left', 3, N'Oqtane.Themes.Theme1.Container1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, 2, 4, N'Weather', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (5, 2, 5, N'Enim sed', N'Top', 3, N'Oqtane.Themes.Theme1.Container1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (6, 3, 6, N'Id consectetur', N'Left', 1, N'Oqtane.Themes.Theme1.Container1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (7, 3, 7, N'Ornare arcu', N'Right', 1, N'Oqtane.Themes.Theme1.Container1, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (8, 5, 8, N'Page Management', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (9, 6, 9, N'Login', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (10, 7, 10, N'Register', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (11, 4, 11, N'Administration', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (12, 8, 12, N'Site Management', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (13, 9, 13, N'User Management', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (14, 10, 14, N'Module Management', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (15, 11, 15, N'Theme Management', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (16, 12, 16, N'Id consectetur', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (17, 13, 17, N'Lorem ipsum', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (18, 14, 18, N'Login', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (19, 15, 19, N'Register', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (20, 16, 20, N'Role Management', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (21, 17, 21, N'User Profile', N'Top', 1, N'Oqtane.Themes.Theme2.Container2, Oqtane.Client', '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[PageModule] OFF -GO - -SET IDENTITY_INSERT [dbo].[HtmlText] ON -GO -INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (1, 3, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Go To Site2', '', getdate(), '', getdate()) -GO -INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, 5, N'Enim sed faucibus turpis in eu mi bibendum neque egestas. Quis hendrerit dolor magna eget est lorem. Dui faucibus in ornare quam viverra orci sagittis. Integer eget aliquet nibh praesent tristique magna sit. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Tortor id aliquet lectus proin. Diam volutpat commodo sed egestas egestas fringilla. Posuere sollicitudin aliquam ultrices sagittis orci. Viverra mauris in aliquam sem fringilla ut morbi tincidunt. Eget gravida cum sociis natoque penatibus et. Sagittis orci a scelerisque purus semper. Eget velit aliquet sagittis id consectetur purus. Volutpat blandit aliquam etiam erat. Et tortor consequat id porta nibh venenatis cras. Volutpat odio facilisis mauris sit amet. Varius duis at consectetur lorem.', '', getdate(), '', getdate()) -GO -INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (3, 6, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.', '', getdate(), '', getdate()) -GO -INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (4, 7, N'Ornare arcu dui vivamus arcu felis bibendum ut. Tortor vitae purus faucibus ornare. Lectus sit amet est placerat in egestas erat imperdiet sed. Aliquam sem et tortor consequat id. Fermentum iaculis eu non diam phasellus vestibulum. Ultricies integer quis auctor elit sed. Fermentum odio eu feugiat pretium nibh ipsum. Ut consequat semper viverra nam libero. Blandit aliquam etiam erat velit scelerisque in dictum non consectetur. At risus viverra adipiscing at in tellus. Facilisi nullam vehicula ipsum a arcu cursus vitae congue. At varius vel pharetra vel turpis nunc eget lorem dolor. Morbi non arcu risus quis varius. Turpis massa sed elementum tempus egestas.', '', getdate(), '', getdate()) -GO -INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (5, 16, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.

Go To Site1', '', getdate(), '', getdate()) -GO -INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (6, 17, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', '', getdate(), '', getdate()) -GO -SET IDENTITY_INSERT [dbo].[HtmlText] OFF -GO \ No newline at end of file diff --git a/Oqtane.Server/Scripts/Master.sql b/Oqtane.Server/Scripts/Master.sql index cbe422d1..0f9101f0 100644 --- a/Oqtane.Server/Scripts/Master.sql +++ b/Oqtane.Server/Scripts/Master.sql @@ -35,6 +35,19 @@ CREATE TABLE [dbo].[Tenant]( ) GO +CREATE TABLE [dbo].[ModuleDefinition]( + [ModuleDefinitionId] [int] IDENTITY(1,1) NOT NULL, + [ModuleDefinitionName] [nvarchar](200) NOT NULL, + [CreatedBy] [nvarchar](256) NOT NULL, + [CreatedOn] [datetime] NOT NULL, + [ModifiedBy] [nvarchar](256) NOT NULL, + [ModifiedOn] [datetime] NOT NULL, + CONSTRAINT [PK_ModuleDefinition] PRIMARY KEY CLUSTERED + ( + [ModuleDefinitionId] ASC + ) +) +GO /* @@ -64,9 +77,5 @@ GO INSERT [dbo].[Alias] ([AliasId], [Name], [TenantId], [SiteId], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) VALUES (1, N'{Alias}', 1, 1, '', getdate(), '', getdate()) GO -INSERT [dbo].[Alias] ([AliasId], [Name], [TenantId], [SiteId], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn]) -VALUES (2, N'{Alias}/site2', 1, 2, '', getdate(), '', getdate()) -GO SET IDENTITY_INSERT [dbo].[Alias] OFF GO - diff --git a/Oqtane.Server/Security/ClaimsPrincipalFactory.cs b/Oqtane.Server/Security/ClaimsPrincipalFactory.cs index 3248242e..21e3f913 100644 --- a/Oqtane.Server/Security/ClaimsPrincipalFactory.cs +++ b/Oqtane.Server/Security/ClaimsPrincipalFactory.cs @@ -5,6 +5,8 @@ using System.Threading.Tasks; using Oqtane.Repository; using Oqtane.Models; using Oqtane.Shared; +using System.Collections.Generic; +using System.Linq; namespace Oqtane.Security { @@ -31,17 +33,15 @@ namespace Oqtane.Security if (user != null) { id.AddClaim(new Claim(ClaimTypes.PrimarySid, user.UserId.ToString())); - if (user.IsHost) // host users are part of every site by default + Alias alias = Tenants.GetAlias(); + List userroles = UserRoles.GetUserRoles(user.UserId, alias.SiteId).ToList(); + foreach (UserRole userrole in userroles) { - id.AddClaim(new Claim(options.ClaimsIdentity.RoleClaimType, Constants.HostRole)); - id.AddClaim(new Claim(options.ClaimsIdentity.RoleClaimType, Constants.AdminRole)); - } - else - { - Alias alias = Tenants.GetAlias(); - foreach (UserRole userrole in UserRoles.GetUserRoles(user.UserId, alias.SiteId)) + id.AddClaim(new Claim(options.ClaimsIdentity.RoleClaimType, userrole.Role.Name)); + // host users are admins of every site + if (userrole.Role.Name == Constants.HostRole && userroles.Where(item => item.Role.Name == Constants.AdminRole).FirstOrDefault() == null) { - id.AddClaim(new Claim(options.ClaimsIdentity.RoleClaimType, userrole.Role.Name)); + id.AddClaim(new Claim(options.ClaimsIdentity.RoleClaimType, Constants.AdminRole)); } } } diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 8eac0f46..6da5e301 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -26,6 +26,7 @@ using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication; using System.Net; using Microsoft.AspNetCore.Authorization; +using Oqtane.Infrastructure; namespace Oqtane.Server { @@ -144,6 +145,33 @@ namespace Oqtane.Server // register custom claims principal factory for role claims services.AddTransient, ClaimsPrincipalFactory>(); + // register singleton scoped core services + services.AddSingleton(Configuration); + services.AddSingleton(); + + // install any modules or themes + ServiceProvider sp = services.BuildServiceProvider(); + var Installation = sp.GetRequiredService(); + Installation.Install("Modules,Themes"); + + // register transient scoped core services + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + // get list of loaded assemblies Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); @@ -177,28 +205,6 @@ namespace Oqtane.Server services.AddMvc().AddModuleAssemblies(moduleassemblies).AddNewtonsoftJson(); - // register singleton scoped core services - services.AddSingleton(Configuration); - services.AddSingleton(); - services.AddSingleton(); - - // register transient scoped core services - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - // dynamically register module services, contexts, and repository classes assemblies = AppDomain.CurrentDomain.GetAssemblies() .Where(item => item.FullName.StartsWith("Oqtane.") || item.FullName.Contains(".Module.")).ToArray(); @@ -358,10 +364,10 @@ namespace Oqtane.Server // register singleton scoped core services services.AddSingleton(Configuration); - services.AddSingleton(); - services.AddSingleton(); // register transient scoped core services + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -371,7 +377,6 @@ namespace Oqtane.Server services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/Oqtane.Shared/Models/ModuleDefinition.cs b/Oqtane.Shared/Models/ModuleDefinition.cs index 86d3dc54..55592575 100644 --- a/Oqtane.Shared/Models/ModuleDefinition.cs +++ b/Oqtane.Shared/Models/ModuleDefinition.cs @@ -1,19 +1,47 @@ -namespace Oqtane.Models +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Oqtane.Models { - public class ModuleDefinition + public class ModuleDefinition : IAuditable { + public int ModuleDefinitionId { get; set; } public string ModuleDefinitionName { get; set; } + + public string CreatedBy { get; set; } + public DateTime CreatedOn { get; set; } + public string ModifiedBy { get; set; } + public DateTime ModifiedOn { get; set; } + + [NotMapped] public string Name { get; set; } + [NotMapped] public string Description { get; set; } + [NotMapped] + public string Categories { get; set; } + [NotMapped] public string Version { get; set; } + [NotMapped] public string Owner { get; set; } + [NotMapped] public string Url { get; set; } + [NotMapped] public string Contact { get; set; } + [NotMapped] public string License { get; set; } + [NotMapped] public string Dependencies { get; set; } - public string Permissions { get; set; } + [NotMapped] + public string PermissionNames { get; set; } + [NotMapped] public string ControlTypeTemplate { get; set; } + [NotMapped] public string ControlTypeRoutes { get; set; } + [NotMapped] public string AssemblyName { get; set; } + [NotMapped] + public int SiteId { get; set; } + [NotMapped] + public string Permissions { get; set; } } } diff --git a/Oqtane.Shared/Models/PageTemplate.cs b/Oqtane.Shared/Models/PageTemplate.cs new file mode 100644 index 00000000..f4c3a979 --- /dev/null +++ b/Oqtane.Shared/Models/PageTemplate.cs @@ -0,0 +1,18 @@ +namespace Oqtane.Models +{ + public class PageTemplate + { + public string Name { get; set; } + public string Parent { get; set; } + public string Path { get; set; } + public int Order { get; set; } + public string Icon { get; set; } + public bool IsNavigation { get; set; } + public string PagePermissions { get; set; } + public string ModuleDefinitionName { get; set; } + public string ModulePermissions { get; set; } + public string Title { get; set; } + public string Pane { get; set; } + public string ContainerType { get; set; } + } +} diff --git a/Oqtane.Shared/Models/Site.cs b/Oqtane.Shared/Models/Site.cs index c9959e95..f1384879 100644 --- a/Oqtane.Shared/Models/Site.cs +++ b/Oqtane.Shared/Models/Site.cs @@ -8,6 +8,7 @@ namespace Oqtane.Models public string Name { get; set; } public string Logo { get; set; } public string DefaultThemeType { get; set; } + public string DefaultLayoutType { get; set; } public string CreatedBy { get; set; } diff --git a/Oqtane.Shared/Models/SiteUser.cs b/Oqtane.Shared/Models/SiteUser.cs deleted file mode 100644 index 15e23c41..00000000 --- a/Oqtane.Shared/Models/SiteUser.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; - -namespace Oqtane.Models -{ - public class SiteUser : IAuditable - { - public int SiteUserId { get; set; } - public int SiteId { get; set; } - public int UserId { get; set; } - - public string CreatedBy { get; set; } - public DateTime CreatedOn { get; set; } - public string ModifiedBy { get; set; } - public DateTime ModifiedOn { get; set; } - - public User User { get; set; } - } -} diff --git a/Oqtane.Shared/Models/User.cs b/Oqtane.Shared/Models/User.cs index ec8fca94..001c4472 100644 --- a/Oqtane.Shared/Models/User.cs +++ b/Oqtane.Shared/Models/User.cs @@ -9,7 +9,7 @@ namespace Oqtane.Models public string Username { get; set; } public string DisplayName { get; set; } public string Email { get; set; } - public bool IsHost { get; set; } + [NotMapped] public int SiteId { get; set; } [NotMapped] diff --git a/Oqtane.Shared/Models/UserRole.cs b/Oqtane.Shared/Models/UserRole.cs index 3ed423bb..556a31a8 100644 --- a/Oqtane.Shared/Models/UserRole.cs +++ b/Oqtane.Shared/Models/UserRole.cs @@ -16,5 +16,7 @@ namespace Oqtane.Models public DateTime ModifiedOn { get; set; } public Role Role { get; set; } + + public User User { get; set; } } } diff --git a/Oqtane.Shared/Shared/Constants.cs b/Oqtane.Shared/Shared/Constants.cs index b5f79aa3..2e253dcb 100644 --- a/Oqtane.Shared/Shared/Constants.cs +++ b/Oqtane.Shared/Shared/Constants.cs @@ -15,6 +15,7 @@ public const string AllUsersRole = "All Users"; public const string HostRole = "Host Users"; public const string AdminRole = "Administrators"; + public const string RegisteredRole = "Registered Users"; public const int ReloadApplication = 3; public const int ReloadSite = 2; From c3ff9ff12b8c5488c7be199aba1e748370b2414d Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 20 Sep 2019 08:50:55 -0400 Subject: [PATCH 04/96] improve installationmanager --- .../Themes/Controls/ControlPanel.razor | 1 - .../Controllers/ModuleDefinitionController.cs | 8 +-- Oqtane.Server/Controllers/ThemeController.cs | 8 +-- Oqtane.Server/Infrastructure/IInstallation.cs | 7 --- .../Infrastructure/IInstallationManager.cs | 7 +++ ...Installation.cs => InstallationManager.cs} | 12 +++-- Oqtane.Server/Startup.cs | 51 ++++++++++--------- 7 files changed, 52 insertions(+), 42 deletions(-) delete mode 100644 Oqtane.Server/Infrastructure/IInstallation.cs create mode 100644 Oqtane.Server/Infrastructure/IInstallationManager.cs rename Oqtane.Server/Infrastructure/{Installation.cs => InstallationManager.cs} (86%) diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index 38d5be96..1698a27a 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -129,7 +129,6 @@ List moduledefinitions; Dictionary containers = new Dictionary(); int pagemanagementmoduleid = -1; - string category = ""; string moduledefinitionname = ""; string pane = ""; string title = ""; diff --git a/Oqtane.Server/Controllers/ModuleDefinitionController.cs b/Oqtane.Server/Controllers/ModuleDefinitionController.cs index 8fa846eb..b7ebc057 100644 --- a/Oqtane.Server/Controllers/ModuleDefinitionController.cs +++ b/Oqtane.Server/Controllers/ModuleDefinitionController.cs @@ -12,12 +12,12 @@ namespace Oqtane.Controllers public class ModuleDefinitionController : Controller { private readonly IModuleDefinitionRepository ModuleDefinitions; - private readonly IInstallation Installation; + private readonly IInstallationManager InstallationManager; - public ModuleDefinitionController(IModuleDefinitionRepository ModuleDefinitions, IInstallation Installation) + public ModuleDefinitionController(IModuleDefinitionRepository ModuleDefinitions, IInstallationManager InstallationManager) { this.ModuleDefinitions = ModuleDefinitions; - this.Installation = Installation; + this.InstallationManager = InstallationManager; } // GET: api/ @@ -42,7 +42,7 @@ namespace Oqtane.Controllers [Authorize(Roles = Constants.HostRole)] public void InstallModules() { - Installation.Install("Modules"); + InstallationManager.InstallPackages("Modules"); } } } diff --git a/Oqtane.Server/Controllers/ThemeController.cs b/Oqtane.Server/Controllers/ThemeController.cs index 7cf466b8..a99c4b2e 100644 --- a/Oqtane.Server/Controllers/ThemeController.cs +++ b/Oqtane.Server/Controllers/ThemeController.cs @@ -12,12 +12,12 @@ namespace Oqtane.Controllers public class ThemeController : Controller { private readonly IThemeRepository Themes; - private readonly IInstallation Installation; + private readonly IInstallationManager InstallationManager; - public ThemeController(IThemeRepository Themes, IInstallation Installation) + public ThemeController(IThemeRepository Themes, IInstallationManager InstallationManager) { this.Themes = Themes; - this.Installation = Installation; + this.InstallationManager = InstallationManager; } // GET: api/ @@ -31,7 +31,7 @@ namespace Oqtane.Controllers [Authorize(Roles = Constants.HostRole)] public void InstallThemes() { - Installation.Install("Themes"); + InstallationManager.InstallPackages("Themes"); } } } diff --git a/Oqtane.Server/Infrastructure/IInstallation.cs b/Oqtane.Server/Infrastructure/IInstallation.cs deleted file mode 100644 index c7a501dc..00000000 --- a/Oqtane.Server/Infrastructure/IInstallation.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Oqtane.Infrastructure -{ - public interface IInstallation - { - void Install(string Folders); - } -} diff --git a/Oqtane.Server/Infrastructure/IInstallationManager.cs b/Oqtane.Server/Infrastructure/IInstallationManager.cs new file mode 100644 index 00000000..be673524 --- /dev/null +++ b/Oqtane.Server/Infrastructure/IInstallationManager.cs @@ -0,0 +1,7 @@ +namespace Oqtane.Infrastructure +{ + public interface IInstallationManager + { + void InstallPackages(string Folders); + } +} diff --git a/Oqtane.Server/Infrastructure/Installation.cs b/Oqtane.Server/Infrastructure/InstallationManager.cs similarity index 86% rename from Oqtane.Server/Infrastructure/Installation.cs rename to Oqtane.Server/Infrastructure/InstallationManager.cs index b8dbcb0e..04d7c768 100644 --- a/Oqtane.Server/Infrastructure/Installation.cs +++ b/Oqtane.Server/Infrastructure/InstallationManager.cs @@ -6,18 +6,18 @@ using Microsoft.AspNetCore.Hosting; namespace Oqtane.Infrastructure { - public class Installation : IInstallation + public class InstallationManager : IInstallationManager { private readonly IHostApplicationLifetime HostApplicationLifetime; private readonly IWebHostEnvironment environment; - public Installation(IHostApplicationLifetime HostApplicationLifetime, IWebHostEnvironment environment) + public InstallationManager(IHostApplicationLifetime HostApplicationLifetime, IWebHostEnvironment environment) { this.HostApplicationLifetime = HostApplicationLifetime; this.environment = environment; } - public void Install(string Folders) + public void InstallPackages(string Folders) { bool install = false; string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); @@ -26,6 +26,12 @@ namespace Oqtane.Infrastructure { string folder = Path.Combine(environment.WebRootPath, Folder); + // create folder if it does not exist + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } + // iterate through theme packages foreach (string packagename in Directory.GetFiles(folder, "*.nupkg")) { diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 6da5e301..ed9b1c39 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -147,12 +147,12 @@ namespace Oqtane.Server // register singleton scoped core services services.AddSingleton(Configuration); - services.AddSingleton(); + services.AddSingleton(); // install any modules or themes ServiceProvider sp = services.BuildServiceProvider(); - var Installation = sp.GetRequiredService(); - Installation.Install("Modules,Themes"); + var InstallationManager = sp.GetRequiredService(); + InstallationManager.InstallPackages("Modules,Themes"); // register transient scoped core services services.AddTransient(); @@ -329,6 +329,31 @@ namespace Oqtane.Server // register custom claims principal factory for role claims services.AddTransient, ClaimsPrincipalFactory>(); + services.AddSingleton(); + + // install any modules or themes + ServiceProvider sp = services.BuildServiceProvider(); + var InstallationManager = sp.GetRequiredService(); + InstallationManager.InstallPackages("Modules,Themes"); + + // register transient scoped core services + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + // get list of loaded assemblies Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); @@ -361,26 +386,6 @@ namespace Oqtane.Server } services.AddMvc().AddModuleAssemblies(moduleassemblies).AddNewtonsoftJson(); - - // register singleton scoped core services - services.AddSingleton(Configuration); - - // register transient scoped core services - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); // dynamically register module services, contexts, and repository classes assemblies = AppDomain.CurrentDomain.GetAssemblies() From ddf7cdbec73bb941ba2df6af8a71c0e98977a7a3 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 20 Sep 2019 09:52:40 -0400 Subject: [PATCH 05/96] improved dynamic CSS handling --- Oqtane.Client/Shared/Interop.cs | 15 +++++++++++++++ Oqtane.Client/Shared/ThemeBuilder.razor | 10 ++++++++++ Oqtane.Client/wwwroot/js/interop.js | 10 ++++++++++ Oqtane.Server/wwwroot/js/interop.js | 10 ++++++++++ 4 files changed, 45 insertions(+) diff --git a/Oqtane.Client/Shared/Interop.cs b/Oqtane.Client/Shared/Interop.cs index 15534ca1..594333fa 100644 --- a/Oqtane.Client/Shared/Interop.cs +++ b/Oqtane.Client/Shared/Interop.cs @@ -57,6 +57,21 @@ namespace Oqtane.Shared } } + public Task RemoveCSS(string filepattern) + { + try + { + jsRuntime.InvokeAsync( + "interop.removeCSS", + filepattern); + return Task.CompletedTask; + } + catch + { + return Task.CompletedTask; + } + } + public ValueTask GetElementByName(string name) { try diff --git a/Oqtane.Client/Shared/ThemeBuilder.razor b/Oqtane.Client/Shared/ThemeBuilder.razor index 63cdc8da..07e3a4a2 100644 --- a/Oqtane.Client/Shared/ThemeBuilder.razor +++ b/Oqtane.Client/Shared/ThemeBuilder.razor @@ -1,6 +1,8 @@ @using Oqtane.Shared @using Oqtane.Modules +@using Microsoft.JSInterop @namespace Oqtane.Shared +@inject IJSRuntime jsRuntime @DynamicComponent @@ -28,4 +30,12 @@ } }; } + + protected override async Task OnParametersSetAsync() + { + // remove any custom CSS + var interop = new Interop(jsRuntime); + await interop.RemoveCSS("Themes/"); + await interop.RemoveCSS("Modules/"); + } } diff --git a/Oqtane.Client/wwwroot/js/interop.js b/Oqtane.Client/wwwroot/js/interop.js index 7b23a474..09994e57 100644 --- a/Oqtane.Client/wwwroot/js/interop.js +++ b/Oqtane.Client/wwwroot/js/interop.js @@ -38,6 +38,16 @@ window.interop = { head.appendChild(link); }, + removeCSS: function (filePattern) { + var head = document.head; + var links = document.getElementsByTagName("link"); + for (var i = 0; i < links.length; i++) { + var link = links[i]; + if (link.rel === 'stylesheet' && link.href.includes(filePattern)) { + head.removeChild(link); + } + } + }, submitForm: function (path, fields) { const form = document.createElement('form'); form.method = 'post'; diff --git a/Oqtane.Server/wwwroot/js/interop.js b/Oqtane.Server/wwwroot/js/interop.js index 7b23a474..09994e57 100644 --- a/Oqtane.Server/wwwroot/js/interop.js +++ b/Oqtane.Server/wwwroot/js/interop.js @@ -38,6 +38,16 @@ window.interop = { head.appendChild(link); }, + removeCSS: function (filePattern) { + var head = document.head; + var links = document.getElementsByTagName("link"); + for (var i = 0; i < links.length; i++) { + var link = links[i]; + if (link.rel === 'stylesheet' && link.href.includes(filePattern)) { + head.removeChild(link); + } + } + }, submitForm: function (path, fields) { const form = document.createElement('form'); form.method = 'post'; From 5f62957752f534fde454ec5d54a491dc85722609 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 21 Sep 2019 22:15:44 -0400 Subject: [PATCH 06/96] Improved CSS handling --- Oqtane.Client/Modules/Admin/Pages/Add.razor | 3 ++ Oqtane.Client/Modules/Admin/Pages/Index.razor | 2 +- Oqtane.Client/Modules/Controls/Pager.razor | 2 +- .../Modules/Controls/PermissionGrid.razor | 4 ++ Oqtane.Client/Modules/HelloWorld/Index.razor | 42 +++++++++++++++++++ Oqtane.Client/Modules/ModuleBase.cs | 15 +++++++ Oqtane.Client/Shared/Interop.cs | 8 ++-- Oqtane.Client/Shared/ThemeBuilder.razor | 4 +- Oqtane.Client/Shared/Utilities.cs | 5 +++ Oqtane.Client/Themes/ContainerBase.cs | 20 +++++++++ .../Themes/Controls/ControlPanel.razor | 11 +++-- Oqtane.Client/Themes/ThemeBase.cs | 15 +++++++ Oqtane.Server/Repository/SiteRepository.cs | 23 +++++----- Oqtane.Server/wwwroot/js/interop.js | 26 ++++++------ Oqtane.Shared/Models/PageTemplate.cs | 1 + 15 files changed, 142 insertions(+), 39 deletions(-) create mode 100644 Oqtane.Client/Modules/HelloWorld/Index.razor diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index b5f12f42..36e6a20d 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -175,6 +175,9 @@ themes = ThemeService.GetThemeTypes(PageState.Themes); panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); + themetype = PageState.Site.DefaultThemeType; + layouttype = PageState.Site.DefaultLayoutType; + List permissionstrings = new List(); permissionstrings.Add(new PermissionString { PermissionName = "View", Permissions = Constants.AdminRole }); permissionstrings.Add(new PermissionString { PermissionName = "Edit", Permissions = Constants.AdminRole }); diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index 5e6e69da..ce6c13ca 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -11,7 +11,7 @@ { - +
Name   diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor index 60c2a8f8..aec5efb3 100644 --- a/Oqtane.Client/Modules/Controls/Pager.razor +++ b/Oqtane.Client/Modules/Controls/Pager.razor @@ -70,7 +70,7 @@ { if (string.IsNullOrEmpty(PageSize)) { - MaxItems = 5; + MaxItems = 10; } else { diff --git a/Oqtane.Client/Modules/Controls/PermissionGrid.razor b/Oqtane.Client/Modules/Controls/PermissionGrid.razor index 8aa2e331..2395bf98 100644 --- a/Oqtane.Client/Modules/Controls/PermissionGrid.razor +++ b/Oqtane.Client/Modules/Controls/PermissionGrid.razor @@ -102,6 +102,10 @@ { permissionnames = "View,Edit"; } + else + { + permissionnames = PermissionNames; + } roles = await RoleService.GetRolesAsync(ModuleState.SiteId); roles.Insert(0, new Role { Name = Constants.AllUsersRole }); diff --git a/Oqtane.Client/Modules/HelloWorld/Index.razor b/Oqtane.Client/Modules/HelloWorld/Index.razor new file mode 100644 index 00000000..8c115251 --- /dev/null +++ b/Oqtane.Client/Modules/HelloWorld/Index.razor @@ -0,0 +1,42 @@ +@using Microsoft.AspNetCore.Components.Web +@using Oqtane.Modules +@using Oqtane.Services +@namespace Oqtane.Modules.HelloWorld +@inherits ModuleBase +@inject ISettingService SettingService + +
+
+ +
+
+ +
+ +
+ @if (!string.IsNullOrEmpty(url)) + { +
+ + } +
+
+ +@code { + string url = ""; + + protected override async Task OnInitializedAsync() + { + Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); + url = SettingService.GetSetting(settings, "url", ""); + } + + private async Task Save() + { + Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); + SettingService.SetSetting(settings, "url", url); + await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); + StateHasChanged(); + } + +} diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index be430e57..24d04354 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -1,11 +1,16 @@ using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; using Oqtane.Shared; using Oqtane.Models; +using System.Threading.Tasks; namespace Oqtane.Modules { public class ModuleBase : ComponentBase, IModuleControl { + [Inject] + protected IJSRuntime JSRuntime { get; set; } + [CascadingParameter] protected PageState PageState { get; set; } @@ -25,6 +30,16 @@ namespace Oqtane.Modules return "Modules/" + this.GetType().Namespace + "/"; } + public async Task AddCSS(string Url) + { + if (!Url.StartsWith("http")) + { + Url = ModulePath() + Url; + } + var interop = new Interop(JSRuntime); + await interop.AddCSS("Module:" + Utilities.CreateIdFromUrl(Url), Url); + } + public string NavigateUrl() { return NavigateUrl(PageState.Page.Path); diff --git a/Oqtane.Client/Shared/Interop.cs b/Oqtane.Client/Shared/Interop.cs index 594333fa..8987e650 100644 --- a/Oqtane.Client/Shared/Interop.cs +++ b/Oqtane.Client/Shared/Interop.cs @@ -42,13 +42,13 @@ namespace Oqtane.Shared } } - public Task AddCSS(string filename) + public Task AddCSS(string id, string url) { try { jsRuntime.InvokeAsync( "interop.addCSS", - filename); + id, url); return Task.CompletedTask; } catch @@ -57,13 +57,13 @@ namespace Oqtane.Shared } } - public Task RemoveCSS(string filepattern) + public Task RemoveCSS(string pattern) { try { jsRuntime.InvokeAsync( "interop.removeCSS", - filepattern); + pattern); return Task.CompletedTask; } catch diff --git a/Oqtane.Client/Shared/ThemeBuilder.razor b/Oqtane.Client/Shared/ThemeBuilder.razor index 07e3a4a2..c9fa26a0 100644 --- a/Oqtane.Client/Shared/ThemeBuilder.razor +++ b/Oqtane.Client/Shared/ThemeBuilder.razor @@ -35,7 +35,7 @@ { // remove any custom CSS var interop = new Interop(jsRuntime); - await interop.RemoveCSS("Themes/"); - await interop.RemoveCSS("Modules/"); + await interop.RemoveCSS("Theme:"); + await interop.RemoveCSS("Module:"); } } diff --git a/Oqtane.Client/Shared/Utilities.cs b/Oqtane.Client/Shared/Utilities.cs index cd2af1d3..42f2abde 100644 --- a/Oqtane.Client/Shared/Utilities.cs +++ b/Oqtane.Client/Shared/Utilities.cs @@ -191,5 +191,10 @@ namespace Oqtane.Shared return ""; } } + + public static string CreateIdFromUrl(string value) + { + return value.Replace("/", "_").Replace("\\", "_").Replace(".", "_"); + } } } diff --git a/Oqtane.Client/Themes/ContainerBase.cs b/Oqtane.Client/Themes/ContainerBase.cs index d234002d..4475bed6 100644 --- a/Oqtane.Client/Themes/ContainerBase.cs +++ b/Oqtane.Client/Themes/ContainerBase.cs @@ -1,11 +1,16 @@ using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; using Oqtane.Shared; using Oqtane.Models; +using System.Threading.Tasks; namespace Oqtane.Themes { public class ContainerBase : ComponentBase, IContainerControl { + [Inject] + protected IJSRuntime JSRuntime { get; set; } + [CascadingParameter] protected PageState PageState { get; set; } @@ -14,6 +19,21 @@ namespace Oqtane.Themes public virtual string Name { get; set; } + public string ThemePath() + { + return "Themes/" + this.GetType().Namespace + "/"; + } + + public async Task AddCSS(string Url) + { + if (!Url.StartsWith("http")) + { + Url = ThemePath() + Url; + } + var interop = new Interop(JSRuntime); + await interop.AddCSS("Theme:" + Utilities.CreateIdFromUrl(Url), Url); + } + public string NavigateUrl() { return NavigateUrl(PageState.Page.Path); diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index 1698a27a..e19ebbfc 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -19,6 +19,11 @@
x
+
-
-
diff --git a/Oqtane.Client/Themes/ThemeBase.cs b/Oqtane.Client/Themes/ThemeBase.cs index 874d76e4..1f6b1247 100644 --- a/Oqtane.Client/Themes/ThemeBase.cs +++ b/Oqtane.Client/Themes/ThemeBase.cs @@ -1,10 +1,15 @@ using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; using Oqtane.Shared; +using System.Threading.Tasks; namespace Oqtane.Themes { public class ThemeBase : ComponentBase, IThemeControl { + [Inject] + protected IJSRuntime JSRuntime { get; set; } + [CascadingParameter] protected PageState PageState { get; set; } public virtual string Name { get; set; } @@ -15,6 +20,16 @@ namespace Oqtane.Themes return "Themes/" + this.GetType().Namespace + "/"; } + public async Task AddCSS(string Url) + { + if (!Url.StartsWith("http")) + { + Url = ThemePath() + Url; + } + var interop = new Interop(JSRuntime); + await interop.AddCSS("Theme:" + Utilities.CreateIdFromUrl(Url), Url); + } + public string NavigateUrl() { return NavigateUrl(PageState.Page.Path); diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index 519b41cd..c52d6919 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -28,27 +28,27 @@ namespace Oqtane.Repository // defines the default site template SiteTemplate = new List(); - SiteTemplate.Add(new PageTemplate { Name = "Home", Parent = "", Path = "", Order = 1, Icon = "home", IsNavigation = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Home", Parent = "", Path = "", Order = 1, Icon = "home", IsNavigation = true, EditMode = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "", ModulePermissions = "", Title = "", Pane = "", ContainerType = "" }); - SiteTemplate.Add(new PageTemplate { Name = "Admin", Parent = "", Path = "admin", Order = 1, Icon = "", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Admin", Parent = "", Path = "admin", Order = 1, Icon = "", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Dashboard, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Administration", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Site Management", Parent = "Admin", Path = "admin/sites", Order = 1, Icon = "globe", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Site Management", Parent = "Admin", Path = "admin/sites", Order = 1, Icon = "globe", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Sites, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Site Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Page Management", Parent = "Admin", Path = "admin/pages", Order = 1, Icon = "layers", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Page Management", Parent = "Admin", Path = "admin/pages", Order = 1, Icon = "layers", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Pages, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Page Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Module Management", Parent = "Admin", Path = "admin/modules", Order = 1, Icon = "browser", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Module Management", Parent = "Admin", Path = "admin/modules", Order = 1, Icon = "browser", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.ModuleDefinitions, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Module Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Theme Management", Parent = "Admin", Path = "admin/themes", Order = 1, Icon = "brush", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Theme Management", Parent = "Admin", Path = "admin/themes", Order = 1, Icon = "brush", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Themes, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Theme Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "User Management", Parent = "Admin", Path = "admin/users", Order = 1, Icon = "person", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "User Management", Parent = "Admin", Path = "admin/users", Order = 1, Icon = "person", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Users, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "User Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Role Management", Parent = "Admin", Path = "admin/roles", Order = 1, Icon = "lock-locked", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Role Management", Parent = "Admin", Path = "admin/roles", Order = 1, Icon = "lock-locked", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Roles, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Role Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Login", Parent = "", Path = "login", Order = 1, Icon = "lock-locked", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Login", Parent = "", Path = "login", Order = 1, Icon = "lock-locked", IsNavigation = false, EditMode = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Login, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Login", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Register", Parent = "", Path = "register", Order = 1, Icon = "person", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Register", Parent = "", Path = "register", Order = 1, Icon = "person", IsNavigation = false, EditMode = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Register, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Register", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); - SiteTemplate.Add(new PageTemplate { Name = "Profile", Parent = "", Path = "profile", Order = 1, Icon = "person", IsNavigation = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", + SiteTemplate.Add(new PageTemplate { Name = "Profile", Parent = "", Path = "profile", Order = 1, Icon = "person", IsNavigation = false, EditMode = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", ModuleDefinitionName = "Oqtane.Modules.Admin.Profile, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "User Profile", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" }); } @@ -119,6 +119,7 @@ namespace Oqtane.Repository Path = pagetemplate.Path, Order = pagetemplate.Order, IsNavigation = pagetemplate.IsNavigation, + EditMode = pagetemplate.EditMode, ThemeType = site.DefaultThemeType, LayoutType = site.DefaultLayoutType, Icon = pagetemplate.Icon, diff --git a/Oqtane.Server/wwwroot/js/interop.js b/Oqtane.Server/wwwroot/js/interop.js index 09994e57..0832cee0 100644 --- a/Oqtane.Server/wwwroot/js/interop.js +++ b/Oqtane.Server/wwwroot/js/interop.js @@ -28,23 +28,21 @@ window.interop = { return ""; } }, - addCSS: function (fileName) { - var head = document.head; - var link = document.createElement("link"); - - link.type = "text/css"; - link.rel = "stylesheet"; - link.href = fileName; - - head.appendChild(link); + addCSS: function (id, url) { + if (document.getElementById(id) === null) { + var link = document.createElement("link"); + link.id = id; + link.type = "text/css"; + link.rel = "stylesheet"; + link.href = url; + document.head.appendChild(link); + } }, - removeCSS: function (filePattern) { - var head = document.head; + removeCSS: function (pattern) { var links = document.getElementsByTagName("link"); for (var i = 0; i < links.length; i++) { - var link = links[i]; - if (link.rel === 'stylesheet' && link.href.includes(filePattern)) { - head.removeChild(link); + if (links[i].id.includes(pattern)) { + document.head.removeChild(links[i]); } } }, diff --git a/Oqtane.Shared/Models/PageTemplate.cs b/Oqtane.Shared/Models/PageTemplate.cs index f4c3a979..a41cab80 100644 --- a/Oqtane.Shared/Models/PageTemplate.cs +++ b/Oqtane.Shared/Models/PageTemplate.cs @@ -8,6 +8,7 @@ public int Order { get; set; } public string Icon { get; set; } public bool IsNavigation { get; set; } + public bool EditMode { get; set; } public string PagePermissions { get; set; } public string ModuleDefinitionName { get; set; } public string ModulePermissions { get; set; } From c56845a451a81b3a0f7e5d814b6e2685886dd970 Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Tue, 24 Sep 2019 11:33:23 +0200 Subject: [PATCH 07/96] update to .net core 3.0.0 final and lastest wasm build --- Oqtane.Client/Oqtane.Client.csproj | 8 ++++---- Oqtane.Server/Oqtane.Server.csproj | 12 ++++++------ Oqtane.Shared/Oqtane.Shared.csproj | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj index e5fd25d8..06a67d09 100644 --- a/Oqtane.Client/Oqtane.Client.csproj +++ b/Oqtane.Client/Oqtane.Client.csproj @@ -27,10 +27,10 @@ - - - - + + + + diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj index 9dce1d41..fca66b6f 100644 --- a/Oqtane.Server/Oqtane.Server.csproj +++ b/Oqtane.Server/Oqtane.Server.csproj @@ -38,12 +38,12 @@ - - - - - - + + + + + + diff --git a/Oqtane.Shared/Oqtane.Shared.csproj b/Oqtane.Shared/Oqtane.Shared.csproj index 4db70474..1292389d 100644 --- a/Oqtane.Shared/Oqtane.Shared.csproj +++ b/Oqtane.Shared/Oqtane.Shared.csproj @@ -21,8 +21,8 @@ - - + + From 3af2ca016848320e0a7305c91559955ae65f5f30 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Tue, 24 Sep 2019 17:26:14 -0400 Subject: [PATCH 08/96] utilize _Imports.razor to simplify module declarations --- Oqtane.Client/App.razor | 5 +-- .../Modules/Admin/Dashboard/Index.razor | 8 +--- Oqtane.Client/Modules/Admin/Login/Index.razor | 11 +---- .../Modules/Admin/ModuleDefinitions/Add.razor | 8 +--- .../Admin/ModuleDefinitions/Edit.razor | 10 +---- .../Admin/ModuleDefinitions/Index.razor | 7 +--- .../Modules/Admin/ModuleSettings/Index.razor | 10 +---- Oqtane.Client/Modules/Admin/Pages/Add.razor | 10 +---- .../Modules/Admin/Pages/Delete.razor | 10 +---- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 10 +---- Oqtane.Client/Modules/Admin/Pages/Index.razor | 8 +--- .../Modules/Admin/Profile/Index.razor | 8 +--- .../Modules/Admin/Register/Index.razor | 7 +--- Oqtane.Client/Modules/Admin/Roles/Index.razor | 7 +--- Oqtane.Client/Modules/Admin/Sites/Add.razor | 9 +--- Oqtane.Client/Modules/Admin/Sites/Index.razor | 7 +--- Oqtane.Client/Modules/Admin/Tenants/Add.razor | 9 +--- .../Modules/Admin/Tenants/Index.razor | 7 +--- Oqtane.Client/Modules/Admin/Themes/Add.razor | 8 +--- .../Modules/Admin/Themes/Index.razor | 7 +--- Oqtane.Client/Modules/Admin/Users/Index.razor | 8 +--- .../Modules/Controls/ActionLink.razor | 8 +--- .../Modules/Controls/AuditInfo.razor | 4 +- .../Modules/Controls/FileUpload.razor | 3 +- .../Modules/Controls/ModuleMessage.razor | 4 +- Oqtane.Client/Modules/Controls/Pager.razor | 4 +- .../Modules/Controls/PermissionGrid.razor | 8 +--- .../Modules/Controls/TriStateCheckBox.razor | 3 +- Oqtane.Client/Modules/Counter/Index.razor | 2 - Oqtane.Client/Modules/Counter/Module.cs | 3 +- Oqtane.Client/Modules/HelloWorld/Index.razor | 42 ------------------- Oqtane.Client/Modules/HtmlText/Edit.razor | 8 +--- Oqtane.Client/Modules/HtmlText/Index.razor | 7 +--- Oqtane.Client/Modules/HtmlText/Module.cs | 3 +- Oqtane.Client/Modules/Weather/Index.razor | 2 - Oqtane.Client/Modules/Weather/Module.cs | 3 +- Oqtane.Client/Shared/ContainerBuilder.razor | 5 +-- Oqtane.Client/Shared/Installer.razor | 6 +-- Oqtane.Client/Shared/Interop.cs | 1 - Oqtane.Client/Shared/ModuleInstance.razor | 5 +-- Oqtane.Client/Shared/Pane.razor | 9 +--- Oqtane.Client/Shared/PaneLayout.razor | 4 +- Oqtane.Client/Shared/SiteRouter.razor | 12 +----- Oqtane.Client/Shared/ThemeBuilder.razor | 5 +-- Oqtane.Client/Themes/AdminContainer.razor | 4 +- .../Themes/Controls/ControlPanel.razor | 9 +--- Oqtane.Client/Themes/Controls/Login.razor | 9 +--- Oqtane.Client/Themes/Controls/Logo.razor | 4 +- Oqtane.Client/Themes/Controls/Menu.razor | 8 +--- .../Themes/Controls/ModuleActions.razor | 8 +--- .../Themes/Controls/ModuleTitle.razor | 4 +- .../{Profile.razor => UserProfile.razor} | 5 +-- Oqtane.Client/Themes/DefaultContainer.razor | 4 +- Oqtane.Client/Themes/Theme1/Container1.razor | 5 +-- Oqtane.Client/Themes/Theme1/Theme1.razor | 7 +--- Oqtane.Client/Themes/Theme2/Container2.razor | 5 +-- Oqtane.Client/Themes/Theme2/Theme2.razor | 7 +--- .../Themes/Theme3/HorizontalLayout.razor | 4 +- Oqtane.Client/Themes/Theme3/Theme3.razor | 7 +--- .../Themes/Theme3/VerticalLayout.razor | 4 +- Oqtane.Client/_Imports.razor | 19 +++++++++ Oqtane.Client/wwwroot/css/site.css | 5 +-- .../Repository/Context/DBContextBase.cs | 2 +- .../Repository/ModuleDefinitionRepository.cs | 10 +++++ Oqtane.Server/wwwroot/css/site.css | 2 +- 65 files changed, 92 insertions(+), 365 deletions(-) delete mode 100644 Oqtane.Client/Modules/HelloWorld/Index.razor rename Oqtane.Client/Themes/Controls/{Profile.razor => UserProfile.razor} (81%) create mode 100644 Oqtane.Client/_Imports.razor diff --git a/Oqtane.Client/App.razor b/Oqtane.Client/App.razor index 91b327ce..0723e1e7 100644 --- a/Oqtane.Client/App.razor +++ b/Oqtane.Client/App.razor @@ -1,7 +1,4 @@ -@using Microsoft.AspNetCore.Components.Authorization -@using Oqtane.Shared -@using Oqtane.Services -@inject IInstallationService InstallationService +@inject IInstallationService InstallationService @if (Initialized) { diff --git a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor index ec2be216..b7084f19 100644 --- a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor +++ b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Modules -@using Oqtane.Services -@using Oqtane.Models; -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.Dashboard +@namespace Oqtane.Modules.Admin.Dashboard @inherits ModuleBase @inject IPageService PageService @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index 06157646..21e66851 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -1,13 +1,4 @@ -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.AspNetCore.Components.Web -@using Microsoft.AspNetCore.Components.Routing -@using Oqtane.Modules -@using Microsoft.JSInterop -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Providers -@using Oqtane.Shared -@namespace Oqtane.Modules.Admin.Login +@namespace Oqtane.Modules.Admin.Login @inherits ModuleBase @inject NavigationManager NavigationManager @inject IJSRuntime jsRuntime diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index b9a6ea41..d5a7cdfe 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Modules -@using Oqtane.Services -@using Oqtane.Shared -@namespace Oqtane.Modules.Admin.ModuleDefinitions +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFileService FileService diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor index d14c0647..461d7bd5 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor @@ -1,12 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.ModuleDefinitions +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject IModuleDefinitionService ModuleDefinitionService @inject NavigationManager NavigationManager diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index 5bc1eac1..db5b8c54 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -1,9 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@namespace Oqtane.Modules.Admin.ModuleDefinitions +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject IModuleDefinitionService ModuleDefinitionService diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor index 469c9499..0ad49710 100644 --- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -1,12 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@using Oqtane.Modules.Controls -@namespace Oqtane.Modules.Admin.ModuleSettings +@namespace Oqtane.Modules.Admin.ModuleSettings @inherits ModuleBase @inject NavigationManager NavigationManager @inject IThemeService ThemeService diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 36e6a20d..0e413bec 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -1,12 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor index 7a4fc272..1372a997 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Delete.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -1,12 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index a7b52c2b..0eb64d17 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -1,12 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index ce6c13ca..fcb98b6a 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Shared -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @if (PageState.Pages != null) diff --git a/Oqtane.Client/Modules/Admin/Profile/Index.razor b/Oqtane.Client/Modules/Admin/Profile/Index.razor index dc89e517..52bc2fe3 100644 --- a/Oqtane.Client/Modules/Admin/Profile/Index.razor +++ b/Oqtane.Client/Modules/Admin/Profile/Index.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Modules -@using Oqtane.Models -@using Oqtane.Services -@namespace Oqtane.Modules.Admin.Profile +@namespace Oqtane.Modules.Admin.Profile @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor index 54e5640e..caceddfc 100644 --- a/Oqtane.Client/Modules/Admin/Register/Index.razor +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -1,9 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules -@using Oqtane.Models -@using Oqtane.Services -@namespace Oqtane.Modules.Admin.Register +@namespace Oqtane.Modules.Admin.Register @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService diff --git a/Oqtane.Client/Modules/Admin/Roles/Index.razor b/Oqtane.Client/Modules/Admin/Roles/Index.razor index ac5deb59..e3b65f3e 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Index.razor @@ -1,9 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@namespace Oqtane.Modules.Admin.Roles +@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 62cec359..159753a3 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Add.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -1,11 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.Sites +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject NavigationManager NavigationManager @inject ITenantService TenantService diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index aa75fb4c..214497c4 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -1,9 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@namespace Oqtane.Modules.Admin.Sites +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject ISiteService SiteService diff --git a/Oqtane.Client/Modules/Admin/Tenants/Add.razor b/Oqtane.Client/Modules/Admin/Tenants/Add.razor index 50a2e0bd..9178d2b5 100644 --- a/Oqtane.Client/Modules/Admin/Tenants/Add.razor +++ b/Oqtane.Client/Modules/Admin/Tenants/Add.razor @@ -1,11 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Models -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Admin.Tenants +@namespace Oqtane.Modules.Admin.Tenants @inherits ModuleBase @inject NavigationManager NavigationManager @inject ITenantService TenantService diff --git a/Oqtane.Client/Modules/Admin/Tenants/Index.razor b/Oqtane.Client/Modules/Admin/Tenants/Index.razor index 1f1f618e..e173788c 100644 --- a/Oqtane.Client/Modules/Admin/Tenants/Index.razor +++ b/Oqtane.Client/Modules/Admin/Tenants/Index.razor @@ -1,9 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@namespace Oqtane.Modules.Admin.Tenants +@namespace Oqtane.Modules.Admin.Tenants @inherits ModuleBase @inject ITenantService TenantService diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor index 6e9d80c5..03093f16 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Add.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.Controls -@using Oqtane.Modules -@using Oqtane.Services -@using Oqtane.Shared -@namespace Oqtane.Modules.Admin.Themes +@namespace Oqtane.Modules.Admin.Themes @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFileService FileService diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index d1c188fb..47849695 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -1,9 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@namespace Oqtane.Modules.Admin.Themes +@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 bc0cf117..77b2d7bc 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@using Oqtane.Shared -@namespace Oqtane.Modules.Admin.Users +@namespace Oqtane.Modules.Admin.Users @inherits ModuleBase @inject IUserRoleService UserRoleService diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor index 498ea8e7..1d5b6edd 100644 --- a/Oqtane.Client/Modules/Controls/ActionLink.razor +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules -@using Oqtane.Services -@using Oqtane.Shared -@using Oqtane.Security -@namespace Oqtane.Modules.Controls +@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 f83705a7..4840dc54 100644 --- a/Oqtane.Client/Modules/Controls/AuditInfo.razor +++ b/Oqtane.Client/Modules/Controls/AuditInfo.razor @@ -1,6 +1,4 @@ -@using Oqtane.Modules -@using Microsoft.AspNetCore.Components.Web -@namespace Oqtane.Modules.Controls +@namespace Oqtane.Modules.Controls @inherits ModuleBase @if (text != "") diff --git a/Oqtane.Client/Modules/Controls/FileUpload.razor b/Oqtane.Client/Modules/Controls/FileUpload.razor index 626673a2..6f19a0f5 100644 --- a/Oqtane.Client/Modules/Controls/FileUpload.razor +++ b/Oqtane.Client/Modules/Controls/FileUpload.razor @@ -1,5 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@namespace Oqtane.Modules.Controls +@namespace Oqtane.Modules.Controls @if (multiple) { diff --git a/Oqtane.Client/Modules/Controls/ModuleMessage.razor b/Oqtane.Client/Modules/Controls/ModuleMessage.razor index 5b088b43..283b890a 100644 --- a/Oqtane.Client/Modules/Controls/ModuleMessage.razor +++ b/Oqtane.Client/Modules/Controls/ModuleMessage.razor @@ -1,6 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules -@namespace Oqtane.Modules.Controls +@namespace Oqtane.Modules.Controls @inherits ModuleBase @if (Message != "") diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor index aec5efb3..82396626 100644 --- a/Oqtane.Client/Modules/Controls/Pager.razor +++ b/Oqtane.Client/Modules/Controls/Pager.razor @@ -1,6 +1,4 @@ -@using Oqtane.Modules -@using Microsoft.AspNetCore.Components.Web -@namespace Oqtane.Modules.Controls +@namespace Oqtane.Modules.Controls @inherits ModuleBase @typeparam TableItem diff --git a/Oqtane.Client/Modules/Controls/PermissionGrid.razor b/Oqtane.Client/Modules/Controls/PermissionGrid.razor index 2395bf98..2345eb37 100644 --- a/Oqtane.Client/Modules/Controls/PermissionGrid.razor +++ b/Oqtane.Client/Modules/Controls/PermissionGrid.razor @@ -1,10 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Models -@using Oqtane.Security -@using Oqtane.Shared -@namespace Oqtane.Modules.Controls +@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 b411d723..c8881f3f 100644 --- a/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor +++ b/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor @@ -1,5 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@namespace Oqtane.Modules.Controls +@namespace Oqtane.Modules.Controls diff --git a/Oqtane.Client/Modules/Counter/Index.razor b/Oqtane.Client/Modules/Counter/Index.razor index 9b8dd4b3..b511cfc0 100644 --- a/Oqtane.Client/Modules/Counter/Index.razor +++ b/Oqtane.Client/Modules/Counter/Index.razor @@ -1,5 +1,3 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules @namespace Oqtane.Modules.Counter @inherits ModuleBase Current count: @currentCount diff --git a/Oqtane.Client/Modules/Counter/Module.cs b/Oqtane.Client/Modules/Counter/Module.cs index 972e366f..5f509ae2 100644 --- a/Oqtane.Client/Modules/Counter/Module.cs +++ b/Oqtane.Client/Modules/Counter/Module.cs @@ -1,5 +1,4 @@ -using Oqtane.Modules; -using System.Collections.Generic; +using System.Collections.Generic; namespace Oqtane.Modules.Counter { diff --git a/Oqtane.Client/Modules/HelloWorld/Index.razor b/Oqtane.Client/Modules/HelloWorld/Index.razor deleted file mode 100644 index 8c115251..00000000 --- a/Oqtane.Client/Modules/HelloWorld/Index.razor +++ /dev/null @@ -1,42 +0,0 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules -@using Oqtane.Services -@namespace Oqtane.Modules.HelloWorld -@inherits ModuleBase -@inject ISettingService SettingService - -
-
- -
-
- -
- -
- @if (!string.IsNullOrEmpty(url)) - { -
- - } -
-
- -@code { - string url = ""; - - protected override async Task OnInitializedAsync() - { - Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); - url = SettingService.GetSetting(settings, "url", ""); - } - - private async Task Save() - { - Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); - SettingService.SetSetting(settings, "url", url); - await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); - StateHasChanged(); - } - -} diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor index aa3a20ae..f8a993b6 100644 --- a/Oqtane.Client/Modules/HtmlText/Edit.razor +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -1,11 +1,5 @@ -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules -@using Oqtane.Modules.Controls -@using Oqtane.Modules.HtmlText.Services +@using Oqtane.Modules.HtmlText.Services @using Oqtane.Modules.HtmlText.Models -@using System.Net.Http; -@using Oqtane.Shared; @namespace Oqtane.Modules.HtmlText @inherits ModuleBase @inject NavigationManager NavigationManager diff --git a/Oqtane.Client/Modules/HtmlText/Index.razor b/Oqtane.Client/Modules/HtmlText/Index.razor index 1d64725e..24639b22 100644 --- a/Oqtane.Client/Modules/HtmlText/Index.razor +++ b/Oqtane.Client/Modules/HtmlText/Index.razor @@ -1,10 +1,5 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules.HtmlText.Services -@using Oqtane.Modules +@using Oqtane.Modules.HtmlText.Services @using Oqtane.Modules.HtmlText.Models -@using System.Net.Http; -@using Oqtane.Modules.Controls -@using Oqtane.Shared; @namespace Oqtane.Modules.HtmlText @inherits ModuleBase @inject NavigationManager NavigationManager diff --git a/Oqtane.Client/Modules/HtmlText/Module.cs b/Oqtane.Client/Modules/HtmlText/Module.cs index 2928d111..38682a92 100644 --- a/Oqtane.Client/Modules/HtmlText/Module.cs +++ b/Oqtane.Client/Modules/HtmlText/Module.cs @@ -1,5 +1,4 @@ -using Oqtane.Modules; -using System.Collections.Generic; +using System.Collections.Generic; namespace Oqtane.Modules.HtmlText { diff --git a/Oqtane.Client/Modules/Weather/Index.razor b/Oqtane.Client/Modules/Weather/Index.razor index e410592e..88e346f8 100644 --- a/Oqtane.Client/Modules/Weather/Index.razor +++ b/Oqtane.Client/Modules/Weather/Index.razor @@ -1,5 +1,3 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Modules @using Oqtane.Modules.Weather.Services @namespace Oqtane.Modules.Weather @inherits ModuleBase diff --git a/Oqtane.Client/Modules/Weather/Module.cs b/Oqtane.Client/Modules/Weather/Module.cs index 04286cba..65d719d8 100644 --- a/Oqtane.Client/Modules/Weather/Module.cs +++ b/Oqtane.Client/Modules/Weather/Module.cs @@ -1,5 +1,4 @@ -using Oqtane.Modules; -using System.Collections.Generic; +using System.Collections.Generic; namespace Oqtane.Modules.Weather { diff --git a/Oqtane.Client/Shared/ContainerBuilder.razor b/Oqtane.Client/Shared/ContainerBuilder.razor index 10e30bf7..09106a68 100644 --- a/Oqtane.Client/Shared/ContainerBuilder.razor +++ b/Oqtane.Client/Shared/ContainerBuilder.razor @@ -1,7 +1,4 @@ -@using Oqtane.Models -@using Oqtane.Shared -@using Oqtane.Modules -@namespace Oqtane.Shared +@namespace Oqtane.Shared @DynamicComponent diff --git a/Oqtane.Client/Shared/Installer.razor b/Oqtane.Client/Shared/Installer.razor index 3b278a54..479211f7 100644 --- a/Oqtane.Client/Shared/Installer.razor +++ b/Oqtane.Client/Shared/Installer.razor @@ -1,8 +1,4 @@ -@using Microsoft.AspNetCore.Components.Web -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Shared -@namespace Oqtane.Shared +@namespace Oqtane.Shared @inject NavigationManager NavigationManager @inject IInstallationService InstallationService @inject ISiteService SiteService diff --git a/Oqtane.Client/Shared/Interop.cs b/Oqtane.Client/Shared/Interop.cs index 8987e650..16a0096f 100644 --- a/Oqtane.Client/Shared/Interop.cs +++ b/Oqtane.Client/Shared/Interop.cs @@ -1,5 +1,4 @@ using Microsoft.JSInterop; -using System; using System.Threading.Tasks; namespace Oqtane.Shared diff --git a/Oqtane.Client/Shared/ModuleInstance.razor b/Oqtane.Client/Shared/ModuleInstance.razor index 2b67de38..3e31897a 100644 --- a/Oqtane.Client/Shared/ModuleInstance.razor +++ b/Oqtane.Client/Shared/ModuleInstance.razor @@ -1,7 +1,4 @@ -@using Oqtane.Models -@using Oqtane.Shared -@using Oqtane.Modules -@namespace Oqtane.Shared +@namespace Oqtane.Shared @DynamicComponent diff --git a/Oqtane.Client/Shared/Pane.razor b/Oqtane.Client/Shared/Pane.razor index cb66c01e..f55e9881 100644 --- a/Oqtane.Client/Shared/Pane.razor +++ b/Oqtane.Client/Shared/Pane.razor @@ -1,11 +1,4 @@ -@using System -@using Oqtane.Services -@using Oqtane.Modules -@using Oqtane.Models -@using Oqtane.Shared -@using Oqtane.Security -@using System.Linq -@namespace Oqtane.Shared +@namespace Oqtane.Shared @inject IUserService UserService @inject IModuleService ModuleService @inject IModuleDefinitionService ModuleDefinitionService diff --git a/Oqtane.Client/Shared/PaneLayout.razor b/Oqtane.Client/Shared/PaneLayout.razor index 71366a87..9841a568 100644 --- a/Oqtane.Client/Shared/PaneLayout.razor +++ b/Oqtane.Client/Shared/PaneLayout.razor @@ -1,6 +1,4 @@ -@using System -@using Oqtane.Shared -@namespace Oqtane.Shared +@namespace Oqtane.Shared @DynamicComponent diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor index 3f4c06ce..ab32578e 100644 --- a/Oqtane.Client/Shared/SiteRouter.razor +++ b/Oqtane.Client/Shared/SiteRouter.razor @@ -1,14 +1,4 @@ -@using System -@using Oqtane.Services -@using Oqtane.Models -@using Oqtane.Modules -@using System.Linq -@using System.Collections.Generic -@using Oqtane.Shared -@using Oqtane.Security -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.AspNetCore.Components.Routing -@namespace Oqtane.Shared +@namespace Oqtane.Shared @inject AuthenticationStateProvider AuthenticationStateProvider @inject SiteState SiteState @inject NavigationManager NavigationManager diff --git a/Oqtane.Client/Shared/ThemeBuilder.razor b/Oqtane.Client/Shared/ThemeBuilder.razor index c9fa26a0..c4734e89 100644 --- a/Oqtane.Client/Shared/ThemeBuilder.razor +++ b/Oqtane.Client/Shared/ThemeBuilder.razor @@ -1,7 +1,4 @@ -@using Oqtane.Shared -@using Oqtane.Modules -@using Microsoft.JSInterop -@namespace Oqtane.Shared +@namespace Oqtane.Shared @inject IJSRuntime jsRuntime @DynamicComponent diff --git a/Oqtane.Client/Themes/AdminContainer.razor b/Oqtane.Client/Themes/AdminContainer.razor index c7380739..721dcb44 100644 --- a/Oqtane.Client/Themes/AdminContainer.razor +++ b/Oqtane.Client/Themes/AdminContainer.razor @@ -1,6 +1,4 @@ -@using Oqtane.Shared -@using Oqtane.Themes.Controls -@namespace Oqtane.Themes +@namespace Oqtane.Themes @inherits ContainerBase