Beispiel #1
0
        public void GetIssueType_Existing_Labels_FalsePositive()
        {
            var falsePositive = new Issue {
                Labels = new[] { new Label {
                                     Name = "Type: False Positive"
                                 } }
            };

            IssueHelper.GetIssueType(falsePositive).Should().Be(IssueType.FalsePositive);
        }
Beispiel #2
0
        public void GetIssueType_Case_Insensitive()
        {
            var task = new Issue {
                Labels = new[] { new Label {
                                     Name = "type: task"
                                 } }
            };

            IssueHelper.GetIssueType(task).Should().Be(IssueType.Hidden);
        }
Beispiel #3
0
        public void GetIssueType_Existing_Labels_Performance()
        {
            var falseNegative = new Issue {
                Labels = new[] { new Label {
                                     Name = "Type: Performance"
                                 } }
            };

            IssueHelper.GetIssueType(falseNegative).Should().Be(IssueType.Performance);
        }
Beispiel #4
0
        public void GetIssueType_Existing_Labels_BugFix()
        {
            var bug = new Issue {
                Labels = new[] { new Label {
                                     Name = "Type: Bug"
                                 } }
            };

            IssueHelper.GetIssueType(bug).Should().Be(IssueType.BugFix);
        }
Beispiel #5
0
        public void GetIssueType_Existing_Labels_NewRule()
        {
            var newFeature = new Issue {
                Labels = new[] { new Label {
                                     Name = "Type: New Feature"
                                 } }
            };

            IssueHelper.GetIssueType(newFeature).Should().Be(IssueType.NewRule);
        }
Beispiel #6
0
        public void GetIssueType_Existing_Labels_Improvement()
        {
            var improvement = new Issue {
                Labels = new[] { new Label {
                                     Name = "Type: Improvement"
                                 } }
            };

            IssueHelper.GetIssueType(improvement).Should().Be(IssueType.Improvement);
        }
Beispiel #7
0
        public void GetIssueType_Existing_Labels_Task()
        {
            var task = new Issue {
                Labels = new[] { new Label {
                                     Name = "Type: Task"
                                 } }
            };

            IssueHelper.GetIssueType(task).Should().Be(IssueType.Hidden);
        }
Beispiel #8
0
        public override void CheckTask()
        {
            if (!enableCheck)
            {
                return;
            }
            // +-----------------------------------------------------+
            // |                    |  Platform      | Major | Minor |
            // +-----------------------------------------------------+
            // | Windows 95         |  Win32Windows  |   4   |   0   |
            // | Windows 98         |  Win32Windows  |   4   |  10   |
            // | Windows Me         |  Win32Windows  |   4   |  90   |
            // | Windows NT 4.0     |  Win32NT       |   4   |   0   |
            // | Windows 2000       |  Win32NT       |   5   |   0   |
            // | Windows XP         |  Win32NT       |   5   |   1   |
            // | Windows 2003       |  Win32NT       |   5   |   2   |
            // | Windows Vista      |  Win32NT       |   6   |   0   |
            // | Windows 2008       |  Win32NT       |   6   |   0   |
            // | Windows 7          |  Win32NT       |   6   |   1   |
            // | Windows 2008 R2    |  Win32NT       |   6   |   1   |
            // | Windows 8          |  Win32NT       |   6   |   2   |
            // | Windows 8.1        |  Win32NT       |   6   |   3   |
            // | Windows 10         |  Win32NT       |  10   |   0   |
            // +-----------------------------------------------------+
            //
            //
            // Issue applies to windows 7 only.
            var version = IssueHelper.GetRealOSVersion();

            if (version.Major != 6 || version.Minor != 1)
            {
                SetSeverity(IssueSeverity.None, 0, program);
                enableCheck = false;
                return;
            }
            // KB3033929 supplies wintrust.dll 6.1.7601.22948, we need this version or later.
            var fileVersion = IssueHelper.GetFileVersion(Environment.SpecialFolder.System, "wintrust.dll");
            var installed   = fileVersion >= new Version(6, 1, 7601, 22948);

            if (!installed)
            {
                var bits = Environment.Is64BitOperatingSystem
                    ? "64-bit" : "32-bit";
                SetSeverity(
                    IssueSeverity.Critical, 1,
                    string.Format("Old WinTrust {0}. Install {1} for Windows 7 {2}", fileVersion, program, bits)
                    );
                return;
            }
            SetSeverity(IssueSeverity.None);
            enableCheck = false;
        }
Beispiel #9
0
    private void InitTestGroupSlider(IssueInfo parentIssue, ABTestInfo abTest, bool forceReload)
    {
        var variants = IssueHelper.GetIssueVariants(parentIssue, null);
        ucGroupSlider.Variants = variants;

        ucGroupSlider.NumberOfSubscribers = GetNumberOfSubscribers(parentIssue, variants);

        if (forceReload || !ucGroupSlider.Enabled)
        {
            ucGroupSlider.CurrentSize = abTest?.TestSizePercentage ?? DEFAULT_TEST_GROUP_SIZE_PERCENTAGE;
        }
        ucGroupSlider.ReloadData(forceReload);
    }
    private string GetUniqueClicksRate(DataRowView rowView)
    {
        var issueSentEmails = DataHelper.GetIntValue(rowView.Row, "IssueSentEmails");
        if (issueSentEmails == 0)
        {
            return string.Empty;
        }

        var issueId = ValidationHelper.GetInteger(DataHelper.GetDataRowViewValue(rowView, "IssueID"), 0);
        var clicks = IssueHelper.GetIssueTotalUniqueClicks(issueId);
        var delivered = GetDelivered(rowView.Row);

        return FormatRate(clicks, delivered);
    }
Beispiel #11
0
        public override void CheckTask()
        {
            var installed = IssueHelper.IsInstalled(program1Rx, false);

            if (!installed)
            {
                SetSeverity(
                    IssueSeverity.Critical, 1,
                    string.Format("Install " + program1)
                    );
                return;
            }
            SetSeverity(IssueSeverity.None);
        }
    /// <summary>
    /// Creates and sends unsubscription e-mail.
    /// </summary>
    /// <param name="subscriber">Subscriber object</param>
    /// <param name="news">Newsletter object</param>
    /// <param name="subscription">Subscription object</param>
    /// <param name="siteName">Site name</param>
    protected void SendUnsubscriptionRequest(SubscriberInfo subscriber, NewsletterInfo news, SubscriberNewsletterInfo subscription, string siteName)
    {
        // Get global e-mail template with unsubscription request
        EmailTemplateInfo et = EmailTemplateProvider.GetEmailTemplate("newsletter.unsubscriptionrequest", siteName);

        if (et != null)
        {
            // Get subscriber member
            SortedDictionary <int, SubscriberInfo> subscribers = SubscriberInfoProvider.GetSubscribers(subscriber, 1, 0);
            foreach (KeyValuePair <int, SubscriberInfo> item in subscribers)
            {
                // Get 1st subscriber's member
                SubscriberInfo sb = item.Value;

                string body      = et.TemplateText;
                string plainBody = et.TemplatePlainText;

                // Resolve newsletter macros (first name, last name etc.)
                IssueHelper ih = new IssueHelper();
                if (ih.LoadDynamicFields(sb, news, subscription, null, false, siteName, null, null, null))
                {
                    body      = ih.ResolveDynamicFieldMacros(body);
                    plainBody = ih.ResolveDynamicFieldMacros(plainBody);
                }

                // Create e-mail
                EmailMessage msg = new EmailMessage();
                msg.EmailFormat   = EmailFormatEnum.Default;
                msg.From          = EmailHelper.GetSender(et, news.NewsletterSenderEmail);
                msg.Recipients    = sb.SubscriberEmail;
                msg.BccRecipients = et.TemplateBcc;
                msg.CcRecipients  = et.TemplateCc;
                msg.Subject       = ResHelper.LocalizeString(et.TemplateSubject);
                msg.Body          = URLHelper.MakeLinksAbsolute(body);
                msg.PlainTextBody = URLHelper.MakeLinksAbsolute(plainBody);

                // Add attachments and send e-mail
                MetaFileInfoProvider.ResolveMetaFileImages(msg, et.TemplateID, EmailObjectType.EMAILTEMPLATE, MetaFileInfoProvider.OBJECT_CATEGORY_TEMPLATE);

                EmailSender.SendEmail(siteName, msg);
            }
        }
        else
        {
            // Log missing template
            EventLogProvider ev = new EventLogProvider();
            ev.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "UnsubscriptionRequest", "Unsubscription request e-mail template is missing.");
        }
    }
Beispiel #13
0
        public void GetIssueType_Multiple_Labels()
        {
            var task = new Issue
            {
                Labels = new[]
                {
                    new Label {
                        Name = "Type: False Positive"
                    },
                    new Label {
                        Name = "Type: Bug"
                    }
                }
            };

            // The first label determines the type
            IssueHelper.GetIssueType(task).Should().Be(IssueType.FalsePositive);
        }
    /// <summary>
    /// Gets a clickable click links counter based on the values from datasource.
    /// </summary>
    /// <param name="rowView">A <see cref="DataRowView" /> that represents one row from UniGrid's source</param>
    private string GetUniqueClicks(DataRowView rowView)
    {
        var issueSentEmails = DataHelper.GetIntValue(rowView.Row, "IssueSentEmails");
        if (issueSentEmails == 0)
        {
            return string.Empty;
        }

        var issueId = ValidationHelper.GetInteger(DataHelper.GetDataRowViewValue(rowView, "IssueID"), 0);
        var clicks = IssueHelper.GetIssueTotalUniqueClicks(issueId);

        if (clicks <= 0)
        {
            return ZERO;
        }

        var url = ApplicationUrlHelper.GetElementDialogUrl(ModuleName.NEWSLETTER, "Newsletter.Issue.Reports.Clicks", issueId);
        return $@"<a href=""#"" onclick=""modalDialog('{url}', 'NewsletterTrackedLinks', '1000px', '700px'); return false;"">{clicks}</a>";
    }
    /// <summary>
    /// Initializes controls
    /// </summary>
    protected void InitControls(bool forceReload)
    {
        grdElem.GridOptions.ShowSelection = ShowSelectionColumn;
        pMOut.Visible = EnableMailoutTimeSetting;

        if (EnableMailoutTimeSetting)
        {
            if (forceReload || (drpAllSelected.Items.Count <= 0))
            {
                drpAllSelected.Items.Clear();
                if (ShowSelectionColumn)
                {
                    drpAllSelected.Items.Add(new ListItem(GetString("general.selectall"), DDLIST_SETALL));
                    drpAllSelected.Items.Add(new ListItem(GetString("newsletterissue_send.selected"), DDLIST_SETSELECTED));
                }

                List <IssueABVariantItem> items = IssueHelper.GetIssueVariants(ParentIssueID, "IssueMailoutTime IS NULL");
                if ((items != null) && (items.Count > 0))
                {
                    foreach (IssueABVariantItem item in items)
                    {
                        drpAllSelected.Items.Add(new ListItem(item.IssueVariantName, item.IssueID.ToString()));
                    }
                }
            }

            // Hide entire panel if no variant available
            if (drpAllSelected.Items.Count <= 0)
            {
                pMOut.Visible = false;
            }
        }

        if (UseGroupingText)
        {
            pnlMailout.GroupingText = GetString("newsletterissue_send.schedulemailout");
        }
        else
        {
            pnlMailout.GroupingText = GetString("newsletterissue_send.testresults");
        }
    }
Beispiel #16
0
        public override void CheckTask()
        {
            // This issue check applies only for 64-bit OS.
            if (!Environment.Is64BitOperatingSystem)
            {
                SetSeverity(IssueSeverity.None);
                return;
            }
            var installed = IssueHelper.IsInstalled(program1Rx, false);

            if (!installed)
            {
                SetSeverity(
                    IssueSeverity.Critical, 1,
                    string.Format("Install " + program1)
                    );
                return;
            }
            SetSeverity(IssueSeverity.None);
        }
    /// <summary>
    /// Creates and sends unsubscription e-mail.
    /// </summary>
    /// <param name="subscriber">Subscriber to be unsubscribed</param>
    /// <param name="news">Newsletter object</param>
    /// <param name="siteName">Name of site that subscriber is being unsubscribed from</param>
    protected void SendUnsubscriptionRequest(SubscriberInfo subscriber, NewsletterInfo news, string siteName)
    {
        var emailTemplate = EmailTemplateProvider.GetEmailTemplate("newsletter.unsubscriptionrequest", siteName);

        if (emailTemplate == null)
        {
            EventLogProvider.LogEvent(EventType.ERROR, "UnsubscriptionRequest", "Unsubscription request e-mail template is missing.");
            return;
        }

        string body      = emailTemplate.TemplateText;
        string plainBody = emailTemplate.TemplatePlainText;

        // Resolve newsletter macros (first name, last name etc.)
        var issueHelper = new IssueHelper();

        if (issueHelper.LoadDynamicFields(subscriber, news, null, null, false, siteName, null, null, null))
        {
            body      = issueHelper.ResolveDynamicFieldMacros(body, news);
            plainBody = issueHelper.ResolveDynamicFieldMacros(plainBody, news);
        }

        // Create e-mail
        var subscriberEmailRetriever = Service <ISubscriberEmailRetriever> .Entry();

        var emailMessage = new EmailMessage
        {
            EmailFormat   = EmailFormatEnum.Default,
            From          = EmailHelper.GetSender(emailTemplate, news.NewsletterSenderEmail),
            Recipients    = subscriberEmailRetriever.GetSubscriberEmail(subscriber.SubscriberID),
            BccRecipients = emailTemplate.TemplateBcc,
            CcRecipients  = emailTemplate.TemplateCc,
            Subject       = ResHelper.LocalizeString(emailTemplate.TemplateSubject),
            Body          = URLHelper.MakeLinksAbsolute(body),
            PlainTextBody = URLHelper.MakeLinksAbsolute(plainBody)
        };

        // Add attachments and send e-mail
        EmailHelper.ResolveMetaFileImages(emailMessage, emailTemplate.TemplateID, EmailTemplateInfo.OBJECT_TYPE, ObjectAttachmentsCategories.TEMPLATE);
        EmailSender.SendEmail(siteName, emailMessage);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        var issue = (IssueInfo)UIContext.EditedObject;

        if ((issue == null) || (issue.IssueSiteID != SiteContext.CurrentSiteID))
        {
            return;
        }

        var newsletter  = NewsletterInfoProvider.GetNewsletterInfo(issue.IssueNewsletterID);
        var issueHelper = new IssueHelper();

        var script = newsletter.NewsletterType == EmailCommunicationTypeEnum.Newsletter ? GetPreviewScriptForNewsletter(issue, newsletter, issueHelper) : GetPreviewScriptForCampaign(issue, newsletter, issueHelper);

        ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "PreviewData", ScriptHelper.GetScript(script));

        if (!RequestHelper.IsPostBack())
        {
            ScriptHelper.RegisterStartupScript(this, typeof(string), "LoadPreview" + ClientID, ScriptHelper.GetScript("pageLoad();"));
        }
    }
    private void InitHeaderActions()
    {
        var hdrActions = CurrentMaster.HeaderActions;

        hdrActions.ActionsList.Clear();

        if (IssueEditingEnabled && !IssueHelper.IsWinnerSelected(Issue))
        {
            hdrActions.ActionsList.Add(new SaveAction());
        }

        if (IssueEditingEnabled && CanIssueBeSent)
        {
            var variants = GetIssueVariants(Issue);

            var variantNamesWithUnfilledRequiredWidgetProperties = GetVariantNamesWithUnfilledRequiredWidgetProperties(variants);
            var variantNamesWithMissingWidgetDefinition          = GetVariantNamesWithMissingWidgetDefinition(variants);

            var isValidDefinition = !variantNamesWithUnfilledRequiredWidgetProperties.Any() &&
                                    !variantNamesWithMissingWidgetDefinition.Any();

            AddSendHeaderAction(hdrActions, isValidDefinition, ButtonStyle.Default);

            if (!isValidDefinition)
            {
                var invalidVariantNames = variantNamesWithUnfilledRequiredWidgetProperties.Union(variantNamesWithMissingWidgetDefinition);

                MessagesPlaceHolder.AddError(string.Format(GetString("newsletter.issue.send.variantwidgeterror"), string.Join(", ", invalidVariantNames)));
            }
        }

        if (IssueEditingEnabled)
        {
            hdrActions.ActionPerformed += hdrActions_OnActionPerformed;
        }

        hdrActions.ReloadData();

        CurrentMaster.DisplayActionsPanel = true;
    }
Beispiel #20
0
    /// <summary>
    /// Initializes the variants drop-down list or hides it if the issue has no variants.
    /// </summary>
    private void InitVariantDropDownList()
    {
        if (!NewsletterHelper.IsABTestingAvailable())
        {
            return;
        }

        var variants = IssueHelper.GetIssueVariants(Issue)
                       .Select(v => new ListItem(v.IssueVariantName, v.IssueID.ToString())).ToList();

        if (variants.Any())
        {
            foreach (var variant in variants)
            {
                drpVariantsSelector.Items.Add(variant);
            }

            drpVariantsSelector.SelectedValue = Issue.IssueID.ToString();
            pnlTabs.AddCssClass("with-variants");
            plcVariantSelection.Visible = true;
        }
    }
    /// <summary>
    /// When dialog's OK button for new variant action is clicked.
    /// </summary>
    protected void btnSaveDialog_Click(object sender, EventArgs e)
    {
        if (String.IsNullOrWhiteSpace(txtVariantName.Text))
        {
            errorMessage.Text = GetString("newsletter.variantdisplaynamemissing");
            return;
        }

        try
        {
            var variantName = txtVariantName.Text.Truncate(VARIANT_NAME_SIZE);
            var newVariant  = EmailABTestService.CreateVariant(variantName, Issue.IssueID);

            // If this is the first variant created (2 variants in total), make full refresh of the email builder in order to update related menu tabs
            var builderEventArgs = IssueHelper.GetIssueVariants(Issue).Count == 2 ? new EmailBuilderEventArgs() : new EmailBuilderEventArgs(Issue.IssueNewsletterID, newVariant.IssueID, 2);
            OnSave(builderEventArgs);
        }
        catch (InvalidOperationException exception)
        {
            Service.Resolve <IEventLogService>().LogException("Newsletter", "ADDVARIANT", exception);
            errorMessage.Text = GetString("emailbuilder.generalerror");
        }
    }
    /// <summary>
    /// Deletes an issue specified by its ID (if authorized).
    /// </summary>
    /// <param name="issueId">Issue's ID</param>
    private static void DeleteIssue(int issueId)
    {
        // Delete issue from database (if authorized)
        if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "authorissues"))
        {
            RedirectToCMSDeskAccessDenied("cms.newsletter", "authorissues");
        }


        IssueInfo issue = IssueInfoProvider.GetIssueInfo(issueId);

        if (issue != null)
        {
            // Delete variant issues if any
            if (issue.IssueIsABTest && (issue.IssueVariantOfIssueID == 0))
            {
                // Get all variants (children) and delete their mailout tasks
                List <IssueABVariantItem> variants = IssueHelper.GetIssueVariants(issue, null);
                IssueInfo issueVar = null;
                if ((variants != null) && (variants.Count > 0))
                {
                    foreach (IssueABVariantItem variant in variants)
                    {
                        issueVar = IssueInfoProvider.GetIssueInfo(variant.IssueID);
                        if (issueVar != null)
                        {
                            IssueInfoProvider.DeleteMailoutTask(issueVar.IssueGUID, issueVar.IssueSiteID);
                        }
                    }
                }
            }
            // Delete issue
            IssueInfoProvider.DeleteMailoutTask(issue.IssueGUID, issue.IssueSiteID);
            IssueInfoProvider.DeleteIssueInfo(issue);
        }
    }
    /// <summary>
    /// Initializes selector with variants of the main issue that is specified by its ID.
    /// </summary>
    /// <param name="issueId">Issue ID</param>
    protected void InitVariantSelector(int issueId)
    {
        if (drpVariants.Items.Count == 0)
        {
            if (AllowSelectAll)
            {
                // Add (all) option
                drpVariants.Items.Add(new ListItem(GetString("general.selectall"), "-1"));
            }

            // Get A/B test variants
            var variants = IssueHelper.GetIssueVariants(issueId);
            if (variants?.Count > 0)
            {
                // Initialize selector
                foreach (var variant in variants)
                {
                    if (variant.IsWinner)
                    {
                        WinnerIssueID = variant.IssueID;
                        drpVariants.Items.Add(new ListItem(variant.IssueVariantName + " " + GetString("newsletterabtest.winner"), mainIssueID.ToString()));
                    }
                    else
                    {
                        drpVariants.Items.Add(new ListItem(variant.IssueVariantName, variant.IssueID.ToString()));
                    }
                }
            }

            if (!RequestHelper.IsPostBack() && drpVariants.Items.FindByValue(issueId.ToString()) != null)
            {
                // Preselect main issue
                drpVariants.SelectedValue = issueId.ToString();
            }
        }
    }
    /// <summary>
    /// Creates and sends unsubscription e-mail.
    /// </summary>
    /// <param name="subscriber">Subscriber object</param>
    /// <param name="news">Newsletter object</param>
    /// <param name="subscription">Subscription object</param>
    /// <param name="siteName">Site name</param>
    protected void SendUnsubscriptionRequest(SubscriberInfo subscriber, NewsletterInfo news, SubscriberNewsletterInfo subscription, string siteName)
    {
        // Get global e-mail template with unsubscription request
        EmailTemplateInfo et = EmailTemplateProvider.GetEmailTemplate("newsletter.unsubscriptionrequest", siteName);
        if (et != null)
        {
            // Get subscriber member
            SortedDictionary<int, SubscriberInfo> subscribers = SubscriberInfoProvider.GetSubscribers(subscriber, 1, 0);
            foreach (KeyValuePair<int, SubscriberInfo> item in subscribers)
            {
                // Get 1st subscriber's member
                SubscriberInfo sb = item.Value;

                string body = et.TemplateText;
                string plainBody = et.TemplatePlainText;

                // Resolve newsletter macros (first name, last name etc.)
                IssueHelper ih = new IssueHelper();
                if (ih.LoadDynamicFields(sb, news, subscription, null, false, siteName, null, null, null))
                {
                    body = ih.ResolveDynamicFieldMacros(body);
                    plainBody = ih.ResolveDynamicFieldMacros(plainBody);
                }

                // Create e-mail
                EmailMessage msg = new EmailMessage();
                msg.EmailFormat = EmailFormatEnum.Default;
                msg.From = EmailHelper.GetSender(et, news.NewsletterSenderEmail);
                msg.Recipients = sb.SubscriberEmail;
                msg.BccRecipients = et.TemplateBcc;
                msg.CcRecipients = et.TemplateCc;
                msg.Subject = ResHelper.LocalizeString(et.TemplateSubject);
                msg.Body = URLHelper.MakeLinksAbsolute(body);
                msg.PlainTextBody = URLHelper.MakeLinksAbsolute(plainBody);

                // Add attachments and send e-mail
                MetaFileInfoProvider.ResolveMetaFileImages(msg, et.TemplateID, EmailObjectType.EMAILTEMPLATE, MetaFileInfoProvider.OBJECT_CATEGORY_TEMPLATE);

                EmailSender.SendEmail(siteName, msg);
            }
        }
        else
        {
            // Log missing template
            EventLogProvider ev = new EventLogProvider();
            ev.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "UnsubscriptionRequest", "Unsubscription request e-mail template is missing.");
        }
    }
 private static string GetPreviewSubject(IssueInfo issue, NewsletterInfo newsletter, IssueHelper issueHelper, SubscriberInfo subscriber, string siteName)
 {
     // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%})
     return(issueHelper.LoadDynamicFields(subscriber, newsletter, null, issue, true, siteName, null, null, null) ?
            issueHelper.ResolveDynamicFieldMacros(issue.IssueSubject, newsletter, issue) :
            null);
 }
    /// <summary>
    /// Loads content from specific newsletter template.
    /// </summary>
    private void LoadContent()
    {
        EmailTemplateInfo emailTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo(mTemplateID);

        if ((emailTemplate == null) || string.IsNullOrEmpty(emailTemplate.TemplateBody))
        {
            return;
        }

        // Remove security parameters from macros
        string templateText = MacroResolver.RemoveSecurityParameters(emailTemplate.TemplateBody, true, null);

        if (!RequestHelper.IsPostBack() && (issue != null))
        {
            // Load content of editable regions
            IssueHelper.LoadRegionsContents(ref regionsContents, issue.IssueText);
        }

        CMSEditableRegion editableRegion = null;
        LiteralControl    before         = null;
        int    count     = 0;
        int    textStart = 0;
        string region    = null;

        string[] parts           = null;
        string   name            = null;
        int      width           = 0;
        int      height          = 0;
        string   toolbarLocation = "Out:CKEditorToolbar";
        string   toolbarSetName  = "Newsletter";

        int editRegStart = templateText.IndexOfCSafe("$$", textStart);
        int editRegEnd   = 0;

        // Apply CSS e-mail template style
        HTMLHelper.AddToHeader(Page, CSSHelper.GetCSSFileLink(EmailTemplateInfoProvider.GetStylesheetUrl(emailTemplate.TemplateName)));

        while (editRegStart >= 0)
        {
            count++;

            before = new LiteralControl();
            // Get template text surrounding editable regions - make links absolute
            before.Text = URLHelper.MakeLinksAbsolute(templateText.Substring(textStart, (editRegStart - textStart)));
            plcContent.Controls.Add(before);

            // End of region
            editRegStart += 2;
            textStart     = editRegStart;
            if (editRegStart < templateText.Length - 1)
            {
                editRegEnd = templateText.IndexOfCSafe("$$", editRegStart);
                if (editRegEnd >= 0)
                {
                    region = templateText.Substring(editRegStart, editRegEnd - editRegStart);
                    parts  = (region + ":" + ":").Split(':');

                    try
                    {
                        name = parts[0];
                        if (!string.IsNullOrEmpty(name.Trim()))
                        {
                            width  = ValidationHelper.GetInteger(parts[1], 0);
                            height = ValidationHelper.GetInteger(parts[2], 0);

                            editableRegion            = new CMSEditableRegion();
                            editableRegion.ID         = name;
                            editableRegion.RegionType = CMSEditableRegionTypeEnum.HtmlEditor;
                            editableRegion.ViewMode   = ViewModeEnum.Edit;

                            editableRegion.DialogHeight = height;
                            editableRegion.DialogWidth  = width;

                            editableRegion.WordWrap = false;
                            editableRegion.HtmlAreaToolbarLocation = toolbarLocation;
                            editableRegion.RegionTitle             = name;
                            editableRegion.UseStylesheet           = false;
                            editableRegion.HTMLEditorCssStylesheet = EmailTemplateInfoProvider.GetStylesheetUrl(emailTemplate.TemplateName);

                            if (!mReadOnly)
                            {
                                editableRegion.HtmlAreaToolbar = toolbarSetName;
                            }
                            else
                            {
                                editableRegion.HtmlAreaToolbar = "Disabled";
                            }

                            CMSHtmlEditor editor = editableRegion.HtmlEditor;
                            editor.AddExtraPlugin("CMSPlugins");
                            editor.AddExtraPlugin("autogrow");
                            editor.AutoGrowMinHeight            = height;
                            editor.LinkDialogConfig.UseFullURL  = true;
                            editor.QuickInsertConfig.UseFullURL = true;
                            editor.ResolverName = "NewsletterResolver";

                            DialogConfiguration dialogConfig = editor.MediaDialogConfig;
                            dialogConfig.UseFullURL         = true;
                            dialogConfig.MetaFileObjectID   = (issue != null) ? issue.IssueID : 0;
                            dialogConfig.MetaFileObjectType = (issue != null) && issue.IssueIsVariant ? NewsletterObjectType.NEWSLETTERISSUEVARIANT : NewsletterObjectType.NEWSLETTERISSUE;
                            dialogConfig.MetaFileCategory   = MetaFileInfoProvider.OBJECT_CATEGORY_ISSUE;
                            dialogConfig.HideAttachments    = false;

                            editableRegion.LoadContent(ValidationHelper.GetString(regionsContents[name.ToLowerCSafe()], string.Empty));

                            plcContent.Controls.Add(editableRegion);

                            textStart = editRegEnd + 2;
                        }
                    }
                    catch
                    {
                    }
                }
            }
            editRegStart = templateText.IndexOfCSafe("$$", textStart);
        }

        before      = new LiteralControl();
        before.Text = URLHelper.MakeLinksAbsolute(templateText.Substring(textStart));

        plcContent.Controls.Add(before);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        InitGUI();

        // Get issue ID from query string
        int newsletterIssueId = QueryHelper.GetInteger("issueid", 0);

        // Get Issue object
        Issue issue = IssueProvider.GetIssue(newsletterIssueId);
        if (issue == null)
        {
            lblError.Visible = true;
            lblError.Text = GetString("Newsletter_Issue_New_Preview.NoIssue");

            return;
        }

        // Get specific number of subscribers subscribed to the newsletter
        string where = "SubscriberID IN (SELECT SubscriberID FROM Newsletter_SubscriberNewsletter WHERE NewsletterID=" + issue.IssueNewsletterID + " AND (SubscriptionApproved = 1 OR SubscriptionApproved IS NULL))";
        DataSet subscribers = SubscriberProvider.GetSubscribers(where, null, MAX_PREVIEW_SUBSCRIBERS, null);

        string script;
        if (!DataHelper.DataSourceIsEmpty(subscribers))
        {
            // Limit max subscribers count to number of rows
            int maxCount = subscribers.Tables[0].Rows.Count;

            // Generate javascript based on subscribers
            script = string.Format(@"newsletterIssueId ={0};
                                     var guid = new Array({1});
                                     var email = new Array({1});
                                     var subject = new Array({1});
                                     var subscribers = new Array(guid, email);",
                                     newsletterIssueId,
                                     maxCount);

            // Ensure correct subject culture
            string siteName = CMSContext.CurrentSiteName;
            string culture = CultureHelper.GetDefaultCulture(siteName);

            // Get newsletter object
            Newsletter news = NewsletterProvider.GetNewsletter(issue.IssueNewsletterID);

            // Get subject base
            string subjectBase = GetString("general.subject") + ResHelper.Colon;

            Subscriber subscriber = null;
            Subscriber sb = null;
            SortedDictionary<int, Subscriber> subMembers = null;
            string infoLine = null;
            string subject = null;
            IssueHelper ih = new IssueHelper();

            for (int i = 0; i < maxCount; i++)
            {
                // Get subscriber
                subscriber = new Subscriber(subscribers.Tables[0].Rows[i]);
                if (subscriber != null)
                {
                    // Insert subscriber GUID
                    script = string.Format("{0} guid[{1}] = '{2}'; \n ", script, i, subscriber.SubscriberGUID);

                    // Get subscriber's member (different for user, role or contact group subscribers)
                    subMembers = SubscriberProvider.GetSubscribers(subscriber, 1, 0);
                    foreach (KeyValuePair<int, Subscriber> item in subMembers)
                    {
                        // Get 1st subscriber's member
                        sb = item.Value;
                        if (sb != null)
                        {
                            // Create information line
                            infoLine = ScriptHelper.GetString(sb.SubscriberEmail, false);

                            // Add info about subscriber type
                            if (sb.SubscriberType == SiteObjectType.USER)
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_user").ToLower());
                            }
                            else if (sb.SubscriberType == SiteObjectType.ROLE)
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_role").ToLower());
                            }
                            else if (sb.SubscriberType == PredefinedObjectType.CONTACTGROUP)
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contactgroup").ToLower());
                            }

                            script = string.Format("{0} email[{1}] = '{2}'; \n ", script, i, infoLine);

                            // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%})
                            if (ih.LoadDynamicFields(sb, news, null, issue, true, siteName, null, null, null))
                            {
                                subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject);
                            }

                            // Create resolved subject
                            subject = HTMLHelper.HTMLEncode(string.Format("{0} {1}", subjectBase, subject));
                            script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(subject));
                        }
                    }
                }
            }
        }
        else
        {
            // No subscribers? => hide 'prev' and 'next' link buttons
            pnlLinkButtons.Visible = false;

            // Generate void javascript
            script = string.Format(@"newsletterIssueId ={0};
                                     var guid = new Array(1);
                                     var email = new Array(1);
                                     var subscribers = new Array(guid, email);
                                     guid[1] = 0;
                                     email[1] = 0;",
                                     newsletterIssueId);
        }
        ltlScript.Text = ScriptHelper.GetScript(script);

        if (!RequestHelper.IsPostBack())
        {
            ScriptHelper.RegisterStartupScript(this, typeof(string), "LoadPreview" + ClientID, ScriptHelper.GetScript("pageLoad();"));
        }
    }
    /// <summary>
    /// Creates and sends unsubscription e-mail.
    /// </summary>
    /// <param name="subscriber">Subscriber to be unsubscribed</param>
    /// <param name="news">Newsletter object</param>
    /// <param name="siteName">Name of site that subscriber is being unsubscribed from</param>
    protected void SendUnsubscriptionRequest(SubscriberInfo subscriber, NewsletterInfo news, string siteName)
    {
        var emailTemplate = EmailTemplateProvider.GetEmailTemplate("newsletter.unsubscriptionrequest", siteName);
        if (emailTemplate == null)
        {
            EventLogProvider.LogEvent(EventType.ERROR, "UnsubscriptionRequest", "Unsubscription request e-mail template is missing.");
            return;
        }

        string body = emailTemplate.TemplateText;
        string plainBody = emailTemplate.TemplatePlainText;

        // Resolve newsletter macros (first name, last name etc.)
        var issueHelper = new IssueHelper();
        if (issueHelper.LoadDynamicFields(subscriber, news, null, null, false, siteName, null, null, null))
        {
            body = issueHelper.ResolveDynamicFieldMacros(body, news);
            plainBody = issueHelper.ResolveDynamicFieldMacros(plainBody, news);
        }

        // Create e-mail
        var subscriberEmailRetriever = Service<ISubscriberEmailRetriever>.Entry();
        var emailMessage = new EmailMessage
        {
            EmailFormat = EmailFormatEnum.Default,
            From = EmailHelper.GetSender(emailTemplate, news.NewsletterSenderEmail),
            Recipients = subscriberEmailRetriever.GetSubscriberEmail(subscriber.SubscriberID),
            BccRecipients = emailTemplate.TemplateBcc,
            CcRecipients = emailTemplate.TemplateCc,
            Subject = ResHelper.LocalizeString(emailTemplate.TemplateSubject),
            Body = URLHelper.MakeLinksAbsolute(body),
            PlainTextBody = URLHelper.MakeLinksAbsolute(plainBody)
        };

        // Add attachments and send e-mail
        EmailHelper.ResolveMetaFileImages(emailMessage, emailTemplate.TemplateID, EmailTemplateInfo.OBJECT_TYPE, ObjectAttachmentsCategories.TEMPLATE);
        EmailSender.SendEmail(siteName, emailMessage);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get Issue object
        IssueInfo issue = (IssueInfo)CMSContext.EditedObject;
        if ((issue == null) || (issue.IssueSiteID != CMSContext.CurrentSiteID))
        {
            return;
        }

        // Get newsletter object
        NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(issue.IssueNewsletterID);

        string subject = null;
        IssueHelper ih = new IssueHelper();
        string siteName = CMSContext.CurrentSiteName;

        InitGUI();

        // Get specific number of subscribers subscribed to the newsletter
        string where = "SubscriberID IN (SELECT SubscriberID FROM Newsletter_SubscriberNewsletter WHERE NewsletterID=" + issue.IssueNewsletterID + " AND (SubscriptionApproved=1 OR SubscriptionApproved IS NULL) AND (SubscriptionEnabled=1 OR SubscriptionEnabled IS NULL))";
        DataSet subscribers = SubscriberInfoProvider.GetSubscribers(where, null, MAX_PREVIEW_SUBSCRIBERS, null);

        string script;
        if (!DataHelper.DataSourceIsEmpty(subscribers))
        {
            // Limit max subscribers count to number of rows
            int maxCount = subscribers.Tables[0].Rows.Count;

            // Generate javascript based on subscribers
            script = string.Format(
        @"var currentSubscriberIndex = 0;
        var newsletterIssueId ={0};
        var guid = new Array({1});
        var email = new Array({1});
        var subject = new Array({1});
        var subscribers = new Array(guid, email);", issue.IssueID, maxCount);

            SubscriberInfo subscriber = null;
            SubscriberInfo sbMember = null;
            SortedDictionary<int, SubscriberInfo> subMembers = null;
            string infoLine = null;

            for (int i = 0; i < maxCount; i++)
            {
                // Get subscriber
                subscriber = new SubscriberInfo(subscribers.Tables[0].Rows[i]);
                if (subscriber != null)
                {
                    // Insert subscriber GUID
                    script = string.Format("{0} guid[{1}] = '{2}'; \n ", script, i, subscriber.SubscriberGUID);

                    // Get subscriber's member (different for user, role or contact group subscribers)
                    subMembers = SubscriberInfoProvider.GetSubscribers(subscriber, 1, 0, issue.IssueNewsletterID);
                    if ((subMembers != null) && (subMembers.Count > 0))
                    {
                        foreach (KeyValuePair<int, SubscriberInfo> item in subMembers)
                        {
                            // Get 1st subscriber's member
                            sbMember = item.Value;
                            if (sbMember != null)
                            {
                                // Create information line
                                infoLine = ScriptHelper.GetString(sbMember.SubscriberEmail, false);

                                // Add info about subscriber type
                                if (sbMember.SubscriberType.EqualsCSafe(SiteObjectType.USER, true))
                                {
                                    infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_user").ToLowerCSafe());
                                }
                                else if (sbMember.SubscriberType.EqualsCSafe(SiteObjectType.ROLE, true))
                                {
                                    infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_role").ToLowerCSafe());
                                }
                                else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACTGROUP, true))
                                {
                                    infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contactgroup").ToLowerCSafe());
                                }
                                else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACT, true))
                                {
                                    infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contact").ToLowerCSafe());
                                }

                                script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, infoLine);

                                // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%})
                                if (ih.LoadDynamicFields(sbMember, news, null, issue, true, siteName, null, null, null))
                                {
                                    subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject);
                                }

                                // Create resolved subject
                                script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(subject)));
                            }
                        }
                    }
                    else
                    {
                        script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, "(N/A)");

                        // Resolve dynamic field macros (newsletter and issue)
                        if (ih.LoadDynamicFields(null, news, null, issue, true, siteName, null, null, null))
                        {
                            subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject);
                        }

                        // Create resolved subject
                        script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(subject)));
                    }
                }
            }
        }
        else
        {
            // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%}) in subject
            if (ih.LoadDynamicFields(null, news, null, issue, true, siteName, null, null, null))
            {
                subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject);
            }

            // Generate void javascript
            script = string.Format(
        @"var currentSubscriberIndex = 0;
        var newsletterIssueId ={0};
        var guid = new Array(1);
        var email = new Array(1);
        var subject = new Array(1);
        subject[0] = '{1}';
        var subscribers = new Array(guid, email);
        guid[0] = 0;
        email[0] = '(N/A)';", issue.IssueID, subject);
        }
        ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "PreviewData", ScriptHelper.GetScript(script));

        if (!RequestHelper.IsPostBack())
        {
            ScriptHelper.RegisterStartupScript(this, typeof(string), "LoadPreview" + ClientID, ScriptHelper.GetScript("pageLoad();"));
        }
    }
 public Query_recpt_recordFlow(IssueHelper issueHelp)
 {
     base.issueHelp = issueHelp;
 }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get Issue object
        IssueInfo issue = (IssueInfo)UIContext.EditedObject;
        if ((issue == null) || (issue.IssueSiteID != SiteContext.CurrentSiteID))
        {
            return;
        }

        // Get newsletter object
        NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(issue.IssueNewsletterID);

        string subject = null;
        IssueHelper ih = new IssueHelper();
        string siteName = SiteContext.CurrentSiteName;

        // Get specific number of subscribers subscribed to the newsletter
        DataSet subscribers = SubscriberInfoProvider
                                .GetSubscribers()
                                .TopN(MAX_PREVIEW_SUBSCRIBERS)
                                .WhereIn("SubscriberID", new IDQuery(SubscriberNewsletterInfo.OBJECT_TYPE, "SubscriberID")
                                                                .WhereEquals("NewsletterID", issue.IssueNewsletterID)
                                                                .Where(w => w.WhereTrue("SubscriptionApproved")
                                                                            .Or()
                                                                            .WhereNull("SubscriptionApproved"))
                                                                .Where(w => w.WhereTrue("SubscriptionEnabled")
                                                                            .Or()
                                                                            .WhereNull("SubscriptionEnabled"))
                                                                );

        string script;
        if (!DataHelper.DataSourceIsEmpty(subscribers))
        {
            // Limit max subscribers count to number of rows
            int maxCount = subscribers.Tables[0].Rows.Count;

            // Generate javascript based on subscribers
            script = string.Format(
        @"var currentSubscriberIndex = 0;
        var newsletterIssueId ={0};
        var guid = new Array({1});
        var email = new Array({1});
        var subject = new Array({1});
        var subscribers = new Array(guid, email);", issue.IssueID, maxCount);

            for (int i = 0; i < maxCount; i++)
            {
                // Get subscriber
                SubscriberInfo subscriber = new SubscriberInfo(subscribers.Tables[0].Rows[i]);
                // Insert subscriber GUID
                script = string.Format("{0} guid[{1}] = '{2}'; \n ", script, i, subscriber.SubscriberGUID);

                // Get subscriber's member (different for user, role or contact group subscribers)
                SortedDictionary<int, SubscriberInfo> subMembers = SubscriberInfoProvider.GetSubscribers(subscriber, 1, 0, issue.IssueNewsletterID);
                if ((subMembers != null) && (subMembers.Count > 0))
                {
                    foreach (KeyValuePair<int, SubscriberInfo> item in subMembers)
                    {
                        // Get 1st subscriber's member
                        SubscriberInfo sbMember = item.Value;
                        if (sbMember != null)
                        {
                            // Create information line
                            string infoLine = ScriptHelper.GetString(sbMember.SubscriberEmail, false);

                            // Add info about subscriber type
                            if (sbMember.SubscriberType.EqualsCSafe(UserInfo.OBJECT_TYPE, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_user").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(RoleInfo.OBJECT_TYPE, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_role").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACTGROUP, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contactgroup").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.PERSONA, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.personas_persona").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACT, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contact").ToLowerCSafe());
                            }

                            script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, HTMLHelper.HTMLEncode(infoLine));

                            // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%})
                            if (ih.LoadDynamicFields(sbMember, news, null, issue, true, siteName, null, null, null))
                            {
                                subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject, news, issue);
                            }

                            // Create resolved subject
                            script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(subject)));
                        }
                    }
                }
                else
                {
                    // Get generic name for external subscribers
                    var related = BaseAbstractInfoProvider.GetInfoById(subscriber.SubscriberType, subscriber.SubscriberRelatedID);
                    script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, HTMLHelper.HTMLEncode(TypeHelper.GetNiceObjectTypeName(subscriber.SubscriberType) + " \"" + HTMLHelper.HTMLEncode(related.Generalized.ObjectDisplayName) + "\""));

                    // Resolve dynamic field macros (newsletter and issue)
                    if (ih.LoadDynamicFields(null, news, null, issue, true, siteName, null, null, null))
                    {
                        subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject, news, issue);
                    }

                    // Create resolved subject
                    script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(subject)));
                }
            }
        }
        else
        {
            // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%}) in subject
            if (ih.LoadDynamicFields(null, news, null, issue, true, siteName, null, null, null))
            {
                subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject, news, issue);
            }

            // Generate void javascript
            script = string.Format(
        @"var currentSubscriberIndex = 0;
        var newsletterIssueId ={0};
        var guid = new Array(1);
        var email = new Array(1);
        var subject = new Array(1);
        subject[0] = '{1}';
        var subscribers = new Array(guid, email);
        guid[0] = 0;
        email[0] = '(N/A)';", issue.IssueID, HTMLHelper.HTMLEncode(subject));
        }
        ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "PreviewData", ScriptHelper.GetScript(script));

        if (!RequestHelper.IsPostBack())
        {
            ScriptHelper.RegisterStartupScript(this, typeof(string), "LoadPreview" + ClientID, ScriptHelper.GetScript("pageLoad();"));
        }
    }
Beispiel #32
0
    private static bool AreAllVariantsSent(IssueInfo parentIssue)
    {
        var variants = IssueHelper.GetIssueVariants(parentIssue);

        return(AreAllVariantsSent(variants));
    }
    private string GetPreviewScriptForCampaign(IssueInfo issue, NewsletterInfo newsletter, IssueHelper issueHelper)
    {
        string currentSiteName = SiteContext.CurrentSiteName;

        var output     = new StringBuilder();
        var recipients = issue.GetRecipientsProvider()
                         .GetMarketableRecipients()
                         .TopN(MAX_PREVIEW_SUBSCRIBERS)
                         .ToList();

        if (!recipients.Any())
        {
            return(InitializePreviewScriptForZeroSubscribers(issue, GetPreviewSubject(issue, newsletter, issueHelper, null, currentSiteName)));
        }

        output.AppendLine(InitializePreviewScript(issue, recipients.Count));

        for (int index = 0; index < recipients.Count; index++)
        {
            var recipient = recipients[index];

            var dummySubscriber = new SubscriberInfo
            {
                SubscriberFirstName = recipient.ContactFirstName,
                SubscriberLastName  = recipient.ContactLastName,
                SubscriberEmail     = recipient.ContactEmail
            };

            output.AppendFormat("guid[{0}] = '{1}';", index, recipient.ContactGUID);
            output.AppendFormat("email[{0}] = '{1}';", index, recipient.ContactEmail);
            output.AppendFormat("subject[{0}] = {1};", index, ScriptHelper.GetString(HTMLHelper.HTMLEncode(GetPreviewSubject(issue, newsletter, issueHelper, dummySubscriber, currentSiteName))));
        }

        return(output.ToString());
    }
Beispiel #34
0
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get Issue object
        IssueInfo issue = (IssueInfo)UIContext.EditedObject;

        if ((issue == null) || (issue.IssueSiteID != SiteContext.CurrentSiteID))
        {
            return;
        }

        // Get newsletter object
        NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(issue.IssueNewsletterID);

        string      subject  = null;
        IssueHelper ih       = new IssueHelper();
        string      siteName = SiteContext.CurrentSiteName;

        // Get specific number of subscribers subscribed to the newsletter
        DataSet subscribers = SubscriberInfoProvider
                              .GetSubscribers()
                              .TopN(MAX_PREVIEW_SUBSCRIBERS)
                              .WhereIn("SubscriberID", new IDQuery(SubscriberNewsletterInfo.OBJECT_TYPE, "SubscriberID")
                                       .WhereEquals("NewsletterID", issue.IssueNewsletterID)
                                       .Where(w => w.WhereTrue("SubscriptionApproved")
                                              .Or()
                                              .WhereNull("SubscriptionApproved"))
                                       .Where(w => w.WhereTrue("SubscriptionEnabled")
                                              .Or()
                                              .WhereNull("SubscriptionEnabled"))
                                       );

        string script;

        if (!DataHelper.DataSourceIsEmpty(subscribers))
        {
            // Limit max subscribers count to number of rows
            int maxCount = subscribers.Tables[0].Rows.Count;

            // Generate javascript based on subscribers
            script = string.Format(
                @"var currentSubscriberIndex = 0;
var newsletterIssueId ={0};
var guid = new Array({1});
var email = new Array({1});
var subject = new Array({1});
var subscribers = new Array(guid, email);", issue.IssueID, maxCount);

            for (int i = 0; i < maxCount; i++)
            {
                // Get subscriber
                SubscriberInfo subscriber = new SubscriberInfo(subscribers.Tables[0].Rows[i]);
                // Insert subscriber GUID
                script = string.Format("{0} guid[{1}] = '{2}'; \n ", script, i, subscriber.SubscriberGUID);

                // Get subscriber's member (different for user, role or contact group subscribers)
                SortedDictionary <int, SubscriberInfo> subMembers = SubscriberInfoProvider.GetSubscribers(subscriber, 1, 0, issue.IssueNewsletterID);
                if ((subMembers != null) && (subMembers.Count > 0))
                {
                    foreach (KeyValuePair <int, SubscriberInfo> item in subMembers)
                    {
                        // Get 1st subscriber's member
                        SubscriberInfo sbMember = item.Value;
                        if (sbMember != null)
                        {
                            // Create information line
                            string infoLine = ScriptHelper.GetString(sbMember.SubscriberEmail, false);

                            // Add info about subscriber type
                            if (sbMember.SubscriberType.EqualsCSafe(UserInfo.OBJECT_TYPE, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_user").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(RoleInfo.OBJECT_TYPE, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.cms_role").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACTGROUP, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contactgroup").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.PERSONA, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.personas_persona").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACT, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contact").ToLowerCSafe());
                            }

                            script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, HTMLHelper.HTMLEncode(infoLine));

                            // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%})
                            if (ih.LoadDynamicFields(sbMember, news, null, issue, true, siteName, null, null, null))
                            {
                                subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject, news, issue);
                            }

                            // Create resolved subject
                            script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(subject)));
                        }
                    }
                }
                else
                {
                    // Get generic name for external subscribers
                    var related = BaseAbstractInfoProvider.GetInfoById(subscriber.SubscriberType, subscriber.SubscriberRelatedID);
                    script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, HTMLHelper.HTMLEncode(TypeHelper.GetNiceObjectTypeName(subscriber.SubscriberType) + " \"" + HTMLHelper.HTMLEncode(related.Generalized.ObjectDisplayName) + "\""));

                    // Resolve dynamic field macros (newsletter and issue)
                    if (ih.LoadDynamicFields(null, news, null, issue, true, siteName, null, null, null))
                    {
                        subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject, news, issue);
                    }

                    // Create resolved subject
                    script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(subject)));
                }
            }
        }
        else
        {
            // Resolve dynamic field macros ({%FirstName%}, {%LastName%}, {%Email%}) in subject
            if (ih.LoadDynamicFields(null, news, null, issue, true, siteName, null, null, null))
            {
                subject = ih.ResolveDynamicFieldMacros(issue.IssueSubject, news, issue);
            }

            // Generate void javascript
            script = string.Format(
                @"var currentSubscriberIndex = 0;
var newsletterIssueId ={0};
var guid = new Array(1);
var email = new Array(1);
var subject = new Array(1);
subject[0] = '{1}';
var subscribers = new Array(guid, email);
guid[0] = 0;
email[0] = '(N/A)';", issue.IssueID, HTMLHelper.HTMLEncode(subject));
        }
        ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "PreviewData", ScriptHelper.GetScript(script));

        if (!RequestHelper.IsPostBack())
        {
            ScriptHelper.RegisterStartupScript(this, typeof(string), "LoadPreview" + ClientID, ScriptHelper.GetScript("pageLoad();"));
        }
    }
    private string GetPreviewScriptForNewsletter(IssueInfo issue, NewsletterInfo newsletter, IssueHelper issueHelper)
    {
        string script;
        string siteName = SiteContext.CurrentSiteName;

        // Get specific number of subscribers subscribed to the newsletter
        DataSet subscribers = SubscriberInfoProvider
                              .GetSubscribers()
                              .TopN(MAX_PREVIEW_SUBSCRIBERS)
                              .WhereIn("SubscriberID", new IDQuery(SubscriberNewsletterInfo.OBJECT_TYPE, "SubscriberID")
                                       .WhereEquals("NewsletterID", issue.IssueNewsletterID)
                                       .Where(w => w.WhereTrue("SubscriptionApproved")
                                              .Or()
                                              .WhereNull("SubscriptionApproved")));

        if (!DataHelper.DataSourceIsEmpty(subscribers))
        {
            // Limit max subscribers count to number of rows
            int maxCount = subscribers.Tables[0].Rows.Count;

            // Generate javascript based on subscribers
            script = InitializePreviewScript(issue, maxCount);

            for (int i = 0; i < maxCount; i++)
            {
                // Get subscriber
                SubscriberInfo subscriber = new SubscriberInfo(subscribers.Tables[0].Rows[i]);
                // Insert subscriber GUID
                script = string.Format("{0} guid[{1}] = '{2}'; \n ", script, i, subscriber.SubscriberGUID);

                // Get subscriber's member
                SortedDictionary <int, SubscriberInfo> subMembers = SubscriberInfoProvider.GetSubscribers(subscriber, 1);
                if ((subMembers != null) && (subMembers.Count > 0))
                {
                    foreach (KeyValuePair <int, SubscriberInfo> item in subMembers)
                    {
                        // Get 1st subscriber's member
                        SubscriberInfo sbMember = item.Value;
                        if (sbMember != null)
                        {
                            // Create information line
                            string infoLine = ScriptHelper.GetString(sbMember.SubscriberEmail, false);

                            // Add info about subscriber type
                            if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACTGROUP, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contactgroup").ToLowerCSafe());
                            }
                            else if (sbMember.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACT, true))
                            {
                                infoLine = string.Format("{0} ({1})", infoLine, GetString("objecttype.om_contact").ToLowerCSafe());
                            }

                            script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, HTMLHelper.HTMLEncode(infoLine));

                            // Create resolved subject
                            script = string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(GetPreviewSubject(issue, newsletter, issueHelper, sbMember, siteName))));
                        }
                    }
                }
                else
                {
                    // Get generic name for external subscribers
                    var related = BaseAbstractInfoProvider.GetInfoById(subscriber.SubscriberType, subscriber.SubscriberRelatedID);
                    script = string.Format("{0}email[{1}] = '{2}'; \n ", script, i, HTMLHelper.HTMLEncode(TypeHelper.GetNiceObjectTypeName(subscriber.SubscriberType) + " \"" + HTMLHelper.HTMLEncode(related.Generalized.ObjectDisplayName) + "\""));

                    // Create resolved subject
                    return(string.Format("{0}subject[{1}] = {2}; \n ", script, i, ScriptHelper.GetString(HTMLHelper.HTMLEncode(GetPreviewSubject(issue, newsletter, issueHelper, null, siteName)))));
                }
            }
        }
        else
        {
            return(InitializePreviewScriptForZeroSubscribers(issue, GetPreviewSubject(issue, newsletter, issueHelper, null, siteName)));
        }
        return(script);
    }
    protected object grdElem_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        switch (sourceName)
        {
        case "IssueVariantName":
        {
            DataRowView drv    = (DataRowView)parameter;
            string      result = ValidationHelper.GetString(drv["IssueVariantName"], string.Empty);

            // Issue has not been sent yet => get mail out time from scheduled task
            if (ValidationHelper.GetInteger(drv["IssueID"], 0) == WinnerIssueID)
            {
                result += " " + GetString("newsletterabtest.winner");
            }

            return(result);
        }

        case "MailoutTime":
        {
            string      result = null;
            DataRowView drv    = (DataRowView)parameter;
            DateTime    dt     = ValidationHelper.GetDateTime(drv["IssueMailoutTime"], DateTimeHelper.ZERO_TIME);

            if (dt == DateTimeHelper.ZERO_TIME)
            {
                // Issue has not been sent yet => get mail out time from scheduled task
                int      taskId = ValidationHelper.GetInteger(drv["IssueScheduledTaskID"], 0);
                TaskInfo task   = TaskInfoProvider.GetTaskInfo(taskId);
                if (task != null)
                {
                    if (task.TaskNextRunTime < DateTime.Now)
                    {
                        result = String.Format("{0} {1}", task.TaskNextRunTime.ToString(), GetString("newsletterissue_send.asap"));
                    }
                    else
                    {
                        result = task.TaskNextRunTime.ToString();
                    }
                    dt = task.TaskNextRunTime;
                }
                else
                {
                    result = GetString("general.na");
                }
            }
            else
            {
                result = dt.ToString();
            }

            if (mHighestMailoutTime < dt)
            {
                mHighestMailoutTime = dt;
            }

            return(result);
        }

        case "IssueStatus":
            IssueStatusEnum status = IssueStatusEnum.Idle;
            if ((parameter != DBNull.Value) && (parameter != null))
            {
                status = (IssueStatusEnum)parameter;
            }
            return(IssueHelper.GetStatusFriendlyName(status, null));

        case "IssueOpenedEmails":
            return(GetOpenedEmails(parameter as DataRowView));

        case "UniqueClicks":
            int issueId = ValidationHelper.GetInteger(parameter, 0);
            return(GetUniqueClicks(IssueHelper.GetIssueTotalUniqueClicks(issueId), issueId));
        }
        return(parameter);
    }