From 70b7809121ad00542bcd37545bf314d7215a72e6 Mon Sep 17 00:00:00 2001
From: Neil Drumm <drumm@3064.no-reply.drupal.org>
Date: Tue, 23 May 2006 02:21:26 +0000
Subject: [PATCH] #41042 by DriesK, Moshe, and Jaza, Duplicate tag handling

---
 modules/taxonomy.module          | 9 +++++++--
 modules/taxonomy/taxonomy.module | 9 +++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/modules/taxonomy.module b/modules/taxonomy.module
index a756654f6a72..2d3eb7c72217 100644
--- a/modules/taxonomy.module
+++ b/modules/taxonomy.module
@@ -734,8 +734,9 @@ function taxonomy_node_save($nid, $terms) {
       // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar
       $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
       preg_match_all($regexp, $vid_value, $matches);
-      $typed_terms = $matches[1];
+      $typed_terms = array_unique($matches[1]);
 
+      $inserted = array();
       foreach ($typed_terms as $typed_term) {
         // If a user has escaped a term (to demonstrate that it is a group,
         // or includes a comma or quote character), we remove the escape
@@ -760,7 +761,11 @@ function taxonomy_node_save($nid, $terms) {
           $typed_term_tid = $edit['tid'];
         }
 
-        db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+        // Defend against duplicate, different cased tags
+        if (!isset($inserted[$typed_term_tid])) {
+          db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+          $inserted[$typed_term_tid] = TRUE;
+        }
       }
     }
   }
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index a756654f6a72..2d3eb7c72217 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -734,8 +734,9 @@ function taxonomy_node_save($nid, $terms) {
       // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar
       $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
       preg_match_all($regexp, $vid_value, $matches);
-      $typed_terms = $matches[1];
+      $typed_terms = array_unique($matches[1]);
 
+      $inserted = array();
       foreach ($typed_terms as $typed_term) {
         // If a user has escaped a term (to demonstrate that it is a group,
         // or includes a comma or quote character), we remove the escape
@@ -760,7 +761,11 @@ function taxonomy_node_save($nid, $terms) {
           $typed_term_tid = $edit['tid'];
         }
 
-        db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+        // Defend against duplicate, different cased tags
+        if (!isset($inserted[$typed_term_tid])) {
+          db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+          $inserted[$typed_term_tid] = TRUE;
+        }
       }
     }
   }
-- 
GitLab