CRM-15061 - Add multivalue support for autocomplete fields
authorColeman Watts <coleman@civicrm.org>
Tue, 5 Aug 2014 16:21:32 +0000 (17:21 +0100)
committerColeman Watts <coleman@civicrm.org>
Wed, 13 Aug 2014 09:24:27 +0000 (10:24 +0100)
CRM/Core/BAO/CustomField.php
CRM/Core/BAO/CustomQuery.php

index 102ac39085978bddfed5185dbb3cce3c5813e194..d96ddfbf6772c991298e5f27e5be656836e9ffaa 100644 (file)
@@ -996,6 +996,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
           $attributes += array(
             'entity' => 'option_value',
             'placeholder' => $placeholder,
+            'multiple' => $search,
             'api' => array(
               'params' => array('option_group_id' => $field->option_group_id),
             ),
index 9d6e64a5618aa4cc626b8029a068fdf94ab585eb..8ca162022e06eefdfc34576835a797f4a35be9db 100644 (file)
@@ -351,6 +351,11 @@ SELECT label, value
 
         $fieldName = "{$field['table_name']}.{$field['column_name']}";
 
+        // Autocomplete comes back as a string not an array
+        if ($field['data_type'] == 'String' && $field['html_type'] == 'Autocomplete-Select' && $op == '=') {
+          $value = explode(',', $value);
+        }
+
         // Handle multi-select search for any data type
         if (is_array($value) && !$field['is_search_range']) {
           $isSerialized = CRM_Core_BAO_CustomField::isSerialized($field);
@@ -379,7 +384,9 @@ SELECT label, value
         }
 
         // fix $value here to escape sql injection attacks
-        $value = CRM_Core_DAO::escapeString(trim($value));
+        if (!is_array($value)) {
+          $value = CRM_Core_DAO::escapeString(trim($value));
+        }
 
         $qillValue = CRM_Core_BAO_CustomField::getDisplayValue($value, $id, $this->_options);
 
@@ -397,13 +404,7 @@ SELECT label, value
               );
             }
             else {
-              if (in_array($field['html_type'], array('Select', 'Radio', 'Autocomplete-Select'))) {
-                $wildcard = FALSE;
-                $val = CRM_Utils_Type::escape($value, 'String');
-              }
-              else {
-                $val = CRM_Utils_Type::escape($strtolower(trim($value)), 'String');
-              }
+              $val = CRM_Utils_Type::escape($strtolower(trim($value)), 'String');
 
               if ($wildcard) {
                 $val = $strtolower(CRM_Core_DAO::escapeString($val));