diff --git a/api/v3/Contribution.php b/api/v3/Contribution.php index 6396535fb355..02dae0513ddb 100644 --- a/api/v3/Contribution.php +++ b/api/v3/Contribution.php @@ -500,7 +500,40 @@ function civicrm_api3_contribution_completetransaction($params) { throw new API_Exception('failed to load related objects'); } - return _ipn_process_transaction($params, $contribution, $input, $ids); + // @todo Copied from _ipn_process_transaction - needs cleanup/refactor + $objects = $contribution->_relatedObjects; + $objects['contribution'] = &$contribution; + $input['component'] = $contribution->_component; + $input['is_test'] = $contribution->is_test; + $input['amount'] = empty($input['total_amount']) ? $contribution->total_amount : $input['total_amount']; + + if (isset($params['is_email_receipt'])) { + $input['is_email_receipt'] = $params['is_email_receipt']; + } + if (!empty($params['trxn_date'])) { + $input['trxn_date'] = $params['trxn_date']; + } + if (!empty($params['receive_date'])) { + $input['receive_date'] = $params['receive_date']; + } + if (empty($contribution->contribution_page_id)) { + static $domainFromName; + static $domainFromEmail; + if (empty($domainFromEmail) && (empty($params['receipt_from_name']) || empty($params['receipt_from_email']))) { + [$domainFromName, $domainFromEmail] = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); + } + $input['receipt_from_name'] = CRM_Utils_Array::value('receipt_from_name', $params, $domainFromName); + $input['receipt_from_email'] = CRM_Utils_Array::value('receipt_from_email', $params, $domainFromEmail); + } + $input['card_type_id'] = $params['card_type_id'] ?? NULL; + $input['pan_truncation'] = $params['pan_truncation'] ?? NULL; + if (!empty($params['payment_instrument_id'])) { + $input['payment_instrument_id'] = $params['payment_instrument_id']; + } + return CRM_Contribute_BAO_Contribution::completeOrder($input, + !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, + $objects['contribution']->id ?? NULL, + $params['is_post_payment_create'] ?? NULL); } /** @@ -632,7 +665,40 @@ function civicrm_api3_contribution_repeattransaction($params) { unset($contribution->id, $contribution->receive_date, $contribution->invoice_id); $contribution->receive_date = $params['receive_date']; - return _ipn_process_transaction($params, $contribution, $input, $ids); + // @todo Copied from _ipn_process_transaction - needs cleanup/refactor + $objects = $contribution->_relatedObjects; + $objects['contribution'] = &$contribution; + $input['component'] = $contribution->_component; + $input['is_test'] = $contribution->is_test; + $input['amount'] = empty($input['total_amount']) ? $contribution->total_amount : $input['total_amount']; + + if (isset($params['is_email_receipt'])) { + $input['is_email_receipt'] = $params['is_email_receipt']; + } + if (!empty($params['trxn_date'])) { + $input['trxn_date'] = $params['trxn_date']; + } + if (!empty($params['receive_date'])) { + $input['receive_date'] = $params['receive_date']; + } + if (empty($contribution->contribution_page_id)) { + static $domainFromName; + static $domainFromEmail; + if (empty($domainFromEmail) && (empty($params['receipt_from_name']) || empty($params['receipt_from_email']))) { + [$domainFromName, $domainFromEmail] = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); + } + $input['receipt_from_name'] = CRM_Utils_Array::value('receipt_from_name', $params, $domainFromName); + $input['receipt_from_email'] = CRM_Utils_Array::value('receipt_from_email', $params, $domainFromEmail); + } + $input['card_type_id'] = $params['card_type_id'] ?? NULL; + $input['pan_truncation'] = $params['pan_truncation'] ?? NULL; + if (!empty($params['payment_instrument_id'])) { + $input['payment_instrument_id'] = $params['payment_instrument_id']; + } + return CRM_Contribute_BAO_Contribution::completeOrder($input, + !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, + $objects['contribution']->id ?? NULL, + $params['is_post_payment_create'] ?? NULL); } /** @@ -641,6 +707,8 @@ function civicrm_api3_contribution_repeattransaction($params) { * The IPN function is overloaded with two purposes - this is simply a wrapper for that * when separating them in the api layer. * + * @deprecated + * * @param array $params * @param CRM_Contribute_BAO_Contribution $contribution * @param array $input @@ -652,6 +720,7 @@ function civicrm_api3_contribution_repeattransaction($params) { * @throws \CiviCRM_API3_Exception */ function _ipn_process_transaction($params, $contribution, $input, $ids) { + CRM_Core_Error::deprecatedFunctionWarning('API3 contribution.completetransaction or contribution.repeattransaction'); $objects = $contribution->_relatedObjects; $objects['contribution'] = &$contribution; $input['component'] = $contribution->_component;