3 +--------------------------------------------------------------------+
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2019 |
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-2019
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 $paymentProcessors = CRM_Financial_BAO_PaymentProcessor
::getAllPaymentProcessors('live');
91 $recurringPaymentProcessor = $futurePaymentProcessor = $paymentProcessor = array();
93 if (!empty($paymentProcessors)) {
94 foreach ($paymentProcessors as $id => $processor) {
96 $paymentProcessor[$id] = $processor['name'];
98 if (CRM_Utils_Array
::value('is_recur', $processor)) {
99 $recurringPaymentProcessor[] = $id;
101 if (CRM_Utils_Array
::value('object', $processor) && $processor['object']->supports('FutureRecurStartDate')) {
102 $futurePaymentProcessor[] = $id;
106 if (count($recurringPaymentProcessor)) {
107 $this->assign('recurringPaymentProcessor', $recurringPaymentProcessor);
109 if (count($futurePaymentProcessor)) {
110 $this->assign('futurePaymentProcessor', $futurePaymentProcessor);
112 if (count($paymentProcessor)) {
113 $this->assign('paymentProcessor', $paymentProcessor);
116 $this->addCheckBox('payment_processor', ts('Payment Processor'),
117 array_flip($paymentProcessor),
118 NULL, NULL, NULL, NULL,
119 array(' ', ' ', ' ', '<br/>')
122 //check if selected payment processor supports recurring payment
123 if (!empty($recurringPaymentProcessor)) {
124 $this->addElement('checkbox', 'is_recur', ts('Recurring Contributions'), NULL,
125 array('onclick' => "showHideByValue('is_recur',true,'recurFields','table-row','radio',false);")
127 $this->addCheckBox('recur_frequency_unit', ts('Supported recurring units'),
128 CRM_Core_OptionGroup
::values('recur_frequency_units', FALSE, FALSE, TRUE),
129 NULL, NULL, NULL, NULL,
130 array(' ', ' ', ' ', '<br/>'), TRUE
132 $this->addElement('checkbox', 'is_recur_interval', ts('Support recurring intervals'));
133 $this->addElement('checkbox', 'is_recur_installments', ts('Offer installments'));
136 // add pay later options
137 $this->addElement('checkbox', 'is_pay_later', ts('Pay later option'), NULL);
138 $this->addElement('textarea', 'pay_later_text', ts('Pay later label'),
139 CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_ContributionPage', 'pay_later_text'),
142 $this->add('wysiwyg', 'pay_later_receipt', ts('Pay Later Instructions'), CRM_Core_DAO
::getAttribute('CRM_Contribute_DAO_ContributionPage', 'pay_later_receipt'));
143 $this->addElement('checkbox', 'is_billing_required', ts('Billing address required'));
145 //add partial payment options
147 // add price set fields
148 $price = CRM_Price_BAO_PriceSet
::getAssoc(FALSE, 'CiviContribute');
149 if (CRM_Utils_System
::isNull($price)) {
150 $this->assign('price', FALSE);
153 $this->assign('price', TRUE);
155 $this->add('select', 'price_set_id', ts('Price Set'),
157 '' => ts('- none -'),
159 NULL, array('onchange' => "showHideAmountBlock( this.value, 'price_set_id' );")
162 $config = CRM_Core_Config
::singleton();
163 if (in_array('CiviPledge', $config->enableComponents
)) {
164 $this->assign('civiPledge', TRUE);
165 $this->addElement('checkbox', 'is_pledge_active', ts('Pledges'),
166 NULL, array('onclick' => "showHideAmountBlock( this, 'is_pledge_active' ); return showHideByValue('is_pledge_active',true,'pledgeFields','table-row','radio',false);")
168 $this->addCheckBox('pledge_frequency_unit', ts('Supported pledge frequencies'),
169 CRM_Core_OptionGroup
::values('recur_frequency_units', FALSE, FALSE, TRUE),
170 NULL, NULL, NULL, NULL,
171 array(' ', ' ', ' ', '<br/>'), TRUE
173 $this->addElement('checkbox', 'is_pledge_interval', ts('Allow frequency intervals'));
174 $this->addElement('text', 'initial_reminder_day', ts('Send payment reminder'), array('size' => 3));
175 $this->addElement('text', 'max_reminders', ts('Send up to'), array('size' => 3));
176 $this->addElement('text', 'additional_reminder_day', ts('Send additional reminders'), array('size' => 3));
177 if (!empty($futurePaymentProcessor)) {
179 $this->addElement('checkbox', 'adjust_recur_start_date', ts('Adjust Recurring Start Date'), NULL,
180 array('onclick' => "showHideByValue('adjust_recur_start_date',true,'recurDefaults','table-row','radio',false);")
182 $this->addDate('pledge_calendar_date', ts('Specific Calendar Date'));
183 $month = CRM_Utils_Date
::getCalendarDayOfMonth();
184 $this->add('select', 'pledge_calendar_month', ts('Specific day of Month'), $month);
185 $pledgeDefaults = array(
186 'contribution_date' => ts('Day of Contribution'),
187 'calendar_date' => ts('Specific Calendar Date'),
188 'calendar_month' => ts('Specific day of Month'),
190 $this->addRadio('pledge_default_toggle', ts('Recurring Contribution Start Date Default'), $pledgeDefaults, array('allowClear' => FALSE), '<br/><br/>');
191 $this->addElement('checkbox', 'is_pledge_start_date_visible', ts('Show Recurring Donation Start Date?'), NULL);
192 $this->addElement('checkbox', 'is_pledge_start_date_editable', ts('Allow Edits to Recurring Donation Start date?'), NULL);
196 //add currency element.
197 $this->addCurrency('currency', ts('Currency'));
199 $this->addFormRule(array('CRM_Contribute_Form_ContributionPage_Amount', 'formRule'), $this);
201 parent
::buildQuickForm();
205 * Set default values for the form. Note that in edit/view mode
206 * the default values are retrieved from the database
211 public function setDefaultValues() {
212 $defaults = parent
::setDefaultValues();
214 if (empty($defaults['pay_later_text'])) {
215 $defaults['pay_later_text'] = ts('I will send payment by check');
218 if (!empty($defaults['amount_block_is_active'])) {
220 if ($priceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, NULL)) {
221 if ($isQuick = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceSet', $priceSetId, 'is_quick_config')) {
222 $this->assign('isQuick', $isQuick);
223 //$priceField = CRM_Core_DAO::getFieldValue( 'CRM_Price_DAO_PriceField', $priceSetId, 'id', 'price_set_id' );
224 $options = $pFIDs = array();
225 $priceFieldParams = array('price_set_id' => $priceSetId);
226 $priceFields = CRM_Core_DAO
::commonRetrieveAll('CRM_Price_DAO_PriceField', 'price_set_id', $priceSetId, $pFIDs, $return = array(
232 foreach ($priceFields as $priceField) {
233 if ($priceField['id'] && $priceField['html_type'] == 'Radio' && $priceField['name'] == 'contribution_amount') {
234 $defaults['price_field_id'] = $priceField['id'];
235 $priceFieldOptions = CRM_Price_BAO_PriceFieldValue
::getValues($priceField['id'], $options, 'id', 1);
236 if (empty($priceFieldOptions)) {
240 $defaults['amount_label'] = $priceField['label'];
241 foreach ($options as $optionId => $optionValue) {
243 $defaults['value'][$countRow] = $optionValue['amount'];
244 $defaults['label'][$countRow] = CRM_Utils_Array
::value('label', $optionValue);
245 $defaults['name'][$countRow] = CRM_Utils_Array
::value('name', $optionValue);
246 $defaults['weight'][$countRow] = $optionValue['weight'];
248 $defaults["price_field_value"][$countRow] = $optionValue['id'];
249 if ($optionValue['is_default']) {
250 $defaults['default'] = $countRow;
254 elseif ($priceField['id'] && $priceField['html_type'] == 'Text' && $priceField['name'] = 'other_amount' && $priceField['is_active']) {
255 $defaults['price_field_other'] = $priceField['id'];
256 if (!isset($defaults['amount_label'])) {
257 $defaults['amount_label'] = $priceField['label'];
264 if (empty($defaults['amount_label'])) {
265 $defaults['amount_label'] = ts('Contribution Amount');
268 if (!empty($defaults['value']) && is_array($defaults['value'])) {
270 // CRM-4038: fix value display
271 foreach ($defaults['value'] as & $amount) {
272 $amount = trim(CRM_Utils_Money
::format($amount, ' '));
277 // fix the display of the monetary value, CRM-4038
278 if (isset($defaults['min_amount'])) {
279 $defaults['min_amount'] = CRM_Utils_Money
::format($defaults['min_amount'], NULL, '%a');
281 if (isset($defaults['max_amount'])) {
282 $defaults['max_amount'] = CRM_Utils_Money
::format($defaults['max_amount'], NULL, '%a');
285 if (!empty($defaults['payment_processor'])) {
286 $defaults['payment_processor'] = array_fill_keys(explode(CRM_Core_DAO
::VALUE_SEPARATOR
,
287 $defaults['payment_processor']
296 * @param array $fields
297 * The input form values.
298 * @param array $files
299 * The uploaded files if any.
304 * true if no errors, else array of errors
306 public static function formRule($fields, $files, $self) {
308 //as for separate membership payment we has to have
309 //contribution amount section enabled, hence to disable it need to
310 //check if separate membership payment enabled,
311 //if so disable first separate membership payment option
312 //then disable contribution amount section. CRM-3801,
314 $membershipBlock = new CRM_Member_DAO_MembershipBlock();
315 $membershipBlock->entity_table
= 'civicrm_contribution_page';
316 $membershipBlock->entity_id
= $self->_id
;
317 $membershipBlock->is_active
= 1;
318 $hasMembershipBlk = FALSE;
319 if ($membershipBlock->find(TRUE)) {
320 if (!empty($fields['amount_block_is_active']) &&
321 ($setID = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $self->_id
, NULL, 1))
323 $extends = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'extends');
324 if ($extends && $extends == CRM_Core_Component
::getComponentID('CiviMember')) {
325 $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.');
329 $hasMembershipBlk = TRUE;
330 if ($membershipBlock->is_separate_payment
&& empty($fields['amount_block_is_active'])) {
331 $errors['amount_block_is_active'] = ts('To disable Contribution Amounts section you need to first disable Separate Membership Payment option from Membership Settings.');
334 //CRM-16165, Don't allow reccuring contribution if membership block contain any renewable membership option
335 $membershipTypes = unserialize($membershipBlock->membership_types
);
336 if (!empty($fields['is_recur']) && !empty($membershipTypes)) {
337 if (!$membershipBlock->is_separate_payment
) {
338 $errors['is_recur'] = ts('You need to enable Separate Membership Payment when online contribution page is configured for both Membership and Recurring Contribution.');
340 elseif (count(array_filter($membershipTypes)) != 0) {
341 $errors['is_recur'] = ts('You cannot enable both Recurring Contributions and Auto-renew memberships on the same online contribution page.');
346 // CRM-18854 Check if recurring start date is in the future.
347 if (CRM_Utils_Array
::value('pledge_calendar_date', $fields)) {
348 if (date('Ymd') > date('Ymd', strtotime($fields['pledge_calendar_date']))) {
349 $errors['pledge_calendar_date'] = ts('The recurring start date cannot be prior to the current date.');
353 //check for the amount label (mandatory)
354 if (!empty($fields['amount_block_is_active']) && empty($fields['price_set_id']) && empty($fields['amount_label'])) {
355 $errors['amount_label'] = ts('Please enter the contribution amount label.');
357 $minAmount = CRM_Utils_Array
::value('min_amount', $fields);
358 $maxAmount = CRM_Utils_Array
::value('max_amount', $fields);
359 if (!empty($minAmount) && !empty($maxAmount)) {
360 $minAmount = CRM_Utils_Rule
::cleanMoney($minAmount);
361 $maxAmount = CRM_Utils_Rule
::cleanMoney($maxAmount);
362 if ((float ) $minAmount > (float ) $maxAmount) {
363 $errors['min_amount'] = ts('Minimum Amount should be less than Maximum Amount');
367 if (isset($fields['is_pay_later'])) {
368 if (empty($fields['pay_later_text'])) {
369 $errors['pay_later_text'] = ts('Please enter the text for the \'pay later\' checkbox displayed on the contribution form.');
371 if (empty($fields['pay_later_receipt'])) {
372 $errors['pay_later_receipt'] = ts('Please enter the instructions to be sent to the contributor when they choose to \'pay later\'.');
376 if ($fields['amount_block_is_active'] && empty($fields['payment_processor'])) {
377 $errors['payment_processor'] = ts('You have listed fixed contribution options or selected a price set, but no payment option has been selected. Please select at least one payment processor and/or enable the pay later option.');
381 // don't allow price set w/ membership signup, CRM-5095
382 if ($priceSetId = CRM_Utils_Array
::value('price_set_id', $fields)) {
383 // don't allow price set w/ membership.
384 if ($hasMembershipBlk) {
385 $errors['price_set_id'] = ts('You cannot enable both a Contribution Price Set and Membership Signup on the same online contribution page.');
389 if (isset($fields['is_recur'])) {
390 if (empty($fields['recur_frequency_unit'])) {
391 $errors['recur_frequency_unit'] = ts('At least one recurring frequency option needs to be checked.');
395 // validation for pledge fields.
396 if (!empty($fields['is_pledge_active'])) {
397 if (empty($fields['pledge_frequency_unit'])) {
398 $errors['pledge_frequency_unit'] = ts('At least one pledge frequency option needs to be checked.');
400 if (!empty($fields['is_recur'])) {
401 $errors['is_recur'] = ts('You cannot enable both Recurring Contributions AND Pledges on the same online contribution page.');
405 // If Contribution amount section is enabled, then
406 // Allow other amounts must be enabled OR the Fixed Contribution
407 // Contribution options must contain at least one set of values.
408 if (!empty($fields['amount_block_is_active'])) {
409 if (empty($fields['is_allow_other_amount']) &&
412 //get the values of amount block
413 $values = CRM_Utils_Array
::value('value', $fields);
415 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
416 if ((isset($values[$i]) && (strlen(trim($values[$i])) > 0))) {
421 $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.');
427 if (!empty($fields['payment_processor']) && $financialType = CRM_Contribute_BAO_Contribution
::validateFinancialType($self->_defaultValues
['financial_type_id'])) {
428 $errors['payment_processor'] = ts("Financial Account of account relationship of 'Expense Account is' is not configured for Financial Type : ") . $financialType;
437 public function postProcess() {
438 // get the submitted form values.
439 $params = $this->controller
->exportValues($this->_name
);
441 //update 'is_billing_required'
442 if (empty($params['is_pay_later'])) {
443 $params['is_billing_required'] = 0;
446 if (array_key_exists('payment_processor', $params)) {
447 if (array_key_exists(CRM_Core_DAO
::getFieldValue('CRM_Financial_DAO_PaymentProcessor', 'AuthNet',
448 'id', 'payment_processor_type_id'
450 CRM_Utils_Array
::value('payment_processor', $params)
452 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');
456 // check for price set.
457 $priceSetID = CRM_Utils_Array
::value('price_set_id', $params);
459 // get required fields.
463 'min_amount' => "null",
464 'max_amount' => "null",
465 'is_monetary' => FALSE,
466 'is_pay_later' => FALSE,
467 'is_billing_required' => FALSE,
468 'is_recur_interval' => FALSE,
469 'is_recur_installments' => FALSE,
470 'recur_frequency_unit' => "null",
471 'default_amount_id' => "null",
472 'is_allow_other_amount' => FALSE,
473 'amount_block_is_active' => FALSE,
475 $resetFields = array();
477 $resetFields = array('min_amount', 'max_amount', 'is_allow_other_amount');
480 if (empty($params['is_recur'])) {
481 $resetFields = array_merge($resetFields, array('is_recur_interval', 'recur_frequency_unit'));
484 foreach ($fields as $field => $defaultVal) {
485 $val = CRM_Utils_Array
::value($field, $params, $defaultVal);
486 if (in_array($field, $resetFields)) {
490 if (in_array($field, array(
494 $val = CRM_Utils_Rule
::cleanMoney($val);
497 $params[$field] = $val;
500 if ($params['is_recur']) {
501 $params['recur_frequency_unit'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
,
502 array_keys($params['recur_frequency_unit'])
504 $params['is_recur_interval'] = CRM_Utils_Array
::value('is_recur_interval', $params, FALSE);
505 $params['is_recur_installments'] = CRM_Utils_Array
::value('is_recur_installments', $params, FALSE);
508 if (CRM_Utils_Array
::value('adjust_recur_start_date', $params)) {
510 $pledgeDateFields = array(
511 'calendar_date' => 'pledge_calendar_date',
512 'calendar_month' => 'pledge_calendar_month',
514 if ($params['pledge_default_toggle'] == 'contribution_date') {
515 $fieldValue = json_encode(array('contribution_date' => date('m/d/Y')));
518 foreach ($pledgeDateFields as $key => $pledgeDateField) {
519 if (CRM_Utils_Array
::value($pledgeDateField, $params) && $params['pledge_default_toggle'] == $key) {
520 $fieldValue = json_encode(array($key => $params[$pledgeDateField]));
525 $params['pledge_start_date'] = $fieldValue;
528 $params['pledge_start_date'] = '';
529 $params['adjust_recur_start_date'] = 0;
530 $params['is_pledge_start_date_visible'] = 0;
531 $params['is_pledge_start_date_editable'] = 0;
533 if (!CRM_Utils_Array
::value('is_pledge_start_date_visible', $params)) {
534 $params['is_pledge_start_date_visible'] = 0;
536 if (!CRM_Utils_Array
::value('is_pledge_start_date_editable', $params)) {
537 $params['is_pledge_start_date_editable'] = 0;
540 if (array_key_exists('payment_processor', $params) &&
541 !CRM_Utils_System
::isNull($params['payment_processor'])
543 $params['payment_processor'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
, array_keys($params['payment_processor']));
546 $params['payment_processor'] = 'null';
549 $contributionPage = CRM_Contribute_BAO_ContributionPage
::create($params);
550 $contributionPageID = $contributionPage->id
;
552 // prepare for data cleanup.
553 $deleteAmountBlk = $deletePledgeBlk = $deletePriceSet = FALSE;
554 if ($this->_priceSetID
) {
555 $deletePriceSet = TRUE;
557 if ($this->_pledgeBlockID
) {
558 $deletePledgeBlk = TRUE;
560 if (!empty($this->_amountBlock
)) {
561 $deleteAmountBlk = TRUE;
564 if ($contributionPageID) {
566 if (!empty($params['amount_block_is_active'])) {
569 // add/update price set.
570 $deletePriceSet = FALSE;
571 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
572 $deleteAmountBlk = TRUE;
575 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $contributionPageID, $priceSetID);
579 $deletePriceSet = FALSE;
580 // process contribution amount block
581 $deleteAmountBlk = FALSE;
583 $labels = CRM_Utils_Array
::value('label', $params);
584 $values = CRM_Utils_Array
::value('value', $params);
585 $default = CRM_Utils_Array
::value('default', $params);
588 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
589 if (isset($values[$i]) &&
590 (strlen(trim($values[$i])) > 0)
593 'label' => trim($labels[$i]),
594 'value' => CRM_Utils_Rule
::cleanMoney(trim($values[$i])),
597 'is_default' => $default == $i,
601 /* || !empty($params['price_field_value']) || CRM_Utils_Array::value( 'price_field_other', $params )*/
602 if (!empty($options) ||
!empty($params['is_allow_other_amount'])) {
603 $fieldParams['is_quick_config'] = 1;
604 $noContriAmount = NULL;
605 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
606 if (!(!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) && !$usedPriceSetId) {
607 $pageTitle = strtolower(CRM_Utils_String
::munge($this->_values
['title'], '_', 245));
608 $setParams['title'] = $this->_values
['title'];
609 if (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle, 'id', 'name')) {
610 $setParams['name'] = $pageTitle;
612 elseif (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle . '_' . $this->_id
, 'id', 'name')) {
613 $setParams['name'] = $pageTitle . '_' . $this->_id
;
616 $timeSec = explode(".", microtime(TRUE));
617 $setParams['name'] = $pageTitle . '_' . date('is', $timeSec[0]) . $timeSec[1];
619 $setParams['is_quick_config'] = 1;
620 $setParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
621 $setParams['extends'] = CRM_Core_Component
::getComponentID('CiviContribute');
622 $priceSet = CRM_Price_BAO_PriceSet
::create($setParams);
623 $priceSetId = $priceSet->id
;
625 elseif ($usedPriceSetId && empty($params['price_field_id'])) {
626 $priceSetId = $usedPriceSetId;
629 if ($priceFieldId = CRM_Utils_Array
::value('price_field_id', $params)) {
630 foreach ($params['price_field_value'] as $arrayID => $fieldValueID) {
631 if (empty($params['label'][$arrayID]) && empty($params['value'][$arrayID]) && !empty($fieldValueID)) {
632 CRM_Price_BAO_PriceFieldValue
::setIsActive($fieldValueID, '0');
633 unset($params['price_field_value'][$arrayID]);
636 if (implode('', $params['price_field_value'])) {
637 $fieldParams['id'] = CRM_Utils_Array
::value('price_field_id', $params);
638 $fieldParams['option_id'] = $params['price_field_value'];
642 CRM_Price_BAO_PriceField
::setIsActive($priceFieldId, '0');
646 $priceFieldId = CRM_Utils_Array
::value('price_field_other', $params);
648 $priceSetId = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceFieldId, 'price_set_id');
650 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $this->_id
, $priceSetId);
651 if (!empty($options)) {
652 $editedFieldParams = array(
653 'price_set_id' => $priceSetId,
654 'name' => 'contribution_amount',
656 $editedResults = array();
658 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
659 if (empty($editedResults['id'])) {
660 $fieldParams['name'] = strtolower(CRM_Utils_String
::munge("Contribution Amount", '_', 245));
663 $fieldParams['id'] = CRM_Utils_Array
::value('id', $editedResults);
666 $fieldParams['price_set_id'] = $priceSetId;
667 $fieldParams['is_active'] = 1;
668 $fieldParams['weight'] = 2;
670 if (!empty($params['is_allow_other_amount'])) {
671 $fieldParams['is_required'] = 0;
674 $fieldParams['is_required'] = 1;
676 $fieldParams['label'] = $params['amount_label'];
677 $fieldParams['html_type'] = 'Radio';
678 $fieldParams['option_label'] = $params['label'];
679 $fieldParams['option_amount'] = $params['value'];
680 $fieldParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
681 foreach ($options as $value) {
682 $fieldParams['option_weight'][$value['weight']] = $value['weight'];
684 $fieldParams['default_option'] = $params['default'];
685 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
687 if (!empty($params['is_allow_other_amount']) && empty($params['price_field_other'])) {
688 $editedFieldParams = array(
689 'price_set_id' => $priceSetId,
690 'name' => 'other_amount',
692 $editedResults = array();
694 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
696 if (!$priceFieldID = CRM_Utils_Array
::value('id', $editedResults)) {
697 $fieldParams = array(
698 'name' => 'other_amount',
699 'label' => ts('Other Amount'),
700 'price_set_id' => $priceSetId,
701 'html_type' => 'Text',
702 'financial_type_id' => CRM_Utils_Array
::value('financial_type_id', $this->_values
),
703 'is_display_amounts' => 0,
706 $fieldParams['option_weight'][1] = 1;
707 $fieldParams['option_amount'][1] = 1;
708 if (!$noContriAmount) {
709 $fieldParams['is_required'] = 1;
710 $fieldParams['option_label'][1] = $fieldParams['label'] = $params['amount_label'];
713 $fieldParams['is_required'] = 0;
714 $fieldParams['option_label'][1] = $fieldParams['label'] = ts('Other Amount');
717 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
720 if (empty($editedResults['is_active'])) {
721 $fieldParams = $editedResults;
722 if (!$noContriAmount) {
723 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
724 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
725 $fieldParams = array(
727 'label' => $params['amount_label'],
728 'id' => $priceFieldID,
731 $fieldParams['is_active'] = 1;
732 $priceField = CRM_Price_BAO_PriceField
::add($fieldParams);
736 elseif (empty($params['is_allow_other_amount']) && !empty($params['price_field_other'])) {
737 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
739 elseif ($priceFieldID = CRM_Utils_Array
::value('price_field_other', $params)) {
740 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
741 if (!$noContriAmount) {
742 $fieldParams = array(
744 'label' => $params['amount_label'],
745 'id' => $priceFieldID,
747 CRM_Price_BAO_PriceField
::add($fieldParams);
748 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
751 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceField', $priceFieldID, 'is_required', 0);
752 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', ts('Other Amount'));
757 if (!empty($params['is_pledge_active'])) {
758 $deletePledgeBlk = FALSE;
759 $pledgeBlockParams = array(
760 'entity_id' => $contributionPageID,
761 'entity_table' => ts('civicrm_contribution_page'),
763 if ($this->_pledgeBlockID
) {
764 $pledgeBlockParams['id'] = $this->_pledgeBlockID
;
766 $pledgeBlock = array(
767 'pledge_frequency_unit',
769 'initial_reminder_day',
770 'additional_reminder_day',
772 'is_pledge_start_date_visible',
773 'is_pledge_start_date_editable',
775 foreach ($pledgeBlock as $key) {
776 $pledgeBlockParams[$key] = CRM_Utils_Array
::value($key, $params);
778 $pledgeBlockParams['is_pledge_interval'] = CRM_Utils_Array
::value('is_pledge_interval',
781 $pledgeBlockParams['pledge_start_date'] = CRM_Utils_Array
::value('pledge_start_date',
784 // create pledge block.
785 CRM_Pledge_BAO_PledgeBlock
::create($pledgeBlockParams);
790 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
791 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
792 if ($usedPriceSetId) {
793 if (!empty($params['price_field_id'])) {
794 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_id'], '0');
796 if (!empty($params['price_field_other'])) {
797 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
801 $deleteAmountBlk = TRUE;
802 $deletePriceSet = TRUE;
807 // delete pledge block.
808 if ($deletePledgeBlk) {
809 CRM_Pledge_BAO_PledgeBlock
::deletePledgeBlock($this->_pledgeBlockID
);
812 // delete previous price set.
813 if ($deletePriceSet) {
814 CRM_Price_BAO_PriceSet
::removeFrom('civicrm_contribution_page', $contributionPageID);
817 if ($deleteAmountBlk) {
818 $priceField = !empty($params['price_field_id']) ?
$params['price_field_id'] : CRM_Utils_Array
::value('price_field_other', $params);
820 $priceSetID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceField, 'price_set_id');
821 CRM_Price_BAO_PriceSet
::setIsQuickConfig($priceSetID, 0);
825 parent
::endPostProcess();
829 * Return a descriptive name for the page, used in wizard header
833 public function getTitle() {
834 return ts('Amounts');