? data_taxonomy_term_creation.patch
Index: data_taxonomy.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/data/data_taxonomy/Attic/data_taxonomy.module,v
retrieving revision 1.1.2.16
diff -u -p -r1.1.2.16 data_taxonomy.module
--- data_taxonomy.module	25 Jan 2010 18:10:45 -0000	1.1.2.16
+++ data_taxonomy.module	30 Jul 2010 16:53:28 -0000
@@ -66,8 +66,12 @@ function data_taxonomy_feeds_data_proces
     foreach ($info['vocabularies'] as $vid) {
       $vocabulary = taxonomy_vocabulary_load($vid);
       $fields['data_taxonomy:'. $vid] = array(
-        'name' => t('Taxonomy: @vocabulary', array("@vocabulary" => $vocabulary->name)),
-        'description' => t('Map to taxonomy terms of @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+        'name' => t('Term ids: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+        'description' => t('Map to term ids to @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+      );
+      $fields['data_taxonomy_term:'. $vid] = array(
+        'name' => t('Term names: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+        'description' => t('Map term names to @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
       );
     }
   }
@@ -80,8 +84,22 @@ function data_taxonomy_data_insert($reco
   if ($info = data_taxonomy_get_info($data_table)) {
     $id = $record[$info['id']];
     foreach ($info['vocabularies'] as $vid) {
-      if (is_array($record['data_taxonomy:'. $vid])) {
-        foreach ($record['data_taxonomy:'. $vid] as $tid) {
+      $tids = array();
+      if (is_array($record['data_taxonomy_term:'. $vid])) {
+        foreach ($record['data_taxonomy_term:'. $vid] as $name) {
+          // Look up term, save new if not available, collect $tids;
+         $result = db_query('SELECT tid, name FROM {term_data} WHERE name = "%s"', $name['name']);
+          if (!$term = db_fetch_object($result)) {
+            $term['vid'] = $vid;
+            taxonomy_save_term($term);
+            $tid = db_last_insert_id('term_data', 'tid');
+            $tids[] = $tid;
+          }
+          else {
+            $tids[] = $term->tid;
+          }
+        }
+        foreach ($tids as $tid) {
           db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
         }
       }
@@ -109,7 +127,20 @@ function data_taxonomy_data_update($reco
     foreach ($info['vocabularies'] as $vid) {
       if (is_array($record['data_taxonomy:'. $vid])) {
         db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid WHERE td.vid = %d", $vid);
-        foreach ($record['data_taxonomy:'. $vid] as $tid) {
+        foreach ($record['data_taxonomy_term:'. $vid] as $name) {
+          // Look up term, save new if not available, collect $tids;
+         $result = db_query('SELECT tid, name FROM {term_data} WHERE name = "%s"', $name['name']);
+          if (!$term = db_fetch_object($result)) {
+            $term['vid'] = $vid;
+            taxonomy_save_term($term);
+            $tid = db_last_insert_id('term_data', 'tid');
+            $tids[] = $tid;
+          }
+          else {
+            $tids[] = $term->tid;
+          }
+        }
+        foreach ($tids as $tid) {
           db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
         }
       }
@@ -359,4 +390,4 @@ function template_preprocess_data_taxono
     $vars['edit'] = $vars['form']['#edit'];
   }
   $vars['tags'] = theme('links', data_taxonomy_tag_links($vars['form']['#terms'], $vars['form']['#path'], $vars['form']['#args']), array('class' => 'links data-taxonomy-tags'));
-}
+}
\ No newline at end of file
