From 2cddaa4f97923df16821bc45e0b817c7034a35d8 Mon Sep 17 00:00:00 2001
From: Morten Fangel <fangel@sevengoslings.net>, Stefan Borchert <stefan.borchert@undpaul.de>
Date: Fri, 8 Jul 2011 11:46:08 +0200
Subject: [PATCH] Term reference autocomplete widget having problems handling terms with commas.

---
 modules/taxonomy/taxonomy.pages.inc |    6 ++----
 modules/taxonomy/taxonomy.test      |   21 +++++++++++++++------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/modules/taxonomy/taxonomy.pages.inc b/modules/taxonomy/taxonomy.pages.inc
index 3aed290..0cca252 100644
--- a/modules/taxonomy/taxonomy.pages.inc
+++ b/modules/taxonomy/taxonomy.pages.inc
@@ -110,7 +110,7 @@ function taxonomy_autocomplete($field_name, $tags_typed = '') {
       ->execute()
       ->fetchAllKeyed();
 
-    $prefix = count($tags_typed) ? implode(', ', $tags_typed) . ', ' : '';
+    $prefix = count($tags_typed) ? drupal_implode_tags($tags_typed) . ', ' : '';
 
     $term_matches = array();
     foreach ($tags_return as $tid => $name) {
@@ -119,9 +119,7 @@ function taxonomy_autocomplete($field_name, $tags_typed = '') {
       if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) {
         $n = '"' . str_replace('"', '""', $name) . '"';
       }
-      else {
-        $term_matches[$prefix . $n] = check_plain($name);
-      }
+      $term_matches[$prefix . $n] = check_plain($name);
     }
   }
 
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
index 80ddc84..3d55676 100644
--- a/modules/taxonomy/taxonomy.test
+++ b/modules/taxonomy/taxonomy.test
@@ -580,7 +580,7 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
     field_create_instance($instance);
     $terms = array(
       $this->randomName(),
-      $this->randomName(),
+      $this->randomName() . ', ' . $this->randomName(),
       $this->randomName(),
     );
 
@@ -590,7 +590,7 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
     $edit["body[$langcode][0][value]"] = $this->randomName();
     // Insert the terms in a comma separated list. Vocabulary 1 is a
     // free-tagging field created by the default profile.
-    $edit[$instance['field_name'] . "[$langcode]"] = implode(', ', $terms);
+    $edit[$instance['field_name'] . "[$langcode]"] = drupal_implode_tags($terms);
 
     // Preview and verify the terms appear but are not created.
     $this->drupalPost('node/add/page', $edit, t('Preview'));
@@ -610,8 +610,12 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
       $this->assertText($term, t('The term was saved and appears on the node page'));
     }
 
-    // Get the created terms.
-    list($term1, $term2, $term3) = taxonomy_get_tree($this->vocabulary->vid);
+    // Get the created terms - ensure that $term1 == $terms[0], etc.
+    $term_objs = taxonomy_get_tree($this->vocabulary->vid);
+    $term1 = $term2 = $term3 = NULL;
+    foreach ($term_objs AS $term) {
+      ${'term' . (array_search($term->name, $terms)+1)} = $term;
+    }
 
     // Delete one term.
     $this->drupalPost('taxonomy/term/' . $term1->tid . '/edit', array(), t('Delete'));
@@ -627,10 +631,15 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
     }
     $this->assertNoText($term1->name, t('The deleted term %name does not appear on the node page.', array('%name' => $term1->name)));
 
-    // Test autocomplete on term 2.
+    // Test autocomplete on term 2 - it contains a comma, so expect the key to be quoted
     $input = substr($term2->name, 0, 3);
     $this->drupalGet('taxonomy/autocomplete/taxonomy_' . $this->vocabulary->machine_name . '/' . $input);
-    $this->assertRaw('{"' . $term2->name . '":"' . $term2->name . '"}', t('Autocomplete returns term %term_name after typing the first 3 letters.', array('%term_name' => $term2->name)));
+    $this->assertRaw('{"\"' . $term2->name . '\"":"' . $term2->name . '"}', t('Autocomplete returns term %term_name after typing the first 3 letters.', array('%term_name' => $term2->name)));
+
+    // Test autocomplete on term 3 - it is alphanumeric only, so no extra quoting
+    $input = substr($term3->name, 0, 3);
+    $this->drupalGet('taxonomy/autocomplete/taxonomy_' . $this->vocabulary->machine_name . '/' . $input);
+    $this->assertRaw('{"' . $term3->name . '":"' . $term3->name . '"}', t('Autocomplete returns term %term_name after typing the first 3 letters.', array('%term_name' => $term3->name)));
   }
 
   /**
-- 
1.7.4.1

