From dac17198f668d9f195e69a2abed6c8ee5073f5b1 Mon Sep 17 00:00:00 2001 From: Jay Harris Date: Sat, 14 Feb 2015 16:19:14 +0000 Subject: [PATCH] #21151 : Import with LayoutPart Fails if not in XML. Work Item: 21151 --- .../Drivers/LayoutPartDriver.cs | 12 ++++++--- .../Handlers/ImportContentContext.cs | 26 +++++++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs index 47d59f8ad..86202ec15 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Xml.Linq; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; @@ -104,11 +105,14 @@ namespace Orchard.Layouts.Drivers { } protected override void Importing(LayoutPart part, ImportContentContext context) { - part.LayoutState = context.Data.Element(part.PartDefinition.Name).El("LayoutState"); - _layoutManager.Importing(new ImportLayoutContext { - Layout = part, - Session = new ImportContentContextWrapper(context) + context.ImportChildEl(part.PartDefinition.Name, "LayoutState", s => { + part.LayoutState = s; + _layoutManager.Importing(new ImportLayoutContext { + Layout = part, + Session = new ImportContentContextWrapper(context) + }); }); + context.ImportAttribute(part.PartDefinition.Name, "TemplateId", s => part.TemplateId = GetTemplateId(context, s)); } diff --git a/src/Orchard/ContentManagement/Handlers/ImportContentContext.cs b/src/Orchard/ContentManagement/Handlers/ImportContentContext.cs index 5d90d4053..144c94c41 100644 --- a/src/Orchard/ContentManagement/Handlers/ImportContentContext.cs +++ b/src/Orchard/ContentManagement/Handlers/ImportContentContext.cs @@ -6,7 +6,6 @@ namespace Orchard.ContentManagement.Handlers { public XElement Data { get; set; } private ImportContentSession Session { get; set; } - public ImportContentContext(ContentItem contentItem, XElement data, ImportContentSession importContentSession) : base(contentItem) { Data = data; @@ -23,6 +22,11 @@ namespace Orchard.ContentManagement.Handlers { return null; } + public string ChildEl(string elementName, string childElementName) { + var element = Data.Element(elementName); + return element == null ? null : element.El(childElementName); + } + public void ImportAttribute(string elementName, string attributeName, Action value) { ImportAttribute(elementName, attributeName, value, () => { }); } @@ -42,9 +46,27 @@ namespace Orchard.ContentManagement.Handlers { } } + public void ImportChildEl(string elementName, string childElementName, Action value) { + ImportAttribute(elementName, childElementName, value, () => { }); + } + + public void ImportChildEl(string elementName, string childElementName, Action value, Action empty) { + var importedText = ChildEl(elementName, childElementName); + if (importedText != null) { + try { + value(importedText); + } + catch { + empty(); + } + } + else { + empty(); + } + } + public ContentItem GetItemFromSession(string id) { return Session.Get(id); } - } } \ No newline at end of file