0

我目前正在开发一个 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和变量,但是当我将它们全部传递给返回的变量时,返回的变量包含一个空数组。$returnPropertiesCRM_Utils_Token::getTokenDetails()$contact

我真的没有想法,我一直在寻找CRM/Utils/Token.php位置getTokenDetails(),但没有成功找到我的代码问题。

提前感谢您的帮助!

4

0 回答 0