* Run code cleanup * Start manual run * Finish dotnet format + manual cleanup * Fix up after merge * Fix substrings changed to [..] Co-authored-by: Nikolaj Geisle <niko737@edu.ucl.dk> Co-authored-by: Zeegaan <nge@umbraco.dk>
76 lines
2.8 KiB
C#
76 lines
2.8 KiB
C#
using System.Net;
|
|
using System.Text;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Umbraco.Cms.Core;
|
|
using Umbraco.Extensions;
|
|
|
|
namespace Umbraco.Cms.Web.BackOffice.Trees;
|
|
|
|
public static class UrlHelperExtensions
|
|
{
|
|
internal static string GetTreePathFromFilePath(this IUrlHelper urlHelper, string? virtualPath, string basePath = "")
|
|
{
|
|
//This reuses the Logic from umbraco.cms.helpers.DeepLink class
|
|
//to convert a filepath to a tree syncing path string.
|
|
|
|
//removes the basepath from the path
|
|
//and normalizes paths - / is used consistently between trees and editors
|
|
basePath = basePath.TrimStart("~");
|
|
virtualPath = virtualPath?.TrimStart("~");
|
|
virtualPath = virtualPath?.Substring(basePath.Length);
|
|
virtualPath = virtualPath?.Replace('\\', '/');
|
|
|
|
//-1 is the default root id for trees
|
|
var sb = new StringBuilder("-1");
|
|
|
|
//split the virtual path and iterate through it
|
|
var pathPaths = virtualPath?.Split(Constants.CharArrays.ForwardSlash);
|
|
|
|
for (var p = 0; p < pathPaths?.Length; p++)
|
|
{
|
|
var path = WebUtility.UrlEncode(string.Join("/", pathPaths.Take(p + 1)));
|
|
if (string.IsNullOrEmpty(path) == false)
|
|
{
|
|
sb.Append(",");
|
|
sb.Append(path);
|
|
}
|
|
}
|
|
|
|
return sb.ToString().TrimEnd(",");
|
|
}
|
|
|
|
public static string GetTreeUrl(
|
|
this IUrlHelper urlHelper,
|
|
UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection,
|
|
Type treeType,
|
|
string nodeId,
|
|
FormCollection? queryStrings)
|
|
{
|
|
var actionUrl = urlHelper.GetUmbracoApiService(umbracoApiControllerTypeCollection, "GetNodes", treeType)?
|
|
.EnsureEndsWith('?');
|
|
|
|
//now we need to append the query strings
|
|
actionUrl += "id=" + nodeId.EnsureEndsWith('&') + queryStrings?.ToQueryString("id",
|
|
//Always ignore the custom start node id when generating URLs for tree nodes since this is a custom once-only parameter
|
|
// that should only ever be used when requesting a tree to render (root), not a tree node
|
|
TreeQueryStringParameters.StartNodeId);
|
|
return actionUrl;
|
|
}
|
|
|
|
public static string GetMenuUrl(
|
|
this IUrlHelper urlHelper,
|
|
UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection,
|
|
Type treeType,
|
|
string nodeId,
|
|
FormCollection? queryStrings)
|
|
{
|
|
var actionUrl = urlHelper.GetUmbracoApiService(umbracoApiControllerTypeCollection, "GetMenu", treeType)?
|
|
.EnsureEndsWith('?');
|
|
|
|
//now we need to append the query strings
|
|
actionUrl += "id=" + nodeId.EnsureEndsWith('&') + queryStrings?.ToQueryString("id");
|
|
return actionUrl;
|
|
}
|
|
}
|