--- 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);