Added native events to base tree class so they will all have them.
This commit is contained in:
@@ -13,36 +13,6 @@ using umbraco.interfaces;
|
||||
|
||||
namespace Umbraco.Web.Trees
|
||||
{
|
||||
public abstract class ContentTreeControllerBase : TreeApiController
|
||||
{
|
||||
/// <summary>
|
||||
/// Based on the allowed actions, this will filter the ones that the current user is allowed
|
||||
/// </summary>
|
||||
/// <param name="allMenuItems"></param>
|
||||
/// <param name="userAllowedMenuItems"></param>
|
||||
/// <returns></returns>
|
||||
protected MenuItemCollection GetUserAllowedMenuItems(IEnumerable<MenuItem> allMenuItems, IEnumerable<MenuItem> userAllowedMenuItems)
|
||||
{
|
||||
var userAllowedActions = userAllowedMenuItems.Where(x => x.Action != null).Select(x => x.Action).ToArray();
|
||||
return new MenuItemCollection(allMenuItems.Where(
|
||||
a => (a.Action == null
|
||||
|| a.Action.CanBePermissionAssigned == false
|
||||
|| (a.Action.CanBePermissionAssigned && userAllowedActions.Contains(a.Action)))));
|
||||
}
|
||||
|
||||
internal MenuItemCollection GetUserMenuItemsForNode(UmbracoEntity dd)
|
||||
{
|
||||
var actions = global::umbraco.BusinessLogic.Actions.Action.FromString(UmbracoUser.GetPermissions(dd.Path));
|
||||
|
||||
// A user is allowed to delete their own stuff
|
||||
if (dd.CreatorId == UmbracoUser.Id && actions.Contains(ActionDelete.Instance) == false)
|
||||
actions.Add(ActionDelete.Instance);
|
||||
|
||||
return new MenuItemCollection(actions.Select(x => new MenuItem(x)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[Tree(Constants.Applications.Content, Constants.Trees.Content, "Content")]
|
||||
public class ContentTreeController : ContentTreeControllerBase
|
||||
{
|
||||
|
||||
37
src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
Normal file
37
src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Umbraco.Core.Models;
|
||||
using umbraco.BusinessLogic.Actions;
|
||||
|
||||
namespace Umbraco.Web.Trees
|
||||
{
|
||||
public abstract class ContentTreeControllerBase : TreeApiController
|
||||
{
|
||||
/// <summary>
|
||||
/// Based on the allowed actions, this will filter the ones that the current user is allowed
|
||||
/// </summary>
|
||||
/// <param name="allMenuItems"></param>
|
||||
/// <param name="userAllowedMenuItems"></param>
|
||||
/// <returns></returns>
|
||||
protected MenuItemCollection GetUserAllowedMenuItems(IEnumerable<MenuItem> allMenuItems, IEnumerable<MenuItem> userAllowedMenuItems)
|
||||
{
|
||||
var userAllowedActions = userAllowedMenuItems.Where(x => x.Action != null).Select(x => x.Action).ToArray();
|
||||
return new MenuItemCollection(allMenuItems.Where(
|
||||
a => (a.Action == null
|
||||
|| a.Action.CanBePermissionAssigned == false
|
||||
|| (a.Action.CanBePermissionAssigned && userAllowedActions.Contains(a.Action)))));
|
||||
}
|
||||
|
||||
internal MenuItemCollection GetUserMenuItemsForNode(UmbracoEntity dd)
|
||||
{
|
||||
var actions = global::umbraco.BusinessLogic.Actions.Action.FromString(UmbracoUser.GetPermissions(dd.Path));
|
||||
|
||||
// A user is allowed to delete their own stuff
|
||||
if (dd.CreatorId == UmbracoUser.Id && actions.Contains(ActionDelete.Instance) == false)
|
||||
actions.Add(ActionDelete.Instance);
|
||||
|
||||
return new MenuItemCollection(actions.Select(x => new MenuItem(x)));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -26,20 +26,20 @@ namespace Umbraco.Web.Trees
|
||||
}
|
||||
|
||||
protected TreeApiController()
|
||||
{
|
||||
{
|
||||
//Locate the tree attribute
|
||||
var treeAttributes = GetType()
|
||||
.GetCustomAttributes(typeof (TreeAttribute), false)
|
||||
.GetCustomAttributes(typeof(TreeAttribute), false)
|
||||
.OfType<TreeAttribute>()
|
||||
.ToArray();
|
||||
|
||||
|
||||
if (treeAttributes.Any() == false)
|
||||
{
|
||||
throw new InvalidOperationException("The Tree controller is missing the " + typeof(TreeAttribute).FullName + " attribute");
|
||||
}
|
||||
|
||||
//assign the properties of this object to those of the metadata attribute
|
||||
_attribute = treeAttributes.First();
|
||||
_attribute = treeAttributes.First();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -62,7 +62,7 @@ namespace Umbraco.Web.Trees
|
||||
/// <param name="queryStrings"></param>
|
||||
/// <returns></returns>
|
||||
protected abstract MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The name to display on the root node
|
||||
/// </summary>
|
||||
@@ -80,7 +80,22 @@ namespace Umbraco.Web.Trees
|
||||
public TreeNode GetRootNode(FormDataCollection queryStrings)
|
||||
{
|
||||
if (queryStrings == null) queryStrings = new FormDataCollection("");
|
||||
return CreateRootNode(queryStrings);
|
||||
var node = CreateRootNode(queryStrings);
|
||||
|
||||
//add the tree type to the root
|
||||
node.AdditionalData.Add("treeType", GetType().FullName);
|
||||
|
||||
AddQueryStringsToAdditionalData(node, queryStrings);
|
||||
|
||||
//check if the tree is searchable and add that to the meta data as well
|
||||
if (this is ISearchableTree)
|
||||
{
|
||||
node.AdditionalData.Add("searchable", "true");
|
||||
}
|
||||
|
||||
OnRootNodeRendering(this, new TreeNodeRenderingEventArgs(node, queryStrings));
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -99,7 +114,17 @@ namespace Umbraco.Web.Trees
|
||||
public TreeNodeCollection GetNodes(string id, FormDataCollection queryStrings)
|
||||
{
|
||||
if (queryStrings == null) queryStrings = new FormDataCollection("");
|
||||
return GetTreeData(id, queryStrings);
|
||||
var nodes = GetTreeData(id, queryStrings);
|
||||
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
AddQueryStringsToAdditionalData(node, queryStrings);
|
||||
}
|
||||
|
||||
//raise the event
|
||||
OnTreeNodesRendering(this, new TreeNodesRenderingEventArgs(nodes, queryStrings));
|
||||
|
||||
return nodes;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -125,7 +150,7 @@ namespace Umbraco.Web.Trees
|
||||
|
||||
var getChildNodesUrl = Url.GetTreeUrl(
|
||||
GetType(),
|
||||
rootNodeAsString,
|
||||
rootNodeAsString,
|
||||
queryStrings);
|
||||
|
||||
var getMenuUrl = Url.GetMenuUrl(
|
||||
@@ -137,7 +162,7 @@ namespace Umbraco.Web.Trees
|
||||
|
||||
//var node = new TreeNode(RootNodeId, BackOfficeRequestContext.RegisteredComponents.MenuItems, jsonUrl)
|
||||
var node = new TreeNode(
|
||||
rootNodeAsString,
|
||||
rootNodeAsString,
|
||||
getChildNodesUrl,
|
||||
getMenuUrl)
|
||||
{
|
||||
@@ -153,22 +178,7 @@ namespace Umbraco.Web.Trees
|
||||
Title = RootNodeDisplayName
|
||||
};
|
||||
|
||||
//add the tree type to the root
|
||||
node.AdditionalData.Add("treeType", GetType().FullName);
|
||||
|
||||
////add the tree-root css class
|
||||
//node.Style.AddCustom("tree-root");
|
||||
|
||||
//node.AdditionalData.Add("id", node.HiveId.ToString());
|
||||
//node.AdditionalData.Add("title", node.Title);
|
||||
|
||||
AddQueryStringsToAdditionalData(node, queryStrings);
|
||||
|
||||
//check if the tree is searchable and add that to the meta data as well
|
||||
if (this is ISearchableTree)
|
||||
{
|
||||
node.AdditionalData.Add("searchable", "true");
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
@@ -179,7 +189,7 @@ namespace Umbraco.Web.Trees
|
||||
/// </summary>
|
||||
/// <param name="node"></param>
|
||||
/// <param name="queryStrings"></param>
|
||||
protected virtual void AddQueryStringsToAdditionalData(TreeNode node, FormDataCollection queryStrings)
|
||||
protected void AddQueryStringsToAdditionalData(TreeNode node, FormDataCollection queryStrings)
|
||||
{
|
||||
// Add additional data, ensure treeId isn't added as we've already done that
|
||||
foreach (var q in queryStrings
|
||||
@@ -188,7 +198,7 @@ namespace Umbraco.Web.Trees
|
||||
node.AdditionalData.Add(q.Key, q.Value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region Create TreeNode methods
|
||||
|
||||
/// <summary>
|
||||
@@ -221,7 +231,7 @@ namespace Umbraco.Web.Trees
|
||||
var node = new TreeNode(id, jsonUrl, menuUrl) { Title = title, Icon = icon };
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Helper method to create tree nodes
|
||||
/// </summary>
|
||||
@@ -234,7 +244,7 @@ namespace Umbraco.Web.Trees
|
||||
public TreeNode CreateTreeNode(string id, FormDataCollection queryStrings, string title, string icon, string routePath)
|
||||
{
|
||||
var jsonUrl = Url.GetTreeUrl(GetType(), id, queryStrings);
|
||||
var menuUrl = Url.GetMenuUrl(GetType(), id, queryStrings);
|
||||
var menuUrl = Url.GetMenuUrl(GetType(), id, queryStrings);
|
||||
var node = new TreeNode(id, jsonUrl, menuUrl) { Title = title, RoutePath = routePath, Icon = icon };
|
||||
return node;
|
||||
}
|
||||
@@ -275,18 +285,32 @@ namespace Umbraco.Web.Trees
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// The tree name based on the controller type so that everything is based on naming conventions
|
||||
/// </summary>
|
||||
public string TreeType
|
||||
///// <summary>
|
||||
///// The tree name based on the controller type so that everything is based on naming conventions
|
||||
///// </summary>
|
||||
//public string TreeType
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// var name = GetType().Name;
|
||||
// return name.Substring(0, name.LastIndexOf("TreeController", StringComparison.Ordinal));
|
||||
// }
|
||||
//}
|
||||
|
||||
public static event EventHandler<TreeNodesRenderingEventArgs> TreeNodesRendering;
|
||||
|
||||
private static void OnTreeNodesRendering(TreeApiController instance, TreeNodesRenderingEventArgs e)
|
||||
{
|
||||
get
|
||||
{
|
||||
var name = GetType().Name;
|
||||
return name.Substring(0, name.LastIndexOf("TreeController", StringComparison.Ordinal));
|
||||
}
|
||||
var handler = TreeNodesRendering;
|
||||
if (handler != null) handler(instance, e);
|
||||
}
|
||||
|
||||
public static event EventHandler<TreeNodeRenderingEventArgs> RootNodeRendering;
|
||||
|
||||
private static void OnRootNodeRendering(TreeApiController instance, TreeNodeRenderingEventArgs e)
|
||||
{
|
||||
var handler = RootNodeRendering;
|
||||
if (handler != null) handler(instance, e);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
15
src/Umbraco.Web/Trees/TreeNodeRenderingEventArgs.cs
Normal file
15
src/Umbraco.Web/Trees/TreeNodeRenderingEventArgs.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System.Net.Http.Formatting;
|
||||
|
||||
namespace Umbraco.Web.Trees
|
||||
{
|
||||
public class TreeNodeRenderingEventArgs : TreeRenderingEventArgs
|
||||
{
|
||||
public TreeNode Node { get; private set; }
|
||||
|
||||
public TreeNodeRenderingEventArgs(TreeNode node, FormDataCollection queryStrings)
|
||||
: base(queryStrings)
|
||||
{
|
||||
Node = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
15
src/Umbraco.Web/Trees/TreeNodesRenderingEventArgs.cs
Normal file
15
src/Umbraco.Web/Trees/TreeNodesRenderingEventArgs.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System.Net.Http.Formatting;
|
||||
|
||||
namespace Umbraco.Web.Trees
|
||||
{
|
||||
public class TreeNodesRenderingEventArgs : TreeRenderingEventArgs
|
||||
{
|
||||
public TreeNodeCollection Nodes { get; private set; }
|
||||
|
||||
public TreeNodesRenderingEventArgs(TreeNodeCollection nodes, FormDataCollection queryStrings)
|
||||
: base(queryStrings)
|
||||
{
|
||||
Nodes = nodes;
|
||||
}
|
||||
}
|
||||
}
|
||||
15
src/Umbraco.Web/Trees/TreeRenderingEventArgs.cs
Normal file
15
src/Umbraco.Web/Trees/TreeRenderingEventArgs.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Net.Http.Formatting;
|
||||
|
||||
namespace Umbraco.Web.Trees
|
||||
{
|
||||
public class TreeRenderingEventArgs : EventArgs
|
||||
{
|
||||
public FormDataCollection QueryStrings { get; private set; }
|
||||
|
||||
public TreeRenderingEventArgs(FormDataCollection queryStrings)
|
||||
{
|
||||
QueryStrings = queryStrings;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -344,6 +344,7 @@
|
||||
<Compile Include="PropertyEditors\TrueFalsePropertyEditor.cs" />
|
||||
<Compile Include="Trees\ActionUrlMethod.cs" />
|
||||
<Compile Include="Trees\ApplicationTreeRegistrar.cs" />
|
||||
<Compile Include="Trees\ContentTreeControllerBase.cs" />
|
||||
<Compile Include="Trees\LegacyTreeController.cs" />
|
||||
<Compile Include="Trees\ISearchableTree.cs" />
|
||||
<Compile Include="Trees\LegacyTreeDataConverter.cs" />
|
||||
@@ -360,12 +361,15 @@
|
||||
<Compile Include="Trees\TreeNode.cs" />
|
||||
<Compile Include="Trees\TreeNodeCollection.cs" />
|
||||
<Compile Include="Trees\TreeNodeExtensions.cs" />
|
||||
<Compile Include="Trees\TreeNodeRenderingEventArgs.cs" />
|
||||
<Compile Include="Trees\TreeNodesRenderingEventArgs.cs" />
|
||||
<Compile Include="Trees\TreeQueryStringParameters.cs" />
|
||||
<Compile Include="Trees\ApplicationTreeController.cs" />
|
||||
<Compile Include="Editors\BackOfficeController.cs" />
|
||||
<Compile Include="Security\Providers\MembersMembershipProvider.cs" />
|
||||
<Compile Include="Security\Providers\UsersMembershipProvider.cs" />
|
||||
<Compile Include="Trees\ContentTreeController.cs" />
|
||||
<Compile Include="Trees\TreeRenderingEventArgs.cs" />
|
||||
<Compile Include="Trees\UrlHelperExtensions.cs" />
|
||||
<Compile Include="UI\JavaScript\JsInitialization.cs" />
|
||||
<Compile Include="Models\ContentEditing\ContentItemBasic.cs" />
|
||||
|
||||
Reference in New Issue
Block a user