我目前正在开发一个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
数组({{1在我的代码中)。
这是我的问题:
我的$tokenParams
和$messageToken
变量正在通过CiviCRM的核心函数正确填充,但当我将它们全部传递到$returnProperties
时,返回的CRM_Utils_Token::getTokenDetails()
变量将保留一个空数组。< / p>
我真的没有想法,我一直在研究$contact
所在的CRM/Utils/Token.php
,但是我的代码找不到问题却没有成功。
提前感谢您的帮助!