*/
class CRM_Mailing_Info extends CRM_Core_Component_Info {
- // docs inherited from interface
- protected $keyword = 'mailing';
-
-
- // docs inherited from interface
- /**
- * @return array
- */
- public function getInfo() {
- return array(
- 'name' => 'CiviMail',
- 'translatedName' => ts('CiviMail'),
- 'title' => 'CiviCRM Mailing Engine',
- 'search' => 1,
- 'showActivitiesInCore' => 1,
- );
- }
-
- public function getAngularModules() {
- $result = array();
- $result['crmMailing'] = array(
- 'ext' => 'civicrm',
- 'js' => array('js/angular-Mailing.js' , 'js/angularsanitize.js' , 'packages/ckeditor/ckeditor.js'),
- );
- $session = CRM_Core_Session::singleton();
- $contactID = $session->get('userID');
- $civiMails = civicrm_api3('Mailing', 'get', array());
- $campNames = civicrm_api3('Campaign', 'get', array());
- $mailStatus = civicrm_api3('MailingJob', 'get', array());
- $groupNames = civicrm_api3('Group', 'get', array());
- $headerfooterList = civicrm_api3('MailingComponent', 'get', array());
- $emailAdd = civicrm_api3('Email', 'get', array(
- 'sequential' => 1,
- 'return' => "email",
- 'contact_id' => $contactID,
- ));
- $mesTemplate = civicrm_api3('MessageTemplate', 'get', array( 'sequential' => 1,
- 'return' => array("msg_html", "id", "msg_title", "msg_subject"),
- 'workflow_id' => array('IS NULL' => ""),
- ));
- $mailGrp = civicrm_api3('MailingGroup','get', array());
- $mailTokens = civicrm_api3('Mailing', 'get_token', array( 'usage' => 'Mailing'));
+ // docs inherited from interface
+ protected $keyword = 'mailing';
+
+
+ // docs inherited from interface
+ /**
+ * @return array
+ */
+ public function getInfo() {
+ return array(
+ 'name' => 'CiviMail',
+ 'translatedName' => ts('CiviMail'),
+ 'title' => 'CiviCRM Mailing Engine',
+ 'search' => 1,
+ 'showActivitiesInCore' => 1,
+ );
+ }
+
+ public function getAngularModules() {
+ $result = array();
++ $result['crmMailing'] = array(
++ 'ext' => 'civicrm',
++ 'js' => array('js/angular-Mailing.js' , 'js/angularsanitize.js' , 'packages/ckeditor/ckeditor.js'),
++ );
+ $result['crmMailingAB'] = array(
+ 'ext' => 'civicrm',
+ 'js' => array(
+ 'js/angular-crmMailingAB.js',
+ 'js/angular-crmMailingAB-ReportCtrl.js',
+ 'js/d3.min.js',
+ 'js/angular-sanitize.js',
+ 'packages/ckeditor/ckeditor.js',
+ ),
+ 'css' => array('css/angular-crmMailingAB.css'),
+ );
+
++ $session = CRM_Core_Session::singleton();
++ $contactID = $session->get('userID');
+ $civiMails = civicrm_api3('Mailing', 'get', array());
+ $campNames = civicrm_api3('Campaign', 'get', array());
+ $mailingabNames = civicrm_api3('MailingAB','get',array());
+ $mailStatus = civicrm_api3('MailingJob', 'get', array());
+ $groupNames = civicrm_api3('Group', 'get', array());
+ $headerfooterList = civicrm_api3('MailingComponent', 'get', array());
- $emailAdd = civicrm_api3('Email', 'get', array());
- $mesTemplate = civicrm_api3('MessageTemplate', 'get', array(
++
++ // FIXME: The following two items differ between GSOC CiviMail and ABTest branches
++ if (FALSE) {
++ // AB Test
++ $emailAdd = civicrm_api3('Email', 'get', array());
++ $mesTemplate = civicrm_api3('MessageTemplate', 'get', array(
++ 'sequential' => 1,
++ 'return' => array("msg_html", "id", "msg_title","msg_subject"),
++ 'id' => array('>' => 58),
++ ));
++ } else {
++ // CiviMail UI
++ $emailAdd = civicrm_api3('Email', 'get', array(
++ 'sequential' => 1,
++ 'return' => "email",
++ 'contact_id' => $contactID,
++ ));
++ $mesTemplate = civicrm_api3('MessageTemplate', 'get', array( 'sequential' => 1,
++ 'return' => array("msg_html", "id", "msg_title", "msg_subject"),
++ 'workflow_id' => array('IS NULL' => ""),
++ ));
++ }
++ $mailGrp = civicrm_api3('MailingGroup','get', array());
++ $mailTokens = civicrm_api3('Mailing', 'get_token', array( 'usage' => 'Mailing'));
+ $fromAddress = civicrm_api3('OptionGroup', 'get', array(
'sequential' => 1,
- 'return' => array("msg_html", "id", "msg_title","msg_subject"),
- 'id' => array('>' => 58),
+ 'name' => "from_email_address",
+ 'api.OptionValue.get' => array(),
));
- $mailTokens = civicrm_api3('Mailing', 'get_token', array( 'usage' => 'Mailing'));
- $mailGrp = civicrm_api3('MailingGroup','get', array());
+ CRM_Core_Resources::singleton()->addSetting(array(
+ 'crmMailing' => array(
+ 'mailingabNames'=>array_values($mailingabNames['values']),
+ 'civiMails' => array_values($civiMails['values']),
+ 'campNames' => array_values($campNames['values']),
+ 'mailStatus' => array_values($mailStatus['values']),
+ 'groupNames' => array_values($groupNames['values']),
+ 'headerfooterList' => array_values($headerfooterList['values']),
+ 'mesTemplate' => array_values($mesTemplate['values']),
+ 'emailAdd' => array_values($emailAdd['values']),
++ 'mailGrp' => array_values($mailGrp['values']),
+ 'mailTokens' => array_values($mailTokens),
- 'mailGrp' => array_values($mailGrp['values'])
++ 'contactid' => $contactID,
++ 'fromAddress' => array_values($fromAddress['values'][0]['api.OptionValue.get']['values']),
+ ),
+ ));
-
- CRM_Core_Resources::singleton()->addSetting(array(
- 'crmMailing' => array(
- 'civiMails' => array_values($civiMails['values']),
- 'campNames' => array_values($campNames['values']),
- 'mailStatus' => array_values($mailStatus['values']),
- 'groupNames' => array_values($groupNames['values']),
- 'headerfooterList' => array_values($headerfooterList['values']),
- 'mesTemplate' => array_values($mesTemplate['values']),
- 'emailAdd' => array_values($emailAdd['values']),
- 'mailGrp' => array_values($mailGrp['values']),
- 'mailTokens' => array_values($mailTokens),
- 'contactid' => $contactID,
- 'fromAddress' => array_values($fromAddress['values'][0]['api.OptionValue.get']['values'])
- ),
- ));
- return $result;
- }
-
- /**
- * @return bool
- */
- static function workflowEnabled() {
- $config = CRM_Core_Config::singleton();
-
- // early exit, since not true for most
- if (!$config->userSystem->is_drupal ||
- !function_exists('module_exists')
- ) {
- return FALSE;
- }
-
- if (!module_exists('rules')) {
- return FALSE;
- }
-
- $enableWorkflow = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::MAILING_PREFERENCES_NAME,
- 'civimail_workflow',
- NULL,
- FALSE
- );
-
- return ($enableWorkflow &&
- $config->userSystem->is_drupal
- ) ? TRUE : FALSE;
- }
-
- // docs inherited from interface
- /**
- * @param bool $getAllUnconditionally
- *
- * @return array
- */
- public function getPermissions($getAllUnconditionally = FALSE) {
- $permissions = array(
- 'access CiviMail',
- 'access CiviMail subscribe/unsubscribe pages',
- 'delete in CiviMail',
- 'view public CiviMail content',
- );
-
- if (self::workflowEnabled() || $getAllUnconditionally) {
- $permissions[] = 'create mailings';
- $permissions[] = 'schedule mailings';
- $permissions[] = 'approve mailings';
- }
-
- return $permissions;
- }
-
-
- // docs inherited from interface
- /**
- * @return null
- */
- public function getUserDashboardElement() {
- // no dashboard element for this component
- return NULL;
- }
-
- /**
- * @return null
- */
- public function getUserDashboardObject() {
- // no dashboard element for this component
- return NULL;
- }
-
- // docs inherited from interface
- /**
- * @return array
- */
- public function registerTab() {
- return array(
- 'title' => ts('Mailings'),
- 'id' => 'mailing',
- 'url' => 'mailing',
- 'weight' => 45,
- );
- }
-
- // docs inherited from interface
- /**
- * @return array
- */
- public function registerAdvancedSearchPane() {
- return array('title' => ts('Mailings'),
- 'weight' => 20,
- );
- }
-
- // docs inherited from interface
- /**
- * @return null
- */
- public function getActivityTypes() {
- return NULL;
- }
-
- // add shortcut to Create New
- /**
- * @param $shortCuts
- */
- public function creatNewShortcut(&$shortCuts) {}
+ return $result;
+ }
+
-
+ /**
+ * @return bool
+ */
+ static function workflowEnabled() {
+ $config = CRM_Core_Config::singleton();
+
+ // early exit, since not true for most
+ if (!$config->userSystem->is_drupal ||
+ !function_exists('module_exists')
+ ) {
+ return FALSE;
+ }
+
+ if (!module_exists('rules')) {
+ return FALSE;
+ }
+
+ $enableWorkflow = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::MAILING_PREFERENCES_NAME,
+ 'civimail_workflow',
+ NULL,
+ FALSE
+ );
+
+ return ($enableWorkflow &&
+ $config->userSystem->is_drupal
+ ) ? TRUE : FALSE;
+ }
+
+ // docs inherited from interface
+ /**
+ * @param bool $getAllUnconditionally
+ *
+ * @return array
+ */
+ public function getPermissions($getAllUnconditionally = FALSE) {
+ $permissions = array(
+ 'access CiviMail',
+ 'access CiviMail subscribe/unsubscribe pages',
+ 'delete in CiviMail',
+ 'view public CiviMail content',
+ );
+
+ if (self::workflowEnabled() || $getAllUnconditionally) {
+ $permissions[] = 'create mailings';
+ $permissions[] = 'schedule mailings';
+ $permissions[] = 'approve mailings';
+ }
+
+ return $permissions;
+ }
+
+
+ // docs inherited from interface
+ /**
+ * @return null
+ */
+ public function getUserDashboardElement() {
+ // no dashboard element for this component
+ return NULL;
+ }
+
+ /**
+ * @return null
+ */
+ public function getUserDashboardObject() {
+ // no dashboard element for this component
+ return NULL;
+ }
+
+ // docs inherited from interface
+ /**
+ * @return array
+ */
+ public function registerTab() {
+ return array(
+ 'title' => ts('Mailings'),
+ 'id' => 'mailing',
+ 'url' => 'mailing',
+ 'weight' => 45,
+ );
+ }
+
+ // docs inherited from interface
+ /**
+ * @return array
+ */
+ public function registerAdvancedSearchPane() {
+ return array('title' => ts('Mailings'),
+ 'weight' => 20,
+ );
+ }
+
+ // docs inherited from interface
+ /**
+ * @return null
+ */
+ public function getActivityTypes() {
+ return NULL;
+ }
+
+ // add shortcut to Create New
+ /**
+ * @param $shortCuts
+ */
+ public function creatNewShortcut(&$shortCuts) {}
}
* @return array
*/
function civicrm_api3_mailing_event_confirm($params) {
- return civicrm_api('mailing_event_confirm', 'create', $params);
+ return civicrm_api('mailing_event_confirm', 'create', $params);
}
+/**
+ * @deprecated api notice
+ * @return array of deprecated actions
+ */
+function _civicrm_api3_mailing_deprecation() {
+ return array('event_confirm' => 'Mailing api "event_confirm" action is deprecated. Use the mailing_event_confirm api instead.');
+}
+
/**
* Handle a reply event
*
*/
function civicrm_api3_mailing_event_open($params) {
- civicrm_api3_verify_mandatory($params,
- 'CRM_Mailing_Event_DAO_Opened',
- array('event_queue_id'),
- FALSE
- );
+ civicrm_api3_verify_mandatory($params,
+ 'CRM_Mailing_Event_DAO_Opened',
+ array('event_queue_id'),
+ FALSE
+ );
- $queue = $params['event_queue_id'];
- $success = CRM_Mailing_Event_BAO_Opened::open($queue);
+ $queue = $params['event_queue_id'];
+ $success = CRM_Mailing_Event_BAO_Opened::open($queue);
- if (!$success) {
- return civicrm_api3_create_error('mailing open event failed');
- }
+ if (!$success) {
+ return civicrm_api3_create_error('mailing open event failed');
+ }
- return civicrm_api3_create_success($params);
+ return civicrm_api3_create_success($params);
}
- $details = CRM_Utils_Token::getTokenDetails($mailingParams, $returnProperties, TRUE, TRUE, NULL, $mailing->getFlattenedToken());
+function civicrm_api3_mailing_preview($params) {
+ civicrm_api3_verify_mandatory($params,
+ 'CRM_Mailing_DAO_Mailing',
+ array('id'),
+ FALSE
+ );
+
+ $fromEmail = NULL;
+ if (!empty($params['from_email'])) {
+ $fromEmail = $params['from_email'];
+ }
+
+ $session = CRM_Core_Session::singleton();
+ $mailing = new CRM_Mailing_BAO_Mailing();
+ $mailing->id = $params['id'];
+ $mailing->find(TRUE);
+
+ CRM_Mailing_BAO_Mailing::tokenReplace($mailing);
+
+ // get and format attachments
+ $attachments = CRM_Core_BAO_File::getEntityFile('civicrm_mailing', $mailing->id);
+
+ $returnProperties = $mailing->getReturnProperties();
+ $contactID = CRM_Utils_Array::value('contact_id', $params);
+ if (!$contactID) {
+ $contactID = $session->get('userID');
+ }
+ $mailingParams = array('contact_id' => $contactID);
+
- function civicrm_api3_mailing_get_token($params) {
- if (!array_key_exists("usage", $params)) {
- throw new API_Exception('Mandatory keys missing from params array: entity');
- }
-
- $tokens = CRM_Core_SelectValues::contactTokens();
- switch ($params['usage']) {
- case 'Mailing' :
- $tokens = array_merge(CRM_Core_SelectValues::mailingTokens(), $tokens);
- break;
- case 'ScheduleEventReminder' :
- $tokens = array_merge(CRM_Core_SelectValues::activityTokens(), $tokens);
- $tokens = array_merge(CRM_Core_SelectValues::eventTokens(), $tokens);
- $tokens = array_merge(CRM_Core_SelectValues::membershipTokens(), $tokens);
- break;
- case 'ManageEventScheduleReminder' :
- $tokens = array_merge(CRM_Core_SelectValues::eventTokens(), $tokens);
- break;
- }
-
- return CRM_Utils_Token::formatTokensForDisplay($tokens);
-
- }
-
++ $details = CRM_Utils_Token::getTokenDetails($mailingParams, $returnProperties, TRUE, TRUE, NULL, $mailing->getFlattenedTokens());
+
+ $mime = &$mailing->compose(NULL, NULL, NULL, $session->get('userID'), $fromEmail, $fromEmail,
+ TRUE, $details[0][$contactID], $attachments
+ );
+
+ return civicrm_api3_create_success(array('subject' => $mime->_headers['Subject'], 'html' => $mime->getHTMLBody(), 'text' => $mime->getTXTBody()));
+}
+
+function civicrm_api3_mailing_send_test($params) {
+ if (!array_key_exists('test_group', $params) && !array_key_exists('test_email', $params)) {
+ throw new API_Exception("Mandatory key(s) missing from params array: test_group and/or test_email field are required" );
+ }
+ civicrm_api3_verify_mandatory($params,
+ 'CRM_Mailing_DAO_MailingJob',
+ array('mailing_id'),
+ FALSE
+ );
+
+ $testEmailParams = _civicrm_api3_generic_replace_base_params($params);
+ $testEmailParams['is_test'] = 1;
+ $job = civicrm_api3('MailingJob', 'create', $testEmailParams);
+ $testEmailParams['job_id'] = $job['id'];
+ $testEmailParams['emails'] = explode(',', $testEmailParams['test_email']);
+ if (!empty($params['test_email'])) {
+ $query = "
+SELECT e.id, e.contact_id, e.email
+FROM civicrm_email e
+INNER JOIN civicrm_contact c ON e.contact_id = c.id
+WHERE e.email IN ('" . implode("','", $testEmailParams['emails']) . "')
+AND e.on_hold = 0
+AND c.is_opt_out = 0
+AND c.do_not_email = 0
+AND c.is_deceased = 0
+GROUP BY e.id
+ORDER BY e.is_bulkmail DESC, e.is_primary DESC
+";
+ $dao = CRM_Core_DAO::executeQuery($query);
+ $emailDetail = array();
+ // fetch contact_id and email id for all existing emails
+ while ($dao->fetch()) {
+ $emailDetail[$dao->email] = array(
+ 'contact_id' => $dao->contact_id,
+ 'email_id' => $dao->id,
+ );
+ }
+ $dao->free();
+ foreach ($testEmailParams['emails'] as $key => $email) {
+ $email = trim($email);
+ $contactId = $emailId = NULL;
+ if (array_key_exists($email, $emailDetail)) {
+ $emailId = $emailDetail[$email]['email_id'];
+ $contactId = $emailDetail[$email]['contact_id'];
+ }
+ if (!$contactId) {
+ //create new contact.
+ $contact = civicrm_api3('Contact', 'create',
+ array('contact_type' => 'Individual',
+ 'email' => $email,
+ 'api.Email.get' => array('return' => 'id')
+ )
+ );
+ $contactId = $contact['id'];
+ $emailId = $contact['values'][$contactId]['api.Email.get']['id'];
+ }
+ civicrm_api3('MailingEventQueue', 'create',
+ array('job_id' => $job['id'],
+ 'email_id' => $emailId,
+ 'contact_id' => $contactId
+ )
+ );
+ }
+ }
+
+ $isComplete = FALSE;
+ while (!$isComplete) {
+ $isComplete = CRM_Mailing_BAO_MailingJob::runJobs($testEmailParams);
+ }
+
+ //return delivered mail info
+ $mailDelivered = CRM_Mailing_Event_BAO_Delivered::getRows($params['mailing_id'], $job['id'], TRUE, NULL, NULL, NULL, TRUE);
+
+ return civicrm_api3_create_success($mailDelivered);
+}
+
+/**
+ * Adjust Metadata for send_mail action
+ *
+ * The metadata is used for setting defaults, documentation & validation
+ * @param array $params array or parameters determined by getfields
+ */
+function _civicrm_api3_mailing_stats_spec(&$params) {
+ $params['date']['api.default'] = 'now';
+}
+
+function civicrm_api3_mailing_stats($params) {
+ civicrm_api3_verify_mandatory($params,
+ 'CRM_Mailing_DAO_MailingJob',
+ array('mailing_id'),
+ FALSE
+ );
+
+ if ($params['date'] == 'now') {
+ $params['date'] = date('YmdHis');
+ }
+ else {
+ $params['date'] = CRM_Utils_Date::processDate($params['date'] . ' ' . $params['date_time']);
+ }
+
+ $stats[$params['mailing_id']] = array();
+ if (empty($params['job_id'])) {
+ $params['job_id'] = NULL;
+ }
+ foreach (array('Delivered', 'Bounces', 'Unsubscribers', 'Unique Clicks', 'Opened') as $detail) {
+ switch ($detail) {
+ case 'Delivered':
+ $stats[$params['mailing_id']] += array(
+ $detail => CRM_Mailing_Event_BAO_Delivered::getTotalCount($params['mailing_id'], $params['job_id'], FALSE, $params['date'])
+ );
+ break;
+ case 'Bounces':
+ $stats[$params['mailing_id']] += array(
+ $detail => CRM_Mailing_Event_BAO_Bounce::getTotalCount($params['mailing_id'], $params['job_id'], FALSE, $params['date'])
+ );
+ break;
+ case 'Unsubscribers':
+ $stats[$params['mailing_id']] += array(
+ $detail => CRM_Mailing_Event_BAO_Unsubscribe::getTotalCount($params['mailing_id'], $params['job_id'], FALSE, NULL, $params['date'])
+ );
+ break;
+ case 'Unique Clicks':
+ $stats[$params['mailing_id']] += array(
+ $detail => CRM_Mailing_Event_BAO_TrackableURLOpen::getTotalCount($params['mailing_id'], $params['job_id'], FALSE, NULL, $params['date'])
+ );
+ break;
+ case 'Opened':
+ $stats[$params['mailing_id']] += array(
+ $detail => CRM_Mailing_Event_BAO_Opened::getTotalCount($params['mailing_id'], $params['job_id'], FALSE, $params['date'])
+ );
+ break;
+ }
+ }
+ return civicrm_api3_create_success($stats);
+}
+
/**
* Fix the reset dates on the email record based on when a mail was last delivered
* We only consider mailings that were completed and finished in the last 3 to 7 days
* Both the min and max days can be set via the params
*/
function civicrm_api3_mailing_update_email_resetdate($params) {
- CRM_Mailing_Event_BAO_Delivered::updateEmailResetDate(
- CRM_Utils_Array::value('minDays', $params, 3),
- CRM_Utils_Array::value('maxDays', $params, 3)
- );
- return civicrm_api3_create_success();
+ CRM_Mailing_Event_BAO_Delivered::updateEmailResetDate(
+ CRM_Utils_Array::value('minDays', $params, 3),
+ CRM_Utils_Array::value('maxDays', $params, 3)
+ );
+ return civicrm_api3_create_success();
}
-
-function civicrm_api3_mailing_preview($params) {
- civicrm_api3_verify_mandatory($params,
- 'CRM_Mailing_DAO_Mailing',
- array('id'),
- FALSE
- );
- $session = CRM_Core_Session::singleton();
- $mailing = new CRM_Mailing_BAO_Mailing();
- $mailing->id = $params['id'];
- $mailing->find(TRUE);
- CRM_Mailing_BAO_Mailing::tokenReplace($mailing);
- // get and format attachments
- $attachments = CRM_Core_BAO_File::getEntityFile('civicrm_mailing', $mailing->id);
- $returnProperties = $mailing->getReturnProperties();
- $contactID = CRM_Utils_Array::value('contact_id', $params);
- if (!$contactID) {
- $contactID = $session->get('userID');
- }
- $mailingParams = array('contact_id' => $contactID);
- $details = CRM_Utils_Token::getTokenDetails($mailingParams, $returnProperties, TRUE, TRUE, NULL, $mailing->getFlattenedTokens());
- $mime = &$mailing->compose(NULL, NULL, NULL, $session->get('userID'), $fromEmail, $fromEmail,
- TRUE, $details[0][$session->get('userID')], $attachments
- );
- return civicrm_api3_create_success(array('subject' => $mime->_headers['Subject'], 'html' => $mime->getHTMLBody(), 'text' => $mime->getTXTBody()));
-}
-
-function civicrm_api3_mailing_send_test($params) {
- if (!array_key_exists('test_group', $params) && !array_key_exists('test_email', $params)) {
- throw new API_Exception("Mandatory key(s) missing from params array: test_group and/or test_email field are required" );
- }
- civicrm_api3_verify_mandatory($params,
- 'CRM_Mailing_DAO_MailingJob',
- array('mailing_id'),
- FALSE
- );
-
- $testEmailParams = _civicrm_api3_generic_replace_base_params($params);
- $testEmailParams['is_test'] = 1;
- $job = civicrm_api3('MailingJob', 'create', $testEmailParams);
- $testEmailParams['job_id'] = $job['id'];
- $testEmailParams['emails'] = explode(',', $testEmailParams['test_email']);
- if (!empty($params['test_email'])) {
- $query = "
-SELECT e.id, e.contact_id, e.email
-FROM civicrm_email e
-INNER JOIN civicrm_contact c ON e.contact_id = c.id
-WHERE e.email IN ('" . implode("','", $testEmailParams['emails']) . "')
-AND e.on_hold = 0
-AND c.is_opt_out = 0
-AND c.do_not_email = 0
-AND c.is_deceased = 0
-GROUP BY e.id
-ORDER BY e.is_bulkmail DESC, e.is_primary DESC
-";
- $dao = CRM_Core_DAO::executeQuery($query);
- $emailDetail = array();
- // fetch contact_id and email id for all existing emails
- while ($dao->fetch()) {
- $emailDetail[$dao->email] = array(
- 'contact_id' => $dao->contact_id,
- 'email_id' => $dao->id,
- );
- }
- $dao->free();
- foreach ($testEmailParams['emails'] as $key => $email) {
- $email = trim($email);
- $contactId = $emailId = NULL;
- if (array_key_exists($email, $emailDetail)) {
- $emailId = $emailDetail[$email]['email_id'];
- $contactId = $emailDetail[$email]['contact_id'];
- }
- if (!$contactId) {
- //create new contact.
- $contact = civicrm_api3('Contact', 'create',
- array('contact_type' => 'Individual',
- 'email' => $email,
- 'api.Email.get' => array('return' => 'id')
- )
- );
- $contactId = $contact['id'];
- $emailId = $contact['values'][$contactId]['api.Email.get']['id'];
- }
- civicrm_api3('MailingEventQueue', 'create',
- array('job_id' => $job['id'],
- 'email_id' => $emailId,
- 'contact_id' => $contactId
- )
- );
- }
- }
-
- $isComplete = FALSE;
- while (!$isComplete) {
- $isComplete = CRM_Mailing_BAO_MailingJob::runJobs($testEmailParams);
- }
-
- //return delivered mail info
- $mailDelivered = CRM_Mailing_Event_BAO_Delivered::getRows($params['mailing_id'], $job['id'], TRUE, NULL, NULL, NULL, TRUE);
- return civicrm_api3_create_success($mailDelivered);
-}
-