From ab594db5fc14021d04d3f68e9ecf6996d57e76ec Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 5 Aug 2013 19:22:00 +1000 Subject: [PATCH] Got the media tree converted to new tree structure. --- .../RequiredForPersistenceAttribute.cs | 8 +-- .../Services/ContentServiceExtensions.cs | 10 +++ src/Umbraco.Web.UI/config/trees.config | 6 +- .../Trees/ContentTreeController.cs | 46 ++++--------- .../Trees/ContentTreeControllerBase.cs | 23 ++++++- src/Umbraco.Web/Trees/MediaTreeController.cs | 65 +++++++++++++++++++ src/Umbraco.Web/Umbraco.Web.csproj | 1 + 7 files changed, 115 insertions(+), 44 deletions(-) create mode 100644 src/Umbraco.Web/Trees/MediaTreeController.cs diff --git a/src/Umbraco.Core/Models/Validation/RequiredForPersistenceAttribute.cs b/src/Umbraco.Core/Models/Validation/RequiredForPersistenceAttribute.cs index a02b9003d6..43344f80c4 100644 --- a/src/Umbraco.Core/Models/Validation/RequiredForPersistenceAttribute.cs +++ b/src/Umbraco.Core/Models/Validation/RequiredForPersistenceAttribute.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Web.ModelBinding; +using System.ComponentModel.DataAnnotations; namespace Umbraco.Core.Models.Validation { diff --git a/src/Umbraco.Core/Services/ContentServiceExtensions.cs b/src/Umbraco.Core/Services/ContentServiceExtensions.cs index ec95d4ead0..b13305ed2b 100644 --- a/src/Umbraco.Core/Services/ContentServiceExtensions.cs +++ b/src/Umbraco.Core/Services/ContentServiceExtensions.cs @@ -13,5 +13,15 @@ namespace Umbraco.Core.Services { return contentService.GetContentInRecycleBin().Any(); } + + /// + /// Returns true if there is any media in the recycle bin + /// + /// + /// + public static bool RecycleBinSmells(this IMediaService mediaService) + { + return mediaService.GetMediaInRecycleBin().Any(); + } } } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/config/trees.config b/src/Umbraco.Web.UI/config/trees.config index d8d4957c6d..14bbd2b560 100644 --- a/src/Umbraco.Web.UI/config/trees.config +++ b/src/Umbraco.Web.UI/config/trees.config @@ -4,8 +4,8 @@ - - + @@ -41,4 +41,6 @@ iconClosed=".sprTreeFolder" iconOpen=".sprTreeFolder_o" sortOrder="10" />--> + + \ No newline at end of file diff --git a/src/Umbraco.Web/Trees/ContentTreeController.cs b/src/Umbraco.Web/Trees/ContentTreeController.cs index 8684ddebaf..1769a4c2e1 100644 --- a/src/Umbraco.Web/Trees/ContentTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTreeController.cs @@ -17,20 +17,6 @@ using umbraco.interfaces; namespace Umbraco.Web.Trees { - //[Tree(Constants.Applications.Content, Constants.Trees.Content, "Content")] - //public class MediaTreeController : ContentTreeControllerBase - //{ - // protected override TreeNodeCollection GetTreeData(string id, FormDataCollection queryStrings) - // { - // throw new NotImplementedException(); - // } - - // protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings) - // { - // throw new NotImplementedException(); - // } - //} - [Tree(Constants.Applications.Content, Constants.Trees.Content, "Content")] public class ContentTreeController : ContentTreeControllerBase { @@ -74,26 +60,10 @@ namespace Umbraco.Web.Trees protected override TreeNodeCollection PerformGetTreeNodes(string id, FormDataCollection queryStrings) { - int iid; - if (int.TryParse(id, out iid) == false) - { - throw new InvalidCastException("The id for the content tree must be an integer"); - } + var entities = GetChildEntities(id); var nodes = new TreeNodeCollection(); - IEnumerable entities; - - //if a request is made for the root node data but the user's start node is not the default, then - // we need to return their start node data - if (iid == Constants.System.Root && UmbracoUser.StartNodeId != Constants.System.Root) - { - entities = Services.EntityService.GetChildren(UmbracoUser.StartNodeId, UmbracoObjectTypes.Document).ToArray(); - } - else - { - entities = Services.EntityService.GetChildren(iid, UmbracoObjectTypes.Document).ToArray(); - } - + foreach (var entity in entities) { var e = (UmbracoEntity)entity; @@ -124,8 +94,11 @@ namespace Umbraco.Web.Trees UmbracoUser.GetPermissions(Constants.System.Root.ToInvariantString())) .Select(x => new MenuItem(x)); + //these two are the standard items menu.AddMenuItem(); menu.AddMenuItem(); + + //filter the standard items var allowedMenu = GetUserAllowedMenuItems(menu, nodeActions); if (allowedMenu.Any()) @@ -133,9 +106,9 @@ namespace Umbraco.Web.Trees allowedMenu.Last().SeperatorBefore = true; } - // default actions for all users + // add default actions for *all* users allowedMenu.AddMenuItem(); - menu.AddMenuItem(true); + allowedMenu.AddMenuItem(true); return allowedMenu; } @@ -156,6 +129,11 @@ namespace Umbraco.Web.Trees GetUserMenuItemsForNode(item)); } + protected override UmbracoObjectTypes UmbracoObjectType + { + get { return UmbracoObjectTypes.Document; } + } + protected IEnumerable CreateAllowedActions() { var menu = new MenuItemCollection(); diff --git a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs index 355ac04741..4be4306926 100644 --- a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs +++ b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Net.Http.Formatting; using Umbraco.Core; @@ -26,6 +27,26 @@ namespace Umbraco.Web.Trees protected abstract MenuItemCollection PerformGetMenuForNode(string id, FormDataCollection queryStrings); + protected abstract UmbracoObjectTypes UmbracoObjectType { get; } + + protected IEnumerable GetChildEntities(string id) + { + int iid; + if (int.TryParse(id, out iid) == false) + { + throw new InvalidCastException("The id for the media tree must be an integer"); + } + + //if a request is made for the root node data but the user's start node is not the default, then + // we need to return their start node data + if (iid == Constants.System.Root && UmbracoUser.StartNodeId != Constants.System.Root) + { + return Services.EntityService.GetChildren(UmbracoUser.StartNodeId, UmbracoObjectType).ToArray(); + } + + return Services.EntityService.GetChildren(iid, UmbracoObjectType).ToArray(); + } + /// /// This will automatically check if the recycle bin needs to be rendered (i.e. its the first level) /// and will automatically append it to the result of GetChildNodes. diff --git a/src/Umbraco.Web/Trees/MediaTreeController.cs b/src/Umbraco.Web/Trees/MediaTreeController.cs new file mode 100644 index 0000000000..6af5d760c3 --- /dev/null +++ b/src/Umbraco.Web/Trees/MediaTreeController.cs @@ -0,0 +1,65 @@ +using System.Linq; +using System.Net.Http.Formatting; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Core.Services; +using Umbraco.Web.Trees.Menu; +using umbraco.BusinessLogic.Actions; + +namespace Umbraco.Web.Trees +{ + [Tree(Constants.Applications.Media, Constants.Trees.Media, "Media")] + public class MediaTreeController : ContentTreeControllerBase + { + protected override int RecycleBinId + { + get { return Constants.System.RecycleBinContent; } + } + + protected override bool RecycleBinSmells + { + get { return Services.MediaService.RecycleBinSmells(); } + } + + protected override TreeNodeCollection PerformGetTreeNodes(string id, FormDataCollection queryStrings) + { + var entities = GetChildEntities(id); + + var nodes = new TreeNodeCollection(); + + nodes.AddRange( + entities.Cast() + .Select(e => CreateTreeNode(e.Id.ToInvariantString(), queryStrings, e.Name, e.ContentTypeIcon, e.HasChildren))); + + return nodes; + + } + + protected override MenuItemCollection PerformGetMenuForNode(string id, FormDataCollection queryStrings) + { + var menu = new MenuItemCollection(); + + if (id == Constants.System.Root.ToInvariantString()) + { + // default actions for all users + menu.AddMenuItem(); + menu.AddMenuItem(true); + menu.AddMenuItem(true); + return menu; + } + + //return a normal node menu: + menu.AddMenuItem(); + menu.AddMenuItem(); + menu.AddMenuItem(); + menu.AddMenuItem(); + menu.AddMenuItem(true); + return menu; + } + + protected override UmbracoObjectTypes UmbracoObjectType + { + get { return UmbracoObjectTypes.Media; } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 9782eae667..a1fe2aa6c5 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -343,6 +343,7 @@ +