From 4944a9e51ee552212195330e71e7206b6029a240 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Tue, 2 Apr 2024 08:44:51 -0400 Subject: [PATCH] fix SiteMap so that it supports page Urls --- Oqtane.Server/Pages/Sitemap.cshtml.cs | 13 ++++- Oqtane.Shared/Shared/Utilities.cs | 76 +++++++-------------------- 2 files changed, 31 insertions(+), 58 deletions(-) diff --git a/Oqtane.Server/Pages/Sitemap.cshtml.cs b/Oqtane.Server/Pages/Sitemap.cshtml.cs index 461bc3d6..7ba00eb4 100644 --- a/Oqtane.Server/Pages/Sitemap.cshtml.cs +++ b/Oqtane.Server/Pages/Sitemap.cshtml.cs @@ -47,14 +47,23 @@ namespace Oqtane.Pages var sitemap = new List(); // build site map + var rooturl = _alias.Protocol + (string.IsNullOrEmpty(_alias.Path) ? _alias.Name : _alias.Name.Substring(0, _alias.Name.IndexOf("/"))); var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList(); var pageModules = _pageModules.GetPageModules(_alias.SiteId); foreach (var page in _pages.GetPages(_alias.SiteId)) { if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation) { - var rooturl = _alias.Protocol + (string.IsNullOrEmpty(_alias.Path) ? _alias.Name : _alias.Name.Substring(0, _alias.Name.IndexOf("/"))); - sitemap.Add(new Sitemap { Url = rooturl + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = DateTime.UtcNow }); + var pageurl = rooturl; + if (string.IsNullOrEmpty(page.Url)) + { + pageurl += Utilities.NavigateUrl(_alias.Path, page.Path, ""); + } + else + { + pageurl += (page.Url.StartsWith("/") ? "" : "/") + page.Url; + } + sitemap.Add(new Sitemap { Url = rooturl + pageurl, ModifiedOn = DateTime.UtcNow }); foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId)) { diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs index 46616c74..00cfb3f6 100644 --- a/Oqtane.Shared/Shared/Utilities.cs +++ b/Oqtane.Shared/Shared/Utilities.cs @@ -21,86 +21,50 @@ namespace Oqtane.Shared return $"{type.Namespace}, {assemblyName}"; } - public static (string UrlParameters, string Querystring, string Fragment) ParseParameters(string url) + public static (string UrlParameters, string Querystring, string Fragment) ParseParameters(string parameters) { - // /path/urlparameters // /urlparameters /urlparameters?Id=1 /urlparameters#5 /urlparameters?Id=1#5 /urlparameters?reload#5 // Id=1 Id=1#5 reload#5 reload // #5 - if (!url.Contains("://")) - { - if (!url.StartsWith("/")) // urlparameters always start with "/" - { - url = ((!url.StartsWith("#")) ? "?" : "/") + url; - } - url = Constants.PackageRegistryUrl + url; // create absolute url - } - - var uri = new Uri(url); + // create absolute url to convert to Uri + parameters = (!parameters.StartsWith("/") && !parameters.StartsWith("#") ? "?" : "") + parameters; + parameters = Constants.PackageRegistryUrl + parameters; + var uri = new Uri(parameters); var querystring = uri.Query.Replace("?", ""); var fragment = uri.Fragment.Replace("#", ""); var urlparameters = uri.LocalPath; urlparameters = (urlparameters == "/") ? "" : urlparameters; - if (urlparameters.Contains(Constants.UrlParametersDelimiter)) - { - urlparameters = urlparameters.Substring(urlparameters.IndexOf(Constants.UrlParametersDelimiter) + 1); - } - return (urlparameters, querystring, fragment); } - public static (string Path, string Parameters) ParsePath(string url) - { - url = ((!url.StartsWith("/") && !url.Contains("://")) ? "/" : "") + url; - - (string path, string querystring, string fragment) = ParseParameters(url); - - var uriBuilder = new UriBuilder - { - Path = path, - Query = querystring, - Fragment = fragment - }; - - return (uriBuilder.Path, uriBuilder.Uri.Query + uriBuilder.Uri.Fragment); - } - public static string NavigateUrl(string alias, string path, string parameters) { + string querystring = ""; + string fragment = ""; + if (!string.IsNullOrEmpty(parameters)) { - // parse path - (path, _) = ParsePath(path); - // parse parameters - (string urlparameters, string querystring, string fragment) = ParseParameters(parameters); - - // add urlparameters to path + (string urlparameters, querystring, fragment) = ParseParameters(parameters); if (!string.IsNullOrEmpty(urlparameters)) { - if (urlparameters.StartsWith("/")) urlparameters = urlparameters.Substring(1); - path += (path.EndsWith("/") ? "" : "/") + $"{Constants.UrlParametersDelimiter}/{urlparameters}"; + path += (path.EndsWith("/") ? "" : "/") + $"{Constants.UrlParametersDelimiter}/{urlparameters.Substring(1)}"; } - - // build url - var uriBuilder = new UriBuilder - { - Path = !string.IsNullOrEmpty(alias) - ? (!string.IsNullOrEmpty(path)) ? $"{alias}{path}": $"{alias}" - : $"{path}", - Query = querystring, - Fragment = fragment - }; - path = uriBuilder.Uri.PathAndQuery; } - else + + // build url + var uriBuilder = new UriBuilder { - path = ((!string.IsNullOrEmpty(alias)) ? alias + (!path.StartsWith("/") ? "/" : "") : "") + path; - } + Path = !string.IsNullOrEmpty(alias) + ? (!string.IsNullOrEmpty(path)) ? $"{alias}{path}": $"{alias}" + : $"{path}", + Query = querystring, + Fragment = fragment + }; - return path; + return uriBuilder.Uri.PathAndQuery; } public static string EditUrl(string alias, string path, int moduleid, string action, string parameters)