From 5f97e97f23f2ba706d05585e128fc40361e598bc Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Sat, 31 Aug 2019 17:09:05 +1000 Subject: [PATCH] [Date picker][REF] Convert jcalendar date fields to date picker on member search screen Ensure that relative fields are handled as per newer handling Update to eileen's metadata date_query functions and fix template Fix upgrade by including each of the 3 separate field names --- CRM/Contact/BAO/Query.php | 3 + CRM/Member/BAO/Query.php | 72 ++++++++++---------- CRM/Member/Form/Search.php | 16 +---- CRM/Upgrade/Incremental/php/FiveEighteen.php | 16 ++++- templates/CRM/Member/Form/Search/Common.tpl | 65 +++++++----------- templates/CRM/Member/Form/Selector.tpl | 2 +- 6 files changed, 84 insertions(+), 90 deletions(-) diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index b34d882dcd..d62f6279d2 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -1591,6 +1591,9 @@ class CRM_Contact_BAO_Query { 'pledge_create_date_relative', 'pledge_start_date_relative', 'pledge_payment_scheduled_date_relative', + 'membership_join_date_relative', + 'membership_start_date_relative', + 'membership_end_date_relative', ]; // Handle relative dates first foreach (array_keys($formValues) as $id) { diff --git a/CRM/Member/BAO/Query.php b/CRM/Member/BAO/Query.php index 0b05a70f0e..d8e0d9b9ea 100644 --- a/CRM/Member/BAO/Query.php +++ b/CRM/Member/BAO/Query.php @@ -161,12 +161,22 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { * @param CRM_Contact_BAO_Query $query */ public static function whereClauseSingle(&$values, &$query) { + if ($query->buildDateRangeQuery($values)) { + // @todo - move this to Contact_Query in or near the call to + // $this->buildRelativeDateQuery($values); + return; + } list($name, $op, $value, $grouping) = $values; switch ($name) { case 'member_join_date_low': case 'member_join_date_high': + Civi::log()->warning( + 'member_join_date field is deprecated please use membership_join_date field instead', + ['civi.tag' => 'deprecated'] + ); + $fldName = str_replace(['_low', '_high'], '', $name); $query->dateQueryBuilder($values, - 'civicrm_membership', 'member_join_date', 'join_date', + 'civicrm_membership', $fldName, 'join_date', 'Member Since' ); return; @@ -174,6 +184,10 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { case 'membership_start_date': case 'member_start_date_low': case 'member_start_date_high': + Civi::log()->warning( + 'member_start_date field is deprecated please use membership_start_date field instead', + ['civi.tag' => 'deprecated'] + ); $fldName = str_replace(['_low', '_high'], '', $name); $query->dateQueryBuilder($values, 'civicrm_membership', $fldName, 'start_date', @@ -184,6 +198,10 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { case 'membership_end_date': case 'member_end_date_low': case 'member_end_date_high': + Civi::log()->warning( + 'member_end_date field is deprecated please use membership_end_date field instead', + ['civi.tag' => 'deprecated'] + ); $fldName = str_replace(['_low', '_high'], '', $name); $query->dateQueryBuilder($values, 'civicrm_membership', $fldName, 'end_date', @@ -376,6 +394,7 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { $query->_qill[$grouping][] = $value ? ts("Membership Status Is Overriden") : ts("Membership Status Is NOT Overriden"); $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1; return; + } } @@ -470,12 +489,29 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { return $properties; } + /** + * Get the metadata for fields to be included on the grant search form. + * + * @throws \CiviCRM_API3_Exception + */ + public static function getSearchFieldMetadata() { + $fields = [ + 'membership_join_date', + 'membership_start_date', + 'membership_end_date', + ]; + $metadata = civicrm_api3('Membership', 'getfields', [])['values']; + return array_intersect_key($metadata, array_flip($fields)); + } + /** * Build the search form. * * @param CRM_Core_Form $form */ public static function buildSearchForm(&$form) { + $form->addSearchFieldMetadata(['Membership' => self::getSearchFieldMetadata()]); + $form->addFormFieldsFromMetadata(); $membershipStatus = CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label', FALSE, FALSE); $form->add('select', 'membership_status_id', ts('Membership Status'), $membershipStatus, FALSE, [ 'id' => 'membership_status_id', @@ -493,17 +529,6 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { $form->addElement('text', 'member_source', ts('Source')); $form->add('number', 'membership_id', ts('Membership ID'), ['class' => 'four', 'min' => 1]); - CRM_Core_Form_Date::buildDateRange($form, 'member_join_date', 1, '_low', '_high', ts('From'), FALSE); - $form->addElement('hidden', 'member_join_date_range_error'); - - CRM_Core_Form_Date::buildDateRange($form, 'member_start_date', 1, '_low', '_high', ts('From'), FALSE); - $form->addElement('hidden', 'member_start_date_range_error'); - - CRM_Core_Form_Date::buildDateRange($form, 'member_end_date', 1, '_low', '_high', ts('From'), FALSE); - $form->addElement('hidden', 'member_end_date_range_error'); - - $form->addFormRule(['CRM_Member_BAO_Query', 'formRule'], $form); - $form->addYesNo('membership_is_current_member', ts('Current Member?'), TRUE); $form->addYesNo('member_is_primary', ts('Primary Member?'), TRUE); $form->addYesNo('member_pay_later', ts('Pay Later?'), TRUE); @@ -543,27 +568,4 @@ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { } } - /** - * Custom form rules. - * - * @param array $fields - * @param array $files - * @param CRM_Core_Form $form - * - * @return bool|array - */ - public static function formRule($fields, $files, $form) { - $errors = []; - - if ((empty($fields['member_join_date_low']) || empty($fields['member_join_date_high'])) && (empty($fields['member_start_date_low']) || empty($fields['member_start_date_high'])) && (empty($fields['member_end_date_low']) || empty($fields['member_end_date_high']))) { - return TRUE; - } - - CRM_Utils_Rule::validDateRange($fields, 'member_join_date', $errors, ts('Member Since')); - CRM_Utils_Rule::validDateRange($fields, 'member_start_date', $errors, ts('Start Date')); - CRM_Utils_Rule::validDateRange($fields, 'member_end_date', $errors, ts('End Date')); - - return empty($errors) ? TRUE : $errors; - } - } diff --git a/CRM/Member/Form/Search.php b/CRM/Member/Form/Search.php index 8eba67bfa9..3d7afe8ffc 100644 --- a/CRM/Member/Form/Search.php +++ b/CRM/Member/Form/Search.php @@ -95,6 +95,8 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { } if ($this->_force) { + $this->addSearchFieldMetadata(['Membership' => CRM_Member_BAO_Query::getSearchFieldMetadata()]); + $this->addFormFieldsFromMetadata(); $this->postProcess(); $this->set('force', 0); } @@ -227,8 +229,7 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { } $this->_done = TRUE; - - $this->_formValues = $this->controller->exportValues($this->_name); + $this->setFormValues(); $this->fixFormValues(); @@ -292,17 +293,6 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { $controller->run(); } - /** - * Set default values. - * - * @todo - can this function override be removed? - * - * @return array - */ - public function setDefaultValues() { - return $this->_defaults; - } - /** * If this search has been forced then see if there are any get values, and if so over-ride the post values. * diff --git a/CRM/Upgrade/Incremental/php/FiveEighteen.php b/CRM/Upgrade/Incremental/php/FiveEighteen.php index ab974478ca..879b4aa240 100644 --- a/CRM/Upgrade/Incremental/php/FiveEighteen.php +++ b/CRM/Upgrade/Incremental/php/FiveEighteen.php @@ -84,7 +84,18 @@ class CRM_Upgrade_Incremental_php_FiveEighteen extends CRM_Upgrade_Incremental_B $this->addTask('Re-Create Foreign key between civicrm_dashboard and civicrm_domain correctly', 'recreateDashboardFK'); $this->addTask('Update smart groups to rename filters on pledge_payment_date to pledge_payment_scheduled_date', 'updateSmartGroups', [ 'renameField' => [ - ['old' => 'pledge_payment_date', 'new' => 'pledge_payment_scheduled_date'], + ['old' => 'pledge_payment_date_relative', 'new' => 'pledge_payment_scheduled_date_relative'], + ['old' => 'pledge_payment_date_high', 'new' => 'pledge_payment_scheduled_date_high'], + ['old' => 'pledge_payment_date_low', 'new' => 'pledge_payment_scheduled_date_low'], + ['old' => 'member_join_date_relative', 'new' => 'membership_join_date_relative'], + ['old' => 'member_join_date_high', 'new' => 'membership_join_date_high'], + ['old' => 'member_join_date_low', 'new' => 'membership_join_date_low'], + ['old' => 'member_start_date_relative', 'new' => 'membership_start_date_relative'], + ['old' => 'member_start_date_high', 'new' => 'membership_start_date_high'], + ['old' => 'member_start_date_low', 'new' => 'membership_start_date_low'], + ['old' => 'member_end_date_relative', 'new' => 'membership_end_date_relative'], + ['old' => 'member_end_date_high', 'new' => 'membership_end_date_high'], + ['old' => 'member_end_date_low', 'new' => 'membership_end_date_low'], ], ]); $this->addTask('Update smart groups where jcalendar fields have been converted to datepicker', 'updateSmartGroups', [ @@ -93,6 +104,9 @@ class CRM_Upgrade_Incremental_php_FiveEighteen extends CRM_Upgrade_Incremental_B 'pledge_create_date', 'pledge_end_date', 'pledge_start_date', + 'membership_join_date', + 'membership_end_date', + 'membership_start_date', ], ]); $this->addTask('Update civicrm_mapping_field and civicrm_uf_field for change in join_date name', 'updateJoinDateMappingUF'); diff --git a/templates/CRM/Member/Form/Search/Common.tpl b/templates/CRM/Member/Form/Search/Common.tpl index 38d8b78b37..79592f9859 100644 --- a/templates/CRM/Member/Form/Search/Common.tpl +++ b/templates/CRM/Member/Form/Search/Common.tpl @@ -33,58 +33,43 @@ - - {$form.member_source.label} -
{$form.member_source.html} -

- {$form.member_test.label} {help id="is-test" file="CRM/Contact/Form/Search/Advanced"}  {$form.member_test.html} -

+ {$form.member_source.label}
+ {$form.member_source.html} -

- {$form.membership_is_current_member.label} + {$form.membership_is_current_member.label}
{$form.membership_is_current_member.html} -

-

- {$form.member_is_primary.label} - {help id="id-member_is_primary" file="CRM/Member/Form/Search.hlp"} - {$form.member_is_primary.html} -

-

- {$form.member_pay_later.label} {$form.member_pay_later.html} -

-

- {if $form.member_auto_renew} - - {help id="id-member_auto_renew" file="CRM/Member/Form/Search.hlp"} -
- {$form.member_auto_renew.html} - {/if} -

-

- {$form.member_is_override.label} - {help id="id-member_is_override" file="CRM/Member/Form/Search.hlp"} - {$form.member_is_override.html} -

- + + {$form.member_test.label} {help id="is-test" file="CRM/Contact/Form/Search/Advanced"}  {$form.member_test.html} + + + {$form.member_is_primary.label} {help id="id-member_is_primary" file="CRM/Member/Form/Search.hlp"} {$form.member_is_primary.html} + + {$form.membership_id.html} + {$form.member_pay_later.label} {$form.member_pay_later.html} - - -{include file="CRM/Core/DateRange.tpl" fieldName="member_join_date" from='_low' to='_high'} + + {if $form.member_auto_renew} + + {help id="id-member_auto_renew" file="CRM/Member/Form/Search.hlp"} +
+ {$form.member_auto_renew.html} + {/if} + + {$form.member_is_override.label}{help id="id-member_is_override" file="CRM/Member/Form/Search.hlp"}{$form.member_is_override.html} - - -{include file="CRM/Core/DateRange.tpl" fieldName="member_start_date" from='_low' to='_high'} + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="membership_join_date" colspan='2'} + + + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="membership_start_date" colspan='2'} - - -{include file="CRM/Core/DateRange.tpl" fieldName="member_end_date" from='_low' to='_high'} + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="membership_end_date" colspan='2'} {* campaign in membership search *} diff --git a/templates/CRM/Member/Form/Selector.tpl b/templates/CRM/Member/Form/Selector.tpl index cfd4dc1ff9..f33db8e4a6 100644 --- a/templates/CRM/Member/Form/Selector.tpl +++ b/templates/CRM/Member/Form/Selector.tpl @@ -62,7 +62,7 @@ {$row.membership_type}{if $row.is_test} ({ts}test{/ts}){/if} {if $row.owner_membership_id}
({ts}by relationship{/ts}){/if} - {$row.join_date|truncate:10:''|crmDate} + {$row.membership_join_date|truncate:10:''|crmDate} {$row.membership_start_date|truncate:10:''|crmDate} {$row.membership_end_date|truncate:10:''|crmDate} {$row.membership_source} -- 2.25.1