在API中替换CiviCRM令牌的问题

时间:2017-02-07 11:57:11

标签: php drupal-7 token civicrm civicrm-extension

我目前正在开发一个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,但是我的代码找不到问题却没有成功。

提前感谢您的帮助!

0 个答案:

没有答案