本文整理汇总了PHP中CRM_Utils_Hook::tokens方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Utils_Hook::tokens方法的具体用法?PHP CRM_Utils_Hook::tokens怎么用?PHP CRM_Utils_Hook::tokens使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Utils_Hook
的用法示例。
在下文中一共展示了CRM_Utils_Hook::tokens方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: onEvaluate
/**
* Load token data.
*
* @param TokenValueEvent $e
* @throws TokenException
*/
public function onEvaluate(TokenValueEvent $e)
{
// For reasons unknown, replaceHookTokens requires a pre-computed list of
// hook *categories* (aka entities aka namespaces). We'll cache
// this in the TokenProcessor's context.
$hookTokens = array();
\CRM_Utils_Hook::tokens($hookTokens);
$categories = array_keys($hookTokens);
$e->getTokenProcessor()->context['hookTokenCategories'] = $categories;
$messageTokens = $e->getTokenProcessor()->getMessageTokens();
foreach ($e->getRows() as $row) {
if (empty($row->context['contact'])) {
$params = array(array('contact_id', '=', $row->context['contactId'], 0, 0));
list($contact, $_) = \CRM_Contact_BAO_Query::apiQuery($params);
$contact = reset($contact);
//CRM-4524
if (!$contact || is_a($contact, 'CRM_Core_Error')) {
// FIXME: Need to differentiate errors which kill the batch vs the individual row.
throw new TokenException("Failed to generate token data. Invalid contact ID: " . $row->context['contactId']);
}
} else {
$contact = $row->context['contact'];
}
if (!empty($row->context['tmpTokenParams'])) {
// merge activity tokens with contact array
// this is pretty weird.
$contact = array_merge($contact, $row->context['tmpTokenParams']);
}
// Note: This is a small contract change from the past; data should be missing
// less randomly.
//\CRM_Utils_Hook::tokenValues($contact, $row->context['contactId']);
\CRM_Utils_Hook::tokenValues($contact, $row->context['contactId'], empty($row->context['mailingJob']) ? NULL : $row->context['mailingJob']->id, $messageTokens, $row->context['controller']);
$row->context('contact', $contact);
}
}
示例2: format
//.........这里部分代码省略.........
// CRM-5278
if (!empty($params[$dbName])) {
${$name} = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', $dbName, $params[$dbName]);
}
} elseif ($value) {
${$name} = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', $dbName, $value);
}
}
if (in_array('formal_title', $useDBNames)) {
$params['formal_title'] = $individual->formal_title;
$contact->formal_title = $individual->formal_title;
$formalTitle = $individual->formal_title;
} elseif (array_key_exists('formal_title', $params)) {
$formalTitle = $params['formal_title'];
} elseif ($individual->formal_title) {
$formalTitle = $individual->formal_title;
}
}
}
//first trim before further processing.
foreach (array('lastName', 'firstName', 'middleName') as $fld) {
${$fld} = trim(${$fld});
}
if ($lastName || $firstName || $middleName) {
// make sure we have values for all the name fields.
$formatted = $params;
$nameParams = array('first_name' => $firstName, 'middle_name' => $middleName, 'last_name' => $lastName, 'nick_name' => $nickName, 'individual_suffix' => $suffix, 'individual_prefix' => $prefix, 'prefix_id' => $prefix_id, 'suffix_id' => $suffix_id, 'formal_title' => $formalTitle);
// make sure we have all the name fields.
foreach ($nameParams as $name => $value) {
if (empty($formatted[$name]) && $value) {
$formatted[$name] = $value;
}
}
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$tokenFields = array();
foreach ($tokens as $catTokens) {
foreach ($catTokens as $token => $label) {
$tokenFields[] = $token;
}
}
//build the sort name.
$format = Civi::settings()->get('sort_name_format');
$sortName = CRM_Utils_Address::format($formatted, $format, FALSE, FALSE, TRUE, $tokenFields);
$sortName = trim($sortName);
//build the display name.
$format = Civi::settings()->get('display_name_format');
$displayName = CRM_Utils_Address::format($formatted, $format, FALSE, FALSE, TRUE, $tokenFields);
$displayName = trim($displayName);
}
//start further check for email.
if (empty($sortName) || empty($displayName)) {
$email = NULL;
if (!empty($params['email']) && is_array($params['email'])) {
foreach ($params['email'] as $emailBlock) {
if (isset($emailBlock['is_primary'])) {
$email = $emailBlock['email'];
break;
}
}
}
$uniqId = CRM_Utils_Array::value('user_unique_id', $params);
if (!$email && $contact->id) {
$email = CRM_Contact_BAO_Contact::getPrimaryEmail($contact->id);
}
}
示例3: processMessageTemplate
/**
* part of the post process which prepare and extract information from the template
*
* @access protected
*
* @return array( $categories, $html_message, $messageToken, $returnProperties )
*/
protected static function processMessageTemplate(&$form)
{
$formValues = $form->controller->exportValues($form->getName());
// process message template
if (CRM_Utils_Array::value('saveTemplate', $formValues) || CRM_Utils_Array::value('updateTemplate', $formValues)) {
$messageTemplate = array('msg_text' => NULL, 'msg_html' => $formValues['html_message'], 'msg_subject' => NULL, 'is_active' => TRUE);
$messageTemplate['pdf_format_id'] = 'null';
if (CRM_Utils_Array::value('bind_format', $formValues) && $formValues['format_id'] > 0) {
$messageTemplate['pdf_format_id'] = $formValues['format_id'];
}
if (CRM_Utils_Array::value('saveTemplate', $formValues) && $formValues['saveTemplate']) {
$messageTemplate['msg_title'] = $formValues['saveTemplateName'];
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
if (CRM_Utils_Array::value('updateTemplate', $formValues) && $formValues['template'] && $formValues['updateTemplate']) {
$messageTemplate['id'] = $formValues['template'];
unset($messageTemplate['msg_title']);
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
} elseif (CRM_Utils_Array::value('template', $formValues) > 0) {
if (CRM_Utils_Array::value('bind_format', $formValues) && $formValues['format_id'] > 0) {
$query = "UPDATE civicrm_msg_template SET pdf_format_id = {$formValues['format_id']} WHERE id = {$formValues['template']}";
} else {
$query = "UPDATE civicrm_msg_template SET pdf_format_id = NULL WHERE id = {$formValues['template']}";
}
CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
}
if (CRM_Utils_Array::value('update_format', $formValues)) {
$bao = new CRM_Core_BAO_PdfFormat();
$bao->savePdfFormat($formValues, $formValues['format_id']);
}
$html = array();
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$categories = array_keys($tokens);
$html_message = $formValues['html_message'];
//time being hack to strip ' '
//from particular letter line, CRM-6798
self::formatMessage($html_message);
$messageToken = CRM_Utils_Token::getTokens($html_message);
$returnProperties = array();
if (isset($messageToken['contact'])) {
foreach ($messageToken['contact'] as $key => $value) {
$returnProperties[$value] = 1;
}
}
return array($formValues, $categories, $html_message, $messageToken, $returnProperties);
}
示例4: getTokenData
/**
* Get token list from mailing format & contacts
* @param unknown_type $contacts
* @return unknown
*/
function getTokenData(&$contacts)
{
$mailingFormat = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'mailing_format');
$tokens = $tokenFields = array();
$messageToken = CRM_Utils_Token::getTokens($mailingFormat);
// also get all token values
CRM_Utils_Hook::tokenValues($contacts, array_keys($contacts), NULL, $messageToken, 'CRM_Contact_Form_Task_LabelCommon');
CRM_Utils_Hook::tokens($tokens);
foreach ($tokens as $category => $catTokens) {
foreach ($catTokens as $token => $tokenName) {
$tokenFields[] = $token;
}
}
return $tokenFields;
}
示例5: sendSMS
static function sendSMS(&$contactDetails, &$activityParams, &$smsParams = array(), &$contactIds, $userID = NULL)
{
if ($userID == NULL) {
$session = CRM_Core_Session::singleton();
$userID = $session->get('userID');
}
$text =& $activityParams['text_message'];
$html =& $activityParams['html_message'];
// CRM-4575
// token replacement of addressee/email/postal greetings
// get the tokens added in subject and message
$messageToken = CRM_Utils_Token::getTokens($text);
$messageToken = array_merge($messageToken, CRM_Utils_Token::getTokens($html));
//create the meta level record first ( sms activity )
$activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'SMS', 'name');
// CRM-6265: save both text and HTML parts in details (if present)
if ($html and $text) {
$details = "-ALTERNATIVE ITEM 0-\n{$html}\n-ALTERNATIVE ITEM 1-\n{$text}\n-ALTERNATIVE END-\n";
} else {
$details = $html ? $html : $text;
}
$activitySubject = $activityParams['activity_subject'];
$activityParams = array('source_contact_id' => $userID, 'activity_type_id' => $activityTypeID, 'activity_date_time' => date('YmdHis'), 'subject' => $activitySubject, 'details' => $details, 'status_id' => 2);
$activity = self::create($activityParams);
$activityID = $activity->id;
$returnProperties = array();
if (isset($messageToken['contact'])) {
foreach ($messageToken['contact'] as $key => $value) {
$returnProperties[$value] = 1;
}
}
// get token details for contacts, call only if tokens are used
$details = array();
if (!empty($returnProperties)) {
list($details) = CRM_Utils_Token::getTokenDetails($contactIds, $returnProperties, NULL, NULL, FALSE, $messageToken, 'CRM_Activity_BAO_Activity');
}
// call token hook
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$categories = array_keys($tokens);
$escapeSmarty = $sent = FALSE;
foreach ($contactDetails as $values) {
$contactId = $values['contact_id'];
if (!empty($details) && is_array($details["{$contactId}"])) {
// unset email from details since it always returns primary email address
unset($details["{$contactId}"]['email']);
unset($details["{$contactId}"]['email_id']);
$values = array_merge($values, $details["{$contactId}"]);
}
$tokenText = CRM_Utils_Token::replaceContactTokens($text, $values, FALSE, $messageToken, FALSE, $escapeSmarty);
$tokenText = CRM_Utils_Token::replaceHookTokens($tokenText, $values, $categories, FALSE, $escapeSmarty);
$tokenHtml = CRM_Utils_Token::replaceContactTokens($html, $values, TRUE, $messageToken, FALSE, $escapeSmarty);
$tokenHtml = CRM_Utils_Token::replaceHookTokens($tokenHtml, $values, $categories, TRUE, $escapeSmarty);
$smsParams['To'] = $values['phone'];
if (self::sendSMSMessage($contactId, $tokenText, $tokenHtml, $smsParams, $activityID)) {
// even a single successful delivery should set this falg to true
$sent = TRUE;
}
}
return array($sent, $activity->id);
}
示例6: postProcess
/**
* process the form after the input has been submitted and validated
*
* @access public
*
* @return void
*/
public function postProcess()
{
$fv = $this->controller->exportValues($this->_name);
$config = CRM_Core_Config::singleton();
$locName = NULL;
//get the address format sequence from the config file
$mailingFormat = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'mailing_format');
$sequence = CRM_Utils_Address::sequence($mailingFormat);
foreach ($sequence as $v) {
$address[$v] = 1;
}
if (array_key_exists('postal_code', $address)) {
$address['postal_code_suffix'] = 1;
}
//build the returnproperties
$returnProperties = array('display_name' => 1, 'contact_type' => 1);
$mailingFormat = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'mailing_format');
$mailingFormatProperties = array();
if ($mailingFormat) {
$mailingFormatProperties = self::getReturnProperties($mailingFormat);
$returnProperties = array_merge($returnProperties, $mailingFormatProperties);
}
//we should not consider addressee for data exists, CRM-6025
if (array_key_exists('addressee', $mailingFormatProperties)) {
unset($mailingFormatProperties['addressee']);
}
$customFormatProperties = array();
if (stristr($mailingFormat, 'custom_')) {
foreach ($mailingFormatProperties as $token => $true) {
if (substr($token, 0, 7) == 'custom_') {
if (empty($customFormatProperties[$token])) {
$customFormatProperties[$token] = $mailingFormatProperties[$token];
}
}
}
}
if (!empty($customFormatProperties)) {
$returnProperties = array_merge($returnProperties, $customFormatProperties);
}
if (isset($fv['merge_same_address'])) {
// we need first name/last name for summarising to avoid spillage
$returnProperties['first_name'] = 1;
$returnProperties['last_name'] = 1;
}
$individualFormat = FALSE;
/*
* CRM-8338: replace ids of household members with the id of their household
* so we can merge labels by household.
*/
if (isset($fv['merge_same_household'])) {
$this->mergeContactIdsByHousehold();
$individualFormat = TRUE;
}
//get the contacts information
$params = array();
if (!empty($fv['location_type_id'])) {
$locType = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id');
$locName = $locType[$fv['location_type_id']];
$location = array('location' => array("{$locName}" => $address));
$returnProperties = array_merge($returnProperties, $location);
$params[] = array('location_type', '=', array($fv['location_type_id'] => 1), 0, 0);
} else {
$returnProperties = array_merge($returnProperties, $address);
}
$rows = array();
foreach ($this->_contactIds as $key => $contactID) {
$params[] = array(CRM_Core_Form::CB_PREFIX . $contactID, '=', 1, 0, 0);
}
// fix for CRM-2651
if (!empty($fv['do_not_mail'])) {
$params[] = array('do_not_mail', '=', 0, 0, 0);
}
// fix for CRM-2613
$params[] = array('is_deceased', '=', 0, 0, 0);
$custom = array();
foreach ($returnProperties as $name => $dontCare) {
$cfID = CRM_Core_BAO_CustomField::getKeyID($name);
if ($cfID) {
$custom[] = $cfID;
}
}
//get the total number of contacts to fetch from database.
$numberofContacts = count($this->_contactIds);
$query = new CRM_Contact_BAO_Query($params, $returnProperties);
$details = $query->apiQuery($params, $returnProperties, NULL, NULL, 0, $numberofContacts);
$messageToken = CRM_Utils_Token::getTokens($mailingFormat);
// also get all token values
CRM_Utils_Hook::tokenValues($details[0], $this->_contactIds, NULL, $messageToken, 'CRM_Contact_Form_Task_Label');
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$tokenFields = array();
foreach ($tokens as $category => $catTokens) {
foreach ($catTokens as $token => $tokenName) {
//.........这里部分代码省略.........
示例7: updateConstructedNames
public function updateConstructedNames()
{
require_once 'CRM/Utils/Address.php';
require_once 'CRM/Core/BAO/Preferences.php';
require_once 'CRM/Core/DAO.php';
require_once 'CRM/Core/PseudoConstant.php';
require_once 'CRM/Contact/BAO/Contact.php';
//handle individuals using settings in the system
$query = "SELECT * FROM civicrm_contact WHERE contact_type = 'Individual';";
$dao = CRM_Core_DAO::executeQuery($query);
$prefixes = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'prefix_id');
$suffixes = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'suffix_id');
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$tokenFields = array();
foreach ($tokens as $category => $catTokens) {
foreach ($catTokens as $token) {
$tokenFields[] = $token;
}
}
//determine sort name construction
$sortFormat = CRM_Core_BAO_Preferences::value('sort_name_format');
$sortFormat = str_replace('contact.', '', $sortFormat);
//determine display name construction
$displayFormat = CRM_Core_BAO_Preferences::value('display_name_format');
$displayFormat = str_replace('contact.', '', $displayFormat);
while ($dao->fetch()) {
$contactID = $dao->id;
$params = array('first_name' => $dao->first_name, 'middle_name' => $dao->middle_name, 'last_name' => $dao->last_name, 'prefix_id' => $dao->prefix_id, 'suffix_id' => $dao->suffix_id);
$params['individual_prefix'] = $prefixes[$dao->prefix_id];
$params['individual_suffix'] = $suffixes[$dao->suffix_id];
$sortName = CRM_Utils_Address::format($params, $sortFormat, FALSE, FALSE, TRUE, $tokenFields);
$sortName = trim(CRM_Core_DAO::escapeString($sortName));
$displayName = CRM_Utils_Address::format($params, $displayFormat, FALSE, FALSE, TRUE, $tokenFields);
$displayName = trim(CRM_Core_DAO::escapeString($displayName));
//check for email
if (empty($sortName) || empty($displayName)) {
$email = NULL;
$email = CRM_Contact_BAO_Contact::getPrimaryEmail($contactID);
if (empty($email)) {
$email = $contactID;
}
if (empty($sortName)) {
$sortName = $email;
}
if (empty($displayName)) {
$displayName = $email;
}
}
//update record
$updateQuery = "UPDATE civicrm_contact SET display_name = '{$displayName}', sort_name = '{$sortName}' WHERE id = {$contactID};";
CRM_Core_DAO::executeQuery($updateQuery);
}
//end indiv
echo "\n Individuals recached... ";
//set organizations
$query = "UPDATE civicrm_contact\n\t\t SET display_name = organization_name,\n\t\t\t\t sort_name = organization_name\n\t\t\t WHERE contact_type = 'Organization';";
$dao = CRM_Core_DAO::executeQuery($query);
echo "\n Organizations recached... ";
//set households
$query = "UPDATE civicrm_contact\n\t\t SET display_name = household_name,\n\t\t\t\t sort_name = household_name\n\t\t\t WHERE contact_type = 'Household';";
$dao = CRM_Core_DAO::executeQuery($query);
echo "\n Households recached... ";
}
示例8: array
/**
* different type of Contact Tokens
*
* @static
* return array
*/
static function &contactTokens()
{
static $tokens = null;
if (!$tokens) {
require_once 'CRM/Contact/BAO/Contact.php';
require_once 'CRM/Core/BAO/CustomField.php';
$additionalFields = array('checksum' => array('title' => ts('Checksum')), 'contact_id' => array('title' => ts('Internal Contact ID')));
$exportFields = array_merge(CRM_Contact_BAO_Contact::exportableFields(), $additionalFields);
$values = array_merge(array_keys($exportFields));
unset($values[0]);
//FIXME:skipping some tokens for time being.
$skipTokens = array('is_bulkmail', 'group', 'tag', 'contact_sub_type', 'note', 'is_deceased', 'deceased_date', 'legal_identifier', 'contact_sub_type', 'user_unique_id');
$customFields = array();
$customFields = CRM_Core_BAO_CustomField::getFields('Individual');
foreach ($values as $key => $val) {
if (in_array($val, $skipTokens)) {
continue;
}
//keys for $tokens should be constant. $token Values are changed for Custom Fields. CRM-3734
if ($customFieldId = CRM_Core_BAO_CustomField::getKeyID($val)) {
$tokens["{contact.{$val}}"] = $customFields[$customFieldId]['label'] . " :: " . $customFields[$customFieldId]['groupTitle'];
} else {
$tokens["{contact.{$val}}"] = $exportFields[$val]['title'];
}
}
// might as well get all the hook tokens to
require_once 'CRM/Utils/Hook.php';
$hookTokens = array();
CRM_Utils_Hook::tokens($hookTokens);
foreach ($hookTokens as $category => $tokenValues) {
foreach ($tokenValues as $key => $value) {
if (is_numeric($key)) {
$key = $value;
}
if (!preg_match('/^\\{[^\\}]+\\}$/', $key)) {
$key = '{' . $key . '}';
}
if (preg_match('/^\\{([^\\}]+)\\}$/', $value, $matches)) {
$value = $matches[1];
}
$tokens[$key] = $value;
}
}
}
return $tokens;
}
示例9: postProcess
/**
* process the form after the input has been submitted and validated
*
* @access public
* @return None
*/
static function postProcess(&$form)
{
$formValues = $form->controller->exportValues($form->getName());
// process message template
require_once 'CRM/Core/BAO/MessageTemplates.php';
if (CRM_Utils_Array::value('saveTemplate', $formValues) || CRM_Utils_Array::value('updateTemplate', $formValues)) {
$messageTemplate = array('msg_text' => NULL, 'msg_html' => $formValues['html_message'], 'msg_subject' => NULL, 'is_active' => true);
if ($formValues['saveTemplate']) {
$messageTemplate['msg_title'] = $formValues['saveTemplateName'];
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
if ($formValues['template'] && $formValues['updateTemplate']) {
$messageTemplate['id'] = $formValues['template'];
unset($messageTemplate['msg_title']);
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
}
require_once 'dompdf/dompdf_config.inc.php';
$html = '<html><head><style>body { margin: 56px; }</style></head><body>';
require_once 'api/v2/Contact.php';
require_once 'CRM/Utils/Token.php';
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$categories = array_keys($tokens);
$html_message = $formValues['html_message'];
require_once 'CRM/Activity/BAO/Activity.php';
$messageToken = CRM_Activity_BAO_Activity::getTokens($html_message);
$returnProperties = array();
if (isset($messageToken['contact'])) {
foreach ($messageToken['contact'] as $key => $value) {
$returnProperties[$value] = 1;
}
}
require_once 'CRM/Mailing/BAO/Mailing.php';
$mailing =& new CRM_Mailing_BAO_Mailing();
$first = TRUE;
foreach ($form->_contactIds as $item => $contactId) {
$params = array('contact_id' => $contactId);
list($contact) = $mailing->getDetails($params, $returnProperties, false);
if (civicrm_error($contact)) {
$notSent[] = $contactId;
continue;
}
$tokenHtml = CRM_Utils_Token::replaceContactTokens($html_message, $contact[$contactId], true, $messageToken);
$tokenHtml = CRM_Utils_Token::replaceHookTokens($tokenHtml, $contact[$contactId], $categories, true);
if ($first == TRUE) {
$first = FALSE;
$html .= $tokenHtml;
} else {
$html .= "<div STYLE='page-break-after: always'></div>{$tokenHtml}";
}
}
$html .= '</body></html>';
require_once 'CRM/Utils/PDF/Utils.php';
CRM_Utils_PDF_Utils::html2pdf($html, "CiviLetter.pdf", 'portrait');
exit(1);
}
示例10: sendReminder
static function sendReminder($contactId, $email, $scheduleID, $from, $tokenParams)
{
$schedule = new CRM_Core_DAO_ActionSchedule();
$schedule->id = $scheduleID;
$domain = CRM_Core_BAO_Domain::getDomain();
$result = NULL;
$hookTokens = array();
if ($schedule->find(TRUE)) {
$body_text = $schedule->body_text;
$body_html = $schedule->body_html;
$body_subject = $schedule->subject;
if (!$body_text) {
$body_text = CRM_Utils_String::htmlToText($body_html);
}
$params = array(array('contact_id', '=', $contactId, 0, 0));
list($contact, $_) = CRM_Contact_BAO_Query::apiQuery($params);
//CRM-4524
$contact = reset($contact);
if (!$contact || is_a($contact, 'CRM_Core_Error')) {
return NULL;
}
// merge activity tokens with contact array
$contact = array_merge($contact, $tokenParams);
//CRM-5734
CRM_Utils_Hook::tokenValues($contact, $contactId);
CRM_Utils_Hook::tokens($hookTokens);
$categories = array_keys($hookTokens);
$type = array('html', 'text');
foreach ($type as $key => $value) {
$dummy_mail = new CRM_Mailing_BAO_Mailing();
$bodyType = "body_{$value}";
$dummy_mail->{$bodyType} = ${$bodyType};
$tokens = $dummy_mail->getTokens();
if (${$bodyType}) {
CRM_Utils_Token::replaceGreetingTokens(${$bodyType}, NULL, $contact['contact_id']);
${$bodyType} = CRM_Utils_Token::replaceDomainTokens(${$bodyType}, $domain, TRUE, $tokens[$value], TRUE);
${$bodyType} = CRM_Utils_Token::replaceContactTokens(${$bodyType}, $contact, FALSE, $tokens[$value], FALSE, TRUE);
${$bodyType} = CRM_Utils_Token::replaceComponentTokens(${$bodyType}, $contact, $tokens[$value], TRUE, FALSE);
${$bodyType} = CRM_Utils_Token::replaceHookTokens(${$bodyType}, $contact, $categories, TRUE);
}
}
$html = $body_html;
$text = $body_text;
$smarty = CRM_Core_Smarty::singleton();
foreach (array('text', 'html') as $elem) {
${$elem} = $smarty->fetch("string:{${$elem}}");
}
$matches = array();
preg_match_all('/(?<!\\{|\\\\)\\{(\\w+\\.\\w+)\\}(?!\\})/', $body_subject, $matches, PREG_PATTERN_ORDER);
$subjectToken = NULL;
if ($matches[1]) {
foreach ($matches[1] as $token) {
list($type, $name) = preg_split('/\\./', $token, 2);
if ($name) {
if (!isset($subjectToken['contact'])) {
$subjectToken['contact'] = array();
}
$subjectToken['contact'][] = $name;
}
}
}
$messageSubject = CRM_Utils_Token::replaceContactTokens($body_subject, $contact, FALSE, $subjectToken);
$messageSubject = CRM_Utils_Token::replaceDomainTokens($messageSubject, $domain, TRUE, $tokens[$value]);
$messageSubject = CRM_Utils_Token::replaceComponentTokens($messageSubject, $contact, $tokens[$value], TRUE);
$messageSubject = CRM_Utils_Token::replaceHookTokens($messageSubject, $contact, $categories, TRUE);
$messageSubject = $smarty->fetch("string:{$messageSubject}");
// set up the parameters for CRM_Utils_Mail::send
$mailParams = array('groupName' => 'Scheduled Reminder Sender', 'from' => $from, 'toName' => $contact['display_name'], 'toEmail' => $email, 'subject' => $messageSubject);
if (!$html || $contact['preferred_mail_format'] == 'Text' || $contact['preferred_mail_format'] == 'Both') {
// render the & entities in text mode, so that the links work
$mailParams['text'] = str_replace('&', '&', $text);
}
if ($html && ($contact['preferred_mail_format'] == 'HTML' || $contact['preferred_mail_format'] == 'Both')) {
$mailParams['html'] = $html;
}
$result = CRM_Utils_Mail::send($mailParams);
}
$schedule->free();
return $result;
}
示例11: sendTemplate
/**
* Send an email from the specified template based on an array of params
*
* @param array $params a string-keyed array of function params, see function body for details
*
* @return array of four parameters: a boolean whether the email was sent, and the subject, text and HTML templates
*/
static function sendTemplate($params)
{
$defaults = array('groupName' => NULL, 'valueName' => NULL, 'messageTemplateID' => NULL, 'contactId' => NULL, 'tplParams' => array(), 'from' => NULL, 'toName' => NULL, 'toEmail' => NULL, 'cc' => NULL, 'bcc' => NULL, 'replyTo' => NULL, 'attachments' => NULL, 'isTest' => FALSE, 'PDFFilename' => NULL);
$params = array_merge($defaults, $params);
if ((!$params['groupName'] || !$params['valueName']) && !$params['messageTemplateID']) {
CRM_Core_Error::fatal(ts("Message template's option group and/or option value or ID missing."));
}
if ($params['messageTemplateID']) {
// fetch the three elements from the db based on id
$query = 'SELECT msg_subject subject, msg_text text, msg_html html, pdf_format_id format
FROM civicrm_msg_template mt
WHERE mt.id = %1 AND mt.is_default = 1';
$sqlParams = array(1 => array($params['messageTemplateID'], 'String'));
} else {
// fetch the three elements from the db based on option_group and option_value names
$query = 'SELECT msg_subject subject, msg_text text, msg_html html, pdf_format_id format
FROM civicrm_msg_template mt
JOIN civicrm_option_value ov ON workflow_id = ov.id
JOIN civicrm_option_group og ON ov.option_group_id = og.id
WHERE og.name = %1 AND ov.name = %2 AND mt.is_default = 1';
$sqlParams = array(1 => array($params['groupName'], 'String'), 2 => array($params['valueName'], 'String'));
}
$dao = CRM_Core_DAO::executeQuery($query, $sqlParams);
$dao->fetch();
if (!$dao->N) {
if ($params['messageTemplateID']) {
CRM_Core_Error::fatal(ts('No such message template: id=%1.', array(1 => $params['messageTemplateID'])));
} else {
CRM_Core_Error::fatal(ts('No such message template: option group %1, option value %2.', array(1 => $params['groupName'], 2 => $params['valueName'])));
}
}
$subject = $dao->subject;
$text = $dao->text;
$html = $dao->html;
$format = $dao->format;
$dao->free();
// add the test banner (if requested)
if ($params['isTest']) {
$query = "SELECT msg_subject subject, msg_text text, msg_html html\n FROM civicrm_msg_template mt\n JOIN civicrm_option_value ov ON workflow_id = ov.id\n JOIN civicrm_option_group og ON ov.option_group_id = og.id\n WHERE og.name = 'msg_tpl_workflow_meta' AND ov.name = 'test_preview' AND mt.is_default = 1";
$testDao = CRM_Core_DAO::executeQuery($query);
$testDao->fetch();
$subject = $testDao->subject . $subject;
$text = $testDao->text . $text;
$html = preg_replace('/<body(.*)$/im', "<body\\1\n{$testDao->html}", $html);
$testDao->free();
}
// replace tokens in the three elements (in subject as if it was the text body)
$domain = CRM_Core_BAO_Domain::getDomain();
$hookTokens = array();
$mailing = new CRM_Mailing_BAO_Mailing();
$mailing->body_text = $text;
$mailing->body_html = $html;
$tokens = $mailing->getTokens();
CRM_Utils_Hook::tokens($hookTokens);
$categories = array_keys($hookTokens);
$contactID = CRM_Utils_Array::value('contactId', $params);
if ($contactID) {
$contactParams = array('contact_id' => $contactID);
$returnProperties = array();
if (isset($tokens['text']['contact'])) {
foreach ($tokens['text']['contact'] as $name) {
$returnProperties[$name] = 1;
}
}
if (isset($tokens['html']['contact'])) {
foreach ($tokens['html']['contact'] as $name) {
$returnProperties[$name] = 1;
}
}
list($contact) = CRM_Utils_Token::getTokenDetails($contactParams, $returnProperties, FALSE, FALSE, NULL, CRM_Utils_Token::flattenTokens($tokens), 'CRM_Core_BAO_MessageTemplate');
$contact = $contact[$contactID];
}
$subject = CRM_Utils_Token::replaceDomainTokens($subject, $domain, TRUE, $tokens['text'], TRUE);
$text = CRM_Utils_Token::replaceDomainTokens($text, $domain, TRUE, $tokens['text'], TRUE);
$html = CRM_Utils_Token::replaceDomainTokens($html, $domain, TRUE, $tokens['html'], TRUE);
if ($contactID) {
$subject = CRM_Utils_Token::replaceContactTokens($subject, $contact, FALSE, $tokens['text'], FALSE, TRUE);
$text = CRM_Utils_Token::replaceContactTokens($text, $contact, FALSE, $tokens['text'], FALSE, TRUE);
$html = CRM_Utils_Token::replaceContactTokens($html, $contact, FALSE, $tokens['html'], FALSE, TRUE);
$contactArray = array($contactID => $contact);
CRM_Utils_Hook::tokenValues($contactArray, array($contactID), NULL, CRM_Utils_Token::flattenTokens($tokens), 'CRM_Core_BAO_MessageTemplate');
$contact = $contactArray[$contactID];
$subject = CRM_Utils_Token::replaceHookTokens($subject, $contact, $categories, TRUE);
$text = CRM_Utils_Token::replaceHookTokens($text, $contact, $categories, TRUE);
$html = CRM_Utils_Token::replaceHookTokens($html, $contact, $categories, TRUE);
}
// strip whitespace from ends and turn into a single line
$subject = "{strip}{$subject}{/strip}";
// parse the three elements with Smarty
$smarty = CRM_Core_Smarty::singleton();
foreach ($params['tplParams'] as $name => $value) {
$smarty->assign($name, $value);
}
//.........这里部分代码省略.........
示例12: format
//.........这里部分代码省略.........
} else {
if ($value) {
$temp = ${$vals};
${$phpName} = $temp[$value];
}
}
}
}
}
}
//first trim before further processing.
foreach (array('lastName', 'firstName', 'middleName') as $fld) {
${$fld} = trim(${$fld});
}
if ($lastName || $firstName || $middleName) {
// make sure we have values for all the name fields.
$formatted = $params;
$nameParams = array('first_name' => $firstName, 'middle_name' => $middleName, 'last_name' => $lastName, 'individual_suffix' => $suffix, 'individual_prefix' => $prefix, 'prefix_id' => $prefix_id, 'suffix_id' => $suffix_id);
// make sure we have all the name fields.
foreach ($nameParams as $name => $value) {
if (!CRM_Utils_Array::value($name, $formatted) && $value) {
$formatted[$name] = $value;
}
}
// make sure we have values for all the name fields.
$formatted = $params;
$nameParams = array('first_name' => $firstName, 'middle_name' => $middleName, 'last_name' => $lastName, 'individual_suffix' => $suffix, 'individual_prefix' => $prefix, 'prefix_id' => $prefix_id, 'suffix_id' => $suffix_id);
// make sure we have all the name fields.
foreach ($nameParams as $name => $value) {
if (!CRM_Utils_Array::value($name, $formatted) && $value) {
$formatted[$name] = $value;
}
}
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$tokenFields = array();
foreach ($tokens as $category => $catTokens) {
foreach ($catTokens as $token) {
$tokenFields[] = $token;
}
}
require_once 'CRM/Utils/Address.php';
require_once 'CRM/Core/BAO/Preferences.php';
//build the sort name.
$format = CRM_Core_BAO_Preferences::value('sort_name_format');
$format = str_replace('contact.', '', $format);
$sortName = CRM_Utils_Address::format($formatted, $format, false, false, true, $tokenFields);
$sortName = trim($sortName);
//build the display name.
$format = CRM_Core_BAO_Preferences::value('display_name_format');
$format = str_replace('contact.', '', $format);
$displayName = CRM_Utils_Address::format($formatted, $format, false, false, true, $tokenFields);
$displayName = trim($displayName);
}
//start further check for email.
if (empty($sortName) || empty($displayName)) {
$email = null;
if (CRM_Utils_Array::value('email', $params) && is_array($params['email'])) {
foreach ($params['email'] as $emailBlock) {
if (isset($emailBlock['is_primary'])) {
$email = $emailBlock['email'];
break;
}
}
}
$uniqId = CRM_Utils_Array::value('user_unique_id', $params);
示例13: replaceTokens
protected function replaceTokens($input, $contact_id)
{
//get contact
$params = array(array('contact_id', '=', $contact_id, 0, 0));
list($contact, $_) = CRM_Contact_BAO_Query::apiQuery($params);
$contact = reset($contact);
if (!$contact || is_a($contact, 'CRM_Core_Error')) {
throw new API_Exception('Could not find contact with ID: ' . $params['contact_id']);
}
$tokens = CRM_Utils_Token::getTokens($input);
// get replacement text for these tokens
$returnProperties = array('sort_name' => 1, 'email' => 1, 'do_not_email' => 1, 'is_deceased' => 1, 'on_hold' => 1, 'display_name' => 1, 'preferred_mail_format' => 1);
if (isset($tokens['contact'])) {
foreach ($tokens['contact'] as $key => $value) {
$returnProperties[$value] = 1;
}
}
list($details) = CRM_Utils_Token::getTokenDetails(array($contact_id), $returnProperties, false, false, null, $tokens);
$contact = reset($details);
// call token hook
$hookTokens = array();
CRM_Utils_Hook::tokens($hookTokens);
$categories = array_keys($hookTokens);
CRM_Utils_Token::replaceGreetingTokens($input, NULL, $contact['contact_id']);
$input = CRM_Utils_Token::replaceDomainTokens($input, $domain, true, $tokens, true);
$input = CRM_Utils_Token::replaceContactTokens($input, $contact, false, $tokens, false, true);
$input = CRM_Utils_Token::replaceComponentTokens($input, $contact, $tokens, true);
$input = CRM_Utils_Token::replaceHookTokens($input, $contact, $categories, true);
return $input;
}
示例14: contactTokens
/**
* Different type of Contact Tokens.
*
* @return array
*/
public static function contactTokens()
{
static $tokens = NULL;
if (!$tokens) {
$additionalFields = array('checksum' => array('title' => ts('Checksum')), 'contact_id' => array('title' => ts('Internal Contact ID')));
$exportFields = array_merge(CRM_Contact_BAO_Contact::exportableFields(), $additionalFields);
$values = array_merge(array_keys($exportFields));
unset($values[0]);
//FIXME:skipping some tokens for time being.
$skipTokens = array('is_bulkmail', 'group', 'tag', 'contact_sub_type', 'note', 'is_deceased', 'deceased_date', 'legal_identifier', 'contact_sub_type', 'user_unique_id');
$customFields = CRM_Core_BAO_CustomField::getFields(array('Individual', 'Address'));
$legacyTokenNames = array_flip(CRM_Utils_Token::legacyContactTokens());
foreach ($values as $val) {
if (in_array($val, $skipTokens)) {
continue;
}
//keys for $tokens should be constant. $token Values are changed for Custom Fields. CRM-3734
$customFieldId = CRM_Core_BAO_CustomField::getKeyID($val);
if ($customFieldId) {
// CRM-15191 - if key is not in $customFields then the field is disabled and should be ignored
if (!empty($customFields[$customFieldId])) {
$tokens["{contact.{$val}}"] = $customFields[$customFieldId]['label'] . " :: " . $customFields[$customFieldId]['groupTitle'];
}
} else {
// Support legacy token names
$tokenName = CRM_Utils_Array::value($val, $legacyTokenNames, $val);
$tokens["{contact.{$tokenName}}"] = $exportFields[$val]['title'];
}
}
// Get all the hook tokens too
$hookTokens = array();
CRM_Utils_Hook::tokens($hookTokens);
foreach ($hookTokens as $tokenValues) {
foreach ($tokenValues as $key => $value) {
if (is_numeric($key)) {
$key = $value;
}
if (!preg_match('/^\\{[^\\}]+\\}$/', $key)) {
$key = '{' . $key . '}';
}
if (preg_match('/^\\{([^\\}]+)\\}$/', $value, $matches)) {
$value = $matches[1];
}
$tokens[$key] = $value;
}
}
}
return $tokens;
}
示例15: postProcess
/**
* process the form after the input has been submitted and validated
*
* @access public
* @return None
*/
static function postProcess(&$form)
{
$formValues = $form->controller->exportValues($form->getName());
// process message template
require_once 'CRM/Core/BAO/MessageTemplates.php';
if (CRM_Utils_Array::value('saveTemplate', $formValues) || CRM_Utils_Array::value('updateTemplate', $formValues)) {
$messageTemplate = array('msg_text' => NULL, 'msg_html' => $formValues['html_message'], 'msg_subject' => NULL, 'is_active' => true);
if ($formValues['saveTemplate']) {
$messageTemplate['msg_title'] = $formValues['saveTemplateName'];
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
if ($formValues['template'] && $formValues['updateTemplate']) {
$messageTemplate['id'] = $formValues['template'];
unset($messageTemplate['msg_title']);
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
}
require_once 'dompdf/dompdf_config.inc.php';
$html = '<html><head><style>body { margin: 56px; }</style></head><body>';
require_once 'api/v2/Contact.php';
require_once 'CRM/Utils/Token.php';
$tokens = array();
CRM_Utils_Hook::tokens($tokens);
$categories = array_keys($tokens);
$html_message = $formValues['html_message'];
//time being hack to strip ' '
//from particular letter line, CRM-6798
self::formatMessage($html_message);
require_once 'CRM/Activity/BAO/Activity.php';
$messageToken = CRM_Activity_BAO_Activity::getTokens($html_message);
$returnProperties = array();
if (isset($messageToken['contact'])) {
foreach ($messageToken['contact'] as $key => $value) {
$returnProperties[$value] = 1;
}
}
require_once 'CRM/Mailing/BAO/Mailing.php';
$mailing = new CRM_Mailing_BAO_Mailing();
if (defined('CIVICRM_MAIL_SMARTY')) {
require_once 'CRM/Core/Smarty/resources/String.php';
civicrm_smarty_register_string_resource();
}
$first = TRUE;
foreach ($form->_contactIds as $item => $contactId) {
$params = array('contact_id' => $contactId);
list($contact) = $mailing->getDetails($params, $returnProperties, false);
if (civicrm_error($contact)) {
$notSent[] = $contactId;
continue;
}
$tokenHtml = CRM_Utils_Token::replaceContactTokens($html_message, $contact[$contactId], true, $messageToken);
$tokenHtml = CRM_Utils_Token::replaceHookTokens($tokenHtml, $contact[$contactId], $categories, true);
if (defined('CIVICRM_MAIL_SMARTY')) {
$smarty = CRM_Core_Smarty::singleton();
// also add the contact tokens to the template
$smarty->assign_by_ref('contact', $contact);
$tokenHtml = $smarty->fetch("string:{$tokenHtml}");
}
if ($first == TRUE) {
$first = FALSE;
$html .= $tokenHtml;
} else {
$html .= "<div STYLE='page-break-after: always'></div>{$tokenHtml}";
}
}
$html .= '</body></html>';
require_once 'CRM/Activity/BAO/Activity.php';
$session = CRM_Core_Session::singleton();
$userID = $session->get('userID');
$activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Print PDF Letter', 'name');
$activityParams = array('source_contact_id' => $userID, 'activity_type_id' => $activityTypeID, 'activity_date_time' => date('YmdHis'), 'details' => $html_message);
if ($form->_activityId) {
$activityParams += array('id' => $form->_activityId);
}
if ($form->_cid) {
$activity = CRM_Activity_BAO_Activity::create($activityParams);
} else {
// create Print PDF activity for each selected contact. CRM-6886
$activityIds = array();
foreach ($form->_contactIds as $contactId) {
$activityID = CRM_Activity_BAO_Activity::create($activityParams);
$activityIds[$contactId] = $activityID->id;
}
}
foreach ($form->_contactIds as $contactId) {
$activityTargetParams = array('activity_id' => empty($activity->id) ? $activityIds[$contactId] : $activity->id, 'target_contact_id' => $contactId);
CRM_Activity_BAO_Activity::createActivityTarget($activityTargetParams);
}
require_once 'CRM/Utils/PDF/Utils.php';
CRM_Utils_PDF_Utils::html2pdf($html, "CiviLetter.pdf", 'portrait', 'letter');
// we need to call the hook manually here since we redirect and never
// go back to CRM/Core/Form.php
CRM_Utils_Hook::postProcess(get_class($form), $form);
CRM_Utils_System::civiExit(1);
//.........这里部分代码省略.........