Cannot use search builder on multiple Grant and Case types
authorjitendrapurohit <jitendra.purohit@webaccessglobal.com>
Thu, 13 Nov 2014 11:23:17 +0000 (16:53 +0530)
committerjitendrapurohit <jitendra.purohit@webaccessglobal.com>
Thu, 13 Nov 2014 11:23:17 +0000 (16:53 +0530)
CRM/Case/BAO/Query.php
CRM/Contact/Form/Search/Builder.php
CRM/Core/BAO/Mapping.php
CRM/Grant/BAO/Query.php
api/v3/Case.php
api/v3/Grant.php
templates/CRM/Grant/Form/Search/Common.tpl

index fa25990ade70e3beb824a1b672eaae09ec5b9b00..bb4b7ba1f8dfc1daaab48cc42a5f2c21e8562409 100644 (file)
@@ -260,7 +260,7 @@ class CRM_Case_BAO_Query {
       case 'case_status_id':
         $statuses = CRM_Case_PseudoConstant::caseStatus();
         // Standardize input from checkboxes or single value
-        if (is_array($value)) {
+        if (is_array($value) && $query->_mode == CRM_Contact_BAO_Query::MODE_CASE) {
           $value = array_keys($value, 1);
         }
         foreach ((array) $value as $k) {
@@ -275,12 +275,16 @@ class CRM_Case_BAO_Query {
         }
         if ($val) {
           $query->_where[$grouping][] = "civicrm_case.status_id IN (" . implode(',', $val) . ")";
-          $query->_qill[$grouping][] = ts('Case Status is %1', array(1 => implode(' ' . ts('or') . ' ', $names)));
-          $query->_tables['civicrm_case'] = $query->_whereTables['civicrm_case'] = 1;
         }
+        else {
+          $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_case.status_id', $op, $value, "Integer");
+        }
+        $query->_qill[$grouping][] = ts('Case Status is %1', array(1 => implode(' ' . ts('or') . ' ', $names)));
+        $query->_tables['civicrm_case'] = $query->_whereTables['civicrm_case'] = 1;
         return;
 
       case 'case_type_id':
+      case 'case_type':
         $caseTypes = CRM_Case_PseudoConstant::caseType('title', FALSE);
 
         if (is_array($value)) {
@@ -300,7 +304,12 @@ class CRM_Case_BAO_Query {
           $names[] = $caseTypes[$caseTypeId];
         }
 
-        $query->_where[$grouping][] = "(civicrm_case.case_type_id IN (" . implode(',', $val) . "))";
+        if ($val) {
+          $query->_where[$grouping][] = "(civicrm_case.case_type_id IN (" . implode(',', $val) . "))";
+        }
+        else {
+          $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_case.case_type_id', $op, $value, "Integer");
+        }
 
         $query->_qill[$grouping][] = ts('Case Type is %1', array(1 => implode(' ' . ts('or') . ' ', $names)));
         $query->_tables['civicrm_case'] = $query->_whereTables['civicrm_case'] = 1;
index 380d04a2696cb1f24b6df0a52a7de8fc0b65c6ce..8a5df7fb78f8d81d6bdb75cee5fa2b6034942436 100644 (file)
@@ -443,7 +443,7 @@ class CRM_Contact_Form_Search_Builder extends CRM_Contact_Form_Search {
       'member_is_pay_later' => 'yesno',
       'is_override' => 'yesno',
     );
-    $entities = array('contact', 'address', 'activity', 'participant', 'pledge', 'member', 'contribution');
+    $entities = array('contact', 'address', 'activity', 'participant', 'pledge', 'member', 'contribution', 'case', 'grant');
     CRM_Contact_BAO_Query_Hook::singleton()->alterSearchBuilderOptions($entities, $options);
     foreach ($entities as $entity) {
       $fields = civicrm_api3($entity, 'getfields');
index 7ec58dbafec9c05b28c1a598988d2db5183e4dba..9db15191c21ec10a5434518ac232c7261e88a33a 100644 (file)
@@ -461,6 +461,9 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping {
       if (CRM_Core_Permission::access('CiviGrant')) {
         $fields['Grant'] = CRM_Grant_BAO_Grant::exportableFields();
         unset($fields['Grant']['grant_contact_id']);
+        if ($mappingType == 'Search Builder') {
+          unset($fields['Grant']['grant_type_id']);
+        }
         $compArray['Grant'] = ts('Grant');
       }
     }
index 0854220f62466da288a7b23a75c952a3e766798c..7a9aa36d125ca54f7ce9cfd6eb83cf3183ec5627 100644 (file)
@@ -52,7 +52,7 @@ class CRM_Grant_BAO_Query {
    * @access public
    */
   static function select(&$query) {
-    if ($query->_mode & CRM_Contact_BAO_Query::MODE_GRANT) {
+    if (($query->_mode & CRM_Contact_BAO_Query::MODE_GRANT) || !empty($query->_returnProperties)) {
       if (!empty($query->_returnProperties['grant_status_id'])) {
         $query->_select['grant_status_id'] = 'grant_status.id as grant_status_id';
         $query->_element['grant_status'] = 1;
@@ -127,6 +127,7 @@ class CRM_Grant_BAO_Query {
   static function whereClauseSingle(&$values, &$query) {
     $strtolower = function_exists('mb_strtolower') ? 'mb_strtolower' : 'strtolower';
     list($name, $op, $value, $grouping, $wildcard) = $values;
+    $val = $names = array();
     switch ($name) {
       case 'grant_money_transfer_date_low':
       case 'grant_money_transfer_date_high':
@@ -185,29 +186,67 @@ class CRM_Grant_BAO_Query {
         return;
 
       case 'grant_type_id':
+      case 'grant_type':
+        $grantTypes = CRM_Core_OptionGroup::values('grant_type');
+        if (is_array($value)) {
+          foreach ($value as $k => $v) {
+            if ($v) {
+              $val[] = $v;
+            }
+          }
+          if (count($val) > 0) {
+            // Overwrite $value so it works with an IN where statement.
+            $op = 'IN';
+            $value = '(' . implode(',', $val) . ')';
+          }
+        }
+        if (!empty($val)) {
+          foreach($val as $id) {
+            $names[] = CRM_Utils_Array::value($id, $grantTypes);
+          }
+        }
+        else {
+          if (!empty($value)) {
+            $names[] = $grantTypes[$value];
+          }
+        }
 
-        $value = $strtolower(CRM_Core_DAO::escapeString(trim($value)));
-
-        $query->_where[$grouping][] = "civicrm_grant.grant_type_id $op '{$value}'";
+        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_grant.grant_type_id', $op, $value, "Integer");
 
-        $grantTypes = CRM_Core_OptionGroup::values('grant_type');
-        $value = $grantTypes[$value];
-        $query->_qill[$grouping][] = ts('Grant Type %2 %1', array(1 => $value, 2 => $op));
+        $query->_qill[$grouping][] = ts('Grant Type %2 %1', array(1 => implode(' ' . ts('or') . ' ', $names), 2 => $op));
         $query->_tables['civicrm_grant'] = $query->_whereTables['civicrm_grant'] = 1;
 
         return;
 
       case 'grant_status_id':
-
-        $value = $strtolower(CRM_Core_DAO::escapeString(trim($value)));
-
-        $query->_where[$grouping][] = "civicrm_grant.status_id $op '{$value}'";
-
-
+      case 'grant_status':
         $grantStatus = CRM_Core_OptionGroup::values('grant_status');
-        $value = $grantStatus[$value];
+        if (is_array($value)) {
+          foreach ($value as $k => $v) {
+            if ($v) {
+              $val[] = $v;
+            }
+          }
+          if (count($val) > 0) {
+            // Overwrite $value so it works with an IN where statement.
+            $op = 'IN';
+            $value = '(' . implode(',', $val) . ')';
+          }
+        }
+        if (!empty($val)) {
+          foreach($val as $id) {
+            $names[] = CRM_Utils_Array::value($id, $grantStatus);
+          }
+        }
+        else {
+          if (!empty($value)) {
+            $names[] = $grantStatus[$value];
+          }
+        }
+
+        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_grant.status_id', $op, $value, "Integer");
 
-        $query->_qill[$grouping][] = ts('Grant Status %2 %1', array(1 => $value, 2 => $op));
+        $query->_qill[$grouping][] = ts('Grant Status %2 %1', array(1 => implode(' ' . ts('or') . ' ', $names), 2 => $op));
         $query->_tables['civicrm_grant'] = $query->_whereTables['civicrm_grant'] = 1;
 
         return;
@@ -326,15 +365,13 @@ class CRM_Grant_BAO_Query {
   static function buildSearchForm(&$form) {
 
     $grantType = CRM_Core_OptionGroup::values('grant_type');
-    $form->add('select', 'grant_type_id', ts('Grant Type'),
-      array('' => ts('- any -')) + $grantType,
-      FALSE, array('class' => 'crm-select2')
+    $form->add('select', 'grant_type_id', ts('Grant Type'), $grantType, FALSE,
+      array('id' => 'grant_type_id', 'multiple' => 'multiple', 'class' => 'crm-select2')
     );
 
     $grantStatus = CRM_Core_OptionGroup::values('grant_status');
-    $form->add('select', 'grant_status_id', ts('Grant Status'),
-      array('' => ts('- any -')) + $grantStatus,
-      FALSE, array('class' => 'crm-select2')
+    $form->add('select', 'grant_status_id', ts('Grant Status'), $grantStatus, FALSE,
+      array('id' => 'grant_status_id', 'multiple' => 'multiple', 'class' => 'crm-select2')
     );
 
     $form->addDate('grant_application_received_date_low', ts('App. Received Date - From'), FALSE, array('formatType' => 'searchDate'));
index d76b1afa240e0fe0644d36325c767709cce9dc02..bd30bd73314055c7ab58220e2e4794c76020fb62 100644 (file)
@@ -147,6 +147,7 @@ function _civicrm_api3_case_create_spec(&$params) {
   $params['contact_id']['title'] = 'Case Client';
   $params['contact_id']['api.required'] = 1;
   $params['status_id']['api.default'] = 1;
+  $params['status_id']['api.aliases'] = array('case_status');
   $params['creator_id']['api.default'] = 'user_contact_id';
   $params['creator_id']['type'] = CRM_Utils_Type::T_INT;
   $params['creator_id']['title'] = 'Case Created By';
index 797e03439ca0e12caff0c8f20f7c6582667e6a04..6bfbf6e94ee1a0ad6583c9cc2b7b446c91b96540 100644 (file)
@@ -60,6 +60,7 @@ function civicrm_api3_grant_create($params) {
  */
 function _civicrm_api3_grant_create_spec(&$params) {
   $params['grant_type_id']['api.required'] = 1;
+  $params['status_id']['api.aliases'] = array('grant_status');
 }
 
 /**
index 12383177cf60ce5dfcabbd902b63c31eecddc7a6..32a2fc52d8795b7c4d3c175df98cd27a775c9e09 100644 (file)
         {$form.grant_report_received.html}
     </td>
     <td>
-        {$form.grant_status_id.label}<br />
+        <label>{ts}Grant Status(s){/ts}</label>
         {$form.grant_status_id.html}
     </td>
     <td>
-        {$form.grant_type_id.label}<br />
+        <label>{ts}Grant Type(s){/ts}</label>
         {$form.grant_type_id.html}
     </td>
 </tr>