From ec0595f0afe582d87a5a2810193d1dedfa33a8d8 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Tue, 12 Feb 2019 19:45:56 +0100 Subject: [PATCH] OO-3771: evaluate template before showing it to user --- .../org/olat/core/util/mail/MailManager.java | 2 ++ .../util/mail/manager/MailManagerImpl.java | 19 +++++++++++++++++++ .../util/mail/model/SimpleMailContent.java | 6 +++--- .../olat/course/nodes/co/CORunController.java | 12 ++++++++++-- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/olat/core/util/mail/MailManager.java b/src/main/java/org/olat/core/util/mail/MailManager.java index bb100412c74..a0814cc0225 100644 --- a/src/main/java/org/olat/core/util/mail/MailManager.java +++ b/src/main/java/org/olat/core/util/mail/MailManager.java @@ -202,5 +202,7 @@ public interface MailManager { public MailContent decorateMail(MailBundle bundle); public String decorateMailBody(String body, Locale locale); + + public MailContent evaluateTemplate(MailTemplate template); } diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java index bbfe593cc19..d15faefcce9 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java @@ -755,6 +755,25 @@ public class MailManagerImpl implements MailManager, InitializingBean { return new SimpleMailContent(content.getSubject(), decoratedBody, content.getAttachments()); } + @Override + public MailContent evaluateTemplate(MailTemplate template) { + VelocityContext context; + if(template.getContext() != null) { + context = new VelocityContext(template.getContext()); + } else { + context = new VelocityContext(); + } + template.putVariablesInMailContext(context, null); + context.put("server", Settings.getServerContextPathURI()); + + MailerResult result = new MailerResult(); + StringWriter subjectWriter = new StringWriter(2000); + evaluate(context, template.getSubjectTemplate(), subjectWriter, result); + StringWriter bodyWriter = new StringWriter(2000); + evaluate(context, template.getBodyTemplate(), bodyWriter, result); + return new SimpleMailContent(subjectWriter.toString(), bodyWriter.toString(), template.getAttachments()); + } + public String decorateMailBody(String body, Locale locale) { String template = getMailTemplate(); boolean htmlTemplate = StringHelper.isHtml(template); diff --git a/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java b/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java index d413f9ae73f..6fb9fd2f1b8 100644 --- a/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java +++ b/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java @@ -41,7 +41,7 @@ public class SimpleMailContent implements MailContent { this.subject = subject; this.body = body; - attachments = new ArrayList<File>(); + attachments = new ArrayList<>(); if(attachmentArr != null && attachmentArr.length > 0) { for(File attachment:attachmentArr) { if(attachment != null && attachment.exists()) { @@ -55,9 +55,9 @@ public class SimpleMailContent implements MailContent { this.subject = subject; this.body = body; if(attachmentList == null) { - this.attachments = new ArrayList<File>(1); + this.attachments = new ArrayList<>(1); } else { - this.attachments = new ArrayList<File>(attachmentList); + this.attachments = new ArrayList<>(attachmentList); } } diff --git a/src/main/java/org/olat/course/nodes/co/CORunController.java b/src/main/java/org/olat/course/nodes/co/CORunController.java index df6e82cebc6..53a471c368b 100755 --- a/src/main/java/org/olat/course/nodes/co/CORunController.java +++ b/src/main/java/org/olat/course/nodes/co/CORunController.java @@ -46,6 +46,8 @@ import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.core.util.mail.ContactList; import org.olat.core.util.mail.ContactMessage; +import org.olat.core.util.mail.MailContent; +import org.olat.core.util.mail.MailManager; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.group.BusinessGroup; @@ -70,12 +72,15 @@ public class CORunController extends BasicController { private ContactFormController coFoCtr; private final CourseGroupManager cgm; + + @Autowired + private MailManager mailManager; @Autowired private BGAreaManager areaManager; @Autowired - private BusinessGroupService businessGroupService; + private RepositoryService repositoryService; @Autowired - private RepositoryService repositoryService; + private BusinessGroupService businessGroupService; /** * Constructor for the contact form run controller @@ -225,6 +230,9 @@ public class CORunController extends BasicController { CourseMailTemplate template = new CourseMailTemplate(entry, getIdentity(), getLocale()); template.setBodyTemplate(mBody); template.setSubjectTemplate(mSubject); + MailContent content = mailManager.evaluateTemplate(template); + template.setSubjectTemplate(content.getSubject()); + template.setBodyTemplate(content.getBody()); coFoCtr = new ContactFormController(ureq, getWindowControl(), false, false, false, cmsg, template); listenTo(coFoCtr);//dispose as this controller is disposed putInitialPanel(coFoCtr.getInitialComponent()); -- GitLab