From 261df36fad7ac189df446e818bdd1d792733fb92 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Mon, 10 Jul 2023 14:19:11 +1200 Subject: [PATCH] Clarify loading of PriceSetID --- CRM/Contribute/Form/Contribution/Main.php | 28 +++++++------------- CRM/Contribute/Form/ContributionBase.php | 32 ++++++++++++++++++++++- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/CRM/Contribute/Form/Contribution/Main.php b/CRM/Contribute/Form/Contribution/Main.php index b890f9f980..9cede8e5ea 100644 --- a/CRM/Contribute/Form/Contribution/Main.php +++ b/CRM/Contribute/Form/Contribution/Main.php @@ -1360,17 +1360,17 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu /** * Set form variables if contribution ID is found */ - public function assignFormVariablesByContributionID() { + public function assignFormVariablesByContributionID(): void { $dummyTitle = 0; foreach ($this->_paymentProcessors as $pp) { - if ($pp['class_name'] == 'Payment_Dummy') { + if ($pp['class_name'] === 'Payment_Dummy') { $dummyTitle = $pp['name']; break; } } $this->assign('dummyTitle', $dummyTitle); - if (empty($this->_ccid)) { + if (empty($this->getExistingContributionID())) { return; } if (!$this->getContactID()) { @@ -1391,22 +1391,12 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu $this->assign('taxAmount', $taxAmount); } - $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->_ccid); - foreach (array_keys($lineItems) as $id) { - $lineItems[$id]['id'] = $id; - } - $itemId = key($lineItems); - if ($itemId && !empty($lineItems[$itemId]['price_field_id'])) { - $this->_priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItems[$itemId]['price_field_id'], 'price_set_id'); - } - - if (!empty($lineItems[$itemId]['price_field_id'])) { - $this->_lineItem[$this->_priceSetId] = $lineItems; - } - $isQuickConfig = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_priceSetId, 'is_quick_config'); - $this->assign('lineItem', $this->_lineItem); - $this->assign('is_quick_config', $isQuickConfig); - $this->assign('priceSetID', $this->_priceSetId); + $lineItems = $this->getExistingContributionLineItems(); + // Is this used? + $this->_lineItem[$this->getPriceSetID()] = $lineItems; + $this->assign('lineItem', [$this->getPriceSetID() => $lineItems]); + $this->assign('is_quick_config', $this->isQuickConfig()); + $this->assign('priceSetID', $this->getPriceSetID()); } /** diff --git a/CRM/Contribute/Form/ContributionBase.php b/CRM/Contribute/Form/ContributionBase.php index 39afb969c4..4194e0cc92 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -251,12 +251,22 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { * Out of caution we still allow `get`, `set` to take precedence. * * @return int|null + * @throws \CRM_Core_Exception */ public function getPriceSetID(): ?int { if ($this->_priceSetId === NULL) { if ($this->get('priceSetId')) { $this->_priceSetId = $this->get('priceSetId'); } + elseif ($this->getExistingContributionID()) { + $lineItems = $this->getExistingContributionLineItems(); + $firstLineItem = reset($lineItems); + // If this IF is not true the contribution is messed up! Hopefully this + // could never happen. + if ($firstLineItem && !empty($firstLineItem['price_field_id'])) { + $this->_priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $firstLineItem['price_field_id'], 'price_set_id'); + } + } else { $this->_priceSetId = CRM_Price_BAO_PriceSet::getFor('civicrm_contribution_page', $this->_id); } @@ -384,7 +394,7 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { // check for is_monetary status $isPayLater = $this->_values['is_pay_later'] ?? NULL; - if (!empty($this->_ccid)) { + if ($this->getExistingContributionID()) { $this->_values['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $this->_ccid, 'financial_type_id' @@ -1369,4 +1379,24 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { return $this->renewalMembershipID ?: FALSE; } + /** + * Get the id of an existing contribution the submitter is attempting to pay. + * + * @return int|null + */ + protected function getExistingContributionID(): ?int { + return $this->_ccid ?: CRM_Utils_Request::retrieve('ccid', 'Positive', $this); + } + + /** + * @return array + */ + protected function getExistingContributionLineItems(): array { + $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->getExistingContributionID()); + foreach (array_keys($lineItems) as $id) { + $lineItems[$id]['id'] = $id; + } + return $lineItems; + } + } -- 2.25.1