diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index 821de95be1e..acfa2fe381a 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -511,6 +511,9 @@ public function __construct( foreach (array_keys($this->legacyHackedFields) as $fieldName) { $this->_fields[$fieldName]['type'] = CRM_Utils_Type::T_STRING; } + $relationMetadata = CRM_Contact_BAO_Relationship::fields(); + $relationFields = array_intersect_key($relationMetadata, array_fill_keys(['relationship_start_date', 'relationship_end_date'], 1)); + $this->_fields = array_merge($relationFields, $this->_fields); $fields = CRM_Core_Component::getQueryFields(!$this->_skipPermission); unset($fields['note']); @@ -1592,6 +1595,8 @@ public static function convertFormValues(&$formValues, $wildcard = 0, $useEquals 'pledge_create_date_relative', 'pledge_start_date_relative', 'pledge_payment_scheduled_date_relative', + 'relationship_start_date_relative', + 'relationship_end_date_relative', 'membership_join_date_relative', 'membership_start_date_relative', 'membership_end_date_relative', @@ -2017,10 +2022,10 @@ public function whereClauseSingle(&$values, $isForcePrimaryOnly = FALSE) { return; case 'relation_type_id': - case 'relation_start_date_high': - case 'relation_start_date_low': - case 'relation_end_date_high': - case 'relation_end_date_low': + case 'relationship_start_date_high': + case 'relationship_start_date_low': + case 'relationship_end_date_high': + case 'relationship_end_date_low': case 'relation_active_period_date_high': case 'relation_active_period_date_low': case 'relation_target_name': @@ -4374,15 +4379,9 @@ public function addRelationshipPermissionClauses($grouping, &$where) { * not the main query. */ public function addRelationshipDateClauses($grouping, &$where) { - $dateValues = []; - $dateTypes = [ - 'start_date', - 'end_date', - ]; - - foreach ($dateTypes as $dateField) { - $dateValueLow = $this->getWhereValues('relation_' . $dateField . '_low', $grouping); - $dateValueHigh = $this->getWhereValues('relation_' . $dateField . '_high', $grouping); + foreach (['start_date', 'end_date'] as $dateField) { + $dateValueLow = $this->getWhereValues('relationship_' . $dateField . '_low', $grouping); + $dateValueHigh = $this->getWhereValues('relationship_' . $dateField . '_high', $grouping); if (!empty($dateValueLow)) { $date = date('Ymd', strtotime($dateValueLow[2])); $where[$grouping][] = "civicrm_relationship.$dateField >= $date"; diff --git a/CRM/Contact/BAO/SavedSearch.php b/CRM/Contact/BAO/SavedSearch.php index 4215c09b73d..dd6e6b36bef 100644 --- a/CRM/Contact/BAO/SavedSearch.php +++ b/CRM/Contact/BAO/SavedSearch.php @@ -403,8 +403,6 @@ public static function saveRelativeDates(&$queryParams, $formValues) { 'birth_date_relative', 'deceased_date_relative', 'relation_date_relative', - 'relation_start_date_relative', - 'relation_end_date_relative', 'relation_action_date_relative', ]; foreach ($formValues as $id => $value) { diff --git a/CRM/Contact/Form/Search/Criteria.php b/CRM/Contact/Form/Search/Criteria.php index 75c139def31..154331dbe0a 100644 --- a/CRM/Contact/Form/Search/Criteria.php +++ b/CRM/Contact/Form/Search/Criteria.php @@ -265,8 +265,11 @@ public static function getSearchFieldMetadata() { 'contact_tags' => ['name' => 'contact_tags', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'template_grouping' => 'basic'], 'birth_date' => ['name' => 'birth_date', 'template_grouping' => 'demographic'], 'deceased_date' => ['name' => 'deceased_date', 'template_grouping' => 'demographic'], + 'relationship_start_date' => ['name' => 'relationship_start_date', 'template_grouping' => 'relationship'], + 'relationship_end_date' => ['name' => 'relationship_end_date', 'template_grouping' => 'relationship'], ]; - $metadata = civicrm_api3('Contact', 'getfields', [])['values']; + $metadata = civicrm_api3('Relationship', 'getfields', [])['values']; + $metadata = array_merge($metadata, civicrm_api3('Contact', 'getfields', [])['values']); foreach ($fields as $fieldName => $field) { $fields[$fieldName] = array_merge(CRM_Utils_Array::value($fieldName, $metadata, []), $field); } @@ -509,10 +512,13 @@ public static function task(&$form) { /** * @param CRM_Core_Form_Search $form + * + * @throws \CiviCRM_API3_Exception */ public static function relationship(&$form) { $form->add('hidden', 'hidden_relationship', 1); - + $form->addSearchFieldMetadata(['Relationship' => self::getFilteredSearchFieldMetadata('relationship')]); + $form->addFormFieldsFromMetadata(); $form->add('text', 'relation_description', ts('Description'), ['class' => 'twenty']); $allRelationshipType = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, NULL, NULL, NULL, TRUE); $form->add('select', 'relation_type_id', ts('Relationship Type'), ['' => ts('- select -')] + $allRelationshipType, FALSE, ['multiple' => TRUE, 'class' => 'crm-select2']); @@ -532,9 +538,6 @@ public static function relationship(&$form) { ['id' => 'relation_target_group', 'multiple' => 'multiple', 'class' => 'crm-select2'] ); } - CRM_Core_Form_Date::buildDateRange($form, 'relation_start_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); - CRM_Core_Form_Date::buildDateRange($form, 'relation_end_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); - CRM_Core_Form_Date::buildDateRange($form, 'relation_active_period_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); // Add reltionship dates diff --git a/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl b/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl index 14619c0b581..676c44c2bca 100644 --- a/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl +++ b/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl @@ -60,16 +60,10 @@ - + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="relationship_start_date"} - {include file="CRM/Core/DateRange.tpl" fieldName="relation_start_date" from='_low' to='_high'} - - - - - - {include file="CRM/Core/DateRange.tpl" fieldName="relation_end_date" from='_low' to='_high'} + {include file="CRM/Core/DatePickerRangeWrapper.tpl" fieldName="relationship_end_date"} {help id="id-relationship-active-period" file="CRM/Contact/Form/Search/Advanced.hlp"}