CRM-13067 mini-refactor - make options per wiki BAO std (ie. params holds
authoreileen <eileen@fuzion.co.nz>
Sat, 3 Aug 2013 00:37:06 +0000 (12:37 +1200)
committereileen <eileen@fuzion.co.nz>
Sun, 4 Aug 2013 07:25:22 +0000 (19:25 +1200)
ids & ids is optional / on the way out

CRM-13067 mini-refactor - make  options per wiki BAO std (ie. params holds
ids & ids is optional / on the way out

CRM/Contribute/BAO/Contribution.php
CRM/Core/BAO/Note.php
CRM/Member/BAO/Membership.php
api/v3/Contribution.php
api/v3/utils.php

index 17187c89b64c80f84f6b761c9a0486e208b6cf01..e09fcf50838d432eb6eb78daa7b33a736b6c1a31 100644 (file)
@@ -87,15 +87,15 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
    * @access public
    * @static
    */
-  static function add(&$params, &$ids) {
+  static function add(&$params, $ids = array()) {
     if (empty($params)) {
       return;
     }
+    //per http://wiki.civicrm.org/confluence/display/CRM/Database+layer we are moving away from $ids array
+    $contributionID = CRM_Utils_Array::value('contribution', $ids, CRM_Utils_Array::value('id', $params));
 
     $duplicates = array();
-    if (self::checkDuplicate($params, $duplicates,
-        CRM_Utils_Array::value('contribution', $ids)
-      )) {
+    if (self::checkDuplicate($params, $duplicates, $contributionID)) {
       $error = CRM_Core_Error::singleton();
       $d = implode(', ', $duplicates);
       $error->push(CRM_Core_Error::DUPLICATE_CONTRIBUTION,
@@ -138,8 +138,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
       $params['contribution_status_id'] = CRM_Core_OptionGroup::getValue('contribution_status', 'Completed', 'name');
     }
 
-    if (CRM_Utils_Array::value('contribution', $ids)) {
-      CRM_Utils_Hook::pre('edit', 'Contribution', $ids['contribution'], $params);
+    if ($contributionID) {
+      CRM_Utils_Hook::pre('edit', 'Contribution', $contributionID, $params);
     }
     else {
       CRM_Utils_Hook::pre('create', 'Contribution', NULL, $params);
@@ -148,16 +148,15 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
     $contribution = new CRM_Contribute_BAO_Contribution();
     $contribution->copyValues($params);
 
-    $contribution->id = CRM_Utils_Array::value('contribution', $ids);
+    $contribution->id = $contributionID;
 
     if (!CRM_Utils_Rule::currencyCode($contribution->currency)) {
       $config = CRM_Core_Config::singleton();
       $contribution->currency = $config->defaultCurrency;
     }
 
-    if (CRM_Utils_Array::value('contribution', $ids)) {
-      $contributionId['id'] = $ids['contribution'];
-      $params['prevContribution'] = self::getValues($contributionId, CRM_Core_DAO::$_nullArray, CRM_Core_DAO::$_nullArray);
+    if ($contributionID) {
+      $params['prevContribution'] = self::getValues(array('id' => $contributionID), CRM_Core_DAO::$_nullArray, CRM_Core_DAO::$_nullArray);
     }
 
     $result = $contribution->save();
@@ -173,7 +172,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
     // reset the group contact cache for this group
     CRM_Contact_BAO_GroupContactCache::remove();
 
-    if (CRM_Utils_Array::value('contribution', $ids)) {
+    if ($contributionID) {
       CRM_Utils_Hook::post('edit', 'Contribution', $contribution->id, $contribution);
     }
     else {
@@ -195,7 +194,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
    * @access public
    * @static
    */
-  static function &getValues(&$params, &$values, &$ids) {
+  static function &getValues($params, &$values, &$ids) {
     if (empty($params)) {
       return NULL;
     }
@@ -223,7 +222,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
    * @access public
    * @static
    */
-  static function &create(&$params, &$ids) {
+  static function &create(&$params, $ids = array()) {
     $dateFields = array('receive_date', 'cancel_date', 'receipt_date', 'thankyou_date');
     foreach ($dateFields as $df) {
       if (isset($params[$df])) {
@@ -261,9 +260,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
       if (!$noteParams['contact_id']) {
         $noteParams['contact_id'] = $params['contact_id'];
       }
-      CRM_Core_BAO_Note::add($noteParams,
-        CRM_Utils_Array::value('note', $ids)
-      );
+      CRM_Core_BAO_Note::add($noteParams);
     }
 
     // make entry in batch entity batch table
@@ -2472,12 +2469,11 @@ WHERE  contribution_id = %1 ";
    *
    * @param array $params contribution object, line item array and params for trxn
    *
-   * @param array $ids of contribution id
    *
    * @access public
    * @static
    */
-  static function recordFinancialAccounts(&$params, $ids) {
+  static function recordFinancialAccounts(&$params) {
     $skipRecords = $update = FALSE;
     $additionalParticipantId = array();
     $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
@@ -2691,7 +2687,7 @@ WHERE  contribution_id = %1 ";
 
         $params['trxnParams']['total_amount'] = - $params['total_amount'];
       }
-      elseif ($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus) 
+      elseif ($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)
         && $params['prevContribution']->is_pay_later) {
         $financialTypeID = CRM_Utils_Array::value('financial_type_id', $params) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id;
         if ($params['contribution']->contribution_status_id == array_search('Cancelled', $contributionStatus)) {
index 2a0663fdc2132d701b96b3694b18f13f4b03a207..c7dd875f2e368f8efa8d78de976ad29e8fd8e3bc 100644 (file)
@@ -131,8 +131,8 @@ class CRM_Core_BAO_Note extends CRM_Core_DAO_Note {
    * note object. the params array could contain additional unused name/value
    * pairs
    *
-   * @param array $params  (reference ) an assoc array of name/value pairs
-   * @param array $ids  associated array with note id
+   * @param array $params  (reference) an assoc array of name/value pairs
+   * @param array $ids (deprecated) associated array with note id - preferably set $params['id']
    *
    * @return object $note CRM_Core_BAO_Note object
    * @access public
index 25d8da69a57065de62a1d3adcd9ff495ff5e669a..77d5c02af27f5380766d9f863757d1bccf7d99b7 100644 (file)
@@ -322,7 +322,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
     //record contribution for this membership
     if (CRM_Utils_Array::value('contribution_status_id', $params) && !CRM_Utils_Array::value('relate_contribution_id', $params)) {
-      $params['contribution'] = self::recordMembershipContribution( array_merge($params, array('membership_id' => $membership->id), $ids);
+      $params['contribution'] = self::recordMembershipContribution( array_merge($params, array('membership_id' => $membership->id)), $ids);
     }
 
     //insert payment record for this membership
index 10e29f88e237d023812b57a6febe1bbc2d46aeb7..8bbf12399b1ec280695bc2016c35a22aa513bfe1 100644 (file)
  */
 function civicrm_api3_contribution_create(&$params) {
   $values = array();
-
-  _civicrm_api3_contribute_format_params($params, $values);
-
   _civicrm_api3_custom_format_params($params, $values, 'Contribution');
-  $values["contact_id"] = CRM_Utils_Array::value('contact_id', $params);
-  $values["source"] = CRM_Utils_Array::value('source', $params);
-  //legacy soft credit handling
+  $params = array_merge($params, $values);
+
+  //legacy soft credit handling - recommended approach is chaining
   if(!empty($params['soft_credit_to'])){
-    $values['soft_credit'] = array(array(
+    $params['soft_credit'] = array(array(
       'contact_id' => $params['soft_credit_to'],
       'amount' => $params['total_amount']));
   }
-  $ids = array();
-  if (CRM_Utils_Array::value('id', $params)) {
-    $ids['contribution'] = $params['id'];
-    // CRM-12498
-    if (CRM_Utils_Array::value('contribution_status_id', $params)) {
-      $error = array();
-      //throw error for invalid status change
-      CRM_Contribute_BAO_Contribution::checkStatusValidation(NULL, $params, $error);
-      if (array_key_exists('contribution_status_id', $error)) {
-        return civicrm_api3_create_error($error['contribution_status_id']);
-      }
-    }
-  }
-  $contribution = CRM_Contribute_BAO_Contribution::create($values, $ids);
 
-  if (is_a($contribution, 'CRM_Core_Error')) {
-    return civicrm_api3_create_error($contribution->_errors[0]['message']);
+  if (CRM_Utils_Array::value('id', $params) && CRM_Utils_Array::value('contribution_status_id', $params)) {
+    $error = array();
+    //throw error for invalid status change such as setting completed back to pending
+    //@todo this sort of validation belongs in the BAO not the API - if it is not an OK
+    // action it needs to be blocked there. If it is Ok through a form it needs to be OK through the api
+    CRM_Contribute_BAO_Contribution::checkStatusValidation(NULL, $params, $error);
+    if (array_key_exists('contribution_status_id', $error)) {
+      throw new API_Exception($error['contribution_status_id']);
+    }
   }
-  _civicrm_api3_object_to_array($contribution, $contributeArray[$contribution->id]);
-
-  return civicrm_api3_create_success($contributeArray, $params, 'contribution', 'create', $contribution);
+  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Contribution');
 }
 
 /**
index 6ad074a46565afc6bc293a7b7e624900dcdeddd9..84b7f24dc2a035069159f9bfa22b650870d61642 100644 (file)
@@ -943,7 +943,7 @@ function _civicrm_api3_basic_create($bao_name, &$params, $entity = NULL) {
   else {
     $values = array();
     _civicrm_api3_object_to_array($bao, $values[$bao->id]);
-    return civicrm_api3_create_success($values, $params, NULL, 'create', $bao);
+    return civicrm_api3_create_success($values, $params, $entity, 'create', $bao);
   }
 }