From 0142bc61bc3827543b4fcaa7c184f0c722ac28fc Mon Sep 17 00:00:00 2001 From: Claus Date: Wed, 10 Aug 2016 09:56:28 +0200 Subject: [PATCH] U4-8671 Media Types Missing in 7.4 renders child nodes in media type tree. fixed up the context menus returned on nodes so you can create children if not disabled in config. --- .../UmbracoSettings/ContentElement.cs | 19 ++++++++- .../UmbracoSettings/IContentSection.cs | 2 + .../Trees/MediaTypeTreeController.cs | 40 +++++++++++++++++-- 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs index 1b1404a897..d743daca6a 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs @@ -291,7 +291,19 @@ namespace Umbraco.Core.Configuration.UmbracoSettings true); } } - + + [ConfigurationProperty("EnableInheritedMediaTypes")] + internal InnerTextConfigurationElement EnableInheritedMediaTypes + { + get + { + return new OptionalInnerTextConfigurationElement( + (InnerTextConfigurationElement)this["EnableInheritedMediaTypes"], + //set the default + true); + } + } + string IContentSection.NotificationEmailAddress { get { return Notifications.NotificationEmailAddress; } @@ -431,5 +443,10 @@ namespace Umbraco.Core.Configuration.UmbracoSettings { get { return EnableInheritedDocumentTypes; } } + + bool IContentSection.EnableInheritedMediaTypes + { + get { return EnableInheritedMediaTypes; } + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/IContentSection.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/IContentSection.cs index ebdd9ae637..3d5e4435b6 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/IContentSection.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/IContentSection.cs @@ -61,5 +61,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings string DefaultDocumentTypeProperty { get; } bool EnableInheritedDocumentTypes { get; } + + bool EnableInheritedMediaTypes { get; } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Trees/MediaTypeTreeController.cs b/src/Umbraco.Web/Trees/MediaTypeTreeController.cs index 717d53ab96..106569cab7 100644 --- a/src/Umbraco.Web/Trees/MediaTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/MediaTypeTreeController.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using umbraco; using umbraco.BusinessLogic.Actions; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Web.Models.Trees; @@ -50,7 +51,11 @@ namespace Umbraco.Web.Trees .OrderBy(entity => entity.Name) .Select(dt => { - var node = CreateTreeNode(dt.Id.ToString(), id, queryStrings, dt.Name, "icon-item-arrangement", false); + var node = CreateTreeNode(dt.Id.ToString(), id, queryStrings, dt.Name, "icon-item-arrangement", + //NOTE: Since 7.4+ child type creation is enabled by a config option. It defaults to on, but can be disabled if we decide to. + //We need this check to keep supporting sites where childs have already been created. + dt.HasChildren()); + node.Path = dt.Path; return node; })); @@ -62,6 +67,8 @@ namespace Umbraco.Web.Trees { var menu = new MenuItemCollection(); + var enableInheritedMediaTypes = UmbracoConfig.For.UmbracoSettings().Content.EnableInheritedMediaTypes; + if (id == Constants.System.Root.ToInvariantString()) { //set the default to create @@ -89,10 +96,35 @@ namespace Umbraco.Web.Trees menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), hasSeparator: true); } else - { - menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionDelete.Instance.Alias))); - menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionMove.Instance.Alias)), hasSeparator: true); + { + var ct = Services.ContentTypeService.GetMediaType(int.Parse(id)); + IMediaType parent = null; + parent = ct == null ? null : Services.ContentTypeService.GetMediaType(ct.ParentId); + + if (enableInheritedMediaTypes) + { + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionNew.Instance.Alias))); + + //no move action if this is a child doc type + if (parent == null) + { + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionMove.Instance.Alias)), true); + } + } + else + { + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionMove.Instance.Alias))); + //no move action if this is a child doc type + if (parent == null) + { + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionMove.Instance.Alias)), true); + } + } + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionCopy.Instance.Alias))); + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionDelete.Instance.Alias))); + if (enableInheritedMediaTypes) + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), true); } return menu;