예제 #1
0
        protected void gvHistory_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var stateChanger = Engine.Resolve <StateChanger>();

            ContentItem currentVersion = Selection.SelectedItem;
            int         versionIndex   = Convert.ToInt32(e.CommandArgument);

            if (e.CommandName == "Publish")
            {
                if (currentVersion.VersionIndex == versionIndex)
                {
                    currentVersion.SavedBy = User.Identity.Name;
                    if (!currentVersion.Published.HasValue || currentVersion.Published.Value > Utility.CurrentTime())
                    {
                        currentVersion.Published = N2.Utility.CurrentTime();
                    }
                    stateChanger.ChangeTo(currentVersion, ContentState.Published);
                    persister.Save(currentVersion);
                    Refresh(currentVersion, ToolbarArea.Both);
                }
                else
                {
                    N2.ContentItem versionToRestore   = versioner.GetVersion(currentVersion, versionIndex);
                    bool           storeCurrent       = versionToRestore.State == ContentState.Unpublished;
                    ContentItem    unpublishedVersion = versioner.ReplaceVersion(currentVersion, versionToRestore, storeCurrent);

                    currentVersion.SavedBy = User.Identity.Name;

                    if (!currentVersion.Published.HasValue || currentVersion.Published.Value > Utility.CurrentTime())
                    {
                        currentVersion.Published = N2.Utility.CurrentTime();
                    }
                    stateChanger.ChangeTo(currentVersion, ContentState.Published);
                    persister.Save(currentVersion);
                    Refresh(currentVersion, ToolbarArea.Both);
                }
            }
            else if (currentVersion.VersionIndex != versionIndex && e.CommandName == "Delete")
            {
                ContentItem item = versioner.GetVersion(currentVersion, versionIndex);
                versioner.DeleteVersion(item);
            }
        }
        /// <summary>
        /// Used by Versions-Dialog  -> previewedItem.VersionOf.HasValue = TRUE ?
        /// </summary>
        /// <param name="versionManager"></param>
        /// <param name="persister"></param>
        /// <param name="item">The item to be replaced (Master Version)</param>
        /// <param name="versionIndex">Index of the version to be published</param>
        public static void PublishVersion(this IVersionManager versionManager, IPersister persister, ContentItem item, int versionIndex)
        {
            if (!item.IsPage)
            {
                throw new ArgumentException("PublishVersion requires item to be a page");
            }

            if (item.VersionIndex != versionIndex)
            {
                // unpublish/restore
                ContentItem itemToPublish = versionManager.GetVersion(item, versionIndex);
                bool        storeCurrent  = item.State == ContentState.Published || itemToPublish.State == ContentState.Unpublished;
                versionManager.ReplaceVersion(item, itemToPublish, storeCurrent); // returns old version
            }

            Publish(versionManager, persister, item);
        }
        protected void gvHistory_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            ContentItem currentVersion = Selection.SelectedItem;
            int         versionIndex   = Convert.ToInt32(e.CommandArgument);

            if (e.CommandName == "Publish")
            {
                versioner.PublishVersion(persister, currentVersion, versionIndex);
                Refresh(currentVersion, ToolbarArea.Both);
            }
            else if (e.CommandName == "Delete")             // why not delete draft && currentVersion.VersionIndex != versionIndex)
            {
                // delete a version, not the item!
                ContentItem item = versioner.GetVersion(currentVersion, versionIndex);
                if (CanDeleteVersion(item))
                {
                    versioner.DeleteVersion(item);
                    Refresh(currentVersion, ToolbarArea.Both);
                }
            }
        }