From 7e5087ae7d1e24c8389a31e14a4551b7fc7bfce3 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Mon, 25 Feb 2013 10:31:38 -0100 Subject: [PATCH] Fixing issues related to DocTypes --- src/Umbraco.Core/Models/ContentTypeBase.cs | 1 - src/Umbraco.Core/Models/ContentTypeCompositionBase.cs | 5 ++--- .../Persistence/Factories/PropertyGroupFactory.cs | 4 ++-- .../Repositories/ContentTypeBaseRepository.cs | 11 ++++++----- .../umbraco/controls/ContentControl.cs | 4 ++-- .../umbraco/controls/ContentTypeControlNew.ascx.cs | 4 ++-- src/umbraco.cms/businesslogic/Content.cs | 2 +- 7 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/Models/ContentTypeBase.cs b/src/Umbraco.Core/Models/ContentTypeBase.cs index 055afffe9c..9390aeaf8f 100644 --- a/src/Umbraco.Core/Models/ContentTypeBase.cs +++ b/src/Umbraco.Core/Models/ContentTypeBase.cs @@ -4,7 +4,6 @@ using System.Collections.Specialized; using System.Linq; using System.Reflection; using System.Runtime.Serialization; -using System.Text.RegularExpressions; using Umbraco.Core.Models.EntityBase; namespace Umbraco.Core.Models diff --git a/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs b/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs index 385f319ffb..3e072bdc35 100644 --- a/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs +++ b/src/Umbraco.Core/Models/ContentTypeCompositionBase.cs @@ -45,7 +45,7 @@ namespace Umbraco.Core.Models { get { - var groups = PropertyGroups.Union(ContentTypeComposition.SelectMany(x => x.CompositionPropertyGroups)); + var groups = ContentTypeComposition.SelectMany(x => x.CompositionPropertyGroups).Union(PropertyGroups); return groups; } } @@ -58,8 +58,7 @@ namespace Umbraco.Core.Models { get { - var propertyTypes = - PropertyTypes.Union(ContentTypeComposition.SelectMany(x => x.CompositionPropertyTypes)); + var propertyTypes = ContentTypeComposition.SelectMany(x => x.CompositionPropertyTypes).Union(PropertyTypes); return propertyTypes; } } diff --git a/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs b/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs index 0c6a63ea58..92ac5a55ba 100644 --- a/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs @@ -41,8 +41,8 @@ namespace Umbraco.Core.Persistence.Factories group.PropertyTypes = new PropertyTypeCollection(); //Because we are likely to have a group with no PropertyTypes we need to ensure that these are excluded - //var typeDtos = groupDto.PropertyTypeDtos.Where(x => x.Id > 0); - foreach (var typeDto in groupDto.PropertyTypeDtos) + var typeDtos = groupDto.PropertyTypeDtos.Where(x => x.Id > 0); + foreach (var typeDto in typeDtos) { group.PropertyTypes.Add(new PropertyType(typeDto.DataTypeDto.ControlId, typeDto.DataTypeDto.DbType.EnumParse(true)) diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs index d0b3f71a34..6113c73653 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs @@ -190,12 +190,13 @@ namespace Umbraco.Core.Persistence.Repositories Database.Delete("WHERE contentTypeId = @Id AND Alias = @Alias", new { Id = entity.Id, Alias = alias }); } //Delete Tabs/Groups by excepting entries from db with entries from collections - var dbPropertyGroups = Database.Fetch("WHERE contenttypeNodeId = @Id", new { Id = entity.Id }).Select(x => x.Text); - var entityPropertyGroups = entity.PropertyGroups.Select(x => x.Name); + var dbPropertyGroups = Database.Fetch("WHERE contenttypeNodeId = @Id", new { Id = entity.Id }).Select(x => new Tuple(x.Id, x.Text)); + var entityPropertyGroups = entity.PropertyGroups.Select(x => new Tuple(x.Id, x.Name)); var tabs = dbPropertyGroups.Except(entityPropertyGroups); - foreach (var tabName in tabs) + foreach (var tab in tabs) { - Database.Delete("WHERE contenttypeNodeId = @Id AND text = @Name", new { Id = entity.Id, Name = tabName }); + Database.Update("SET parentGroupId = NULL WHERE parentGroupId = @TabId", new {TabId = tab.Item1}); + Database.Delete("WHERE contenttypeNodeId = @Id AND text = @Name", new { Id = entity.Id, Name = tab.Item2 }); } //Run through all groups to insert or update entries @@ -248,7 +249,7 @@ namespace Umbraco.Core.Persistence.Repositories .On(left => left.Id, right => right.PropertyTypeGroupId) .LeftJoin() .On(left => left.DataTypeId, right => right.DataTypeId) - .Where(x => x.ContentTypeId == id) + .Where(x => x.ContentTypeNodeId == id) .OrderBy(x => x.Id); var dtos = Database.Fetch(new GroupPropertyTypeRelator().Map, sql); diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs index 32d8ead124..2ed765e57f 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentControl.cs @@ -132,8 +132,8 @@ namespace umbraco.controls var tabId = tab.Id; var propertyGroups = _contentType.ContentTypeItem.CompositionPropertyGroups.Where(x => x.Id == tabId || x.ParentId == tabId); - var propertyTypeAliaes = propertyGroups.SelectMany(x => x.PropertyTypes.Select(y => new System.Tuple(y.Id, y.Alias))); - foreach (var items in propertyTypeAliaes) + var propertyTypeAliases = propertyGroups.SelectMany(x => x.PropertyTypes.OrderBy(y => y.SortOrder).Select(y => new System.Tuple(y.Id, y.Alias, y.SortOrder))); + foreach (var items in propertyTypeAliases) { var property = _content.getProperty(items.Item2); if (property != null) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs index 1f23be3f03..8f82971768 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs @@ -941,8 +941,8 @@ jQuery(document).ready(function() {{ refreshDropDowns(); }}); var propertyGroup = new PropertyGroup { Name = txtNewTab.Text }; if (_contentType.ContentTypeItem.PropertyGroups.Any()) { - var first = _contentType.ContentTypeItem.PropertyGroups.OrderBy(x => x.SortOrder).First(); - propertyGroup.SortOrder = first.SortOrder + 1; + var last = _contentType.ContentTypeItem.PropertyGroups.OrderBy(x => x.SortOrder).Last(); + propertyGroup.SortOrder = last.SortOrder + 1; } _contentType.ContentTypeItem.PropertyGroups.Add(propertyGroup); _contentType.Save(); diff --git a/src/umbraco.cms/businesslogic/Content.cs b/src/umbraco.cms/businesslogic/Content.cs index 012b2759ef..6b8852e1de 100644 --- a/src/umbraco.cms/businesslogic/Content.cs +++ b/src/umbraco.cms/businesslogic/Content.cs @@ -673,7 +673,7 @@ namespace umbraco.cms.businesslogic continue; //get the propertyId - var property = propData.SingleOrDefault(x => x.PropertyTypeId == pt.Id); + var property = propData.LastOrDefault(x => x.PropertyTypeId == pt.Id); if (property == null) { //continue;