/// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary> /// <param name="item">The item to create a old version of.</param> /// <returns>The old version.</returns> public virtual ContentItem AddVersion(ContentItem item, bool asPreviousVersion = true) { if (item == null) throw new ArgumentNullException("item"); CancellableItemEventArgs args = new CancellableItemEventArgs(item); if (ItemSavingVersion != null) ItemSavingVersion.Invoke(this, args); if (args.Cancel) return null; item = args.AffectedItem; if (!item.IsPage) { var page = Find.ClosestPage(item); if (page == null) throw new InvalidOperationException("Cannot create version of part which isn't on a page: " + item); var pageVersion = AddVersion(page, asPreviousVersion: asPreviousVersion); var partVersion = pageVersion.FindPartVersion(item); return partVersion; } ContentItem version = item.CloneForVersioningRecursive(stateChanger, asPreviousVersion); if (item.Parent != null) version["ParentID"] = item.Parent.ID; //ContentVersion savedVersion; if (asPreviousVersion) { /*savedVersion = */Repository.Save(version, asPreviousVersion); item.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1; itemRepository.SaveOrUpdate(item); } else { version.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1; /*savedVersion = */Repository.Save(version, asPreviousVersion); } if (ItemSavedVersion != null) ItemSavedVersion.Invoke(this, new ItemEventArgs(version)); TrimVersionCountTo(item, maximumVersionsPerItem); return version;// Repository.DeserializeVersion(savedVersion); }
public ContentVersion UpgradeVersion(ContentItem version) { using (var tx = itemRepository.BeginTransaction()) { var clone = version.CloneForVersioningRecursive(); clone.VersionOf = version.VersionOf.Value; foreach (var child in version.VersionOf.Children.FindParts()) { child.CloneForVersioningRecursive().AddTo(clone); } var newVersion = versionRepository.Save(clone); itemRepository.Delete(version); tx.Commit(); return newVersion; } }
public ContentVersion UpgradeVersion(ContentItem version) { using (var tx = itemRepository.BeginTransaction()) { var clone = version.CloneForVersioningRecursive(); clone.VersionOf = version.VersionOf.Value; foreach (var child in version.VersionOf.Children.FindParts()) { child.CloneForVersioningRecursive().AddTo(clone); } var newVersion = versionRepository.Save(clone); itemRepository.Delete(version); tx.Commit(); return(newVersion); } }
/// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary> /// <param name="item">The item to create a old version of.</param> /// <returns>The old version.</returns> public virtual ContentItem AddVersion(ContentItem item, bool asPreviousVersion = true) { if (item == null) { throw new ArgumentNullException("item"); } CancellableItemEventArgs args = new CancellableItemEventArgs(item); if (ItemSavingVersion != null) { ItemSavingVersion.Invoke(this, args); } if (args.Cancel) { return(null); } item = args.AffectedItem; if (!item.IsPage) { var page = Find.ClosestPage(item); if (page == null) { throw new InvalidOperationException("Cannot create version of part which isn't on a page: " + item); } var pageVersion = AddVersion(page, asPreviousVersion: asPreviousVersion); var partVersion = pageVersion.FindPartVersion(item); return(partVersion); } ContentItem version = item.CloneForVersioningRecursive(stateChanger, asPreviousVersion); if (item.Parent != null) { version["ParentID"] = item.Parent.ID; } //ContentVersion savedVersion; if (asPreviousVersion) { /*savedVersion = */ Repository.Save(version, asPreviousVersion); item.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1; itemRepository.SaveOrUpdate(item); } else { version.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1; /*savedVersion = */ Repository.Save(version, asPreviousVersion); } if (ItemSavedVersion != null) { ItemSavedVersion.Invoke(this, new ItemEventArgs(version)); } TrimVersionCountTo(item, maximumVersionsPerItem); return(version); // Repository.DeserializeVersion(savedVersion); }