From 8e2e771b89f515ec4e0f41f02f93c8b9a5f43c74 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Tue, 18 Oct 2016 19:01:56 +0530 Subject: [PATCH] CRM-19513: Saved search is incorrectly using IN rather than BETWEEN for custom fields for civicrm group cache --- CRM/Contact/BAO/SavedSearch.php | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/CRM/Contact/BAO/SavedSearch.php b/CRM/Contact/BAO/SavedSearch.php index 8c810f6150..67f1c89f6b 100644 --- a/CRM/Contact/BAO/SavedSearch.php +++ b/CRM/Contact/BAO/SavedSearch.php @@ -105,7 +105,13 @@ class CRM_Contact_BAO_SavedSearch extends CRM_Contact_DAO_SavedSearch { $id = CRM_Utils_Array::value(0, $value); $value = CRM_Utils_Array::value(2, $value); if (is_array($value) && in_array(key($value), CRM_Core_DAO::acceptedSQLOperators(), TRUE)) { - $value = CRM_Utils_Array::value(key($value), $value); + $op = key($value); + $value = CRM_Utils_Array::value($op, $value); + if (in_array($op, array('BETWEEN', '>=', '<='))) { + self::decodeRelativeFields($result, $id, $op, $value); + unset($result[$element]); + continue; + } } if (strpos($id, '_date_low') !== FALSE || strpos($id, '_date_high') !== FALSE) { $entityName = strstr($id, '_date', TRUE); @@ -409,4 +415,29 @@ LEFT JOIN civicrm_email ON (contact_a.id = civicrm_email.contact_id AND civicrm_ } } + /** + * Decode relative custom fields (converted by CRM_Contact_BAO_Query->convertCustomRelativeFields(...)) + * into desired formValues + * + * @param array $formValues + * @param string $fieldName + * @param string $op + * @param array|string|int $value + */ + public static function decodeRelativeFields(&$formValues, $fieldName, $op, $value) { + switch ($op) { + case 'BETWEEN': + list($formValues[$fieldName . '_from'], $formValues[$fieldName . '_to']) = $value; + break; + + case '>=': + $formValues[$fieldName . '_from'] = $value; + break; + + case '<=': + $formValues[$fieldName . '_to'] = $value; + break; + } + } + } -- 2.25.1