using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.EmailEngine; using CMS.GlobalHelper; using CMS.Newsletter; using CMS.SettingsProvider; using CMS.UIControls; using CMS.ExtendedControls.ActionsConfig; using CMS.ExtendedControls; [Title("CMSModules/CMS_EmailQueue/module.png", "newsletters.emailqueue", "CMS_Newsletter_EmailQueue", HelpName = "helpTopic")] [Security(Resource = "CMS.Newsletter", UIElements = "EmailQueue")] public partial class CMSModules_Newsletters_Tools_EmailQueue_NewsletterEmailQueue : CMSNewsletterPage { #region "Private variables" private int siteId; private bool emailsEnabled = false; #endregion #region "Page events" protected void Page_Load(object sender, EventArgs e) { siteId = CMSContext.CurrentSiteID; emailsEnabled = EmailHelper.Settings.EmailsEnabled(CMSContext.CurrentSiteName); emailsEnabled |= SettingsKeyProvider.GetBoolValue(CMSContext.CurrentSiteName + ".CMSGenerateNewsletters"); // Display disabled information if (!emailsEnabled) { ShowWarning(GetString("NewsletterEmailQueue_List.EmailsDisabled"), null, null); } // Initialize unigrid gridElem.OnAction += new OnActionEventHandler(gridElem_OnAction); gridElem.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridElem_OnExternalDataBound); gridElem.WhereCondition = "EmailSiteID = @SiteID"; QueryDataParameters parameters = new QueryDataParameters(); parameters.Add("@SiteID", siteId); gridElem.QueryParameters = parameters; InitializeActionMenu(); } #endregion #region "Unigrid events" /// /// Handles Unigrid's OnExternalDataBound event. /// protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "subject": return TextHelper.LimitLength(HTMLHelper.HTMLEncode(parameter.ToString()), 50); case "result": return TextHelper.LimitLength(HTMLHelper.HTMLEncode(parameter.ToString()), 50); case "subjecttooltip": case "resulttooltip": return parameter.ToString().Replace("\r\n", "
").Replace("\n", "
"); } return null; } /// /// Handles the UniGrid's OnAction event. /// /// Name of item (button) that throws event /// ID (value of Primary key) of corresponding data row protected void gridElem_OnAction(string actionName, object actionArgument) { if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "configure")) { RedirectToCMSDeskAccessDenied("cms.newsletter", "configure"); } switch (actionName.ToLowerCSafe()) { case "resend": // Resend an issue from the queue EmailQueueManager.ResendEmail(Convert.ToInt32(actionArgument)); break; case "delete": // Delete EmailQueueItem object from database EmailQueueManager.DeleteEmailQueueItem(Convert.ToInt32(actionArgument)); break; } } #endregion #region "Private methods" /// /// Initializes action menu. /// protected void InitializeActionMenu() { HeaderActions actions = CurrentMaster.HeaderActions; actions.ActionsList.Clear(); // Resend all failed actions.ActionsList.Add(new HeaderAction() { Text = GetString("NewsletterEmailQueue_List.ResendAllFailed"), OnClientClick = "if (!confirm(" + ScriptHelper.GetString(GetString("NewsletterEmailQueue_List.ResendAllFailedConfirmationMessage")) + ")) return false;", CommandName = "resendallfailed" }); // Resend all actions.ActionsList.Add(new HeaderAction() { Text = GetString("NewsletterEmailQueue_List.ResendAll"), OnClientClick = "if (!confirm(" + ScriptHelper.GetString(GetString("EmailQueue.ResendAllConfirmation")) + ")) return false;", CommandName = "resendall" }); // Delete all failed actions.ActionsList.Add(new HeaderAction() { Text = GetString("NewsletterEmailQueue_List.DeleteAllFailed"), OnClientClick = "if (!confirm(" + ScriptHelper.GetString(GetString("NewsletterEmailQueue_List.DeleteAllFailedConfirmationMessage")) + ")) return false;", CommandName = "deleteallfailed" }); // Delete all actions.ActionsList.Add(new HeaderAction() { Text = GetString("NewsletterEmailQueue_List.DeleteAll"), OnClientClick = "if (!confirm(" + ScriptHelper.GetString(GetString("NewsletterEmailQueue_List.DeleteAllConfirmationMessage")) + ")) return false;", CommandName = "deleteall" }); // Refresh actions.ActionsList.Add(new HeaderAction() { Text = GetString("general.refresh"), ImageUrl = GetImageUrl("CMSModules/CMS_EmailQueue/refresh.png"), CommandName = "refresh" }); actions.ActionPerformed += HeaderActions_ActionPerformed; actions.PreRender += HeaderActions_PreRender; } #endregion #region "Header action events" protected void HeaderActions_PreRender(object sender, EventArgs e) { bool enabled = (gridElem.GridView.Rows.Count > 0); bool resending = enabled && (ThreadEmailSender.SendingThreads <= 0) && emailsEnabled; HeaderActions actions = CurrentMaster.HeaderActions; if (actions.ActionsList.Count > 4) { // Resend all failed actions.ActionsList[0].ImageUrl = resending ? GetImageUrl("CMSModules/CMS_EmailQueue/resendallfailed.png") : GetImageUrl("CMSModules/CMS_EmailQueue/resendallfailed_disabled.png"); actions.ActionsList[0].Enabled = resending; // Resend all actions.ActionsList[1].ImageUrl = resending ? GetImageUrl("CMSModules/CMS_EmailQueue/resendselected.png") : GetImageUrl("CMSModules/CMS_EmailQueue/resendselected_disabled.png"); actions.ActionsList[1].Enabled = resending; // Delete all failed actions.ActionsList[2].ImageUrl = enabled ? GetImageUrl("CMSModules/CMS_EmailQueue/resendall.png") : GetImageUrl("CMSModules/CMS_EmailQueue/resendall_disabled.png"); actions.ActionsList[2].Enabled = enabled; // Delete all actions.ActionsList[3].ImageUrl = enabled ? GetImageUrl("CMSModules/CMS_EmailQueue/deleteallfailed.png") : GetImageUrl("CMSModules/CMS_EmailQueue/deleteallfailed_disabled.png"); actions.ActionsList[3].Enabled = enabled; } } protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e) { // Check user permission (for complex operations only) if (e.CommandName != "refresh") { if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "configure")) { RedirectToCMSDeskAccessDenied("cms.newsletter", "configure"); } } switch (e.CommandName.ToLowerCSafe()) { case "resendall": EmailQueueManager.SendAllEmails(true, true, 0); gridElem.ReloadData(); lblText.Text = "" + GetString("EmailQueue.SendingEmails") + ""; break; case "resendallfailed": EmailQueueManager.SendAllEmails(true, false, 0); gridElem.ReloadData(); lblText.Text = "" + GetString("EmailQueue.SendingEmails") + ""; break; case "deleteall": EmailQueueManager.DeleteAllEmailQueueItems(siteId); gridElem.ReloadData(); break; case "deleteallfailed": EmailQueueManager.DeleteFailedEmailQueueItems(siteId); gridElem.ReloadData(); break; case "refresh": gridElem.ReloadData(); break; } } #endregion }