示例#1
0
        TextTemplateParser.BlockNode TextNode(EmailTemplateMessageEmbedded message)
        {
            if (message.TextParsedNode == null)
            {
                string body = message.Text;

                if (template.MasterTemplate != null)
                {
                    var emt  = template.MasterTemplate.RetrieveAndRemember();
                    var emtm =
                        emt.GetCultureMessage(message.CultureInfo.ToCultureInfo()) ??
                        emt.GetCultureMessage(message.CultureInfo.ToCultureInfo().Parent) ??
                        emt.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()) ??
                        emt.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo().Parent);

                    if (emtm != null)
                    {
                        body = EmailMasterTemplateEntity.MasterTemplateContentRegex.Replace(emtm.Text, m => body);
                    }
                }

                message.TextParsedNode = TextTemplateParser.Parse(body, qd, template.Model?.ToType());
            }

            return((TextTemplateParser.BlockNode)message.TextParsedNode);
        }
示例#2
0
        TextTemplateParser.BlockNode SubjectNode(EmailTemplateMessageEmbedded message)
        {
            if (message.SubjectParsedNode == null)
            {
                message.SubjectParsedNode = TextTemplateParser.Parse(message.Subject, qd, template.Model?.ToType());
            }

            return((TextTemplateParser.BlockNode)message.SubjectParsedNode);
        }
示例#3
0
        static string?EmailTemplateMessageSubject_StaticPropertyValidation(EmailTemplateMessageEmbedded message, PropertyInfo pi)
        {
            if (message.SubjectParsedNode as TextTemplateParser.BlockNode == null)
            {
                try
                {
                    message.SubjectParsedNode = ParseTemplate(message.GetParentEntity <EmailTemplateEntity>(), message.Subject, out string errorMessage);
                    return(errorMessage.DefaultToNull());
                }
                catch (Exception ex)
                {
                    return(ex.Message);
                }
            }

            return(null);
        }
        public IEnumerable <EmailMessageEntity> CreateEmailMessageInternal()
        {
            ExecuteQuery();

            foreach (EmailAddressEmbedded from in GetFrom())
            {
                foreach (List <EmailOwnerRecipientData> recipients in GetRecipients())
                {
                    EmailMessageEntity email;
                    try
                    {
                        CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault()?.ToCultureInfo() ??
                                         EmailLogic.Configuration.DefaultCulture.ToCultureInfo();

                        email = new EmailMessageEntity
                        {
                            Target     = entity?.ToLite() ?? (this.model !.UntypedEntity as Entity)?.ToLite(),
                            Recipients = recipients.Select(r => new EmailRecipientEmbedded(r.OwnerData)
                            {
                                Kind = r.Kind
                            }).ToMList(),
                            From            = from,
                            IsBodyHtml      = template.IsBodyHtml,
                            EditableMessage = template.EditableMessage,
                            Template        = template.ToLite(),
                            Attachments     = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g,
                                                                                                                                new EmailTemplateLogic.GenerateAttachmentContext(this.qd, template, dicTokenColumn, currentRows, ci)
                            {
                                ModelType = template.Model?.ToType(),
                                Model     = model,
                                Entity    = entity,
                            })).ToMList()
                        };

                        EmailTemplateMessageEmbedded message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo());

                        if (message == null)
                        {
                            throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci));
                        }

                        using (CultureInfoUtils.ChangeBothCultures(ci))
                        {
                            email.Subject = SubjectNode(message).Print(
                                new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows)
                            {
                                IsHtml = false,
                                Model  = model
                            });

                            email.Body = TextNode(message).Print(
                                new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows)
                            {
                                IsHtml = template.IsBodyHtml,
                                Model  = model,
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        ex.Data["Template"] = this.template.ToLite();
                        ex.Data["Model"]    = this.model;
                        ex.Data["Entity"]   = this.entity;
                        throw;
                    }


                    yield return(email);
                }
            }
        }
示例#5
0
        public IEnumerable <EmailMessageEntity> CreateEmailMessageInternal()
        {
            ExecuteQuery();

            foreach (EmailAddressEmbedded from in GetFrom())
            {
                foreach (List <EmailOwnerRecipientData> recipients in GetRecipients())
                {
                    CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault()?.ToCultureInfo() ??
                                     EmailLogic.Configuration.DefaultCulture.ToCultureInfo();

                    EmailMessageEntity email = new EmailMessageEntity
                    {
                        Target     = entity?.ToLite() ?? (this.model !.UntypedEntity as Entity)?.ToLite(),
                        Recipients = recipients.Select(r => new EmailRecipientEmbedded(r.OwnerData)
                        {
                            Kind = r.Kind
                        }).ToMList(),
                        From            = from,
                        IsBodyHtml      = template.IsBodyHtml,
                        EditableMessage = template.EditableMessage,
                        Template        = template.ToLite(),
                        Attachments     = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g,
                                                                                                                            new EmailTemplateLogic.GenerateAttachmentContext(this.qd, template, dicTokenColumn, currentRows, ci)
                        {
                            ModelType = template.Model?.ToType(),
                            Model     = model,
                            Entity    = entity,
                        })).ToMList()
                    };

                    EmailTemplateMessageEmbedded message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo());

                    if (message == null)
                    {
                        throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci));
                    }

                    using (CultureInfoUtils.ChangeBothCultures(ci))
                    {
                        email.Subject = SubjectNode(message).Print(
                            new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows)
                        {
                            IsHtml = false,
                            Model  = model
                        });

                        email.Body = TextNode(message).Print(
                            new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows)
                        {
                            IsHtml = template.IsBodyHtml,
                            Model  = model,
                        });
                    }


                    yield return(email);
                }
            }
        }

        TextTemplateParser.BlockNode TextNode(EmailTemplateMessageEmbedded message)
        {
            if (message.TextParsedNode == null)
            {
                string body = message.Text;

                if (template.MasterTemplate != null)
                {
                    var emt  = template.MasterTemplate.RetrieveAndRemember();
                    var emtm = emt.GetCultureMessage(message.CultureInfo.ToCultureInfo()) ??
                               emt.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo());

                    if (emtm != null)
                    {
                        body = EmailMasterTemplateEntity.MasterTemplateContentRegex.Replace(emtm.Text, m => body);
                    }
                }

                message.TextParsedNode = TextTemplateParser.Parse(body, qd, template.Model?.ToType());
            }

            return((TextTemplateParser.BlockNode)message.TextParsedNode);
        }

        TextTemplateParser.BlockNode SubjectNode(EmailTemplateMessageEmbedded message)
        {
            if (message.SubjectParsedNode == null)
            {
                message.SubjectParsedNode = TextTemplateParser.Parse(message.Subject, qd, template.Model?.ToType());
            }

            return((TextTemplateParser.BlockNode)message.SubjectParsedNode);
        }

        IEnumerable <EmailAddressEmbedded> GetFrom()
        {
            if (template.From != null)
            {
                if (template.From.Token != null)
                {
                    ResultColumn owner = dicTokenColumn.GetOrThrow(template.From.Token.Token);

                    if (!template.SendDifferentMessages)
                    {
                        yield return(new EmailAddressEmbedded(currentRows.Select(r => (EmailOwnerData)r[owner] !).Distinct().SingleEx()));
                    }
                    else
                    {
                        var groups = currentRows.GroupBy(r => (EmailOwnerData)r[owner] !);

                        if (groups.Count() == 1 && groups.Single().Key?.Owner == null)
                        {
                            yield break;
                        }
                        else
                        {
                            foreach (var gr in groups)
                            {
                                var old = currentRows;
                                currentRows = gr;

                                yield return(new EmailAddressEmbedded(gr.Key));

                                currentRows = old;
                            }
                        }
                    }
                }
                else
                {
                    yield return(new EmailAddressEmbedded(new EmailOwnerData
                    {
                        CultureInfo = null,
                        Email = template.From.EmailAddress !,
                        DisplayName = template.From.DisplayName,
                    }));