3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2016 |
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-2016
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['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 // don't allow price set w/ membership signup, CRM-5095
377 if ($priceSetId = CRM_Utils_Array
::value('price_set_id', $fields)) {
378 // don't allow price set w/ membership.
379 if ($hasMembershipBlk) {
380 $errors['price_set_id'] = ts('You cannot enable both a Contribution Price Set and Membership Signup on the same online contribution page.');
384 if (isset($fields['is_recur'])) {
385 if (empty($fields['recur_frequency_unit'])) {
386 $errors['recur_frequency_unit'] = ts('At least one recurring frequency option needs to be checked.');
390 // validation for pledge fields.
391 if (!empty($fields['is_pledge_active'])) {
392 if (empty($fields['pledge_frequency_unit'])) {
393 $errors['pledge_frequency_unit'] = ts('At least one pledge frequency option needs to be checked.');
395 if (!empty($fields['is_recur'])) {
396 $errors['is_recur'] = ts('You cannot enable both Recurring Contributions AND Pledges on the same online contribution page.');
400 // If Contribution amount section is enabled, then
401 // Allow other amounts must be enabled OR the Fixed Contribution
402 // Contribution options must contain at least one set of values.
403 if (!empty($fields['amount_block_is_active'])) {
404 if (empty($fields['is_allow_other_amount']) &&
407 //get the values of amount block
408 $values = CRM_Utils_Array
::value('value', $fields);
410 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
411 if ((isset($values[$i]) && (strlen(trim($values[$i])) > 0))) {
416 $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.');
422 if (!empty($fields['payment_processor']) && $financialType = CRM_Contribute_BAO_Contribution
::validateFinancialType($self->_defaultValues
['financial_type_id'])) {
423 $errors['payment_processor'] = ts("Financial Account of account relationship of 'Expense Account is' is not configured for Financial Type : ") . $financialType;
426 if (!empty($fields['is_recur_interval'])) {
427 foreach (array_keys($fields['payment_processor']) as $paymentProcessorID) {
428 $paymentProcessorTypeId = CRM_Core_DAO
::getFieldValue(
429 'CRM_Financial_DAO_PaymentProcessor',
431 'payment_processor_type_id'
433 $paymentProcessorType = CRM_Core_PseudoConstant
::paymentProcessorType(FALSE, $paymentProcessorTypeId, 'name');
443 public function postProcess() {
444 // get the submitted form values.
445 $params = $this->controller
->exportValues($this->_name
);
447 //update 'is_billing_required'
448 if (empty($params['is_pay_later'])) {
449 $params['is_billing_required'] = 0;
452 if (array_key_exists('payment_processor', $params)) {
453 if (array_key_exists(CRM_Core_DAO
::getFieldValue('CRM_Financial_DAO_PaymentProcessor', 'AuthNet',
454 'id', 'payment_processor_type_id'
456 CRM_Utils_Array
::value('payment_processor', $params)
458 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');
462 // check for price set.
463 $priceSetID = CRM_Utils_Array
::value('price_set_id', $params);
465 // get required fields.
469 'min_amount' => "null",
470 'max_amount' => "null",
471 'is_monetary' => FALSE,
472 'is_pay_later' => FALSE,
473 'is_billing_required' => FALSE,
474 'is_recur_interval' => FALSE,
475 'is_recur_installments' => FALSE,
476 'recur_frequency_unit' => "null",
477 'default_amount_id' => "null",
478 'is_allow_other_amount' => FALSE,
479 'amount_block_is_active' => FALSE,
481 $resetFields = array();
483 $resetFields = array('min_amount', 'max_amount', 'is_allow_other_amount');
486 if (empty($params['is_recur'])) {
487 $resetFields = array_merge($resetFields, array('is_recur_interval', 'recur_frequency_unit'));
490 foreach ($fields as $field => $defaultVal) {
491 $val = CRM_Utils_Array
::value($field, $params, $defaultVal);
492 if (in_array($field, $resetFields)) {
496 if (in_array($field, array(
500 $val = CRM_Utils_Rule
::cleanMoney($val);
503 $params[$field] = $val;
506 if ($params['is_recur']) {
507 $params['recur_frequency_unit'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
,
508 array_keys($params['recur_frequency_unit'])
510 $params['is_recur_interval'] = CRM_Utils_Array
::value('is_recur_interval', $params, FALSE);
511 $params['is_recur_installments'] = CRM_Utils_Array
::value('is_recur_installments', $params, FALSE);
514 if (CRM_Utils_Array
::value('adjust_recur_start_date', $params)) {
516 $pledgeDateFields = array(
517 'calendar_date' => 'pledge_calendar_date',
518 'calendar_month' => 'pledge_calendar_month',
520 if ($params['pledge_default_toggle'] == 'contribution_date') {
521 $fieldValue = json_encode(array('contribution_date' => date('m/d/Y')));
524 foreach ($pledgeDateFields as $key => $pledgeDateField) {
525 if (CRM_Utils_Array
::value($pledgeDateField, $params) && $params['pledge_default_toggle'] == $key) {
526 $fieldValue = json_encode(array($key => $params[$pledgeDateField]));
531 $params['pledge_start_date'] = $fieldValue;
534 $params['pledge_start_date'] = '';
535 $params['adjust_recur_start_date'] = 0;
536 $params['is_pledge_start_date_visible'] = 0;
537 $params['is_pledge_start_date_editable'] = 0;
539 if (!CRM_Utils_Array
::value('is_pledge_start_date_visible', $params)) {
540 $params['is_pledge_start_date_visible'] = 0;
542 if (!CRM_Utils_Array
::value('is_pledge_start_date_editable', $params)) {
543 $params['is_pledge_start_date_editable'] = 0;
546 if (array_key_exists('payment_processor', $params) &&
547 !CRM_Utils_System
::isNull($params['payment_processor'])
549 $params['payment_processor'] = implode(CRM_Core_DAO
::VALUE_SEPARATOR
, array_keys($params['payment_processor']));
552 $params['payment_processor'] = 'null';
555 $contributionPage = CRM_Contribute_BAO_ContributionPage
::create($params);
556 $contributionPageID = $contributionPage->id
;
558 // prepare for data cleanup.
559 $deleteAmountBlk = $deletePledgeBlk = $deletePriceSet = FALSE;
560 if ($this->_priceSetID
) {
561 $deletePriceSet = TRUE;
563 if ($this->_pledgeBlockID
) {
564 $deletePledgeBlk = TRUE;
566 if (!empty($this->_amountBlock
)) {
567 $deleteAmountBlk = TRUE;
570 if ($contributionPageID) {
572 if (!empty($params['amount_block_is_active'])) {
575 // add/update price set.
576 $deletePriceSet = FALSE;
577 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
578 $deleteAmountBlk = TRUE;
581 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $contributionPageID, $priceSetID);
585 $deletePriceSet = FALSE;
586 // process contribution amount block
587 $deleteAmountBlk = FALSE;
589 $labels = CRM_Utils_Array
::value('label', $params);
590 $values = CRM_Utils_Array
::value('value', $params);
591 $default = CRM_Utils_Array
::value('default', $params);
594 for ($i = 1; $i < self
::NUM_OPTION
; $i++
) {
595 if (isset($values[$i]) &&
596 (strlen(trim($values[$i])) > 0)
599 'label' => trim($labels[$i]),
600 'value' => CRM_Utils_Rule
::cleanMoney(trim($values[$i])),
603 'is_default' => $default == $i,
607 /* || !empty($params['price_field_value']) || CRM_Utils_Array::value( 'price_field_other', $params )*/
608 if (!empty($options) ||
!empty($params['is_allow_other_amount'])) {
609 $fieldParams['is_quick_config'] = 1;
610 $noContriAmount = NULL;
611 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
612 if (!(!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) && !$usedPriceSetId) {
613 $pageTitle = strtolower(CRM_Utils_String
::munge($this->_values
['title'], '_', 245));
614 $setParams['title'] = $this->_values
['title'];
615 if (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle, 'id', 'name')) {
616 $setParams['name'] = $pageTitle;
618 elseif (!CRM_Core_DAO
::getFieldValue('CRM_Price_BAO_PriceSet', $pageTitle . '_' . $this->_id
, 'id', 'name')) {
619 $setParams['name'] = $pageTitle . '_' . $this->_id
;
622 $timeSec = explode(".", microtime(TRUE));
623 $setParams['name'] = $pageTitle . '_' . date('is', $timeSec[0]) . $timeSec[1];
625 $setParams['is_quick_config'] = 1;
626 $setParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
627 $setParams['extends'] = CRM_Core_Component
::getComponentID('CiviContribute');
628 $priceSet = CRM_Price_BAO_PriceSet
::create($setParams);
629 $priceSetId = $priceSet->id
;
631 elseif ($usedPriceSetId && empty($params['price_field_id'])) {
632 $priceSetId = $usedPriceSetId;
635 if ($priceFieldId = CRM_Utils_Array
::value('price_field_id', $params)) {
636 foreach ($params['price_field_value'] as $arrayID => $fieldValueID) {
637 if (empty($params['label'][$arrayID]) && empty($params['value'][$arrayID]) && !empty($fieldValueID)) {
638 CRM_Price_BAO_PriceFieldValue
::setIsActive($fieldValueID, '0');
639 unset($params['price_field_value'][$arrayID]);
642 if (implode('', $params['price_field_value'])) {
643 $fieldParams['id'] = CRM_Utils_Array
::value('price_field_id', $params);
644 $fieldParams['option_id'] = $params['price_field_value'];
648 CRM_Price_BAO_PriceField
::setIsActive($priceFieldId, '0');
652 $priceFieldId = CRM_Utils_Array
::value('price_field_other', $params);
654 $priceSetId = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceFieldId, 'price_set_id');
656 CRM_Price_BAO_PriceSet
::addTo('civicrm_contribution_page', $this->_id
, $priceSetId);
657 if (!empty($options)) {
658 $editedFieldParams = array(
659 'price_set_id' => $priceSetId,
660 'name' => 'contribution_amount',
662 $editedResults = array();
664 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
665 if (empty($editedResults['id'])) {
666 $fieldParams['name'] = strtolower(CRM_Utils_String
::munge("Contribution Amount", '_', 245));
669 $fieldParams['id'] = CRM_Utils_Array
::value('id', $editedResults);
672 $fieldParams['price_set_id'] = $priceSetId;
673 $fieldParams['is_active'] = 1;
674 $fieldParams['weight'] = 2;
676 if (!empty($params['is_allow_other_amount'])) {
677 $fieldParams['is_required'] = 0;
680 $fieldParams['is_required'] = 1;
682 $fieldParams['label'] = $params['amount_label'];
683 $fieldParams['html_type'] = 'Radio';
684 $fieldParams['option_label'] = $params['label'];
685 $fieldParams['option_amount'] = $params['value'];
686 $fieldParams['financial_type_id'] = CRM_Utils_Array
::value('financial_type_id', $this->_values
);
687 foreach ($options as $value) {
688 $fieldParams['option_weight'][$value['weight']] = $value['weight'];
690 $fieldParams['default_option'] = $params['default'];
691 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
693 if (!empty($params['is_allow_other_amount']) && empty($params['price_field_other'])) {
694 $editedFieldParams = array(
695 'price_set_id' => $priceSetId,
696 'name' => 'other_amount',
698 $editedResults = array();
700 CRM_Price_BAO_PriceField
::retrieve($editedFieldParams, $editedResults);
702 if (!$priceFieldID = CRM_Utils_Array
::value('id', $editedResults)) {
703 $fieldParams = array(
704 'name' => 'other_amount',
705 'label' => ts('Other Amount'),
706 'price_set_id' => $priceSetId,
707 'html_type' => 'Text',
708 'financial_type_id' => CRM_Utils_Array
::value('financial_type_id', $this->_values
),
709 'is_display_amounts' => 0,
712 $fieldParams['option_weight'][1] = 1;
713 $fieldParams['option_amount'][1] = 1;
714 if (!$noContriAmount) {
715 $fieldParams['is_required'] = 1;
716 $fieldParams['option_label'][1] = $fieldParams['label'] = $params['amount_label'];
719 $fieldParams['is_required'] = 0;
720 $fieldParams['option_label'][1] = $fieldParams['label'] = ts('Other Amount');
723 $priceField = CRM_Price_BAO_PriceField
::create($fieldParams);
726 if (empty($editedResults['is_active'])) {
727 $fieldParams = $editedResults;
728 if (!$noContriAmount) {
729 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
730 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
731 $fieldParams = array(
733 'label' => $params['amount_label'],
734 'id' => $priceFieldID,
737 $fieldParams['is_active'] = 1;
738 $priceField = CRM_Price_BAO_PriceField
::add($fieldParams);
742 elseif (empty($params['is_allow_other_amount']) && !empty($params['price_field_other'])) {
743 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
745 elseif ($priceFieldID = CRM_Utils_Array
::value('price_field_other', $params)) {
746 $priceFieldValueID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldID, 'id', 'price_field_id');
747 if (!$noContriAmount) {
748 $fieldParams = array(
750 'label' => $params['amount_label'],
751 'id' => $priceFieldID,
753 CRM_Price_BAO_PriceField
::add($fieldParams);
754 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', $params['amount_label']);
757 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceField', $priceFieldID, 'is_required', 0);
758 CRM_Core_DAO
::setFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldValueID, 'label', ts('Other Amount'));
763 if (!empty($params['is_pledge_active'])) {
764 $deletePledgeBlk = FALSE;
765 $pledgeBlockParams = array(
766 'entity_id' => $contributionPageID,
767 'entity_table' => ts('civicrm_contribution_page'),
769 if ($this->_pledgeBlockID
) {
770 $pledgeBlockParams['id'] = $this->_pledgeBlockID
;
772 $pledgeBlock = array(
773 'pledge_frequency_unit',
775 'initial_reminder_day',
776 'additional_reminder_day',
778 'is_pledge_start_date_visible',
779 'is_pledge_start_date_editable',
781 foreach ($pledgeBlock as $key) {
782 $pledgeBlockParams[$key] = CRM_Utils_Array
::value($key, $params);
784 $pledgeBlockParams['is_pledge_interval'] = CRM_Utils_Array
::value('is_pledge_interval',
787 $pledgeBlockParams['pledge_start_date'] = CRM_Utils_Array
::value('pledge_start_date',
790 // create pledge block.
791 CRM_Pledge_BAO_PledgeBlock
::create($pledgeBlockParams);
796 if (!empty($params['price_field_id']) ||
!empty($params['price_field_other'])) {
797 $usedPriceSetId = CRM_Price_BAO_PriceSet
::getFor('civicrm_contribution_page', $this->_id
, 3);
798 if ($usedPriceSetId) {
799 if (!empty($params['price_field_id'])) {
800 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_id'], '0');
802 if (!empty($params['price_field_other'])) {
803 CRM_Price_BAO_PriceField
::setIsActive($params['price_field_other'], '0');
807 $deleteAmountBlk = TRUE;
808 $deletePriceSet = TRUE;
813 // delete pledge block.
814 if ($deletePledgeBlk) {
815 CRM_Pledge_BAO_PledgeBlock
::deletePledgeBlock($this->_pledgeBlockID
);
818 // delete previous price set.
819 if ($deletePriceSet) {
820 CRM_Price_BAO_PriceSet
::removeFrom('civicrm_contribution_page', $contributionPageID);
823 if ($deleteAmountBlk) {
824 $priceField = !empty($params['price_field_id']) ?
$params['price_field_id'] : CRM_Utils_Array
::value('price_field_other', $params);
826 $priceSetID = CRM_Core_DAO
::getFieldValue('CRM_Price_DAO_PriceField', $priceField, 'price_set_id');
827 CRM_Price_BAO_PriceSet
::setIsQuickConfig($priceSetID, 0);
831 parent
::endPostProcess();
835 * Return a descriptive name for the page, used in wizard header
839 public function getTitle() {
840 return ts('Amounts');