public void ApplyFormating(NoticeMessage message) { var output = new StringBuilderTextileFormatter(); var formatter = new TextileFormatter(output); message.Subject = VelocityArguments.Replace(message.Subject, argMatchReplace); formatter.Format(message.Body); message.Body = Master.Replace("%CONTENT%", output.GetFormattedText()); }
public void ApplyFormating(NoticeMessage message) { if (!string.IsNullOrEmpty(message.Subject)) { message.Subject = VelocityArgumentsRegex.Replace(message.Subject, m => m.Groups["arg"].Value); message.Subject = message.Subject.Replace(Environment.NewLine, " ").Trim(); } if (!string.IsNullOrEmpty(message.Body)) { message.Body = VelocityArgumentsRegex.Replace(message.Body, m => m.Groups["arg"].Value); message.Body = message.Body.Replace(Environment.NewLine, " ").Trim(); } }
public void ApplyFormating(NoticeMessage message) { var output = new StringBuilderTextileFormatter(); var formatter = new TextileFormatter(output); if (!string.IsNullOrEmpty(message.Subject)) { message.Subject = VelocityArguments.Replace(message.Subject, m => m.Result("${arg}")); } if (!string.IsNullOrEmpty(message.Body)) { formatter.Format(message.Body); var logoMail = ConfigurationManager.AppSettings["web.logo.mail"]; var logo = string.IsNullOrEmpty(logoMail) ? "http://cdn.teamlab.com/media/newsletters/images/header_04.jpg" : logoMail; message.Body = Resources.TemplateResource.HtmlMaster.Replace("%CONTENT%", output.GetFormattedText()).Replace("%LOGO%", logo); var footer = message.GetArgument("WithPhoto"); var partner = message.GetArgument("Partner"); var res = String.Empty; if (partner != null) { res = partner.Value.ToString(); } if (String.IsNullOrEmpty(res) && footer != null) { switch ((string)footer.Value) { case "photo": res = Resources.TemplateResource.FooterWithPhoto; break; case "links": res = Resources.TemplateResource.FooterWithLinks; break; default: res = String.Empty; break; } } message.Body = message.Body.Replace("%FOOTER%", res); var mail = message.Recipient.Addresses.FirstOrDefault(r => r.Contains("@")); var domain = ConfigurationManager.AppSettings["web.teamlab-site"]; var site = string.IsNullOrEmpty(domain) ? "http://www.teamlab.com" : domain; var link = site + string.Format("/Unsubscribe.aspx?id={0}", HttpServerUtility.UrlTokenEncode(Security.Cryptography.InstanceCrypto.Encrypt(Encoding.UTF8.GetBytes(mail.ToLowerInvariant())))); var text = string.Format(Resources.TemplateResource.TextForFooter, link, DateTime.UtcNow.Year); message.Body = message.Body.Replace("%TEXTFOOTER%", text); } }
public void ApplyFormating(NoticeMessage message) { var body = string.Empty; if (!string.IsNullOrEmpty(message.Subject)) { body += VelocityArguments.Replace(message.Subject, ArgMatchReplace) + Environment.NewLine; message.Subject = string.Empty; } if (string.IsNullOrEmpty(message.Body)) return; var lines = message.Body.Split(new[] {Environment.NewLine, "\n"}, StringSplitOptions.None); for (var i = 0; i < lines.Length - 1; i++) { if (string.IsNullOrEmpty(lines[i])) { body += Environment.NewLine; continue; } lines[i] = VelocityArguments.Replace(lines[i], ArgMatchReplace); body += LinkReplacer.Replace(lines[i], EvalLink) + Environment.NewLine; } lines[lines.Length - 1] = VelocityArguments.Replace(lines[lines.Length - 1], ArgMatchReplace); body += LinkReplacer.Replace(lines[lines.Length - 1], EvalLink); body = TextileReplacer.Replace(HttpUtility.HtmlDecode(body), ""); //Kill textile markup body = BrReplacer.Replace(body, Environment.NewLine); body = TagReplacer.Replace(body, Environment.NewLine); message.Body = body; }
public static void SendAutoReports(DateTime datetime) { try { var now = DateTime.UtcNow.Date.AddHours(DateTime.UtcNow.Hour); foreach (var t in new DaoFactory(Global.DbID, -1).GetReportDao().GetAutoTemplates()) { try { var tenant = CoreContext.TenantManager.GetTenant(t.Tenant); if (tenant != null && tenant.Status == TenantStatus.Active && CoreContext.PaymentManager.GetTariff(tenant.TenantId).State < TariffState.NotPaid) { CoreContext.TenantManager.SetCurrentTenant(tenant); var cron = new CronExpression(t.Cron) { TimeZone = CoreContext.TenantManager.GetCurrentTenant().TimeZone }; var date = cron.GetTimeAfter(now.AddTicks(-1)); LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Find auto report: {0} - {1}, now: {2}, date: {3}", t.Name, t.Cron, now, date); if (date == now) { var user = CoreContext.UserManager.GetUsers(t.CreateBy); if (user.ID != Constants.LostUser.ID && user.Status == EmployeeStatus.Active) { SecurityContext.AuthenticateMe(user.ID); Thread.CurrentThread.CurrentCulture = user.GetCulture(); Thread.CurrentThread.CurrentUICulture = user.GetCulture(); var result = ReportHelper.BuildReport(t.ReportType, t.Filter, ReportViewType.EMail, t.Id); var message = new NoticeMessage(user, HttpUtility.HtmlDecode(t.Name), result, "html"); message.AddArgument(new TagValue(CommonTags.SendFrom, CoreContext.TenantManager.GetCurrentTenant().Name)); message.AddArgument(new TagValue(CommonTags.Priority, 1)); LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Send auto report: {0} to {1}, tenant: {2}", t.Name, user, CoreContext.TenantManager.GetCurrentTenant()); WorkContext.NotifyContext.DispatchEngine.Dispatch(message, "email.sender"); } } } } catch (System.Security.SecurityException se) { LogManager.GetLogger("ASC.Web.Projects.Reports").Info("SendAutoReports", se); } catch (Exception ex) { LogManager.GetLogger("ASC.Web.Projects.Reports").ErrorFormat("TemplateId: {0}, Temaplate: {1}\r\n{2}", t.Id, t.Filter.ToXml(), ex); } } } catch (Exception ex) { LogManager.GetLogger("ASC.Web.Projects.Reports").Error("SendAutoReports", ex); } }
public void TestTextileStyler() { var message = new NoticeMessage() { Body = pattern }; new TextileStyler().ApplyFormating(message); }
public void TestJabberStyler() { var message = new NoticeMessage() { Body = pattern }; new JabberStyler().ApplyFormating(message); }
public static void SendEmptyAutoReports(ReportTemplate template) { var result = string.Empty; var parameters = new XsltArgumentList(); parameters.AddParam("p0", string.Empty, CommonLinkUtility.GetFullAbsolutePath("~/products/projects/templates.aspx")); parameters.AddParam("p1", string.Empty, ReportResource.ChangeSettings); var xml = string.Format("<div class='noContentBlock'>{0}</div>", ProjectsCommonResource.NoData); var fileName = Path.Combine(HttpRuntime.AppDomainAppPath, string.Format("products\\projects\\templates\\{0}.xsl", ReportViewType.EMail)).ToLower(); var xslt = new XslCompiledTransform(); if (File.Exists(fileName)) { xslt.Load(fileName); using (var reader = XmlReader.Create(new StringReader(xml))) using (var writer = new StringWriter()) using (var xmlwriter = XmlWriter.Create(writer, new XmlWriterSettings() { Encoding = Encoding.UTF8 })) { xslt.Transform(reader, parameters, writer); result = writer.ToString(); } var user = CoreContext.UserManager.GetUsers(new Guid(template.CreateBy)); var message = new NoticeMessage(user, template.Name, result, "html"); log4net.LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Send auto report: {0}", template.Name); WorkContext.NotifyContext.DispatchEngine.Dispatch(message, "email.sender"); } }
public static void SendAutoReports(DateTime datetime) { try { var now = DateTime.UtcNow.Date.AddHours(DateTime.UtcNow.Hour); foreach (var t in new DaoFactory(Global.DB_ID, -1).GetReportDao().GetAutoTemplates()) { try { var tenant = CoreContext.TenantManager.GetTenant(t.Tenant); if (tenant != null && tenant.Status == TenantStatus.Active) { CoreContext.TenantManager.SetCurrentTenant(tenant); var cron = new CronExpression(t.Cron) { TimeZone = CoreContext.TenantManager.GetCurrentTenant().TimeZone }; var date = cron.GetTimeAfter(now.AddTicks(-1)); log4net.LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Find auto report: {0} - {1}, now: {2}, date: {3}", t.Name, t.Cron, now, date); if (date == now) { var user = CoreContext.UserManager.GetUsers(new Guid(t.CreateBy)); if (user.ID != ASC.Core.Users.Constants.LostUser.ID /*&& user.Status*/) { SecurityContext.AuthenticateMe(user.Email, CoreContext.Authentication.GetUserPasswordHash(user.ID)); var result = BuildReport(t.ReportType, t.Filter, ReportViewType.EMail); if (!string.IsNullOrEmpty(result)) { var message = new NoticeMessage(user, HtmlUtil.SanitizeFragment(HttpUtility.HtmlDecode(t.Name)), result, "html"); log4net.LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Send auto report: {0} to {1}, tenant: {2}", t.Name, user, CoreContext.TenantManager.GetCurrentTenant()); WorkContext.NotifyContext.DispatchEngine.Dispatch(message, "email.sender"); } else { SendEmptyAutoReports(t); } } } } } catch (System.Security.SecurityException se) { LogManager.GetLogger("ASC.Web.Projects.Reports").Info("SendAutoReports", se); } catch (Exception ex) { LogManager.GetLogger("ASC.Web.Projects.Reports").Error("SendAutoReports", ex); } } } catch (Exception ex) { LogManager.GetLogger("ASC.Web.Projects.Reports").Error("SendAutoReports", ex); } }
private void StyleMessage(NoticeMessage message) { try { if (!stylers.ContainsKey(message.Pattern.Styler)) { var styler = Activator.CreateInstance(Type.GetType(message.Pattern.Styler, true)) as IPatternStyler; if (styler != null) { stylers.Add(message.Pattern.Styler, styler); } } stylers[message.Pattern.Styler].ApplyFormating(message); } catch (Exception exc) { log.Warn("error styling message", exc); } }
private SendResponse CreateNoticeMessageFromNotifyRequest(NotifyRequest request, string sender, out NoticeMessage noticeMessage) { if (request == null) throw new ArgumentNullException("request"); var recipientProvider = request.NotifySource.GetRecipientsProvider(); var recipient = request.Recipient as IDirectRecipient; var addresses = recipient.Addresses; if (addresses == null || !addresses.Any()) { addresses = recipientProvider.GetRecipientAddresses(request.Recipient as IDirectRecipient, sender, request.ObjectID); recipient = new DirectRecipient(request.Recipient.ID, request.Recipient.Name, addresses); } recipient = recipientProvider.FilterRecipientAddresses(recipient); noticeMessage = request.CreateMessage(recipient); addresses = recipient.Addresses; if (addresses == null || !addresses.Any(a => !string.IsNullOrEmpty(a))) { //checking addresses return new SendResponse(request.NotifyAction, sender, recipient, new NotifyException(string.Format("For recipient {0} by sender {1} no one addresses getted.", recipient, sender))); } var pattern = request.GetSenderPattern(sender); if (pattern == null) { return new SendResponse(request.NotifyAction, sender, recipient, new NotifyException(String.Format("For action \"{0}\" by sender \"{1}\" no one patterns getted.", request.NotifyAction, sender))); } noticeMessage.Pattern = pattern; noticeMessage.ContentType = pattern.ContentType; noticeMessage.AddArgument(request.Arguments.ToArray()); var patternProvider = request.NotifySource.GetPatternProvider(); var formatter = patternProvider.GetFormatter(pattern); try { if (formatter != null) { formatter.FormatMessage(noticeMessage, noticeMessage.Arguments); } sysTagFormatter.FormatMessage( noticeMessage, new[] { new TagValue(Context._SYS_RECIPIENT_ID, request.Recipient.ID), new TagValue(Context._SYS_RECIPIENT_NAME, request.Recipient.Name), new TagValue(Context._SYS_RECIPIENT_ADDRESS, addresses != null && addresses.Length > 0 ? addresses[0] : null) } ); //Do styling here if (!string.IsNullOrEmpty(pattern.Styler)) { //We need to run through styler before templating StyleMessage(noticeMessage); } } catch (Exception exc) { return new SendResponse(request.NotifyAction, sender, recipient, exc); } return null; }
public void ApplyFormating(NoticeMessage message) { bool isPromoTmpl = false; var output = new StringBuilderTextileFormatter(); var formatter = new TextileFormatter(output); if (!string.IsNullOrEmpty(message.Subject)) { message.Subject = VelocityArguments.Replace(message.Subject, m => m.Result("${arg}")); } if (!string.IsNullOrEmpty(message.Body)) { formatter.Format(message.Body); var isPromo = message.GetArgument("isPromoLetter"); if (isPromo != null && (string)isPromo.Value == "true") { isPromoTmpl = true; } var logoImg = ""; if (isPromoTmpl) { logoImg = "http://cdn.teamlab.com/media/newsletters/images/logo.png"; } else { logoImg = ConfigurationManager.AppSettings["web.logo.mail"]; if (String.IsNullOrEmpty(logoImg)) { var logo = message.GetArgument("LetterLogo"); if (logo != null && (string)logo.Value != "") { logoImg = (string)logo.Value; } else { logoImg = "http://cdn.teamlab.com/media/newsletters/images/header_08.png"; } } } var template = isPromoTmpl ? Resources.TemplateResource.HtmlMasterPromo : Resources.TemplateResource.HtmlMaster; message.Body = template.Replace("%CONTENT%", output.GetFormattedText()).Replace("%LOGO%", logoImg); var footer = message.GetArgument("WithPhoto"); var partner = message.GetArgument("Partner"); var res = String.Empty; if (partner != null) { res = partner.Value.ToString(); } if (String.IsNullOrEmpty(res) && footer != null) { switch ((string)footer.Value) { case "photo": res = Resources.TemplateResource.FooterWithPhoto; break; case "links": res = Resources.TemplateResource.FooterWithLinks; break; case "personal": res = Resources.TemplateResource.FooterPersonal; break; default: res = String.Empty; break; } } message.Body = message.Body.Replace("%FOOTER%", res); var text = ""; var noUnsubscribeLink = message.GetArgument("noUnsubscribeLink"); if (noUnsubscribeLink == null || (string)noUnsubscribeLink.Value == "false") { var isHosted = ConfigurationManager.AppSettings["core.payment-partners-hosted"]; if (String.IsNullOrEmpty(isHosted) || isHosted == "false") { var mail = message.Recipient.Addresses.FirstOrDefault(r => r.Contains("@")); var domain = ConfigurationManager.AppSettings["web.teamlab-site"]; var site = string.IsNullOrEmpty(domain) ? "http://www.onlyoffice.com" : domain; var link = site + string.Format("/Unsubscribe.aspx?id={0}", HttpServerUtility.UrlTokenEncode(Security.Cryptography.InstanceCrypto.Encrypt(Encoding.UTF8.GetBytes(mail.ToLowerInvariant())))); text = string.Format(Resources.TemplateResource.TextForFooterWithUnsubscribe, link); } } text += string.Format(Resources.TemplateResource.TextForFooter, DateTime.UtcNow.Year, string.Empty); message.Body = message.Body.Replace("%TEXTFOOTER%", text); } }