// ReSharper disable UnusedMember.Local // Invoked via Reflection internal static void Initialize(BulkEmailPage page) // ReSharper restore UnusedMember.Local { if (!page.IsPostBack) { var emailData = Security.GetEmailDataByUserName(UserName); if (emailData.Count == 1) { var emails = new List <string> { emailData[0].UserEmail.SafeString() }; emails.AddRange(emailData[0].UserEmails.SafeString().Split(',') .Select(a => a.Trim()).Where(a => a.EndsWith("@vote-usa.org", StringComparison.OrdinalIgnoreCase))); var emailList = emails.Select(a => a.Trim()) .Where(Validation.IsValidEmailAddress) .Distinct(StringComparer.OrdinalIgnoreCase).ToList(); AddEmailsTo(page.OptionsFrom, emailList, "OptionsFrom", true, true); AddEmailsTo(page.OptionsCC, emailList, "OptionsCC", false, true); AddEmailsTo(page.OptionsBCC, emailList, "OptionsBCC", false, true); // On the Send Emails tab AddEmailsTo(page.TestAddress, emailList, "TestAddress", false); } } }
// ReSharper disable UnusedMember.Local // Invoked via Reflection internal static void Initialize(BulkEmailPage page) // ReSharper restore UnusedMember.Local { if (!page.IsPostBack) { page.LogSelectJurisdictions.Initialize(); } }
// ReSharper disable UnusedMember.Local // Invoked via Reflection internal static void Initialize(BulkEmailPage page) // ReSharper restore UnusedMember.Local { if (!IsMasterUser) { page.TabMasterItem.Visible = false; } }
// ReSharper disable UnusedMember.Local // Invoked via Reflection internal static void Initialize(BulkEmailPage page) // ReSharper restore UnusedMember.Local { if (!page.IsPostBack) { BuildSubstitutionTable(page); BuildSubstitutionsOptionsDisplay(page); } }
// ReSharper disable UnusedMember.Local // Invoked via Reflection internal static void Initialize(BulkEmailPage page) // ReSharper restore UnusedMember.Local { if (!page.IsPostBack) { if (IsNullOrWhiteSpace(page.StateCode)) { StateCache.Populate(page.PreviewSampleStateDropDownList, "<none>", Empty); Utility.PopulateEmpty(page.PreviewSampleElectionDropDownList); Utility.PopulateEmpty(page.PreviewSamplePartyDropDownList); } else { StateCache.Populate(page.PreviewSampleStateDropDownList, page.StateCode); Utility.PopulateFromList(page.PreviewSampleElectionDropDownList, GetPreviewElectionItems(page.StateCode, page.CountyCode, page.LocalKey)); Utility.PopulateFromList(page.PreviewSamplePartyDropDownList, GetPreviewPartyItems(page.StateCode)); } CountyCache.Populate(page.PreviewSampleCountyDropDownList, page.StateCode, "<none>", Empty, page.CountyCode); LocalDistricts.Populate(page.PreviewSampleLocalDropDownList, page.StateCode, page.CountyCode, "<none>", Empty, page.LocalKey); Utility.PopulateEmpty(page.PreviewSampleOfficeDropDownList); Utility.PopulateEmpty(page.PreviewSampleCandidateDropDownList); Utility.PopulateEmpty(page.PreviewSamplePartyEmailDropDownList); switch (UserSecurityClass) { case MasterSecurityClass: break; case StateAdminSecurityClass: page.PreviewSampleStateDropDownList.Enabled = false; break; case CountyAdminSecurityClass: page.PreviewSampleStateDropDownList.Enabled = false; page.PreviewSampleCountyDropDownList.Enabled = false; page.PreviewSamplePartyDropDownList.Enabled = false; page.PreviewSamplePartyEmailDropDownList.Enabled = false; break; case LocalAdminSecurityClass: page.PreviewSampleStateDropDownList.Enabled = false; page.PreviewSampleCountyDropDownList.Enabled = false; page.PreviewSampleLocalDropDownList.Enabled = false; page.PreviewSamplePartyDropDownList.Enabled = false; page.PreviewSamplePartyEmailDropDownList.Enabled = false; break; } } }
private static void BuildSubstitutionsOptionsDisplay(BulkEmailPage page) { new HtmlH3 { InnerText = "Substitution Options" }.AddTo( page.SubstitutionOptionsPlaceHolder, "options-display"); foreach (var optionType in Substitutions.OptionTypeInfos) { var cssClass = "type-" + Regex .Replace(optionType.ShortName, "[^a-z0-9]+", "-", RegexOptions.IgnoreCase) .ToLowerInvariant(); var div = new HtmlDiv().AddTo(page.SubstitutionOptionsPlaceHolder, cssClass + " options-display-type rounded-border"); new HtmlH4 { InnerText = optionType.Name }.AddTo(div); new LiteralControl(optionType.HtmlDescription).AddTo(div); } var linkTextDiv = new HtmlDiv().AddTo(page.SubstitutionOptionsPlaceHolder, "type-linktext options-display-type rounded-border"); new HtmlH4 { InnerText = "Literal Link Text" }.AddTo(linkTextDiv); new LiteralControl("Literal link text can be added to any hyperlink (##)" + " substitution. Enclose the text in curly braces ({}) and insert it just before" + " the closing ##. To use an uploaded image, use {Image:<name>} for the link text" + " where <name> is the external name of an uploaded image (without file extension).").AddTo(linkTextDiv); var embeddedKeysDiv = new HtmlDiv().AddTo(page.SubstitutionOptionsPlaceHolder, "type-embeddedkeys options-display-type rounded-border"); new HtmlH4 { InnerText = "Embedded Keys" }.AddTo(embeddedKeysDiv); new LiteralControl("Certain key values (StateCode, CountyCode, LocalKey," + " ElectionKey, OfficeKey and PoliticianKey) that are not directly related to" + " the recipient selection can be embedded in the template. For example" + " <span class=\"escape\">[[</span>OfficeKey=USPresident<span class=\"escape\">]]</span>").AddTo(embeddedKeysDiv); }
// ReSharper disable UnusedMember.Local // Invoked via Reflection internal static void Initialize(BulkEmailPage page) // ReSharper restore UnusedMember.Local { if (!page.IsPostBack) { page.SingleElectionFilteringMsg.AddCssClasses("hidden"); switch (UserSecurityClass) { case MasterSecurityClass: page.RecipientsSingleElectionFiltering.Enabled = false; page.SingleElectionFilteringMsg.RemoveCssClass("hidden"); page.RecipientsSelectJurisdictions.Initialize(); break; case StateAdminSecurityClass: page.RecipientsSelectJurisdictions.Initialize(page.StateCode); break; case CountyAdminSecurityClass: page.RecipientsStateContact.Visible = false; page.RecipientsStateCandidate.Visible = false; page.RecipientsPartyOfficial.Visible = false; page.RecipientsCountyContact.Checked = true; page.RecipientsSelectJurisdictions.Initialize(page.StateCode, page.CountyCode); break; case LocalAdminSecurityClass: page.RecipientsStateContact.Visible = false; page.RecipientsStateCandidate.Visible = false; page.RecipientsCountyContact.Visible = false; page.RecipientsCountyCandidate.Visible = false; page.RecipientsPartyOfficial.Visible = false; page.RecipientsLocalContact.Checked = true; page.RecipientsSelectJurisdictions.Initialize(page.StateCode, page.CountyCode, page.LocalKey); break; } } }
private static void BuildSubstitutionsOptionsDisplay(BulkEmailPage page) { new HtmlH3 { InnerText = "Substitution Options" }.AddTo(page.SubstitutionOptionsPlaceHolder, "options-display"); foreach (var optionType in Substitutions.OptionTypeInfos) { var cssClass = "type-" + Regex.Replace(optionType.ShortName, "[^a-z0-9]+", "-", RegexOptions.IgnoreCase) .ToLowerInvariant(); var div = new HtmlDiv().AddTo(page.SubstitutionOptionsPlaceHolder, cssClass + " options-display-type rounded-border"); new HtmlH4 { InnerText = optionType.Name }.AddTo(div); new LiteralControl(optionType.HtmlDescription).AddTo(div); } }
private static void BuildSubstitutionTable(BulkEmailPage page) { var allSubstitutions = Substitutions.GetAllInfo(); // add specials for email AddEmailSubstitution(allSubstitutions, "[[Contact]]", "The name of the email recipient", 1); AddEmailSubstitution(allSubstitutions, "[[ContactTitle]]", "The title of the email recipient", 2); AddEmailSubstitution(allSubstitutions, "[[ContactEmail]]", "The email address of the email recipient", 3); AddEmailSubstitution(allSubstitutions, "[[ContactPhone]]", "The phone number of the email recipient", 4); AddEmailSubstitution(allSubstitutions, "@@ContactEmail@@", "Mailto link for the email recipient", 5); // add the generics allSubstitutions.Add("@@<i>any email address</i>@@", new SubstitutionInfo { HtmlDescription = "Mailto link for the <i>email address</i>.", Type = Substitutions.Type.Generic, DisplayOrder = 1 }); allSubstitutions.Add("##<i>any web address</i>##", new SubstitutionInfo { HtmlDescription = "Hyperlink to the <i>web address</i>.", Type = Substitutions.Type.Generic, DisplayOrder = 2 }); // sort and group var allSubstitutionGroups = allSubstitutions.GroupBy(kvp => kvp.Value.Type).OrderBy(g => g.Key); var table = new HtmlTable().AddTo(page.AvailableSubstitutionsPlaceHolder, "substitution-table"); foreach (var group in allSubstitutionGroups) { var g = group.ToList(); // so we can extend it HtmlTableRow row; if (group.Key != Substitutions.Type.Undocumented && group.Key != Substitutions.Type.Deprecated) { row = new HtmlTableRow().AddTo(table); new HtmlTableCell("th") { InnerText = Substitutions.TypeNameDictionary[group.Key], ColSpan = 2 }.AddTo(row, "substitution-type"); row = new HtmlTableRow().AddTo(table); new HtmlTableCell("th") { InnerHtml = "Name" }.AddTo(row); new HtmlTableCell("th") { InnerHtml = "Description" }.AddTo(row); } var odd = true; for (var n = 0; n < g.Count; n++) { var key = g[n].Key; var value = g[n].Value; row = new HtmlTableRow().AddTo(table, (odd ? "odd " : "even ") + (value.Type == Substitutions.Type.Undocumented || value.Type == Substitutions.Type.Deprecated ? "hidden " : Empty) + Substitutions.GetClass(key).ToString().ToLowerInvariant()); odd = !odd; var nameClasses = n < g.Count ? GetSubstititionNameClassNames(value) : null; var name = n < g.Count ? $"<span class=\"escape\">{key.Substring(0, 2)}</span>" + $"<span class=\"id\">{key.Substring(2, key.Length - 4)}</span>" + $"<span class=\"escape\">{key.Substring(key.Length - 2, 2)}</span>" : " "; var desc = value.HtmlDescription; if (value.OptionTypes != Substitutions.OptionTypes.None) { desc += "<br /><b>Options:</b> " + Join(", ", Substitutions.OptionTypeInfos .Where(i => (i.OptionType & value.OptionTypes) != 0) .Select(i => i.ShortName)); } new HtmlTableCell { InnerHtml = name }.AddTo(row, nameClasses); new HtmlTableCell { InnerHtml = desc }.AddTo(row, "desc"); } } }