From cdc8d05f306476f6b90337a99572c490527e4392 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 8 Dec 2014 22:36:46 -0500 Subject: [PATCH] CRM-15495 - Support complex api filters in EntityRef --- CRM/Core/Resources.php | 6 ++++++ js/Common.js | 13 ++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CRM/Core/Resources.php b/CRM/Core/Resources.php index 54cfc95b4f..af9c6932fb 100644 --- a/CRM/Core/Resources.php +++ b/CRM/Core/Resources.php @@ -704,6 +704,12 @@ class CRM_Core_Resources { $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( diff --git a/js/Common.js b/js/Common.js index 02361f6336..15e67649a4 100644 --- a/js/Common.js +++ b/js/Common.js @@ -246,12 +246,12 @@ CRM.strings = CRM.strings || {}; } _.each(options, function(option) { if (option.children) { - rendered += '' + + rendered += '' + CRM.utils.renderOptions(option.children, val, rendered) + ''; } else { var selected = ($.inArray('' + option.key, val) > -1) ? 'selected="selected"' : ''; - rendered += ''; + rendered += ''; } }); return rendered; @@ -419,14 +419,12 @@ CRM.strings = CRM.strings || {}; else { selectParams.formatInputTooShort = function() { var txt = $el.data('select-params').formatInputTooShort || $.fn.select2.defaults.formatInputTooShort.call(this); - txt += renderEntityRefFilters($el); - txt += renderEntityRefCreateLinks($el); + txt += renderEntityRefFilters($el) + renderEntityRefCreateLinks($el); return txt; }; selectParams.formatNoMatches = function() { var txt = $el.data('select-params').formatNoMatches || $.fn.select2.defaults.formatNoMatches; - txt += renderEntityRefFilters($el); - txt += renderEntityRefCreateLinks($el); + txt += renderEntityRefFilters($el) + renderEntityRefCreateLinks($el); return txt; }; $el.on('select2-open.crmEntity', function() { @@ -493,7 +491,8 @@ CRM.strings = CRM.strings || {}; combined.params.contact_type = filter.value.split('.')[0]; combined.params.contact_sub_type = filter.value.split('.')[1]; } else { - combined.params[filter.key] = filter.value; + // Allow json-encoded api filters e.g. {"BETWEEN":[123,456]} + combined.params[filter.key] = filter.value.charAt(0) === '{' ? $.parseJSON(filter.value) : filter.value; } } return combined; -- 2.25.1