Example #1
0
 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());
 }
Example #2
0
 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);
            }
        }
Example #4
0
 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;
 }
Example #5
0
        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);
            }
        }
Example #6
0
 public void TestTextileStyler()
 {
     var message = new NoticeMessage() { Body = pattern };
     new TextileStyler().ApplyFormating(message);
 }
Example #7
0
 public void TestJabberStyler()
 {
     var message = new NoticeMessage() { Body = pattern };
     new JabberStyler().ApplyFormating(message);
 }
Example #8
0
 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");
     }
 }
Example #9
0
        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);
            }
        }
Example #10
0
 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);
     }
 }
Example #11
0
        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;
        }
Example #12
0
        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);
            }
        }