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

using CMS.Base;
using CMS.EmailEngine;
using CMS.ExtendedControls;
using CMS.Helpers;
using CMS.UIControls;

public partial class CMSModules_EmailQueue_Controls_EmailQueue : CMSAdminControl, ICallbackEventHandler
{
    #region "Variables"

    private Hashtable mParameters;

    #endregion


    #region "Properties"

    /// <summary>
    /// Gets the UniGrid.
    /// </summary>
    public UniGrid EmailGrid
    {
        get
        {
            return gridElem;
        }
    }


    /// <summary>
    /// Dialog control identifier.
    /// </summary>
    private string Identifier
    {
        get
        {
            string identifier = hdnIdentifier.Value;
            if (string.IsNullOrEmpty(identifier))
            {
                identifier = Guid.NewGuid().ToString();
                hdnIdentifier.Value = identifier;
            }

            return identifier;
        }
    }


    /// <summary>
    /// Gets or sets the email id.
    /// </summary>
    private int EmailID
    {
        get;
        set;
    }


    /// <summary>
    /// Returns true if the control processing should be stopped.
    /// </summary>
    public override bool StopProcessing
    {
        get
        {
            return base.StopProcessing;
        }
        set
        {
            base.StopProcessing = value;
            gridElem.StopProcessing = value;
        }
    }

    #endregion


    #region "Page events"

    protected void Page_Load(object sender, EventArgs e)
    {
        // Check permissions
        RaiseOnCheckPermissions("READ", this);

        if (StopProcessing)
        {
            return;
        }

        // Register the dialog script
        ScriptHelper.RegisterDialogScript(Page);

        // Register script for modal dialog with mass email recipients
        // and for opening modal dialog displaying email detail
        string script = string.Format(
@"var emailDialogParams_{0} = '';

function DisplayRecipients(emailId) {{
    if ( emailId != 0 ) {{
        modalDialog({1} + '?emailid=' + emailId, 'emailrecipients', 920, 700);
    }}
}}

function OpenEmailDetail(queryParameters) {{
    modalDialog({2} + queryParameters, 'emaildetails', 1000, 730);
}}", ClientID, ScriptHelper.GetString(ResolveUrl("~/CMSModules/EmailQueue/MassEmails_Recipients.aspx")), ScriptHelper.GetString(ResolveUrl("~/CMSModules/EmailQueue/EmailQueue_Details.aspx")));

        ScriptHelper.RegisterClientScriptBlock(this, GetType(), "Email_" + ClientID, script, true);

        gridElem.OnAction += gridElem_OnAction;
        gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;
    }

    #endregion


    #region "Public Methods"

    public override void ReloadData()
    {
        if (!StopProcessing)
        {
            gridElem.ReloadData();
        }
        base.ReloadData();
    }


    /// <summary>
    /// Returns the IDs of e-mail messages that were selected.
    /// </summary>
    /// <returns>An array of email IDs</returns>
    public int[] GetSelectedEmailIDs()
    {
        return EmailGrid.SelectedItems.Select(v => ValidationHelper.GetInteger(v, 0)).ToArray();
    }

    #endregion


    #region "Unigrid events"

    /// <summary>
    /// Handles Unigrid's OnExternalDataBound event.
    /// </summary>
    protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        sourceName = sourceName.ToLowerCSafe();

        switch (sourceName)
        {
            case "priority":
                return GetEmailPriority(parameter);

            case "status":
                return GetEmailStatus(parameter);

            case "subject":
                return TextHelper.LimitLength(HTMLHelper.HTMLEncode(parameter.ToString()), 40);

            case "result":
                string result = parameter.ToString();
                int newLineIndex = result.IndexOfCSafe("\r\n", true);
                return TextHelper.LimitLength(HTMLHelper.HTMLEncode((newLineIndex > 0) ? result.Remove(newLineIndex) : result), 40);

            case "subjecttooltip":
            case "resulttooltip":
                return parameter.ToString().Replace("\r\n", "<br />").Replace("\n", "<br />");

            case "resend":
            case "delete":
                CMSGridActionButton imageButton = sender as CMSGridActionButton;
                if (imageButton != null)
                {
                    DisableActionButtons(imageButton, sourceName, parameter);
                }
                break;

            case "emailto":
                return GetEmailRecipients(parameter);

            case "edit":
                CMSGridActionButton viewBtn = (CMSGridActionButton)sender;
                viewBtn.OnClientClick = string.Format("emailDialogParams_{0} = '{1}';{2};return false;",
                                                      ClientID,
                                                      viewBtn.CommandArgument, Page.ClientScript.GetCallbackEventReference(this, "emailDialogParams_" + ClientID, "OpenEmailDetail", null));

                break;
        }

        return null;
    }


    /// <summary>
    /// Handles the UniGrid's OnAction event.
    /// </summary>
    /// <param name="actionName">Name of item (button) that threw event</param>
    /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param>
    protected void gridElem_OnAction(string actionName, object actionArgument)
    {
        if (StopProcessing)
        {
            return;
        }

        switch (actionName.ToLowerCSafe())
        {
            case "delete":
                // Delete an email
                int deleteEmailId = ValidationHelper.GetInteger(actionArgument, 0);
                EmailHelper.Queue.Delete(deleteEmailId);
                break;

            case "resend":
                // Resend email info object from queue
                int sendEmailId = ValidationHelper.GetInteger(actionArgument, -1);
                if (sendEmailId > 0)
                {
                    EmailHelper.Queue.Send(sendEmailId);
                    ShowInformation(GetString("emailqueue.sendingemails"));
                }
                break;
        }
    }


    /// <summary>
    /// Gets the e-mail priority.
    /// </summary>
    /// <param name="parameter">The parameter</param>
    /// <returns>E-mail priority</returns>
    private string GetEmailPriority(object parameter)
    {
        switch ((EmailPriorityEnum)parameter)
        {
            case EmailPriorityEnum.Low:
                return GetString("emailpriority.low");

            case EmailPriorityEnum.Normal:
                return GetString("emailpriority.normal");

            case EmailPriorityEnum.High:
                return GetString("emailpriority.high");

            default:
                return string.Empty;
        }
    }


    /// <summary>
    /// Gets the e-mail status.
    /// </summary>
    /// <param name="parameter">The parameter</param>
    /// <returns>E-mail status</returns>
    private string GetEmailStatus(object parameter)
    {
        switch ((EmailStatusEnum)parameter)
        {
            case EmailStatusEnum.Created:
                return GetString("emailstatus.created");

            case EmailStatusEnum.Waiting:
                return GetString("emailstatus.waiting");

            case EmailStatusEnum.Sending:
                return GetString("emailstatus.sending");

            default:
                return string.Empty;
        }
    }


    /// <summary>
    /// Gets the e-mail recipient(s).
    /// </summary>
    /// <param name="parameter">The parameter</param>
    /// <returns>E-mail recipients</returns>
    private string GetEmailRecipients(object parameter)
    {
        DataRowView dr = (DataRowView)parameter;

        if (ValidationHelper.GetBoolean(dr["EmailIsMass"], false))
        {
            return string.Format("<a href=\"#\" onclick=\"javascript: DisplayRecipients({0}); return false; \">{1}</a>",
                                 ValidationHelper.GetInteger(dr["EmailID"], 0),
                                 GetString("emailqueue.queue.massdetails"));
        }
        else
        {
            return HTMLHelper.HTMLEncode(ValidationHelper.GetString(dr["EmailTo"], string.Empty));
        }
    }


    /// <summary>
    /// Disables the action buttons.
    /// </summary>
    /// <param name="imageButton">The image button</param>
    /// <param name="sourceName">Name of the source</param>
    /// <param name="parameter">The parameter</param>
    private void DisableActionButtons(CMSGridActionButton imageButton, string sourceName, object parameter)
    {
        int status = ValidationHelper.GetInteger((object)((DataRowView)((GridViewRow)parameter).DataItem).Row["EmailStatus"], -1);
        bool sending = EmailHelper.Queue.SendingInProgess;

        // Disable action buttons (and image) if e-mail status is 'created' or 'sending'
        if (sending || (status == (int)EmailStatusEnum.Created) || (status == (int)EmailStatusEnum.Sending))
        {
            imageButton.OnClientClick = null;
            imageButton.Enabled = false;
        }
    }

    #endregion


    #region "ICallbackEventHandler Members"

    /// <summary>
    /// Gets callback result.
    /// </summary>
    public string GetCallbackResult()
    {
        mParameters = new Hashtable();
        mParameters["where"] = gridElem.WhereCondition;
        mParameters["orderby"] = gridElem.SortDirect;

        WindowHelper.Add(Identifier, mParameters);

        string queryString = "?params=" + Identifier;

        queryString = URLHelper.AddParameterToUrl(queryString, "hash", QueryHelper.GetHash(queryString));
        queryString = URLHelper.AddParameterToUrl(queryString, "emailid", EmailID.ToString());

        return queryString;
    }


    /// <summary>
    /// Raise callback method.
    /// </summary>
    public void RaiseCallbackEvent(string eventArgument)
    {
        EmailID = ValidationHelper.GetInteger(eventArgument, 0);
    }

    #endregion
}