--- user_import_orig/user_import.module	2009-03-21 15:32:42.000000000 -0700
+++ ./user_import.module	2009-08-03 12:53:16.643493987 -0700
@@ -161,10 +161,36 @@
         '#default_value' =>  variable_get('user_import_line_max', 1000),
         '#size' => 10,
         '#maxlength' => 10,
-        '#description' => t('The default is set at 1,000 characters, if a line in your csv is longer than this you should set a higher maximum here. Setting higher maximums will slow down imports.'),
+        '#description' => t('The default is set at 1,000 characters, if a line in your csv is longer than this you should set a higher maximum here. If you are unsure about the maximum length set the value to 0 to not limit the line length. Setting higher maximums or using 0 will slow down imports.'),
     );
-    
-    
+
+    $form['csv_settings'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('CSV Settings'),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+    );
+
+    $delimiter_default = variable_get('user_import_field_delimiter', ',');
+    $form['csv_settings']['user_import_field_delimiter'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Field delimiter'),
+        '#default_value' => ($delimiter_default == "\t" ? '\t' : $delimiter_default),
+        '#size' => 5,
+        '#maxlength' => 2,
+        '#description' => t('The field delimiter is the character used to separate the different fields on a given line.'),
+    );
+
+    $enclosure_default = variable_get('user_import_field_enclosure', '"');
+    $form['csv_settings']['user_import_field_enclosure'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Field enclosure'),
+        '#default_value' => ($enclosure_default == "\t" ? '\t' : $enclosure_default),
+        '#size' => 5,
+        '#maxlength' => 2,
+        '#description' => t('The field enclosure is the character used to wrap a field value that contains newlines and as well as the delimiter value.'),
+    );
+
     $saved_templates = _user_import_settings_select(NULL, 'GET TEMPLATES');
     
     if (!empty($saved_templates)) {
@@ -218,13 +244,27 @@
     }
     
     if (is_numeric($form_state['values']['user_import_line_max'])) {
-        if ($form_state['values']['user_import_line_max'] < 1000) form_set_error('user_import_line_max', t("Value must be higher than 1000."));
+        if ($form_state['values']['user_import_line_max'] < 1000 && $form_state['values']['user_import_line_max'] != 0) form_set_error('user_import_line_max', t("Value must be higher than 1000 or equal to 0."));
         if ($form_state['values']['user_import_line_max'] > 1000000) form_set_error('user_import_line_max', t("Value must be lower than 1,000,000."));
     } 
     else {
         form_set_error('user_import_line_max', t('Value must be a number.'));
     }
-    
+
+    if (strlen($form_state['values']['user_import_field_delimiter']) == 0) {
+        form_set_error('user_import_field_delimiter', t("You must include a field delimiter character.  If unsure use the default ',' value."));
+    } elseif (strlen($form_state['values']['user_import_field_delimiter']) > 1 
+              && $form_state['values']['user_import_field_delimiter'] != '\t') {
+        form_set_error('user_import_field_delimiter', t("The field delimiter may only consist of a single character."));
+    }
+
+    if (strlen($form_state['values']['user_import_field_enclosure']) == 0) {
+        form_set_error('user_import_field_delimiter', t("You must include a field enclosure character.  If unsure use the default '\"' value."));
+    } elseif (strlen($form_state['values']['user_import_field_enclosure']) > 1
+              && $form_state['values']['user_import_field_enclosure'] != '\t') {
+        form_set_error('user_import_field_enclosure', t("The field enclosure may only consist of a single character."));
+    }
+
     return;
 }
 
@@ -232,8 +272,12 @@
 
   settype($form_state['values']['user_import_max'], 'integer');
   settype($form_state['values']['user_import_line_max'], 'integer');
+  settype($form_state['values']['user_import_field_delimiter'], 'string');
+  settype($form_state['values']['user_import_field_enclosure'], 'string');
   variable_set('user_import_max', $form_state['values']['user_import_max']);
   variable_set('user_import_line_max', $form_state['values']['user_import_line_max']);
+  variable_set('user_import_field_delimiter', ($form_state['values']['user_import_field_delimiter'] == '\t' ? "\t" : $form_state['values']['user_import_field_delimiter']));
+  variable_set('user_import_field_enclosure', ($form_state['values']['user_import_field_enclosure'] == '\t' ? "\t" : $form_state['values']['user_import_field_enclosure']));
   variable_set('user_import_settings', $form_state['values']['user_import_settings']);
 
   if (!empty($form_state['values']['templates'])) {
@@ -947,7 +991,10 @@
 // get first row of file
 function _user_import_file_row($filename, $handle) {
     
-    $data_row = @fgetcsv ($handle, 1000000, ",");
+    $line_max = variable_get('user_import_line_max', 1000000);
+    $field_delimiter = variable_get('user_import_field_delimiter', ',');
+    $field_enclosure = variable_get('user_import_field_enclosure', '\'');
+    $data_row = @fgetcsv ($handle, $line_max, $field_delimiter, $field_enclosure);
     if (!$data_row) {
         form_set_error('file', t("Could not get data, the file '%filename' is either empty or has incompatible line endings.", array('%filename' => $filename)), 'error');
     }
@@ -1340,6 +1387,8 @@
     user_import_load_supported();
     $line_max = variable_get('user_import_line_max', 1000);
     $import_max = variable_get('user_import_max', 250);
+    $field_delimiter = variable_get('user_import_field_delimiter', ',');
+    $field_enclosure = variable_get('user_import_field_enclosure', ',');
     $field_match = _user_import_unconcatenate_field_match($settings['field_match']);
     $update_setting = _user_import_update_user_check($settings['options']['update_user']);
     $update_setting_per_module = $settings['options']['update_user'];
@@ -1353,7 +1402,7 @@
     // start count of imports on this cron run
     $send_counter = 0;
     
-    while ($data = fgetcsv($handle, $line_max, ',')) {
+    while ($data = fgetcsv($handle, $line_max, $field_delimiter, $field_enclosure)) {
     
         $errors = user_import_errors(FALSE, TRUE);
 
