本文整理汇总了PHP中CRM_Mailing_Event_BAO_Bounce::create方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Mailing_Event_BAO_Bounce::create方法的具体用法?PHP CRM_Mailing_Event_BAO_Bounce::create怎么用?PHP CRM_Mailing_Event_BAO_Bounce::create使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Mailing_Event_BAO_Bounce
的用法示例。
在下文中一共展示了CRM_Mailing_Event_BAO_Bounce::create方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: crm_mailer_event_bounce
/**
* Process a bounce event by passing through to the BAOs.
*
* @param int $job ID of the job that caused this bounce
* @param int $queue ID of the queue event that bounced
* @param string $hash Security hash
* @param string $body Body of the bounce message
* @return boolean
*/
function crm_mailer_event_bounce($job, $queue, $hash, $body)
{
$params = CRM_Mailing_BAO_BouncePattern::match($body);
$params += array('job_id' => $job, 'event_queue_id' => $queue, 'hash' => $hash);
CRM_Mailing_Event_BAO_Bounce::create($params);
return true;
}
示例2: civicrm_api3_mailing_event_bounce
/**
* Process a bounce event by passing through to the BAOs.
*
* @param array $params
*
* @return array
*/
function civicrm_api3_mailing_event_bounce($params)
{
civicrm_api3_verify_mandatory($params, 'CRM_Mailing_Event_DAO_Bounce', array('job_id', 'event_queue_id', 'hash', 'body'), FALSE);
$body = $params['body'];
unset($params['body']);
$params += CRM_Mailing_BAO_BouncePattern::match($body);
if (CRM_Mailing_Event_BAO_Bounce::create($params)) {
return civicrm_api3_create_success($params);
} else {
return civicrm_api3_create_error('Queue event could not be found');
}
}
示例3: civicrm_mailer_event_bounce
/**
* Process a bounce event by passing through to the BAOs.
*
* @param array $params
*
* @return array
*/
function civicrm_mailer_event_bounce($params)
{
$errors = _civicrm_mailer_check_params($params, array('job_id', 'event_queue_id', 'hash', 'body'));
if (!empty($errors)) {
return $errors;
}
$body = $params['body'];
unset($params['body']);
$params += CRM_Mailing_BAO_BouncePattern::match($body);
if (CRM_Mailing_Event_BAO_Bounce::create($params)) {
return civicrm_create_success();
}
return civicrm_create_error(ts('Queue event could not be found'));
}
示例4: deliverGroup
/**
* @param $fields
* @param $mailing
* @param $mailer
* @param $job_date
* @param $attachments
*
* @return bool|null
* @throws Exception
*/
public function deliverGroup(&$fields, &$mailing, &$mailer, &$job_date, &$attachments)
{
static $smtpConnectionErrors = 0;
if (!is_object($mailer) || empty($fields)) {
CRM_Core_Error::fatal();
}
// get the return properties
$returnProperties = $mailing->getReturnProperties();
$params = $targetParams = $deliveredParams = array();
$count = 0;
/**
* CRM-15702: Sending bulk sms to contacts without e-mail address fails.
* Solution is to skip checking for on hold
*/
$skipOnHold = TRUE;
//do include a statement to check wether e-mail address is on hold
if ($mailing->sms_provider_id) {
$skipOnHold = FALSE;
//do not include a statement to check wether e-mail address is on hold
}
foreach ($fields as $key => $field) {
$params[] = $field['contact_id'];
}
$details = CRM_Utils_Token::getTokenDetails($params, $returnProperties, $skipOnHold, TRUE, NULL, $mailing->getFlattenedTokens(), get_class($this), $this->id);
$config = CRM_Core_Config::singleton();
foreach ($fields as $key => $field) {
$contactID = $field['contact_id'];
if (!array_key_exists($contactID, $details[0])) {
$details[0][$contactID] = array();
}
/* Compose the mailing */
$recipient = $replyToEmail = NULL;
$replyValue = strcmp($mailing->replyto_email, $mailing->from_email);
if ($replyValue) {
$replyToEmail = $mailing->replyto_email;
}
$message =& $mailing->compose($this->id, $field['id'], $field['hash'], $field['contact_id'], $field['email'], $recipient, FALSE, $details[0][$contactID], $attachments, FALSE, NULL, $replyToEmail);
if (empty($message)) {
// lets keep the message in the queue
// most likely a permissions related issue with smarty templates
// or a bad contact id? CRM-9833
continue;
}
/* Send the mailing */
$body =& $message->get();
$headers =& $message->headers();
if ($mailing->sms_provider_id) {
$provider = CRM_SMS_Provider::singleton(array('mailing_id' => $mailing->id));
$body = $provider->getMessage($message, $field['contact_id'], $details[0][$contactID]);
$headers = $provider->getRecipientDetails($field, $details[0][$contactID]);
}
// make $recipient actually be the *encoded* header, so as not to baffle Mail_RFC822, CRM-5743
$recipient = $headers['To'];
$result = NULL;
// disable error reporting on real mailings (but leave error reporting for tests), CRM-5744
if ($job_date) {
$errorScope = CRM_Core_TemporaryErrorScope::ignoreException();
}
$result = $mailer->send($recipient, $headers, $body, $this->id);
if ($job_date) {
unset($errorScope);
}
if (is_a($result, 'PEAR_Error') && !$mailing->sms_provider_id) {
// CRM-9191
$message = $result->getMessage();
if (strpos($message, 'Failed to write to socket') !== FALSE || strpos($message, 'Failed to set sender') !== FALSE) {
// lets log this message and code
$code = $result->getCode();
CRM_Core_Error::debug_log_message("SMTP Socket Error or failed to set sender error. Message: {$message}, Code: {$code}");
// these are socket write errors which most likely means smtp connection errors
// lets skip them
$smtpConnectionErrors++;
if ($smtpConnectionErrors <= 5) {
continue;
}
// seems like we have too many of them in a row, we should
// write stuff to disk and abort the cron job
$this->writeToDB($deliveredParams, $targetParams, $mailing, $job_date);
CRM_Core_Error::debug_log_message("Too many SMTP Socket Errors. Exiting");
CRM_Utils_System::civiExit();
}
/* Register the bounce event */
$params = array('event_queue_id' => $field['id'], 'job_id' => $this->id, 'hash' => $field['hash']);
$params = array_merge($params, CRM_Mailing_BAO_BouncePattern::match($result->getMessage()));
CRM_Mailing_Event_BAO_Bounce::create($params);
} elseif (is_a($result, 'PEAR_Error') && $mailing->sms_provider_id) {
// Handle SMS errors: CRM-15426
$job_id = intval($this->id);
$mailing_id = intval($mailing->id);
CRM_Core_Error::debug_log_message("Failed to send SMS message. Vars: mailing_id: {$mailing_id}, job_id: {$job_id}. Error message follows.");
//.........这里部分代码省略.........
示例5: CRM_Core_Dao
/**
* Create a new forward event, create a new contact if necessary
*/
static function &forward($job_id, $queue_id, $hash, $forward_email, $fromEmail = null, $comment = null)
{
$q =& CRM_Mailing_Event_BAO_Queue::verify($job_id, $queue_id, $hash);
$successfulForward = false;
if (!$q) {
return $successfulForward;
}
/* Find the email address/contact, if it exists */
$contact = CRM_Contact_BAO_Contact::getTableName();
$location = CRM_Core_BAO_Location::getTableName();
$email = CRM_Core_BAO_Email::getTableName();
$queueTable = CRM_Mailing_Event_BAO_Queue::getTableName();
$job = CRM_Mailing_BAO_Job::getTableName();
$mailing = CRM_Mailing_BAO_Mailing::getTableName();
$forward = self::getTableName();
$domain =& CRM_Core_BAO_Domain::getDomain();
$dao =& new CRM_Core_Dao();
$dao->query("\n SELECT {$contact}.id as contact_id,\n {$email}.id as email_id,\n {$contact}.do_not_email as do_not_email,\n {$queueTable}.id as queue_id\n FROM ({$email}, {$job} as temp_job)\n INNER JOIN {$contact}\n ON {$email}.contact_id = {$contact}.id\n LEFT JOIN {$queueTable}\n ON {$email}.id = {$queueTable}.email_id\n LEFT JOIN {$job}\n ON {$queueTable}.job_id = {$job}.id\n AND temp_job.mailing_id = {$job}.mailing_id\n WHERE {$queueTable}.job_id = {$job_id}\n AND {$email}.email = '" . CRM_Utils_Type::escape($forward_email, 'String') . "'");
$dao->fetch();
require_once 'CRM/Core/Transaction.php';
$transaction = new CRM_Core_Transaction();
if (isset($dao->queue_id) || $dao->do_not_email == 1) {
/* We already sent this mailing to $forward_email, or we should
* never email this contact. Give up. */
return $successfulForward;
}
require_once 'api/v2/Contact.php';
$contact_params = array('email' => $forward_email);
$count = civicrm_contact_search_count($contact_params);
if ($count == 0) {
require_once 'CRM/Core/BAO/LocationType.php';
/* If the contact does not exist, create one. */
$formatted = array('contact_type' => 'Individual');
$locationType = CRM_Core_BAO_LocationType::getDefault();
$value = array('email' => $forward_email, 'location_type_id' => $locationType->id);
_civicrm_add_formatted_param($value, $formatted);
require_once 'CRM/Import/Parser.php';
$formatted['onDuplicate'] = CRM_Import_Parser::DUPLICATE_SKIP;
$formatted['fixAddress'] = true;
$contact =& civicrm_contact_format_create($formatted);
if (civicrm_error($contact, CRM_Core_Error)) {
return $successfulForward;
}
$contact_id = $contact['id'];
}
$email =& new CRM_Core_DAO_Email();
$email->email = $forward_email;
$email->find(true);
$email_id = $email->id;
if (!$contact_id) {
$contact_id = $email->contact_id;
}
/* Create a new queue event */
$queue_params = array('email_id' => $email_id, 'contact_id' => $contact_id, 'job_id' => $job_id);
$queue =& CRM_Mailing_Event_BAO_Queue::create($queue_params);
$forward =& new CRM_Mailing_Event_BAO_Forward();
$forward->time_stamp = date('YmdHis');
$forward->event_queue_id = $queue_id;
$forward->dest_queue_id = $queue->id;
$forward->save();
$dao->reset();
$dao->query(" SELECT {$job}.mailing_id as mailing_id \n FROM {$job}\n WHERE {$job}.id = " . CRM_Utils_Type::escape($job_id, 'Integer'));
$dao->fetch();
$mailing_obj =& new CRM_Mailing_BAO_Mailing();
$mailing_obj->id = $dao->mailing_id;
$mailing_obj->find(true);
$config =& CRM_Core_Config::singleton();
$mailer =& $config->getMailer();
$recipient = null;
$attachments = null;
$message =& $mailing_obj->compose($job_id, $queue->id, $queue->hash, $queue->contact_id, $forward_email, $recipient, false, null, $attachments, true, $fromEmail);
//append comment if added while forwarding.
if (count($comment)) {
$message->_txtbody = $comment['body_text'] . $message->_txtbody;
if (CRM_Utils_Array::value('body_html', $comment)) {
$message->_htmlbody = $comment['body_html'] . '<br />---------------Original message---------------------<br />' . $message->_htmlbody;
}
}
$body = $message->get();
$headers = $message->headers();
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('CRM_Core_Error', 'nullHandler'));
$result = null;
if (is_object($mailer)) {
$result = $mailer->send($recipient, $headers, $body);
CRM_Core_Error::setCallback();
}
$params = array('event_queue_id' => $queue->id, 'job_id' => $job_id, 'hash' => $queue->hash);
if (is_a($result, PEAR_Error)) {
/* Register the bounce event */
$params = array_merge($params, CRM_Mailing_BAO_BouncePattern::match($result->getMessage()));
CRM_Mailing_Event_BAO_Bounce::create($params);
} else {
$successfulForward = true;
/* Register the delivery event */
CRM_Mailing_Event_BAO_Delivered::create($params);
}
$transaction->commit();
//.........这里部分代码省略.........
示例6: civicrm_api3_mailing_event_bounce
/**
* Process a bounce event by passing through to the BAOs.
*
* @param array $params
*
* @throws API_Exception
* @return array
*/
function civicrm_api3_mailing_event_bounce($params)
{
$body = $params['body'];
unset($params['body']);
$params += CRM_Mailing_BAO_BouncePattern::match($body);
if (CRM_Mailing_Event_BAO_Bounce::create($params)) {
return civicrm_api3_create_success($params);
} else {
throw new API_Exception(ts('Queue event could not be found'), 'no_queue_event');
}
}
示例7: deliver
/**
* Send the mailing
*
* @param object $mailer A Mail object to send the messages
* @return void
* @access public
*/
function deliver(&$mailer)
{
require_once 'CRM/Mailing/BAO/Mailing.php';
$mailing =& new CRM_Mailing_BAO_Mailing();
$mailing->id = $this->mailing_id;
$mailing->find(true);
$eq =& new CRM_Mailing_Event_BAO_Queue();
$eqTable = CRM_Mailing_Event_BAO_Queue::getTableName();
$emailTable = CRM_Core_BAO_Email::getTableName();
$contactTable = CRM_Contact_BAO_Contact::getTableName();
$edTable = CRM_Mailing_Event_BAO_Delivered::getTableName();
$ebTable = CRM_Mailing_Event_BAO_Bounce::getTableName();
$query = " SELECT {$eqTable}.id,\n {$emailTable}.email as email,\n {$eqTable}.contact_id,\n {$eqTable}.hash\n FROM {$eqTable}\n INNER JOIN {$emailTable}\n ON {$eqTable}.email_id = {$emailTable}.id\n LEFT JOIN {$edTable}\n ON {$eqTable}.id = {$edTable}.event_queue_id\n LEFT JOIN {$ebTable}\n ON {$eqTable}.id = {$ebTable}.event_queue_id\n WHERE {$eqTable}.job_id = " . $this->id . "\n AND {$edTable}.id IS null\n AND {$ebTable}.id IS null";
$eq->query($query);
while ($eq->fetch()) {
/* Compose the mailing */
$recipient = null;
$message = $mailing->compose($this->id, $eq->id, $eq->hash, $eq->contact_id, $eq->email, $recipient);
/* Send the mailing */
$body = $message->get();
$headers = $message->headers();
/* TODO: when we separate the content generator from the delivery
* engine, maybe we should dump the messages into a table */
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('CRM_Mailing_BAO_Mailing', 'catchSMTP'));
$result = $mailer->send($recipient, $headers, $body);
CRM_Core_Error::setCallback();
$params = array('event_queue_id' => $eq->id, 'job_id' => $this->id, 'hash' => $eq->hash);
if (is_a($result, PEAR_Error)) {
/* Register the bounce event */
require_once 'CRM/Mailing/BAO/BouncePattern.php';
require_once 'CRM/Mailing/Event/BAO/Bounce.php';
$params = array_merge($params, CRM_Mailing_BAO_BouncePattern::match($result->getMessage()));
CRM_Mailing_Event_BAO_Bounce::create($params);
} else {
/* Register the delivery event */
CRM_Mailing_Event_BAO_Delivered::create($params);
}
}
}
示例8: processMandrillCalls
public static function processMandrillCalls($reponse)
{
$events = array('open', 'click', 'hard_bounce', 'soft_bounce', 'spam', 'reject');
$bounceType = array();
//MTE-17
$config = CRM_Core_Config::singleton();
if (property_exists($config, 'civiVersion')) {
$civiVersion = $config->civiVersion;
} else {
$civiVersion = CRM_Core_BAO_Domain::version();
}
if (version_compare('4.4alpha1', $civiVersion) > 0) {
$jobCLassName = 'CRM_Mailing_DAO_Job';
} else {
$jobCLassName = 'CRM_Mailing_DAO_MailingJob';
}
foreach ($reponse as $value) {
//changes done to check if email exists in response array
if (in_array($value['event'], $events) && CRM_Utils_Array::value('email', $value['msg'])) {
$metaData = CRM_Utils_Array::value('metadata', $value['msg']) ? CRM_Utils_Array::value('CiviCRM_Mandrill_id', $value['msg']['metadata']) : NULL;
$header = self::extractHeader($metaData);
$mail = self::getMailing($header, $jobCLassName);
$contacts = array();
if ($mail->find(TRUE)) {
if ($value['event'] == 'click' && $mail->url_tracking === FALSE || $value['event'] == 'open' && $mail->open_tracking === FALSE) {
continue;
}
$emails = self::retrieveEmailContactId($value['msg']['email']);
if (!CRM_Utils_Array::value('contact_id', $emails['email'])) {
continue;
}
$value['mailing_id'] = $mail->id;
// IF no activity id in header then create new activity
if (empty($header[0])) {
self::createActivity($value, NULL, $header);
}
if (empty($header[2])) {
$params = array('job_id' => CRM_Core_DAO::getFieldValue($jobCLassName, $mail->id, 'id', 'mailing_id'), 'contact_id' => $emails['email']['contact_id'], 'email_id' => $emails['email']['id']);
$eventQueue = CRM_Mailing_Event_BAO_Queue::create($params);
$eventQueueID = $eventQueue->id;
$hash = $eventQueue->hash;
$jobId = $params['job_id'];
} else {
$eventQueueID = $header[3];
$hash = explode('@', $header[4]);
$hash = $hash[0];
$jobId = $header[2];
}
if ($eventQueueID) {
$mandrillActivtyParams = array('mailing_queue_id' => $eventQueueID, 'activity_id' => $header[0]);
CRM_Mte_BAO_MandrillActivity::create($mandrillActivtyParams);
}
$msgBody = '';
if (!empty($header[0])) {
$msgBody = CRM_Core_DAO::getFieldValue('CRM_Activity_DAO_Activity', $header[0], 'details');
}
$value['mail_body'] = $msgBody;
$bType = ucfirst(preg_replace('/_\\w+/', '', $value['event']));
$assignedContacts = array();
switch ($value['event']) {
case 'open':
$oe = new CRM_Mailing_Event_BAO_Opened();
$oe->event_queue_id = $eventQueueID;
$oe->time_stamp = date('YmdHis', $value['ts']);
$oe->save();
break;
case 'click':
if (CRM_Utils_Array::value(1, $header) == 'b') {
break;
}
$tracker = new CRM_Mailing_BAO_TrackableURL();
$tracker->url = $value['url'];
$tracker->mailing_id = $mail->id;
if (!$tracker->find(TRUE)) {
$tracker->save();
}
$open = new CRM_Mailing_Event_BAO_TrackableURLOpen();
$open->event_queue_id = $eventQueueID;
$open->trackable_url_id = $tracker->id;
$open->time_stamp = date('YmdHis', $value['ts']);
$open->save();
break;
case 'hard_bounce':
case 'soft_bounce':
case 'spam':
case 'reject':
if (empty($bounceType)) {
CRM_Core_PseudoConstant::populate($bounceType, 'CRM_Mailing_DAO_BounceType', TRUE, 'id', NULL, NULL, NULL, 'name');
}
//Delete queue in delivered since this email is not successfull
$delivered = new CRM_Mailing_Event_BAO_Delivered();
$delivered->event_queue_id = $eventQueueID;
if ($delivered->find(TRUE)) {
$delivered->delete();
}
$bounceParams = array('time_stamp' => date('YmdHis', $value['ts']), 'event_queue_id' => $eventQueueID, 'bounce_type_id' => $bounceType["Mandrill {$bType}"], 'job_id' => $jobId, 'hash' => $hash);
$bounceParams['bounce_reason'] = CRM_Utils_Array::value('bounce_description', $value['msg']);
if (empty($bounceParams['bounce_reason'])) {
$bounceParams['bounce_reason'] = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_BounceType', $bounceType["Mandrill {$bType}"], 'description');
}
//.........这里部分代码省略.........
示例9: deliverGroup
public function deliverGroup(&$fields, &$mailing, &$mailer, &$job_date, &$attachments)
{
// get the return properties
$returnProperties = $mailing->getReturnProperties();
$params = array();
$targetParams = array();
foreach ($fields as $key => $field) {
$params[] = $field['contact_id'];
}
$details = $mailing->getDetails($params, $returnProperties);
foreach ($fields as $key => $field) {
$contactID = $field['contact_id'];
/* Compose the mailing */
$recipient = null;
$message =& $mailing->compose($this->id, $field['id'], $field['hash'], $field['contact_id'], $field['email'], $recipient, false, $details[0][$contactID], $attachments);
/* Send the mailing */
$body =& $message->get();
$headers =& $message->headers();
// make $recipient actually be the *encoded* header, so as not to baffle Mail_RFC822, CRM-5743
$recipient = $headers['To'];
$result = null;
/* TODO: when we separate the content generator from the delivery
* engine, maybe we should dump the messages into a table */
// disable error reporting on real mailings (but leave error reporting for tests), CRM-5744
if ($job_date) {
CRM_Core_Error::ignoreException();
}
if (is_object($mailer)) {
// hack to stop mailing job at run time, CRM-4246.
$mailingJob = new CRM_Mailing_DAO_Job();
$mailingJob->mailing_id = $mailing->id;
if ($mailingJob->find(true)) {
// mailing have been canceled at run time.
if ($mailingJob->status == 'Canceled') {
return false;
}
} else {
// mailing have been deleted at run time.
return false;
}
$mailingJob->free();
$result = $mailer->send($recipient, $headers, $body, $this->id);
CRM_Core_Error::setCallback();
}
$params = array('event_queue_id' => $field['id'], 'job_id' => $this->id, 'hash' => $field['hash']);
if (is_a($result, 'PEAR_Error')) {
/* Register the bounce event */
require_once 'CRM/Mailing/BAO/BouncePattern.php';
require_once 'CRM/Mailing/Event/BAO/Bounce.php';
$params = array_merge($params, CRM_Mailing_BAO_BouncePattern::match($result->getMessage()));
CRM_Mailing_Event_BAO_Bounce::create($params);
} else {
/* Register the delivery event */
CRM_Mailing_Event_BAO_Delivered::create($params);
}
$targetParams[] = $field['contact_id'];
unset($result);
}
if (!empty($targetParams)) {
// add activity record for every mail that is send
$activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Bulk Email', 'name');
$activity = array('source_contact_id' => $mailing->scheduled_id, 'target_contact_id' => $targetParams, 'activity_type_id' => $activityTypeID, 'source_record_id' => $this->mailing_id, 'activity_date_time' => $job_date, 'subject' => $mailing->subject, 'status_id' => 2, 'deleteActivityTarget' => false);
//check whether activity is already created for this mailing.
//if yes then create only target contact record.
$query = "\nSELECT id \nFROM civicrm_activity\nWHERE civicrm_activity.activity_type_id = %1\nAND civicrm_activity.source_record_id = %2";
$queryParams = array(1 => array($activityTypeID, 'Integer'), 2 => array($this->mailing_id, 'Integer'));
$activityID = CRM_Core_DAO::singleValueQuery($query, $queryParams);
if ($activityID) {
$activity['id'] = $activityID;
}
require_once 'api/v2/Activity.php';
if (is_a(civicrm_activity_create($activity, 'Email'), 'CRM_Core_Error')) {
return false;
}
}
return true;
}
示例10: CRM_Core_Dao
/**
* Create a new forward event, create a new contact if necessary
*
* @param $job_id
* @param $queue_id
* @param $hash
* @param $forward_email
* @param null $fromEmail
* @param null $comment
*
* @return bool
*/
public static function &forward($job_id, $queue_id, $hash, $forward_email, $fromEmail = NULL, $comment = NULL)
{
$q = CRM_Mailing_Event_BAO_Queue::verify($job_id, $queue_id, $hash);
$successfulForward = FALSE;
$contact_id = NULL;
if (!$q) {
return $successfulForward;
}
/* Find the email address/contact, if it exists */
$contact = CRM_Contact_BAO_Contact::getTableName();
$location = CRM_Core_BAO_Location::getTableName();
$email = CRM_Core_BAO_Email::getTableName();
$queueTable = CRM_Mailing_Event_BAO_Queue::getTableName();
$job = CRM_Mailing_BAO_MailingJob::getTableName();
$mailing = CRM_Mailing_BAO_Mailing::getTableName();
$forward = self::getTableName();
$domain = CRM_Core_BAO_Domain::getDomain();
$dao = new CRM_Core_Dao();
$dao->query("\n SELECT {$contact}.id as contact_id,\n {$email}.id as email_id,\n {$contact}.do_not_email as do_not_email,\n {$queueTable}.id as queue_id\n FROM ({$email}, {$job} as temp_job)\n INNER JOIN {$contact}\n ON {$email}.contact_id = {$contact}.id\n LEFT JOIN {$queueTable}\n ON {$email}.id = {$queueTable}.email_id\n LEFT JOIN {$job}\n ON {$queueTable}.job_id = {$job}.id\n AND temp_job.mailing_id = {$job}.mailing_id\n WHERE {$queueTable}.job_id = {$job_id}\n AND {$email}.email = '" . CRM_Utils_Type::escape($forward_email, 'String') . "'");
$dao->fetch();
$transaction = new CRM_Core_Transaction();
if (isset($dao->queue_id) || isset($dao->do_not_email) && $dao->do_not_email == 1) {
/* We already sent this mailing to $forward_email, or we should
* never email this contact. Give up. */
return $successfulForward;
}
require_once 'api/api.php';
$contactParams = array('email' => $forward_email, 'version' => 3);
$contactValues = civicrm_api('contact', 'get', $contactParams);
$count = $contactValues['count'];
if ($count == 0) {
/* If the contact does not exist, create one. */
$formatted = array('contact_type' => 'Individual', 'version' => 3);
$locationType = CRM_Core_BAO_LocationType::getDefault();
$value = array('email' => $forward_email, 'location_type_id' => $locationType->id);
require_once 'CRM/Utils/DeprecatedUtils.php';
_civicrm_api3_deprecated_add_formatted_param($value, $formatted);
$formatted['onDuplicate'] = CRM_Import_Parser::DUPLICATE_SKIP;
$formatted['fixAddress'] = TRUE;
$contact = civicrm_api('contact', 'create', $formatted);
if (civicrm_error($contact)) {
return $successfulForward;
}
$contact_id = $contact['id'];
}
$email = new CRM_Core_DAO_Email();
$email->email = $forward_email;
$email->find(TRUE);
$email_id = $email->id;
if (!$contact_id) {
$contact_id = $email->contact_id;
}
/* Create a new queue event */
$queue_params = array('email_id' => $email_id, 'contact_id' => $contact_id, 'job_id' => $job_id);
$queue = CRM_Mailing_Event_BAO_Queue::create($queue_params);
$forward = new CRM_Mailing_Event_BAO_Forward();
$forward->time_stamp = date('YmdHis');
$forward->event_queue_id = $queue_id;
$forward->dest_queue_id = $queue->id;
$forward->save();
$dao->reset();
$dao->query(" SELECT {$job}.mailing_id as mailing_id\n FROM {$job}\n WHERE {$job}.id = " . CRM_Utils_Type::escape($job_id, 'Integer'));
$dao->fetch();
$mailing_obj = new CRM_Mailing_BAO_Mailing();
$mailing_obj->id = $dao->mailing_id;
$mailing_obj->find(TRUE);
$config = CRM_Core_Config::singleton();
$mailer = $config->getMailer();
$recipient = NULL;
$attachments = NULL;
$message = $mailing_obj->compose($job_id, $queue->id, $queue->hash, $queue->contact_id, $forward_email, $recipient, FALSE, NULL, $attachments, TRUE, $fromEmail);
//append comment if added while forwarding.
if (count($comment)) {
$message->_txtbody = CRM_Utils_Array::value('body_text', $comment) . $message->_txtbody;
if (!empty($comment['body_html'])) {
$message->_htmlbody = $comment['body_html'] . '<br />---------------Original message---------------------<br />' . $message->_htmlbody;
}
}
$body = $message->get();
$headers = $message->headers();
$result = NULL;
if (is_object($mailer)) {
$errorScope = CRM_Core_TemporaryErrorScope::ignoreException();
$result = $mailer->send($recipient, $headers, $body);
unset($errorScope);
}
$params = array('event_queue_id' => $queue->id, 'job_id' => $job_id, 'hash' => $queue->hash);
if (is_a($result, 'PEAR_Error')) {
//.........这里部分代码省略.........
示例11: CRM_Core_Dao
/**
* Create a new forward event, create a new contact if necessary
*/
function &forward($job_id, $queue_id, $hash, $forward_email)
{
$q =& CRM_Mailing_Event_BAO_Queue::verify($job_id, $queue_id, $hash);
if (!$q) {
return null;
}
/* Find the email address/contact, if it exists */
$contact = CRM_Contact_BAO_Contact::getTableName();
$location = CRM_Core_BAO_Location::getTableName();
$email = CRM_Core_BAO_Email::getTableName();
$queueTable = CRM_Mailing_Event_BAO_Queue::getTableName();
$job = CRM_Mailing_BAO_Job::getTableName();
$mailing = CRM_Mailing_BAO_Mailing::getTableName();
$forward = CRM_Mailing_Event_BAO_Forward::getTableName();
$domain =& CRM_Mailing_Event_BAO_Queue::getDomain($queue_id);
$dao =& new CRM_Core_Dao();
$dao->query("\n SELECT {$contact}.id as contact_id,\n {$email}.id as email_id,\n {$contact}.do_not_email as do_not_email,\n {$queueTable}.id as queue_id\n FROM {$email}, {$job} as temp_job\n INNER JOIN {$location}\n ON {$email}.location_id = {$location}.id\n INNER JOIN {$contact}\n ON {$location}.entity_table = '{$contact}'\n AND {$location}.entity_id = {$contact}.id\n LEFT JOIN {$queueTable}\n ON {$email}.id = {$queueTable}.email_id\n LEFT JOIN {$job}\n ON {$queueTable}.job_id = {$job}.id\n AND temp_job.mailing_id = {$job}.mailing_id\n WHERE temp_job.id = {$job_id}\n AND {$email}.email = '" . CRM_Utils_Type::escape($forward_email, 'String') . "'");
$dao->fetch();
CRM_Core_DAO::transaction('BEGIN');
if (isset($dao->queue_id) || $dao->do_not_email == 1) {
/* We already sent this mailing to $forward_email, or we should
* never email this contact. Give up. */
return false;
} elseif (empty($dao->contact_id)) {
/* No contact found, we'll have to create a new one */
$contact_params = array('email' => $forward_email);
$contact =& crm_create_contact($contact_params);
if (is_a($contact, 'CRM_Core_Error')) {
return false;
}
/* This is an ugly hack, but the API doesn't really support
* overriding the domain ID any other way */
$contact->domain_id = $domain->id;
$contact->save();
$contact_id = $contact->id;
$email_id = $contact->location[1]->email[1]->id;
} else {
$contact_id = $dao->contact_id;
$email_id = $dao->email_id;
}
/* Create a new queue event */
$queue_params = array('email_id' => $email_id, 'contact_id' => $contact_id, 'job_id' => $job_id);
$queue =& CRM_Mailing_Event_BAO_Queue::create($queue_params);
$forward =& new CRM_Mailing_Event_BAO_Forward();
$forward->time_stamp = date('YmdHis');
$forward->event_queue_id = $queue_id;
$forward->dest_queue_id = $queue->id;
$forward->save();
$dao->reset();
$dao->query(" SELECT {$job}.mailing_id as mailing_id \n FROM {$job}\n WHERE {$job}.id = " . CRM_Utils_Type::escape($job_id, 'Integer'));
$dao->fetch();
$mailing_obj =& new CRM_Mailing_BAO_Mailing();
$mailing_obj->id = $dao->mailing_id;
$mailing_obj->find(true);
$config =& CRM_Core_Config::singleton();
$mailer =& $config->getMailer();
$recipient = null;
$message =& $mailing_obj->compose($job_id, $queue->id, $queue->hash, $queue->contact_id, $forward_email, $recipient);
$body = $message->get();
$headers = $message->headers();
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('CRM_Mailing_BAO_Mailing', 'catchSMTP'));
$result = $mailer->send($recipient, $headers, $body);
CRM_Core_Error::setCallback();
$params = array('event_queue_id' => $queue->id, 'job_id' => $job_id, 'hash' => $queue->hash);
if (is_a($result, PEAR_Error)) {
/* Register the bounce event */
$params = array_merge($params, CRM_Mailing_BAO_BouncePattern::match($result->getMessage()));
CRM_Mailing_Event_BAO_Bounce::create($params);
} else {
/* Register the delivery event */
CRM_Mailing_Event_BAO_Delivered::create($params);
}
CRM_Core_DAO::transaction('COMMIT');
return true;
}