From 1157f03f52b742b3a2cd04b631eb49e54edce4ed Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Fri, 5 Jul 2019 02:11:21 +1000 Subject: [PATCH] Convert contribution_recur dates to datepicker from jcalendar Handle unique title in whereclauseSingle as well --- CRM/Contribute/BAO/ContributionRecur.php | 38 ++++++++++++++----- CRM/Contribute/BAO/Query.php | 11 ++---- CRM/Contribute/Form/Search.php | 4 ++ CRM/Core/Form/Search.php | 8 +++- CRM/Upgrade/Incremental/php/FiveSeventeen.php | 20 ++++++++++ .../Form/Search/ContributionRecur.tpl | 36 ++++++------------ templates/CRM/Core/DatePickerRange.tpl | 4 +- templates/CRM/Core/DatePickerRangeWrapper.tpl | 3 +- 8 files changed, 78 insertions(+), 46 deletions(-) diff --git a/CRM/Contribute/BAO/ContributionRecur.php b/CRM/Contribute/BAO/ContributionRecur.php index b87dba3494..c6197f14ce 100644 --- a/CRM/Contribute/BAO/ContributionRecur.php +++ b/CRM/Contribute/BAO/ContributionRecur.php @@ -725,14 +725,13 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) */ public static function recurringContribution(&$form) { // Recurring contribution fields - foreach (self::getRecurringFields() as $key => $label) { + foreach (self::getRecurringFields() as $key) { if ($key == 'contribution_recur_payment_made' && !empty($form->_formValues) && !CRM_Utils_System::isNull(CRM_Utils_Array::value($key, $form->_formValues)) ) { $form->assign('contribution_recur_pane_open', TRUE); break; } - CRM_Core_Form_Date::buildDateRange($form, $key, 1, '_low', '_high'); // If data has been entered for a recurring field, tell the tpl layer to open the pane if (!empty($form->_formValues) && !empty($form->_formValues[$key . '_relative']) || !empty($form->_formValues[$key . '_low']) || !empty($form->_formValues[$key . '_high'])) { $form->assign('contribution_recur_pane_open', TRUE); @@ -770,6 +769,25 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) } + /** + * Get the metadata for fields to be included on the search form. + * + * @throws \CiviCRM_API3_Exception + */ + public static function getContributionRecurSearchFieldMetadata() { + $fields = [ + 'contribution_recur_start_date', + 'contribution_recur_next_sched_contribution_date', + 'contribution_recur_cancel_date', + 'contribution_recur_end_date', + 'contribution_recur_create_date', + 'contribution_recur_modified_date', + 'contribution_recur_failure_retry_date', + ]; + $metadata = civicrm_api3('ContributionRecur', 'getfields', [])['values']; + return array_intersect_key($metadata, array_flip($fields)); + } + /** * Get fields for recurring contributions. * @@ -777,14 +795,14 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) */ public static function getRecurringFields() { return [ - 'contribution_recur_payment_made' => ts(''), - 'contribution_recur_start_date' => ts('Recurring Contribution Start Date'), - 'contribution_recur_next_sched_contribution_date' => ts('Next Scheduled Recurring Contribution'), - 'contribution_recur_cancel_date' => ts('Recurring Contribution Cancel Date'), - 'contribution_recur_end_date' => ts('Recurring Contribution End Date'), - 'contribution_recur_create_date' => ('Recurring Contribution Create Date'), - 'contribution_recur_modified_date' => ('Recurring Contribution Modified Date'), - 'contribution_recur_failure_retry_date' => ts('Failed Recurring Contribution Retry Date'), + 'contribution_recur_payment_made', + 'contribution_recur_start_date', + 'contribution_recur_next_sched_contribution_date', + 'contribution_recur_cancel_date', + 'contribution_recur_end_date', + 'contribution_recur_create_date', + 'contribution_recur_modified_date', + 'contribution_recur_failure_retry_date', ]; } diff --git a/CRM/Contribute/BAO/Query.php b/CRM/Contribute/BAO/Query.php index e5c285e2da..1e160fc352 100644 --- a/CRM/Contribute/BAO/Query.php +++ b/CRM/Contribute/BAO/Query.php @@ -160,13 +160,6 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query { $quoteValue = "\"$value\""; } - $recurrringFields = CRM_Contribute_BAO_ContributionRecur::getRecurringFields(); - unset($recurrringFields['contribution_recur_payment_made']); - foreach ($recurrringFields as $dateField => $dateFieldTitle) { - if (self::buildDateWhere($values, $query, $name, $dateField, $dateFieldTitle)) { - return; - } - } // These are legacy names. // @todo enotices when these are hit so we can start to elimnate them. $fieldAliases = [ @@ -189,9 +182,10 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query { $tableName = CRM_Utils_Array::value('table_name', $fieldSpec, 'civicrm_contribution'); $dataType = CRM_Utils_Type::typeToString(CRM_Utils_Array::value('type', $fieldSpec)); if ($dataType === 'Timestamp' || $dataType === 'Date') { + $title = empty($fieldSpec['unique_title']) ? $fieldSpec['title'] : $fieldSpec['unique_title']; $query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1; $query->dateQueryBuilder($values, - $tableName, $fieldName, $fieldSpec['name'], $fieldSpec['title'] + $tableName, $fieldName, $fieldSpec['name'], $title ); return; } @@ -949,6 +943,7 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query { public static function buildSearchForm(&$form) { $form->addSearchFieldMetadata(['Contribution' => self::getSearchFieldMetadata()]); + $form->addSearchFieldMetadata(['ContributionRecur' => CRM_Contribute_BAO_ContributionRecur::getContributionRecurSearchFieldMetadata()]); $form->addFormFieldsFromMetadata(); $form->add('text', 'contribution_amount_low', ts('From'), ['size' => 8, 'maxlength' => 8]); diff --git a/CRM/Contribute/Form/Search.php b/CRM/Contribute/Form/Search.php index d021b8157b..8b5e310445 100644 --- a/CRM/Contribute/Form/Search.php +++ b/CRM/Contribute/Form/Search.php @@ -109,6 +109,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { // Search field metadata is normally added in buildForm but we are bypassing that in this flow // (I've always found the flow kinda confusing & perhaps that is the problem but this mitigates) $this->addSearchFieldMetadata(['Contribution' => CRM_Contribute_BAO_Query::getSearchFieldMetadata()]); + $this->addSearchFieldMetadata(['ContributionRecur' => CRM_Contribute_BAO_ContributionRecur::getContributionRecurSearchFieldMetadata()]); $this->postProcess(); $this->set('force', 0); } @@ -169,6 +170,9 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { CRM_Core_Error::deprecatedFunctionWarning('pass receive_date_high not end'); } $this->_defaults = parent::setDefaultValues(); + + $this->_defaults = array_merge($this->getEntityDefaults('ContributionRecur'), $this->_defaults); + if (empty($this->_defaults['contribution_status_id']) && !$this->_force) { // In force mode only parameters from the url will be used. When visible/ explicit this is a useful default. $this->_defaults['contribution_status_id'][1] = CRM_Core_PseudoConstant::getKey( diff --git a/CRM/Core/Form/Search.php b/CRM/Core/Form/Search.php index 2957645991..5a4c0db927 100644 --- a/CRM/Core/Form/Search.php +++ b/CRM/Core/Form/Search.php @@ -173,11 +173,15 @@ class CRM_Core_Form_Search extends CRM_Core_Form { foreach ($this->getSearchFieldMetadata() as $entity => $fields) { foreach ($fields as $fieldName => $fieldSpec) { if ($fieldSpec['type'] === CRM_Utils_Type::T_DATE || $fieldSpec['type'] === (CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME)) { - $this->addDatePickerRange($fieldName, $fieldSpec['title'], ($fieldSpec['type'] === (CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME))); + $title = empty($fieldSpec['unique_title']) ? $fieldSpec['title'] : $fieldSpec['unique_title']; + $this->addDatePickerRange($fieldName, $title, ($fieldSpec['type'] === (CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME))); } else { $props = ['entity' => $entity]; - if (isset($fields[$fieldName]['title'])) { + if (isset($fields[$fieldName]['unique_title'])) { + $props['label'] = $fields[$fieldName]['unique_title']; + } + elseif (isset($fields[$fieldName]['title'])) { $props['label'] = $fields[$fieldName]['title']; } $this->addField($fieldName, $props); diff --git a/CRM/Upgrade/Incremental/php/FiveSeventeen.php b/CRM/Upgrade/Incremental/php/FiveSeventeen.php index a5f89158b1..1c59870374 100644 --- a/CRM/Upgrade/Incremental/php/FiveSeventeen.php +++ b/CRM/Upgrade/Incremental/php/FiveSeventeen.php @@ -84,4 +84,24 @@ class CRM_Upgrade_Incremental_php_FiveSeventeen extends CRM_Upgrade_Incremental_ // return TRUE; // } + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_17_alpha1($rev) { + $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev); + $this->addTask('Update smart groups where jcalendar fields have been converted to datepicker', 'updateSmartGroups', [ + 'datepickerConversion' => [ + 'contribution_recur_start_date', + 'contribution_recur_next_sched_contribution_date', + 'contribution_recur_cancel_date', + 'contribution_recur_end_date', + 'contribution_recur_create_date', + 'contribution_recur_modified_date', + 'contribution_recur_failure_retry_date', + ], + ]); + } + } diff --git a/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl b/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl index a0fdaa9baa..2b8393b193 100644 --- a/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl +++ b/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl @@ -35,40 +35,28 @@ {$form.contribution_recur_payment_made.html} - {ts}Start Date{/ts} - - {include file="CRM/Core/DateRange.tpl" fieldName="contribution_recur_start_date" from='_low' to='_high'} - + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="contribution_recur_start_date" colspan="2" hideRelativeLabel=1} - {ts}End Date{/ts} - - {include file="CRM/Core/DateRange.tpl" fieldName="contribution_recur_end_date" from='_low' to='_high'} - + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="contribution_recur_end_date" colspan="2" hideRelativeLabel=1} - {ts}Modified Date{/ts} - - {include file="CRM/Core/DateRange.tpl" fieldName="contribution_recur_modified_date" from='_low' to='_high'} - + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="contribution_recur_modified_date" colspan="2" hideRelativeLabel=1} - {ts}Next Scheduled{/ts} - - {include file="CRM/Core/DateRange.tpl" fieldName="contribution_recur_next_sched_contribution_date" from='_low' to='_high'} - + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="contribution_recur_next_sched_contribution_date" colspan="2" hideRelativeLabel=1} - {ts}Retry Date{/ts} - - {include file="CRM/Core/DateRange.tpl" fieldName="contribution_recur_failure_retry_date" from='_low' to='_high'} - + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="contribution_recur_failure_retry_date" colspan="2" hideRelativeLabel=1} - {ts}Cancel Date{/ts} - - {include file="CRM/Core/DateRange.tpl" fieldName="contribution_recur_cancel_date" from='_low' to='_high'} - + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="contribution_recur_cancel_date" colspan="2" hideRelativeLabel=1} {ts}Status{/ts} diff --git a/templates/CRM/Core/DatePickerRange.tpl b/templates/CRM/Core/DatePickerRange.tpl index 26aca37e0e..b23bf1e591 100644 --- a/templates/CRM/Core/DatePickerRange.tpl +++ b/templates/CRM/Core/DatePickerRange.tpl @@ -28,7 +28,9 @@ {assign var='from' value=$from|default:'_low'} {assign var='to' value=$to|default:'_high'} - {$form.$relativeName.label}
+ {if !$hideRelativeLabel} + {$form.$relativeName.label}
+ {/if} {$form.$relativeName.html}
diff --git a/templates/CRM/Core/DatePickerRangeWrapper.tpl b/templates/CRM/Core/DatePickerRangeWrapper.tpl index 9396375a38..141d9273ce 100644 --- a/templates/CRM/Core/DatePickerRangeWrapper.tpl +++ b/templates/CRM/Core/DatePickerRangeWrapper.tpl @@ -25,5 +25,6 @@ *} {* Wrapper around DatePickerRange TPL file *} - {include file="CRM/Core/DatePickerRange.tpl" fieldName=$fieldName} + {assign var='hideRelativeLabel' value=$hideRelativeLabel|default:0} + {include file="CRM/Core/DatePickerRange.tpl" fieldName=$fieldName hideRelativeLabel=$hideRelativeLabel} -- 2.25.1