* @copyright CiviCRM LLC https://civicrm.org/licensing
*/
+use Civi\Api4\Email;
use Civi\Api4\MessageTemplate;
use Civi\WorkflowMessage\WorkflowMessage;
return $msgTpls;
}
- /**
- * @param int $contactId
- * @param $email
- * @param int $messageTemplateID
- * @param $from
- *
- * @return bool|NULL
- * @throws \CRM_Core_Exception
- */
- public static function sendReminder($contactId, $email, $messageTemplateID, $from) {
- CRM_Core_Error::deprecatedWarning('CRM_Core_BAO_MessageTemplate::sendReminder is deprecated and will be removed in a future version of CiviCRM');
-
- $messageTemplates = new CRM_Core_DAO_MessageTemplate();
- $messageTemplates->id = $messageTemplateID;
-
- $domain = CRM_Core_BAO_Domain::getDomain();
- $result = NULL;
- $hookTokens = [];
-
- if ($messageTemplates->find(TRUE)) {
- $body_text = $messageTemplates->msg_text;
- $body_html = $messageTemplates->msg_html;
- $body_subject = $messageTemplates->msg_subject;
- if (!$body_text) {
- $body_text = CRM_Utils_String::htmlToText($body_html);
- }
-
- $params = [['contact_id', '=', $contactId, 0, 0]];
- [$contact] = CRM_Contact_BAO_Query::apiQuery($params);
-
- //CRM-4524
- $contact = reset($contact);
-
- if (!$contact || is_a($contact, 'CRM_Core_Error')) {
- return NULL;
- }
-
- //CRM-5734
-
- // get tokens to be replaced
- $tokens = array_merge(CRM_Utils_Token::getTokens($body_text),
- CRM_Utils_Token::getTokens($body_html),
- CRM_Utils_Token::getTokens($body_subject));
-
- // get replacement text for these tokens
- $returnProperties = ["preferred_mail_format" => 1];
- if (isset($tokens['contact'])) {
- foreach ($tokens['contact'] as $key => $value) {
- $returnProperties[$value] = 1;
- }
- }
- [$details] = CRM_Utils_Token::getTokenDetails([$contactId],
- $returnProperties,
- NULL, NULL, FALSE,
- $tokens,
- 'CRM_Core_BAO_MessageTemplate');
- $contact = reset($details);
-
- // call token hook
- $hookTokens = [];
- CRM_Utils_Hook::tokens($hookTokens);
- $categories = array_keys($hookTokens);
-
- // do replacements in text and html body
- $type = ['html', 'text'];
- foreach ($type as $key => $value) {
- $bodyType = "body_{$value}";
- if ($$bodyType) {
- CRM_Utils_Token::replaceGreetingTokens($$bodyType, NULL, $contact['contact_id']);
- $$bodyType = CRM_Utils_Token::replaceDomainTokens($$bodyType, $domain, TRUE, $tokens, TRUE);
- $$bodyType = CRM_Utils_Token::replaceContactTokens($$bodyType, $contact, FALSE, $tokens, FALSE, TRUE);
- $$bodyType = CRM_Utils_Token::replaceComponentTokens($$bodyType, $contact, $tokens, TRUE);
- $$bodyType = CRM_Utils_Token::replaceHookTokens($$bodyType, $contact, $categories, TRUE);
- }
- }
- $html = $body_html;
- $text = $body_text;
-
- $smarty = CRM_Core_Smarty::singleton();
- foreach ([
- 'text',
- 'html',
- ] as $elem) {
- $$elem = $smarty->fetch("string:{$$elem}");
- }
-
- // do replacements in message subject
- $messageSubject = CRM_Utils_Token::replaceContactTokens($body_subject, $contact, FALSE, $tokens);
- $messageSubject = CRM_Utils_Token::replaceDomainTokens($messageSubject, $domain, TRUE, $tokens);
- $messageSubject = CRM_Utils_Token::replaceComponentTokens($messageSubject, $contact, $tokens, TRUE);
- $messageSubject = CRM_Utils_Token::replaceHookTokens($messageSubject, $contact, $categories, TRUE);
-
- $messageSubject = $smarty->fetch("string:{$messageSubject}");
-
- // set up the parameters for CRM_Utils_Mail::send
- $mailParams = [
- 'groupName' => 'Scheduled Reminder Sender',
- 'from' => $from,
- 'toName' => $contact['display_name'],
- 'toEmail' => $email,
- 'subject' => $messageSubject,
- ];
- if (!$html || $contact['preferred_mail_format'] == 'Text' ||
- $contact['preferred_mail_format'] == 'Both'
- ) {
- // render the & entities in text mode, so that the links work
- $mailParams['text'] = str_replace('&', '&', $text);
- }
- if ($html && ($contact['preferred_mail_format'] == 'HTML' ||
- $contact['preferred_mail_format'] == 'Both'
- )
- ) {
- $mailParams['html'] = $html;
- }
-
- $result = CRM_Utils_Mail::send($mailParams);
- }
-
- return $result;
- }
-
/**
* Revert a message template to its default subject+text+HTML state.
*
$params = array_merge($modelDefaults, $viewDefaults, $envelopeDefaults, $params);
CRM_Utils_Hook::alterMailParams($params, 'messageTemplate');
- if (!is_int($params['messageTemplateID']) && !is_null($params['messageTemplateID'])) {
- CRM_Core_Error::deprecatedWarning('message template id should be an integer');
- $params['messageTemplateID'] = (int) $params['messageTemplateID'];
- }
$mailContent = self::loadTemplate((string) $params['valueName'], $params['isTest'], $params['messageTemplateID'] ?? NULL, $params['groupName'] ?? '', $params['messageTemplate'], $params['subject'] ?? NULL);
$params['tokenContext'] = array_merge([
$params['html'] = $mailContent['html'];
if ($params['toEmail']) {
- $contactParams = [['email', 'LIKE', $params['toEmail'], 0, 1]];
- [$contact] = CRM_Contact_BAO_Query::apiQuery($contactParams);
-
- $prefs = array_pop($contact);
-
- if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] === 'HTML') {
+ // @todo - consider whether we really should be loading
+ // this based on 'the first email in the db that matches'.
+ // when we likely have the contact id. OTOH people probably barely
+ // use preferredMailFormat these days - the good fight against html
+ // emails was lost a decade ago...
+ $preferredMailFormatArray = Email::get(FALSE)->addWhere('email', '=', $params['toEmail'])->addSelect('contact_id.preferred_mail_format')->execute()->first();
+ $preferredMailFormat = $preferredMailFormatArray['contact_id.preferred_mail_format'] ?? 'Both';
+
+ if ($preferredMailFormat === 'HTML') {
$params['text'] = NULL;
}
-
- if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] === 'Text') {
+ if ($preferredMailFormat === 'Text') {
$params['html'] = NULL;
}