diff --git a/src/Orchard.Tests/ContentManagement/DefaultContentManagerImportTests.cs b/src/Orchard.Tests/ContentManagement/DefaultContentManagerImportTests.cs index 4f4249e44..cf50819f1 100644 --- a/src/Orchard.Tests/ContentManagement/DefaultContentManagerImportTests.cs +++ b/src/Orchard.Tests/ContentManagement/DefaultContentManagerImportTests.cs @@ -202,6 +202,7 @@ namespace Orchard.Tests.ContentManagement { private void Import(XElement element) { var importContentSession = new ImportContentSession(_contentManager); _contentManager.Import(element, importContentSession); + _contentManager.CompleteImport(element, importContentSession); } private XElement CreateContentElement(string title = "Dummy", string identity = "123456789012345678901234567890ab", string version = null) { diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/ContentStep.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/ContentStep.cs index 90fd57f66..e77d74875 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/ContentStep.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/ContentStep.cs @@ -82,11 +82,7 @@ namespace Orchard.Recipes.Providers.Executors { // Invoke ImportCompleted. BatchedInvoke(context, "ImportCompleted", (itemId, nextIdentityValue, element, importContentSession, elementDictionary) => { - var contentItem = importContentSession.Get(itemId, VersionOptions.Latest); - var importContentContext = new ImportContentContext(contentItem, elementDictionary[nextIdentityValue], importContentSession); - foreach (var handler in _handlers.Value) { - handler.ImportCompleted(importContentContext); - } + _orchardServices.ContentManager.CompleteImport(element, importContentSession); }); } diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index fc6fd7de6..192f60161 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -563,11 +563,9 @@ namespace Orchard.ContentManagement { public virtual ContentItem Clone(ContentItem contentItem) { // Mostly taken from: http://orchard.codeplex.com/discussions/396664 - var importContentSession = new ImportContentSession(this); - var element = Export(contentItem); - // If a handler prevents this element from being exported, it can't be cloned + // If a handler prevents this element from being exported, it can't be cloned. if (element == null) { throw new InvalidOperationException("The content item couldn't be cloned because a handler prevented it from being exported."); } @@ -578,9 +576,10 @@ namespace Orchard.ContentManagement { var status = element.Attribute("Status"); if (status != null) status.SetValue("Draft"); // So the copy is always a draft. + var importContentSession = new ImportContentSession(this); importContentSession.Set(copyId, element.Name.LocalName); - Import(element, importContentSession); + CompleteImport(element, importContentSession); return importContentSession.Get(copyId, element.Name.LocalName); } @@ -790,6 +789,26 @@ namespace Orchard.ContentManagement { } } + public void CompleteImport(XElement element, ImportContentSession importContentSession) { + var elementId = element.Attribute("Id"); + if (elementId == null) { + return; + } + + var identity = elementId.Value; + + if (String.IsNullOrWhiteSpace(identity)) { + return; + } + + var item = importContentSession.Get(identity, VersionOptions.Latest, XmlConvert.DecodeName(element.Name.LocalName)); + var context = new ImportContentContext(item, element, importContentSession); + + foreach (var handler in _handlers.Value) { + handler.ImportCompleted(context); + } + } + public XElement Export(ContentItem contentItem) { var context = new ExportContentContext(contentItem, new XElement(XmlConvert.EncodeLocalName(contentItem.ContentType))); diff --git a/src/Orchard/ContentManagement/IContentManager.cs b/src/Orchard/ContentManagement/IContentManager.cs index 4582f7206..6b217140e 100644 --- a/src/Orchard/ContentManagement/IContentManager.cs +++ b/src/Orchard/ContentManagement/IContentManager.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Xml.Linq; +using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData.Models; using Orchard.Indexing; @@ -92,6 +93,7 @@ namespace Orchard.ContentManagement { XElement Export(ContentItem contentItem); void Import(XElement element, ImportContentSession importContentSession); + void CompleteImport(XElement element, ImportContentSession importContentSession); /// /// Clears the current referenced content items