diff --git a/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs b/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs index 9681e2164e..93a77d5cac 100644 --- a/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs +++ b/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs @@ -116,7 +116,7 @@ namespace Umbraco.Core.Models /// /// Gets a list of ContentType aliases from the current composition /// - /// + /// An enumerable list of string aliases /// Does not contain the alias of the Current ContentType public IEnumerable CompositionAliases() { @@ -124,5 +124,17 @@ namespace Umbraco.Core.Models .Select(x => x.Alias) .Union(ContentTypeComposition.SelectMany(x => x.CompositionAliases())); } + + /// + /// Gets a list of ContentType Ids from the current composition + /// + /// An enumerable list of integer ids + /// Does not contain the Id of the Current ContentType + public IEnumerable CompositionIds() + { + return ContentTypeComposition + .Select(x => x.Id) + .Union(ContentTypeComposition.SelectMany(x => x.CompositionIds())); + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/IContentTypeComposition.cs b/src/Umbraco.Core/Models/IContentTypeComposition.cs index 6da7f2e9c9..8b5049f236 100644 --- a/src/Umbraco.Core/Models/IContentTypeComposition.cs +++ b/src/Umbraco.Core/Models/IContentTypeComposition.cs @@ -46,7 +46,13 @@ namespace Umbraco.Core.Models /// /// Gets a list of ContentType aliases from the current composition /// - /// + /// An enumerable list of string aliases IEnumerable CompositionAliases(); + + /// + /// Gets a list of ContentType Ids from the current composition + /// + /// An enumerable list of integer ids + IEnumerable CompositionIds(); } } \ No newline at end of file diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs index bd24324bcf..a8a549383d 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs @@ -130,7 +130,8 @@ namespace umbraco.controls // Iterate through the property types and add them to the tab // zb-00036 #29889 : fix property types getter to get the right set of properties // ge : had a bit of a corrupt db and got weird NRE errors so rewrote this to catch the error and rethrow with detail - foreach (PropertyType propertyType in tab.GetPropertyTypes(_content.ContentType.Id)) + var propertyTypes = tab.GetPropertyTypes(_content.ContentType.Id); + foreach (PropertyType propertyType in propertyTypes) { var property = _content.getProperty(propertyType); if (property != null && tabPage != null) diff --git a/src/umbraco.cms/businesslogic/ContentType.cs b/src/umbraco.cms/businesslogic/ContentType.cs index 55f224c783..3db18b7762 100644 --- a/src/umbraco.cms/businesslogic/ContentType.cs +++ b/src/umbraco.cms/businesslogic/ContentType.cs @@ -582,14 +582,25 @@ namespace umbraco.cms.businesslogic if (m_masterContentTypes == null) { m_masterContentTypes = new List(); - using (var dr = SqlHelper.ExecuteReader(@"SELECT parentContentTypeId FROM cmsContentType2ContentType WHERE childContentTypeId = @id", SqlHelper.CreateParameter("@id", Id))) + if (_contentType == null) { - while (dr.Read()) + //TODO Make this recursive, so it looks up Masters of the Master ContentType + using ( + var dr = + SqlHelper.ExecuteReader( + @"SELECT parentContentTypeId FROM cmsContentType2ContentType WHERE childContentTypeId = @id", + SqlHelper.CreateParameter("@id", Id))) { - m_masterContentTypes.Add(dr.GetInt("parentContentTypeId")); + while (dr.Read()) + { + m_masterContentTypes.Add(dr.GetInt("parentContentTypeId")); + } } } - + else + { + m_masterContentTypes = _contentType.CompositionIds().ToList(); + } } return m_masterContentTypes;