Merge remote-tracking branch 'rajgo94/mailingui-new' into master-abtest
[civicrm-core.git] / api / v3 / Mailing.php
old mode 100644 (file)
new mode 100755 (executable)
index 553a86b..b653d15
  * @return array API Success Array
  */
 function civicrm_api3_mailing_create($params, $ids = array()) {
-  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+       return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
-function civicrm_api3_mailing_get_token($params) { 
-       if (!array_key_exists("usage", $params)) { 
-                throw new API_Exception('Mandatory keys missing from params array: entity');
-               }
-       
+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 '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::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::membershipTokens(), $tokens);
+                       break;
+               case 'ManageEventScheduleReminder' :
                        $tokens = array_merge(CRM_Core_SelectValues::eventTokens(), $tokens);
                        break;
-  }
-  
-  return CRM_Utils_Token::formatTokensForDisplay($tokens);
+       }
+
+       return CRM_Utils_Token::formatTokensForDisplay($tokens);
 
 }
-  
-               
+
+
 
 /**
  * Adjust Metadata for Create action
@@ -92,6 +92,7 @@ function _civicrm_api3_mailing_create_spec(&$params) {
   // making required for simplicity
   $params['created_id']['api.required'] = 1;
   $params['api.mailing_job.create']['api.default'] = 1;
+  $params['api.mailing_job.create']['title'] = 'Schedule Mailing?';
 }
 
 /**
@@ -103,7 +104,7 @@ function _civicrm_api3_mailing_create_spec(&$params) {
  * @return array API Success Array
  */
 function civicrm_api3_mailing_delete($params, $ids = array()) {
-  return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+       return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
 
@@ -114,7 +115,7 @@ function civicrm_api3_mailing_delete($params, $ids = array()) {
  * @return array
  */
 function civicrm_api3_mailing_get($params) {
-  return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+       return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
 /**
@@ -127,18 +128,18 @@ function civicrm_api3_mailing_get($params) {
  */
 function civicrm_api3_mailing_event_bounce($params) {
 
-  $body = $params['body'];
-  unset($params['body']);
+       $body = $params['body'];
+       unset($params['body']);
 
-  $params += CRM_Mailing_BAO_BouncePattern::match($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
+       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
       ');
-  }
+       }
 }
 
 /**
@@ -149,9 +150,13 @@ function civicrm_api3_mailing_event_bounce($params) {
  */
 function _civicrm_api3_mailing_event_bounce_spec(&$params) {
   $params['job_id']['api.required'] = 1;
+  $params['job_id']['title'] = 'Job ID';
   $params['event_queue_id']['api.required'] = 1;
+  $params['event_queue_id']['title'] = 'Event Queue ID';
   $params['hash']['api.required'] = 1;
+  $params['hash']['title'] = 'Hash';
   $params['body']['api.required'] = 1;
+  $params['body']['title'] = 'Body';
 }
 
 /**
@@ -163,7 +168,15 @@ function _civicrm_api3_mailing_event_bounce_spec(&$params) {
  * @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.');
 }
 
 /**
@@ -174,23 +187,23 @@ function civicrm_api3_mailing_event_confirm($params) {
  * @return array
  */
 function civicrm_api3_mailing_event_reply($params) {
-  $job       = $params['job_id'];
-  $queue     = $params['event_queue_id'];
-  $hash      = $params['hash'];
-  $replyto   = $params['replyTo'];
-  $bodyTxt   = CRM_Utils_Array::value('bodyTxt', $params);
-  $bodyHTML  = CRM_Utils_Array::value('bodyHTML', $params);
-  $fullEmail = CRM_Utils_Array::value('fullEmail', $params);
-
-  $mailing = CRM_Mailing_Event_BAO_Reply::reply($job, $queue, $hash, $replyto);
-
-  if (empty($mailing)) {
-    return civicrm_api3_create_error('Queue event could not be found');
-  }
+       $job       = $params['job_id'];
+       $queue     = $params['event_queue_id'];
+       $hash      = $params['hash'];
+       $replyto   = $params['replyTo'];
+       $bodyTxt   = CRM_Utils_Array::value('bodyTxt', $params);
+       $bodyHTML  = CRM_Utils_Array::value('bodyHTML', $params);
+       $fullEmail = CRM_Utils_Array::value('fullEmail', $params);
+
+       $mailing = CRM_Mailing_Event_BAO_Reply::reply($job, $queue, $hash, $replyto);
 
-  CRM_Mailing_Event_BAO_Reply::send($queue, $mailing, $bodyTxt, $replyto, $bodyHTML, $fullEmail);
+       if (empty($mailing)) {
+               return civicrm_api3_create_error('Queue event could not be found');
+       }
 
-  return civicrm_api3_create_success($params);
+       CRM_Mailing_Event_BAO_Reply::send($queue, $mailing, $bodyTxt, $replyto, $bodyHTML, $fullEmail);
+
+       return civicrm_api3_create_success($params);
 }
 
 /**
@@ -201,9 +214,13 @@ function civicrm_api3_mailing_event_reply($params) {
  */
 function _civicrm_api3_mailing_event_reply_spec(&$params) {
   $params['job_id']['api.required'] = 1;
+  $params['job_id']['title'] = 'Job ID';
   $params['event_queue_id']['api.required'] = 1;
+  $params['event_queue_id']['title'] = 'Event Queue ID';
   $params['hash']['api.required'] = 1;
+  $params['hash']['title'] = 'Hash';
   $params['replyTo']['api.required'] = 0;
+  $params['replyTo']['title'] = 'Reply To';//doesn't really explain adequately
 }
 
 /**
@@ -214,20 +231,20 @@ function _civicrm_api3_mailing_event_reply_spec(&$params) {
  * @return array
  */
 function civicrm_api3_mailing_event_forward($params) {
-  $job       = $params['job_id'];
-  $queue     = $params['event_queue_id'];
-  $hash      = $params['hash'];
-  $email     = $params['email'];
-  $fromEmail = CRM_Utils_Array::value('fromEmail', $params);
-  $params    = CRM_Utils_Array::value('params', $params);
+       $job       = $params['job_id'];
+       $queue     = $params['event_queue_id'];
+       $hash      = $params['hash'];
+       $email     = $params['email'];
+       $fromEmail = CRM_Utils_Array::value('fromEmail', $params);
+       $params    = CRM_Utils_Array::value('params', $params);
 
-  $forward = CRM_Mailing_Event_BAO_Forward::forward($job, $queue, $hash, $email, $fromEmail, $params);
+       $forward = CRM_Mailing_Event_BAO_Forward::forward($job, $queue, $hash, $email, $fromEmail, $params);
 
-  if ($forward) {
-    return civicrm_api3_create_success($params);
-  }
+       if ($forward) {
+               return civicrm_api3_create_success($params);
+       }
 
-  return civicrm_api3_create_error('Queue event could not be found');
+       return civicrm_api3_create_error('Queue event could not be found');
 }
 
 /**
@@ -238,9 +255,13 @@ function civicrm_api3_mailing_event_forward($params) {
  */
 function _civicrm_api3_mailing_event_forward_spec(&$params) {
   $params['job_id']['api.required'] = 1;
+  $params['job_id']['title'] = 'Job ID';
   $params['event_queue_id']['api.required'] = 1;
+  $params['event_queue_id']['title'] = 'Event Queue ID';
   $params['hash']['api.required'] = 1;
+  $params['hash']['title'] = 'Hash';
   $params['email']['api.required'] = 1;
+  $params['email']['title'] = 'Forwarded to Email';
 }
 
 /**
@@ -252,22 +273,22 @@ function _civicrm_api3_mailing_event_forward_spec(&$params) {
  */
 function civicrm_api3_mailing_event_click($params) {
 
-  civicrm_api3_verify_mandatory($params,
-    'CRM_Mailing_Event_DAO_TrackableURLOpen',
-    array('event_queue_id', 'url_id'),
-    FALSE
-  );
+       civicrm_api3_verify_mandatory($params,
+               'CRM_Mailing_Event_DAO_TrackableURLOpen',
+               array('event_queue_id', 'url_id'),
+               FALSE
+       );
 
-  $url_id = $params['url_id'];
-  $queue = $params['event_queue_id'];
+       $url_id = $params['url_id'];
+       $queue = $params['event_queue_id'];
 
-  $url = CRM_Mailing_Event_BAO_TrackableURLOpen::track($queue, $url_id);
+       $url = CRM_Mailing_Event_BAO_TrackableURLOpen::track($queue, $url_id);
 
-  $values             = array();
-  $values['url']      = $url;
-  $values['is_error'] = 0;
+       $values             = array();
+       $values['url']      = $url;
+       $values['is_error'] = 0;
 
-  return civicrm_api3_create_success($values);
+       return civicrm_api3_create_success($values);
 }
 
 /**
@@ -279,33 +300,20 @@ function civicrm_api3_mailing_event_click($params) {
  */
 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);
-
-  if (!$success) {
-    return civicrm_api3_create_error('mailing open event failed');
-  }
+       $queue = $params['event_queue_id'];
+       $success = CRM_Mailing_Event_BAO_Opened::open($queue);
 
-  return civicrm_api3_create_success($params);
-}
+       if (!$success) {
+               return civicrm_api3_create_error('mailing open event failed');
+       }
 
-/**
- * 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();
+       return civicrm_api3_create_success($params);
 }
 
 function civicrm_api3_mailing_preview($params) {
@@ -314,25 +322,38 @@ function civicrm_api3_mailing_preview($params) {
     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);
+
   $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
+    TRUE, $details[0][$contactID], $attachments
   );
-  return array('html' => $mime->getHTMLBody(), 'text' => $mime->getTXTBody());
+
+  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" );
@@ -342,8 +363,10 @@ function civicrm_api3_mailing_send_test($params) {
     array('mailing_id'),
     FALSE
   );
+
   $testEmailParams = _civicrm_api3_generic_replace_base_params($params);
-  $job = civicrm_api3('MailingJob', 'create', array('mailing_id' => $testEmailParams['mailing_id'], 'is_test' => 1));
+  $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'])) {
@@ -395,10 +418,87 @@ ORDER BY   e.is_bulkmail DESC, e.is_primary DESC
       );
     }
   }
+
   $isComplete = FALSE;
   while (!$isComplete) {
     $isComplete = CRM_Mailing_BAO_MailingJob::runJobs($testEmailParams);
   }
-  return $isComplete;
+
+  //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();
+}