Пример #1
0
 // 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);
         }
     }
 }
Пример #2
0
 // ReSharper disable UnusedMember.Local
 // Invoked via Reflection
 internal static void Initialize(BulkEmailPage page)
 // ReSharper restore UnusedMember.Local
 {
     if (!page.IsPostBack)
     {
         page.LogSelectJurisdictions.Initialize();
     }
 }
Пример #3
0
 // ReSharper disable UnusedMember.Local
 // Invoked via Reflection
 internal static void Initialize(BulkEmailPage page)
 // ReSharper restore UnusedMember.Local
 {
     if (!IsMasterUser)
     {
         page.TabMasterItem.Visible = false;
     }
 }
Пример #4
0
 // ReSharper disable UnusedMember.Local
 // Invoked via Reflection
 internal static void Initialize(BulkEmailPage page)
 // ReSharper restore UnusedMember.Local
 {
     if (!page.IsPostBack)
     {
         BuildSubstitutionTable(page);
         BuildSubstitutionsOptionsDisplay(page);
     }
 }
Пример #5
0
            // 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;
                    }
                }
            }
Пример #6
0
            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:&lt;name&gt;} for the link text" +
                                   " where &lt;name&gt; 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);
            }
Пример #7
0
            // 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;
                    }
                }
            }
Пример #8
0
 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);
     }
 }
Пример #9
0
            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>"
              : "&nbsp;";

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