CRM-17645 - Add filters for Case entityRef
authorColeman Watts <coleman@civicrm.org>
Thu, 14 Jan 2016 17:17:27 +0000 (12:17 -0500)
committerColeman Watts <coleman@civicrm.org>
Thu, 14 Jan 2016 21:25:36 +0000 (16:25 -0500)
CRM/Core/Resources.php
js/Common.js

index b9ff1e7f3ce77f72a046c6a265ad4f5e16cf9072..b3f41b74fbf90ba8418a7b58370600f8f6844004 100644 (file)
@@ -792,20 +792,32 @@ class CRM_Core_Resources {
    */
   public static function getEntityRefFilters() {
     $filters = array();
+    $config = CRM_Core_Config::singleton();
 
-    $filters['event'] = array(
-      array('key' => 'event_type_id', 'value' => ts('Event Type')),
-      array(
-        'key' => 'start_date',
-        'value' => ts('Start Date'),
-        'options' => array(
-          array('key' => '{">":"now"}', 'value' => ts('Upcoming')),
-          array('key' => '{"BETWEEN":["now - 3 month","now"]}', 'value' => ts('Past 3 Months')),
-          array('key' => '{"BETWEEN":["now - 6 month","now"]}', 'value' => ts('Past 6 Months')),
-          array('key' => '{"BETWEEN":["now - 1 year","now"]}', 'value' => ts('Past Year')),
+    if (in_array('CiviEvent', $config->enableComponents)) {
+      $filters['event'] = array(
+        array('key' => 'event_type_id', 'value' => ts('Event Type')),
+        array(
+          'key' => 'start_date',
+          'value' => ts('Start Date'),
+          'options' => array(
+            array('key' => '{">":"now"}', 'value' => ts('Upcoming')),
+            array(
+              'key' => '{"BETWEEN":["now - 3 month","now"]}',
+              'value' => ts('Past 3 Months'),
+            ),
+            array(
+              'key' => '{"BETWEEN":["now - 6 month","now"]}',
+              'value' => ts('Past 6 Months'),
+            ),
+            array(
+              'key' => '{"BETWEEN":["now - 1 year","now"]}',
+              'value' => ts('Past Year'),
+            ),
+          ),
         ),
-      ),
-    );
+      );
+    }
 
     $filters['activity'] = array(
       array('key' => 'activity_type_id', 'value' => ts('Activity Type')),
@@ -822,6 +834,26 @@ class CRM_Core_Resources {
       array('key' => 'is_deceased', 'value' => ts('Deceased')),
     );
 
+    if (in_array('CiviCase', $config->enableComponents)) {
+      $filters['case'] = array(
+        array(
+          'key' => 'case_id.case_type_id',
+          'value' => ts('Case Type'),
+          'entity' => 'Case',
+        ),
+        array(
+          'key' => 'case_id.status_id',
+          'value' => ts('Case Status'),
+          'entity' => 'Case',
+        ),
+      );
+      foreach ($filters['contact'] as $filter) {
+        $filter += array('entity' => 'contact');
+        $filter['key'] = 'contact_id.' . $filter['key'];
+        $filters['case'][] = $filter;
+      }
+    }
+
     return $filters;
   }
 
index d821767a7738a07c518e635a1d84d2d71347260d..081dfabdead18c9b18b4dd44d060e383e929bd9b 100644 (file)
@@ -586,10 +586,12 @@ if (!CRM.vars) CRM.vars = {};
       combined = _.cloneDeep(params),
       filter = $.extend({}, $el.data('user-filter') || {});
     if (filter.key && filter.value) {
+      // Fieldname may be prefixed with joins
+      var fieldName = _.last(filter.key.split('.'));
       // Special case for contact type/sub-type combo
-      if (filter.key === 'contact_type' && (filter.value.indexOf('__') > 0)) {
-        combined.params.contact_type = filter.value.split('__')[0];
-        combined.params.contact_sub_type = filter.value.split('__')[1];
+      if (fieldName === 'contact_type' && (filter.value.indexOf('__') > 0)) {
+        combined.params[filter.key] = filter.value.split('__')[0];
+        combined.params[filter.key.replace('contact_type', 'contact_sub_type')] = filter.value.split('__')[1];
       } else {
         // Allow json-encoded api filters e.g. {"BETWEEN":[123,456]}
         combined.params[filter.key] = filter.value.charAt(0) === '{' ? $.parseJSON(filter.value) : filter.value;
@@ -871,7 +873,9 @@ if (!CRM.vars) CRM.vars = {};
         CRM.utils.setOptions($valField, filterSpec.options, false, filter.value);
       } else {
         $valField.prop('disabled', true);
-        CRM.api3(filterSpec.entity || $el.data('api-entity'), 'getoptions', {field: filter.key, context: 'search', sequential: 1})
+        // Fieldname may be prefixed with joins - strip those out
+        var fieldName = _.last(filter.key.split('.'));
+        CRM.api3(filterSpec.entity || $el.data('api-entity'), 'getoptions', {field: fieldName, context: 'search', sequential: 1})
           .done(function(result) {
             var entity = $el.data('api-entity').toLowerCase(),
               globalFilterSpec = _.find(CRM.config.entityRef.filters[entity], {key: filter.key}) || {};