using System; using System.Data; using System.Text; using System.Web; using System.Web.UI; using CMS.CMSHelper; using CMS.EmailEngine; using CMS.EventLog; using CMS.GlobalHelper; using CMS.IO; using CMS.PortalControls; using CMS.SiteProvider; public partial class CMSWebParts_Viewers_Documents_SendToFriend : CMSAbstractWebPart { #region "Variables" private bool mSendEmail = false; #endregion #region "Public properties" /// /// Gets or sets the text which will be displayed as header of webpart. /// public string HeaderText { get { return ValidationHelper.GetString(GetValue("HeaderText"), ""); } set { SetValue("HeaderText", value); lblHeader.Text = value; } } /// /// Gets or sets email address from which will be email send. /// public string EmailFrom { get { return ValidationHelper.GetString(GetValue("EmailFrom"), ""); } set { SetValue("EmailFrom", value); } } /// /// Gets or sets an email subject. /// public string EmailSubject { get { return ValidationHelper.GetString(GetValue("EmailSubject"), ""); } set { SetValue("EmailSubject", value); } } /// /// Gets or sets email template text. /// public string EmailTemplate { get { return ValidationHelper.GetString(GetValue("EmailTemplate"), ""); } set { SetValue("EmailTemplate", value); } } /// /// Hide form after email sent. /// public bool HideAfterEmailSent { get { return ValidationHelper.GetBoolean(this.GetValue("HideAfterEmailSent"), false); } set { this.SetValue("HideAfterEmailSent", value); } } #endregion #region "Document properties" /// /// Check permissions. /// public bool CheckPermissions { get { return ValidationHelper.GetBoolean(GetValue("CheckPermissions"), repItems.CheckPermissions); } set { SetValue("CheckPermissions", value); repItems.CheckPermissions = value; } } /// /// Class names. /// public string ClassNames { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("Classnames"), repItems.ClassNames), repItems.ClassNames); } set { SetValue("ClassNames", value); repItems.ClassNames = value; } } /// /// Combine with default culture. /// public bool CombineWithDefaultCulture { get { return ValidationHelper.GetBoolean(GetValue("CombineWithDefaultCulture"), repItems.CombineWithDefaultCulture); } set { SetValue("CombineWithDefaultCulture", value); repItems.CombineWithDefaultCulture = value; } } /// /// Filter out duplicate documents. /// public bool FilterOutDuplicates { get { return ValidationHelper.GetBoolean(GetValue("FilterOutDuplicates"), repItems.FilterOutDuplicates); } set { SetValue("FilterOutDuplicates", value); repItems.FilterOutDuplicates = value; } } /// /// Culture code. /// public string CultureCode { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("CultureCode"), repItems.CultureCode), repItems.CultureCode); } set { SetValue("CultureCode", value); repItems.CultureCode = value; } } /// /// Maximal relative level. /// public int MaxRelativeLevel { get { return ValidationHelper.GetInteger(GetValue("MaxRelativeLevel"), repItems.MaxRelativeLevel); } set { SetValue("MaxRelativeLevel", value); repItems.MaxRelativeLevel = value; } } /// /// Order by clause. /// public string OrderBy { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("OrderBy"), repItems.OrderBy), repItems.OrderBy); } set { SetValue("OrderBy", value); repItems.OrderBy = value; } } /// /// Nodes path. /// public string Path { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("Path"), null), null); } set { SetValue("Path", value); repItems.Path = value; } } /// /// Select only published nodes. /// public bool SelectOnlyPublished { get { return ValidationHelper.GetBoolean(GetValue("SelectOnlyPublished"), repItems.SelectOnlyPublished); } set { SetValue("SelectOnlyPublished", value); repItems.SelectOnlyPublished = value; } } /// /// Site name. /// public string SiteName { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("SiteName"), repItems.SiteName), repItems.SiteName); } set { SetValue("SiteName", value); repItems.SiteName = value; } } /// /// Where condition. /// public string WhereCondition { get { return DataHelper.GetNotEmpty(GetValue("WhereCondition"), repItems.WhereCondition); } set { SetValue("WhereCondition", value); repItems.WhereCondition = value; } } /// /// Select top N items. /// public int SelectTopN { get { return ValidationHelper.GetInteger(GetValue("SelectTopN"), repItems.SelectTopN); } set { SetValue("SelectTopN", value); repItems.SelectTopN = value; } } /// /// Gets or sets the columns to get. /// public string Columns { get { return DataHelper.GetNotEmpty(GetValue("Columns"), repItems.Columns); } set { SetValue("Columns", value); repItems.Columns = value; } } #endregion #region "Transformation properties" /// /// Gets or sets the name of the transforamtion which is used for displaying the results. /// public string TransformationName { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("TransformationName"), repItems.TransformationName), repItems.TransformationName); } set { SetValue("TransformationName", value); repItems.TransformationName = value; } } /// /// Gets or sets the name of the transforamtion which is used for displaying the results of the selected item. /// public string SelectedItemTransformationName { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("SelectedItemTransformationName"), repItems.SelectedItemTransformationName), repItems.SelectedItemTransformationName); } set { SetValue("SelectedItemTransformationName", value); repItems.SelectedItemTransformationName = value; } } /// /// Gets or sets the name of the transforamtion which is used for displaying the alternate results. /// public string AlternatingTransformationName { get { return DataHelper.GetNotEmpty(ValidationHelper.GetString(GetValue("AlternatingTransformationName"), repItems.AlternatingTransformationName), repItems.AlternatingTransformationName); } set { SetValue("AlternatingTransformationName", value); repItems.AlternatingTransformationName = value; } } #endregion #region "Stop processing" /// /// Returns true if the control processing should be stopped. /// public override bool StopProcessing { get { return base.StopProcessing; } set { base.StopProcessing = value; repItems.StopProcessing = value; } } #endregion /// /// Content loaded event handler. /// public override void OnContentLoaded() { base.OnContentLoaded(); SetupControl(); } /// /// Reloads data. /// public override void ReloadData() { base.ReloadData(); SetupControl(); } /// /// Initializes the control properties. /// protected void SetupControl() { // Disable resolving on email properties NotResolveProperties += "emailtemplate;emailsubject"; if (StopProcessing) { repItems.StopProcessing = true; } else { // Sets header label or hides it if property is not set if (HeaderText != String.Empty) { lblHeader.Text = HeaderText; } else { lblHeader.Visible = false; } btnSend.Text = GetString("SendToFriend.SendButtonLabel"); // hide message panel at first load pnlMessageText.Attributes.Add("style", "display:none"); lblYourMessage.Text = GetString("SendToFriend.YourMessageLabel"); // Label for 508 validation lblEmailTo.Text = GetString("SendToFriend.EnterEmail"); lblEmailTo.AssociatedControlID = "txtEmailTo"; lblEmailTo.Attributes.Add("style", "display:none;"); lblMessageText.Text = GetString("SendToFriend.EnterMessage"); lblMessageText.Attributes.Add("style", "display:none;"); lblMessageText.AssociatedControlID = "txtMessageText"; // add action for showing/hiding message panel lblYourMessage.Attributes.Add("onclick", "STF_ShowHideElem('" + pnlMessageText.ClientID + "');"); rfvEmailTo.ErrorMessage = GetString("SendToFriend.rfvEmailTo"); // register JavaScript function for showing/hiding message panel ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "STF_ShowHideElem", ScriptHelper.GetScript( @"function STF_ShowHideElem(elemid) { var elem = document.getElementById(elemid); if (elem != null) { if (elem.style.display == '') { elem.style.display = 'none'; } else { elem.style.display = ''; } } }" )); // SET UP REPEATER repItems.ControlContext = ControlContext; // Document properties repItems.CheckPermissions = CheckPermissions; repItems.ClassNames = ClassNames; repItems.CombineWithDefaultCulture = CombineWithDefaultCulture; repItems.CultureCode = CultureCode; repItems.MaxRelativeLevel = MaxRelativeLevel; repItems.OrderBy = OrderBy; repItems.SelectTopN = SelectTopN; repItems.Columns = Columns; repItems.SelectOnlyPublished = SelectOnlyPublished; repItems.FilterOutDuplicates = FilterOutDuplicates; repItems.Path = Path; repItems.SiteName = SiteName; repItems.WhereCondition = WhereCondition; // Transformation properties repItems.TransformationName = TransformationName; repItems.StopProcessing = true; } } /// /// OnPrerender override (Set visibility). /// protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); Visible = repItems.Visible && !StopProcessing; // Sets visibility of control based on repeater datasource if (DataHelper.DataSourceIsEmpty(repItems.DataSource) && repItems.HideControlForZeroRows) { Visible = false; } } /// /// Event after send button is clicked. /// protected void btnSend_Click(object sender, EventArgs e) { //check if the email is valid if (!ValidationHelper.IsEmail(txtEmailTo.Text)) { lblError.Text = GetString("SendToFriend.InvalidEmail"); } else { // indicates that email should be sent mSendEmail = true; repItems.StopProcessing = false; repItems.ReloadData(true); } } /// /// Render override. /// protected override void Render(HtmlTextWriter writer) { // if everything ok, email should be send if (mSendEmail) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); Html32TextWriter mwriter = new Html32TextWriter(sw); repItems.RenderControl(mwriter); repItems.Visible = false; // Prepare the macro resolver ContextResolver resolver = ContextResolver.CreateContextChild(); string[,] replacements = new string[2, 2]; // Prepare macro replacements replacements[0, 0] = "message"; replacements[0, 1] = txtMessageText.Text; replacements[1, 0] = "document"; replacements[1, 1] = URLHelper.MakeLinksAbsolute(sb.ToString()); resolver.SourceParameters = replacements; if (EmailTemplate != null) { EmailMessage message = new EmailMessage(); message.EmailFormat = EmailFormatEnum.Html; message.From = EmailFrom; message.Recipients = txtEmailTo.Text; // Get current css stylesheet string styleSheet = GetCssFileLink(); if (!String.IsNullOrEmpty(styleSheet)) { styleSheet = URLHelper.MakeLinksAbsolute(styleSheet); } // resolve EmailSubject here message.Subject = resolver.ResolveMacros(EmailSubject); // resolve EmailTemplate, wrap to HTML code and add the CSS files message.Body = "" + styleSheet + "" + resolver.ResolveMacros(EmailTemplate) + ""; // check recipients if ((message.Recipients != null) && (message.Recipients.Trim() != "")) { try { EmailSender.SendEmail(CMSContext.CurrentSiteName, message); // Display message, email was sent successfully lblInfo.Text = GetString("sendtofriend.emailsent"); txtEmailTo.Text = ""; txtMessageText.Text = ""; if (HideAfterEmailSent) { plcForm.Visible = false; } } catch (Exception ex) { lblError.Text = GetString("SendToFriend.SendEmailError"); try { EventLogProvider eventLog = new EventLogProvider(); eventLog.LogEvent("Send email", "SendToFriend", ex); } catch { // Unable to log the event } } } } } base.Render(writer); } /// /// Returns the links to CSS files which should be used for displaying the page. /// private static string GetCssFileLink() { // Get stylesheet CssStylesheetInfo csi = null; if (CMSContext.CurrentPageInfo.DocumentStylesheetID > 0) { csi = CssStylesheetInfoProvider.GetCssStylesheetInfo(CMSContext.CurrentPageInfo.DocumentStylesheetID); } // If not found, get default stylesheet from the current site if ((csi == null) && (CMSContext.CurrentSite.SiteDefaultStylesheetID > 0)) { csi = CssStylesheetInfoProvider.GetCssStylesheetInfo(CMSContext.CurrentSite.SiteDefaultStylesheetID); } // If stylesheet found, get the URL if (csi != null) { return CSSHelper.GetCSSFileLink(CSSHelper.GetStylesheetUrl(csi.StylesheetName)); } return null; } /// /// Clears cache. /// public override void ClearCache() { repItems.ClearCache(); } }