/// <summary>
    /// Performs action on given subscriber.
    /// </summary>
    /// <param name="subscriberId">Id of subscriber</param>
    /// <param name="actionName">Name of action</param>
    private void DoSubscriberAction(int subscriberId, string actionName)
    {
        try
        {
            // Check manage subscribers permission
            var subscriber = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
            if (!subscriber.CheckPermissions(PermissionsEnum.Modify, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
            {
                RedirectToAccessDenied(subscriber.TypeInfo.ModuleName, "ManageSubscribers");
            }

            switch (actionName.ToUpperInvariant())
            {
            // Subscribe
            case SUBSCRIBE:
                var subscription = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, mNewsletter.NewsletterID);
                if ((subscription == null) || subscription.SubscriptionEnabled)
                {
                    return;
                }

                SubscriberInfoProvider.RenewSubscription(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                SubscriberNewsletterInfoProvider.SetApprovalStatus(subscriberId, mNewsletter.NewsletterID, !chkRequireOptIn.Checked);
                if (chkRequireOptIn.Checked)
                {
                    IssueInfoProvider.SendDoubleOptInEmail(subscriberId, mNewsletter.NewsletterID);
                }
                break;

            // Unsubscribe
            case UNSUBSCRIBE:
                SubscriberInfoProvider.Unsubscribe(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                break;

            // Remove subscription
            case REMOVE:
                SubscriberInfoProvider.DeleteSubscription(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                break;

            // Approve subscription
            case APPROVE:
                SubscriberNewsletterInfoProvider.ApproveSubscription(subscriberId, mNewsletter.NewsletterID);
                break;

            // Block selected subscriber
            case BLOCK:
                SubscriberInfoProvider.BlockSubscriber(subscriberId);
                break;

            // Un-block selected subscriber
            case UNBLOCK:
                SubscriberInfoProvider.UnblockSubscriber(subscriberId);
                break;
            }
        }
        catch (Exception e)
        {
            LogAndShowError("Newsletter subscriber", "NEWSLETTERS", e);
        }
    }
Esempio n. 2
0
    protected void Page_Load(object sender, EventArgs e)
    {
        // Check read permission for newsletters
        if (MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.Newsletter", "Read"))
        {
            IssueInfo iss     = null;
            int       issueId = QueryHelper.GetInteger("IssueId", 0);
            if (issueId > 0)
            {
                // Get newsletter issue by ID
                iss = IssueInfoProvider.GetIssueInfo(issueId);
            }
            else
            {
                // Get newsletter issue by GUID and site ID
                Guid issueGuid = QueryHelper.GetGuid("IssueGUID", Guid.Empty);
                iss = IssueInfoProvider.GetIssueInfo(issueGuid, SiteContext.CurrentSiteID);
            }

            if ((iss != null) && (iss.IssueSiteID == SiteContext.CurrentSiteID))
            {
                // Get newsletter
                NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(iss.IssueNewsletterID);

                Response.Clear();
                Response.Write(IssueInfoProvider.GetEmailBody(iss, news, null, null, false, SiteContext.CurrentSiteName, null, null, null));
                Response.Flush();

                RequestHelper.EndResponse();
            }
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        PageTitle.TitleText = GetString("newsletter_issue_trackedlinks.title");
        issueId             = QueryHelper.GetInteger("objectid", 0);
        if (issueId == 0)
        {
            RequestHelper.EndResponse();
        }

        IssueInfo issue = IssueInfoProvider.GetIssueInfo(issueId);

        EditedObject = issue;

        // Prevent accessing issues from sites other than current site
        if (issue.IssueSiteID != SiteContext.CurrentSiteID)
        {
            RedirectToResourceNotAvailableOnSite("Issue with ID " + issueId);
        }

        // Get number of sent emails
        sentEmails = issue.IssueSentEmails;

        ScriptHelper.RegisterDialogScript(this);

        string scriptBlock = string.Format(@"
            function OpenTarget(url) {{ window.open(url, 'LinkTarget'); return false; }}
            function ViewClicks(id) {{ modalDialog('{0}?linkid=' + id, 'NewsletterIssueSubscriberClicks', '900px', '700px');  return false; }}",
                                           ResolveUrl(@"~\CMSModules\Newsletters\Tools\Newsletters\Newsletter_Issue_SubscribersClicks.aspx"));

        ScriptHelper.RegisterClientScriptBlock(this, GetType(), "Actions", scriptBlock, true);

        // Issue is the main A/B test issue
        isMainABTestIssue = issue.IssueIsABTest && !issue.IssueIsVariant;
        if (isMainABTestIssue)
        {
            // Initialize variant selector in the filter
            fltLinks.IssueId = issue.IssueID;

            if (RequestHelper.IsPostBack())
            {
                // Get issue ID from variant selector
                issueId = fltLinks.IssueId;
            }
        }

        string whereCondition = string.Empty;

        if (issueId > 0)
        {
            // Filter by Issue ID (from querystring or variant selector in case of A/B test issue)
            whereCondition = SqlHelper.GetWhereCondition("IssueID", issueId);
        }

        UniGrid.WhereCondition        = SqlHelper.AddWhereCondition(whereCondition, fltLinks.WhereCondition);
        UniGrid.Pager.DefaultPageSize = PAGESIZE;
        UniGrid.Pager.ShowPageSize    = false;
        UniGrid.FilterLimit           = 1;
        UniGrid.OnExternalDataBound  += UniGrid_OnExternalDataBound;
        UniGrid.OnAction += UniGrid_OnAction;
    }
    public override bool LoadData(ActivityInfo ai)
    {
        if ((ai == null) || (ai.ActivityType != PredefinedActivityType.NEWSLETTER_CLICKTHROUGH))
        {
            return(false);
        }

        // Get newsletter name
        int            newsletterId   = ai.ActivityItemID;
        NewsletterInfo newsletterInfo = NewsletterInfoProvider.GetNewsletterInfo(newsletterId);

        if (newsletterInfo != null)
        {
            ucDetails.AddRow("om.activitydetails.newsletter", newsletterInfo.NewsletterDisplayName);
        }

        // Get issue subject
        int       issueId   = ai.ActivityItemDetailID;
        IssueInfo issueInfo = IssueInfoProvider.GetIssueInfo(issueId);

        if (issueInfo != null)
        {
            ucDetails.AddRow("om.activitydetails.newsletterissue", issueInfo.IssueDisplayName);
        }

        string targetLink = ai.ActivityURL;

        ucDetails.AddRow("om.activitydetails.newstargetlink", GetLink(targetLink, targetLink), false);

        return(ucDetails.IsDataLoaded);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get issue object
        int       issueId = QueryHelper.GetInteger("issueid", 0);
        IssueInfo issue   = IssueInfoProvider.GetIssueInfo(issueId);

        if (issue != null)
        {
            // Get newsletter object
            NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(issue.IssueNewsletterID);
            if (news != null)
            {
                if (news.NewsletterType == NewsletterType.Dynamic)
                {
                    // Only send page is allowed for dynamic newsletters
                    issueContentUrl = "Newsletter_Issue_Send.aspx?issueid=" + issueId.ToString();
                }
                else
                {
                    issueContentUrl = "Newsletter_Issue_Edit.aspx?issueid=" + issueId.ToString();
                }
            }
        }

        if (string.IsNullOrEmpty(issueContentUrl))
        {
            issueContentUrl = "Newsletter_Issue_Edit.aspx";
        }
    }
Esempio n. 6
0
        private static void SubscribeCoffeeGeekContactGroupToEmailCampaign(PersonaInfo persona)
        {
            var issueInfo = IssueInfoProvider.GetIssues().WhereIn("IssueNewsletterID",
                                                                  NewsletterInfoProvider.GetNewsletters().WhereEquals("NewsletterName", "CoffeeClubMembership")
                                                                  .Column("NewsletterID")).TopN(1).FirstOrDefault();

            if (issueInfo == null)
            {
                return;
            }

            var contactGroup = CreateContactGroup(persona);

            if (IssueContactGroupInfoProvider.GetIssueContactGroupInfo(issueInfo.IssueID,
                                                                       contactGroup.ContactGroupID) != null)
            {
                return;
            }

            IssueContactGroupInfoProvider.SetIssueContactGroupInfo(new IssueContactGroupInfo
            {
                IssueID        = issueInfo.IssueID,
                ContactGroupID = contactGroup.ContactGroupID
            });
        }
Esempio n. 7
0
    /// <summary>
    /// Reloads dropdown lists.
    /// </summary>
    protected void ReloadData()
    {
        usNewsletters.WhereCondition      = "NewsletterSiteID = " + SiteContext.CurrentSiteID;
        usNewsletters.ReturnColumnName    = "NewsletterID";
        usNewsletters.OnSelectionChanged += new EventHandler(DropDownSingleSelect_SelectedIndexChanged);
        usNewsletters.DropDownSingleSelect.AutoPostBack = true;

        usIssues.WhereCondition   = GetIssueWhereCondition(usNewsletters.Value);;
        usIssues.ReturnColumnName = ReturnColumnName;

        // Initialize both dropdown lists according to incoming issue ID
        if (!RequestHelper.IsPostBack())
        {
            if (mValue > 0)
            {
                // Retrieve newsletter ID from issue info
                IssueInfo issue             = IssueInfoProvider.GetIssueInfo(mValue);
                int       issueNewsletterID = 0;
                if (issue != null)
                {
                    issueNewsletterID = issue.IssueNewsletterID;
                }
                usNewsletters.Value     = issueNewsletterID;
                usIssues.WhereCondition = GetIssueWhereCondition(issueNewsletterID);;
                usIssues.Reload(true);
                usIssues.DropDownSingleSelect.SelectedValue = mValue.ToString();
                usIssues.Value = mValue;
            }
        }
    }
        public ActionResult Unsubscribe(UnsubscriptionModel model)
        {
            string invalidUrlMessage = ResHelper.GetString("DancingGoatMvc.News.InvalidUnsubscriptionLink");

            if (ModelState.IsValid)
            {
                bool emailIsValid = mEmailHashValidator.ValidateEmailHash(model.Hash, model.Email);

                if (emailIsValid)
                {
                    try
                    {
                        var issue = IssueInfoProvider.GetIssueInfo(model.IssueGuid, SiteContext.CurrentSiteID);

                        if (model.UnsubscribeFromAll)
                        {
                            // Unsubscribes if not already unsubscribed
                            if (!mUnsubscriptionProvider.IsUnsubscribedFromAllNewsletters(model.Email))
                            {
                                mSubscriptionService.UnsubscribeFromAllNewsletters(model.Email, issue?.IssueID);
                            }

                            model.UnsubscriptionResult = ResHelper.GetString("DancingGoatMvc.News.UnsubscribedAll");
                        }
                        else
                        {
                            var newsletter = NewsletterInfoProvider.GetNewsletterInfo(model.NewsletterGuid, SiteContext.CurrentSiteID);
                            if (newsletter != null)
                            {
                                // Unsubscribes if not already unsubscribed
                                if (!mUnsubscriptionProvider.IsUnsubscribedFromSingleNewsletter(model.Email, newsletter.NewsletterID))
                                {
                                    mSubscriptionService.UnsubscribeFromSingleNewsletter(model.Email, newsletter.NewsletterID, issue?.IssueID);
                                }

                                model.UnsubscriptionResult = ResHelper.GetString("DancingGoatMvc.News.Unsubscribed");
                            }
                            else
                            {
                                ModelState.AddModelError(String.Empty, invalidUrlMessage);
                            }
                        }
                    }
                    catch (ArgumentException)
                    {
                        ModelState.AddModelError(String.Empty, invalidUrlMessage);
                    }
                }
                else
                {
                    ModelState.AddModelError(String.Empty, invalidUrlMessage);
                }
            }
            else
            {
                ModelState.AddModelError(String.Empty, invalidUrlMessage);
            }

            return(View(model));
        }
Esempio n. 9
0
    /// <summary>
    /// Gets and updates dynamic issue. Called when the "Get and update issue" button is pressed.
    /// Expects the CreateDynamicIssue method to be run first.
    /// </summary>
    private bool GetAndUpdateDynamicIssue()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewDynamicNewsletter", SiteContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Prepare the parameters
            var condition = new WhereCondition().WhereEquals("IssueNewsletterID", newsletter.NewsletterID);

            // Get the data
            var issues = IssueInfoProvider.GetIssues().Where(condition);
            if (issues.Any())
            {
                // Create object from DataRow
                IssueInfo updateIssue = issues.First();

                if (updateIssue != null)
                {
                    // Update the properties
                    updateIssue.IssueSubject = updateIssue.IssueSubject.ToLower();

                    // Save the changes
                    IssueInfoProvider.SetIssueInfo(updateIssue);

                    return(true);
                }
            }
        }
        return(false);
    }
Esempio n. 10
0
    /// <summary>
    /// Deletes dynamic issue. Called when the "Delete issue" button is pressed.
    /// Expects the CreateDynamicIssue method to be run first.
    /// </summary>
    private bool DeleteDynamicIssue()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewDynamicNewsletter", SiteContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Prepare the parameters
            var condition = new WhereCondition().WhereEquals("IssueNewsletterID", newsletter.NewsletterID);

            // Get the data
            var issues = IssueInfoProvider.GetIssues().Where(condition);
            if (issues.Any())
            {
                // Create object from DataRow
                IssueInfo deleteIssue = issues.First();

                // Delete the dynamic issue
                IssueInfoProvider.DeleteIssueInfo(deleteIssue);

                return(deleteIssue != null);
            }
        }
        return(false);
    }
Esempio n. 11
0
    public override bool LoadData(ActivityInfo ai)
    {
        if ((ai == null) || (ai.ActivityType != PredefinedActivityType.NEWSLETTER_OPEN))
        {
            return(false);
        }

        // Get newsletter name
        int            newsletterId   = ai.ActivityItemID;
        NewsletterInfo newsletterInfo = NewsletterInfoProvider.GetNewsletterInfo(newsletterId);

        if (newsletterInfo != null)
        {
            string subject = ValidationHelper.GetString(newsletterInfo.NewsletterDisplayName, null);
            ucDetails.AddRow("om.activitydetails.newsletter", subject);
        }

        // Get issue subject
        int       issueId   = ai.ActivityItemDetailID;
        IssueInfo issueInfo = IssueInfoProvider.GetIssueInfo(issueId);

        if (issueInfo != null)
        {
            string subject = ValidationHelper.GetString(issueInfo.IssueSubject, null);
            ucDetails.AddRow("om.activitydetails.newsletterissue", MacroSecurityProcessor.RemoveSecurityParameters(subject, true, null));
        }

        return(ucDetails.IsDataLoaded);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        PageTitle.TitleText = GetString("newsletter_issue_subscribersclicks.title");
        linkId = QueryHelper.GetInteger("linkid", 0);
        if (linkId == 0)
        {
            RequestHelper.EndResponse();
        }

        LinkInfo link = LinkInfoProvider.GetLinkInfo(linkId);

        EditedObject = link;

        IssueInfo issue = IssueInfoProvider.GetIssueInfo(link.LinkIssueID);

        EditedObject = issue;

        // Prevent accessing issues from sites other than current site
        if (issue.IssueSiteID != SiteContext.CurrentSiteID)
        {
            RedirectToResourceNotAvailableOnSite("Issue with ID " + link.LinkIssueID);
        }

        var where = new WhereCondition().Where("LinkID", QueryOperator.Equals, linkId);

        // Link's issue is the main A/B test issue
        if (issue.IssueIsABTest && !issue.IssueIsVariant)
        {
            // Get A/B test and its winner issue ID
            ABTestInfo test = ABTestInfoProvider.GetABTestInfoForIssue(issue.IssueID);
            if (test != null)
            {
                // Get ID of the same link from winner issue
                var winnerLink = LinkInfoProvider.GetLinks()
                                 .WhereEquals("LinkIssueID", test.TestWinnerIssueID)
                                 .WhereEquals("LinkTarget", link.LinkTarget)
                                 .WhereEquals("LinkDescription", link.LinkDescription)
                                 .TopN(1)
                                 .Column("LinkID")
                                 .FirstOrDefault();

                if (winnerLink != null)
                {
                    if (winnerLink.LinkID > 0)
                    {
                        // Add link ID of winner issue link
                        where.Or(new WhereCondition().Where("LinkID", QueryOperator.Equals, winnerLink.LinkID));
                    }
                }
            }
        }
        where.And(new WhereCondition(fltOpenedBy.WhereCondition));

        UniGrid.WhereCondition        = where.WhereCondition;
        UniGrid.QueryParameters       = where.Parameters;
        UniGrid.Pager.DefaultPageSize = PAGESIZE;
        UniGrid.Pager.ShowPageSize    = false;
        UniGrid.FilterLimit           = 1;
        UniGrid.OnExternalDataBound  += UniGrid_OnExternalDataBound;
    }
Esempio n. 13
0
    /// <summary>
    /// Displays info label and increases number of unsubscriptions.
    /// </summary>
    private void DisplayConfirmation()
    {
        // Display coinfirmation message
        lblInfo.Visible = true;
        lblInfo.Text    = String.IsNullOrEmpty(UnsubscribedText) ? GetString("Unsubscribe.Unsubscribed") : UnsubscribedText;

        // If subscriber has been unsubscribed after some issue, increase number of unsubscribed persons of the issue by 1
        int issueId = QueryHelper.GetInteger("issueid", 0);

        if (issueId > 0)
        {
            // Unsubscribe using specified issue ID
            IssueInfoProvider.IncreaseUnsubscribeCount(issueId);
            return;
        }

        // If issue ID not available, try to unsubscribe using issue GUID
        Guid issueGuid = QueryHelper.GetGuid("issueguid", Guid.Empty);

        if (issueGuid != Guid.Empty)
        {
            IssueInfo issue = IssueInfoProvider.GetIssueInfo(issueGuid, SiteContext.CurrentSiteID);
            if (issue != null)
            {
                IssueInfoProvider.IncreaseUnsubscribeCount(issue.IssueID);
            }
        }
    }
Esempio n. 14
0
    private void PostProcessVariants(IssueInfo issue)
    {
        if (issue.IssueIsABTest)
        {
            // Select variants including the parent issue
            var issues = IssueInfoProvider.GetIssues()
                         .WhereNotEquals("IssueID", issue.IssueID)
                         .And(w => w.WhereEquals("IssueVariantOfIssueID", issue.IssueVariantOfIssueID)
                              .Or()
                              .WhereEquals("IssueID", issue.IssueVariantOfIssueID))
                         .ToList();

            foreach (var variant in issues)
            {
                // Synchronize issue data between all A/B test variants (including parent issue).

                variant.IssueDisplayName = issue.IssueDisplayName;

                // UTM parameters
                variant.IssueUTMCampaign = issue.IssueUTMCampaign;
                variant.IssueUTMSource   = issue.IssueUTMSource;
                variant.IssueUseUTM      = issue.IssueUseUTM;

                IssueInfoProvider.SetIssueInfo(variant);
            }
        }
    }
    private void InitOverview()
    {
        if (mIssue.IssueIsABTest)
        {
            var abTest = ABTestInfoProvider.GetABTestInfoForIssue(mIssue.IssueID);

            if (abTest == null)
            {
                return;
            }

            var winnerIssueId = ValidationHelper.GetInteger(abTest.TestWinnerIssueID, 0);

            if (winnerIssueId == 0)
            {
                return;
            }

            var issueInForm = issueForm.EditedObject as IssueInfo;
            var winnerIssue = IssueInfoProvider.GetIssueInfo(winnerIssueId);

            if ((issueInForm != null) && (winnerIssue != null))
            {
                issueInForm.IssueSubject     = winnerIssue.IssueSubject;
                issueInForm.IssueSenderName  = winnerIssue.IssueSenderName;
                issueInForm.IssueSenderEmail = winnerIssue.IssueSenderEmail;
            }
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        PageTitle.TitleText = GetString("newsletter.issue.clicks");
        var issueId = QueryHelper.GetInteger("objectid", 0);

        issueLinks.IssueID    = issueId;
        issueLinks.NoDataText = GetString("newsletter.issue.noclicks");

        IssueInfo issue = IssueInfoProvider.GetIssueInfo(issueId);

        EditedObject = issue;

        if (issue.IssueSentEmails <= 0)
        {
            ShowInformation(GetString("newsletter.issue.overviewnotsentyet"));
            pnlContent.Visible = false;
            return;
        }

        // Prevent accessing issues from sites other than current site
        if (issue.IssueSiteID != SiteContext.CurrentSiteID)
        {
            RedirectToResourceNotAvailableOnSite("Issue with ID " + issueId);
        }
    }
Esempio n. 17
0
    /// <summary>
    /// Gets and bulk updates dynamic issues. Called when the "Get and bulk update issues" button is pressed.
    /// Expects the CreateDynamicIssue method to be run first.
    /// </summary>
    private bool GetAndBulkUpdateDynamicIssues()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewDynamicNewsletter", SiteContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Prepare the parameters
            var condition = new WhereCondition().WhereEquals("IssueNewsletterID", newsletter.NewsletterID);

            // Get the data
            var issues = IssueInfoProvider.GetIssues().Where(condition);
            if (issues.Any())
            {
                // Loop through the individual items
                foreach (var issue in issues)
                {
                    // Update the properties
                    issue.IssueSubject = issue.IssueSubject.ToUpper();

                    // Save the changes
                    IssueInfoProvider.SetIssueInfo(issue);
                }

                return(true);
            }
        }
        return(false);
    }
    public override bool LoadData(ActivityInfo ai)
    {
        if ((ai == null) || (ai.ActivityType != PredefinedActivityType.NEWSLETTER_UNSUBSCRIBING_FROM_ALL))
        {
            return(false);
        }

        // Get issue subject
        int issueId   = ai.ActivityItemID;
        var issueInfo = IssueInfoProvider.GetIssueInfo(issueId);

        if (issueInfo != null)
        {
            // Get newsletter name
            var newsletterInfo = NewsletterInfoProvider.GetNewsletterInfo(issueInfo.IssueNewsletterID);
            if (newsletterInfo != null)
            {
                ucDetails.AddRow("om.activitydetails.newsletter", newsletterInfo.NewsletterDisplayName);
            }

            var issueSubject = MacroSecurityProcessor.RemoveSecurityParameters(issueInfo.IssueSubject, true, null);
            ucDetails.AddRow("om.activitydetails.newsletterissue", issueSubject);
        }

        return(ucDetails.IsDataLoaded);
    }
Esempio n. 19
0
    /// <summary>
    /// Creates static issue. Called when the "Create issue" button is pressed.
    /// </summary>
    private bool CreateStaticIssue()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewStaticNewsletter", SiteContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Create new static issue object
            IssueInfo newIssue = new IssueInfo();

            // Set the properties
            newIssue.IssueSubject                 = "My new static issue";
            newIssue.IssueNewsletterID            = newsletter.NewsletterID;
            newIssue.IssueSiteID                  = SiteContext.CurrentSiteID;
            newIssue.IssueText                    = "<?xml version=\"1.0\" encoding=\"utf-16\"?><content><region id=\"content\">Issue text</region></content>";
            newIssue.IssueUnsubscribed            = 0;
            newIssue.IssueSentEmails              = 0;
            newIssue.IssueTemplateID              = newsletter.NewsletterTemplateID;
            newIssue.IssueShowInNewsletterArchive = false;

            // Save the static issue
            IssueInfoProvider.SetIssueInfo(newIssue);

            return(true);
        }

        return(false);
    }
Esempio n. 20
0
    /// <summary>
    /// Deletes dynamic issue. Called when the "Delete issue" button is pressed.
    /// Expects the CreateDynamicIssue method to be run first.
    /// </summary>
    private bool DeleteDynamicIssue()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewDynamicNewsletter", CMSContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Prepare the parameters
            string where = "IssueNewsletterID = " + newsletter.NewsletterID;

            // Get the data
            DataSet issues = IssueInfoProvider.GetIssues(where, null);

            if (!DataHelper.DataSourceIsEmpty(issues))
            {
                // Create object from DataRow
                IssueInfo deleteIssue = new IssueInfo(issues.Tables[0].Rows[0]);

                // Delete the dynamic issue
                IssueInfoProvider.DeleteIssueInfo(deleteIssue);

                return(deleteIssue != null);
            }
        }
        return(false);
    }
Esempio n. 21
0
    /// <summary>
    /// Gets and bulk updates dynamic issues. Called when the "Get and bulk update issues" button is pressed.
    /// Expects the CreateDynamicIssue method to be run first.
    /// </summary>
    private bool GetAndBulkUpdateDynamicIssues()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewDynamicNewsletter", CMSContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Prepare the parameters
            string where = "IssueNewsletterID = " + newsletter.NewsletterID;

            // Get the data
            DataSet issues = IssueInfoProvider.GetIssues(where, null);
            if (!DataHelper.DataSourceIsEmpty(issues))
            {
                // Loop through the individual items
                foreach (DataRow issueDr in issues.Tables[0].Rows)
                {
                    // Create object from DataRow
                    IssueInfo modifyIssue = new IssueInfo(issueDr);

                    // Update the properties
                    modifyIssue.IssueSubject = modifyIssue.IssueSubject.ToUpper();

                    // Save the changes
                    IssueInfoProvider.SetIssueInfo(modifyIssue);
                }

                return(true);
            }
        }
        return(false);
    }
Esempio n. 22
0
    /// <summary>
    /// Gets and updates dynamic issue. Called when the "Get and update issue" button is pressed.
    /// Expects the CreateDynamicIssue method to be run first.
    /// </summary>
    private bool GetAndUpdateDynamicIssue()
    {
        // Get the newsletter
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewDynamicNewsletter", CMSContext.CurrentSiteID);

        if (newsletter != null)
        {
            // Prepare the parameters
            string where = "IssueNewsletterID = " + newsletter.NewsletterID;

            // Get the data
            DataSet issues = IssueInfoProvider.GetIssues(where, null);

            if (!DataHelper.DataSourceIsEmpty(issues))
            {
                // Create object from DataRow
                IssueInfo updateIssue = new IssueInfo(issues.Tables[0].Rows[0]);

                if (updateIssue != null)
                {
                    // Update the properties
                    updateIssue.IssueSubject = updateIssue.IssueSubject.ToLower();

                    // Save the changes
                    IssueInfoProvider.SetIssueInfo(updateIssue);

                    return(true);
                }
            }
        }
        return(false);
    }
    protected void btnSend_Click(object sender, EventArgs e)
    {
        // Validate date/time
        if (dtpMailout.SelectedDateTime == DateTimeHelper.ZERO_TIME)
        {
            ShowError(GetString("newsletterissue_send.invaliddatetime"));
            return;
        }

        IssueInfo winner        = (IssueInfo)EditedObject;
        int       parentIssueId = winner.IssueVariantOfIssueID;

        // Get A/B test info
        ABTestInfo abi = ABTestInfoProvider.GetABTestInfoForIssue(parentIssueId);

        if (abi != null)
        {
            IssueInfo issue = IssueInfoProvider.GetIssueInfo(parentIssueId);

            // Check if winner was selected and sent
            if (abi.TestWinnerIssueID != 0)
            {
                if ((issue.IssueStatus == IssueStatusEnum.Finished) || (issue.IssueStatus == IssueStatusEnum.Sending))
                {
                    // Winner was already sent
                    CloseDialogAndRefreshParent();
                    return;
                }
            }

            // Update A/B test info and winner selection task (if exist)
            abi.TestWinnerOption = ABTestWinnerSelectionEnum.Manual;
            NewsletterTasksManager.EnsureWinnerSelectionTask(abi, issue, false, DateTime.Now);

            abi.TestSelectWinnerAfter = 0;
            abi.TestWinnerSelected    = DateTime.Now;
            abi.TestWinnerIssueID     = winner.IssueID;
            ABTestInfoProvider.SetABTestInfo(abi);

            if ((issue != null) && (winner != null))
            {
                var parentIssue = IssueInfoProvider.GetIssueInfo(parentIssueId);
                NewsletterSendingStatusModifier.ResetAllEmailsInQueueForIssue(parentIssue.IssueID);

                // Copy data from winner to parent
                IssueHelper.CopyWinningVariantIssueProperties(winner, issue);
                IssueInfoProvider.SetIssueInfo(issue);

                // Remove previous scheduled task of this issue
                NewsletterTasksManager.DeleteMailoutTask(issue.IssueGUID, issue.IssueSiteID);

                DateTime mailoutTime = dtpMailout.SelectedDateTime;
                Service.Resolve <IIssueScheduler>().ScheduleIssue(parentIssue, mailoutTime);
            }
        }

        // Close dialog and refresh parent page
        CloseDialogAndRefreshParent();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get issue ID from querystring
        issueId = QueryHelper.GetInteger("issueid", 0);

        // Get newsletter issue and check its existence
        IssueInfo issue = IssueInfoProvider.GetIssueInfo(issueId);

        EditedObject = issue;

        string infoMessage         = null;
        bool   isABTest            = issue.IssueIsABTest;
        bool   sendingIssueAllowed = false;

        sendElem.Visible    = !isABTest;
        sendVariant.Visible = isABTest;

        if (!isABTest)
        {
            sendElem.IssueID      = issueId;
            sendElem.NewsletterID = issue.IssueNewsletterID;
            bool isSent = (issue.IssueMailoutTime != DateTimeHelper.ZERO_TIME) && (issue.IssueMailoutTime < DateTime.Now);
            infoMessage = (isSent ? GetString("Newsletter_Issue_Header.AlreadySent") : GetString("Newsletter_Issue_Header.NotSentYet"));

            // If resending is disabled check that the issue has 'Idle' status
            newsletter = NewsletterInfoProvider.GetNewsletterInfo(issue.IssueNewsletterID);
            if (newsletter != null)
            {
                sendingIssueAllowed = newsletter.NewsletterEnableResending || issue.IssueStatus == IssueStatusEnum.Idle;
            }
        }
        else
        {
            sendVariant.StopProcessing = (issueId <= 0);
            sendVariant.IssueID        = issueId;
            sendVariant.OnChanged     -= new EventHandler(sendVariant_OnChanged);
            sendVariant.OnChanged     += new EventHandler(sendVariant_OnChanged);
            sendVariant.ReloadData(!RequestHelper.IsPostBack());
            infoMessage         = sendVariant.InfoMessage;
            sendingIssueAllowed = sendVariant.SendingAllowed;
        }

        // Display additional information
        if (!String.IsNullOrEmpty(infoMessage))
        {
            ShowInformationInternal(infoMessage);
        }

        InitHeaderActions(isABTest && (issue.IssueStatus != IssueStatusEnum.Finished), sendingIssueAllowed);

        string scriptBlock = @"function RefreshPage() {{ document.location.replace(document.location); }}";

        ScriptHelper.RegisterClientScriptBlock(this, GetType(), "Actions", scriptBlock, true);

        if (!RequestHelper.IsPostBack() && (QueryHelper.GetInteger("sent", 0) == 1))
        {
            ShowConfirmation(GetString("Newsletter_Send.SuccessfullySent"));
        }
    }
    private static IList <IssueInfo> GetIssueVariants(IssueInfo issue)
    {
        var originalIssue = IssueInfoProvider.GetOriginalIssue(issue.IssueID);

        return(IssueInfoProvider.GetIssues()
               .WhereEquals("IssueVariantOfIssueID", originalIssue.IssueID)
               .ToList());
    }
Esempio n. 26
0
    private WhereCondition AddIssueAssignedTemplate(WhereCondition assignedTemplatesWhere, int issueID)
    {
        var issueTemplateCondition = IssueInfoProvider.GetIssues()
                                     .Column("IssueTemplateID")
                                     .WhereEquals("IssueID", issueID);

        return(assignedTemplatesWhere.Or().WhereIn("TemplateID", issueTemplateCondition));
    }
    private static int?GetIssueID(int siteId)
    {
        var issue = IssueInfoProvider.GetIssueInfo(QueryHelper.GetInteger("issueid", 0)) ??
                    IssueInfoProvider.GetIssueInfo(QueryHelper.GetGuid("issueguid", Guid.Empty), siteId);

        // When issue is not found, return null. When unsubscribing, 0 would fail when used as issue ID
        return(issue != null ? (int?)issue.IssueID : null);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        CurrentMaster.Title.TitleText  = GetString("newsletter_issue_openedby.title");
        CurrentMaster.Title.TitleImage = GetImageUrl("CMSModules/CMS_Newsletter/module.png");

        issueId = QueryHelper.GetInteger("issueid", 0);
        if (issueId == 0)
        {
            RequestHelper.EndResponse();
        }

        IssueInfo issue = IssueInfoProvider.GetIssueInfo(issueId);

        EditedObject = issue;

        // Prevent accessing issues from sites other than current site
        if (issue.IssueSiteID != CMSContext.CurrentSiteID)
        {
            RedirectToResourceNotAvailableOnSite("Issue with ID " + issueId);
        }

        // Issue is the main A/B test issue
        isMainABTestIssue = issue.IssueIsABTest && !issue.IssueIsVariant;
        if (isMainABTestIssue)
        {
            // Initialize variant selector in the filter
            fltOpenedBy.IssueId = issue.IssueID;

            if (RequestHelper.IsPostBack())
            {
                // Get issue ID from variant selector
                issueId = fltOpenedBy.IssueId;
            }

            // Reset ID for main issue, grid will show data from main and winner variant issues
            if (issueId == issue.IssueID)
            {
                issueId = 0;
            }
        }

        QueryDataParameters parameters = null;

        if (issueId > 0)
        {
            parameters = new QueryDataParameters();
            // Filter by Issue ID (from querystring or variant selector in case of A/B test issue)
            parameters.Add("@IssueID", issueId);
        }

        UniGrid.QueryParameters       = parameters;
        UniGrid.WhereCondition        = fltOpenedBy.WhereCondition;
        UniGrid.Pager.DefaultPageSize = PAGESIZE;
        UniGrid.Pager.ShowPageSize    = false;
        UniGrid.FilterLimit           = 1;
        UniGrid.OnExternalDataBound  += UniGrid_OnExternalDataBound;
        UniGrid.OnBeforeDataReload   += UniGrid_OnBeforeDataReload;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        mNewsletter = EditedObjectParent as NewsletterInfo;

        if (mNewsletter == null)
        {
            RedirectToAccessDenied(GetString("general.invalidparameters"));
        }

        if (!mNewsletter.CheckPermissions(PermissionsEnum.Read, CurrentSiteName, CurrentUser))
        {
            RedirectToAccessDenied(mNewsletter.TypeInfo.ModuleName, "Read");
        }

        mBounceMonitoringEnabled = NewsletterHelper.MonitorBouncedEmails(CurrentSiteName);
        mTrackingEnabled         = NewsletterHelper.IsTrackingAvailable();

        if (mTrackingEnabled && !mBounceMonitoringEnabled)
        {
            ShowInformation(GetString("newsletter.viewadditionalstatsmessage"));
        }

        ScriptHelper.RegisterTooltip(this);

        // Initialize unigrid
        UniGrid.WhereCondition       = String.Format("IssueNewsletterID={0} AND IssueVariantOfIssueID IS NULL", mNewsletter.NewsletterID);
        UniGrid.ZeroRowsText         = GetString("Newsletter_Issue_List.NoIssuesFound");
        UniGrid.OnAction            += uniGrid_OnAction;
        UniGrid.OnBeforeDataReload  += UniGrid_OnBeforeDataReload;
        UniGrid.OnExternalDataBound += UniGrid_OnExternalDataBound;

        // Initialize header actions
        InitHeaderActions();

        // Prepare data for listing
        // Group clicked link records by IssueID with Columns LinkIssueID, UniqueUserClicks, VariantParent (to calculate clicked links through all variant)
        mClickedLinksSummary = ClickedLinkInfoProvider.GetClickedLinks()
                               .Columns(new QueryColumn("LinkIssueID"),
                                        new AggregatedColumn(AggregationType.Count, "DISTINCT(ClickedLinkEmail)").As("UniqueUserClicks"))
                               .Source(s => s.Join <LinkInfo>("ClickedLinkNewsletterLinkID", "LinkID"))
                               .GroupBy("LinkIssueID");

        // Prepare variant summaries
        mVariantIssueSummaries = IssueInfoProvider.GetIssues()
                                 .Columns(new QueryColumn("IssueVariantOfIssueID"),
                                          new AggregatedColumn(AggregationType.Sum, "IssueOpenedEmails").As("OpenedEmailsSum"))
                                 .WhereEquals("IssueNewsletterID", mNewsletter.NewsletterID)
                                 .GroupBy("IssueVariantOfIssueID")
                                 .Having("IssueVariantOfIssueID IS NOT NULL");

        // AB Variant issues for current newsletter
        mVariantIssues = IssueInfoProvider.GetIssues()
                         .Columns("IssueID", "IssueVariantOfIssueID")
                         .WhereEquals("IssueNewsletterID", mNewsletter.NewsletterID)
                         .WhereNotNull("IssueVariantOfIssueID");

        AddBrokenEmailUrlNotifier(mNewsletter, lblUrlWarning);
    }
    /// <summary>
    /// Creates new or updates existing newsletter issue.
    /// </summary>
    public bool Save()
    {
        if (validated || IsValid())
        {
            IssueInfo issue = null;

            if (IssueID == 0)
            {
                // Initialize new issue
                issue = new IssueInfo();
                issue.IssueUnsubscribed = 0;
                issue.IssueSentEmails   = 0;
                issue.IssueNewsletterID = NewsletterID;
                issue.IssueSiteID       = CMSContext.CurrentSiteID;
            }
            else
            {
                issue = IssueInfoProvider.GetIssueInfo(IssueID);
            }

            if (issue != null)
            {
                issue.IssueTemplateID = TemplateID;
                issue.IssueShowInNewsletterArchive = chkShowInArchive.Checked;
                issue.IssueSenderName  = txtSenderName.Text.Trim();
                issue.IssueSenderEmail = txtSenderEmail.Text.Trim();

                // Saves content of editable region(s)
                // Get content from hidden field
                string   content = hdnIssueContent.Value;
                string[] regions = null;
                if (!string.IsNullOrEmpty(content))
                {
                    // Split content for each region, separator is '#|#'
                    regions = content.Split(new string[] { "#|#" }, StringSplitOptions.RemoveEmptyEntries);
                }
                issue.IssueText = IssueHelper.GetContentXML(regions);

                // Remove '#' from macros if included
                txtSubject.Text = txtSubject.Text.Trim().Replace("#%}", "%}");

                // Sign macros if included in the subject
                issue.IssueSubject = MacroResolver.AddSecurityParameters(txtSubject.Text, CMSContext.CurrentUser.UserName, null);

                // Save issue
                IssueInfoProvider.SetIssueInfo(issue);

                // Update IssueID
                IssueID = issue.IssueID;

                return(true);
            }
        }

        return(false);
    }