From b0d7bdaa77a7019112880aae1fdb42bb2e873764 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Thu, 24 Oct 2019 17:21:38 +0200 Subject: [PATCH] V8: Filter out invalid selections in the MNTP "Allowed items" picker (#6641) --- .../prevalueeditors/treesourcetypepicker.controller.js | 5 +++++ src/Umbraco.Web/Trees/ContentTypeTreeController.cs | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/treesourcetypepicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/treesourcetypepicker.controller.js index 0df1b3cafb..ef781c6014 100644 --- a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/treesourcetypepicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/treesourcetypepicker.controller.js @@ -42,6 +42,11 @@ function TreeSourceTypePickerController($scope, contentTypeResource, mediaTypeRe var editor = { multiPicker: true, + filterCssClass: "not-allowed not-published", + filter: function (item) { + // filter out folders (containers), element types (for content) and already selected items + return item.nodeType === "container" || item.metaData.isElement || !!_.findWhere(vm.itemTypes, { udi: item.udi }); + }, submit: function (model) { var newItemTypes = _.map(model.selection, function(selected) { diff --git a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs index a865df8f36..e8f8fb9f75 100644 --- a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs @@ -62,8 +62,10 @@ namespace Umbraco.Web.Trees //if the request is for folders only then just return if (queryStrings["foldersonly"].IsNullOrWhiteSpace() == false && queryStrings["foldersonly"] == "1") return nodes; + var children = Services.EntityService.GetChildren(intId.Result, UmbracoObjectTypes.DocumentType).ToArray(); + var contentTypes = Services.ContentTypeService.GetAll(children.Select(c => c.Id).ToArray()).ToDictionary(c => c.Id); nodes.AddRange( - Services.EntityService.GetChildren(intId.Result, UmbracoObjectTypes.DocumentType) + children .OrderBy(entity => entity.Name) .Select(dt => { @@ -73,6 +75,12 @@ namespace Umbraco.Web.Trees var node = CreateTreeNode(dt, Constants.ObjectTypes.DocumentType, id, queryStrings, Constants.Icons.ContentType, hasChildren); node.Path = dt.Path; + + // enrich the result with content type data that's not available in the entity service output + var contentType = contentTypes[dt.Id]; + node.Alias = contentType.Alias; + node.AdditionalData["isElement"] = contentType.IsElement; + return node; }));