From f14b9b1bb012d93609404e63f3c61c1be56ec671 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Mon, 9 Aug 2021 21:13:57 -0700 Subject: [PATCH] ActionSchedule - Convert from global `setLocale()` to `$context['locale']` Before: Runs `setLocale()` and then executes the entire pipeline for `TokenProcessor` After: Leaves the global locale alone. Instead, rely on `TokenProcessor` to switch locale as it visits each recipient. --- CRM/Core/BAO/ActionSchedule.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CRM/Core/BAO/ActionSchedule.php b/CRM/Core/BAO/ActionSchedule.php index abcd747f44..00ac176a98 100644 --- a/CRM/Core/BAO/ActionSchedule.php +++ b/CRM/Core/BAO/ActionSchedule.php @@ -268,18 +268,19 @@ FROM civicrm_action_schedule cas $multilingual = CRM_Core_I18n::isMultilingual(); while ($dao->fetch()) { - // switch language if necessary - if ($multilingual) { - $preferred_language = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $dao->contactID, 'preferred_language'); - CRM_Core_I18n::singleton()->setLocale(CRM_Core_BAO_ActionSchedule::pickLocale($actionSchedule->communication_language, $preferred_language)); - } - $errors = []; try { $tokenProcessor = self::createTokenProcessor($actionSchedule, $mapping); - $tokenProcessor->addRow() + $row = $tokenProcessor->addRow() ->context('contactId', $dao->contactID) ->context('actionSearchResult', (object) $dao->toArray()); + + // switch language if necessary + if ($multilingual) { + $preferred_language = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $dao->contactID, 'preferred_language'); + $row->context('locale', CRM_Core_BAO_ActionSchedule::pickLocale($actionSchedule->communication_language, $preferred_language)); + } + foreach ($tokenProcessor->evaluate()->getRows() as $tokenRow) { if ($actionSchedule->mode === 'SMS' || $actionSchedule->mode === 'User_Preference') { CRM_Utils_Array::extend($errors, self::sendReminderSms($tokenRow, $actionSchedule, $dao->contactID)); -- 2.25.1