From 38d6b7b6152f307965104a5645e4070c663d7bcd Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Sun, 26 Nov 2023 09:47:33 +1300 Subject: [PATCH] Copy buildPremiumsBlock back to contribution page base --- CRM/Contribute/BAO/Premium.php | 3 + CRM/Contribute/Form/Contribution/Confirm.php | 2 +- CRM/Contribute/Form/Contribution/Main.php | 2 +- CRM/Contribute/Form/Contribution/ThankYou.php | 2 +- CRM/Contribute/Form/ContributionBase.php | 73 +++++++++++++++++++ 5 files changed, 79 insertions(+), 3 deletions(-) diff --git a/CRM/Contribute/BAO/Premium.php b/CRM/Contribute/BAO/Premium.php index 97f79c5536..3a84d7b945 100644 --- a/CRM/Contribute/BAO/Premium.php +++ b/CRM/Contribute/BAO/Premium.php @@ -73,6 +73,8 @@ class CRM_Contribute_BAO_Premium extends CRM_Contribute_DAO_Premium { /** * Build Premium Block im Contribution Pages. * + * @deprecated since 5.69 will be removed around 5.75 + * * @param CRM_Core_Form $form * @param int $pageID * @param bool $formItems @@ -80,6 +82,7 @@ class CRM_Contribute_BAO_Premium extends CRM_Contribute_DAO_Premium { * @param string $selectedOption */ public static function buildPremiumBlock(&$form, $pageID, $formItems = FALSE, $selectedProductID = NULL, $selectedOption = NULL) { + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); $form->add('hidden', "selectProduct", $selectedProductID, ['id' => 'selectProduct']); $premiumDao = new CRM_Contribute_DAO_Premium(); diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index 864a6ea927..f8cecbd82e 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -508,7 +508,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr if (!empty($params['selectProduct']) && $params['selectProduct'] !== 'no_thanks') { $option = $params['options_' . $params['selectProduct']] ?? NULL; $productID = $params['selectProduct']; - CRM_Contribute_BAO_Premium::buildPremiumBlock($this, $this->_id, FALSE, + $this->buildPremiumsBlock(FALSE, $productID, $option ); $this->set('productID', $productID); diff --git a/CRM/Contribute/Form/Contribution/Main.php b/CRM/Contribute/Form/Contribution/Main.php index a0ae222c76..b04c48b08b 100644 --- a/CRM/Contribute/Form/Contribution/Main.php +++ b/CRM/Contribute/Form/Contribution/Main.php @@ -375,7 +375,7 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu //we allow premium for pledge during pledge creation only. if (empty($this->_values['pledge_id']) && empty($this->_ccid)) { - CRM_Contribute_BAO_Premium::buildPremiumBlock($this, $this->_id, TRUE); + $this->buildPremiumsBlock(TRUE); } //don't build pledge block when mid is passed diff --git a/CRM/Contribute/Form/Contribution/ThankYou.php b/CRM/Contribute/Form/Contribution/ThankYou.php index 3e0232bb5a..65490ef892 100644 --- a/CRM/Contribute/Form/Contribution/ThankYou.php +++ b/CRM/Contribute/Form/Contribution/ThankYou.php @@ -92,7 +92,7 @@ class CRM_Contribute_Form_Contribution_ThankYou extends CRM_Contribute_Form_Cont $this->assign('receiptFromEmail', CRM_Utils_Array::value('receipt_from_email', $this->_values)); if ($productID) { - CRM_Contribute_BAO_Premium::buildPremiumBlock($this, $this->_id, FALSE, $productID, $option); + $this->buildPremiumsBlock(FALSE, $productID, $option); } $params = $this->_params; diff --git a/CRM/Contribute/Form/ContributionBase.php b/CRM/Contribute/Form/ContributionBase.php index f4652a3617..70269527e0 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -911,6 +911,79 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { $this->assign($name, $fields ?? NULL); } + /** + * Build Premium Block im Contribution Pages. + * + * @param bool $formItems + * @param int $selectedProductID + * @param string $selectedOption + */ + protected function buildPremiumsBlock($formItems = FALSE, $selectedProductID = NULL, $selectedOption = NULL) { + $this->add('hidden', "selectProduct", $selectedProductID, ['id' => 'selectProduct']); + + $premiumDao = new CRM_Contribute_DAO_Premium(); + $premiumDao->entity_table = 'civicrm_contribution_page'; + $premiumDao->entity_id = $this->getContributionPageID(); + $premiumDao->premiums_active = 1; + + if ($premiumDao->find(TRUE)) { + $premiumID = $premiumDao->id; + $premiumBlock = []; + CRM_Core_DAO::storeValues($premiumDao, $premiumBlock); + + CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, CRM_Core_Action::ADD); + $addWhere = "financial_type_id IN (0)"; + if (!empty($financialTypes)) { + $addWhere = "financial_type_id IN (" . implode(',', array_keys($financialTypes)) . ")"; + } + $addWhere = "{$addWhere} OR financial_type_id IS NULL"; + + $premiumsProductDao = new CRM_Contribute_DAO_PremiumsProduct(); + $premiumsProductDao->premiums_id = $premiumID; + $premiumsProductDao->whereAdd($addWhere); + $premiumsProductDao->orderBy('weight'); + $premiumsProductDao->find(); + + $products = []; + while ($premiumsProductDao->fetch()) { + $productDAO = new CRM_Contribute_DAO_Product(); + $productDAO->id = $premiumsProductDao->product_id; + $productDAO->is_active = 1; + if ($productDAO->find(TRUE)) { + if ($selectedProductID != NULL) { + if ($selectedProductID == $productDAO->id) { + if ($selectedOption) { + $productDAO->options = ts('Selected Option') . ': ' . $selectedOption; + } + else { + $productDAO->options = NULL; + } + CRM_Core_DAO::storeValues($productDAO, $products[$productDAO->id]); + } + } + else { + // Why? should we not skip if not found? + CRM_Core_DAO::storeValues($productDAO, $products[$productDAO->id]); + } + } + $options = $temp = []; + $temp = explode(',', $productDAO->options); + foreach ($temp as $value) { + $options[trim($value)] = trim($value); + } + if ($temp[0] != '') { + $this->addElement('select', 'options_' . $productDAO->id, NULL, $options); + } + } + if (count($products)) { + $this->assign('showPremium', $formItems); + $this->assign('showSelectOptions', $formItems); + $this->assign('premiumBlock', $premiumBlock); + } + } + $this->assign('products', $products ?? NULL); + } + /** * Assign payment field information to the template. * -- 2.25.1