Files
Umbraco-CMS/src/Umbraco.Web/Trees/UrlHelperExtensions.cs
2018-06-29 19:52:40 +02:00

67 lines
2.6 KiB
C#

using System;
using System.Linq;
using System.Net.Http.Formatting;
using System.Text;
using System.Web;
using System.Web.Http.Routing;
using Umbraco.Core;
namespace Umbraco.Web.Trees
{
public static class UrlHelperExtensions
{
public static string GetTreeUrl(this UrlHelper urlHelper, Type treeType, string nodeId, FormDataCollection queryStrings)
{
var actionUrl = urlHelper.GetUmbracoApiService("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 UrlHelper urlHelper, Type treeType, string nodeId, FormDataCollection queryStrings)
{
var actionUrl = urlHelper.GetUmbracoApiService("GetMenu", treeType)
.EnsureEndsWith('?');
//now we need to append the query strings
actionUrl += "id=" + nodeId.EnsureEndsWith('&') + queryStrings.ToQueryString("id");
return actionUrl;
}
internal static string GetTreePathFromFilePath(this UrlHelper 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 normalises 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('/');
for (var p = 0; p < pathPaths.Length; p++)
{
var path = HttpUtility.UrlEncode(string.Join("/", pathPaths.Take(p + 1)));
if (string.IsNullOrEmpty(path) == false)
{
sb.Append(",");
sb.Append(path);
}
}
return sb.ToString().TrimEnd(",");
}
}
}