HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSModules/Content/Controls/Versions.ascx.cs
using System;

using CMS.DataEngine;
using CMS.DocumentEngine;
using CMS.Helpers;
using CMS.SiteProvider;
using CMS.Membership;
using CMS.UIControls;
using CMS.WorkflowEngine;

using TreeNode = CMS.DocumentEngine.TreeNode;
using CMS.EventLog;

public partial class CMSModules_Content_Controls_Versions : CMSUserControl
{
    #region "Variables"

    private WorkflowInfo mWorkflowInfo;

    #endregion


    #region "Properties"

    /// <summary>
    /// Identifier of edited node.
    /// </summary>
    public int NodeID
    {
        get
        {
            return versionsElem.NodeID;
        }
    }


    /// <summary>
    /// Currently edited node.
    /// </summary>
    public TreeNode Node
    {
        get
        {
            return versionsElem.Node;
        }
        set
        {
            versionsElem.Node = value;
        }
    }


    /// <summary>
    /// Tree provider.
    /// </summary>
    public TreeProvider Tree
    {
        get
        {
            return versionsElem.TreeProvider;
        }
    }


    /// <summary>
    /// Version manager.
    /// </summary>
    public VersionManager VersionManager
    {
        get
        {
            return versionsElem.VersionManager;
        }
    }


    /// <summary>
    /// Workflow manager.
    /// </summary>
    public WorkflowManager WorkflowManager
    {
        get
        {
            return versionsElem.WorkflowManager;
        }
    }


    /// <summary>
    /// Returns workflow step information of current node.
    /// </summary>
    public WorkflowInfo WorkflowInfo
    {
        get
        {
            return mWorkflowInfo ?? (mWorkflowInfo = WorkflowManager.GetNodeWorkflow(Node));
        }
        set
        {
            mWorkflowInfo = value;
        }
    }


    /// <summary>
    /// Returns workflow step information of current node.
    /// </summary>
    public WorkflowStepInfo WorkflowStepInfo
    {
        get
        {
            return versionsElem.WorkflowStepInfo;
        }
    }


    /// <summary>
    /// Indicates if control is enabled
    /// </summary>
    public bool Enabled 
    {
        get
        {
            return pnlVersions.Enabled;
        }
        set
        {
            pnlVersions.Enabled = value;
        }
    }

    #endregion


    #region "Page events"

    protected void Page_Load(object sender, EventArgs e)
    {
        // Register the scripts
        ScriptHelper.RegisterLoader(Page);

        // Register the dialog script
        ScriptHelper.RegisterDialogScript(Page);
        CMSPage page = Page as CMSPage;
        if (page != null)
        {
            versionsElem.InfoLabel = page.CurrentMaster.InfoLabel;
            versionsElem.ErrorLabel = page.CurrentMaster.ErrorLabel;
        }
        versionsElem.AfterDestroyHistory += versionsElem_AfterDestroyHistory;
        versionsElem.CombineWithDefaultCulture = false;

        if (Node != null)
        {
            // Check read permissions
            if (MembershipContext.AuthenticatedUser.IsAuthorizedPerDocument(Node, NodePermissionsEnum.Read) == AuthorizationResultEnum.Denied)
            {
                RedirectToAccessDenied(String.Format(GetString("cmsdesk.notauthorizedtoreaddocument"), Node.NodeAliasPath));
            }

            ReloadData();
        }
    }


    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        DocumentManager.DocumentInfo = DocumentManager.GetDocumentInfo(true);

        ScriptHelper.RegisterEditScript(Page, false);
    }

    #endregion


    #region "Methods"
    
    private void ShowInfo(string message, bool persistent)
    {
        if (IsLiveSite)
        {
            ShowInformation(message, persistent: persistent);
        }
        else
        {
            DocumentManager.DocumentInfo = message;
        }
    }


    /// <summary>
    /// Reloads the page data.
    /// </summary>
    private void ReloadData()
    {
        // If no workflow set for node, hide the data  
        if (WorkflowInfo == null)
        {
            headCheckOut.ResourceString = "properties.scopenotset";
            DisableForm();
            pnlVersions.Visible = false;
        }
        else
        {
            if (!WorkflowStepInfo.StepIsDefault && !WorkflowManager.CheckStepPermissions(Node, WorkflowActionEnum.Approve))
            {
                ShowInfo(GetString("EditContent.NotAuthorizedToApprove"), true);
            }
        }

        bool useCheckInCheckOut = false;
        if (WorkflowInfo != null)
        {
            useCheckInCheckOut = WorkflowInfo.UseCheckInCheckOut(SiteContext.CurrentSiteName);
        }

        // Check modify permissions
        if (!versionsElem.CanModify)
        {
            DisableForm();
            plcForm.Visible = false;
            ShowInfo(String.Format(GetString("cmsdesk.notauthorizedtoeditdocument"), Node.NodeAliasPath), true);
        }
        else if (useCheckInCheckOut || (versionsElem.CheckedOutByUserID != 0))
        {
            btnCheckout.Visible = false;
            btnCheckout.Enabled = true;
            btnCheckin.Visible = false;
            btnCheckin.Enabled = true;
            btnUndoCheckout.Visible = false;
            btnUndoCheckout.Enabled = true;
            txtComment.Enabled = true;
            txtVersion.Enabled = true;
            lblComment.Enabled = true;
            lblVersion.Enabled = true;

            // Check whether to check out or in
            if (WorkflowInfo == null)
            {
                btnCheckout.Visible = true;
                headCheckOut.ResourceString ="VersionsProperties.CheckOut";
                DisableForm();
            }
            else if (!Node.IsCheckedOut)
            {
                headCheckOut.ResourceString ="VersionsProperties.CheckOut";
                DisableForm();
                btnCheckout.Visible = true;
                // Do not allow checkout for published or archived step in advanced workflow
                btnCheckout.Enabled = (WorkflowInfo.IsBasic || (!WorkflowStepInfo.StepIsPublished && !WorkflowStepInfo.StepIsArchived));
            }
            else
            {
                // If checked out by current user, allow to check-in
                if (versionsElem.CheckedOutByUserID == MembershipContext.AuthenticatedUser.UserID)
                {
                    btnCheckin.Visible = true;
                    btnUndoCheckout.Visible = true;
                    headCheckOut.ResourceString ="VersionsProperties.CheckIn";
                }
                else
                {
                    // Else checked out by somebody else
                    btnCheckin.Visible = true;
                    btnCheckout.Visible = false;
                    headCheckOut.ResourceString ="VersionsProperties.CheckIn";

                    btnUndoCheckout.Visible = versionsElem.CanCheckIn;
                    btnUndoCheckout.Enabled = versionsElem.CanCheckIn;
                    btnCheckin.Enabled = versionsElem.CanCheckIn;
                    txtComment.Enabled = versionsElem.CanCheckIn;
                    txtVersion.Enabled = versionsElem.CanCheckIn;
                }
            }

            if (!WorkflowManager.CheckStepPermissions(Node, WorkflowActionEnum.Approve))
            {
                DisableForm();
            }
        }
        else
        {
            plcForm.Visible = false;
        }
    }


    /// <summary>
    /// Disables the editing form.
    /// </summary>
    private void DisableForm()
    {
        txtComment.Enabled = false;
        txtVersion.Enabled = false;

        btnCheckin.Enabled = false;
        btnCheckout.Enabled = false;
        btnUndoCheckout.Enabled = false;
    }


    /// <summary>
    /// Add java script for refresh tree view.
    /// </summary>
    private void AddAfterActionScript()
    {
        if (!IsLiveSite & (Node!= null))
        {
            ScriptHelper.RefreshTree(Page, Node.NodeID, Node.NodeParentID);
        }
    }

    #endregion


    #region "Button handling"

    protected void versionsElem_AfterDestroyHistory(object sender, EventArgs e)
    {
        AddAfterActionScript();
        ReloadData();
    }


    protected void btnCheckout_Click(object sender, EventArgs e)
    {
        try
        {
            // Check permissions
            if (!WorkflowManager.CheckStepPermissions(Node, WorkflowActionEnum.Approve))
            {
                DisableForm();
                return;
            }

            VersionManager.EnsureVersion(Node, Node.IsPublished);

            // Check out the document
            VersionManager.CheckOut(Node);

            // Refresh tree if icon checked out should be displayed
            if (DocumentHelper.IsIconUsed(IconType.CheckedOut, SiteContext.CurrentSiteName))
            {
                AddAfterActionScript();
            }

            ReloadData();
            versionsElem.ReloadData();
        }
        catch (WorkflowException)
        {
            ShowError(GetString("EditContent.DocumentCannotCheckOut"));
        }
        catch (Exception ex)
        {
            // Log exception
            EventLogProvider.LogException("Content", "CHECKOUT", ex);
            ShowError(ex.Message);
        }
    }


    protected void btnCheckin_Click(object sender, EventArgs e)
    {
        try
        {
            // Check permissions
            if (!WorkflowManager.CheckStepPermissions(Node, WorkflowActionEnum.Approve) || ((versionsElem.CheckedOutByUserID != MembershipContext.AuthenticatedUser.UserID) && !versionsElem.CanCheckIn))
            {
                DisableForm();
                return;
            }

            // Check in the document
            string version = null;
            if (txtVersion.Text.Trim() != string.Empty)
            {
                version = txtVersion.Text.Trim();
            }
            string comment = null;
            if (txtComment.Text.Trim() != string.Empty)
            {
                comment = txtComment.Text.Trim();
            }

            VersionManager.CheckIn(Node, version, comment);

            txtComment.Text = "";
            txtVersion.Text = "";

            DocumentManager.ClearContentChanged();

            // Refresh tree if icon checked out was displayed
            if (DocumentHelper.IsIconUsed(IconType.CheckedOut, SiteContext.CurrentSiteName))
            {
                AddAfterActionScript();
            }

            ReloadData();
            versionsElem.ReloadData();
        }
        catch (WorkflowException)
        {
            ShowError(GetString("EditContent.DocumentCannotCheckIn"));
        }
        catch (Exception ex)
        {
            // Log exception
            EventLogProvider.LogException("Content", "CHECKIN", ex);
            ShowError(ex.Message);
        }
    }


    protected void btnUndoCheckout_Click(object sender, EventArgs e)
    {
        try
        {
            // Check permissions
            if (!WorkflowManager.CheckStepPermissions(Node, WorkflowActionEnum.Approve))
            {
                DisableForm();
                return;
            }

            // Undo check out
            VersionManager.UndoCheckOut(Node);

            txtComment.Text = "";
            txtVersion.Text = "";

            DocumentManager.ClearContentChanged();

            // Refresh tree if icon checked out was displayed
            if (DocumentHelper.IsIconUsed(IconType.CheckedOut, SiteContext.CurrentSiteName))
            {
                AddAfterActionScript();
            }

            ReloadData();
            versionsElem.ReloadData();
        }
        catch (WorkflowException)
        {
            ShowError(GetString("EditContent.DocumentCannotUndoCheckOut"));
        }
        catch (Exception ex)
        {
            // Log exception
            EventLogProvider.LogException("Content", "UNDOCHECKOUT", ex);
            ShowError(ex.Message);
        }
    }

    #endregion
}