Fixes to make site alias, page path, and module action Url resolutions case insensitive. Optimized logic for Settings component which fixed localization rendering issue.

This commit is contained in:
Shaun Walker 2020-12-01 19:36:02 -05:00
parent a875a5ad32
commit fd60b40c53
8 changed files with 29 additions and 48 deletions

View File

@ -24,7 +24,7 @@
private string _content = string.Empty; private string _content = string.Empty;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
public override string Title => "Export Module"; public override string Title => "Export Content";
private async Task ExportModule() private async Task ExportModule()

View File

@ -24,7 +24,7 @@
private string _content = string.Empty; private string _content = string.Empty;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
public override string Title => "Import Module"; public override string Title => "Import Content";
private async Task ImportModule() private async Task ImportModule()
{ {

View File

@ -121,7 +121,7 @@
_permissionNames = ModuleState.ModuleDefinition.PermissionNames; _permissionNames = ModuleState.ModuleDefinition.PermissionNames;
_pageId = ModuleState.PageId.ToString(); _pageId = ModuleState.PageId.ToString();
_settingsModuleType = Type.GetType(ModuleState.ModuleType); _settingsModuleType = Type.GetType(ModuleState.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, PageState.Action), false, true);
if (_settingsModuleType != null) if (_settingsModuleType != null)
{ {
var moduleobject = Activator.CreateInstance(_settingsModuleType) as IModuleControl; var moduleobject = Activator.CreateInstance(_settingsModuleType) as IModuleControl;

View File

@ -9,21 +9,15 @@
@code { @code {
private string title = ""; private string title = "";
protected override Task OnParametersSetAsync() protected override void OnParametersSet()
{ {
title = ModuleState.Title; if (!string.IsNullOrEmpty(ModuleState.ControlTitle))
// check for core module actions component
if (Constants.DefaultModuleActions.Contains(PageState.Action))
{ {
title = PageState.Action; title = ModuleState.ControlTitle;
} }
else else
{ {
if (!string.IsNullOrEmpty(ModuleState.ControlTitle)) title = ModuleState.Title;
{
title = ModuleState.ControlTitle;
}
} }
return Task.CompletedTask;
} }
} }

View File

@ -1,4 +1,4 @@
@namespace Oqtane.UI @namespace Oqtane.UI
<ModuleMessage Message="@_message" Type="@_messagetype" /> <ModuleMessage Message="@_message" Type="@_messagetype" />
<CascadingValue Value="this"> <CascadingValue Value="this">
@ -28,17 +28,10 @@
{ {
DynamicComponent = builder => DynamicComponent = builder =>
{ {
string typename = ModuleState.ModuleType;
// check for core module actions component
if (Constants.DefaultModuleActions.Contains(PageState.Action))
{
typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, PageState.Action);
}
Type moduleType = null; Type moduleType = null;
if (typename != null) if (!string.IsNullOrEmpty(ModuleState.ModuleType))
{ {
moduleType = Type.GetType(typename); moduleType = Type.GetType(ModuleState.ModuleType);
if (moduleType != null) if (moduleType != null)
{ {
@ -48,13 +41,13 @@
else else
{ {
// module does not exist with typename specified // module does not exist with typename specified
_message = "Module Does Not Have A Component Named " + Utilities.GetTypeNameLastSegment(typename, 0) + ".razor"; _message = "Module Does Not Have A Component Named " + Utilities.GetTypeNameLastSegment(ModuleState.ModuleType, 0) + ".razor";
_messagetype = MessageType.Error; _messagetype = MessageType.Error;
} }
} }
else else
{ {
_message = "Something is wrong with moduletype"; _message = "Module Type Is Invalid For " + ModuleState.ModuleDefinitionName;
_messagetype = MessageType.Error; _messagetype = MessageType.Error;
} }

View File

@ -52,14 +52,7 @@ else
Module module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId); Module module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId);
if (module != null && !module.IsDeleted) if (module != null && !module.IsDeleted)
{ {
var typename = module.ModuleType; var moduleType = Type.GetType(module.ModuleType);
// check for core module actions component
if (Constants.DefaultModuleActions.Contains(PageState.Action))
{
typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, PageState.Action);
}
var moduleType = Type.GetType(typename);
if (moduleType != null) if (moduleType != null)
{ {
bool authorized = false; bool authorized = false;
@ -96,7 +89,7 @@ else
} }
else else
{ {
// module control does not exist with name specified // module type does not exist
} }
} }
} }

View File

@ -230,7 +230,7 @@
if (PageState == null || reload == Reload.Site) if (PageState == null || reload == Reload.Site)
{ {
page = pages.Where(item => item.Path == path).FirstOrDefault(); page = pages.FirstOrDefault(item => item.Path.Equals(path, StringComparison.OrdinalIgnoreCase));
} }
else else
{ {
@ -465,22 +465,23 @@
} }
} }
module.ModuleType = typename.Replace(Constants.ActionToken, action); // ensure component exists and implements IModuleControl
module.ModuleType = "";
// get additional metadata from IModuleControl interface if (Constants.DefaultModuleActions.Contains(action, StringComparer.OrdinalIgnoreCase))
typename = module.ModuleType;
if (Constants.DefaultModuleActions.Contains(action))
{ {
// core framework module action components
typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action); typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action);
} }
Type moduletype = Type.GetType(typename); else
// ensure component implements IModuleControl
if (moduletype != null && !moduletype.GetInterfaces().Contains(typeof(IModuleControl)))
{ {
module.ModuleType = ""; typename = typename.Replace(Constants.ActionToken, action);
} }
Type moduletype = Type.GetType(typename, false, true); // case insensitive
if (moduletype != null && moduletype.GetInterfaces().Contains(typeof(IModuleControl)))
{
module.ModuleType = Utilities.GetFullTypeName(moduletype.AssemblyQualifiedName); // get actual type name
}
// get additional metadata from IModuleControl interface
if (moduletype != null && module.ModuleType != "") if (moduletype != null && module.ModuleType != "")
{ {
var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl; var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Oqtane.Models; using Oqtane.Models;
@ -62,7 +62,7 @@ namespace Oqtane.Controllers
for (int i = segments.Length; i > 0; i--) for (int i = segments.Length; i > 0; i--)
{ {
name = string.Join("/", segments, 0, i); name = string.Join("/", segments, 0, i);
alias = aliases.Find(item => item.Name == name); alias = aliases.Find(item => item.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
if (alias != null) if (alias != null)
{ {
break; // found a matching alias break; // found a matching alias