diff --git a/lib/MailQueueHandler.php b/lib/MailQueueHandler.php
index f5290fa0d..1c4cab7e8 100644
--- a/lib/MailQueueHandler.php
+++ b/lib/MailQueueHandler.php
@@ -387,16 +387,22 @@ protected function sendEmailToUser($userName, $email, $lang, $timezone, $maxTime
'activityEvents' => $activityEvents,
'skippedCount' => $skippedCount,
]);
+ $template->setSubject($l->t('Activity notification for %s', $this->getSenderData('name')));
$template->addHeader();
$template->addHeading($l->t('Hello %s',[$user->getDisplayName()]), $l->t('Hello %s,',[$user->getDisplayName()]));
- $template->addBodyText($l->t('There was some activity at %s', [$this->urlGenerator->getAbsoluteURL('/')]));
+
+ $homeLink = '' . htmlspecialchars($this->getSenderData('name')) . '';
+ $template->addBodyText(
+ $l->t('There was some activity at %s', [$homeLink]),
+ $l->t('There was some activity at %s', [$this->urlGenerator->getAbsoluteURL('/')])
+ );
foreach ($activityEvents as $activity) {
/** @var IEvent $event */
$event = $activity['event'];
$relativeDateTime = $activity['relativeDateTime'];
- $template->addBodyListItem($event->getParsedSubject(), $relativeDateTime, $event->getIcon());
+ $template->addBodyListItem($this->getHTMLSubject($event), $relativeDateTime, $event->getIcon(), $event->getParsedSubject());
}
if ($skippedCount) {
@@ -407,9 +413,7 @@ protected function sendEmailToUser($userName, $email, $lang, $timezone, $maxTime
$message = $this->mailer->createMessage();
$message->setTo([$email => $user->getDisplayName()]);
- $message->setSubject((string) $l->t('Activity notification'));
- $message->setHtmlBody($template->renderHtml());
- $message->setPlainBody($template->renderText());
+ $message->useTemplate($template);
$message->setFrom([$this->getSenderData('email') => $this->getSenderData('name')]);
try {
@@ -422,6 +426,25 @@ protected function sendEmailToUser($userName, $email, $lang, $timezone, $maxTime
return true;
}
+ /**
+ * @param IEvent $event
+ * @return string
+ */
+ protected function getHTMLSubject(IEvent $event): string {
+ $placeholders = $replacements = [];
+ foreach ($event->getRichSubjectParameters() as $placeholder => $parameter) {
+ $placeholders[] = '{' . $placeholder . '}';
+
+ if (isset($parameter['link'])) {
+ $replacements[] = '' . htmlspecialchars($parameter['name']) . '';
+ } else {
+ $replacements[] = '' . htmlspecialchars($parameter['name']) . '';
+ }
+ }
+
+ return str_replace($placeholders, $replacements, $event->getRichSubject());
+ }
+
/**
* @param string $lang
* @param IEvent $event
diff --git a/tests/MailQueueHandlerTest.php b/tests/MailQueueHandlerTest.php
index 817c9fb19..a4b5f1def 100644
--- a/tests/MailQueueHandlerTest.php
+++ b/tests/MailQueueHandlerTest.php
@@ -118,6 +118,9 @@ protected function setUp() {
$event->expects($this->any())
->method('setSubject')
->willReturnSelf();
+ $event->expects($this->any())
+ ->method('getRichSubjectParameters')
+ ->willReturn([]);
$this->activityManager = $this->createMock(IManager::class);
$this->activityManager->expects($this->any())
@@ -253,11 +256,8 @@ public function testSendEmailToUser() {
->method('setTo')
->with([$email => $userDisplayName]);
$this->message->expects($this->once())
- ->method('setSubject');
- $this->message->expects($this->once())
- ->method('setPlainBody');
- $this->message->expects($this->once())
- ->method('setFrom');
+ ->method('useTemplate')
+ ->with($template);
$userObject = $this->createMock(IUser::class);
$userObject->expects($this->any())