Skip to content

Commit

Permalink
[Date picker][REF] Convert jcalendar date fields to date picker on me…
Browse files Browse the repository at this point in the history
…mber search screen

Ensure that relative fields are handled as per newer handling
  • Loading branch information
seamuslee001 committed Sep 1, 2019
1 parent 2f243ec commit 987238f
Show file tree
Hide file tree
Showing 11 changed files with 86 additions and 106 deletions.
8 changes: 7 additions & 1 deletion CRM/Contact/BAO/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -1584,7 +1584,13 @@ public static function convertFormValues(&$formValues, $wildcard = 0, $useEquals

self::filterCountryFromValuesIfStateExists($formValues);
// We shouldn't have to whitelist fields to not hack but here we are, for now.
$nonLegacyDateFields = ['participant_register_date_relative', 'receive_date_relative'];
$nonLegacyDateFields = [
'participant_register_date_relative',
'receive_date_relative',
'membership_join_date_relative',
'membership_start_date_relative',
'membership_end_date_relative',
];
// Handle relative dates first
foreach (array_keys($formValues) as $id) {
if (
Expand Down
66 changes: 25 additions & 41 deletions CRM/Member/BAO/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ public static function select(&$query) {
}

//add join date
if (!empty($query->_returnProperties['join_date'])) {
$query->_select['join_date'] = "civicrm_membership.join_date as join_date";
$query->_element['join_date'] = 1;
if (!empty($query->_returnProperties['membership_join_date'])) {
$query->_select['membership_join_date'] = "civicrm_membership.join_date as membership_join_date";
$query->_element['membership_join_date'] = 1;
}

//add source
Expand Down Expand Up @@ -166,7 +166,7 @@ public static function whereClauseSingle(&$values, &$query) {
case 'member_join_date_low':
case 'member_join_date_high':
$query->dateQueryBuilder($values,
'civicrm_membership', 'member_join_date', 'join_date',
'civicrm_membership', 'join_date', 'join_date',
'Member Since'
);
return;
Expand All @@ -177,7 +177,7 @@ public static function whereClauseSingle(&$values, &$query) {
$fldName = str_replace(['_low', '_high'], '', $name);
$query->dateQueryBuilder($values,
'civicrm_membership', $fldName, 'start_date',
'Start Date'
'Membership Start Date'
);
return;

Expand All @@ -187,7 +187,7 @@ public static function whereClauseSingle(&$values, &$query) {
$fldName = str_replace(['_low', '_high'], '', $name);
$query->dateQueryBuilder($values,
'civicrm_membership', $fldName, 'end_date',
'End Date'
'Membership End Date'
);
return;

Expand Down Expand Up @@ -376,6 +376,7 @@ public static function whereClauseSingle(&$values, &$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;

}
}

Expand Down Expand Up @@ -443,7 +444,7 @@ public static function defaultReturnProperties(
'membership_type' => 1,
'member_is_test' => 1,
'member_is_pay_later' => 1,
'join_date' => 1,
'membership_join_date' => 1,
'membership_start_date' => 1,
'membership_end_date' => 1,
'membership_source' => 1,
Expand All @@ -470,12 +471,29 @@ public static function defaultReturnProperties(
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',
Expand All @@ -493,17 +511,6 @@ public static function buildSearchForm(&$form) {
$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);
Expand Down Expand Up @@ -543,27 +550,4 @@ public static function tableNames(&$tables) {
}
}

/**
* 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;
}

}
4 changes: 2 additions & 2 deletions CRM/Member/DAO/Membership.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*
* Generated from xml/schema/CRM/Member/Membership.xml
* DO NOT EDIT. Generated by CRM_Core_CodeGen
* (GenCodeChecksum:40f3b0813c1e13fab544ae1f8fa2ebb3)
* (GenCodeChecksum:97d01bc13256a1dd315a86fb5faea1dc)
*/

/**
Expand Down Expand Up @@ -229,7 +229,7 @@ public static function &fields() {
'labelColumn' => 'name',
],
],
'join_date' => [
'membership_join_date' => [
'name' => 'join_date',
'type' => CRM_Utils_Type::T_DATE,
'title' => ts('Member Since'),
Expand Down
16 changes: 3 additions & 13 deletions CRM/Member/Form/Search.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ public function preProcess() {
}

if ($this->_force) {
$this->addSearchFieldMetadata(['Membership' => CRM_Member_BAO_Query::getSearchFieldMetadata()]);
$this->addFormFieldsFromMetadata();
$this->postProcess();
$this->set('force', 0);
}
Expand Down Expand Up @@ -227,8 +229,7 @@ public function postProcess() {
}

$this->_done = TRUE;

$this->_formValues = $this->controller->exportValues($this->_name);
$this->setFormValues();

$this->fixFormValues();

Expand Down Expand Up @@ -292,17 +293,6 @@ public function postProcess() {
$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.
*
Expand Down
14 changes: 14 additions & 0 deletions CRM/Upgrade/Incremental/php/FiveEighteen.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,20 @@ public function upgrade_5_18_alpha1($rev) {
$this->addTask('Remove Foreign Key from civicrm_dashboard on domain_id if exists', 'removeDomainIDFK');
$this->addTask('Remove Index on domain_id that might have been randomly added in the same format as FK', 'dropIndex', 'civicrm_dashboard', 'FK_civicrm_dashboard_domain_id');
$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' => 'member_join_date', 'new' => 'membership_join_date'],
['old' => 'member_start_date', 'new' => 'membership_start_date'],
['old' => 'member_end_date', 'new' => 'membership_end_date'],
],
]);
$this->addTask('Update smart groups where jcalendar fields have been converted to datepicker', 'updateSmartGroups', [
'datepickerConversion' => [
'membership_join_date',
'membership_end_date',
'membership_start_date',
],
]);
}

public static function removeDomainIDFK() {
Expand Down
65 changes: 25 additions & 40 deletions templates/CRM/Member/Form/Search/Common.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -33,58 +33,43 @@
</tr>

<tr>
<td>
{$form.member_source.label}
<br />{$form.member_source.html}
<p>
{$form.member_test.label} {help id="is-test" file="CRM/Contact/Form/Search/Advanced"} &nbsp;{$form.member_test.html}
</p>
<td>{$form.member_source.label}<br />
{$form.member_source.html}
</td>
<td>
<p>
{$form.membership_is_current_member.label}
{$form.membership_is_current_member.label}<br />
{$form.membership_is_current_member.html}
</p>
<p>
{$form.member_is_primary.label}
{help id="id-member_is_primary" file="CRM/Member/Form/Search.hlp"}
{$form.member_is_primary.html}
</p>
<p>
{$form.member_pay_later.label}&nbsp;{$form.member_pay_later.html}
</p>
<p>
{if $form.member_auto_renew}
<label>{$form.member_auto_renew.label}</label>
{help id="id-member_auto_renew" file="CRM/Member/Form/Search.hlp"}
<br/>
{$form.member_auto_renew.html}
{/if}
</p>
<p>
{$form.member_is_override.label}
{help id="id-member_is_override" file="CRM/Member/Form/Search.hlp"}
{$form.member_is_override.html}
</p>
</td>
</tr>

<tr>
<td>{$form.member_test.label} {help id="is-test" file="CRM/Contact/Form/Search/Advanced"} &nbsp;{$form.member_test.html}
</td>
<td>
{$form.member_is_primary.label} {help id="id-member_is_primary" file="CRM/Member/Form/Search.hlp"} {$form.member_is_primary.html}
</td>
</tr>
<tr><td><label>{$form.membership_id.label}</label> {$form.membership_id.html}</td>
<td>{$form.member_pay_later.label}&nbsp;{$form.member_pay_later.html}</td>
</tr>

<tr><td><label>{ts}Member Since{/ts}</label></td></tr>
<tr>
{include file="CRM/Core/DateRange.tpl" fieldName="member_join_date" from='_low' to='_high'}
<td>
{if $form.member_auto_renew}
<label>{$form.member_auto_renew.label}</label>
{help id="id-member_auto_renew" file="CRM/Member/Form/Search.hlp"}
<br/>
{$form.member_auto_renew.html}
{/if}
</td>
<td>{$form.member_is_override.label}{help id="id-member_is_override" file="CRM/Member/Form/Search.hlp"}{$form.member_is_override.html}</td>
</tr>

<tr><td><label>{ts}Start Date{/ts}</label></td></tr>
<tr>
{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'}
</tr>
<tr>
{include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="membership_start_date" colspan='2'}
</tr>

<tr><td><label>{ts}End Date{/ts}</label></td></tr>
<tr>
{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'}
</tr>

{* campaign in membership search *}
Expand Down
8 changes: 4 additions & 4 deletions tests/phpunit/CRM/Core/BAO/UFFieldTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public function testGetAvailable_byGid() {
'field_type' => 'Participant',
],
[
'field_name' => 'join_date',
'field_name' => 'membership_join_date',
'field_type' => 'Membership',
],
[
Expand Down Expand Up @@ -65,7 +65,7 @@ public function testGetAvailable_byGid() {
$this->assertEquals('participant_role', $fields['Participant']['participant_role']['name']);

// already used
$this->assertFalse(isset($fields['Membership']['join_date']));
$this->assertFalse(isset($fields['Membership']['membership_join_date']));
$this->assertEquals('end_date', $fields['Membership']['membership_end_date']['name']);

// already used
Expand Down Expand Up @@ -130,7 +130,7 @@ public function testGetAvailable_full() {
$this->assertEquals('participant_note', $fields['Participant']['participant_note']['name']);
$this->assertEquals('participant_role', $fields['Participant']['participant_role']['name']);

$this->assertEquals('join_date', $fields['Membership']['join_date']['name']);
$this->assertEquals('join_date', $fields['Membership']['membership_join_date']['name']);
$this->assertEquals('end_date', $fields['Membership']['membership_end_date']['name']);

$this->assertEquals('activity_date_time', $fields['Activity']['activity_date_time']['name']);
Expand Down Expand Up @@ -167,7 +167,7 @@ public function testGetAvailableFlat() {
$this->assertEquals('Participant', $fields['participant_note']['field_type']);
$this->assertEquals('Participant', $fields['participant_role']['field_type']);

$this->assertEquals('Membership', $fields['join_date']['field_type']);
$this->assertEquals('Membership', $fields['membership_join_date']['field_type']);
$this->assertEquals('Membership', $fields['membership_end_date']['field_type']);

$this->assertEquals('Activity', $fields['activity_date_time']['field_type']);
Expand Down
4 changes: 2 additions & 2 deletions tests/phpunit/CRM/Export/BAO/ExportTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1549,7 +1549,7 @@ public function getMembershipReturnProperties() {
'membership_type' => 1,
'member_is_test' => 1,
'member_is_pay_later' => 1,
'join_date' => 1,
'membership_join_date' => 1,
'membership_start_date' => 1,
'membership_end_date' => 1,
'membership_source' => 1,
Expand Down Expand Up @@ -2727,7 +2727,7 @@ public function getMembershipSqlColumns() {
'membership_type' => 'membership_type varchar(128)',
'member_is_test' => 'member_is_test varchar(16)',
'member_is_pay_later' => 'member_is_pay_later varchar(16)',
'join_date' => 'join_date varchar(32)',
'membership_join_date' => 'membership_join_date varchar(32)',
'membership_start_date' => 'membership_start_date varchar(32)',
'membership_end_date' => 'membership_end_date varchar(32)',
'membership_source' => 'membership_source varchar(128)',
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Member/Selector/SearchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public function testSelectorGetRows() {
'contact_type' => '<a href="/index.php?q=civicrm/profile/view&amp;reset=1&amp;gid=7&amp;id=' . $this->_contactID . '&amp;snippet=4" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
'sort_name' => 'Anderson, Anthony',
'membership_type' => 'General',
'join_date' => date('Y-m-d'),
'membership_join_date' => date('Y-m-d'),
'membership_start_date' => date('Y-m-d'),
'membership_end_date' => $membership['end_date'],
'membership_source' => 'Payment',
Expand Down
4 changes: 2 additions & 2 deletions tests/phpunit/api/v3/UtilsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -254,15 +254,15 @@ public function test_civicrm_api3_validate_fields_membership() {
'start_date' => '2010-12-20',
'end_date' => '',
'membership_end_date' => '0',
'join_date' => '2010-12-20',
'membership_join_date' => '2010-12-20',
'membership_start_date' => '2010-12-20',
];
$fields = civicrm_api3('Membership', 'getfields', ['action' => 'get']);
_civicrm_api3_validate_fields('Membership', 'get', $params, $fields['values']);
$this->assertEquals('2010-12-20', $params['start_date']);
$this->assertEquals('20101220000000', $params['membership_start_date']);
$this->assertEquals('', $params['end_date']);
$this->assertEquals('20101220000000', $params['join_date'], 'join_date not set in line ' . __LINE__);
$this->assertEquals('20101220000000', $params['membership_join_date'], 'join_date not set in line ' . __LINE__);
}

public function test_civicrm_api3_validate_fields_event() {
Expand Down
1 change: 1 addition & 0 deletions xml/schema/Member/Membership.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
<title>Member Since</title>
<type>date</type>
<import>true</import>
<uniqueName>membership_join_date</uniqueName>
<headerPattern>/^join|(j(oin\s)?date)$/i</headerPattern>
<dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern>
<comment>Beginning of initial membership period (member since...).</comment>
Expand Down

0 comments on commit 987238f

Please sign in to comment.