x.Id) // those we can use
- .Except(indirectContentTypes.Select(x => x.Id)) // except those that are indirectly used
- .Where(x => ancestorIds.Contains(x) == false) // but not the parents
- .Distinct()
- .ToArray();
- foreach (var x in list)
- if (inheritedFromAncestorsIds.Contains(x.Id) == false)
- x.AdditionalData["compositionIsInheritedFromAncestors"] = true;
}
return list
.Where(x => x.Id != contentTypeId)
diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentTypeCompositionDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/ContentTypeCompositionDisplay.cs
index 9a138dd828..5f6e2c5ce5 100644
--- a/src/Umbraco.Web/Models/ContentEditing/ContentTypeCompositionDisplay.cs
+++ b/src/Umbraco.Web/Models/ContentEditing/ContentTypeCompositionDisplay.cs
@@ -44,6 +44,10 @@ namespace Umbraco.Web.Models.ContentEditing
[DataMember(Name = "compositeContentTypes")]
public IEnumerable CompositeContentTypes { get; set; }
+ //Locked compositions
+ [DataMember(Name = "lockedCompositeContentTypes")]
+ public IEnumerable LockedCompositeContentTypes { get; set; }
+
[DataMember(Name = "allowAsRoot")]
public bool AllowAsRoot { get; set; }
diff --git a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs
index e59a474afb..a6a7e79942 100644
--- a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs
+++ b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs
@@ -81,6 +81,10 @@ namespace Umbraco.Web.Models.Mapping
dto => dto.CompositeContentTypes,
expression => expression.MapFrom(dto => dto.ContentTypeComposition))
+ .ForMember(
+ dto => dto.LockedCompositeContentTypes,
+ expression => expression.ResolveUsing(new LockedCompositionsResolver(applicationContext)))
+
.ForMember(
dto => dto.Groups,
expression => expression.ResolveUsing(new PropertyTypeGroupResolver(applicationContext, propertyEditorResolver)));
diff --git a/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs b/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs
index f73d7daef1..5610a70008 100644
--- a/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs
@@ -72,8 +72,8 @@ namespace Umbraco.Web.Models.Mapping
config.CreateMap()
.ForMember(basic => basic.Path, expression => expression.MapFrom(x => x.Path))
.ForMember(basic => basic.ParentId, expression => expression.MapFrom(x => x.ParentId))
- .ForMember(dto => dto.Trashed, expression => expression.Ignore());
- //.ForMember(x => x.AdditionalData, expression => expression.Ignore());
+ .ForMember(dto => dto.Trashed, expression => expression.Ignore())
+ .ForMember(x => x.AdditionalData, expression => expression.Ignore());
config.CreateMap()
//default to document icon
diff --git a/src/Umbraco.Web/Models/Mapping/LockedCompositionsResolver.cs b/src/Umbraco.Web/Models/Mapping/LockedCompositionsResolver.cs
new file mode 100644
index 0000000000..435947c5de
--- /dev/null
+++ b/src/Umbraco.Web/Models/Mapping/LockedCompositionsResolver.cs
@@ -0,0 +1,36 @@
+using AutoMapper;
+using System.Collections.Generic;
+using System.Linq;
+using Umbraco.Core;
+using Umbraco.Core.Models;
+
+namespace Umbraco.Web.Models.Mapping
+{
+ internal class LockedCompositionsResolver : ValueResolver>
+ {
+ private readonly ApplicationContext _applicationContext;
+
+ public LockedCompositionsResolver(ApplicationContext applicationContext)
+ {
+ _applicationContext = applicationContext;
+ }
+
+ protected override IEnumerable ResolveCore(IContentTypeComposition source)
+ {
+ // get ancestor ids from path (exclude current node id)
+ var ancestorIds = source.Path.Substring(0, source.Path.LastIndexOf(',')).Split(',').Select(int.Parse);
+ var aliases = new List();
+ // loop through all content types and return ordered aliases of ancestors
+ var allContentTypes = _applicationContext.Services.ContentTypeService.GetAllContentTypes().ToArray();
+ foreach (var ancestorId in ancestorIds)
+ {
+ var ancestor = allContentTypes.FirstOrDefault(x => x.Id == ancestorId);
+ if (ancestor != null)
+ {
+ aliases.Add(ancestor.Alias);
+ }
+ }
+ return aliases.OrderBy(x => x);
+ }
+ }
+}
diff --git a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs
index b6a0bfab66..5bb8695f9b 100644
--- a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs
+++ b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs
@@ -65,7 +65,6 @@ namespace Umbraco.Web.Trees
var enableInheritedDocumentTypes = UmbracoConfig.For.UmbracoSettings().Content.EnableInheritedDocumentTypes;
-
if (id == Constants.System.Root.ToInvariantString())
{
//set the default to create
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 89780c9aae..f41ad00cba 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -309,6 +309,7 @@
+