Проблемы с заменой токенов CiviCRM в API

В настоящее время я разрабатываю расширение CiviCRM, где мне нужно заменить CiviCRM-токены (используемые при генерации PDF и почтовых сообщений) в HTML-коде.

Я провел небольшое исследование основных файлов и попытался воссоздать поведение в PDFLetterCommon.php (/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php) где он заменяет токены в функции postProcess.

Вот оригинальный код CiviCRM:

list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($form);

$skipOnHold = isset($form->skipOnHold) ? $form->skipOnHold : FALSE;
$skipDeceased = isset($form->skipDeceased) ? $form->skipDeceased : TRUE;

foreach ($form->_contactIds as $item => $contactId) {
  $params = array('contact_id' => $contactId);

  list($contact) = CRM_Utils_Token::getTokenDetails($params,
    $returnProperties,
    $skipOnHold,
    $skipDeceased,
    NULL,
    $messageToken,
    'CRM_Contact_Form_Task_PDFLetterCommon'
  );

  ...

 }

И вот моя версия для тестирования:

(этот код находится внутри функции API в моем расширении)

$messageToken = CRM_Utils_Token::getTokens($params["html"]);

$returnProperties = array();
if (isset($messageToken['contact'])) {
  foreach ($messageToken['contact'] as $key => $value) {
    $returnProperties[$value] = 1;
  }
}

$skipOnHold = FALSE;
$skipDeceased = TRUE;
$tokenParams = array("contact_id" => 67450);

list($contact) = CRM_Utils_Token::getTokenDetails($tokenParams,
    $returnProperties,
    $skipOnHold,
    $skipDeceased,
    NULL,
    $messageToken,
    'CRM_Contact_Form_Task_PDFLetterCommon'
);

Я использую значения по умолчанию для $skipOnHold (ложно) и $skipDeceased (true), а также просто передать один (существующий) идентификатор пользователя в $params массив ($tokenParams в моем коде).

Вот моя проблема:

мой $messageToken а также $returnProperties переменные заполняются правильно через основные функции CiviCRM, но когда я передаю их все в CRM_Utils_Token::getTokenDetails() возвращенный $contact переменная содержит пустой массив.

У меня действительно нет идей, я искал в CRM/Utils/Token.php где getTokenDetails() находится, но не удалось найти проблему с моим кодом.

Заранее благодарю за любую помощь!

0 ответов

Другие вопросы по тегам