From b62aa1887ebe84f9f2570578b343482b129840f7 Mon Sep 17 00:00:00 2001 From: Monish Deb Date: Tue, 1 Oct 2019 18:21:46 +0530 Subject: [PATCH] Core/dev#692 : Support search arguments to Case Search form --- CRM/Case/BAO/Query.php | 46 ++++++++++++++++++++++++++-------------- CRM/Case/DAO/Case.php | 6 ++++++ CRM/Case/Form/Search.php | 22 +++++++------------ xml/schema/Case/Case.xml | 6 ++++++ 4 files changed, 50 insertions(+), 30 deletions(-) diff --git a/CRM/Case/BAO/Query.php b/CRM/Case/BAO/Query.php index 3db0adee60..f6b4373975 100644 --- a/CRM/Case/BAO/Query.php +++ b/CRM/Case/BAO/Query.php @@ -677,6 +677,34 @@ case_relation_type.id = case_relationship.relationship_type_id )"; } } + /** + * Get the metadata for fields to be included on the case search form. + * + * @todo ideally this would be a trait included on the case search & advanced search + * rather than a static function. + */ + public static function getSearchFieldMetadata() { + $fields = ['case_type_id', 'case_status_id', 'case_start_date', 'case_end_date', 'case_subject', 'case_id', 'case_deleted']; + $metadata = civicrm_api3('Case', 'getfields', [])['values']; + $metadata = array_intersect_key($metadata, array_flip($fields)); + $metadata['case_tags'] = [ + 'title' => ts('Case Tag(s)'), + 'type' => CRM_Utils_Type::T_INT, + 'is_pseudofield' => TRUE, + ]; + if (CRM_Core_Permission::check('access all cases and activities')) { + $metadata['case_owner'] = [ + 'title' => ts('Cases'), + 'type' => CRM_Utils_Type::T_INT, + 'is_pseudofield' => TRUE, + ]; + } + if (!CRM_Core_Permission::check('administer CiviCase')) { + unset($metadata['case_deleted']); + } + return $metadata; + } + /** * Add all the elements shared between case search and advanced search. * @@ -687,8 +715,8 @@ case_relation_type.id = case_relationship.relationship_type_id )"; $configured = CRM_Case_BAO_Case::isCaseConfigured(); $form->assign('notConfigured', !$configured['configured']); - $form->addField('case_type_id', ['context' => 'search', 'entity' => 'Case']); - $form->addField('case_status_id', ['context' => 'search', 'entity' => 'Case']); + $form->addSearchFieldMetadata(['Case' => self::getSearchFieldMetadata()]); + $form->addFormFieldsFromMetadata(); CRM_Core_Form_Date::buildDateRange($form, 'case_from', 1, '_start_date_low', '_start_date_high', ts('From'), FALSE); CRM_Core_Form_Date::buildDateRange($form, 'case_to', 1, '_end_date_low', '_end_date_high', ts('From'), FALSE); @@ -719,20 +747,6 @@ case_relation_type.id = case_relationship.relationship_type_id )"; $parentNames = CRM_Core_BAO_Tag::getTagSet('civicrm_case'); CRM_Core_Form_Tag::buildQuickForm($form, $parentNames, 'civicrm_case', NULL, TRUE, FALSE); - if (CRM_Core_Permission::check('administer CiviCase')) { - $form->addElement('checkbox', 'case_deleted', ts('Deleted Cases')); - } - - $form->addElement('text', - 'case_subject', - ts('Case Subject'), - ['class' => 'huge'] - ); - $form->addElement('text', - 'case_id', - ts('Case ID') - ); - self::addCustomFormFields($form, ['Case']); $form->setDefaults(['case_owner' => 1]); diff --git a/CRM/Case/DAO/Case.php b/CRM/Case/DAO/Case.php index 9246c0935b..d1fbdc8cf8 100644 --- a/CRM/Case/DAO/Case.php +++ b/CRM/Case/DAO/Case.php @@ -140,6 +140,9 @@ class CRM_Case_DAO_Case extends CRM_Core_DAO { 'entity' => 'Case', 'bao' => 'CRM_Case_BAO_Case', 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], ], 'case_type_id' => [ 'name' => 'case_type_id', @@ -265,6 +268,9 @@ class CRM_Case_DAO_Case extends CRM_Core_DAO { 'entity' => 'Case', 'bao' => 'CRM_Case_BAO_Case', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + ], ], 'case_created_date' => [ 'name' => 'created_date', diff --git a/CRM/Case/Form/Search.php b/CRM/Case/Form/Search.php index 1391393294..f65c8d00f8 100644 --- a/CRM/Case/Form/Search.php +++ b/CRM/Case/Form/Search.php @@ -63,6 +63,13 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { */ protected $_prefix = 'case_'; + /** + * @return string + */ + public function getDefaultEntity() { + return 'Case'; + } + /** * Processing needed for buildForm and later. */ @@ -204,7 +211,7 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { } $this->_done = TRUE; - $this->_formValues = $this->controller->exportValues($this->_name); + $this->setFormValues(); $this->fixFormValues(); if (isset($this->_ssID) && empty($_POST)) { @@ -314,19 +321,6 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { return TRUE; } - /** - * Set the default form values. - * - * - * @return array - * the default array reference - */ - public function setDefaultValues() { - $defaults = []; - $defaults = $this->_formValues; - return $defaults; - } - public function fixFormValues() { if (!$this->_force) { return; diff --git a/xml/schema/Case/Case.xml b/xml/schema/Case/Case.xml index 7487fc7b6c..04c94c5a7d 100644 --- a/xml/schema/Case/Case.xml +++ b/xml/schema/Case/Case.xml @@ -14,6 +14,9 @@ true Case ID Unique Case ID + + Text + 1.8 @@ -186,6 +189,9 @@ 0 true Case Deleted + + CheckBox + 2.2 -- 2.25.1