From 1d2bcc8124168a6f3fe843c6680ab189090ce6ae Mon Sep 17 00:00:00 2001 From: monishdeb Date: Thu, 11 Dec 2014 16:14:52 +0530 Subject: [PATCH] =?utf8?q?CRM-15709=20fix=20-=20Searchbuilder=20contactsub?= =?utf8?q?type=20=E2=89=A0=20'value'=20fails?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit https://issues.civicrm.org/jira/browse/CRM-15709 --- CRM/Contact/BAO/Query.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index 017e64e041..df61ba0962 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -2697,33 +2697,40 @@ class CRM_Contact_BAO_Query { */ function contactSubType(&$values) { list($name, $op, $value, $grouping, $wildcard) = $values; - $this->includeContactSubTypes($value, $grouping); + $this->includeContactSubTypes($value, $grouping, $op); } /** * @param $value * @param $grouping */ - function includeContactSubTypes($value, $grouping) { + function includeContactSubTypes($value, $grouping, $op = 'LIKE') { $clause = array(); $alias = "contact_a.contact_sub_type"; + $qillOperators = array('NOT LIKE' => ts('Not Like')) + CRM_Core_SelectValues::getSearchBuilderOperators(); - if (is_array($value)) { + $op = str_replace('IN', 'LIKE', $op); + $op = str_replace('!=', 'NOT LIKE', $op); + + if (strpos($op, 'NULL') !== FALSE || strpos($op, 'EMPTY') !== FALSE) { + $this->_where[$grouping][] = self::buildClause($alias, $op, $value, 'String'); + } + else if (is_array($value)) { foreach ($value as $k => $v) { if (!empty($k)) { - $clause[$k] = "($alias like '%" . CRM_Core_DAO::VALUE_SEPARATOR . CRM_Utils_Type::escape($k, 'String') . CRM_Core_DAO::VALUE_SEPARATOR . "%')"; + $clause[$k] = "($alias $op '%" . CRM_Core_DAO::VALUE_SEPARATOR . CRM_Utils_Type::escape($k, 'String') . CRM_Core_DAO::VALUE_SEPARATOR . "%')"; } } } else { - $clause[$value] = "($alias like '%" . CRM_Core_DAO::VALUE_SEPARATOR . CRM_Utils_Type::escape($value, 'String') . CRM_Core_DAO::VALUE_SEPARATOR . "%')"; + $clause[$value] = "($alias $op '%" . CRM_Core_DAO::VALUE_SEPARATOR . CRM_Utils_Type::escape($value, 'String') . CRM_Core_DAO::VALUE_SEPARATOR . "%')"; } if (!empty($clause)) { $this->_where[$grouping][] = "( " . implode(' OR ', $clause) . " )"; - $this->_qill[$grouping][] = ts('Contact Subtype') . ' - ' . implode(' ' . ts('or') . ' ', array_keys($clause)); } + $this->_qill[$grouping][] = ts('Contact Subtype %1 ', array(1 => $qillOperators[$op])) . implode(' ' . ts('or') . ' ', array_keys($clause)); } /** -- 2.25.1