В настоящее время я разрабатываю расширение 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()
находится, но не удалось найти проблему с моим кодом.
Заранее благодарю за любую помощь!
Задача ещё не решена.
Других решений пока нет …