+--------------------------------------------------------------------+
| CiviCRM version 5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2018 |
+ | Copyright CiviCRM LLC (c) 2004-2019 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2018
+ * @copyright CiviCRM LLC (c) 2004-2019
*/
/**
*
* @param array $params
* @param int $financialTypeID
- * @param bool $pending
* @param array $paymentProcessorOutcome
* @param string $receiptDate
* @param int $recurringContributionID
* @return array
*/
public static function getContributionParams(
- $params, $financialTypeID, $pending,
+ $params, $financialTypeID,
$paymentProcessorOutcome, $receiptDate, $recurringContributionID) {
$contributionParams = array(
'financial_type_id' => $financialTypeID,
'receipt_date' => $receiptDate,
);
}
- if (!$pending && $paymentProcessorOutcome) {
- $contributionParams += array(
- 'fee_amount' => CRM_Utils_Array::value('fee_amount', $paymentProcessorOutcome),
- 'net_amount' => CRM_Utils_Array::value('net_amount', $paymentProcessorOutcome, $params['amount']),
- 'trxn_id' => $paymentProcessorOutcome['trxn_id'],
- 'receipt_date' => $receiptDate,
- // also add financial_trxn details as part of fix for CRM-4724
- 'trxn_result_code' => CRM_Utils_Array::value('trxn_result_code', $paymentProcessorOutcome),
- );
- }
if ($recurringContributionID) {
$contributionParams['contribution_recur_id'] = $recurringContributionID;
}
- $contributionParams['contribution_status_id'] = $pending ? 2 : 1;
+ $contributionParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending');
if (isset($contributionParams['invoice_id'])) {
$contributionParams['id'] = CRM_Core_DAO::getFieldValue(
'CRM_Contribute_DAO_Contribution',
if (isset($params['amount'])) {
$contributionParams = array_merge(self::getContributionParams(
- $params, $financialType->id, TRUE,
+ $params, $financialType->id,
$result, $receiptDate,
$recurringContributionID), $contributionParams
);
$capabilities[] = (ucfirst($form->_mode) . 'Mode');
}
$form->_paymentProcessors = CRM_Financial_BAO_PaymentProcessor::getPaymentProcessors($capabilities);
- $form->_params['payment_processor_id'] = !empty($params['payment_processor_id']) ? $params['payment_processor_id'] : 0;
- $form->_paymentProcessor = $form->_paymentProcessors[$form->_params['payment_processor_id']];
+ $form->_params['payment_processor_id'] = isset($params['payment_processor_id']) ? $params['payment_processor_id'] : 0;
+ if ($form->_params['payment_processor_id'] !== '') {
+ // It can be blank with a $0 transaction - then no processor needs to be selected
+ $form->_paymentProcessor = $form->_paymentProcessors[$form->_params['payment_processor_id']];
+ }
if (!empty($params['payment_processor_id'])) {
// The concept of contributeMode is deprecated as is the billing_mode concept.
if ($form->_paymentProcessor['billing_mode'] == 1) {
if (!empty($params['payment_processor_id'])) {
$params['is_pay_later'] = 0;
}
- else {
+ elseif ($params['amount'] !== 0) {
$params['is_pay_later'] = civicrm_api3('contribution_page', 'getvalue', array(
'id' => $id,
'return' => 'is_pay_later',
$this->postProcessPremium($premiumParams, $result['contribution']);
}
if (!empty($result['contribution'])) {
- // Not quite sure why it would be empty at this stage but tests show it can be ... at least in tests.
+ // It seems this line is hit when there is a zero dollar transaction & in tests, not sure when else.
$this->completeTransaction($result, $result['contribution']->id);
}
return $result;
civicrm_api3('contribution', 'completetransaction', array(
'id' => $contributionID,
'trxn_id' => CRM_Utils_Array::value('trxn_id', $result),
- 'payment_processor_id' => $this->_paymentProcessor['id'],
+ 'payment_processor_id' => CRM_Utils_Array::value('payment_processor_id', $result, $this->_paymentProcessor['id']),
'is_transactional' => FALSE,
'fee_amount' => CRM_Utils_Array::value('fee_amount', $result),
'receive_date' => CRM_Utils_Array::value('receive_date', $result),