本文整理汇总了PHP中CRM_Contact_BAO_Query::apiQuery方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Contact_BAO_Query::apiQuery方法的具体用法?PHP CRM_Contact_BAO_Query::apiQuery怎么用?PHP CRM_Contact_BAO_Query::apiQuery使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Contact_BAO_Query
的用法示例。
在下文中一共展示了CRM_Contact_BAO_Query::apiQuery方法的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: isContactInGroup
/**
* Checks wether a contact is a member of a group
*
* This function is a copy of CRM_Contact_BAO_GroupContact::isContactInGroup but with
* a change so that the group contact cache won't be rebuild. Which somehow resulted
* in a deadlock
*
* @param $contact_id
* @param $group_id
* @return bool
*/
public static function isContactInGroup($contact_id, $group_id)
{
if (!CRM_Utils_Rule::positiveInteger($contact_id) || !CRM_Utils_Rule::positiveInteger($group_id)) {
return FALSE;
}
$params = array(array('group', 'IN', array($group_id => 1), 0, 0), array('contact_id', '=', $contact_id, 0, 0));
list($contacts, $_) = CRM_Contact_BAO_Query::apiQuery($params, array('contact_id'), null, null, 0, 1, false, false, true);
if (!empty($contacts)) {
return TRUE;
}
return FALSE;
}
示例3: _civicrm_api3_get_using_query_object
function _civicrm_api3_get_using_query_object($object_type, $params, $additional_options = array(), $getCount = null)
{
// Convert id to e.g. contact_id
if (empty($params[$object_type . '_id']) && isset($params['id'])) {
$params[$object_type . '_id'] = $params['id'];
}
unset($params['id']);
$options = _civicrm_api3_get_options_from_params($params, TRUE);
$inputParams = array_merge(CRM_Utils_Array::value('input_params', $options, array()), CRM_Utils_Array::value('input_params', $additional_options, array()));
$returnProperties = array_merge(CRM_Utils_Array::value('return', $options, array()), CRM_Utils_Array::value('return', $additional_options, array()));
if (empty($returnProperties)) {
$returnProperties = null;
}
$options = array_merge($options, $additional_options);
$sort = CRM_Utils_Array::value('sort', $options, NULL);
$offset = CRM_Utils_Array::value('offset', $options, NULL);
$limit = CRM_Utils_Array::value('limit', $options, NULL);
$smartGroupCache = CRM_Utils_Array::value('smartGroupCache', $params);
if ($getCount) {
$limit = NULL;
$returnProperties = NULL;
}
$newParams = CRM_Contact_BAO_Query::convertFormValues($inputParams);
list($entities, $options) = CRM_Contact_BAO_Query::apiQuery($newParams, $returnProperties, NULL, $sort, $offset, $limit, $smartGroupCache, $getCount);
if ($getCount) {
// only return the count of contacts
return $entities[0];
}
return $entities;
}
示例4: sendTemplate
//.........这里部分代码省略.........
$hookTokens = array();
$mailing = new CRM_Mailing_BAO_Mailing();
$mailing->subject = $mailContent['subject'];
$mailing->body_text = $mailContent['text'];
$mailing->body_html = $mailContent['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['subject']['contact'])) {
foreach ($tokens['subject']['contact'] as $name) {
$returnProperties[$name] = 1;
}
}
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;
}
}
// @todo CRM-17253 don't resolve contact details if there are no tokens
// effectively comment out this next (performance-expensive) line
// but unfortunately testing is a bit think on the ground to that needs to
// be added.
list($contact) = CRM_Utils_Token::getTokenDetails($contactParams, $returnProperties, FALSE, FALSE, NULL, CRM_Utils_Token::flattenTokens($tokens), 'CRM_Core_BAO_MessageTemplate');
$contact = $contact[$contactID];
}
$mailContent['subject'] = CRM_Utils_Token::replaceDomainTokens($mailContent['subject'], $domain, FALSE, $tokens['text'], TRUE);
$mailContent['text'] = CRM_Utils_Token::replaceDomainTokens($mailContent['text'], $domain, FALSE, $tokens['text'], TRUE);
$mailContent['html'] = CRM_Utils_Token::replaceDomainTokens($mailContent['html'], $domain, TRUE, $tokens['html'], TRUE);
if ($contactID) {
$mailContent['subject'] = CRM_Utils_Token::replaceContactTokens($mailContent['subject'], $contact, FALSE, $tokens['text'], FALSE, TRUE);
$mailContent['text'] = CRM_Utils_Token::replaceContactTokens($mailContent['text'], $contact, FALSE, $tokens['text'], FALSE, TRUE);
$mailContent['html'] = CRM_Utils_Token::replaceContactTokens($mailContent['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];
$mailContent['subject'] = CRM_Utils_Token::replaceHookTokens($mailContent['subject'], $contact, $categories, TRUE);
$mailContent['text'] = CRM_Utils_Token::replaceHookTokens($mailContent['text'], $contact, $categories, TRUE);
$mailContent['html'] = CRM_Utils_Token::replaceHookTokens($mailContent['html'], $contact, $categories, TRUE);
}
// strip whitespace from ends and turn into a single line
$mailContent['subject'] = "{strip}{$mailContent['subject']}{/strip}";
// parse the three elements with Smarty
$smarty = CRM_Core_Smarty::singleton();
foreach ($params['tplParams'] as $name => $value) {
$smarty->assign($name, $value);
}
foreach (array('subject', 'text', 'html') as $elem) {
$mailContent[$elem] = $smarty->fetch("string:{$mailContent[$elem]}");
}
// send the template, honouring the target user’s preferences (if any)
$sent = FALSE;
// create the params array
$params['subject'] = $mailContent['subject'];
$params['text'] = $mailContent['text'];
$params['html'] = $mailContent['html'];
if ($params['toEmail']) {
$contactParams = array(array('email', 'LIKE', $params['toEmail'], 0, 1));
list($contact, $_) = CRM_Contact_BAO_Query::apiQuery($contactParams);
$prefs = array_pop($contact);
if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] == 'HTML') {
$params['text'] = NULL;
}
if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] == 'Text') {
$params['html'] = NULL;
}
$config = CRM_Core_Config::singleton();
if (isset($params['isEmailPdf']) && $params['isEmailPdf'] == 1) {
$pdfHtml = CRM_Contribute_BAO_ContributionPage::addInvoicePdfToEmail($params['contributionId'], $params['contactId']);
if (empty($params['attachments'])) {
$params['attachments'] = array();
}
$params['attachments'][] = CRM_Utils_Mail::appendPDF('Invoice.pdf', $pdfHtml, $mailContent['format']);
}
$pdf_filename = '';
if ($config->doNotAttachPDFReceipt && $params['PDFFilename'] && $params['html']) {
if (empty($params['attachments'])) {
$params['attachments'] = array();
}
$params['attachments'][] = CRM_Utils_Mail::appendPDF($params['PDFFilename'], $params['html'], $mailContent['format']);
if (isset($params['tplParams']['email_comment'])) {
$params['html'] = $params['tplParams']['email_comment'];
$params['text'] = strip_tags($params['tplParams']['email_comment']);
}
}
$sent = CRM_Utils_Mail::send($params);
if ($pdf_filename) {
unlink($pdf_filename);
}
}
return array($sent, $mailContent['subject'], $mailContent['text'], $mailContent['html']);
}
示例5: 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;
}
示例6: getTokenDetails
/**
* Gives required details of contacts in an indexed array format so we
* can iterate in a nice loop and do token evaluation
*
* @param $contactIDs
* @param array $returnProperties
* Of required properties.
* @param bool $skipOnHold Don't return on_hold contact info also.
* Don't return on_hold contact info also.
* @param bool $skipDeceased Don't return deceased contact info.
* Don't return deceased contact info.
* @param array $extraParams
* Extra params.
* @param array $tokens
* The list of tokens we've extracted from the content.
* @param null $className
* @param int $jobID
* The mailing list jobID - this is a legacy param.
*
* @return array
*/
public static function getTokenDetails($contactIDs, $returnProperties = NULL, $skipOnHold = TRUE, $skipDeceased = TRUE, $extraParams = NULL, $tokens = array(), $className = NULL, $jobID = NULL)
{
if (empty($contactIDs)) {
// putting a fatal here so we can track if/when this happens
CRM_Core_Error::fatal();
}
// @todo this functions needs unit tests.
$params = array();
foreach ($contactIDs as $key => $contactID) {
$params[] = array(CRM_Core_Form::CB_PREFIX . $contactID, '=', 1, 0, 0);
}
// fix for CRM-2613
if ($skipDeceased) {
$params[] = array('is_deceased', '=', 0, 0, 0);
}
//fix for CRM-3798
if ($skipOnHold) {
$params[] = array('on_hold', '=', 0, 0, 0);
}
if ($extraParams) {
$params = array_merge($params, $extraParams);
}
// if return properties are not passed then get all return properties
if (empty($returnProperties)) {
$fields = array_merge(array_keys(CRM_Contact_BAO_Contact::exportableFields()), array('display_name', 'checksum', 'contact_id'));
foreach ($fields as $key => $val) {
// The unavailable fields are not available as tokens, do not have a one-2-one relationship
// with contacts and are expensive to resolve.
// @todo see CRM-17253 - there are some other fields (e.g note) that should be excluded
// and upstream calls to this should populate return properties.
$unavailableFields = array('group', 'tag');
if (!in_array($val, $unavailableFields)) {
$returnProperties[$val] = 1;
}
}
}
$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($contactIDs);
$query = new CRM_Contact_BAO_Query($params, $returnProperties);
$details = $query->apiQuery($params, $returnProperties, NULL, NULL, 0, $numberofContacts);
$contactDetails =& $details[0];
foreach ($contactIDs as $key => $contactID) {
if (array_key_exists($contactID, $contactDetails)) {
if (CRM_Utils_Array::value('preferred_communication_method', $returnProperties) == 1 && array_key_exists('preferred_communication_method', $contactDetails[$contactID])) {
$pcm = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method');
// communication Preference
$contactPcm = explode(CRM_Core_DAO::VALUE_SEPARATOR, $contactDetails[$contactID]['preferred_communication_method']);
$result = array();
foreach ($contactPcm as $key => $val) {
if ($val) {
$result[$val] = $pcm[$val];
}
}
$contactDetails[$contactID]['preferred_communication_method'] = implode(', ', $result);
}
foreach ($custom as $cfID) {
if (isset($contactDetails[$contactID]["custom_{$cfID}"])) {
$contactDetails[$contactID]["custom_{$cfID}"] = CRM_Core_BAO_CustomField::getDisplayValue($contactDetails[$contactID]["custom_{$cfID}"], $cfID, $details[1]);
}
}
// special case for greeting replacement
foreach (array('email_greeting', 'postal_greeting', 'addressee') as $val) {
if (!empty($contactDetails[$contactID][$val])) {
$contactDetails[$contactID][$val] = $contactDetails[$contactID]["{$val}_display"];
}
}
}
}
// also call a hook and get token details
CRM_Utils_Hook::tokenValues($details[0], $contactIDs, $jobID, $tokens, $className);
return $details;
}
示例7: 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) {
//.........这里部分代码省略.........
示例8: compose
/**
* Compose a message.
*
* @param int $job_id
* ID of the Job associated with this message.
* @param int $event_queue_id
* ID of the EventQueue.
* @param string $hash
* Hash of the EventQueue.
* @param string $contactId
* ID of the Contact.
* @param string $email
* Destination address.
* @param string $recipient
* To: of the recipient.
* @param bool $test
* Is this mailing a test?.
* @param $contactDetails
* @param $attachments
* @param bool $isForward
* Is this mailing compose for forward?.
* @param string $fromEmail
* Email address of who is forwardinf it.
*
* @param null $replyToEmail
*
* @return Mail_mime The mail object
*/
public function compose($job_id, $event_queue_id, $hash, $contactId, $email, &$recipient, $test, $contactDetails, &$attachments, $isForward = FALSE, $fromEmail = NULL, $replyToEmail = NULL)
{
$config = CRM_Core_Config::singleton();
$this->getTokens();
if ($this->_domain == NULL) {
$this->_domain = CRM_Core_BAO_Domain::getDomain();
}
list($verp, $urls, $headers) = $this->getVerpAndUrlsAndHeaders($job_id, $event_queue_id, $hash, $email, $isForward);
//set from email who is forwarding it and not original one.
if ($fromEmail) {
unset($headers['From']);
$headers['From'] = "<{$fromEmail}>";
}
if ($replyToEmail && $fromEmail != $replyToEmail) {
$headers['Reply-To'] = "{$replyToEmail}";
}
if ($contactDetails) {
$contact = $contactDetails;
} elseif ($contactId === 0) {
//anonymous user
$contact = array();
CRM_Utils_Hook::tokenValues($contact, $contactId, $job_id);
} else {
$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')) {
CRM_Core_Error::debug_log_message(ts('CiviMail will not send email to a non-existent contact: %1', array(1 => $contactId)));
// setting this because function is called by reference
//@todo test not calling function by reference
$res = NULL;
return $res;
}
// also call the hook to get contact details
CRM_Utils_Hook::tokenValues($contact, $contactId, $job_id);
}
$pTemplates = $this->getPreparedTemplates();
$pEmails = array();
foreach ($pTemplates as $type => $pTemplate) {
$html = $type == 'html' ? TRUE : FALSE;
$pEmails[$type] = array();
$pEmail =& $pEmails[$type];
$template =& $pTemplates[$type]['template'];
$tokens =& $pTemplates[$type]['tokens'];
$idx = 0;
if (!empty($tokens)) {
foreach ($tokens as $idx => $token) {
$token_data = $this->getTokenData($token, $html, $contact, $verp, $urls, $event_queue_id);
array_push($pEmail, $template[$idx]);
array_push($pEmail, $token_data);
}
} else {
array_push($pEmail, $template[$idx]);
}
if (isset($template[$idx + 1])) {
array_push($pEmail, $template[$idx + 1]);
}
}
$html = NULL;
if (isset($pEmails['html']) && is_array($pEmails['html']) && count($pEmails['html'])) {
$html =& $pEmails['html'];
}
$text = NULL;
if (isset($pEmails['text']) && is_array($pEmails['text']) && count($pEmails['text'])) {
$text =& $pEmails['text'];
}
// push the tracking url on to the html email if necessary
if ($this->open_tracking && $html) {
array_push($html, "\n" . '<img src="' . $config->userFrameworkResourceURL . "extern/open.php?q={$event_queue_id}\" width='1' height='1' alt='' border='0'>");
}
$message = new Mail_mime("\n");
//.........这里部分代码省略.........
示例9: array
/**
* Get the list of member for a group id.
*
* @param int $groupID
* @param bool $useCache
*
* @return array
* this array contains the list of members for this group id
*/
public static function &getMember($groupID, $useCache = TRUE)
{
$params = array(array('group', '=', $groupID, 0, 0));
$returnProperties = array('contact_id');
list($contacts, $_) = CRM_Contact_BAO_Query::apiQuery($params, $returnProperties, NULL, NULL, 0, 0, $useCache);
$aMembers = array();
foreach ($contacts as $contact) {
$aMembers[$contact['contact_id']] = 1;
}
return $aMembers;
}
示例10: _civicrm_api3_get_using_query_object
/**
* The API supports 2 types of get requestion. The more complex uses the BAO query object.
* This is a generic function for those functions that call it
*
* At the moment only called by contact we should extend to contribution &
* others that use the query object. Note that this function passes permission information in.
* The others don't
*
* * Ideally this would be merged with _civicrm_get_query_object but we need to resolve differences in what the
* 2 variants call
* @param $entity
* @param array $params as passed into api get or getcount function
* @param array $additional_options array of options (so we can modify the filter)
* @param bool $getCount are we just after the count
*
* @return
*/
function _civicrm_api3_get_using_query_object($entity, $params, $additional_options = array(), $getCount = NULL)
{
// Convert id to e.g. contact_id
if (empty($params[$entity . '_id']) && isset($params['id'])) {
$params[$entity . '_id'] = $params['id'];
}
unset($params['id']);
$options = _civicrm_api3_get_options_from_params($params, TRUE);
$inputParams = array_merge(CRM_Utils_Array::value('input_params', $options, array()), CRM_Utils_Array::value('input_params', $additional_options, array()));
$returnProperties = array_merge(CRM_Utils_Array::value('return', $options, array()), CRM_Utils_Array::value('return', $additional_options, array()));
if (empty($returnProperties)) {
$returnProperties = NULL;
}
if (!empty($params['check_permissions'])) {
// we will filter query object against getfields
$fields = civicrm_api($entity, 'getfields', array('version' => 3, 'action' => 'get'));
// we need to add this in as earlier in this function 'id' was unset in favour of $entity_id
$fields['values'][$entity . '_id'] = array();
$varsToFilter = array('returnProperties', 'inputParams');
foreach ($varsToFilter as $varToFilter) {
if (!is_array(${$varToFilter})) {
continue;
}
//I was going to throw an exception rather than silently filter out - but
//would need to diff out of exceptions arr other keys like 'options', 'return', 'api. etcetc
//so we are silently ignoring parts of their request
//$exceptionsArr = array_diff(array_keys($$varToFilter), array_keys($fields['values']));
${$varToFilter} = array_intersect_key(${$varToFilter}, $fields['values']);
}
}
$options = array_merge($options, $additional_options);
$sort = CRM_Utils_Array::value('sort', $options, NULL);
$offset = CRM_Utils_Array::value('offset', $options, NULL);
$limit = CRM_Utils_Array::value('limit', $options, NULL);
$smartGroupCache = CRM_Utils_Array::value('smartGroupCache', $params);
if ($getCount) {
$limit = NULL;
$returnProperties = NULL;
}
$newParams = CRM_Contact_BAO_Query::convertFormValues($inputParams);
foreach ($newParams as &$newParam) {
if ($newParam[1] == '=' && is_array($newParam[2])) {
// we may be looking at an attempt to use the 'IN' style syntax
// @todo at time of writing only 'IN' & 'NOT IN' are supported for the array style syntax
$sqlFilter = CRM_Core_DAO::createSqlFilter($newParam[0], $params[$newParam[0]], 'String', NULL, TRUE);
if ($sqlFilter) {
$newParam[1] = key($newParam[2]);
$newParam[2] = $sqlFilter;
}
}
}
$skipPermissions = !empty($params['check_permissions']) ? 0 : 1;
list($entities, $options) = CRM_Contact_BAO_Query::apiQuery($newParams, $returnProperties, NULL, $sort, $offset, $limit, $smartGroupCache, $getCount, $skipPermissions);
if ($getCount) {
// only return the count of contacts
return $entities;
}
return $entities;
}
示例11: isContactInGroup
static function isContactInGroup($contactID, $groupID)
{
if (!CRM_Utils_Rule::positiveInteger($contactID) || !CRM_Utils_Rule::positiveInteger($groupID)) {
return FALSE;
}
$params = array(array('group', 'IN', array($groupID => 1), 0, 0), array('contact_id', '=', $contactID, 0, 0));
list($contacts, $_) = CRM_Contact_BAO_Query::apiQuery($params, array('contact_id'));
if (!empty($contacts)) {
return TRUE;
}
return FALSE;
}
示例12: 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;
}
示例13: sendTemplate
//.........这里部分代码省略.........
$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);
}
foreach (array('subject', 'text', 'html') as $elem) {
${$elem} = $smarty->fetch("string:{${$elem}}");
}
// send the template, honouring the target user’s preferences (if any)
$sent = FALSE;
// create the params array
$params['subject'] = $subject;
$params['text'] = $text;
$params['html'] = $html;
if ($params['toEmail']) {
$contactParams = array(array('email', 'LIKE', $params['toEmail'], 0, 1));
list($contact, $_) = CRM_Contact_BAO_Query::apiQuery($contactParams);
$prefs = array_pop($contact);
if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] == 'HTML') {
$params['text'] = NULL;
}
if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] == 'Text') {
$params['html'] = NULL;
}
$config = CRM_Core_Config::singleton();
$pdf_filename = '';
if ($config->doNotAttachPDFReceipt && $params['PDFFilename'] && $params['html']) {
$pdf_filename = $config->templateCompileDir . CRM_Utils_File::makeFileName($params['PDFFilename']);
//FIXME : CRM-7894
//xmlns attribute is required in XHTML but it is invalid in HTML,
//Also the namespace "xmlns=http://www.w3.org/1999/xhtml" is default,
//and will be added to the <html> tag even if you do not include it.
$html = preg_replace('/(<html)(.+?xmlns=["\'].[^\\s]+["\'])(.+)?(>)/', '\\1\\3\\4', $params['html']);
file_put_contents($pdf_filename, CRM_Utils_PDF_Utils::html2pdf($html, $params['PDFFilename'], TRUE, $format));
if (empty($params['attachments'])) {
$params['attachments'] = array();
}
$params['attachments'][] = array('fullPath' => $pdf_filename, 'mime_type' => 'application/pdf', 'cleanName' => $params['PDFFilename']);
}
$sent = CRM_Utils_Mail::send($params);
if ($pdf_filename) {
unlink($pdf_filename);
}
}
return array($sent, $subject, $text, $html);
}
示例14: _civicrm_api3_get_using_query_object
/**
* Get function for query object api.
*
* The API supports 2 types of get request. The more complex uses the BAO query object.
* This is a generic function for those functions that call it
*
* At the moment only called by contact we should extend to contribution &
* others that use the query object. Note that this function passes permission information in.
* The others don't
*
* Ideally this would be merged with _civicrm_get_query_object but we need to resolve differences in what the
* 2 variants call
*
* @param $entity
* @param array $params
* As passed into api get or getcount function.
* @param array $additional_options
* Array of options (so we can modify the filter).
* @param bool $getCount
* Are we just after the count.
*
* @return array
*/
function _civicrm_api3_get_using_query_object($entity, $params, $additional_options = array(), $getCount = NULL)
{
$lowercase_entity = _civicrm_api_get_entity_name_from_camel($entity);
// Convert id to e.g. contact_id
if (empty($params[$lowercase_entity . '_id']) && isset($params['id'])) {
$params[$lowercase_entity . '_id'] = $params['id'];
}
unset($params['id']);
$options = _civicrm_api3_get_options_from_params($params, TRUE);
$inputParams = array_merge(CRM_Utils_Array::value('input_params', $options, array()), CRM_Utils_Array::value('input_params', $additional_options, array()));
$returnProperties = array_merge(CRM_Utils_Array::value('return', $options, array()), CRM_Utils_Array::value('return', $additional_options, array()));
if (empty($returnProperties)) {
$returnProperties = NULL;
}
if (!empty($params['check_permissions'])) {
// we will filter query object against getfields
$fields = civicrm_api($entity, 'getfields', array('version' => 3, 'action' => 'get'));
// we need to add this in as earlier in this function 'id' was unset in favour of $entity_id
$fields['values'][$lowercase_entity . '_id'] = array();
$varsToFilter = array('returnProperties', 'inputParams');
foreach ($varsToFilter as $varToFilter) {
if (!is_array(${$varToFilter})) {
continue;
}
//I was going to throw an exception rather than silently filter out - but
//would need to diff out of exceptions arr other keys like 'options', 'return', 'api. etcetc
//so we are silently ignoring parts of their request
//$exceptionsArr = array_diff(array_keys($$varToFilter), array_keys($fields['values']));
${$varToFilter} = array_intersect_key(${$varToFilter}, $fields['values']);
}
}
$options = array_merge($options, $additional_options);
$sort = CRM_Utils_Array::value('sort', $options, NULL);
$offset = CRM_Utils_Array::value('offset', $options, NULL);
$limit = CRM_Utils_Array::value('limit', $options, NULL);
$smartGroupCache = CRM_Utils_Array::value('smartGroupCache', $params);
if ($getCount) {
$limit = NULL;
$returnProperties = NULL;
}
if (substr($sort, 0, 2) == 'id') {
$sort = $lowercase_entity . "_" . $sort;
}
$newParams = CRM_Contact_BAO_Query::convertFormValues($inputParams);
$skipPermissions = !empty($params['check_permissions']) ? 0 : 1;
list($entities, $options) = CRM_Contact_BAO_Query::apiQuery($newParams, $returnProperties, NULL, $sort, $offset, $limit, $smartGroupCache, $getCount, $skipPermissions);
if ($getCount) {
// only return the count of contacts
return $entities;
}
return $entities;
}
示例15: getDetails
/**
* gives required details of contacts
*
* @param array $contactIds of conatcts
* @param array $returnProperties of required properties
* @param boolean $skipOnHold don't return on_hold contact info also.
* @param boolean $skipDeceased don't return deceased contact info.
* @param array $extraParams extra params
*
* @return array
* @access public
*/
function getDetails($contactIDs, $returnProperties = null, $skipOnHold = true, $skipDeceased = true, $extraParams = null)
{
$params = array();
foreach ($contactIDs as $key => $contactID) {
$params[] = array(CRM_Core_Form::CB_PREFIX . $contactID, '=', 1, 0, 0);
}
// fix for CRM-2613
if ($skipDeceased) {
$params[] = array('is_deceased', '=', 0, 0, 0);
}
//fix for CRM-3798
if ($skipOnHold) {
$params[] = array('on_hold', '=', 0, 0, 0);
}
if ($extraParams) {
$params = array_merge($params, $extraParams);
}
// if return properties are not passed then get all return properties
if (empty($returnProperties)) {
require_once 'CRM/Contact/BAO/Contact.php';
$fields = array_merge(array_keys(CRM_Contact_BAO_Contact::exportableFields()), array('display_name', 'checksum', 'contact_id'));
foreach ($fields as $key => $val) {
$returnProperties[$val] = 1;
}
}
$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($contactIDs);
require_once 'CRM/Contact/BAO/Query.php';
$query = new CRM_Contact_BAO_Query($params, $returnProperties);
$details = $query->apiQuery($params, $returnProperties, NULL, NULL, 0, $numberofContacts);
$contactDetails =& $details[0];
foreach ($contactIDs as $key => $contactID) {
if (array_key_exists($contactID, $contactDetails)) {
if (CRM_Utils_Array::value('preferred_communication_method', $returnProperties) == 1 && array_key_exists('preferred_communication_method', $contactDetails[$contactID])) {
require_once 'CRM/Core/PseudoConstant.php';
$pcm = CRM_Core_PseudoConstant::pcm();
// communication Prefferance
require_once 'CRM/Core/BAO/CustomOption.php';
$contactPcm = explode(CRM_Core_BAO_CustomOption::VALUE_SEPERATOR, $contactDetails[$contactID]['preferred_communication_method']);
$result = array();
foreach ($contactPcm as $key => $val) {
if ($val) {
$result[$val] = $pcm[$val];
}
}
$contactDetails[$contactID]['preferred_communication_method'] = implode(', ', $result);
}
foreach ($custom as $cfID) {
if (isset($contactDetails[$contactID]["custom_{$cfID}"])) {
$contactDetails[$contactID]["custom_{$cfID}"] = CRM_Core_BAO_CustomField::getDisplayValue($contactDetails[$contactID]["custom_{$cfID}"], $cfID, $details[1]);
}
}
//special case for greeting replacement
foreach (array('email_greeting', 'postal_greeting', 'addressee') as $val) {
if (CRM_Utils_Array::value($val, $contactDetails[$contactID])) {
$contactDetails[$contactID][$val] = $contactDetails[$contactID]["{$val}_display"];
}
}
}
}
// also call a hook and get token details
require_once 'CRM/Utils/Hook.php';
CRM_Utils_Hook::tokenValues($details[0], $contactIDs);
return $details;
}