using System;
using System.Collections;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.EmailEngine;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
public partial class CMSModules_EmailQueue_Controls_EmailQueue : CMSAdminControl, ICallbackEventHandler
{
#region "Variables"
private Hashtable mParameters;
#endregion
#region "Properties"
///
/// Gets the UniGrid.
///
public UniGrid EmailGrid
{
get
{
return gridElem;
}
}
///
/// Dialog control identifier.
///
private string Identifier
{
get
{
string identifier = hdnIdentifier.Value;
if (string.IsNullOrEmpty(identifier))
{
identifier = Guid.NewGuid().ToString();
hdnIdentifier.Value = identifier;
}
return identifier;
}
}
///
/// Gets or sets the email id.
///
private int EmailID
{
get;
set;
}
///
/// Returns true if the control processing should be stopped.
///
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', 920, 700);
}}", 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();
}
///
/// Returns the IDs of e-mail messages that were selected.
///
/// An array of email IDs
public int[] GetSelectedEmailIDs()
{
int[] emailIds = new int[EmailGrid.SelectedItems.Count];
for (int i = 0; i < EmailGrid.SelectedItems.Count; i++)
{
emailIds[i] = ValidationHelper.GetInteger(EmailGrid.SelectedItems[i], 0);
}
return emailIds;
}
#endregion
#region "Unigrid events"
///
/// Handles Unigrid's OnExternalDataBound event.
///
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":
return TextHelper.LimitLength(HTMLHelper.HTMLEncode(parameter.ToString()), 40);
case "subjecttooltip":
case "resulttooltip":
return parameter.ToString().Replace("\r\n", "
").Replace("\n", "
");
case "resend":
case "delete":
ImageButton imageButton = sender as ImageButton;
if (imageButton != null)
{
DisableActionButtons(imageButton, sourceName, parameter);
}
break;
case "emailto":
return GetEmailRecipients(parameter);
case "edit":
ImageButton viewBtn = (ImageButton)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;
}
///
/// Handles the UniGrid's OnAction event.
///
/// Name of item (button) that threw event
/// ID (value of Primary key) of corresponding data row
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);
}
break;
}
}
///
/// Gets the e-mail priority.
///
/// The parameter
/// E-mail priority
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;
}
}
///
/// Gets the e-mail status.
///
/// The parameter
/// E-mail status
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;
}
}
///
/// Gets the e-mail recipient(s).
///
/// The parameter
/// E-mail recipients
private string GetEmailRecipients(object parameter)
{
DataRowView dr = (DataRowView)parameter;
if (ValidationHelper.GetBoolean(dr["EmailIsMass"], false))
{
return string.Format("{1}",
ValidationHelper.GetInteger(dr["EmailID"], 0),
GetString("emailqueue.queue.massdetails"));
}
else
{
return HTMLHelper.HTMLEncode(ValidationHelper.GetString(dr["EmailTo"], string.Empty));
}
}
///
/// Disables the action buttons.
///
/// The image button
/// Name of the source
/// The parameter
private void DisableActionButtons(ImageButton 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;
imageButton.ImageUrl = sourceName == "resend" ?
GetImageUrl("Design/Controls/UniGrid/Actions/resendemaildisabled.png") :
GetImageUrl("Design/Controls/UniGrid/Actions/deletedisabled.png");
}
}
#endregion
#region "ICallbackEventHandler Members"
///
/// Gets callback result.
///
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;
}
///
/// Raise callback method.
///
public void RaiseCallbackEvent(string eventArgument)
{
EmailID = ValidationHelper.GetInteger(eventArgument, 0);
}
#endregion
}