From 09edd4bd4fb24b519729911b56920a1cd47f8a89 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Tue, 4 Sep 2018 23:24:58 -0400 Subject: [PATCH] Cleanup pledge form to use datepicker --- CRM/Core/Form/Renderer.php | 26 ++++++++ CRM/Pledge/Form/Pledge.php | 88 +++++++--------------------- templates/CRM/Pledge/Form/Pledge.tpl | 26 +++----- 3 files changed, 54 insertions(+), 86 deletions(-) diff --git a/CRM/Core/Form/Renderer.php b/CRM/Core/Form/Renderer.php index 435506661f..18956001b7 100644 --- a/CRM/Core/Form/Renderer.php +++ b/CRM/Core/Form/Renderer.php @@ -123,6 +123,9 @@ class CRM_Core_Form_Renderer extends HTML_QuickForm_Renderer_ArraySmarty { elseif ($element->getAttribute('type') == 'text' && $element->getAttribute('data-select-params')) { $this->renderFrozenSelect2($el, $element); } + elseif ($element->getAttribute('type') == 'text' && $element->getAttribute('data-crm-datepicker')) { + $this->renderFrozenDatepicker($el, $element); + } elseif ($element->getAttribute('type') == 'text' && $element->getAttribute('formatType')) { list($date, $time) = CRM_Utils_Date::setDateDefaults($element->getValue(), $element->getAttribute('formatType'), $element->getAttribute('format'), $element->getAttribute('timeformat')); $date .= ($element->getAttribute('timeformat')) ? " $time" : ''; @@ -259,6 +262,29 @@ class CRM_Core_Form_Renderer extends HTML_QuickForm_Renderer_ArraySmarty { $field->setValue(implode(',', $val)); } + /** + * Render datepicker as text. + * + * @param array $el + * @param HTML_QuickForm_element $field + */ + public function renderFrozenDatepicker(&$el, $field) { + $settings = json_decode($field->getAttribute('data-crm-datepicker'), TRUE); + $settings += ['date' => TRUE, 'time' => TRUE]; + $val = $field->getValue(); + if ($val) { + $dateFormat = NULL; + if (!$settings['time']) { + $val = substr($val, 0, 10); + } + elseif (!$settings['date']) { + $dateFormat = Civi::settings()->get('dateformatTime'); + } + $val = CRM_Utils_Date::customFormat($val, $dateFormat); + } + $el['html'] = $val . ''; + } + /** * Render select2 as text. * diff --git a/CRM/Pledge/Form/Pledge.php b/CRM/Pledge/Form/Pledge.php index 3452275ef6..cca00773b4 100644 --- a/CRM/Pledge/Form/Pledge.php +++ b/CRM/Pledge/Form/Pledge.php @@ -127,7 +127,6 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { public function setDefaultValues() { $defaults = $this->_values; - $fields = array(); if ($this->_action & CRM_Core_Action::DELETE) { return $defaults; } @@ -137,25 +136,13 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { } if ($this->_id) { - $startDate = CRM_Utils_Array::value('start_date', $this->_values); - $createDate = CRM_Utils_Array::value('create_date', $this->_values); - list($defaults['start_date']) = CRM_Utils_Date::setDateDefaults($startDate); - list($defaults['create_date']) = CRM_Utils_Date::setDateDefaults($createDate); - - if ($ackDate = CRM_Utils_Array::value('acknowledge_date', $this->_values)) { - list($defaults['acknowledge_date']) = CRM_Utils_Date::setDateDefaults($ackDate); - } - // check is this pledge pending. // fix the display of the monetary value, CRM-4038. if ($this->_isPending) { $defaults['eachPaymentAmount'] = $this->_values['amount'] / $this->_values['installments']; $defaults['eachPaymentAmount'] = CRM_Utils_Money::format($defaults['eachPaymentAmount'], NULL, '%a'); } - else { - $this->assign('start_date', $startDate); - $this->assign('create_date', $createDate); - } + // fix the display of the monetary value, CRM-4038 if (isset($this->_values['amount'])) { $defaults['amount'] = CRM_Utils_Money::format($this->_values['amount'], NULL, '%a'); @@ -165,9 +152,8 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { } else { // default values. - list($now) = CRM_Utils_Date::setDateDefaults(); - $defaults['create_date'] = $now; - $defaults['start_date'] = $now; + $defaults['create_date'] = date('Y-m-d'); + $defaults['start_date'] = date('Y-m-d'); $defaults['installments'] = 12; $defaults['frequency_interval'] = 1; $defaults['frequency_day'] = 1; @@ -277,68 +263,34 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { 'onkeyup' => "calculatedPaymentAmount( );", ); - $currencyFreeze = FALSE; - if ($this->_id && - !$this->_isPending - ) { - $currencyFreeze = TRUE; - } - - $element = $this->addMoney('amount', ts('Total Pledge Amount'), TRUE, + $amount = $this->addMoney('amount', ts('Total Pledge Amount'), TRUE, array_merge($attributes['pledge_amount'], $js), TRUE, - 'currency', NULL, $currencyFreeze + 'currency', NULL, $this->_id && !$this->_isPending ); - if ($this->_id && - !$this->_isPending - ) { - $element->freeze(); - } - - $element = &$this->add('text', 'installments', ts('To be paid in'), + $installments = &$this->add('text', 'installments', ts('To be paid in'), array_merge($attributes['installments'], $js), TRUE ); $this->addRule('installments', ts('Please enter a valid number of installments.'), 'positiveInteger'); - if ($this->_id && - !$this->_isPending - ) { - $element->freeze(); - } - $element = &$this->add('text', 'frequency_interval', ts('every'), + $frequencyInterval = $this->add('text', 'frequency_interval', ts('every'), $attributes['pledge_frequency_interval'], TRUE ); $this->addRule('frequency_interval', ts('Please enter a number for frequency (e.g. every "3" months).'), 'positiveInteger'); - if ($this->_id && - !$this->_isPending - ) { - $element->freeze(); - } // Fix frequency unit display for use with frequency_interval $freqUnitsDisplay = array(); foreach ($this->_freqUnits as $val => $label) { $freqUnitsDisplay[$val] = ts('%1(s)', array(1 => $label)); } - $element = &$this->add('select', 'frequency_unit', + $frequencyUnit = $this->add('select', 'frequency_unit', ts('Frequency'), array('' => ts('- select -')) + $freqUnitsDisplay, TRUE ); - if ($this->_id && - !$this->_isPending - ) { - $element->freeze(); - } - - $element = &$this->add('text', 'frequency_day', ts('Payments are due on the'), $attributes['frequency_day'], TRUE); + $frequencyDay = $this->add('text', 'frequency_day', ts('Payments are due on the'), $attributes['frequency_day'], TRUE); $this->addRule('frequency_day', ts('Please enter a valid payment due day.'), 'positiveInteger'); - if ($this->_id && - !$this->_isPending - ) { - $element->freeze(); - } $this->add('text', 'eachPaymentAmount', ts('each'), array( 'size' => 10, @@ -347,10 +299,8 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { )); // add various dates - if (!$this->_id || $this->_isPending) { - $this->addDate('create_date', ts('Pledge Made'), TRUE); - $this->addDate('start_date', ts('Payments Start'), TRUE); - } + $createDate = $this->add('datepicker', 'create_date', ts('Pledge Made'), [], TRUE, ['time' => FALSE]); + $startDate = $this->add('datepicker', 'start_date', ts('Payments Start'), [], TRUE, ['time' => FALSE]); if (!empty($this->_values['currency'])) { $this->assign('currency', $this->_values['currency']); @@ -359,12 +309,16 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { $this->assign('currency', $this->_submitValues['currency']); } - if ($this->_id && - !$this->_isPending - ) { + if ($this->_id && !$this->_isPending) { + $amount->freeze(); + $installments->freeze(); + $createDate->freeze(); + $startDate->freeze(); + $frequencyInterval->freeze(); + $frequencyUnit->freeze(); + $frequencyDay->freeze(); $eachPaymentAmount = $this->_values['original_installment_amount']; $this->assign('eachPaymentAmount', $eachPaymentAmount); - $this->assign('hideCalender', TRUE); } if (CRM_Utils_Array::value('status_id', $this->_values) != @@ -378,7 +332,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { $this->add('select', 'from_email_address', ts('Receipt From'), $this->_fromEmails); } - $this->addDate('acknowledge_date', ts('Acknowledgment Date')); + $this->add('datepicker', 'acknowledge_date', ts('Acknowledgment Date'), [], FALSE, ['time' => FALSE]); $this->add('select', 'financial_type_id', ts('Financial Type'), @@ -398,7 +352,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { foreach ($pageIds as $key => $value) { $pledgePages[$value['entity_id']] = $pages[$value['entity_id']]; } - $ele = $this->add('select', 'contribution_page_id', ts('Self-service Payments Page'), + $this->add('select', 'contribution_page_id', ts('Self-service Payments Page'), array('' => ts('- select -')) + $pledgePages ); diff --git a/templates/CRM/Pledge/Form/Pledge.tpl b/templates/CRM/Pledge/Form/Pledge.tpl index 3f64f64d7b..5abd2680c0 100644 --- a/templates/CRM/Pledge/Form/Pledge.tpl +++ b/templates/CRM/Pledge/Form/Pledge.tpl @@ -87,31 +87,18 @@ {ts}This applies to weekly, monthly and yearly payments.{/ts} - {if $form.create_date} {$form.create_date.label} - {include file="CRM/common/jcalendar.tpl" elementName=create_date}
- {/if} - {if $create_date} - - - {$create_date|truncate:10:''|crmDate} - {/if}
- {ts}Date when pledge was made by the contributor.{/ts} + + {$form.create_date.html}
+ {ts}Date when pledge was made by the contributor.{/ts} - {if $form.start_date} {$form.start_date.label} - {include file="CRM/common/jcalendar.tpl" elementName=start_date}
- {/if} - {if $start_date} - - - {$start_date|truncate:10:''|crmDate} - {/if} -
+ + {$form.start_date.html}
{ts}Date of first pledge payment.{/ts} @@ -139,7 +126,8 @@ {$form.acknowledge_date.label} - {include file="CRM/common/jcalendar.tpl" elementName=acknowledge_date}
+ + {$form.acknowledge_date.html}
{ts}Date when an acknowledgment of the pledge was sent.{/ts} -- 2.25.1