/// <summary> /// Creates static newsletter. Called when the "Create newsletter" button is pressed. /// </summary> private bool CreateStaticNewsletter() { EmailTemplateInfo subscriptionTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewSubscriptionTemplate", SiteContext.CurrentSiteID); EmailTemplateInfo unsubscriptionTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewUnsubscriptionTemplate", SiteContext.CurrentSiteID); EmailTemplateInfo myNewIssueTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewIssueTemplate", SiteContext.CurrentSiteID); if ((subscriptionTemplate != null) && (unsubscriptionTemplate != null) && (myNewIssueTemplate != null)) { // Create new static newsletter object NewsletterInfo newNewsletter = new NewsletterInfo(); // Set the properties newNewsletter.NewsletterDisplayName = "My new static newsletter"; newNewsletter.NewsletterName = "MyNewStaticNewsletter"; newNewsletter.NewsletterType = NewsletterType.TemplateBased; newNewsletter.NewsletterSubscriptionTemplateID = subscriptionTemplate.TemplateID; newNewsletter.NewsletterUnsubscriptionTemplateID = unsubscriptionTemplate.TemplateID; newNewsletter.NewsletterTemplateID = myNewIssueTemplate.TemplateID; newNewsletter.NewsletterSenderName = "Sender name"; newNewsletter.NewsletterSenderEmail = "*****@*****.**"; newNewsletter.NewsletterSiteID = SiteContext.CurrentSiteID; // Save the static newsletter NewsletterInfoProvider.SetNewsletterInfo(newNewsletter); return(true); } return(false); }
/// <summary> /// Generates HTML text to be used in description area. /// </summary> ///<param name="selectedValue">Selected item for which generate description</param> private string ShowInDescriptionArea(string selectedValue) { string description = String.Empty; if (!String.IsNullOrEmpty(selectedValue)) { int templateId = ValidationHelper.GetInteger(selectedValue, 0); var template = EmailTemplateInfoProvider.GetEmailTemplates() .WhereEquals("TemplateID", templateId) .Columns("TemplateDisplayName", "TemplateSubject") .TopN(1) .FirstOrDefault(); if (template != null) { description = template.TemplateSubject; } } if (!String.IsNullOrEmpty(description)) { return("<div class=\"Description\">" + HTMLHelper.HTMLEncode(description) + "</div>"); } return(String.Empty); }
/// <summary> /// Generates HTML text to be used in description area. /// </summary> ///<param name="selectedValue">Selected item for which generate description</param> private string ShowInDescriptionArea(string selectedValue) { string name = String.Empty; string description = String.Empty; if (!String.IsNullOrEmpty(selectedValue)) { int templateId = ValidationHelper.GetInteger(selectedValue, 0); DataSet ds = EmailTemplateInfoProvider.GetEmailTemplates("TemplateID=" + templateId, null, 1, "TemplateDisplayName, TemplateSubject"); if (!DataHelper.DataSourceIsEmpty(ds)) { name = ResHelper.LocalizeString(ValidationHelper.GetString(ds.Tables[0].Rows[0]["TemplateDisplayName"], string.Empty)); description = ValidationHelper.GetString(ds.Tables[0].Rows[0]["TemplateSubject"], string.Empty); } } else { name = GetString("newslettertemplate.selectitem"); } string text = "<div class=\"ItemName\">" + HTMLHelper.HTMLEncode(name) + "</div>"; if (description != null) { text += "<div class=\"Description\">" + HTMLHelper.HTMLEncode(description) + "</div>"; } return(text); }
/// <summary> /// Creates dynamic newsletter. Called when the "Create newsletter" button is pressed. /// </summary> private bool CreateDynamicNewsletter() { EmailTemplateInfo subscriptionTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewSubscriptionTemplate", SiteContext.CurrentSiteID); EmailTemplateInfo unsubscriptionTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewUnsubscriptionTemplate", SiteContext.CurrentSiteID); if ((subscriptionTemplate != null) && (unsubscriptionTemplate != null)) { // Create new dynamic newsletter object NewsletterInfo newNewsletter = new NewsletterInfo(); // Set the properties newNewsletter.NewsletterDisplayName = "My new dynamic newsletter"; newNewsletter.NewsletterName = "MyNewDynamicNewsletter"; newNewsletter.NewsletterType = NewsletterType.Dynamic; newNewsletter.NewsletterSubscriptionTemplateID = subscriptionTemplate.TemplateID; newNewsletter.NewsletterUnsubscriptionTemplateID = unsubscriptionTemplate.TemplateID; newNewsletter.NewsletterSenderName = "Sender name"; newNewsletter.NewsletterSenderEmail = "*****@*****.**"; newNewsletter.NewsletterDynamicURL = "http://www.google.com"; newNewsletter.NewsletterDynamicSubject = "My new dynamic issue"; newNewsletter.NewsletterSiteID = SiteContext.CurrentSiteID; // Save the dynamic newsletter NewsletterInfoProvider.SetNewsletterInfo(newNewsletter); return(true); } return(false); }
/// <summary> /// Gets and bulk updates issue templates. Called when the "Get and bulk update templates" button is pressed. /// Expects the CreateIssueTemplate method to be run first. /// </summary> private bool GetAndBulkUpdateIssueTemplates() { // Prepare the parameters string where = "TemplateName LIKE N'MyNewIssueTemplate%'"; // Get the data DataSet templates = EmailTemplateInfoProvider.GetEmailTemplates(where, null); if (!DataHelper.DataSourceIsEmpty(templates)) { // Loop through the individual items foreach (DataRow templateDr in templates.Tables[0].Rows) { // Create object from DataRow EmailTemplateInfo modifyTemplate = new EmailTemplateInfo(templateDr); // Update the properties modifyTemplate.TemplateDisplayName = modifyTemplate.TemplateDisplayName.ToUpper(); // Save the changes EmailTemplateInfoProvider.SetEmailTemplateInfo(modifyTemplate); } return(true); } return(false); }
private static ObjectQuery <EmailTemplateInfo> LoadAvailableEmailTemplates() { return(EmailTemplateInfoProvider.GetEmailTemplates() .Columns("TemplateID", "TemplateDisplayName", "TemplateDescription", "TemplateThumbnailGUID", "TemplateIconClass") .WhereEquals("TemplateType", EmailTemplateTypeEnum.Issue.ToStringRepresentation()) .Where(GetAssignedTemplatesWhere())); }
/// <summary> /// Gets and bulk updates issue templates. Called when the "Get and bulk update templates" button is pressed. /// Expects the CreateIssueTemplate method to be run first. /// </summary> private bool GetAndBulkUpdateIssueTemplates() { // Prepare the condition IWhereCondition whereCondition = new WhereCondition().Where("TemplateName", QueryOperator.Like, "MyNewIssueTemplate%"); // Get the data var templates = EmailTemplateInfoProvider.GetEmailTemplates().Where(whereCondition); if (templates.Any()) { // Loop through the individual items foreach (var template in templates) { // Update the properties template.TemplateDisplayName = template.TemplateDisplayName.ToUpper(); // Save the changes EmailTemplateInfoProvider.SetEmailTemplateInfo(template); } return(true); } return(false); }
private void InitPreheaderTooltip() { var template = EmailTemplateInfoProvider.GetEmailTemplateInfo(TemplateID); if (!template.ContainsPreheaderMacro()) { iconHelpPreheader.Visible = lblScreenReaderPreheader.Visible = true; iconHelpPreheader.ToolTip = lblScreenReaderPreheader.Text = GetString("newsletterissue.preheader.tooltip"); } }
/// <summary> /// Deletes unsubscription template. Called when the "Delete template" button is pressed. /// Expects the CreateUnsubscriptionTemplate method to be run first. /// </summary> private bool DeleteUnsubscriptionTemplate() { // Get the unsubscription template EmailTemplateInfo deleteTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewUnsubscriptionTemplate", SiteContext.CurrentSiteID); // Delete the unsubscription template EmailTemplateInfoProvider.DeleteEmailTemplateInfo(deleteTemplate); return(deleteTemplate != null); }
/// <summary> /// Deletes issue template. Called when the "Delete template" button is pressed. /// Expects the CreateIssueTemplate method to be run first. /// </summary> private bool DeleteIssueTemplate() { // Get the issue template EmailTemplateInfo deleteTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewIssueTemplate", SiteContext.CurrentSiteID); // Delete the issue template EmailTemplateInfoProvider.DeleteEmailTemplateInfo(deleteTemplate); return(deleteTemplate != null); }
private void InitPreheaderTooltip(IssueInfo issue) { var template = EmailTemplateInfoProvider.GetEmailTemplateInfo(issue.IssueTemplateID); if (!template.ContainsPreheaderMacro() && !string.IsNullOrEmpty(issue.IssuePreheader)) { lblPreheaderAlert.Visible = iconPreheaderAlert.Visible = true; lblPreheaderAlert.Text = iconPreheaderAlert.ToolTip = GetString("newsletterissue.preheader.tooltip"); } }
public void SetUp() { mSite = CreateSiteInfo(); SiteInfoProvider.SetSiteInfo(mSite); var emailTemplate = CreateEmailTemplateInfo(mSite.SiteID); EmailTemplateInfoProvider.SetEmailTemplateInfo(emailTemplate); mNewsletter = CreateNewsletterInfo(mSite.SiteID, emailTemplate.TemplateID); NewsletterInfoProvider.SetNewsletterInfo(mNewsletter); mNewsletterSubscriptionSettings = CreateNewsletterSubscriptionSettings(false); mNewsletterSubscriptionService = new NewsletterSubscriptionService(); Service.Use <IActivityLogService, ActivityLogServiceInMemoryFake>(); SiteContext.CurrentSite = mSite; }
/// <summary> /// Gets and updates issue template. Called when the "Get and update template" button is pressed. /// Expects the CreateIssueTemplate method to be run first. /// </summary> private bool GetAndUpdateIssueTemplate() { // Get the issue template EmailTemplateInfo updateTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo("MyNewIssueTemplate", SiteContext.CurrentSiteID); if (updateTemplate != null) { // Update the properties updateTemplate.TemplateDisplayName = updateTemplate.TemplateDisplayName.ToLower(); // Save the changes EmailTemplateInfoProvider.SetEmailTemplateInfo(updateTemplate); return(true); } return(false); }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that throws event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void uniGrid_OnAction(string actionName, object actionArgument) { string templateId = actionArgument.ToString(); switch (actionName.ToLowerCSafe()) { // Edit the template case "edit": URLHelper.Redirect("NewsletterTemplate_Edit.aspx?templateid=" + templateId); break; // Delete the template case "delete": // Check 'Manage templates' permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "managetemplates")) { RedirectToCMSDeskAccessDenied("cms.newsletter", "managetemplates"); } // Check if the template is used in a newsletter string where = string.Format("(NewsletterTemplateID={0}) OR (NewsletterSubscriptionTemplateID={0}) OR (NewsletterUnsubscriptionTemplateID={0}) OR (NewsletterOptInTemplateID={0})", templateId); DataSet newsByEmailtempl = NewsletterInfoProvider.GetNewsletters(where, null, 1, "NewsletterID"); if (DataHelper.DataSourceIsEmpty(newsByEmailtempl)) { // Check if the template is used in an issue DataSet newsletterIssues = IssueInfoProvider.GetIssues("IssueTemplateID = " + templateId, null, 1, "IssueID"); if (DataHelper.DataSourceIsEmpty(newsletterIssues)) { // Delete EmailTemplate object from database EmailTemplateInfoProvider.DeleteEmailTemplateInfo(ValidationHelper.GetInteger(templateId, 0)); } else { ShowError(GetString("NewsletterTemplate_List.TemplateInUseByNewsletterIssue")); } } else { ShowError(GetString("NewsletterTemplate_List.TemplateInUseByNewsletter")); } break; } }
/// <summary> /// Processes the stylesheet. /// </summary> protected void ProcessStylesheet() { // Newsletter template stylesheet if (!string.IsNullOrEmpty(newsletterTemplateName)) { // Get the template et = EmailTemplateInfoProvider.GetEmailTemplateInfo(newsletterTemplateName, SiteContext.CurrentSiteID); if (et != null) { // Create the output file outputFile = new CMSOutputResource() { Name = RequestContext.URL.ToString(), Data = HTMLHelper.ResolveCSSUrls(et.TemplateStylesheetText, SystemContext.ApplicationPath), Etag = et.TemplateName }; } } }
/// <summary> /// Creates unsubscription template. Called when the "Create template" button is pressed. /// </summary> private bool CreateUnsubscriptionTemplate() { // Create new unsubscription template object EmailTemplateInfo newTemplate = new EmailTemplateInfo(); // Set the properties newTemplate.TemplateDisplayName = "My new unsubscription template"; newTemplate.TemplateName = "MyNewUnsubscriptionTemplate"; newTemplate.TemplateType = EmailTemplateType.Unsubscription; newTemplate.TemplateBody = "My new unsubscription template body"; newTemplate.TemplateHeader = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Newsletter</title><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" /></head><body>"; newTemplate.TemplateFooter = "</body></html>"; newTemplate.TemplateSiteID = CMSContext.CurrentSiteID; // Save the unsubscription template EmailTemplateInfoProvider.SetEmailTemplateInfo(newTemplate); return(true); }
/// <summary> /// Creates issue template. Called when the "Create template" button is pressed. /// </summary> private bool CreateIssueTemplate() { // Create new issue template object EmailTemplateInfo newTemplate = new EmailTemplateInfo(); // Set the properties newTemplate.TemplateDisplayName = "My new issue template"; newTemplate.TemplateName = "MyNewIssueTemplate"; newTemplate.TemplateType = EmailTemplateType.Issue; newTemplate.TemplateBody = "<p>My new issue template body</p><p>$$content:800:600$$</p>"; newTemplate.TemplateHeader = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Newsletter</title><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" /></head><body>"; newTemplate.TemplateFooter = "</body></html>"; newTemplate.TemplateSiteID = SiteContext.CurrentSiteID; // Save the issue template EmailTemplateInfoProvider.SetEmailTemplateInfo(newTemplate); return(true); }
protected void Page_Load(object sender, EventArgs e) { templateId = QueryHelper.GetInteger("templateid", 0); if (templateId <= 0) { pnlAvailability.Visible = false; return; } EditedObject = emailTemplateInfo = EmailTemplateInfoProvider.GetEmailTemplateInfo(templateId); // Initialize newsletter selector usNewsletters.WhereCondition = String.Format("NewsletterSiteID={0} AND NewsletterType='{1}' AND NewsletterTemplateID<>{2}", CMSContext.CurrentSiteID, SqlHelperClass.GetSafeQueryString(NewsletterType.TemplateBased), emailTemplateInfo.TemplateID); if (!RequestHelper.IsPostBack()) { LoadSiteBindings(); } usNewsletters.OnSelectionChanged += usSites_OnSelectionChanged; }
/// <summary> /// Sets data to database. /// </summary> protected void btnOK_Click(object sender, EventArgs e) { string errorMessage = new Validator().NotEmpty(txtTemplateDisplayName.Text.Trim(), GetString("general.requiresdisplayname")) .NotEmpty(txtTemplateName.Text.Trim(), GetString("NewsletterTemplate_Edit.ErrorEmptyName")) .IsCodeName(txtTemplateName.Text.Trim(), GetString("General.ErrorCodeNameInIdentifierFormat")).Result; if (String.IsNullOrEmpty(errorMessage)) { int siteId = CMSContext.CurrentSiteID; // TemplateName must to be unique EmailTemplateInfo emailTemplateObj = EmailTemplateInfoProvider.GetEmailTemplateInfo(txtTemplateName.Text.Trim(), siteId); // If templateName value is unique if (emailTemplateObj == null) { string type; int typeValue = Convert.ToInt32(drpTemplateType.SelectedValue); switch (typeValue) { default: case 0: type = "D"; // Double opt-in break; case 1: type = "I"; // Issue break; case 2: type = "S"; // Subscription break; case 3: type = "U"; // Unsubscription break; } // Create new item -> insert emailTemplateObj = new EmailTemplateInfo(); emailTemplateObj.TemplateType = type; emailTemplateObj.TemplateBody = string.Empty; emailTemplateObj.TemplateName = txtTemplateName.Text.Trim(); emailTemplateObj.TemplateHeader = "<html>\n<head>\n</head>\n<body>"; emailTemplateObj.TemplateFooter = "</body>\n</html>"; emailTemplateObj.TemplateDisplayName = txtTemplateDisplayName.Text.Trim(); emailTemplateObj.TemplateSiteID = siteId; EmailTemplateInfoProvider.SetEmailTemplateInfo(emailTemplateObj); URLHelper.Redirect("NewsletterTemplate_Edit.aspx?templateid=" + Convert.ToString(emailTemplateObj.TemplateID) + "&saved=1"); } else { lblError.Visible = true; lblError.Text = GetString("NewsletterTemplate_Edit.TemplateNameExists"); } } else { lblError.Visible = true; lblError.Text = errorMessage; } }
/// <summary> /// Fired when the step is being loaded. /// </summary> protected void InitStep(object sender, EventArgs e) { // Drop flag stepLoaded = false; StepEventArgs args = (StepEventArgs)e; switch (args.CurrentStep) { case 1: // TEMPLATE SELECTION selectElem.StopProcessing = (newsletterId <= 0); // Check if at least one additional template is available for the newsletter // ... otherwise skip the first step if (newsletterId > 0) { string where = String.Format("TemplateType='{1}' AND (NOT TemplateID IN (SELECT NewsletterTemplateID FROM Newsletter_Newsletter WHERE NewsletterID={0}))" + "AND (TemplateID IN (SELECT TemplateID FROM Newsletter_EmailTemplateNewsletter WHERE NewsletterID={0}))", newsletterId, EmailTemplateType.Issue); DataSet ds = EmailTemplateInfoProvider.GetEmailTemplates(where, null, 1, "TemplateID"); if (!DataHelper.DataSourceIsEmpty(ds)) { // Inicialize template selector selectElem.NewsletterId = newsletterId; // Register JS function for double-click template selection string javascript = "function SelectTemplate(value, skipDialog){" + Page.ClientScript.GetPostBackEventReference(btnTemplateNext, null) + "; return false;}"; ScriptHelper.RegisterStartupScript(this, typeof(string), "TemplateSelector", ScriptHelper.GetScript(javascript)); selectElem.SelectFunction = "SelectTemplate"; } else { // Skip this step args.Skip = SelectionSkipped = true; } } break; case 2: // CONTENT EDITING // Get variant issue ID if A/B testing is ON IssueId = InitVariantSlider(IssueId); editElem.StopProcessing = (newsletterId <= 0); editElem.NewsletterID = newsletterId; editElem.IssueID = IssueId; editElem.TemplateID = templateId; editElem.ReloadData(false); // Initialize action menu InitHeaderActions(); sendVariant.ForceReloadNeeded = true; // control needs to be reloaded in the next step break; case 3: // SENDING CONFIGURATION bool isIssueVariant = IssueInfoProvider.IsABTestIssue(IssueId); if (!isIssueVariant) { sendElem.StopProcessing = ((newsletterId <= 0) || (IssueId <= 0)); sendElem.NewsletterID = newsletterId; sendElem.IssueID = IssueId; } else { sendVariant.StopProcessing = (IssueId <= 0); sendVariant.IssueID = IssueId; sendVariant.ReloadData(); } sendElem.Visible = !isIssueVariant; sendVariant.Visible = isIssueVariant; break; } }
/// <summary> /// Creates new variant and raises "Add" event if specified. /// </summary> /// <param name="name">Name of new variant</param> /// <param name="issueId">ID of source issue on which the new variant will be based</param> private void RaiseOnAddEvent(string name, int issueId) { // Get main issue (original) int currentIssuedId = IssueID; IssueInfo parentIssue = IssueInfoProvider.GetOriginalIssue(currentIssuedId); // Allow modifying issues in idle state only if ((parentIssue == null) || (parentIssue.IssueStatus != IssueStatusEnum.Idle)) { return; } // Get issue content specified by ID (if not found use original) IssueInfo contentIssue = null; if (issueId > 0) { if (issueId == parentIssue.IssueID) { contentIssue = parentIssue; } else { contentIssue = IssueInfoProvider.GetIssueInfo(issueId); } } NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo(parentIssue.IssueNewsletterID); // ID of the first child (if new A/B test is being created (i.e. parent and 2 children) int origVariantId = 0; // Check if current issue is variant issue if (!parentIssue.IssueIsABTest) { // Variant issue has not been created yet => create original and 2 child variants parentIssue.IssueIsABTest = true; // Create 1st variant based on parent issue, the 2nd variant will be created as ordinary variant below IssueInfo issueOrigVariant = parentIssue.Clone(true); issueOrigVariant.IssueVariantOfIssueID = parentIssue.IssueID; issueOrigVariant.IssueVariantName = GetString("newsletter.abvariantoriginal"); issueOrigVariant.IssueScheduledTaskID = 0; IssueInfoProvider.SetIssueInfo(issueOrigVariant); // Create scheduled task for variant mail-out and update issue variant issueOrigVariant.IssueScheduledTaskID = CreateScheduledTask(issueOrigVariant); IssueInfoProvider.SetIssueInfo(issueOrigVariant); // Update parent issue IssueInfoProvider.SetIssueInfo(parentIssue); try { ObjectVersionManager.DestroyObjectHistory(parentIssue.ObjectType, parentIssue.IssueID); } catch (Exception ex) { EventLogProvider.LogException("Newsletter-AddVariant", "EXCEPTION", ex); } origVariantId = issueOrigVariant.IssueID; } // Variant issue has been created => create new variant only IssueInfo issueVariant = (contentIssue != null ? contentIssue.Clone(true) : parentIssue.Clone(true)); issueVariant.IssueVariantName = name; issueVariant.IssueVariantOfIssueID = parentIssue.IssueID; // Prepare content with empty regions if empty content will be used string[] regions = null; if ((contentIssue == null) && (newsletter != null)) { EmailTemplateInfo template = EmailTemplateInfoProvider.GetEmailTemplateInfo(newsletter.NewsletterTemplateID); if (template != null) { bool isValidRegionName; List <string> regionNames = new List <string>(); EmailTemplateHelper.ValidateEditableRegions(template.TemplateBody, out isValidRegionName, out isValidRegionName, regionNames); for (int i = regionNames.Count - 1; i >= 0; i--) { regionNames[i] = regionNames[i] + "::"; } regions = regionNames.ToArray(); // Set template ID (i.e. this template with these regions is used for current issue) issueVariant.IssueTemplateID = template.TemplateID; } } issueVariant.IssueText = (contentIssue != null ? contentIssue.IssueText : IssueHelper.GetContentXML(regions)); issueVariant.IssueScheduledTaskID = 0; IssueInfoProvider.SetIssueInfo(issueVariant); // Duplicate attachments and replace old guids with new guids in issue text if current variant issue is based on content of another if (contentIssue != null) { List <Guid> guids = new List <Guid>(); MetaFileInfoProvider.CopyMetaFiles(contentIssue.IssueID, issueVariant.IssueID, (contentIssue.IssueIsVariant ? IssueInfo.OBJECT_TYPE_VARIANT : IssueInfo.OBJECT_TYPE), ObjectAttachmentsCategories.ISSUE, IssueInfo.OBJECT_TYPE_VARIANT, ObjectAttachmentsCategories.ISSUE, guids); if (guids.Count > 0) { for (int i = 0; i < guids.Count; i += 2) { issueVariant.IssueText = LinkConverter.ReplaceInLink(issueVariant.IssueText, guids[i].ToString(), guids[i + 1].ToString()); } } } // Create scheduled task for variant mail-out issueVariant.IssueScheduledTaskID = CreateScheduledTask(issueVariant); // Update issue variant IssueInfoProvider.SetIssueInfo(issueVariant); if (origVariantId > 0) { // New A/B test issue created => create new A/B test info ABTestInfo abi = new ABTestInfo { TestIssueID = parentIssue.IssueID, TestSizePercentage = 50, TestWinnerOption = ABTestWinnerSelectionEnum.OpenRate, TestSelectWinnerAfter = 60 }; ABTestInfoProvider.SetABTestInfo(abi); // Move attachments (meta files) from parent issue to first variant MetaFileInfoProvider.MoveMetaFiles(parentIssue.IssueID, origVariantId, IssueInfo.OBJECT_TYPE, ObjectAttachmentsCategories.ISSUE, IssueInfo.OBJECT_TYPE_VARIANT, ObjectAttachmentsCategories.ISSUE); MetaFileInfoProvider.MoveMetaFiles(parentIssue.IssueID, origVariantId, IssueInfo.OBJECT_TYPE_VARIANT, ObjectAttachmentsCategories.ISSUE, IssueInfo.OBJECT_TYPE_VARIANT, ObjectAttachmentsCategories.ISSUE); } if (OnAddVariant != null) { VariantEventArgs args = new VariantEventArgs(name, issueVariant.IssueID); OnAddVariant(this, args); } }
protected void Page_Load(object sender, EventArgs e) { // Get subscriber by its ID and check its existence var template = EditedObject as EmailTemplateInfo; if (template == null) { RedirectToAccessDenied(GetString("general.invalidparameters")); } if (!template.CheckPermissions(PermissionsEnum.Read, CurrentSiteName, CurrentUser)) { RedirectToAccessDenied(template.TypeInfo.ModuleName, "ManageTemplates"); } rfvTemplateDisplayName.ErrorMessage = GetString("general.requiresdisplayname"); rfvTemplateName.ErrorMessage = GetString("NewsletterTemplate_Edit.ErrorEmptyName"); ScriptHelper.RegisterSpellChecker(this); // Control initializations string varsScript = string.Format("var emptyNameMsg = '{0}'; \nvar emptyWidthMsg = '{1}'; \nvar emptyHeightMsg = '{2}'; \nvar spellURL = '{3}'; \n", GetString("NewsletterTemplate_Edit.EmptyNameMsg"), GetString("NewsletterTemplate_Edit.EmptyWidthMsg"), GetString("NewsletterTemplate_Edit.EmptyHeightMsg"), AuthenticationHelper.ResolveDialogUrl("~/CMSModules/Content/CMSDesk/Edit/SpellCheck.aspx")); ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "Script_" + ClientID, ScriptHelper.GetScript(varsScript)); // Set fields to be checked by Spell Checker string spellCheckScript = string.Format("if (typeof(spellCheckFields)==='undefined') {{var spellCheckFields = new Array();}} spellCheckFields.push('{0}');", htmlTemplateBody.ClientID); ScriptHelper.RegisterStartupScript(this, typeof(string), ClientID, ScriptHelper.GetScript(spellCheckScript)); // Get edited object and its existence EmailTemplateInfo emailTemplateObj = (EmailTemplateInfo)EditedObject; templateid = emailTemplateObj.TemplateID; // Display editable region section only for e-mail templates of type "Issue template" if (emailTemplateObj.TemplateType == EmailTemplateType.Issue) { pnlEditableRegion.Visible = true; plcThumb.Visible = true; ucThumbnail.Visible = true; ucThumbnail.ObjectID = emailTemplateObj.TemplateID; ucThumbnail.ObjectType = EmailTemplateInfo.OBJECT_TYPE; ucThumbnail.Category = ObjectAttachmentsCategories.THUMBNAIL; ucThumbnail.SiteID = emailTemplateObj.TemplateSiteID; } else { plcSubject.Visible = true; } // Init CSS styles every time during page load htmlTemplateBody.EditorAreaCSS = EmailTemplateInfoProvider.GetStylesheetUrl(emailTemplateObj.TemplateName) + "×tamp=" + DateTime.Now.Millisecond; // Initialize header actions InitHeaderActions(emailTemplateObj.TemplateID); // Initialize HTML editor InitHTMLEditor(emailTemplateObj); if (!RequestHelper.IsPostBack()) { // Initialize dialog LoadData(emailTemplateObj); // Show that the emailTemplate was created successfully if (QueryHelper.GetBoolean("saved", false)) { ShowChangesSaved(); } } }
/// <summary> /// Actions handler. /// </summary> protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e) { switch (e.CommandName.ToLowerCSafe()) { case "save": // Check 'Manage templates' permission if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("cms.newsletter", "managetemplates")) { RedirectToAccessDenied("cms.newsletter", "managetemplates"); } string errorMessage; // Check template code name if (!ValidationHelper.IsCodeName(txtTemplateName.Text)) { errorMessage = GetString("General.ErrorCodeNameInIdentifierFormat"); } else { // Check code and display name for emptiness errorMessage = new Validator().NotEmpty(txtTemplateDisplayName.Text, GetString("general.requiresdisplayname")).NotEmpty(txtTemplateName.Text, GetString("NewsletterTemplate_Edit.ErrorEmptyName")).Result; } if (string.IsNullOrEmpty(errorMessage)) { // TemplateName must to be unique EmailTemplateInfo emailTemplateObj = EmailTemplateInfoProvider.GetEmailTemplateInfo(txtTemplateName.Text.Trim(), SiteContext.CurrentSiteID); // If templateName value is unique if ((emailTemplateObj == null) || (emailTemplateObj.TemplateID == templateid)) { // If templateName value is unique -> determine whether it is update or insert if ((emailTemplateObj == null)) { // Get EmailTemplate object by primary key emailTemplateObj = EmailTemplateInfoProvider.GetEmailTemplateInfo(templateid) ?? new EmailTemplateInfo(); } // Check region names validity bool isValidRegionName; bool isValid; string templateBody = htmlTemplateBody.ResolvedValue.Trim(); EmailTemplateHelper.ValidateEditableRegions(templateBody, out isValid, out isValidRegionName, null); if (isValid) { if (isValidRegionName) { // Set template object emailTemplateObj.TemplateBody = templateBody; emailTemplateObj.TemplateName = txtTemplateName.Text.Trim(); emailTemplateObj.TemplateHeader = ValidationHelper.GetString(txtTemplateHeader.Value, "").Trim(); emailTemplateObj.TemplateFooter = ValidationHelper.GetString(txtTemplateFooter.Value, "").Trim(); emailTemplateObj.TemplateDisplayName = txtTemplateDisplayName.Text.Trim(); emailTemplateObj.TemplateStylesheetText = txtTemplateStyleSheetText.Text.Trim(); // Set temaplte subject only for 'subscription' and 'unsubscription' template types if (plcSubject.Visible) { emailTemplateObj.TemplateSubject = txtTemplateSubject.Text.Trim(); } // Save the template object and display info message EmailTemplateInfoProvider.SetEmailTemplateInfo(emailTemplateObj); ShowChangesSaved(); // Reload header if changes were saved ScriptHelper.RefreshTabHeader(Page, emailTemplateObj.TemplateDisplayName); } else { ShowError(GetString("NewsletterTemplate_Edit.EditableRegionNameError")); } } else { ShowError(GetString("NewsletterTemplate_Edit.EditableRegionError")); } } else { ShowError(GetString("NewsletterTemplate_Edit.TemplateNameExists")); } } else { ShowError(errorMessage); } break; } }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that throws event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void uniGrid_OnAction(string actionName, object actionArgument) { string templateId = actionArgument.ToString(); switch (actionName.ToLowerCSafe()) { // Edit the template case "edit": string url = UIContextHelper.GetElementUrl("cms.newsletter", "TemplateProperties", false, templateId.ToInteger(0)); URLHelper.Redirect(url); break; // Delete the template case "delete": // Check 'Manage templates' permission var template = EmailTemplateInfoProvider.GetEmailTemplateInfo(ValidationHelper.GetInteger(actionArgument, 0)); if (template == null) { RedirectToAccessDenied(GetString("general.invalidparameters")); } if (!template.CheckPermissions(PermissionsEnum.Delete, CurrentSiteName, CurrentUser)) { RedirectToAccessDenied("cms.newsletter", "managetemplates"); } // Check if the template is used in a newsletter var newsByEmailtempl = NewsletterInfoProvider .GetNewsletters() .WhereEquals("NewsletterTemplateID", templateId) .Or() .WhereEquals("NewsletterSubscriptionTemplateID", templateId) .Or() .WhereEquals("NewsletterUnsubscriptionTemplateID", templateId) .Or() .WhereEquals("NewsletterOptInTemplateID", templateId) .Column("NewsletterID") .TopN(1); if (!newsByEmailtempl.Any()) { // Check if the template is used in an issue var newsletterIssuesIDs = IssueInfoProvider.GetIssues().WhereEquals("IssueTemplateID", templateId).TopN(1).Column("IssueID"); if (!newsletterIssuesIDs.Any()) { // Delete EmailTemplate object from database EmailTemplateInfoProvider.DeleteEmailTemplateInfo(ValidationHelper.GetInteger(templateId, 0)); } else { ShowError(GetString("NewsletterTemplate_List.TemplateInUseByNewsletterIssue")); } } else { ShowError(GetString("NewsletterTemplate_List.TemplateInUseByNewsletter")); } break; } }
protected void Page_Load(object sender, EventArgs e) { rfvTemplateDisplayName.ErrorMessage = GetString("general.requiresdisplayname"); rfvTemplateName.ErrorMessage = GetString("NewsletterTemplate_Edit.ErrorEmptyName"); ScriptHelper.RegisterSpellChecker(this); // Control initializations string varsScript = string.Format("var emptyNameMsg = '{0}'; \nvar emptyWidthMsg = '{1}'; \nvar emptyHeightMsg = '{2}'; \nvar spellURL = '{3}'; \n", GetString("NewsletterTemplate_Edit.EmptyNameMsg"), GetString("NewsletterTemplate_Edit.EmptyWidthMsg"), GetString("NewsletterTemplate_Edit.EmptyHeightMsg"), CMSContext.ResolveDialogUrl("~/CMSModules/Content/CMSDesk/Edit/SpellCheck.aspx")); ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "Script_" + ClientID, ScriptHelper.GetScript(varsScript)); // Set fields to be checked by Spell Checker string spellCheckScript = string.Format("if (typeof(spellCheckFields)==='undefined') {{var spellCheckFields = new Array();}} spellCheckFields.push('{0}');", htmlTemplateBody.ClientID); ScriptHelper.RegisterStartupScript(this, typeof(string), ClientID, ScriptHelper.GetScript(spellCheckScript)); string currentEmailTemplate = GetString("NewsletterTemplate_Edit.NewItemCaption"); // Get edited object and its existence EmailTemplateInfo emailTemplateObj = (EmailTemplateInfo)EditedObject; templateid = emailTemplateObj.TemplateID; currentEmailTemplate = emailTemplateObj.TemplateDisplayName; // Display editable region section only for e-mail templates of type "Issue template" if (emailTemplateObj.TemplateType == EmailTemplateType.Issue) { pnlEditableRegion.Visible = true; plcThumb.Visible = true; ucThumbnail.Visible = true; ucThumbnail.ObjectID = emailTemplateObj.TemplateID; ucThumbnail.ObjectType = NewsletterObjectType.NEWSLETTERTEMPLATE; ucThumbnail.Category = MetaFileInfoProvider.OBJECT_CATEGORY_THUMBNAIL; ucThumbnail.SiteID = emailTemplateObj.TemplateSiteID; } else { plcSubject.Visible = true; } // Init CSS styles every time during page load htmlTemplateBody.EditorAreaCSS = EmailTemplateInfoProvider.GetStylesheetUrl(emailTemplateObj.TemplateName) + "×tamp=" + DateTime.Now.Millisecond; // Initialize header actions InitHeaderActions(emailTemplateObj.TemplateID); // Initialize HTML editor InitHTMLEditor(emailTemplateObj); if (!RequestHelper.IsPostBack()) { // Initialize dialog LoadData(emailTemplateObj); // Show that the emailTemplate was created successfully if (QueryHelper.GetBoolean("saved", false)) { ShowChangesSaved(); } } }
/// <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); }
/// <summary> /// Loads content from specific newsletter template. /// </summary> private void LoadContent() { var urlHelper = new URLHelper(); EmailTemplateInfo emailTemplate = EmailTemplateInfoProvider.GetEmailTemplateInfo(mTemplateID); if ((emailTemplate == null) || string.IsNullOrEmpty(emailTemplate.TemplateBody)) { return; } // Remove security parameters from macros string templateText = MacroSecurityProcessor.RemoveSecurityParameters(emailTemplate.TemplateBody, true, null); if (!RequestHelper.IsPostBack() && (issue != null)) { // Load content of editable regions IssueHelper.LoadRegionsContents(ref regionsContents, issue.IssueText); } LiteralControl before; int count = 0; int textStart = 0; string toolbarLocation = "Out:CKToolbar"; string toolbarSetName = "Newsletter"; int editRegStart = templateText.IndexOfCSafe("$$", textStart); // Apply CSS e-mail template style Page.AddToHeader(CssLinkHelper.GetCssFileLink(EmailTemplateInfoProvider.GetStylesheetUrl(emailTemplate.TemplateName))); string domainName = SiteContext.CurrentSite.SiteIsContentOnly ? SiteContext.CurrentSite.SitePresentationURL : SiteContext.CurrentSite.DomainName; 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)), domainName); plcContent.Controls.Add(before); // End of region editRegStart += 2; textStart = editRegStart; if (editRegStart < templateText.Length - 1) { int editRegEnd = templateText.IndexOfCSafe("$$", editRegStart); if (editRegEnd >= 0) { string region = templateText.Substring(editRegStart, editRegEnd - editRegStart); string[] parts = (region + ":" + ":").Split(':'); try { string name = parts[0]; if (!string.IsNullOrEmpty(name.Trim())) { Regex intNumber = RegexHelper.GetRegex("^[0-9]+"); int width = ValidationHelper.GetInteger(intNumber.Match(parts[1]).Value, 0); int height = ValidationHelper.GetInteger(intNumber.Match(parts[2]).Value, 0); CMSEditableRegion 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.ExtraPlugins.Add("autogrow"); editor.AutoGrowMinHeight = height; editor.ResolverName = "NewsletterResolver"; DialogConfiguration dialogConfig = editor.MediaDialogConfig; dialogConfig.MetaFileObjectID = (issue != null) ? issue.IssueID : 0; dialogConfig.MetaFileObjectType = (issue != null) && issue.IssueIsVariant ? IssueInfo.OBJECT_TYPE_VARIANT : IssueInfo.OBJECT_TYPE; dialogConfig.MetaFileCategory = ObjectAttachmentsCategories.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), domainName); plcContent.Controls.Add(before); }