using System; using System.Data; using System.Threading; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.EventManager; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.DocumentEngine; using CMS.UIControls; using CMS.ExtendedControls; using CMS.ExtendedControls.ActionsConfig; using DocTreeNode = CMS.DocumentEngine.TreeNode; public partial class CMSModules_EventManager_Controls_EventAttendeesSendEmail : CMSAdminControl { #region "Variables" private int mEventID = 0; HeaderAction btnSend; #endregion #region "Properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMess; } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { plcMess.IsLiveSite = value; base.IsLiveSite = value; } } /// /// Event ID. /// public int EventID { get { return mEventID; } set { mEventID = value; } } #endregion #region "Methods" protected void Page_Init(object sender, EventArgs e) { InitHeaderActions(); } protected void Page_Load(object sender, EventArgs e) { htmlEmail.AutoDetectLanguage = false; htmlEmail.DefaultLanguage = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; htmlEmail.EditorAreaCSS = String.Empty; htmlEmail.ResolverName = "BookingResolver"; } public override void ReloadData(bool forceLoad) { TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); DocTreeNode nd = tree.SelectSingleNode(EventID, CMSContext.PreferredCultureCode, tree.CombineWithDefaultCulture, false); if (nd == null) { ShowInformation(GetString("editedobject.notexists")); plcSend.Visible = false; lblTitle.Visible = false; return; } //Enable controls txtSenderName.Enabled = true; txtSenderEmail.Enabled = true; txtSubject.Enabled = true; htmlEmail.Enabled = true; btnSend.Enabled = true; if (forceLoad) { string siteName = CMSContext.CurrentSiteName; txtSenderEmail.Text = SettingsKeyProvider.GetStringValue(siteName + ".CMSEventManagerInvitationFrom"); txtSenderName.Text = SettingsKeyProvider.GetStringValue(siteName + ".CMSEventManagerSenderName"); txtSubject.Text = SettingsKeyProvider.GetStringValue(siteName + ".CMSEventManagerInvitationSubject"); } // Disable form if no attendees present or user doesn't have modify permission if (CMSContext.CurrentUser.IsAuthorizedPerResource("cms.eventmanager", "Modify")) { DataSet ds = EventAttendeeInfoProvider.GetEventAttendees(EventID, null, null, "AttendeeID", 1); if (DataHelper.DataSourceIsEmpty(ds)) { DisableForm(); lblInfo.Text = GetString("Events_List.NoAttendees"); lblInfo.Visible = true; } } else { DisableForm(); ShowWarning(GetString("events_sendemail.modifypermission"), null, null); } } /// /// Initializes header action control. /// private void InitHeaderActions() { HeaderActions.ActionsList.Clear(); HeaderActions.ActionsList.Add(btnSend = new HeaderAction() { ControlType = HeaderActionTypeEnum.LinkButton, CommandName = ComponentEvents.SUBMIT, Text = GetString("general.send"), Tooltip = GetString("general.send"), ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/resendemail.png"), Enabled = true }); HeaderActions.ActionPerformed += new CommandEventHandler(hdrActions_ActionPerformed); HeaderActions.ReloadData(); } protected void hdrActions_ActionPerformed(object sender, CommandEventArgs e) { switch (e.CommandName) { case ComponentEvents.SUBMIT: Send(); break; } } /// /// Disable form. /// private void DisableForm() { txtSenderName.Enabled = false; txtSenderEmail.Enabled = false; txtSubject.Enabled = false; htmlEmail.Enabled = false; btnSend.Enabled = false; } /// /// Sends e-mail to all attendees. /// protected void Send() { // Check 'Modify' permission if (!CheckPermissions("cms.eventmanager", "Modify")) { return; } txtSenderName.Text = txtSenderName.Text.Trim(); txtSenderEmail.Text = txtSenderEmail.Text.Trim(); txtSubject.Text = txtSubject.Text.Trim(); // Validate the fields string errorMessage = new Validator().NotEmpty(txtSenderName.Text, GetString("Events_SendEmail.EmptySenderName")) .NotEmpty(txtSenderEmail.Text, GetString("Events_SendEmail.EmptySenderEmail")) .NotEmpty(txtSubject.Text, GetString("Events_SendEmail.EmptyEmailSubject")) .IsEmail(txtSenderEmail.Text, GetString("Events_SendEmail.InvalidEmailFormat")) .Result; if (!String.IsNullOrEmpty(errorMessage)) { ShowError(errorMessage); return; } string subject = txtSubject.Text; string emailBody = htmlEmail.ResolvedValue; // Get event node data TreeProvider mTree = new TreeProvider(); DocTreeNode node = mTree.SelectSingleNode(EventID); if (node != null && CMSString.Equals(node.NodeClassName, "cms.bookingevent", true)) { // Initialize macro resolver ContextResolver resolver = ContextResolver.GetInstance(); resolver.KeepUnresolvedMacros = true; resolver.SourceData = new object[] { node }; // Add named source data resolver.SetNamedSourceData("Event", node); // Event date string macro DateTime eventDate = ValidationHelper.GetDateTime(node.GetValue("EventDate"), DateTimeHelper.ZERO_TIME); DateTime eventEndDate = ValidationHelper.GetDateTime(node.GetValue("EventEndDate"), DateTimeHelper.ZERO_TIME); bool isAllDay = ValidationHelper.GetBoolean(node.GetValue("EventAllDay"), false); string[,] macro = new string[1, 2]; macro[0, 0] = "eventdatestring"; macro[0, 1] = EventProvider.GetEventDateString(eventDate, eventEndDate, isAllDay, TimeZoneHelper.GetSiteTimeZoneInfo(CMSContext.CurrentSite), CMSContext.CurrentSiteName); resolver.SourceParameters = macro; // Resolve e-mail body and subject macros and make links absolute emailBody = resolver.ResolveMacros(emailBody); emailBody = URLHelper.MakeLinksAbsolute(emailBody); subject = TextHelper.LimitLength(resolver.ResolveMacros(subject), 450); // EventSendEmail manages sending e-mails to all attendees EventSendEmail ese = new EventSendEmail(EventID, CMSContext.CurrentSiteName, subject, emailBody, txtSenderName.Text.Trim(), txtSenderEmail.Text.Trim()); ShowConfirmation(GetString("Events_SendEmail.EmailSent")); } } #endregion }