Core/dev#692 : Support search arguments to Case Search form
authorMonish Deb <deb.monish@gmail.com>
Tue, 1 Oct 2019 12:51:46 +0000 (18:21 +0530)
committerMonish Deb <deb.monish@gmail.com>
Tue, 1 Oct 2019 13:08:04 +0000 (18:38 +0530)
CRM/Case/BAO/Query.php
CRM/Case/DAO/Case.php
CRM/Case/Form/Search.php
xml/schema/Case/Case.xml

index 3db0adee600152aefe70f4492b3de3d6f7d55cdd..f6b43739758412c0231436c4f3ea680f7661e288 100644 (file)
@@ -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]);
index 9246c0935baf62768a7f9691d7d13b75cd27d9f1..d1fbdc8cf8b8a109e11cfe54152585a4ff0566bc 100644 (file)
@@ -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',
index 1391393294c2b284160a9c5f473d581242a336f4..f65c8d00f86dd5f076ed8253ad279090896c8e7f 100644 (file)
@@ -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;
index 7487fc7b6c782b71246c212d0aa582c42168d46c..04c94c5a7d20bbeeca53fb67a0a0fc9ef953eea4 100644 (file)
@@ -14,6 +14,9 @@
     <import>true</import>
     <title>Case ID</title>
     <comment>Unique Case ID</comment>
+    <html>
+      <type>Text</type>
+    </html>
     <add>1.8</add>
   </field>
   <primaryKey>
     <default>0</default>
     <import>true</import>
     <title>Case Deleted</title>
+    <html>
+      <type>CheckBox</type>
+    </html>
     <add>2.2</add>
   </field>
   <index>