using System; using System.Data; using System.Collections; using System.Threading; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using CMS.CMSHelper; using CMS.EmailEngine; using CMS.FormControls; using CMS.GlobalHelper; using CMS.IO; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; using CMS.ExtendedControls; public partial class CMSModules_Membership_Pages_Users_General_User_MassEmail : CMSUsersPage { private int siteId = 0; private FormEngineUserControl groupsControl = null; protected void Page_Load(object sender, EventArgs e) { // Don't show generic roles in role selector except role 'Everyone' roles.UseFriendlyMode = true; roles.DisplayEveryone = true; // Get current user CurrentUserInfo currentUser = CMSContext.CurrentUser; if (currentUser == null) { return; } CurrentMaster.DisplaySiteSelectorPanel = true; btnSend.Click += new EventHandler(btnSend_Click); siteSelector.UniSelector.OnSelectionChanged += new EventHandler(Site_Changed); siteSelector.DropDownSingleSelect.AutoPostBack = true; siteSelector.AllowSetSpecialFields = true; // Try to get site ID from query string siteId = SiteID; // Disable sites dropdown in cmsdesk if (siteId > 0) { // Hide site selector CurrentMaster.DisplaySiteSelectorPanel = false; siteSelector.StopProcessing = true; } else { if (!RequestHelper.IsPostBack()) { siteSelector.Value = UniSelector.US_ALL_RECORDS; } // Load selected site from site selector if (RequestHelper.IsPostBack()) { siteId = ValidationHelper.GetInteger(siteSelector.Value, 0); } // Set siteid to other selectors roles.GlobalRoles = (siteSelector.SiteID == UniSelector.US_ALL_RECORDS); roles.SiteRoles = !(siteSelector.SiteID == UniSelector.US_ALL_RECORDS); } roles.SiteID = siteId; roles.CurrentSelector.SelectionMode = SelectionModeEnum.Multiple; roles.CurrentSelector.ResourcePrefix = "addroles"; roles.UseCodeNameForSelection = false; roles.ShowSiteFilter = false; users.SiteID = siteId; users.IsLiveSite = false; users.UniSelector.ReturnColumnName = "UserID"; users.ShowSiteFilter = false; // Display/hide specific selectors according to selected site EnsureSelectorPanels(); // Add current user email at first load if (!RequestHelper.IsPostBack() && (currentUser != null)) { txtFrom.Text = currentUser.Email; } // Initialize masterpage and other controls lblSite.Text = GetString("general.site") + ResHelper.Colon; lblFrom.Text = GetString("general.fromemail") + ResHelper.Colon; lblSubject.Text = GetString("general.subject") + ResHelper.Colon; btnSend.Text = GetString("general.send"); uploader.AddButtonImagePath = GetImageUrl("Objects/CMS_User/addattachment.png"); pnlAttachments.GroupingText = GetString("general.attachments"); ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "IsSubjectEmpty", ScriptHelper.GetScript(@" function IsEmailEmpty() { var obj = document.getElementById('" + txtSubject.ClientID + @"'); if (obj != null) { if ((obj.value == null) || obj.value == '' || obj.value.replace(/ /g,'') == '') { if (!confirm(" + ScriptHelper.GetString(GetString("massemail.emptyemailsubject")) + @")) { return false; } } } return true; } ")); btnSend.OnClientClick = "return IsEmailEmpty()"; // Hides HTML or text area according to e-mail format in settings EnsureEmailFormatRegions(); // Initialize the e-mail text editor InitHTMLEditor(); } /// /// Handles change in site selection. /// protected void Site_Changed(object sender, EventArgs e) { // Delete users users.Value = null; users.ReloadData(); // Delete roles roles.Value = null; roles.Reload(true); // Delete groups if (groupsControl != null) { groupsControl.Value = String.Empty; groupsControl.SetValue("reloaddata", true); } // Hide HTML or text area according to e-mail format in settings EnsureEmailFormatRegions(); pnlUpdate.Update(); } /// /// Displays or hides specific selectors according to selected site. /// protected void EnsureSelectorPanels() { if (siteId > 0) { // Check group availability and try to load group selector if (AddGroupSelector(siteId)) { // Display groups panel pnlAccordionGroups.Visible = true; } else { // Hide groups panel pnlAccordionGroups.Visible = false; } } else { // Hide groups panels pnlAccordionGroups.Visible = false; } } /// /// Loads group selector control to the page. /// /// Site ID /// Returns true if site contains group and group selector was loaded private bool AddGroupSelector(int siteId) { SiteInfo si = SiteInfoProvider.GetSiteInfo(siteId); if ((si != null) && (ModuleCommands.CommunitySiteHasGroup(si.SiteID))) { groupsControl = Page.LoadUserControl("~/CMSModules/Groups/FormControls/MultipleGroupSelector.ascx") as FormEngineUserControl; if (groupsControl != null) { groupsControl.FormControlParameter = siteId; groupsControl.IsLiveSite = false; groupsControl.ID = "selectgroups"; groupsControl.ShortID = "sg"; groupsControl.SetValue("ReturnColumnName", "GroupID"); plcGroupSelector.Controls.Add(groupsControl); return true; } } return false; } /// /// Clear page. /// protected void btnClear_Click(object sender, EventArgs e) { txtSubject.Text = String.Empty; txtPlainText.Text = String.Empty; htmlText.ResolvedValue = String.Empty; txtFrom.Text = CMSContext.CurrentUser.Email; if (groupsControl != null) { groupsControl.Value = String.Empty; groupsControl.SetValue("reloaddata", true); } users.Value = String.Empty; users.ReloadData(); roles.Value = String.Empty; roles.Reload(true); } /// /// Sends the email. /// protected void btnSend_Click(object sender, EventArgs e) { // Check "modify" permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify")) { RedirectToAccessDenied("CMS.Users", "Modify"); } // Validate first string errorMessage = new Validator().IsEmail(txtFrom.Text, GetString("general.correctemailformat")).Result; // Get recipients string groupIds = null; if (groupsControl != null) { groupIds = Convert.ToString(groupsControl.Value); } string userIDs = Convert.ToString(users.Value); string roleIDs = Convert.ToString(roles.Value); if (string.IsNullOrEmpty(groupIds) && string.IsNullOrEmpty(userIDs) && string.IsNullOrEmpty(roleIDs)) { errorMessage = GetString("massemail.norecipients"); } if (!string.IsNullOrEmpty(errorMessage)) { ShowError(errorMessage); return; } // Get resolver to resolve context macros ContextResolver resolver = ContextResolver.GetInstance(); // Create the message EmailMessage message = new EmailMessage(); message.Subject = resolver.ResolveMacros(txtSubject.Text); message.From = txtFrom.Text; if (plcText.Visible) { message.Body = resolver.ResolveMacros(htmlText.ResolvedValue); } if (plcPlainText.Visible) { message.PlainTextBody = resolver.ResolveMacros(txtPlainText.Text); } // Get the attachments HttpPostedFile[] attachments = uploader.PostedFiles; foreach (HttpPostedFile att in attachments) { message.Attachments.Add(new EmailAttachment(StreamWrapper.New(att.InputStream), Path.GetFileName(att.FileName), Guid.NewGuid(), DateTime.Now, siteId)); } // Check if list of roleIds contains generic role 'Everyone' bool containsEveryone = false; RoleInfo roleEveryone = null; if (!String.IsNullOrEmpty(roleIDs)) { roleEveryone = RoleInfoProvider.GetRoleInfo(CMSConstants.ROLE_EVERYONE, siteId); if ((roleEveryone != null) && (";" + roleIDs + ";").Contains(";" + roleEveryone.RoleID.ToString() + ";")) { containsEveryone = true; } } // Send messages using email engine EmailSender.SendMassEmails(message, userIDs, roleIDs, groupIds, siteId, containsEveryone); ShowConfirmation(GetString("massemail.emailsent")); btnClear.Visible = true; } /// /// Initializes HTML editor's settings. /// protected void InitHTMLEditor() { htmlText.AutoDetectLanguage = false; htmlText.DefaultLanguage = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; htmlText.ToolbarSet = "SimpleEdit"; htmlText.MediaDialogConfig.UseFullURL = true; htmlText.LinkDialogConfig.UseFullURL = true; htmlText.QuickInsertConfig.UseFullURL = true; } /// /// Hides HTML or text area according to e-mail format in settings. /// protected void EnsureEmailFormatRegions() { string siteName = null; plcPlainText.Visible = true; plcText.Visible = true; if (siteId > 0) { // Get site name siteName = SiteInfoProvider.GetSiteName(siteId); } // Get e-mail format from settings EmailFormatEnum emailFormat = EmailHelper.GetEmailFormat(siteName); switch (emailFormat) { case EmailFormatEnum.Html: plcPlainText.Visible = false; break; case EmailFormatEnum.PlainText: plcText.Visible = false; break; } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Set proper header CSS classes for accordeon for (int i = 0; i < ajaxAccordion.Panes.Count; i++) { if (i == ajaxAccordion.SelectedIndex) { ajaxAccordion.Panes[i].HeaderCssClass = ajaxAccordion.HeaderSelectedCssClass; } else { ajaxAccordion.Panes[i].HeaderCssClass = ajaxAccordion.HeaderCssClass; } } } }