From 474ebab90a5a521ec314b11d18f25804dc0e24eb Mon Sep 17 00:00:00 2001 From: eileenmcnaughton Date: Wed, 29 Jul 2015 08:56:50 +0000 Subject: [PATCH] CRM-16923 fix for error on unreliable 'guess' method --- CRM/Contribute/BAO/Contribution.php | 78 ++++++++++++++++------------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index c03ad18d81..2e7d984c6c 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -2080,7 +2080,30 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $this->_component = strtolower(CRM_Utils_Array::value('component', $input, 'contribute')); } } - $paymentProcessorID = CRM_Utils_Array::value('paymentProcessor', $ids); + + $paymentProcessorID = CRM_Utils_Array::value('payment_processor_id', $input, CRM_Utils_Array::value( + 'paymentProcessor', + $ids + )); + + if (!$paymentProcessorID && $this->contribution_page_id) { + $paymentProcessorID = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionPage', + $this->contribution_page_id, + 'payment_processor' + ); + $intentionalEnotice = $CRM16923AnUnreliableMethodHasBeenUserToDeterminePaymentProcessorFromContributionPage; + } + + if (!empty($ids['contributionRecur'])) { + $recur = new CRM_Contribute_BAO_ContributionRecur(); + $recur->id = $ids['contributionRecur']; + if (!$recur->find(TRUE)) { + throw new Exception("Could not find recur record: " . $ids['contributionRecur']); + } + $this->_relatedObjects['contributionRecur'] = $recur; + $paymentProcessorID = $recur->payment_processor_id; + } + $contributionType = new CRM_Financial_BAO_FinancialType(); $contributionType->id = $this->financial_type_id; $contributionType->find(TRUE); @@ -2092,6 +2115,20 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac } $this->_relatedObjects['contributionType'] = $contributionType; + if (!empty($ids['pledge_payment'])) { + foreach ($ids['pledge_payment'] as $key => $paymentID) { + if (empty($paymentID)) { + continue; + } + $payment = new CRM_Pledge_BAO_PledgePayment(); + $payment->id = $paymentID; + if (!$payment->find(TRUE)) { + throw new Exception("Could not find pledge payment record: " . $paymentID); + } + $this->_relatedObjects['pledge_payment'][] = $payment; + } + } + if ($this->_component == 'contribute') { // retrieve the other optional objects first so // stuff down the line can use this info and do things @@ -2132,42 +2169,10 @@ WHERE contribution_id = %1 "; } } - if (!empty($ids['pledge_payment'])) { - - foreach ($ids['pledge_payment'] as $key => $paymentID) { - if (empty($paymentID)) { - continue; - } - $payment = new CRM_Pledge_BAO_PledgePayment(); - $payment->id = $paymentID; - if (!$payment->find(TRUE)) { - throw new Exception("Could not find pledge payment record: " . $paymentID); - } - $this->_relatedObjects['pledge_payment'][] = $payment; - } - } - - if (!empty($ids['contributionRecur'])) { - $recur = new CRM_Contribute_BAO_ContributionRecur(); - $recur->id = $ids['contributionRecur']; - if (!$recur->find(TRUE)) { - throw new Exception("Could not find recur record: " . $ids['contributionRecur']); - } - $this->_relatedObjects['contributionRecur'] = &$recur; - //get payment processor id from recur object. - $paymentProcessorID = $recur->payment_processor_id; - } - //for normal contribution get the payment processor id. if (!$paymentProcessorID) { - if ($this->contribution_page_id) { - // get the payment processor id from contribution page - $paymentProcessorID = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionPage', - $this->contribution_page_id, - 'payment_processor' - ); - } //fail to load payment processor id. - elseif (empty($ids['pledge_payment'])) { + // this seems a bit dubious.... + if (empty($ids['pledge_payment'])) { $loadObjectSuccess = TRUE; if ($required) { throw new Exception("Could not find contribution page for contribution record: " . $this->id); @@ -2200,8 +2205,11 @@ WHERE contribution_id = %1 "; $this->_relatedObjects['participant'] = &$participant; + // get the payment processor id from event - this is inaccurate see CRM-16923 + // in future we should look at throwing an exception here rather than an dubious guess. if (!$paymentProcessorID) { $paymentProcessorID = $this->_relatedObjects['event']->payment_processor; + $intentionalEnotice = $CRM16923AnUnreliableMethodHasBeenUserToDeterminePaymentProcessorFromEvent; } } -- 2.25.1