From b64ee7125bebdb9db9bb08dcf312c82972cc227a Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Wed, 8 May 2019 11:55:16 +0200 Subject: [PATCH] OO-4028: Send e-mails of certificate copy with customized message --- .../manager/CertificatesManagerImpl.java | 80 ++++++++++++++----- .../ui/_i18n/LocalStrings_de.properties | 4 +- .../ui/_i18n/LocalStrings_en.properties | 2 + 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java index bf22e2d394b..2e82a76dd4a 100644 --- a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java +++ b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java @@ -30,9 +30,11 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Properties; +import java.util.Set; import java.util.UUID; import javax.annotation.Resource; @@ -83,7 +85,6 @@ import org.olat.core.util.Util; import org.olat.core.util.WebappHelper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.i18n.I18nManager; -import org.olat.core.util.mail.ContactList; import org.olat.core.util.mail.MailBundle; import org.olat.core.util.mail.MailManager; import org.olat.core.util.mail.MailerResult; @@ -958,46 +959,83 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList } private MailerResult sendCertificate(Identity to, RepositoryEntry entry, File certificateFile, CertificateConfig config) { + MailerResult mailerResult = sendCertificate(to, entry, certificateFile); + sendCertificateCopies(to, entry, certificateFile, config); + return mailerResult; + } + + private MailerResult sendCertificate(Identity to, RepositoryEntry entry, File certificateFile) { MailBundle bundle = new MailBundle(); bundle.setToId(to); bundle.setFrom(WebappHelper.getMailConfig("mailReplyTo")); + String[] args = new String[] { + entry.getDisplayname(), + userManager.getUserDisplayName(to) + }; + + String userLanguage = to.getUser().getPreferences().getLanguage(); + Locale locale = i18nManager.getLocaleOrDefault(userLanguage); + Translator translator = Util.createPackageTranslator(CertificateController.class, locale); + String subject = translator.translate("certification.email.subject", args); + String body = translator.translate("certification.email.body", args); + bundle.setContent(subject, body, certificateFile); + return mailManager.sendMessage(bundle); + } + + private void sendCertificateCopies(Identity to, RepositoryEntry entry, File certificateFile, CertificateConfig config) { + String entryDisplayName = entry.getDisplayname(); + String toDisplayName = userManager.getUserDisplayName(to); + String toUserLanguage = to.getUser().getPreferences().getLanguage(); + + List<MailBundle> mailBundles = new ArrayList<>(); List<String> bccs = certificatesModule.getCertificatesBccEmails(); - List<ContactList> contactLists = new ArrayList<>(3); - if(config.isSendEmailBcc() && bccs.size() > 0) { - ContactList bcc = new ContactList(); - bccs.forEach(email -> { bcc.add(email); }); - contactLists.add(bcc); + if(config.isSendEmailBcc()) { + for (String bcc : bccs) { + MailBundle bundle = createCopyMailBundle(certificateFile, toUserLanguage, entryDisplayName, toDisplayName); + bundle.setTo(bcc); + mailBundles.add(bundle); + } } + + Set<Identity> copiesTo = new HashSet<>(); if (config.isSendEmailLinemanager() && certificatesModule.isCertificateLinemanager()) { List<Identity> linemanagers = getLinemanagers(to); - ContactList linemanagerContactList = new ContactList(); - linemanagers.forEach(lm -> { linemanagerContactList.add(lm); }); - contactLists.add(linemanagerContactList); + copiesTo.addAll(linemanagers); } if (config.isSendEmailIdentityRelations() && baseSecurityModule.isRelationRoleEnabled()) { RelationSearchParams searchParams = new RelationSearchParams(); RelationRight right = identityRelationshipService.getRelationRightByRight(CertificateEmailRightProvider.RELATION_RIGHT); searchParams.setRight(right); List<IdentityToIdentityRelation> relationTargets = identityRelationshipService.getRelationsAsTarget(to, searchParams); - ContactList relationTargetsList = new ContactList(); - relationTargets.forEach(target -> { relationTargetsList.add( target.getSource()); }); - contactLists.add(relationTargetsList); + relationTargets.forEach(target -> { copiesTo.add( target.getSource()); }); } - bundle.setContactLists(contactLists); + + for (Identity copyTo : copiesTo) { + String language = copyTo.getUser().getPreferences().getLanguage(); + MailBundle bundle = createCopyMailBundle(certificateFile, language, entryDisplayName, toDisplayName); + bundle.setToId(copyTo); + mailBundles.add(bundle); + } + + for (MailBundle mailBundle : mailBundles) { + mailManager.sendMessage(mailBundle); + } + } + private MailBundle createCopyMailBundle(File certificateFile, String language, String entryDisplayName, String toDisplayName) { String[] args = new String[] { - entry.getDisplayname(), - userManager.getUserDisplayName(to) + entryDisplayName, + toDisplayName }; - - String userLanguage = to.getUser().getPreferences().getLanguage(); - Locale locale = i18nManager.getLocaleOrDefault(userLanguage); + MailBundle bundle = new MailBundle(); + bundle.setFrom(WebappHelper.getMailConfig("mailReplyTo")); + Locale locale = i18nManager.getLocaleOrDefault(language); Translator translator = Util.createPackageTranslator(CertificateController.class, locale); - String subject = translator.translate("certification.email.subject", args); - String body = translator.translate("certification.email.body", args); + String subject = translator.translate("certification.email.copy.subject", args); + String body = translator.translate("certification.email.copy.body", args); bundle.setContent(subject, body, certificateFile); - return mailManager.sendMessage(bundle); + return bundle; } private List<Identity> getLinemanagers(Identity identity) { diff --git a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties index 04037660d32..70e4302fde6 100644 --- a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties @@ -60,8 +60,10 @@ upload.wrong.mimetype=Vorlagen k\u00F6nnen nur als ZIP-Datei oder im PDF-Vorlage notifications.title=Neue Zertifikate in Kurs "{0}" notifications.desc={0} hat ein neues Zertifikat erhalten. notifications.header=Neue Zertifikate in Kurs "{0}" -certification.email.subject=Sie haben ein OpenOLAT-Zertifikat erhalten certification.email.body=<h1>Herzliche Gratulation\!</h1>Sie haben ein Zertifikat erhalten.<br/><br/>Als Anhang finden Sie das Zertifikat des Kurses "{0}".<br/><br/> +certification.email.copy.body=<h1>Zertifikat f\u00FCr {1}</h1>{1} hat ein Zertifikat erhalten.<br/><br/>Als Anhang finden Sie das Zertifikat des Kurses "{0}".<br/><br/> +certification.email.copy.subject={1} hat ein OpenOLAT-Zertifikat erhalten +certification.email.subject=Sie haben ein OpenOLAT-Zertifikat erhalten confirm.certificate.title=Zertifikat erstellen confirm.certificate.text=Es wurde bereits ein Zertifikat ausgestellt und die Wartezeit f\u00FCr die Rezertifizierung ist noch nicht abgelaufen. M\u00F6chten Sie dennoch ein neues Zertifikat erstellen? confirm.certificate.template.deleted=Die Vorlage "{0}" wurde gel\u00F6scht. diff --git a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_en.properties index 61423435de1..093c9797157 100644 --- a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_en.properties @@ -19,6 +19,8 @@ certificates.wizard.overview=Overview certificates.wizard.select=Select user certificates.wizard.title=Create certificates certification.email.body=<h1>Congratulations\!</h1>You have received a certification.<br/><br/>As an attachment you will find the certificate of the course "{0}".<br/><br/> +certification.email.copy.body=<h1>Certification of {1}</h1>{1} has received a certification.<br/><br/>As an attachment you will find the certificate of the course "{0}".<br/><br/> +certification.email.copy.subject={1} has received an OpenOLAT certification certification.email.subject=You have received an OpenOLAT certification error.mail.invalid=Please provide a valid e-mail address. choose.title=Select template -- GitLab