我目前正在开发一个 CiviCRM 扩展,我需要在 html 代码中替换 CiviCRM-Tokens(用于 pdf 和邮件生成)。
我对核心文件进行了一些研究,并尝试重新创建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
(false) 和$skipDeceased
(true) 的默认值,并且只是将一个(现有)用户 ID 传递到$params
数组中($tokenParams
在我的代码中)。
这是我的问题:
通过 CiviCRM 的核心函数正确填充了我的$messageToken
和变量,但是当我将它们全部传递给返回的变量时,返回的变量包含一个空数组。$returnProperties
CRM_Utils_Token::getTokenDetails()
$contact
我真的没有想法,我一直在寻找CRM/Utils/Token.php
位置getTokenDetails()
,但没有成功找到我的代码问题。
提前感谢您的帮助!