--- node_import.module.orig	2005-05-26 08:17:34.000000000 +0200
+++ node_import.module	2005-05-26 11:13:50.158449702 +0200
@@ -23,15 +23,84 @@
   global $error;
   $row = 1;
   if ($path = $_FILES['edit']['tmp_name']['node_import_file']) {
+
+    ob_start();
+
     $handle = fopen($path,"r");
     while ($data = fgetcsv($handle, 10000, ",")) {
       if ($row == 1) {
-        $fields = $data;
+        $fields = array_map("trim", $data);
       }
       else {
         for ($c=0; $c < count($fields); $c++) {
-          $node->$fields[$c] = $data[$c];
+          $fieldname = $fields[$c];
+          $fieldvalue = $data[$c];
+
+          /* check if we need to treat the data as an array */
+          if ( ereg("(.+)\[(.?)\]", $fieldname, $regs) ) {
+            $fieldname = $regs[1];
+            $seperator = $regs[2];
+            if ( $seperator == "" ) {
+              $seperator = "|";
+            }
+            if ($fieldvalue) { /* don't explode empty strings */
+              $fieldvalue = explode($seperator, $fieldvalue);
+            }
+          }
+
+          /* 'special' handling of some fields */
+          switch ($fieldname) {
+            case "taxonomy":
+              if (module_exist("taxonomy")) {
+                if ($fieldvalue) {
+                  $fieldvalue = is_array($fieldvalue) ?
+                                $fieldvalue : array($fieldvalue);
+                }
+                else {
+                  $fieldvalue = array();
+                }
+                for ($i=0; $i < count($fieldvalue); $i++) {
+                  if (!is_numeric($fieldvalue[$i])) {
+                    $terms = taxonomy_get_term_by_name($fieldvalue[$i]);
+                    if ($terms) {
+                      $fieldvalue[$i] = $terms[0]->tid;
+                    }
+                  }
+                }
+              } // if module_exist
+              break; // "taxonomy"
+          } // switch
+          $node->$fieldname = $fieldvalue;
+        }
+
+        /* handling of 'flexinode' types */
+        if (module_exist("flexinode")) {
+          $types = node_name_list();
+          $flexitypes = array();
+          foreach ($types as $key => $value) {
+            if ( ereg("flexinode-([0-9]+)", $key, $regs) ) {
+              $flexitypes[$value] = $regs[1];
+            }
+          }
+          if (array_key_exists($node->type, $flexitypes)) {
+            $node->ctype_id = $flexitypes[$node->type];
+            $node->type = "flexinode-".$node->ctype_id;
+
+            /* create extra fields flexinode_XXX */
+            $result = db_query("SELECT field_id, label ".
+                               "FROM flexinode_field ".
+                               "WHERE ctype_id=%d", $node->ctype_id);
+            while ($o = db_fetch_object($result)) {
+              $old = $o->label;
+              $new = "flexinode_".$o->field_id;
+              if ($node->$old) {
+                $node->$new = $node->$old;
+              }
+            }
+          }
         }
+
+        /* do the actual import */
         $node = node_validate($node, $error);
         if (!node_access("create", $node)) {
           $error['access'] = message_access();
@@ -54,6 +123,9 @@
       $row++;
     }
     fclose ($handle);
+
+    $output = ob_get_contents();
+    ob_end_clean();
   }
   $output .= form_file(t('CSV File'), "node_import_file", 64, t("Comma separated values file. "));
   $output .= form_submit(t('Preview'));
