Index: branches/RC/core/units/general/helpers/search_helper.php =================================================================== diff -u -r11892 -r11895 --- branches/RC/core/units/general/helpers/search_helper.php (.../search_helper.php) (revision 11892) +++ branches/RC/core/units/general/helpers/search_helper.php (.../search_helper.php) (revision 11895) @@ -1,6 +1,6 @@ Fields[$field_name], 'use_phrases'); $field_options = $object->GetFieldOptions($field_name); + $multiple = array_key_exists('multiple', $field_options) && $field_options['multiple']; + foreach ($field_options['options'] as $key => $val) { foreach ($search_keywords as $keyword => $sign) { $pattern = '#'.$keyword.'#i'; @@ -258,7 +260,8 @@ } if ($sign == '+' || $sign == '') { - $search_keys[$key] = $this->Conn->qstr($key); + // don't add single quotes to found option ids when multiselect (but escape string anyway) + $search_keys[$key] = $multiple ? mysql_real_escape_string($key) : $this->Conn->qstr($key); } elseif($sign == '-') { // if same value if found as exclusive too, then remove from search result @@ -269,7 +272,12 @@ } if ($search_keys) { - $filter_value = $table_name.'`'.$field_name.'` IN ('.implode(',', $search_keys).')'; + if ($multiple) { + $filter_value = $table_name.'`'.$field_name.'` LIKE "%|' . implode('|%" OR ' . $table_name.'`'.$field_name.'` LIKE "%|', $search_keys) . '|%"'; + } + else { + $filter_value = $table_name.'`'.$field_name.'` IN ('.implode(',', $search_keys).')'; + } } $field_processed = true;