Merge pull request #3679 from yashodha/CRM-14951
[civicrm-core.git] / api / v3 / MailingContact.php
index a6fa23d0b824bbbe4c7e4d3dcea0ce773dcdbbf7..8e342e0c82a852293d4d257ceba3f163dca5f1f6 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -31,7 +31,7 @@
  * @package CiviCRM_APIv3
  * @subpackage API_MailingContact
  *
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
  * @version $Id$
  *
  */
  *
  */
 function civicrm_api3_mailing_contact_get($params) {
-  if (empty($params['contact_id'])) {
-    return civicrm_api3_create_error('contact_id is a required field');
-  }
-
-  if (empty($params['type'])) {
-    $params['type'] = 'Delivered';
-  }
-
-  $validTypeValues = array('Delivered', 'Bounced');
-  if (!in_array($params['type'], $validTypeValues)) {
-    return civicrm_api3_create_error(
-      'type should be one of the following: ' .
-      implode(', ', $validTypeValues)
-    );
-  }
-
-  if (!isset($params['offset'])) {
-    $params['offset'] = 0;
-  }
-
-  if (!isset($params['limit'])) {
-    $params['limit'] = 50;
+  return civicrm_api3_create_success(_civicrm_api3_mailing_contact_getresults($params, FALSE));
+}
+/**
+ * This is a wrapper for the functions that return the results from the 'quasi-entity'
+ * mailing contact
+ * @param array $params
+ * @param Boolean $count
+ * @throws Exception
+ */
+function _civicrm_api3_mailing_contact_getresults($params, $count){
+  if(empty($params['type'])){
+    //ie. because the api is an anomoly & passing in id is not valid
+    throw new Exception('This api call does not accept api as a parameter');
   }
-
+  $options  = _civicrm_api3_get_options_from_params($params, TRUE,'contribution','get');
   $fnName = '_civicrm_api3_mailing_contact_get_' . strtolower($params['type']);
   return $fnName(
-    $params['contact_id'],
-    $params['offset'],
-    $params['limit'],
-    CRM_Utils_Array::value('sort', $params),
-    CRM_Utils_Array::value('getcount', $params)
+      $params['contact_id'],
+      $options['offset'],
+      $options['limit'],
+      $options['sort'],
+      $count
+  );
+}
+/**
+ * Adjust Metadata for Get action
+ *
+ * @param array $params array or parameters determined by getfields
+ */
+function _civicrm_api3_mailing_contact_get_spec(&$params) {
+  $params['contact_id']['api.required'] = 1;
+  $params['type'] = array(
+    'api.default' => 'Delivered',
+    'type' => CRM_Utils_Type::T_STRING,
+    'options' => array(
+      'Delivered' => 'Delivered',
+      'Bounced' => 'Bounced',
+    )
   );
 }
 
+/**
+ * @param $type
+ * @param $contactID
+ * @param $offset
+ * @param $limit
+ * @param $selectFields
+ * @param $fromClause
+ * @param $whereClause
+ * @param $sort
+ * @param $getCount
+ *
+ * @return array
+ */
 function _civicrm_api3_mailing_contact_query(
   $type,
   $contactID,
@@ -121,7 +141,7 @@ GROUP BY   m.id
       'contact_id' => $contactID
     );
 
-    $results = array('count' => $dao->N);
+    $results = $dao->N;
   }
   else {
     $defaultFields = array(
@@ -182,18 +202,20 @@ LIMIT %2, %3
         $results[$dao->mailing_id][$l] = $dao->$l;
       }
     }
-
-    $params = array(
-      'type'   => $type,
-      'contact_id' => $contactID,
-      'offset' => $offset,
-      'limit'  => $limit
-    );
   }
 
-  return civicrm_api3_create_success($results, $params);
+  return $results;
 }
 
+/**
+ * @param $contactID
+ * @param $offset
+ * @param $limit
+ * @param $sort
+ * @param $getCount
+ *
+ * @return array
+ */
 function _civicrm_api3_mailing_contact_get_delivered(
   $contactID,
   $offset,
@@ -225,6 +247,15 @@ AND        meb.id IS NULL
   );
 }
 
+/**
+ * @param $contactID
+ * @param $offset
+ * @param $limit
+ * @param $sort
+ * @param $getCount
+ *
+ * @return array
+ */
 function _civicrm_api3_mailing_contact_get_bounced(
   $contactID,
   $offset,
@@ -264,11 +295,5 @@ INNER JOIN civicrm_mailing_event_bounce meb ON meb.event_queue_id = meq.id
  *
  */
 function civicrm_api3_mailing_contact_getcount($params) {
-  if (empty($params['contact_id'])) {
-    return civicrm_api3_create_error('contact_id is a required field');
-  }
-
-  // set the count mode for the api
-  $params['getcount'] = 1;
-  return civicrm_api3_mailing_contact_get($params);
+  return _civicrm_api3_mailing_contact_getresults($params, TRUE);
 }