Index: supported/primary_term.inc
===================================================================
--- supported/primary_term.inc	(revision 0)
+++ supported/primary_term.inc	(revision 0)
@@ -0,0 +1,117 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Support file for the primary term module.
+ */
+
+/**
+ * Display a taxonomy term during preview.
+ */
+function node_import_display_primary_term($tid) {
+  static $output;
+
+  if (!isset($output)) {
+    $output = array();
+  }
+
+  if (!isset($output[$tid])) {
+    if ($tid === 0) {
+      $output[$tid] = theme('placeholder', t('The term will be created during import'));
+    }
+    else if (($term = taxonomy_get_term($tid))) {
+      $output[$tid] = l($term->name, 'taxonomy/term/'. $tid);
+    }
+    else {
+      $output[$tid] = theme('placeholder', $tid);
+    }
+  }
+
+  return $output[$tid];
+}
+
+/**
+ * Implementation of hook_node_import_fields().
+ */
+function primary_term_node_import_fields($type) {
+  $fields = array();
+
+  // Import taxonomy terms for nodes.
+  if (($node_type = node_import_type_is_node($type)) !== FALSE) {
+    $vids = variable_get('pt_vocabs_'. $node_type, array());
+
+    foreach ($vids as $vid) {
+      $vocabulary = taxonomy_vocabulary_load($vid);
+      $fields['primary_term:'. $vid] = array(
+        'title' => t('Primary Term'),
+        'module' => 'primary_term',
+        'input_format' => 'taxonomy_term',
+        'vocabulary' => $vocabulary,
+        'has_multiple' => FALSE,
+        'has_hierarchy' => FALSE,
+      );
+    }
+  }
+
+  return $fields;
+}
+
+/**
+ * Implementation of hook_node_import_defaults().
+ */
+function primary_term_node_import_defaults($type, $defaults, $fields, $map) {
+  $form = array();
+
+  // Import taxonomy terms for nodes.
+  if (($node_type = node_import_type_is_node($type)) !== FALSE) {
+    $vids = variable_get('pt_vocabs_'. $node_type, array());
+    foreach ($vids as $vid) {
+      $vocabulary = taxonomy_vocabulary_load($vid);
+      if ($vocabulary->tags) {
+        $form['primary_term:'. $vocabulary->vid] = array(
+          '#type' => 'textfield',
+          '#title' => $vocabulary->name,
+          '#default_value' => isset($defaults['primary_term:'. $vocabulary->vid]) ? $defaults['primary_term:'. $vocabulary->vid] : '',
+          '#autocomplete_path' => 'taxonomy/autocomplete/'. $vocabulary->vid,
+        );
+      }
+      else {
+        $form['primary_term:'. $vocabulary->vid] = taxonomy_form($vocabulary->vid, isset($defaults['primary_term:'. $vocabulary->vid])? $defaults['primary_term:'. $vocabulary->vid] : 0);
+      }
+    }
+  }
+
+  return $form;
+}
+
+/**
+ * Implementation of hook_node_import_values_alter().
+ */
+function primary_term_node_import_values_alter(&$values, $type, $defaults, $options, $fields, $preview) {
+  if (($node_type = node_import_type_is_node($type)) !== FALSE) {
+    $taxonomy = isset($values['primary_term']) ? $values['primary_term'] : array();
+    foreach ($fields as $fieldname => $fieldinfo) {
+      if (strpos($fieldname, 'primary_term:') === 0) {
+        $vocab = $fieldinfo['vocabulary'];
+        if ($vocab->tags) {
+          $taxonomy['tags'] = isset($taxonomy['tags']) ? $taxonomy['tags'] : array();
+          $taxonomy['tags'][$vocab->vid] = implode(',', (array)$values[$fieldname]);
+        }
+        else {
+          $taxonomy[$vocab->vid] = $values[$fieldname];
+        }
+        unset($values[$fieldname]);
+      }
+    }
+    /*
+    the primary term module uses node->primary_term and node->primaryterm for
+    different purposes, mostly for historical reasons, as changing this would
+    break compatibility with every contributed module that uses this field
+    (cf. comments in primary_term.module)
+    */
+    $values['primary_term'] = $taxonomy;
+    $tid = array_shift($taxonomy);
+    $values['primaryterm'] = $tid;
+  }
+}
