@@ -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)