* @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,
$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);
$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();
// 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 {
* @access public
* @static
*/
- static function &getValues(&$params, &$values, &$ids) {
+ static function &getValues($params, &$values, &$ids) {
if (empty($params)) {
return NULL;
}
* @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])) {
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
*
* @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');
$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)) {
*/
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');
}
/**