public virtual ContentItem Clone(ContentItem contentItem) { // Mostly taken from: http://Coevery.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 (element == null) { throw new InvalidOperationException("The content item couldn't be cloned because a handler prevented it from being exported."); } var elementId = element.Attribute("Id"); var copyId = elementId.Value + "-copy"; elementId.SetValue(copyId); var status = element.Attribute("Status"); if (status != null) { status.SetValue("Draft"); // So the copy is always a draft. } importContentSession.Set(copyId, element.Name.LocalName); Import(element, importContentSession); return(importContentSession.Get(copyId, element.Name.LocalName)); }
public void GetItemExistsAndNoVersionOptionsReturnsPublishedItem() { var session = new ImportContentSession(_contentManager.Object); session.Set(_testItemIdentity1.ToString(), "TestContentType"); var sessionItem = session.Get(_testItemIdentity1.ToString()); Assert.IsNotNull(sessionItem); Assert.AreEqual(1, sessionItem.Id); Assert.IsTrue(sessionItem.IsPublished()); }
public void GetItemExistsAndDraftRequiredVersionOptionReturnsDraft() { var session = new ImportContentSession(_contentManager.Object); session.Set(_testItemIdentity1.ToString(), "TestContentType"); var sessionItem = session.Get(_testItemIdentity1.ToString(), VersionOptions.DraftRequired); Assert.IsNotNull(sessionItem); Assert.That(1, Is.EqualTo(sessionItem.Id)); Assert.IsFalse(sessionItem.IsPublished()); }
public void GetNextInBatchInitialisedTwoBatchesReturnsItemsOnceEach() { var session = new ImportContentSession(_contentManager.Object); session.Set(_testItemIdentity1.ToString(), "TestContentType"); session.Set(_testItemIdentity2.ToString(), "TestContentType"); session.Set(_testItemIdentity3.ToString(), "TestContentType"); session.Set(_testItemIdentity4.ToString(), "TestContentType"); session.Set(_testItemIdentity5.ToString(), "TestContentType"); session.InitializeBatch(0, 2); var firstIdentity = session.GetNextInBatch(); //get later item as dependency var dependencyItem = session.Get(_testItemIdentity5.ToString(), VersionOptions.Latest); var dependencyIdentity = session.GetNextInBatch(); var secondIdentity = session.GetNextInBatch(); var afterBatch1 = session.GetNextInBatch(); session.InitializeBatch(2, 2); var thirdIdentity = session.GetNextInBatch(); var fourthdentity = session.GetNextInBatch(); var afterBatch2 = session.GetNextInBatch(); session.InitializeBatch(4, 2); var fifthIdentity = session.GetNextInBatch(); var afterBatch3 = session.GetNextInBatch(); var comparer = new ContentIdentity.ContentIdentityEqualityComparer(); Assert.That(comparer.Equals(_testItemIdentity1, firstIdentity)); Assert.That(comparer.Equals(_testItemIdentity5, dependencyIdentity)); Assert.That(comparer.Equals(_testItemIdentity2, secondIdentity)); Assert.That(afterBatch1, Is.Null); Assert.That(comparer.Equals(_testItemIdentity3, thirdIdentity)); Assert.That(comparer.Equals(_testItemIdentity4, fourthdentity)); Assert.That(afterBatch2, Is.Null); Assert.That(fifthIdentity, Is.Null); //already processed as dependency Assert.That(afterBatch3, Is.Null); }
// Insert or Update imported data into the content manager. // Call content item handlers. public void Import(XElement element, ImportContentSession importContentSession) { var elementId = element.Attribute("Id"); if (elementId == null) { return; } var identity = elementId.Value; if (String.IsNullOrWhiteSpace(identity)) { return; } var status = element.Attribute("Status"); var item = importContentSession.Get(identity, VersionOptions.Latest, XmlConvert.DecodeName(element.Name.LocalName)); if (item == null) { item = New(XmlConvert.DecodeName(element.Name.LocalName)); if (status != null && status.Value == "Draft") { Create(item, VersionOptions.Draft); } else { Create(item); } } // create a version record if import handlers need it if (item.VersionRecord == null) { item.VersionRecord = new ContentItemVersionRecord { ContentItemRecord = new ContentItemRecord { ContentType = AcquireContentTypeRecord(item.ContentType) }, Number = 1, Latest = true, Published = true }; } var context = new ImportContentContext(item, element, importContentSession); foreach (var contentHandler in Handlers) { contentHandler.Importing(context); } foreach (var contentHandler in Handlers) { contentHandler.Imported(context); } var savedItem = Get(item.Id, VersionOptions.Latest); // the item has been pre-created in the first pass of the import, create it in db if (savedItem == null) { if (status != null && status.Value == "Draft") { Create(item, VersionOptions.Draft); } else { Create(item); } } if (status == null || status.Value == Published) { Publish(item); } }