diff --git a/Oqtane.Client/Themes/Controls/Container/ModuleTitle.razor b/Oqtane.Client/Themes/Controls/Container/ModuleTitle.razor index a866c757..ac302c17 100644 --- a/Oqtane.Client/Themes/Controls/Container/ModuleTitle.razor +++ b/Oqtane.Client/Themes/Controls/Container/ModuleTitle.razor @@ -5,9 +5,7 @@ @inject SiteState SiteState - - @((MarkupString)title) - + @((MarkupString)title) @code { diff --git a/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor b/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor index de4d7957..8f096786 100644 --- a/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor @@ -224,262 +224,266 @@ } @code{ - private bool _canViewAdminDashboard = false; - private bool _showEditMode = false; - private bool _deleteConfirmation = false; - private List _categories = new List(); - private List _allModuleDefinitions; - private List _moduleDefinitions; - private List _pages = new List(); - private List _modules = new List(); - private List _containers = new List(); - private string _category = "Common"; + private bool _canViewAdminDashboard = false; + private bool _showEditMode = false; + private bool _deleteConfirmation = false; + private List _categories = new List(); + private List _allModuleDefinitions; + private List _moduleDefinitions; + private List _pages = new List(); + private List _modules = new List(); + private List _containers = new List(); + private string _category = "Common"; - protected string PageId { get; private set; } = "-"; - protected string ModuleId { get; private set; } = "-"; - protected string ModuleType { get; private set; } = "new"; - protected string ModuleDefinitionName { get; private set; } = "-"; + protected string PageId { get; private set; } = "-"; + protected string ModuleId { get; private set; } = "-"; + protected string ModuleType { get; private set; } = "new"; + protected string ModuleDefinitionName { get; private set; } = "-"; - protected string Category - { - get => _category; - private set - { - if (_category != value) - { - _category = value; - _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(Category)).ToList(); - ModuleDefinitionName = "-"; - Message = ""; - StateHasChanged(); - _ = UpdateSettingsAsync(); - } - } - } + protected string Category + { + get => _category; + private set + { + if (_category != value) + { + _category = value; + _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(Category)).ToList(); + ModuleDefinitionName = "-"; + Message = ""; + StateHasChanged(); + _ = UpdateSettingsAsync(); + } + } + } - protected string Pane - { - get => _pane; - private set - { - if (_pane != value) - { - _pane = value; - _ = UpdateSettingsAsync(); - } - } - } + protected string Pane + { + get => _pane; + private set + { + if (_pane != value) + { + _pane = value; + _ = UpdateSettingsAsync(); + } + } + } - protected string Title { get; private set; } = ""; - protected string ContainerType { get; private set; } = ""; - protected string Visibility { get; private set; } = "view"; - protected string Message { get; private set; } = ""; + protected string Title { get; private set; } = ""; + protected string ContainerType { get; private set; } = ""; + protected string Visibility { get; private set; } = "view"; + protected string Message { get; private set; } = ""; - [Parameter] - public string ButtonClass { get; set; } = "btn-outline-secondary"; + [Parameter] + public string ButtonClass { get; set; } = "btn-outline-secondary"; - [Parameter] - public string ContainerClass { get; set; } = "offcanvas offcanvas-end"; + [Parameter] + public string ContainerClass { get; set; } = "offcanvas offcanvas-end"; - [Parameter] - public string HeaderClass { get; set; } = "offcanvas-header"; + [Parameter] + public string HeaderClass { get; set; } = "offcanvas-header"; - [Parameter] - public string BodyClass { get; set; } = "offcanvas-body overflow-auto"; + [Parameter] + public string BodyClass { get; set; } = "offcanvas-body overflow-auto"; - [Parameter] - public bool ShowLanguageSwitcher { get; set; } = true; + [Parameter] + public bool ShowLanguageSwitcher { get; set; } = true; - protected override async Task OnParametersSetAsync() - { - _canViewAdminDashboard = CanViewAdminDashboard(); - _showEditMode = false; - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) - { - _showEditMode = true; - _pages?.Clear(); + protected override async Task OnParametersSetAsync() + { + _canViewAdminDashboard = CanViewAdminDashboard(); + _showEditMode = false; + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) + { + _showEditMode = true; + _pages?.Clear(); - foreach (Page p in PageState.Pages) - { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) - { - _pages.Add(p); - } - } - await LoadSettingsAsync(); + foreach (Page p in PageState.Pages) + { + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) + { + _pages.Add(p); + } + } + await LoadSettingsAsync(); - var themes = await ThemeService.GetThemesAsync(); - _containers = ThemeService.GetContainerControls(themes, PageState.Page.ThemeType); - ContainerType = PageState.Site.DefaultContainerType; - _allModuleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); - _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(Category)).ToList(); - _categories = _allModuleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList(); - } - else - { - foreach (var module in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId)) - { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, module.PermissionList)) - { - _showEditMode = true; - break; - } - } - } - } + var themes = await ThemeService.GetThemesAsync(); + _containers = ThemeService.GetContainerControls(themes, PageState.Page.ThemeType); + ContainerType = PageState.Site.DefaultContainerType; + _allModuleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); + _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(Category)).ToList(); + _categories = _allModuleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList(); + } + else + { + foreach (var module in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId)) + { + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, module.PermissionList)) + { + _showEditMode = true; + break; + } + } + } + } - private bool CanViewAdminDashboard() - { - var admin = PageState.Pages.FirstOrDefault(item => item.Path == "admin"); - if (admin != null) - { - foreach (var page in PageState.Pages.Where(item => item.ParentId == admin?.PageId)) - { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, page.PermissionList)) - { - return true; - } - } - } - return false; - } + private bool CanViewAdminDashboard() + { + var admin = PageState.Pages.FirstOrDefault(item => item.Path == "admin"); + if (admin != null) + { + foreach (var page in PageState.Pages.Where(item => item.ParentId == admin?.PageId)) + { + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, page.PermissionList)) + { + return true; + } + } + } + return false; + } - private void CategoryChanged(ChangeEventArgs e) - { - Category = (string)e.Value; - } + private void CategoryChanged(ChangeEventArgs e) + { + Category = (string)e.Value; + } - private void ModuleChanged(ChangeEventArgs e) - { - ModuleDefinitionName = (string)e.Value; - if (ModuleDefinitionName != "-") - { - var moduleDefinition = _moduleDefinitions.FirstOrDefault(item => item.ModuleDefinitionName == ModuleDefinitionName); - Message = "
" + moduleDefinition.Description + "
"; - } - else - { - Message = ""; - } - StateHasChanged(); - } + private void ModuleChanged(ChangeEventArgs e) + { + ModuleDefinitionName = (string)e.Value; + if (ModuleDefinitionName != "-") + { + var moduleDefinition = _moduleDefinitions.FirstOrDefault(item => item.ModuleDefinitionName == ModuleDefinitionName); + Message = "
" + moduleDefinition.Description + "
"; + } + else + { + Message = ""; + } + StateHasChanged(); + } - private void PageChanged(ChangeEventArgs e) - { - PageId = (string)e.Value; - if (PageId != "-") - { - _modules = PageState.Modules - .Where(module => module.PageId == int.Parse(PageId) && - UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList)) - .ToList(); - } - ModuleId = "-"; - StateHasChanged(); - } + private void PageChanged(ChangeEventArgs e) + { + PageId = (string)e.Value; + if (PageId != "-") + { + _modules = PageState.Modules + .Where(module => module.PageId == int.Parse(PageId) && + UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList)) + .ToList(); + } + ModuleId = "-"; + StateHasChanged(); + } - private async Task AddModule() - { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) - { - if ((ModuleType == "new" && ModuleDefinitionName != "-") || (ModuleType != "new" && ModuleId != "-")) - { - if (ModuleType == "new") - { - Module module = new Module(); - module.SiteId = PageState.Site.SiteId; - module.PageId = PageState.Page.PageId; - module.ModuleDefinitionName = ModuleDefinitionName; - module.AllPages = false; + private async Task AddModule() + { + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList)) + { + if ((ModuleType == "new" && ModuleDefinitionName != "-") || (ModuleType != "new" && ModuleId != "-")) + { + if (ModuleType == "new") + { + Module module = new Module(); + module.SiteId = PageState.Site.SiteId; + module.PageId = PageState.Page.PageId; + module.ModuleDefinitionName = ModuleDefinitionName; + module.AllPages = false; - var permissions = new List(); - if (Visibility == "view") - { - // set module view permissions to page view permissions - permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.View); - } - else - { - // set module view permissions to page edit permissions - permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.Edit); - } - // set module edit permissions to page edit permissions - permissions = SetPermissions(permissions, module.SiteId, PermissionNames.Edit, PermissionNames.Edit); - module.PermissionList = permissions; + var permissions = new List(); + if (Visibility == "view") + { + // set module view permissions to page view permissions + permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.View); + } + else + { + // set module view permissions to page edit permissions + permissions = SetPermissions(permissions, module.SiteId, PermissionNames.View, PermissionNames.Edit); + } + // set module edit permissions to page edit permissions + permissions = SetPermissions(permissions, module.SiteId, PermissionNames.Edit, PermissionNames.Edit); + module.PermissionList = permissions; - module = await ModuleService.AddModuleAsync(module); - ModuleId = module.ModuleId.ToString(); - } + module = await ModuleService.AddModuleAsync(module); + ModuleId = module.ModuleId.ToString(); + } - var pageModule = new PageModule + var pageModule = new PageModule { PageId = PageState.Page.PageId, ModuleId = int.Parse(ModuleId), Title = Title }; - if (pageModule.Title == "") - { - if (ModuleType == "new") - { - pageModule.Title = _moduleDefinitions.FirstOrDefault(item => item.ModuleDefinitionName == ModuleDefinitionName)?.Name; - } - else - { - pageModule.Title = _modules.FirstOrDefault(item => item.ModuleId == int.Parse(ModuleId))?.Title; - } - } + if (pageModule.Title == "") + { + if (ModuleType == "new") + { + pageModule.Title = _moduleDefinitions.FirstOrDefault(item => item.ModuleDefinitionName == ModuleDefinitionName)?.Name; + } + else + { + pageModule.Title = _modules.FirstOrDefault(item => item.ModuleId == int.Parse(ModuleId))?.Title; + } + } - pageModule.Pane = Pane; - pageModule.Order = int.MaxValue; - pageModule.ContainerType = ContainerType; + pageModule.Pane = Pane; + pageModule.Order = int.MaxValue; + pageModule.ContainerType = ContainerType; - if (pageModule.ContainerType == PageState.Site.DefaultContainerType) - { - pageModule.ContainerType = ""; - } + if (pageModule.ContainerType == PageState.Site.DefaultContainerType) + { + pageModule.ContainerType = ""; + } - await PageModuleService.AddPageModuleAsync(pageModule); - await PageModuleService.UpdatePageModuleOrderAsync(pageModule.PageId, pageModule.Pane); + await PageModuleService.AddPageModuleAsync(pageModule); + await PageModuleService.UpdatePageModuleOrderAsync(pageModule.PageId, pageModule.Pane); - Message = $"
{Localizer["Success.Page.ModuleAdd"]}
"; - Title = ""; - NavigationManager.NavigateTo(NavigateUrl()); - } - else - { - Message = $"
{Localizer["Message.Require.ModuleSelect"]}
"; - } - } - else - { - Message = $"
{Localizer["Error.Authorize.No"]}
"; - } - } + Message = $"
{Localizer["Success.Page.ModuleAdd"]}
"; + Title = ""; + NavigationManager.NavigateTo(NavigateUrl()); + } + else + { + Message = $"
{Localizer["Message.Require.ModuleSelect"]}
"; + } + } + else + { + Message = $"
{Localizer["Error.Authorize.No"]}
"; + } + } - private List SetPermissions(List permissions, int siteId, string modulePermission, string pagePermission) - { - foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission)) - { - permissions.Add(new Permission { SiteId = siteId, EntityName = EntityNames.Module, PermissionName = modulePermission, RoleId = permission.RoleId, UserId = permission.UserId, IsAuthorized = permission.IsAuthorized }); - } - return permissions; - } + private List SetPermissions(List permissions, int siteId, string modulePermission, string pagePermission) + { + foreach (var permission in PageState.Page.PermissionList.Where(item => item.PermissionName == pagePermission)) + { + permissions.Add(new Permission { SiteId = siteId, EntityName = EntityNames.Module, PermissionName = modulePermission, RoleId = permission.RoleId, UserId = permission.UserId, IsAuthorized = permission.IsAuthorized }); + } + return permissions; + } - private async Task ToggleEditMode(bool EditMode) - { - if (_showEditMode) - { - if (EditMode) - { - PageState.EditMode = false; - } - else - { - PageState.EditMode = true; - } + private async Task ToggleEditMode(bool EditMode) + { + if (_showEditMode) + { + if (EditMode) + { + PageState.EditMode = false; + } + else + { + PageState.EditMode = true; + } - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false"))); + // preserve other querystring parameters + if (PageState.QueryString.ContainsKey("edit")) PageState.QueryString.Remove("edit"); + PageState.QueryString.Add("edit", PageState.EditMode.ToString().ToLower()); + var url = PageState.Route.AbsolutePath + Utilities.CreateQueryString(PageState.QueryString); + NavigationManager.NavigateTo(url); } else { diff --git a/Oqtane.Client/UI/ContainerBuilder.razor b/Oqtane.Client/UI/ContainerBuilder.razor index e2851298..9ed0d63b 100644 --- a/Oqtane.Client/UI/ContainerBuilder.razor +++ b/Oqtane.Client/UI/ContainerBuilder.razor @@ -4,7 +4,8 @@ @if (_visible) { - + + @if (_useadminborder) {
@@ -16,6 +17,7 @@ @DynamicComponent } + } @code { @@ -38,7 +40,7 @@ protected override void OnParametersSet() { string container = ModuleState.ContainerType; - if (PageState.ModuleId != -1 && ModuleState.UseAdminContainer) + if (PageState.ModuleId != -1 && PageState.Route.Action != "" && ModuleState.UseAdminContainer) { container = (!string.IsNullOrEmpty(PageState.Site.AdminContainerType)) ? PageState.Site.AdminContainerType : Constants.DefaultAdminContainer; } diff --git a/Oqtane.Client/UI/PageState.cs b/Oqtane.Client/UI/PageState.cs index f8df3572..e8ce37c4 100644 --- a/Oqtane.Client/UI/PageState.cs +++ b/Oqtane.Client/UI/PageState.cs @@ -24,6 +24,7 @@ namespace Oqtane.UI public int VisitorId { get; set; } public string RemoteIPAddress { get; set; } public string ReturnUrl { get; set; } + public bool IsInternalNavigation { get; set; } public List Pages { diff --git a/Oqtane.Client/UI/Pane.razor b/Oqtane.Client/UI/Pane.razor index f193aab0..1ad17b6f 100644 --- a/Oqtane.Client/UI/Pane.razor +++ b/Oqtane.Client/UI/Pane.razor @@ -17,61 +17,59 @@ else } @code { - private bool _useadminborder = false; - private string _panetitle = ""; + private bool _useadminborder = false; + private string _panetitle = ""; - [CascadingParameter] - protected PageState PageState { get; set; } + [CascadingParameter] + protected PageState PageState { get; set; } - [Parameter] - public string Name { get; set; } + [Parameter] + public string Name { get; set; } - RenderFragment DynamicComponent { get; set; } + RenderFragment DynamicComponent { get; set; } - protected override void OnParametersSet() - { - if (PageState.EditMode && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList) && PageState.Action == Constants.DefaultAction) - { - _useadminborder = true; - _panetitle = "
" + Name + " Pane
"; - } - else - { - _useadminborder = false; - _panetitle = ""; - } + protected override void OnParametersSet() + { + if (PageState.EditMode && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList) && PageState.Action == Constants.DefaultAction) + { + _useadminborder = true; + _panetitle = "
" + Name + " Pane
"; + } + else + { + _useadminborder = false; + _panetitle = ""; + } - DynamicComponent = builder => - { - if (PageState.ModuleId != -1 && PageState.Action != Constants.DefaultAction) - { - // action route needs to inject module control into specific pane - string pane = ""; - if (PageState.Page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1) - { - pane = PaneNames.Default; - } - else - { - pane = PaneNames.Admin; + DynamicComponent = builder => + { + foreach (Module module in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId)) + { + var pane = module.Pane; + if (module.ModuleId == PageState.ModuleId && PageState.Action != Constants.DefaultAction) + { + if (PageState.Page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1) + { + pane = PaneNames.Default; + } + else + { + pane = PaneNames.Admin; + } + } - } - if (Name.ToLower() == pane.ToLower()) - { - Module module = PageState.Modules.FirstOrDefault(item => item.PageId == PageState.Page.PageId && item.ModuleId == PageState.ModuleId); - if (module == null) - { - module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId); - } - if (module != null) - { - var moduleType = Type.GetType(module.ModuleType); - if (moduleType != null) - { - bool authorized = false; - if (Constants.DefaultModuleActions.Contains(PageState.Action)) - { - authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList); + // pane matches current pane + if (Name.ToLower() == pane.ToLower()) + { + if (module.ModuleId == PageState.ModuleId && PageState.Action != Constants.DefaultAction) + { + var moduleType = Type.GetType(module.ModuleType); + if (moduleType != null) + { + bool authorized = false; + if (Constants.DefaultModuleActions.Contains(PageState.Action)) + { + authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.PermissionList); } else { @@ -100,43 +98,20 @@ else CreateComponent(builder, module); } } - else - { - // module type does not exist - } } - } - } - else - { - if (PageState.ModuleId != -1) - { - Module module = PageState.Modules.FirstOrDefault(item => item.PageId == PageState.Page.PageId && item.ModuleId == PageState.ModuleId); - if (module == null) - { - module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId); - } - if (module != null && module.Pane.ToLower() == Name.ToLower()) + else { - // check if user is authorized to view module - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList)) + if (PageState.ModuleId == -1 || PageState.ModuleId == module.ModuleId) { - CreateComponent(builder, module); + // check if user is authorized to view module + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList)) + { + CreateComponent(builder, module); + } } } } - else - { - foreach (Module module in PageState.Modules.Where(item => item.PageId == PageState.Page.PageId && item.Pane.ToLower() == Name.ToLower())) - { - // check if user is authorized to view module - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList)) - { - CreateComponent(builder, module); - } - } - } - } + } }; } diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor index d2ef90a4..380ce244 100644 --- a/Oqtane.Client/UI/SiteRouter.razor +++ b/Oqtane.Client/UI/SiteRouter.razor @@ -23,6 +23,7 @@ @code { private string _absoluteUri; + private bool _isInternalNavigation = false; private bool _navigationInterceptionEnabled; private PageState _pagestate; private string _error = ""; @@ -72,6 +73,23 @@ } } + private async void LocationChanged(object sender, LocationChangedEventArgs args) + { + _absoluteUri = args.Location; + _isInternalNavigation = true; + await Refresh(); + } + + Task IHandleAfterRender.OnAfterRenderAsync() + { + if (!_navigationInterceptionEnabled) + { + _navigationInterceptionEnabled = true; + return NavigationInterception.EnableNavigationInterceptionAsync(); + } + return Task.CompletedTask; + } + [SuppressMessage("ReSharper", "StringIndexOfIsCultureSpecific.1")] private async Task Refresh() { @@ -87,7 +105,7 @@ Route route = new Route(_absoluteUri, SiteState.Alias.Path); int moduleid = (int.TryParse(route.ModuleId, out moduleid)) ? moduleid : -1; var action = (!string.IsNullOrEmpty(route.Action)) ? route.Action : Constants.DefaultAction; - var querystring = ParseQueryString(route.Query); + var querystring = Utilities.ParseQueryString(route.Query); var returnurl = ""; if (querystring.ContainsKey("returnurl")) { @@ -233,7 +251,8 @@ Runtime = runtime, VisitorId = VisitorId, RemoteIPAddress = SiteState.RemoteIPAddress, - ReturnUrl = returnurl + ReturnUrl = returnurl, + IsInternalNavigation = _isInternalNavigation }; OnStateChange?.Invoke(_pagestate); @@ -278,56 +297,6 @@ } } - private async void LocationChanged(object sender, LocationChangedEventArgs args) - { - _absoluteUri = args.Location; - await Refresh(); - } - - Task IHandleAfterRender.OnAfterRenderAsync() - { - if (!_navigationInterceptionEnabled) - { - _navigationInterceptionEnabled = true; - return NavigationInterception.EnableNavigationInterceptionAsync(); - } - return Task.CompletedTask; - } - - private Dictionary ParseQueryString(string query) - { - Dictionary querystring = new Dictionary(StringComparer.OrdinalIgnoreCase); // case insensistive keys - if (!string.IsNullOrEmpty(query)) - { - if (query.StartsWith("?")) - { - query = query.Substring(1); // ignore "?" - } - foreach (string kvp in query.Split('&', StringSplitOptions.RemoveEmptyEntries)) - { - if (kvp != "") - { - if (kvp.Contains("=")) - { - string[] pair = kvp.Split('='); - if (!querystring.ContainsKey(pair[0])) - { - querystring.Add(pair[0], pair[1]); - } - } - else - { - if (!querystring.ContainsKey(kvp)) - { - querystring.Add(kvp, "true"); // default parameter when no value is provided - } - } - } - } - } - return querystring; - } - private async Task ProcessPage(Page page, Site site, User user, Alias alias) { try @@ -411,11 +380,16 @@ if ((module.PageId == page.PageId || module.ModuleId == moduleid)) { var typename = Constants.ErrorModule; + if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime))) { typename = module.ModuleDefinition.ControlTypeTemplate; // handle default action + if (moduleid != module.ModuleId) + { + action = Constants.DefaultAction; + } if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction)) { action = module.ModuleDefinition.DefaultAction; diff --git a/Oqtane.Shared/Models/SiteTemplate.cs b/Oqtane.Shared/Models/SiteTemplate.cs index 7d9e3a5e..9bc19c4c 100644 --- a/Oqtane.Shared/Models/SiteTemplate.cs +++ b/Oqtane.Shared/Models/SiteTemplate.cs @@ -38,7 +38,7 @@ namespace Oqtane.Models PageTemplateModules = new List(); // properties used by IModule - AliasName = "*"; + AliasName = ""; Version = "*"; Update = false; } diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs index 7235af3d..cbab8fa3 100644 --- a/Oqtane.Shared/Shared/Utilities.cs +++ b/Oqtane.Shared/Shared/Utilities.cs @@ -1,6 +1,7 @@ using Oqtane.Models; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Globalization; using System.IO; using System.Linq; @@ -438,28 +439,50 @@ namespace Oqtane.Shared public static Dictionary ParseQueryString(string query) { - Dictionary dictionary = new Dictionary(); + Dictionary querystring = new Dictionary(StringComparer.OrdinalIgnoreCase); // case insensistive keys if (!string.IsNullOrEmpty(query)) { - query = query.Substring(1); - string str = query; - char[] separator = new char[1] { '&' }; - foreach (string key in str.Split(separator, StringSplitOptions.RemoveEmptyEntries)) + if (query.StartsWith("?")) { - if (key != "") + query = query.Substring(1); // ignore "?" + } + foreach (string kvp in query.Split('&', StringSplitOptions.RemoveEmptyEntries)) + { + if (kvp != "") { - if (key.Contains("=")) + if (kvp.Contains("=")) { - string[] strArray = key.Split('=', StringSplitOptions.None); - dictionary.Add(strArray[0], strArray[1]); + string[] pair = kvp.Split('='); + if (!querystring.ContainsKey(pair[0])) + { + querystring.Add(pair[0], pair[1]); + } } else - dictionary.Add(key, "true"); + { + if (!querystring.ContainsKey(kvp)) + { + querystring.Add(kvp, "true"); // default parameter when no value is provided + } + } } } } + return querystring; + } - return dictionary; + public static string CreateQueryString(Dictionary parameters) + { + var querystring = ""; + if (parameters.Count > 0) + { + foreach (var kvp in parameters) + { + querystring += (querystring == "") ? "?" : "&"; + querystring += kvp.Key + "=" + kvp.Value; + } + } + return querystring; } public static string LogMessage(object @class, string message)