/// <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); } }
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"; } }
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 }); }
/// <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)); }
/// <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); }
/// <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); }
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; }
/// <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); } } }
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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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()); }
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); }