From 718486dd80537200e61363491b6cbf32e1903cd2 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Thu, 22 Jun 2023 20:58:03 -0700 Subject: [PATCH] (REF) Extract TestBanner as listener To r-run this, I used the following procedure: * Take an arbitrary `Contribution` from example DB (eg id=100) * Update in SQL (`SET is_test=1 WHERE id=100`) * Send mailing with `cv api Contribution.sendconfirmation id=100` * Check email log --- CRM/Core/BAO/MessageTemplate.php | 14 +------- Civi/WorkflowMessage/TestBanner.php | 56 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 Civi/WorkflowMessage/TestBanner.php diff --git a/CRM/Core/BAO/MessageTemplate.php b/CRM/Core/BAO/MessageTemplate.php index 282d2ad796..87ab6c292c 100644 --- a/CRM/Core/BAO/MessageTemplate.php +++ b/CRM/Core/BAO/MessageTemplate.php @@ -531,23 +531,11 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate implemen // https://github.com/civicrm/civicrm-core/pull/17180 'groupName' => $groupName, 'workflow' => $workflowName, + 'isTest' => $isTest, ]; CRM_Utils_Hook::alterMailContent($mailContent); - // add the test banner (if requested) - if ($isTest) { - $testText = MessageTemplate::get(FALSE) - ->setSelect(['msg_subject', 'msg_text', 'msg_html']) - ->addWhere('workflow_name', '=', 'test_preview') - ->addWhere('is_default', '=', TRUE) - ->execute()->first(); - - $mailContent['subject'] = $testText['msg_subject'] . $mailContent['subject']; - $mailContent['text'] = $testText['msg_text'] . $mailContent['text']; - $mailContent['html'] = preg_replace('/ ['onAlterMailContent', -1000], + ]; + } + + public function onAlterMailContent(array &$mailContent): void { + // Only alter workflow-messages -- not CiviMail messages + if (!empty($mailContent['mailingID'])) { + return; + } + + // Only alter test messages + if (empty($mailContent['isTest'])) { + return; + } + + $testText = MessageTemplate::get(FALSE) + ->setSelect(['msg_subject', 'msg_text', 'msg_html']) + ->addWhere('workflow_name', '=', 'test_preview') + ->addWhere('is_default', '=', TRUE) + ->execute()->first(); + + $mailContent['subject'] = $testText['msg_subject'] . $mailContent['subject']; + $mailContent['text'] = $testText['msg_text'] . $mailContent['text']; + $mailContent['html'] = preg_replace('/