From e8f7a83f6862569c8fe3afbcf23ff8498463a375 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Wed, 22 Jan 2014 19:50:21 +0000 Subject: [PATCH 1/6] Fixed: U4-4119 - Export ContentType fails for Generic Properties Adds Null checking for PropertyGroupID so that an exception is avoided when the propertyType is in the Generic Properties group (and has no ID assigned) --- src/Umbraco.Core/Services/PackagingService.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 92b44e8d3e..6f86cc12df 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -373,7 +373,11 @@ namespace Umbraco.Core.Services foreach (var propertyType in contentType.PropertyTypes) { var definition = _dataTypeService.GetDataTypeDefinitionById(propertyType.DataTypeDefinitionId); - var propertyGroup = contentType.PropertyGroups.FirstOrDefault(x => x.Id == propertyType.PropertyGroupId.Value); + + var propertyGroup = propertyType.PropertyGroupId == null + ? null + : contentType.PropertyGroups.FirstOrDefault(x => x.Id == propertyType.PropertyGroupId.Value); + var genericProperty = new XElement("GenericProperty", new XElement("Name", propertyType.Name), new XElement("Alias", propertyType.Alias), From a2905c13f6f42095e07fa20ae402e514400cecd0 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Wed, 22 Jan 2014 21:29:49 +0000 Subject: [PATCH 2/6] Export Template fails when template has no master value --- src/Umbraco.Core/Services/PackagingService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 6f86cc12df..5053b7ef1a 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -1629,7 +1629,7 @@ namespace Umbraco.Core.Services xml.Add(new XElement("Design", new XCData(template.Content))); var concreteTemplate = template as Template; - if (concreteTemplate != null) + if (concreteTemplate != null && concreteTemplate.MasterTemplateId != null) { if (concreteTemplate.MasterTemplateId.IsValueCreated && concreteTemplate.MasterTemplateId.Value != default(int)) From 5663b6890ff146e60401e9117d6e406959634eef Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Wed, 22 Jan 2014 21:35:16 +0000 Subject: [PATCH 3/6] Revert "Export Template fails when template has no master value" This reverts commit a2905c13f6f42095e07fa20ae402e514400cecd0. --- src/Umbraco.Core/Services/PackagingService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 5053b7ef1a..6f86cc12df 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -1629,7 +1629,7 @@ namespace Umbraco.Core.Services xml.Add(new XElement("Design", new XCData(template.Content))); var concreteTemplate = template as Template; - if (concreteTemplate != null && concreteTemplate.MasterTemplateId != null) + if (concreteTemplate != null) { if (concreteTemplate.MasterTemplateId.IsValueCreated && concreteTemplate.MasterTemplateId.Value != default(int)) From a7107f01e82379341b2cb18042657f4abaf02dc5 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Thu, 23 Jan 2014 15:57:50 +0000 Subject: [PATCH 4/6] Single DataType import Fix Importing a file with a single data type failed, because the DataType element is at the root when exported. --- src/Umbraco.Core/Services/PackagingService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 6f86cc12df..a939260e1b 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -845,7 +845,7 @@ namespace Umbraco.Core.Services var dataTypes = new Dictionary(); var dataTypeElements = name.Equals("DataTypes") ? (from doc in element.Elements("DataType") select doc).ToList() - : new List { element.Element("DataType") }; + : new List { element }; foreach (var dataTypeElement in dataTypeElements) { From a705561a51ebcd213b490ed3d67d300d5e4b083d Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Thu, 23 Jan 2014 16:05:08 +0000 Subject: [PATCH 5/6] Fix Importing Macro when macro already exists ParseMacroElement called by ImportMacro was no checking for to see if the macro or properties already exists - caused SQL errors on import of macro. Added check to look for existing macro, and only add new properties on import (in line with other import methods) --- src/Umbraco.Core/Services/PackagingService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index a939260e1b..af700d09cc 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -1244,7 +1244,8 @@ namespace Umbraco.Core.Services dontRender = bool.Parse(dontRenderElement.Value); } - var macro = new Macro(macroAlias, macroName, controlType, controlAssembly, xsltPath, scriptPath, + var existingMacro = _macroService.GetByAlias(macroAlias) as Macro; + var macro = existingMacro ?? new Macro(macroAlias, macroName, controlType, controlAssembly, xsltPath, scriptPath, cacheByPage, cacheByMember, dontRender, useInEditor, cacheDuration); var properties = macroElement.Element("properties"); @@ -1262,6 +1263,7 @@ namespace Umbraco.Core.Services sortOrder = int.Parse(sortOrderAttribute.Value); } + if (macro.Properties.Any(x => x.Alias == propertyAlias)) continue; macro.Properties.Add(new MacroProperty(propertyAlias, propertyName, sortOrder, editorAlias)); sortOrder++; } From 57c68daf384e40ff70804272986fda868bbdae14 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Thu, 23 Jan 2014 16:07:07 +0000 Subject: [PATCH 6/6] Fix Template Import when template has no master Importing a template with no master template (i.e when it's at the root) caused an error. Added check for MasterTemplateId != null - (tried .IsValueCreated but that generated a object not set exception) --- src/Umbraco.Core/Services/PackagingService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index af700d09cc..3a9d9dcd0f 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -1631,7 +1631,7 @@ namespace Umbraco.Core.Services xml.Add(new XElement("Design", new XCData(template.Content))); var concreteTemplate = template as Template; - if (concreteTemplate != null) + if (concreteTemplate != null && concreteTemplate.MasterTemplateId != null) { if (concreteTemplate.MasterTemplateId.IsValueCreated && concreteTemplate.MasterTemplateId.Value != default(int))