3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
19 * form to process actions fo adding product to contribution page
21 class CRM_Contribute_Form_ContributionPage_AddProduct
extends CRM_Contribute_Form_ContributionPage
{
28 * Pre process the form.
30 public function preProcess() {
33 $this->_products
= CRM_Contribute_PseudoConstant
::products($this->_id
);
34 $this->_pid
= CRM_Utils_Request
::retrieve('pid', 'Positive',
39 $dao = new CRM_Contribute_DAO_PremiumsProduct();
40 $dao->id
= $this->_pid
;
42 $temp = CRM_Contribute_PseudoConstant
::products();
43 $this->_products
[$dao->product_id
] = $temp[$dao->product_id
];
46 //$this->_products = array_merge(array('' => '-- Select Product --') , $this->_products );
50 * Set default values for the form.
52 * Note that in edit/view mode the default values are retrieved from the database.
54 public function setDefaultValues() {
58 $dao = new CRM_Contribute_DAO_PremiumsProduct();
59 $dao->id
= $this->_pid
;
61 $defaults['product_id'] = $dao->product_id
;
62 $defaults['financial_type_id'] = $dao->financial_type_id
;
63 $defaults['weight'] = $dao->weight
;
66 $dao = new CRM_Contribute_DAO_Product();
67 $dao->id
= key($this->_products
);
69 $defaults['financial_type_id'] = $dao->financial_type_id
;
71 if (!isset($defaults['weight']) ||
!($defaults['weight'])) {
72 $pageID = CRM_Utils_Request
::retrieve('id', 'Positive',
75 $dao = new CRM_Contribute_DAO_Premium();
76 $dao->entity_table
= 'civicrm_contribution_page';
77 $dao->entity_id
= $pageID;
79 $premiumID = $dao->id
;
81 $sql = 'SELECT max( weight ) as max_weight FROM civicrm_premiums_product WHERE premiums_id = %1';
82 $params = [1 => [$premiumID, 'Integer']];
83 $dao = CRM_Core_DAO
::executeQuery($sql, $params);
85 $defaults['weight'] = $dao->max_weight +
1;
91 * Build the form object.
93 public function buildQuickForm() {
94 $urlParams = 'civicrm/admin/contribute/premium';
95 if ($this->_action
& CRM_Core_Action
::DELETE
) {
96 $session = CRM_Core_Session
::singleton();
97 $url = CRM_Utils_System
::url($urlParams, 'reset=1&action=update&id=' . $this->_id
);
98 $session->pushUserContext($url);
99 if (CRM_Utils_Request
::retrieve('confirmed', 'Boolean',
100 CRM_Core_DAO
::$_nullObject, '', '', 'GET'
103 $dao = new CRM_Contribute_DAO_PremiumsProduct();
104 $dao->id
= $this->_pid
;
106 CRM_Core_Session
::setStatus(ts('Selected Premium Product has been removed from this Contribution Page.'), ts('Saved'), 'success');
107 CRM_Utils_System
::redirect($url);
113 'name' => ts('Delete'),
114 'spacing' => ' ',
119 'name' => ts('Cancel'),
125 if ($this->_action
& CRM_Core_Action
::PREVIEW
) {
126 $dao = new CRM_Contribute_DAO_PremiumsProduct();
127 $dao->id
= $this->_pid
;
129 $productID = $dao->product_id
;
131 CRM_Contribute_BAO_Premium
::buildPremiumPreviewBlock($this, $productID);
135 'name' => ts('Done with Preview'),
142 $session = CRM_Core_Session
::singleton();
143 $url = CRM_Utils_System
::url($urlParams, 'reset=1&action=update&id=' . $this->_id
);
144 $session->pushUserContext($url);
146 $this->add('select', 'product_id', ts('Select the Product') . ' ', $this->_products
, TRUE);
148 $this->addElement('text', 'weight', ts('Order'), CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_PremiumsProduct', 'weight'));
150 $financialType = CRM_Contribute_PseudoConstant
::financialType();
151 $premiumFinancialType = [];
152 CRM_Core_PseudoConstant
::populate(
153 $premiumFinancialType,
154 'CRM_Financial_DAO_EntityFinancialAccount',
156 $retrieve = 'entity_id',
158 'account_relationship = 8'
161 $costFinancialType = [];
162 CRM_Core_PseudoConstant
::populate(
164 'CRM_Financial_DAO_EntityFinancialAccount',
166 $retrieve = 'entity_id',
168 'account_relationship = 7'
170 $productFinancialType = array_intersect($costFinancialType, $premiumFinancialType);
171 foreach ($financialType as $key => $financialTypeName) {
172 if (!in_array($key, $productFinancialType)) {
173 unset($financialType[$key]);
176 // Check permissioned financial types
177 CRM_Financial_BAO_FinancialType
::getAvailableFinancialTypes($financialType, CRM_Core_Action
::ADD
);
178 if (count($financialType)) {
179 $this->assign('financialType', $financialType);
184 ts('Financial Type'),
185 ['' => ts('- select -')] +
$financialType
187 $this->addRule('weight', ts('Please enter integer value for weight'), 'integer');
188 $session->pushUserContext(CRM_Utils_System
::url($urlParams, 'action=update&reset=1&id=' . $this->_id
));
190 if ($this->_single
) {
194 'name' => ts('Save'),
195 'spacing' => ' ',
200 'name' => ts('Cancel'),
205 parent
::buildQuickForm();
212 public function postProcess() {
213 // get the submitted form values.
214 $params = $this->controller
->exportValues($this->_name
);
216 $urlParams = 'civicrm/admin/contribute/premium';
217 if ($this->_action
& CRM_Core_Action
::PREVIEW
) {
218 $url = CRM_Utils_System
::url($urlParams, 'reset=1&action=update&id=' . $this->_id
);
219 CRM_Utils_System
::redirect($url);
223 if ($this->_action
& CRM_Core_Action
::DELETE
) {
224 $url = CRM_Utils_System
::url($urlParams, 'reset=1&action=update&id=' . $this->_id
);
225 $dao = new CRM_Contribute_DAO_PremiumsProduct();
226 $dao->id
= $this->_pid
;
228 CRM_Core_Session
::setStatus(ts('Selected Premium Product has been removed from this Contribution Page.'), ts('Saved'), 'success');
229 CRM_Utils_System
::redirect($url);
232 $url = CRM_Utils_System
::url($urlParams, 'reset=1&action=update&id=' . $this->_id
);
234 $params['id'] = $this->_pid
;
236 $dao = new CRM_Contribute_DAO_Premium();
237 $dao->entity_table
= 'civicrm_contribution_page';
238 $dao->entity_id
= $this->_id
;
240 $premiumID = $dao->id
;
241 $params['premiums_id'] = $premiumID;
245 $oldWeight = CRM_Core_DAO
::getFieldValue('CRM_Contribute_DAO_PremiumsProduct', $this->_pid
, 'weight', 'id');
248 // updateOtherWeights needs to filter on premiums_id
249 $filter = ['premiums_id' => $params['premiums_id']];
250 $params['weight'] = CRM_Utils_Weight
::updateOtherWeights('CRM_Contribute_DAO_PremiumsProduct', $oldWeight, $params['weight'], $filter);
252 $dao = new CRM_Contribute_DAO_PremiumsProduct();
253 $dao->copyValues($params);
255 CRM_Utils_System
::redirect($url);
260 * Return a descriptive name for the page, used in wizard header
264 public function getTitle() {
265 return ts('Add Premium to Contribution Page');