3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2015 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2015
37 * form to process actions on the group aspect of Custom Data
39 class CRM_Contribute_Form_ContributionPage_Amount
extends CRM_Contribute_Form_ContributionPage
{
42 * Contribution amount block.
46 protected $_amountBlock = array();
49 * Constants for number of options for data types of multiple option.
51 const NUM_OPTION
= 11;
54 * Build the form object.
58 public function buildQuickForm() {
60 // do u want to allow a free form text field for amount
61 $this->addElement('checkbox', 'is_allow_other_amount', ts('Allow other amounts'), NULL, array('onclick' => "minMax(this);showHideAmountBlock( this, 'is_allow_other_amount' );"));
62 $this->add('text', 'min_amount', ts('Minimum Amount'), array('size' => 8, 'maxlength' => 8));
63 $this->addRule('min_amount', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money
::format('9.99', ' '))), 'money');
65 $this->add('text', 'max_amount', ts('Maximum Amount'), array('size' => 8, 'maxlength' => 8));
66 $this->addRule('max_amount', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money
::format('99.99', ' '))), 'money');
69 $this->add('text', 'amount_label', ts('Contribution Amounts Label'));
71 $default = array($this->createElement('radio', NULL, NULL, NULL, 0));
72 $this->add('hidden', "price_field_id", '', array('id' => "price_field_id"));
73 $this->add('hidden', "price_field_other", '', array('id' => "price_field_option"));
74 for ($i = 1; $i <= self
::NUM_OPTION
; $i++
) {
76 $this->add('text', "label[$i]", ts('Label'), CRM_Core_DAO
::getAttribute('CRM_Core_DAO_OptionValue', 'label'));
78 $this->add('hidden', "price_field_value[$i]", '', array('id' => "price_field_value[$i]"));
81 $this->add('text', "value[$i]", ts('Value'), CRM_Core_DAO
::getAttribute('CRM_Core_DAO_OptionValue', 'value'));
82 $this->addRule("value[$i]", ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money
::format('99.99', ' '))), 'money');
85 $default[] = $this->createElement('radio', NULL, NULL, NULL, $i);
88 $this->addGroup($default, 'default');
90 $this->addElement('checkbox', 'amount_block_is_active', ts('Contribution Amounts section enabled'), NULL, array('onclick' => "showHideAmountBlock( this, 'amount_block_is_active' );"));
92 $this->addElement('checkbox', 'is_monetary', ts('Execute real-time monetary transactions'));
94 $paymentProcessor = CRM_Core_PseudoConstant
::paymentProcessor();
95 $recurringPaymentProcessor = array();
97 if (!empty($paymentProcessor)) {
98 $paymentProcessorIds = implode(',', array_keys($paymentProcessor));
101 FROM civicrm_payment_processor
102 WHERE id IN ({$paymentProcessorIds})
104 $dao = CRM_Core_DAO
::executeQuery($query);
105 while ($dao->fetch()) {
106 $recurringPaymentProcessor[] = $dao->id
;
109 $this->assign('recurringPaymentProcessor', $recurringPaymentProcessor);
110 if (count($paymentProcessor)) {
111 $this->assign('paymentProcessor', $paymentProcessor);
114 $this->addCheckBox('payment_processor', ts('Payment Processor'),
115 array_flip($paymentProcessor),
116 NULL, NULL, NULL, NULL,
117 array(' ', ' ', ' ', '<br/>')
120 //check if selected payment processor supports recurring payment
121 if (!empty($recurringPaymentProcessor)) {
122 $this->addElement('checkbox', 'is_recur', ts('Recurring Contributions'), NULL,
123 array('onclick' => "showHideByValue('is_recur',true,'recurFields','table-row','radio',false);")
125 $this->addCheckBox('recur_frequency_unit', ts('Supported recurring units'),
126 CRM_Core_OptionGroup
::values('recur_frequency_units', FALSE, FALSE, TRUE),
127 NULL, NULL, NULL, NULL,
128 array(' ', ' ', ' ', '<br/>'), TRUE
130 $this->addElement('checkbox', 'is_recur_interval', ts('Support recurring intervals'));
131 $this->addElement('checkbox', 'is_recur_installments', ts('Offer installments'));
134 // add pay later options
135 $this->addElement('checkbox', 'is_pay_later', ts('Pay later option'), NULL);
136 $this->addElement('textarea', 'pay_later_text', ts('Pay later label'),
137 CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_ContributionPage', 'pay_later_text'),
140 $this->add('wysiwyg', 'pay_later_receipt', ts('Pay Later Instructions'), CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_ContributionPage', 'pay_later_receipt'));
141 $this->addElement('checkbox', 'is_billing_required', ts('Billing address required'));
143 //add partial payment options
145 // add price set fields
146 $price = CRM_Price_BAO_PriceSet
::getAssoc(FALSE, 'CiviContribute');
147 if (CRM_Utils_System
::isNull($price)) {
148 $this->assign('price', FALSE);
151 $this->assign('price', TRUE);
153 $this->add('select', 'price_set_id', ts('Price Set'),
155 '' => ts('- none -'),
157 NULL, array('onchange' => "showHideAmountBlock( this.value, 'price_set_id' );")
160 $config = CRM_Core_Config
::singleton();
161 if (in_array('CiviPledge', $config->enableComponents
)) {
162 $this->assign('civiPledge', TRUE);
163 $this->addElement('checkbox', 'is_pledge_active', ts('Pledges'),
164 NULL, array('onclick' => "showHideAmountBlock( this, 'is_pledge_active' ); return showHideByValue('is_pledge_active',true,'pledgeFields','table-row','radio',false);")
166 $this->addCheckBox('pledge_frequency_unit', ts('Supported pledge frequencies'),
167 CRM_Core_OptionGroup
::values('recur_frequency_units', FALSE, FALSE, TRUE),
168 NULL, NULL, NULL, NULL,
169 array(' ', ' ', ' ', '<br/>'), TRUE
171 $this->addElement('checkbox', 'is_pledge_interval', ts('Allow frequency intervals'));
172 $this->addElement('text', 'initial_reminder_day', ts('Send payment reminder'), array('size' => 3));
173 $this->addElement('text', 'max_reminders', ts('Send up to'), array('size' => 3));
174 $this->addElement('text', 'additional_reminder_day', ts('Send additional reminders'), array('size' => 3));
177 //add currency element.
178 $this->addCurrency('currency', ts('Currency'));
180 $this->addFormRule(array('CRM_Contribute_Form_ContributionPage_Amount', 'formRule'), $this);
182 parent
::buildQuickForm();
186 * Set default values for the form. Note that in edit/view mode
187 * the default values are retrieved from the database
192 public function setDefaultValues() {
193 $defaults = parent
::setDefaultValues();
194 $title = CRM_Core_DAO
::getFieldValue('CRM_Contribute_DAO_ContributionPage', $this->_id
, 'title');
195 CRM_Utils_System
::setTitle(ts('Contribution Amounts') . " ($title)");
197 if (empty($defaults['pay_later_text'])) {
198 $defaults['pay_later_text'] = ts('I will send payment by check');
201 if (!empty($defaults['amount_block_is_active'])) {
203 if ($priceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, NULL)) {
204 if ($isQuick = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceSet', $priceSetId, 'is_quick_config')) {
205 $this->assign('isQuick', $isQuick);
206 //$priceField = CRM_Core_DAO::getFieldValue( 'CRM_Price_DAO_PriceField', $priceSetId, 'id', 'price_set_id' );
207 $options = $pFIDs = array();
208 $priceFieldParams = array('price_set_id' => $priceSetId);
209 $priceFields = CRM_Core_DAO
::commonRetrieveAll('CRM_Price_DAO_PriceField', 'price_set_id', $priceSetId, $pFIDs, $return = array(
215 foreach ($priceFields as $priceField) {
216 if ($priceField['id'] && $priceField['html_type'] == 'Radio' && $priceField['name'] == 'contribution_amount') {
217 $defaults['price_field_id'] = $priceField['id'];
218 $priceFieldOptions = CRM_Price_BAO_PriceFieldValue
::getValues($priceField['id'], $options, 'id', 1);
219 if (empty($priceFieldOptions)) {
223 $defaults['amount_label'] = $priceField['label'];
224 foreach ($options as $optionId => $optionValue) {
226 $defaults['value'][$countRow] = $optionValue['amount'];
227 $defaults['label'][$countRow] = CRM_Utils_Array
::value('label', $optionValue);
228 $defaults['name'][$countRow] = CRM_Utils_Array
::value('name', $optionValue);
229 $defaults['weight'][$countRow] = $optionValue['weight'];
231 $defaults["price_field_value"][$countRow] = $optionValue['id'];
232 if ($optionValue['is_default']) {
233 $defaults['default'] = $countRow;
237 elseif ($priceField['id'] && $priceField['html_type'] == 'Text' && $priceField['name'] = 'other_amount' && $priceField['is_active']) {
238 $defaults['price_field_other'] = $priceField['id'];
239 if (!isset($defaults['amount_label'])) {
240 $defaults['amount_label'] = $priceField['label'];
247 if (empty($defaults['amount_label'])) {
248 $defaults['amount_label'] = ts('Contribution Amount');
251 if (!empty($defaults['value']) && is_array($defaults['value'])) {
253 // CRM-4038: fix value display
254 foreach ($defaults['value'] as & $amount) {
255 $amount = trim(CRM_Utils_Money
::format($amount, ' '));
260 // fix the display of the monetary value, CRM-4038
261 if (isset($defaults['min_amount'])) {
262 $defaults['min_amount'] = CRM_Utils_Money
::format($defaults['min_amount'], NULL, '%a');
264 if (isset($defaults['max_amount'])) {
265 $defaults['max_amount'] = CRM_Utils_Money
::format($defaults['max_amount'], NULL, '%a');
268 if (!empty($defaults['payment_processor'])) {
269 $defaults['payment_processor'] = array_fill_keys(explode(CRM_Core_DAO
::VALUE_SEPARATOR
,
270 $defaults['payment_processor']
279 * @param array $fields
280 * The input form values.
281 * @param array $files
282 * The uploaded files if any.
287 * true if no errors, else array of errors
289 public static function formRule($fields, $files, $self) {
291 //as for separate membership payment we has to have
292 //contribution amount section enabled, hence to disable it need to
293 //check if separate membership payment enabled,
294 //if so disable first separate membership payment option
295 //then disable contribution amount section. CRM-3801,
297 $membershipBlock = new CRM_Member_DAO_MembershipBlock();
298 $membershipBlock->entity_table
= 'civicrm_contribution_page';
299 $membershipBlock->entity_id
= $self->_id
;
300 $membershipBlock->is_active
= 1;
301 $hasMembershipBlk = FALSE;
302 if ($membershipBlock->find(TRUE)) {
303 if (!empty($fields['amount_block_is_active']) &&
304 ($setID = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $self->_id
, NULL, 1))
306 $extends = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'extends');
307 if ($extends && $extends == CRM_Core_Component
::getComponentID('CiviMember')) {
308 $errors['amount_block_is_active'] = ts('You cannot use a Membership Price Set when the Contribution Amounts section is enabled. Click the Memberships tab above, and select your Membership Price Set on that form. Membership Price Sets may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription) or an additional voluntary contribution.');
312 $hasMembershipBlk = TRUE;
313 if ($membershipBlock->is_separate_payment
&& empty($fields['amount_block_is_active'])) {
314 $errors['amount_block_is_active'] = ts('To disable Contribution Amounts section you need to first disable Separate Membership Payment option from Membership Settings.');
318 //check for the amount label (mandatory)
319 if (!empty($fields['amount_block_is_active']) && empty($fields['amount_label'])) {
320 $errors['amount_label'] = ts('Please enter the contribution amount label.');
322 $minAmount = CRM_Utils_Array
::value('min_amount', $fields);
323 $maxAmount = CRM_Utils_Array
::value('max_amount', $fields);
324 if (!empty($minAmount) && !empty($maxAmount)) {
325 $minAmount = CRM_Utils_Rule
::cleanMoney($minAmount);
326 $maxAmount = CRM_Utils_Rule
::cleanMoney($maxAmount);
327 if ((float ) $minAmount > (float ) $maxAmount) {
328 $errors['min_amount'] = ts('Minimum Amount should be less than Maximum Amount');
332 if (isset($fields['is_pay_later'])) {
333 if (empty($fields['pay_later_text'])) {
334 $errors['pay_later_text'] = ts('Please enter the text for the \'pay later\' checkbox displayed on the contribution form.');
336 if (empty($fields['pay_later_receipt'])) {
337 $errors['pay_later_receipt'] = ts('Please enter the instructions to be sent to the contributor when they choose to \'pay later\'.');
341 // don't allow price set w/ membership signup, CRM-5095
342 if ($priceSetId = CRM_Utils_Array
::value('price_set_id', $fields)) {
343 // don't allow price set w/ membership.
344 if ($hasMembershipBlk) {
345 $errors['price_set_id'] = ts('You cannot enable both a Contribution Price Set and Membership Signup on the same online contribution page.');
349 if (isset($fields['is_recur'])) {
350 if (empty($fields['recur_frequency_unit'])) {
351 $errors['recur_frequency_unit'] = ts('At least one recurring frequency option needs to be checked.');
355 // validation for pledge fields.
356 if (!empty($fields['is_pledge_active'])) {
357 if (empty($fields['pledge_frequency_unit'])) {
358 $errors['pledge_frequency_unit'] = ts('At least one pledge frequency option needs to be checked.');
360 if (!empty($fields['is_recur'])) {
361 $errors['is_recur'] = ts('You cannot enable both Recurring Contributions AND Pledges on the same online contribution page.');
365 // If Contribution amount section is enabled, then
366 // Allow other amounts must be enabled OR the Fixed Contribution
367 // Contribution options must contain at least one set of values.
368 if (!empty($fields['amount_block_is_active'])) {
369 if (empty($fields['is_allow_other_amount']) &&
372 //get the values of amount block
373 $values = CRM_Utils_Array
::value('value', $fields);
375 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
376 if ((isset($values[$i]) && (strlen(trim($values[$i])) > 0))) {
381 $errors['amount_block_is_active'] = ts('If you want to enable the \'Contribution Amounts section\', you need to either \'Allow Other Amounts\' and/or enter at least one row in the \'Fixed Contribution Amounts\' table.');
387 if (!empty($fields['payment_processor']) && $financialType = CRM_Contribute_BAO_Contribution
::validateFinancialType($self->_defaultValues
['financial_type_id'])) {
388 $errors['payment_processor'] = ts("Financial Account of account relationship of 'Expense Account is' is not configured for Financial Type : ") . $financialType;
391 if (!empty($fields['is_recur_interval'])) {
392 foreach (array_keys($fields['payment_processor']) as $paymentProcessorID) {
393 $paymentProcessorTypeId = CRM_Core_DAO
::getFieldValue(
394 'CRM_Financial_DAO_PaymentProcessor',
396 'payment_processor_type_id'
398 $paymentProcessorType = CRM_Core_PseudoConstant
::paymentProcessorType(FALSE, $paymentProcessorTypeId, 'name');
399 if ($paymentProcessorType == 'Google_Checkout') {
400 $errors['is_recur_interval'] = ts('Google Checkout does not support recurring intervals');
414 public function postProcess() {
415 // get the submitted form values.
416 $params = $this->controller
->exportValues($this->_name
);
418 //update 'is_billing_required'
419 if (empty($params['is_pay_later'])) {
420 $params['is_billing_required'] = 0;
423 if (array_key_exists('payment_processor', $params)) {
424 if (array_key_exists(CRM_Core_DAO
::getFieldValue('CRM_Financial_DAO_PaymentProcessor', 'AuthNet',
425 'id', 'payment_processor_type_id'
427 CRM_Utils_Array
::value('payment_processor', $params)
429 CRM_Core_Session
::setStatus(ts(' Please note that the Authorize.net payment processor only allows recurring contributions and auto-renew memberships with payment intervals from 7-365 days or 1-12 months (i.e. not greater than 1 year).'), '', 'alert');
433 // check for price set.
434 $priceSetID = CRM_Utils_Array
::value('price_set_id', $params);
436 // get required fields.
440 'min_amount' => "null",
441 'max_amount' => "null",
442 'is_monetary' => FALSE,
443 'is_pay_later' => FALSE,
444 'is_billing_required' => FALSE,
445 'is_recur_interval' => FALSE,
446 'is_recur_installments' => FALSE,
447 'recur_frequency_unit' => "null",
448 'default_amount_id' => "null",
449 'is_allow_other_amount' => FALSE,
450 'amount_block_is_active' => FALSE,
452 $resetFields = array();
454 $resetFields = array('min_amount', 'max_amount', 'is_allow_other_amount');
457 if (empty($params['is_recur'])) {
458 $resetFields = array_merge($resetFields, array('is_recur_interval', 'recur_frequency_unit'));
461 foreach ($fields as $field => $defaultVal) {
462 $val = CRM_Utils_Array
::value($field, $params, $defaultVal);
463 if (in_array($field, $resetFields)) {
467 if (in_array($field, array(
471 $val = CRM_Utils_Rule
::cleanMoney($val);
474 $params[$field] = $val;
477 if ($params['is_recur']) {
478 $params['recur_frequency_unit'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
,
479 array_keys($params['recur_frequency_unit'])
481 $params['is_recur_interval'] = CRM_Utils_Array
::value('is_recur_interval', $params, FALSE);
482 $params['is_recur_installments'] = CRM_Utils_Array
::value('is_recur_installments', $params, FALSE);
485 if (array_key_exists('payment_processor', $params) &&
486 !CRM_Utils_System
::isNull($params['payment_processor'])
488 $params['payment_processor'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
, array_keys($params['payment_processor']));
491 $params['payment_processor'] = 'null';
494 $contributionPage = CRM_Contribute_BAO_ContributionPage
::create($params);
495 $contributionPageID = $contributionPage->id
;
497 // prepare for data cleanup.
498 $deleteAmountBlk = $deletePledgeBlk = $deletePriceSet = FALSE;
499 if ($this->_priceSetID
) {
500 $deletePriceSet = TRUE;
502 if ($this->_pledgeBlockID
) {
503 $deletePledgeBlk = TRUE;
505 if (!empty($this->_amountBlock
)) {
506 $deleteAmountBlk = TRUE;
509 if ($contributionPageID) {
511 if (!empty($params['amount_block_is_active'])) {
514 // add/update price set.
515 $deletePriceSet = FALSE;
516 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
517 $deleteAmountBlk = TRUE;
520 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $contributionPageID, $priceSetID);
524 $deletePriceSet = FALSE;
525 // process contribution amount block
526 $deleteAmountBlk = FALSE;
528 $labels = CRM_Utils_Array
::value('label', $params);
529 $values = CRM_Utils_Array
::value('value', $params);
530 $default = CRM_Utils_Array
::value('default', $params);
533 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
534 if (isset($values[$i]) &&
535 (strlen(trim($values[$i])) > 0)
538 'label' => trim($labels[$i]),
539 'value' => CRM_Utils_Rule
::cleanMoney(trim($values[$i])),
542 'is_default' => $default == $i,
546 /* || !empty($params['price_field_value']) || CRM_Utils_Array::value( 'price_field_other', $params )*/
547 if (!empty($options) ||
!empty($params['is_allow_other_amount'])) {
548 $fieldParams['is_quick_config'] = 1;
549 $noContriAmount = NULL;
550 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
551 if (!(!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) && !$usedPriceSetId) {
552 $pageTitle = strtolower(CRM_Utils_String
::munge($this->_values
['title'], '_', 245));
553 $setParams['title'] = $this->_values
['title'];
554 if (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle, 'id', 'name')) {
555 $setParams['name'] = $pageTitle;
557 elseif (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle . '_' . $this->_id
, 'id', 'name')) {
558 $setParams['name'] = $pageTitle . '_' . $this->_id
;
561 $timeSec = explode(".", microtime(TRUE));
562 $setParams['name'] = $pageTitle . '_' . date('is', $timeSec[0]) . $timeSec[1];
564 $setParams['is_quick_config'] = 1;
565 $setParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
566 $setParams['extends'] = CRM_Core_Component
::getComponentID('CiviContribute');
567 $priceSet = CRM_Price_BAO_PriceSet
::create($setParams);
568 $priceSetId = $priceSet->id
;
570 elseif ($usedPriceSetId && empty($params['price_field_id'])) {
571 $priceSetId = $usedPriceSetId;
574 if ($priceFieldId = CRM_Utils_Array
::value('price_field_id', $params)) {
575 foreach ($params['price_field_value'] as $arrayID => $fieldValueID) {
576 if (empty($params['label'][$arrayID]) && empty($params['value'][$arrayID]) && !empty($fieldValueID)) {
577 CRM_Price_BAO_PriceFieldValue
::setIsActive($fieldValueID, '0');
578 unset($params['price_field_value'][$arrayID]);
581 if (implode('', $params['price_field_value'])) {
582 $fieldParams['id'] = CRM_Utils_Array
::value('price_field_id', $params);
583 $fieldParams['option_id'] = $params['price_field_value'];
587 CRM_Price_BAO_PriceField
::setIsActive($priceFieldId, '0');
591 $priceFieldId = CRM_Utils_Array
::value('price_field_other', $params);
593 $priceSetId = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceFieldId, 'price_set_id');
595 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $this->_id
, $priceSetId);
596 if (!empty($options)) {
597 $editedFieldParams = array(
598 'price_set_id' => $priceSetId,
599 'name' => 'contribution_amount',
601 $editedResults = array();
603 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
604 if (empty($editedResults['id'])) {
605 $fieldParams['name'] = strtolower(CRM_Utils_String
::munge("Contribution Amount", '_', 245));
608 $fieldParams['id'] = CRM_Utils_Array
::value('id', $editedResults);
611 $fieldParams['price_set_id'] = $priceSetId;
612 $fieldParams['is_active'] = 1;
613 $fieldParams['weight'] = 2;
615 if (!empty($params['is_allow_other_amount'])) {
616 $fieldParams['is_required'] = 0;
619 $fieldParams['is_required'] = 1;
621 $fieldParams['label'] = $params['amount_label'];
622 $fieldParams['html_type'] = 'Radio';
623 $fieldParams['option_label'] = $params['label'];
624 $fieldParams['option_amount'] = $params['value'];
625 $fieldParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
626 foreach ($options as $value) {
627 $fieldParams['option_weight'][$value['weight']] = $value['weight'];
629 $fieldParams['default_option'] = $params['default'];
630 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
632 if (!empty($params['is_allow_other_amount']) && empty($params['price_field_other'])) {
633 $editedFieldParams = array(
634 'price_set_id' => $priceSetId,
635 'name' => 'other_amount',
637 $editedResults = array();
639 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
641 if (!$priceFieldID = CRM_Utils_Array
::value('id', $editedResults)) {
642 $fieldParams = array(
643 'name' => 'other_amount',
644 'label' => 'Other Amount',
645 'price_set_id' => $priceSetId,
646 'html_type' => 'Text',
647 'financial_type_id' => CRM_Utils_Array
::value('financial_type_id', $this->_values
),
648 'is_display_amounts' => 0,
651 $fieldParams['option_weight'][1] = 1;
652 $fieldParams['option_amount'][1] = 1;
653 if (!$noContriAmount) {
654 $fieldParams['is_required'] = 1;
655 $fieldParams['option_label'][1] = $fieldParams['label'] = $params['amount_label'];
658 $fieldParams['is_required'] = 0;
659 $fieldParams['option_label'][1] = $fieldParams['label'] = 'Other Amount';
662 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
665 if (empty($editedResults['is_active'])) {
666 $fieldParams = $editedResults;
667 if (!$noContriAmount) {
668 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
669 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
670 $fieldParams = array(
672 'label' => $params['amount_label'],
673 'id' => $priceFieldID,
676 $fieldParams['is_active'] = 1;
677 $priceField = CRM_Price_BAO_PriceField
::add($fieldParams);
681 elseif (empty($params['is_allow_other_amount']) && !empty($params['price_field_other'])) {
682 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
684 elseif ($priceFieldID = CRM_Utils_Array
::value('price_field_other', $params)) {
685 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
686 if (!$noContriAmount) {
687 $fieldParams = array(
689 'label' => $params['amount_label'],
690 'id' => $priceFieldID,
692 CRM_Price_BAO_PriceField
::add($fieldParams);
693 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
696 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceField', $priceFieldID, 'is_required', 0);
697 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', 'Other Amount');
702 if (!empty($params['is_pledge_active'])) {
703 $deletePledgeBlk = FALSE;
704 $pledgeBlockParams = array(
705 'entity_id' => $contributionPageID,
706 'entity_table' => ts('civicrm_contribution_page'),
708 if ($this->_pledgeBlockID
) {
709 $pledgeBlockParams['id'] = $this->_pledgeBlockID
;
711 $pledgeBlock = array(
712 'pledge_frequency_unit',
714 'initial_reminder_day',
715 'additional_reminder_day',
717 foreach ($pledgeBlock as $key) {
718 $pledgeBlockParams[$key] = CRM_Utils_Array
::value($key, $params);
720 $pledgeBlockParams['is_pledge_interval'] = CRM_Utils_Array
::value('is_pledge_interval',
723 // create pledge block.
724 CRM_Pledge_BAO_PledgeBlock
::create($pledgeBlockParams);
729 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
730 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
731 if ($usedPriceSetId) {
732 if (!empty($params['price_field_id'])) {
733 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_id'], '0');
735 if (!empty($params['price_field_other'])) {
736 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
740 $deleteAmountBlk = TRUE;
741 $deletePriceSet = TRUE;
746 // delete pledge block.
747 if ($deletePledgeBlk) {
748 CRM_Pledge_BAO_PledgeBlock
::deletePledgeBlock($this->_pledgeBlockID
);
751 // delete previous price set.
752 if ($deletePriceSet) {
753 CRM_Price_BAO_PriceSet
::removeFrom('civicrm_contribution_page', $contributionPageID);
756 if ($deleteAmountBlk) {
757 $priceField = !empty($params['price_field_id']) ?
$params['price_field_id'] : CRM_Utils_Array
::value('price_field_other', $params);
759 $priceSetID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceField, 'price_set_id');
760 CRM_Price_BAO_PriceSet
::setIsQuickConfig($priceSetID, 0);
764 parent
::endPostProcess();
768 * Return a descriptive name for the page, used in wizard header
772 public function getTitle() {
773 return ts('Amounts');