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/Workflows/Controls/UI/Workflow/Emails.ascx.cs
using System;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Linq;

using CMS.ExtendedControls;
using CMS.FormControls;
using CMS.Helpers;
using CMS.Membership;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.WorkflowEngine;
using CMS.Base;
using CMS.EmailEngine;
using CMS.DataEngine;

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

    private WorkflowInfo mWorkflow = null;
    protected string currentUsers = string.Empty;

    #endregion
    
    
    #region "Properties"

    /// <summary>
    /// Workflow ID
    /// </summary>
    public int WorkflowID 
    { 
        get; 
        set; 
    }


    /// <summary>
    /// Workflow
    /// </summary>
    public WorkflowInfo Workflow
    { 
        get
        {
            if (mWorkflow == null)
            {
                mWorkflow = WorkflowInfoProvider.GetWorkflowInfo(WorkflowID);
            }

            return mWorkflow;
        }
    }


    /// <summary>
    /// Indicates if the control should perform the operations.
    /// </summary>
    public override bool StopProcessing
    {
        get
        {
            return base.StopProcessing;
        }
        set
        {
            base.StopProcessing = value;
            usUsers.StopProcessing = value;
            ucApprove.StopProcessing = value;
            ucReadyApproval.StopProcessing = value;
            ucReject.StopProcessing = value;
            ucPublish.StopProcessing = value;
            ucArchive.StopProcessing = value;
        }
    }

    
    /// <summary>
    /// Indicates if the control is used on the live site.
    /// </summary>
    public override bool IsLiveSite
    {
        get 
        { 
             return base.IsLiveSite;
        }
        set 
        { 
            base.IsLiveSite = value;
            usUsers.IsLiveSite = value;
            ucApprove.IsLiveSite = value;
            ucReadyApproval.IsLiveSite = value;
            ucReject.IsLiveSite = value;
            ucPublish.IsLiveSite = value;
            ucArchive.IsLiveSite = value;
        }
    }

    #endregion


    #region "Page events"

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

        // Register save event
        ComponentEvents.RequestEvents.RegisterForEvent(ComponentEvents.SAVE, (s, args) => { SaveData(); });
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        if (WorkflowID <= 0)
        {
            StopProcessing = true;
            return;
        }

        usUsers.ObjectType = UserInfo.OBJECT_TYPE;
        usUsers.WhereCondition = "(UserIsHidden = 0 OR UserIsHidden IS NULL)";

        ucApprove.TemplateType = EmailTemplateTypeEnum.WorkflowEmail;
        ucReadyApproval.TemplateType = EmailTemplateTypeEnum.WorkflowEmail;
        ucReject.TemplateType = EmailTemplateTypeEnum.WorkflowEmail;
        ucPublish.TemplateType = EmailTemplateTypeEnum.WorkflowEmail;
        ucArchive.TemplateType = EmailTemplateTypeEnum.WorkflowEmail;
        ucNotif.TemplateType = EmailTemplateTypeEnum.WorkflowEmail;

        // Get the active users for this site
        var users = WorkflowUserInfoProvider.GetWorkflowUsers("WorkflowID = " + WorkflowID, null, 0, "UserID").Select<WorkflowUserInfo, string>(u => u.UserID.ToString());
        currentUsers = string.Join(";", users.ToArray());

        chkEmails.NotSetChoice.Text = GetString("general.usesitesettings") + " (##DEFAULT##)";
        chkEmails.SetDefaultValue(WorkflowHelper.SendWorkflowEmails(SiteContext.CurrentSiteName));
        chkEmails.AutoPostBack = true;
        chkEmails.CheckedChanged += SendNotification_Changed;

        ucApprove.CurrentSelector.TextBoxSelect.WatermarkText = WorkflowHelper.GetDefaultEmailTemplateName(WorkflowEmailTypeEnum.Approved);
        ucReadyApproval.CurrentSelector.TextBoxSelect.WatermarkText = WorkflowHelper.GetDefaultEmailTemplateName(WorkflowEmailTypeEnum.ReadyForApproval);
        ucReject.CurrentSelector.TextBoxSelect.WatermarkText = WorkflowHelper.GetDefaultEmailTemplateName(WorkflowEmailTypeEnum.Rejected);
        ucArchive.CurrentSelector.TextBoxSelect.WatermarkText = WorkflowHelper.GetDefaultEmailTemplateName(WorkflowEmailTypeEnum.Archived);
        ucPublish.CurrentSelector.TextBoxSelect.WatermarkText = WorkflowHelper.GetDefaultEmailTemplateName(WorkflowEmailTypeEnum.Published);
        ucNotif.CurrentSelector.TextBoxSelect.WatermarkText = WorkflowHelper.GetDefaultEmailTemplateName(WorkflowEmailTypeEnum.Notification);

        chkApprove.CheckedChanged += chkApprove_CheckedChanged;
        chkReadyApproval.CheckedChanged += chkReadyApproval_CheckedChanged;
        chkReject.CheckedChanged += chkReject_CheckedChanged;
        chkArchive.CheckedChanged += chkArchive_CheckedChanged;
        chkPublish.CheckedChanged += chkPublish_CheckedChanged;
        
        if (!RequestHelper.IsPostBack())
        {
            chkEmails.InitFromThreeStateValue(Workflow, "WorkflowSendEmails");
            usUsers.Value = currentUsers;
            ucApprove.Value = Workflow.WorkflowApprovedTemplateName;
            ucReadyApproval.Value = Workflow.WorkflowReadyForApprovalTemplateName;
            ucReject.Value = Workflow.WorkflowRejectedTemplateName;
            ucArchive.Value = Workflow.WorkflowArchivedTemplateName;
            ucPublish.Value = Workflow.WorkflowPublishedTemplateName;
            ucNotif.Value = Workflow.WorkflowNotificationTemplateName;

            ucApprove.Enabled = chkApprove.Checked = Workflow.WorkflowSendApproveEmails;
            ucReadyApproval.Enabled = chkReadyApproval.Checked = Workflow.WorkflowSendReadyForApprovalEmails;
            ucReject.Enabled = chkReject.Checked = Workflow.WorkflowSendRejectEmails;
            ucArchive.Enabled = chkArchive.Checked = Workflow.WorkflowSendArchiveEmails;
            ucPublish.Enabled = chkPublish.Checked = Workflow.WorkflowSendPublishEmails;

            pnlTemplates.Enabled = pnlUsers.Enabled = usUsers.Enabled = ValidationHelper.GetBoolean(chkEmails.GetActualValue(), true);
        }

        bool documents = Workflow.IsDocumentWorkflow;
        plcApprove.Visible = documents;
        plcRest.Visible = documents;
    }


    void chkReadyApproval_CheckedChanged(object sender, EventArgs e)
    {
        ucReadyApproval.Enabled = chkReadyApproval.Checked;
    }


    void chkApprove_CheckedChanged(object sender, EventArgs e)
    {
        ucApprove.Enabled = chkApprove.Checked;
    }


    void chkReject_CheckedChanged(object sender, EventArgs e)
    {
        ucReject.Enabled = chkReject.Checked;
    }


    void chkArchive_CheckedChanged(object sender, EventArgs e)
    {
        ucArchive.Enabled = chkArchive.Checked;
    }


    void chkPublish_CheckedChanged(object sender, EventArgs e)
    {
        ucPublish.Enabled = chkPublish.Checked;
    }


    void SendNotification_Changed(object sender, EventArgs e)
    {
        pnlTemplates.Enabled = pnlUsers.Enabled = usUsers.Enabled = ValidationHelper.GetBoolean(chkEmails.GetActualValue(), true);
    }


    /// <summary>
    /// Saves data
    /// </summary>
    public void SaveData()
    {
        if (Workflow != null)
        {
            chkEmails.SetThreeStateValue(Workflow, "WorkflowSendEmails");

            Workflow.WorkflowApprovedTemplateName = ValidationHelper.GetString(ucApprove.Value, null);
            Workflow.WorkflowReadyForApprovalTemplateName = ValidationHelper.GetString(ucReadyApproval.Value, null);
            Workflow.WorkflowRejectedTemplateName = ValidationHelper.GetString(ucReject.Value, null);
            Workflow.WorkflowPublishedTemplateName = ValidationHelper.GetString(ucPublish.Value, null);
            Workflow.WorkflowArchivedTemplateName = ValidationHelper.GetString(ucArchive.Value, null);
            Workflow.WorkflowNotificationTemplateName = ValidationHelper.GetString(ucNotif.Value, null);

            Workflow.WorkflowSendApproveEmails = chkApprove.Checked;
            Workflow.WorkflowSendReadyForApprovalEmails = chkReadyApproval.Checked;
            Workflow.WorkflowSendRejectEmails = chkReject.Checked;
            Workflow.WorkflowSendArchiveEmails = chkArchive.Checked;
            Workflow.WorkflowSendPublishEmails = chkPublish.Checked;

            // Save workflow info
            WorkflowInfoProvider.SetWorkflowInfo(Workflow);

            // Save selected users
            SaveUsersData();

            ShowChangesSaved();
        }
    }

    #endregion


    #region "Control handling"

    /// <summary>
    /// Saves users data
    /// </summary>
    private void SaveUsersData()
    {
        // Remove old items
        string newValues = ValidationHelper.GetString(usUsers.Value, null);
        string items = DataHelper.GetNewItemsInList(newValues, currentUsers);
        if (!String.IsNullOrEmpty(items))
        {
            string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            if (newItems != null)
            {
                // Add all new items to site
                foreach (string item in newItems)
                {
                    int userId = ValidationHelper.GetInteger(item, 0);
                    // If user is authorized, remove it
                    WorkflowUserInfo wsu = WorkflowUserInfoProvider.GetWorkflowUserInfo(WorkflowID, userId);
                    if (wsu != null)
                    {
                        WorkflowUserInfoProvider.DeleteWorkflowUserInfo(wsu);
                    }
                }
            }
        }

        // Add new items
        items = DataHelper.GetNewItemsInList(currentUsers, newValues);
        if (!String.IsNullOrEmpty(items))
        {
            string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            if (newItems != null)
            {
                // Add all new items to site
                foreach (string item in newItems)
                {
                    int userId = ValidationHelper.GetInteger(item, 0);

                    // If user is not authorized, authorize it
                    if (WorkflowUserInfoProvider.GetWorkflowUserInfo(WorkflowID, userId) == null)
                    {
                        WorkflowUserInfoProvider.AddUserToWorkflow(WorkflowID, userId);
                    }
                }
            }
        }
    }

    #endregion
}