From 504a78f6fac024a04ad222bcc7a66e0047b5fdcb Mon Sep 17 00:00:00 2001 From: eileen Date: Sat, 3 Aug 2013 12:37:06 +1200 Subject: [PATCH] CRM-13067 mini-refactor - make options per wiki BAO std (ie. params holds 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 | 34 +++++++++++------------- CRM/Core/BAO/Note.php | 4 +-- CRM/Member/BAO/Membership.php | 2 +- api/v3/Contribution.php | 40 ++++++++++------------------- api/v3/utils.php | 2 +- 5 files changed, 33 insertions(+), 49 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 17187c89b6..e09fcf5083 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -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)) { diff --git a/CRM/Core/BAO/Note.php b/CRM/Core/BAO/Note.php index 2a0663fdc2..c7dd875f2e 100644 --- a/CRM/Core/BAO/Note.php +++ b/CRM/Core/BAO/Note.php @@ -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 diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index 25d8da69a5..77d5c02af2 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -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 diff --git a/api/v3/Contribution.php b/api/v3/Contribution.php index 10e29f88e2..8bbf12399b 100644 --- a/api/v3/Contribution.php +++ b/api/v3/Contribution.php @@ -50,39 +50,27 @@ */ 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'); } /** diff --git a/api/v3/utils.php b/api/v3/utils.php index 6ad074a465..84b7f24dc2 100644 --- a/api/v3/utils.php +++ b/api/v3/utils.php @@ -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); } } -- 2.25.1