From 81d885f4708554e884e5e1df69509c4b04774d55 Mon Sep 17 00:00:00 2001 From: fangel@sevengoslings.net , Stefan Borchert 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 | 17 +++++++++++------ 2 files changed, 13 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..adddd16 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')); @@ -611,9 +611,9 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase { } // Get the created terms. - list($term1, $term2, $term3) = taxonomy_get_tree($this->vocabulary->vid); + list($term1, $term2, $term3) = array_values(taxonomy_term_load_multiple(FALSE)); - // Delete one term. + // Delete term 1. $this->drupalPost('taxonomy/term/' . $term1->tid . '/edit', array(), t('Delete')); $this->drupalPost(NULL, NULL, t('Delete')); $term_names = array($term2->name, $term3->name); @@ -627,10 +627,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