Example #1
0
        /// <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);
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        /// <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);
        }