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/wwwroot/CMSModules/Automation/Controls/Process/List.ascx.cs
using System;
using System.Web.UI.WebControls;

using CMS.Automation;
using CMS.Core;
using CMS.Helpers;
using CMS.Base;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.WorkflowEngine;
using CMS.DataEngine;
using CMS.ExtendedControls;

public partial class CMSModules_Automation_Controls_Process_List : CMSUserControl
{
    #region "Private variables"

    // Contact site id
    private int contactSiteId;

    #endregion


    #region "Properties"

    /// <summary>
    /// Type of object of states in list.
    /// </summary>
    public string ObjectType
    {
        get;
        set;
    }


    /// <summary>
    /// ID of object of states in list.
    /// </summary>
    public int ObjectID
    {
        get;
        set;
    }


    /// <summary>
    /// Item edit URL
    /// </summary>
    public string EditActionUrl
    {
        get;
        set;
    }


    /// <summary>
    /// Uni grid
    /// </summary>
    public UniGrid UniGrid
    {
        get
        {
            return gridState;
        }
    }


    #endregion


    #region "Page events"

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        gridState.OnExternalDataBound += gridState_OnExternalDataBound;
        gridState.OnAction += gridState_OnAction;
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        gridState.WhereCondition = new WhereCondition()
            .WhereEquals("StateObjectID", ObjectID)
            .WhereEquals("StateObjectType", ObjectType)
            .ToString(true);
        gridState.EditActionUrl = EditActionUrl;

        BaseInfo contact = BaseAbstractInfoProvider.GetInfoById(PredefinedObjectType.CONTACT, ObjectID);
        if (contact != null)
        {
            contactSiteId = contact.Generalized.ObjectSiteID;
        }
    }

    #endregion


    #region "Grid events"

    private void gridState_OnAction(string actionName, object actionArgument)
    {
        switch (actionName.ToLowerCSafe())
        {
            case "delete":
                int stateId = ValidationHelper.GetInteger(actionArgument, 0);

                var obj = BaseAbstractInfoProvider.GetInfoById(ObjectType, ObjectID);
                var state = AutomationStateInfoProvider.GetAutomationStateInfo(stateId);

                if (!CurrentUser.IsAuthorizedPerResource(ModuleName.ONLINEMARKETING, "RemoveProcess", SiteInfoProvider.GetSiteName(state.StateSiteID)))
                {
                    RedirectToAccessDenied(ModuleName.ONLINEMARKETING, "RemoveProcess");
                }

                AutomationManager manager = AutomationManager.GetInstance(CurrentUser);
                manager.RemoveProcess(obj, state);

                break;
        }
    }


    /// <summary>
    /// External history binding.
    /// </summary>
    protected object gridState_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        switch (sourceName.ToLowerCSafe())
        {
            case "stepname":
                return HTMLHelper.HTMLEncode(GetStep(parameter).StepDisplayName);

            case "processname":
                return HTMLHelper.HTMLEncode(GetProcess(parameter).WorkflowDisplayName);

            case "status":
                return AutomationHelper.GetProcessStatus((ProcessStatusEnum)ValidationHelper.GetInteger(parameter, 0));

            case "delete":
                CMSGridActionButton btn = (CMSGridActionButton)sender;           
                var confirmationMessage = string.Format(ResHelper.GetString("autoMenu.RemoveStateConfirmation"), HTMLHelper.HTMLEncode(TypeHelper.GetNiceObjectTypeName(PredefinedObjectType.CONTACT).ToLowerCSafe()));
                var confirmationScript = "if(!confirm(" + ScriptHelper.GetString(confirmationMessage) + ")) { return false; } ";
                
                // In OnClientClick is JS code to call Unigrid's OnAction, we need to add this code to the end of new JS code to preserve it    
                btn.OnClientClick = confirmationScript + btn.OnClientClick;
               
                if (!WorkflowStepInfoProvider.CanUserRemoveAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(contactSiteId)))
                {
                    btn.Enabled = false;
                }
                break;
        }

        return parameter;
    }

    #endregion


    #region "Methods"

    /// <summary>
    /// Returns step info.
    /// </summary>
    /// <param name="id">Step ID</param>
    /// <returns>Step info object</returns>
    private WorkflowStepInfo GetStep(object id)
    {
        int stepId = ValidationHelper.GetInteger(id, 0);
        return WorkflowStepInfoProvider.GetWorkflowStepInfo(stepId);
    }


    /// <summary>
    /// Returns process info.
    /// </summary>
    /// <param name="id">Process ID</param>
    /// <returns>Workflow info object</returns>
    private WorkflowInfo GetProcess(object id)
    {
        int workflowID = ValidationHelper.GetInteger(id, 0);
        return WorkflowInfoProvider.GetWorkflowInfo(workflowID);
    }

    #endregion
}