From d83fa5e2e193498833915532e3f773f7e2d973d2 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Wed, 17 Nov 2021 19:28:36 +0100 Subject: [PATCH] LOOP-1158: Fixed handling of revision messages in mail content --- .../src/Helper/MailHelper.php | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_mail_notifications/src/Helper/MailHelper.php b/web/profiles/custom/os2loop/modules/os2loop_mail_notifications/src/Helper/MailHelper.php index bc30f5322..a3633a587 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_mail_notifications/src/Helper/MailHelper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_mail_notifications/src/Helper/MailHelper.php @@ -80,12 +80,12 @@ public function mail($key, &$message, $params) { * True if mail is sent. */ public function sendNotification(User $user, array $groupedMessages) { - $lang_code = $user->getPreferredLangcode(); + $langcode = $user->getPreferredLangcode(); $sections = []; foreach ($groupedMessages as $type => $messages) { - $section = array_map(static function (Message $message) use ($lang_code) { - return $message->getText($lang_code)[0] ?? NULL; + $section = array_map(function (Message $message) use ($langcode) { + return $this->getMessageContent($message, $langcode); }, $messages); $section = implode(PHP_EOL, $section); $sections[$type] = $section; @@ -96,22 +96,22 @@ public function sendNotification(User $user, array $groupedMessages) { // // A message on the form // - // Something new: New stuff. + // Something new: New stuff (Revision message: Updated + // stuff.) // - // will be put under the heading "Something new" (colon and space are - // removed) as New stuff (only a element is used). + // will be put under the heading 'Something new' (colon and space are + // removed) with content + // + // New stuff (Revision message: Updated + // stuff.) $messageSections = []; foreach ($groupedMessages as $messages) { foreach ($messages as $message) { - $text = $message->getText($lang_code)[0] ?? NULL; - // Use text before a element as heading and keep only the a element as - // text. - if (NULL !== $text - && preg_match('@^(?P[^<]+?)(:\s*)?(?P)@', $text, $matches)) { - [$heading, $content] = [$matches['heading'], $matches['content']]; - if ($message->hasField('os2loop_revision_message') && !empty($message->get('os2loop_revision_message')->getValue())) { - $content .= ' (' . $this->t('Revision message: @revision_message', ['@revision_message' => $message->get('os2loop_revision_message')->getString()]) . ')'; - } + $content = $this->getMessageContent($message, $langcode); + // Use text before colon as heading. + $parts = preg_split('/:\s*/', $content, 2); + if (2 === count($parts)) { + [$heading, $content] = array_map('trim', $parts); $messageSections[$heading][] = $content; } } @@ -127,7 +127,7 @@ public function sendNotification(User $user, array $groupedMessages) { $params['messages'] = implode(PHP_EOL . PHP_EOL, $sections); $params['user'] = $user; - $result = $this->mailer->mail(Helper::MODULE, self::NOTIFICATION_MAIL, $user->getEmail(), $lang_code, $params, NULL, TRUE); + $result = $this->mailer->mail(Helper::MODULE, self::NOTIFICATION_MAIL, $user->getEmail(), $langcode, $params, NULL, TRUE); return TRUE === $result['result']; } @@ -186,4 +186,18 @@ public function tokenInfo() { ]; } + /** + * Get content of a message including any revision message. + */ + private function getMessageContent(Message $message, string $langCode): string { + $content = $message->getText($langCode)[0] ?? ''; + + // Append any revision message. + if ($message->hasField('os2loop_revision_message') && !empty($message->get('os2loop_revision_message')->getValue())) { + $content .= ' (' . $this->t('Revision message: @revision_message', ['@revision_message' => $message->get('os2loop_revision_message')->getString()]) . ')'; + } + + return $content; + } + }