From 50d759ad4a21caa2c113606643609f91ca9de82c Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 13 Jan 2014 11:59:07 -0800 Subject: [PATCH] Adding email template wrappers --- .../Orchard.Email/Orchard.Email.csproj | 4 +++ .../DefaultEmailMessageChannelSelector.cs | 16 +++++----- .../Orchard.Email/Services/ISmtpChannel.cs | 6 ++++ .../Services/SmtpMessageChannel.cs | 29 +++++++++++++++---- .../Views/Template.Smtp.Wrapper.cshtml | 4 +++ .../Orchard.Users/Orchard.Users.csproj | 3 ++ .../Services/MembershipService.cs | 2 ++ .../Orchard.Users/Services/UserService.cs | 2 ++ .../Views/Template.User.Wrapper.cshtml | 2 ++ 9 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Email/Services/ISmtpChannel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Email/Views/Template.Smtp.Wrapper.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Users/Views/Template.User.Wrapper.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj index 46238621a..a16099f37 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj +++ b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj @@ -79,6 +79,7 @@ + @@ -129,6 +130,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/DefaultEmailMessageChannelSelector.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/DefaultEmailMessageChannelSelector.cs index dcf3aa57d..21849190d 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/DefaultEmailMessageChannelSelector.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/DefaultEmailMessageChannelSelector.cs @@ -1,21 +1,21 @@ -using Orchard.ContentManagement; -using Orchard.Email.Models; -using Orchard.Messaging.Services; +using Orchard.Messaging.Services; namespace Orchard.Email.Services { public class DefaultEmailMessageChannelSelector : Component, IMessageChannelSelector { - private readonly IOrchardServices _services; + private readonly IWorkContextAccessor _workContextAccessor; public const string ChannelName = "Email"; - public DefaultEmailMessageChannelSelector(IOrchardServices services) { - _services = services; + public DefaultEmailMessageChannelSelector(IWorkContextAccessor workContextAccessor) { + _workContextAccessor = workContextAccessor; } - + public MessageChannelSelectorResult GetChannel(string messageType, object payload) { if (messageType == "Email") { + var workContext = _workContextAccessor.GetContext(); + var channel = workContext.Resolve(); return new MessageChannelSelectorResult { Priority = 50, - MessageChannel = new SmtpMessageChannel(_services.WorkContext.CurrentSite.As()) + MessageChannel = channel }; } diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/ISmtpChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/ISmtpChannel.cs new file mode 100644 index 000000000..a56e7ab4c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/ISmtpChannel.cs @@ -0,0 +1,6 @@ +using Orchard.Messaging.Services; + +namespace Orchard.Email.Services { + public interface ISmtpChannel : IMessageChannel { + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index b5f715943..982ce56a6 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -1,19 +1,29 @@ using System; using System.Net; using System.Net.Mail; +using System.Web.Mvc; using Newtonsoft.Json; +using Orchard.ContentManagement; +using Orchard.DisplayManagement; using Orchard.Logging; using Orchard.Email.Models; -using Orchard.Messaging.Services; namespace Orchard.Email.Services { - public class SmtpMessageChannel : Component, IMessageChannel, IDisposable { + public class SmtpMessageChannel : Component, ISmtpChannel, IDisposable { private readonly SmtpSettingsPart _smtpSettings; + private readonly IShapeFactory _shapeFactory; + private readonly IShapeDisplay _shapeDisplay; private readonly Lazy _smtpClientField; public static readonly string MessageType = "Email"; - public SmtpMessageChannel(SmtpSettingsPart smtpSettings) { - _smtpSettings = smtpSettings; + public SmtpMessageChannel( + IOrchardServices orchardServices, + IShapeFactory shapeFactory, + IShapeDisplay shapeDisplay) { + _shapeFactory = shapeFactory; + _shapeDisplay = shapeDisplay; + + _smtpSettings = orchardServices.WorkContext.CurrentSite.As(); _smtpClientField = new Lazy(CreateSmtpClient); } @@ -26,6 +36,8 @@ namespace Orchard.Email.Services { } public void Process(string payload) { + + if (!_smtpSettings.IsValid()) { return; } @@ -40,11 +52,16 @@ namespace Orchard.Email.Services { return; } + // Applying default Body alteration for SmtpChannel + var template = _shapeFactory.Create("Template_Smtp_Wrapper", Arguments.From(new { + Content = new MvcHtmlString(emailMessage.Body) + })); + var mailMessage = new MailMessage { From = new MailAddress(_smtpSettings.Address), Subject = emailMessage.Subject, - Body = emailMessage.Body, - IsBodyHtml = emailMessage.Body != null && emailMessage.Body.Contains("<") && emailMessage.Body.Contains(">") + Body = _shapeDisplay.Display(template), + IsBodyHtml = true }; try { diff --git a/src/Orchard.Web/Modules/Orchard.Email/Views/Template.Smtp.Wrapper.cshtml b/src/Orchard.Web/Modules/Orchard.Email/Views/Template.Smtp.Wrapper.cshtml new file mode 100644 index 000000000..491632da9 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Email/Views/Template.Smtp.Wrapper.cshtml @@ -0,0 +1,4 @@ +@* Override this template to alter the email messages sent by the Smtp channel *@ +

+@Model.Content +

\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index 53be99315..98015ebf9 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -167,6 +167,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs index b9cb972ca..7296f9c0a 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs @@ -109,6 +109,8 @@ namespace Orchard.Users.Services { var recipient = GetUser(userName); if (recipient != null) { var template = _shapeFactory.Create("Template_User_Moderated", Arguments.From(createUserParams)); + template.Metadata.Wrappers.Add("Template_User_Wrapper"); + var payload = new { Subject = T("New account").Text, Body = _shapeDisplay.Display(template), diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs index 06a8266e8..8126818f3 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs @@ -140,6 +140,7 @@ namespace Orchard.Users.Services { ContactEmail = site.As().ValidateEmailContactEMail, ChallengeUrl = url })); + template.Metadata.Wrappers.Add("Template_User_Wrapper"); var payload = new { Subject = T("Verification E-Mail").Text, @@ -163,6 +164,7 @@ namespace Orchard.Users.Services { User = user, LostPasswordUrl = url })); + template.Metadata.Wrappers.Add("Template_User_Wrapper"); var payload = new { Subject = T("Lost password").Text, diff --git a/src/Orchard.Web/Modules/Orchard.Users/Views/Template.User.Wrapper.cshtml b/src/Orchard.Web/Modules/Orchard.Users/Views/Template.User.Wrapper.cshtml new file mode 100644 index 000000000..ec78ec272 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Views/Template.User.Wrapper.cshtml @@ -0,0 +1,2 @@ +@* Override this template to alter the email messages sent by the Orchard.Users module *@ +@Display.PlaceChildContent(Source: Model) \ No newline at end of file