Api's added, preview added
[civicrm-core.git] / api / v3 / Mailing.php
index 662e48a904a6b292be15b6e4d5786a1293304415..9908539961639efb9026af1c0e26154411226684 100644 (file)
@@ -2,9 +2,9 @@
 
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.4                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -32,7 +32,7 @@
  *
  * @package CiviCRM_APIv3
  * @subpackage API_Mailing
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
  * $Id$
  *
  */
@@ -45,6 +45,8 @@
  * Handle a create event.
  *
  * @param array $params
+ * @param array $ids
+ *
  * @return array API Success Array
  */
 function civicrm_api3_mailing_create($params, $ids = array()) {
@@ -66,12 +68,119 @@ function _civicrm_api3_mailing_create_spec(&$params) {
   $params['api.mailing_job.create']['api.default'] = 1;
 }
 
+
+
+
+function civicrm_api3_mailing_stats($params) {
+  civicrm_api3_verify_mandatory($params,
+    'CRM_Mailing_DAO_MailingJob',
+    array('mailing_id'),
+    FALSE
+  );
+  $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'])
+        );
+        break;
+      case 'Bounces':
+        $stats[$params['mailing_id']] += array(
+          $detail =>  CRM_Mailing_Event_BAO_Bounce::getTotalCount($params['mailing_id'], $params['job_id'])
+        );
+        break;
+      case 'Unsubscribers':
+        $stats[$params['mailing_id']] += array(
+          $detail =>  CRM_Mailing_Event_BAO_Unsubscribe::getTotalCount($params['mailing_id'], $params['job_id'])
+        );
+        break;
+      case 'Unique Clicks':
+        $stats[$params['mailing_id']] += array(
+          $detail =>  CRM_Mailing_Event_BAO_TrackableURLOpen::getTotalCount($params['mailing_id'], $params['job_id'])
+        );
+        break;
+      case 'Opened':
+        $stats[$params['mailing_id']] += array(
+          $detail =>  CRM_Mailing_Event_BAO_Opened::getTotalCount($params['mailing_id'], $params['job_id'])
+        );
+        break;
+    }
+  }
+  return civicrm_api3_create_success($stats);
+}
+
+
+
+function civicrm_api3_mailing_a_b_recipients_update($params) {
+  civicrm_api3_verify_mandatory($params,
+    'CRM_Mailing_DAO_MailingAB',
+    array('id'),
+    FALSE
+  );
+
+
+  $mailingAB = civicrm_api3('MailingAB', 'get', $params);
+  $mailingAB = $mailingAB['values'][$params['id']];
+
+  //update mailingC with include/exclude group id(s) provided
+  civicrm_api3('Mailing', 'create', array('id' => $mailingAB['mailing_id_c'], 'groups' =>  $params['groups']));
+  //update recipients for mailing_id_c
+  CRM_Mailing_BAO_Mailing::getRecipients($mailingAB['mailing_id_c'], $mailingAB['mailing_id_c'], NULL, NULL, TRUE);
+  //calulate total number of random recipients for mail C from group_percentage selected
+  $totalCount =  civicrm_api3('MailingRecipients', 'getcount', array('mailing_id' => $mailingAB['mailing_id_c']));
+  $totalSelected = round(($totalCount * $mailingAB['group_percentage'])/100);
+  foreach (array('mailing_id_a', 'mailing_id_b') as $columnName) {
+    CRM_Mailing_BAO_Recipients::updateRandomRecipients($mailingAB['mailing_id_c'], $mailingAB[$columnName], $totalSelected);
+  }
+  return civicrm_api3_create_success();
+}
+
+
+
 /**
- * Handle a create event.
+ * Handle a delete event.
  *
  * @param array $params
+ * @param array $ids
+ *
  * @return array API Success Array
  */
+
+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);
+  $details = CRM_Utils_Token::getTokenDetails($mailingParams, $returnProperties, TRUE, TRUE, NULL, $mailing->getFlattenedToken());
+  $mime = &$mailing->compose(NULL, NULL, NULL, $session->get('userID'), $fromEmail, $fromEmail,
+    TRUE, $details[0][$contactID], $attachments
+  );
+  return civicrm_api3_create_success(array('html' => $mime->getHTMLBody(), 'text' => $mime->getTXTBody()));
+}
+
+
 function civicrm_api3_mailing_delete($params, $ids = array()) {
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
@@ -92,6 +201,7 @@ function civicrm_api3_mailing_get($params) {
  *
  * @param array $params
  *
+ * @throws API_Exception
  * @return array
  */
 function civicrm_api3_mailing_event_bounce($params) {