3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
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
35 * form to process actions on the group aspect of Custom Data
37 class CRM_Contribute_Form_ContributionPage_Amount
extends CRM_Contribute_Form_ContributionPage
{
40 * Contribution amount block.
44 protected $_amountBlock = array();
47 * Constants for number of options for data types of multiple option.
49 const NUM_OPTION
= 11;
52 * Build the form object.
54 public function buildQuickForm() {
56 // do u want to allow a free form text field for amount
57 $this->addElement('checkbox', 'is_allow_other_amount', ts('Allow other amounts'), NULL, array('onclick' => "minMax(this);showHideAmountBlock( this, 'is_allow_other_amount' );"));
58 $this->add('text', 'min_amount', ts('Minimum Amount'), array('size' => 8, 'maxlength' => 8));
59 $this->addRule('min_amount', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money
::format('9.99', ' '))), 'money');
61 $this->add('text', 'max_amount', ts('Maximum Amount'), array('size' => 8, 'maxlength' => 8));
62 $this->addRule('max_amount', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money
::format('99.99', ' '))), 'money');
65 $this->add('text', 'amount_label', ts('Contribution Amounts Label'));
67 $default = array($this->createElement('radio', NULL, NULL, NULL, 0));
68 $this->add('hidden', "price_field_id", '', array('id' => "price_field_id"));
69 $this->add('hidden', "price_field_other", '', array('id' => "price_field_option"));
70 for ($i = 1; $i <= self
::NUM_OPTION
; $i++
) {
72 $this->add('text', "label[$i]", ts('Label'), CRM_Core_DAO
::getAttribute('CRM_Core_DAO_OptionValue', 'label'));
74 $this->add('hidden', "price_field_value[$i]", '', array('id' => "price_field_value[$i]"));
77 $this->add('text', "value[$i]", ts('Value'), CRM_Core_DAO
::getAttribute('CRM_Core_DAO_OptionValue', 'value'));
78 $this->addRule("value[$i]", ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money
::format('99.99', ' '))), 'money');
81 $default[] = $this->createElement('radio', NULL, NULL, NULL, $i);
84 $this->addGroup($default, 'default');
86 $this->addElement('checkbox', 'amount_block_is_active', ts('Contribution Amounts section enabled'), NULL, array('onclick' => "showHideAmountBlock( this, 'amount_block_is_active' );"));
88 $this->addElement('checkbox', 'is_monetary', ts('Execute real-time monetary transactions'));
90 $paymentProcessor = CRM_Core_PseudoConstant
::paymentProcessor();
91 $recurringPaymentProcessor = array();
93 if (!empty($paymentProcessor)) {
94 $paymentProcessorIds = implode(',', array_keys($paymentProcessor));
97 FROM civicrm_payment_processor
98 WHERE id IN ({$paymentProcessorIds})
100 $dao = CRM_Core_DAO
::executeQuery($query);
101 while ($dao->fetch()) {
102 $recurringPaymentProcessor[] = $dao->id
;
105 $this->assign('recurringPaymentProcessor', $recurringPaymentProcessor);
106 if (count($paymentProcessor)) {
107 $this->assign('paymentProcessor', $paymentProcessor);
110 $this->addCheckBox('payment_processor', ts('Payment Processor'),
111 array_flip($paymentProcessor),
112 NULL, NULL, NULL, NULL,
113 array(' ', ' ', ' ', '<br/>')
116 //check if selected payment processor supports recurring payment
117 if (!empty($recurringPaymentProcessor)) {
118 $this->addElement('checkbox', 'is_recur', ts('Recurring Contributions'), NULL,
119 array('onclick' => "showHideByValue('is_recur',true,'recurFields','table-row','radio',false);")
121 $this->addCheckBox('recur_frequency_unit', ts('Supported recurring units'),
122 CRM_Core_OptionGroup
::values('recur_frequency_units', FALSE, FALSE, TRUE),
123 NULL, NULL, NULL, NULL,
124 array(' ', ' ', ' ', '<br/>'), TRUE
126 $this->addElement('checkbox', 'is_recur_interval', ts('Support recurring intervals'));
127 $this->addElement('checkbox', 'is_recur_installments', ts('Offer installments'));
130 // add pay later options
131 $this->addElement('checkbox', 'is_pay_later', ts('Pay later option'), NULL);
132 $this->addElement('textarea', 'pay_later_text', ts('Pay later label'),
133 CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_ContributionPage', 'pay_later_text'),
136 $this->add('wysiwyg', 'pay_later_receipt', ts('Pay Later Instructions'), CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_ContributionPage', 'pay_later_receipt'));
137 $this->addElement('checkbox', 'is_billing_required', ts('Billing address required'));
139 //add partial payment options
141 // add price set fields
142 $price = CRM_Price_BAO_PriceSet
::getAssoc(FALSE, 'CiviContribute');
143 if (CRM_Utils_System
::isNull($price)) {
144 $this->assign('price', FALSE);
147 $this->assign('price', TRUE);
149 $this->add('select', 'price_set_id', ts('Price Set'),
151 '' => ts('- none -'),
153 NULL, array('onchange' => "showHideAmountBlock( this.value, 'price_set_id' );")
156 $config = CRM_Core_Config
::singleton();
157 if (in_array('CiviPledge', $config->enableComponents
)) {
158 $this->assign('civiPledge', TRUE);
159 $this->addElement('checkbox', 'is_pledge_active', ts('Pledges'),
160 NULL, array('onclick' => "showHideAmountBlock( this, 'is_pledge_active' ); return showHideByValue('is_pledge_active',true,'pledgeFields','table-row','radio',false);")
162 $this->addCheckBox('pledge_frequency_unit', ts('Supported pledge frequencies'),
163 CRM_Core_OptionGroup
::values('recur_frequency_units', FALSE, FALSE, TRUE),
164 NULL, NULL, NULL, NULL,
165 array(' ', ' ', ' ', '<br/>'), TRUE
167 $this->addElement('checkbox', 'is_pledge_interval', ts('Allow frequency intervals'));
168 $this->addElement('text', 'initial_reminder_day', ts('Send payment reminder'), array('size' => 3));
169 $this->addElement('text', 'max_reminders', ts('Send up to'), array('size' => 3));
170 $this->addElement('text', 'additional_reminder_day', ts('Send additional reminders'), array('size' => 3));
173 //add currency element.
174 $this->addCurrency('currency', ts('Currency'));
176 $this->addFormRule(array('CRM_Contribute_Form_ContributionPage_Amount', 'formRule'), $this);
178 parent
::buildQuickForm();
182 * Set default values for the form. Note that in edit/view mode
183 * the default values are retrieved from the database
188 public function setDefaultValues() {
189 $defaults = parent
::setDefaultValues();
191 if (empty($defaults['pay_later_text'])) {
192 $defaults['pay_later_text'] = ts('I will send payment by check');
195 if (!empty($defaults['amount_block_is_active'])) {
197 if ($priceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, NULL)) {
198 if ($isQuick = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceSet', $priceSetId, 'is_quick_config')) {
199 $this->assign('isQuick', $isQuick);
200 //$priceField = CRM_Core_DAO::getFieldValue( 'CRM_Price_DAO_PriceField', $priceSetId, 'id', 'price_set_id' );
201 $options = $pFIDs = array();
202 $priceFieldParams = array('price_set_id' => $priceSetId);
203 $priceFields = CRM_Core_DAO
::commonRetrieveAll('CRM_Price_DAO_PriceField', 'price_set_id', $priceSetId, $pFIDs, $return = array(
209 foreach ($priceFields as $priceField) {
210 if ($priceField['id'] && $priceField['html_type'] == 'Radio' && $priceField['name'] == 'contribution_amount') {
211 $defaults['price_field_id'] = $priceField['id'];
212 $priceFieldOptions = CRM_Price_BAO_PriceFieldValue
::getValues($priceField['id'], $options, 'id', 1);
213 if (empty($priceFieldOptions)) {
217 $defaults['amount_label'] = $priceField['label'];
218 foreach ($options as $optionId => $optionValue) {
220 $defaults['value'][$countRow] = $optionValue['amount'];
221 $defaults['label'][$countRow] = CRM_Utils_Array
::value('label', $optionValue);
222 $defaults['name'][$countRow] = CRM_Utils_Array
::value('name', $optionValue);
223 $defaults['weight'][$countRow] = $optionValue['weight'];
225 $defaults["price_field_value"][$countRow] = $optionValue['id'];
226 if ($optionValue['is_default']) {
227 $defaults['default'] = $countRow;
231 elseif ($priceField['id'] && $priceField['html_type'] == 'Text' && $priceField['name'] = 'other_amount' && $priceField['is_active']) {
232 $defaults['price_field_other'] = $priceField['id'];
233 if (!isset($defaults['amount_label'])) {
234 $defaults['amount_label'] = $priceField['label'];
241 if (empty($defaults['amount_label'])) {
242 $defaults['amount_label'] = ts('Contribution Amount');
245 if (!empty($defaults['value']) && is_array($defaults['value'])) {
247 // CRM-4038: fix value display
248 foreach ($defaults['value'] as & $amount) {
249 $amount = trim(CRM_Utils_Money
::format($amount, ' '));
254 // fix the display of the monetary value, CRM-4038
255 if (isset($defaults['min_amount'])) {
256 $defaults['min_amount'] = CRM_Utils_Money
::format($defaults['min_amount'], NULL, '%a');
258 if (isset($defaults['max_amount'])) {
259 $defaults['max_amount'] = CRM_Utils_Money
::format($defaults['max_amount'], NULL, '%a');
262 if (!empty($defaults['payment_processor'])) {
263 $defaults['payment_processor'] = array_fill_keys(explode(CRM_Core_DAO
::VALUE_SEPARATOR
,
264 $defaults['payment_processor']
273 * @param array $fields
274 * The input form values.
275 * @param array $files
276 * The uploaded files if any.
281 * true if no errors, else array of errors
283 public static function formRule($fields, $files, $self) {
285 //as for separate membership payment we has to have
286 //contribution amount section enabled, hence to disable it need to
287 //check if separate membership payment enabled,
288 //if so disable first separate membership payment option
289 //then disable contribution amount section. CRM-3801,
291 $membershipBlock = new CRM_Member_DAO_MembershipBlock();
292 $membershipBlock->entity_table
= 'civicrm_contribution_page';
293 $membershipBlock->entity_id
= $self->_id
;
294 $membershipBlock->is_active
= 1;
295 $hasMembershipBlk = FALSE;
296 if ($membershipBlock->find(TRUE)) {
297 if (!empty($fields['amount_block_is_active']) &&
298 ($setID = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $self->_id
, NULL, 1))
300 $extends = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'extends');
301 if ($extends && $extends == CRM_Core_Component
::getComponentID('CiviMember')) {
302 $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.');
306 $hasMembershipBlk = TRUE;
307 if ($membershipBlock->is_separate_payment
&& empty($fields['amount_block_is_active'])) {
308 $errors['amount_block_is_active'] = ts('To disable Contribution Amounts section you need to first disable Separate Membership Payment option from Membership Settings.');
311 //CRM-16165, Don't allow reccuring contribution if membership block contain any renewable membership option
312 $membershipTypes = unserialize($membershipBlock->membership_types
);
313 if (!empty($fields['is_recur']) && !empty($membershipTypes)) {
314 if (!$membershipBlock->is_separate_payment
) {
315 $errors['is_recur'] = ts('You need to enable Separate Membership Payment when online contribution page is configured for both Membership and Recurring Contribution.');
317 elseif (count(array_filter($membershipTypes)) != 0) {
318 $errors['is_recur'] = ts('You cannot enable both Recurring Contributions and Auto-renew memberships on the same online contribution page.');
323 //check for the amount label (mandatory)
324 if (!empty($fields['amount_block_is_active']) && empty($fields['amount_label'])) {
325 $errors['amount_label'] = ts('Please enter the contribution amount label.');
327 $minAmount = CRM_Utils_Array
::value('min_amount', $fields);
328 $maxAmount = CRM_Utils_Array
::value('max_amount', $fields);
329 if (!empty($minAmount) && !empty($maxAmount)) {
330 $minAmount = CRM_Utils_Rule
::cleanMoney($minAmount);
331 $maxAmount = CRM_Utils_Rule
::cleanMoney($maxAmount);
332 if ((float ) $minAmount > (float ) $maxAmount) {
333 $errors['min_amount'] = ts('Minimum Amount should be less than Maximum Amount');
337 if (isset($fields['is_pay_later'])) {
338 if (empty($fields['pay_later_text'])) {
339 $errors['pay_later_text'] = ts('Please enter the text for the \'pay later\' checkbox displayed on the contribution form.');
341 if (empty($fields['pay_later_receipt'])) {
342 $errors['pay_later_receipt'] = ts('Please enter the instructions to be sent to the contributor when they choose to \'pay later\'.');
346 // don't allow price set w/ membership signup, CRM-5095
347 if ($priceSetId = CRM_Utils_Array
::value('price_set_id', $fields)) {
348 // don't allow price set w/ membership.
349 if ($hasMembershipBlk) {
350 $errors['price_set_id'] = ts('You cannot enable both a Contribution Price Set and Membership Signup on the same online contribution page.');
354 if (isset($fields['is_recur'])) {
355 if (empty($fields['recur_frequency_unit'])) {
356 $errors['recur_frequency_unit'] = ts('At least one recurring frequency option needs to be checked.');
360 // validation for pledge fields.
361 if (!empty($fields['is_pledge_active'])) {
362 if (empty($fields['pledge_frequency_unit'])) {
363 $errors['pledge_frequency_unit'] = ts('At least one pledge frequency option needs to be checked.');
365 if (!empty($fields['is_recur'])) {
366 $errors['is_recur'] = ts('You cannot enable both Recurring Contributions AND Pledges on the same online contribution page.');
370 // If Contribution amount section is enabled, then
371 // Allow other amounts must be enabled OR the Fixed Contribution
372 // Contribution options must contain at least one set of values.
373 if (!empty($fields['amount_block_is_active'])) {
374 if (empty($fields['is_allow_other_amount']) &&
377 //get the values of amount block
378 $values = CRM_Utils_Array
::value('value', $fields);
380 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
381 if ((isset($values[$i]) && (strlen(trim($values[$i])) > 0))) {
386 $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.');
392 if (!empty($fields['payment_processor']) && $financialType = CRM_Contribute_BAO_Contribution
::validateFinancialType($self->_defaultValues
['financial_type_id'])) {
393 $errors['payment_processor'] = ts("Financial Account of account relationship of 'Expense Account is' is not configured for Financial Type : ") . $financialType;
396 if (!empty($fields['is_recur_interval'])) {
397 foreach (array_keys($fields['payment_processor']) as $paymentProcessorID) {
398 $paymentProcessorTypeId = CRM_Core_DAO
::getFieldValue(
399 'CRM_Financial_DAO_PaymentProcessor',
401 'payment_processor_type_id'
403 $paymentProcessorType = CRM_Core_PseudoConstant
::paymentProcessorType(FALSE, $paymentProcessorTypeId, 'name');
413 public function postProcess() {
414 // get the submitted form values.
415 $params = $this->controller
->exportValues($this->_name
);
417 //update 'is_billing_required'
418 if (empty($params['is_pay_later'])) {
419 $params['is_billing_required'] = 0;
422 if (array_key_exists('payment_processor', $params)) {
423 if (array_key_exists(CRM_Core_DAO
::getFieldValue('CRM_Financial_DAO_PaymentProcessor', 'AuthNet',
424 'id', 'payment_processor_type_id'
426 CRM_Utils_Array
::value('payment_processor', $params)
428 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');
432 // check for price set.
433 $priceSetID = CRM_Utils_Array
::value('price_set_id', $params);
435 // get required fields.
439 'min_amount' => "null",
440 'max_amount' => "null",
441 'is_monetary' => FALSE,
442 'is_pay_later' => FALSE,
443 'is_billing_required' => FALSE,
444 'is_recur_interval' => FALSE,
445 'is_recur_installments' => FALSE,
446 'recur_frequency_unit' => "null",
447 'default_amount_id' => "null",
448 'is_allow_other_amount' => FALSE,
449 'amount_block_is_active' => FALSE,
451 $resetFields = array();
453 $resetFields = array('min_amount', 'max_amount', 'is_allow_other_amount');
456 if (empty($params['is_recur'])) {
457 $resetFields = array_merge($resetFields, array('is_recur_interval', 'recur_frequency_unit'));
460 foreach ($fields as $field => $defaultVal) {
461 $val = CRM_Utils_Array
::value($field, $params, $defaultVal);
462 if (in_array($field, $resetFields)) {
466 if (in_array($field, array(
470 $val = CRM_Utils_Rule
::cleanMoney($val);
473 $params[$field] = $val;
476 if ($params['is_recur']) {
477 $params['recur_frequency_unit'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
,
478 array_keys($params['recur_frequency_unit'])
480 $params['is_recur_interval'] = CRM_Utils_Array
::value('is_recur_interval', $params, FALSE);
481 $params['is_recur_installments'] = CRM_Utils_Array
::value('is_recur_installments', $params, FALSE);
484 if (array_key_exists('payment_processor', $params) &&
485 !CRM_Utils_System
::isNull($params['payment_processor'])
487 $params['payment_processor'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
, array_keys($params['payment_processor']));
490 $params['payment_processor'] = 'null';
493 $contributionPage = CRM_Contribute_BAO_ContributionPage
::create($params);
494 $contributionPageID = $contributionPage->id
;
496 // prepare for data cleanup.
497 $deleteAmountBlk = $deletePledgeBlk = $deletePriceSet = FALSE;
498 if ($this->_priceSetID
) {
499 $deletePriceSet = TRUE;
501 if ($this->_pledgeBlockID
) {
502 $deletePledgeBlk = TRUE;
504 if (!empty($this->_amountBlock
)) {
505 $deleteAmountBlk = TRUE;
508 if ($contributionPageID) {
510 if (!empty($params['amount_block_is_active'])) {
513 // add/update price set.
514 $deletePriceSet = FALSE;
515 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
516 $deleteAmountBlk = TRUE;
519 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $contributionPageID, $priceSetID);
523 $deletePriceSet = FALSE;
524 // process contribution amount block
525 $deleteAmountBlk = FALSE;
527 $labels = CRM_Utils_Array
::value('label', $params);
528 $values = CRM_Utils_Array
::value('value', $params);
529 $default = CRM_Utils_Array
::value('default', $params);
532 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
533 if (isset($values[$i]) &&
534 (strlen(trim($values[$i])) > 0)
537 'label' => trim($labels[$i]),
538 'value' => CRM_Utils_Rule
::cleanMoney(trim($values[$i])),
541 'is_default' => $default == $i,
545 /* || !empty($params['price_field_value']) || CRM_Utils_Array::value( 'price_field_other', $params )*/
546 if (!empty($options) ||
!empty($params['is_allow_other_amount'])) {
547 $fieldParams['is_quick_config'] = 1;
548 $noContriAmount = NULL;
549 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
550 if (!(!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) && !$usedPriceSetId) {
551 $pageTitle = strtolower(CRM_Utils_String
::munge($this->_values
['title'], '_', 245));
552 $setParams['title'] = $this->_values
['title'];
553 if (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle, 'id', 'name')) {
554 $setParams['name'] = $pageTitle;
556 elseif (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle . '_' . $this->_id
, 'id', 'name')) {
557 $setParams['name'] = $pageTitle . '_' . $this->_id
;
560 $timeSec = explode(".", microtime(TRUE));
561 $setParams['name'] = $pageTitle . '_' . date('is', $timeSec[0]) . $timeSec[1];
563 $setParams['is_quick_config'] = 1;
564 $setParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
565 $setParams['extends'] = CRM_Core_Component
::getComponentID('CiviContribute');
566 $priceSet = CRM_Price_BAO_PriceSet
::create($setParams);
567 $priceSetId = $priceSet->id
;
569 elseif ($usedPriceSetId && empty($params['price_field_id'])) {
570 $priceSetId = $usedPriceSetId;
573 if ($priceFieldId = CRM_Utils_Array
::value('price_field_id', $params)) {
574 foreach ($params['price_field_value'] as $arrayID => $fieldValueID) {
575 if (empty($params['label'][$arrayID]) && empty($params['value'][$arrayID]) && !empty($fieldValueID)) {
576 CRM_Price_BAO_PriceFieldValue
::setIsActive($fieldValueID, '0');
577 unset($params['price_field_value'][$arrayID]);
580 if (implode('', $params['price_field_value'])) {
581 $fieldParams['id'] = CRM_Utils_Array
::value('price_field_id', $params);
582 $fieldParams['option_id'] = $params['price_field_value'];
586 CRM_Price_BAO_PriceField
::setIsActive($priceFieldId, '0');
590 $priceFieldId = CRM_Utils_Array
::value('price_field_other', $params);
592 $priceSetId = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceFieldId, 'price_set_id');
594 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $this->_id
, $priceSetId);
595 if (!empty($options)) {
596 $editedFieldParams = array(
597 'price_set_id' => $priceSetId,
598 'name' => 'contribution_amount',
600 $editedResults = array();
602 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
603 if (empty($editedResults['id'])) {
604 $fieldParams['name'] = strtolower(CRM_Utils_String
::munge("Contribution Amount", '_', 245));
607 $fieldParams['id'] = CRM_Utils_Array
::value('id', $editedResults);
610 $fieldParams['price_set_id'] = $priceSetId;
611 $fieldParams['is_active'] = 1;
612 $fieldParams['weight'] = 2;
614 if (!empty($params['is_allow_other_amount'])) {
615 $fieldParams['is_required'] = 0;
618 $fieldParams['is_required'] = 1;
620 $fieldParams['label'] = $params['amount_label'];
621 $fieldParams['html_type'] = 'Radio';
622 $fieldParams['option_label'] = $params['label'];
623 $fieldParams['option_amount'] = $params['value'];
624 $fieldParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
625 foreach ($options as $value) {
626 $fieldParams['option_weight'][$value['weight']] = $value['weight'];
628 $fieldParams['default_option'] = $params['default'];
629 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
631 if (!empty($params['is_allow_other_amount']) && empty($params['price_field_other'])) {
632 $editedFieldParams = array(
633 'price_set_id' => $priceSetId,
634 'name' => 'other_amount',
636 $editedResults = array();
638 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
640 if (!$priceFieldID = CRM_Utils_Array
::value('id', $editedResults)) {
641 $fieldParams = array(
642 'name' => 'other_amount',
643 'label' => ts('Other Amount'),
644 'price_set_id' => $priceSetId,
645 'html_type' => 'Text',
646 'financial_type_id' => CRM_Utils_Array
::value('financial_type_id', $this->_values
),
647 'is_display_amounts' => 0,
650 $fieldParams['option_weight'][1] = 1;
651 $fieldParams['option_amount'][1] = 1;
652 if (!$noContriAmount) {
653 $fieldParams['is_required'] = 1;
654 $fieldParams['option_label'][1] = $fieldParams['label'] = $params['amount_label'];
657 $fieldParams['is_required'] = 0;
658 $fieldParams['option_label'][1] = $fieldParams['label'] = ts('Other Amount');
661 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
664 if (empty($editedResults['is_active'])) {
665 $fieldParams = $editedResults;
666 if (!$noContriAmount) {
667 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
668 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
669 $fieldParams = array(
671 'label' => $params['amount_label'],
672 'id' => $priceFieldID,
675 $fieldParams['is_active'] = 1;
676 $priceField = CRM_Price_BAO_PriceField
::add($fieldParams);
680 elseif (empty($params['is_allow_other_amount']) && !empty($params['price_field_other'])) {
681 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
683 elseif ($priceFieldID = CRM_Utils_Array
::value('price_field_other', $params)) {
684 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
685 if (!$noContriAmount) {
686 $fieldParams = array(
688 'label' => $params['amount_label'],
689 'id' => $priceFieldID,
691 CRM_Price_BAO_PriceField
::add($fieldParams);
692 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
695 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceField', $priceFieldID, 'is_required', 0);
696 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', ts('Other Amount'));
701 if (!empty($params['is_pledge_active'])) {
702 $deletePledgeBlk = FALSE;
703 $pledgeBlockParams = array(
704 'entity_id' => $contributionPageID,
705 'entity_table' => ts('civicrm_contribution_page'),
707 if ($this->_pledgeBlockID
) {
708 $pledgeBlockParams['id'] = $this->_pledgeBlockID
;
710 $pledgeBlock = array(
711 'pledge_frequency_unit',
713 'initial_reminder_day',
714 'additional_reminder_day',
716 foreach ($pledgeBlock as $key) {
717 $pledgeBlockParams[$key] = CRM_Utils_Array
::value($key, $params);
719 $pledgeBlockParams['is_pledge_interval'] = CRM_Utils_Array
::value('is_pledge_interval',
722 // create pledge block.
723 CRM_Pledge_BAO_PledgeBlock
::create($pledgeBlockParams);
728 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
729 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
730 if ($usedPriceSetId) {
731 if (!empty($params['price_field_id'])) {
732 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_id'], '0');
734 if (!empty($params['price_field_other'])) {
735 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
739 $deleteAmountBlk = TRUE;
740 $deletePriceSet = TRUE;
745 // delete pledge block.
746 if ($deletePledgeBlk) {
747 CRM_Pledge_BAO_PledgeBlock
::deletePledgeBlock($this->_pledgeBlockID
);
750 // delete previous price set.
751 if ($deletePriceSet) {
752 CRM_Price_BAO_PriceSet
::removeFrom('civicrm_contribution_page', $contributionPageID);
755 if ($deleteAmountBlk) {
756 $priceField = !empty($params['price_field_id']) ?
$params['price_field_id'] : CRM_Utils_Array
::value('price_field_other', $params);
758 $priceSetID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceField, 'price_set_id');
759 CRM_Price_BAO_PriceSet
::setIsQuickConfig($priceSetID, 0);
763 parent
::endPostProcess();
767 * Return a descriptive name for the page, used in wizard header
771 public function getTitle() {
772 return ts('Amounts');