Add convert option, affects how date/times & categories are parsed

This commit is contained in:
Nathan Gray 2011-10-25 18:54:23 +00:00
parent 0b5db7ace2
commit 3e194b16fe
2 changed files with 38 additions and 5 deletions

View File

@ -256,9 +256,9 @@ class importexport_import_csv implements importexport_iface_import_record { //,
* @param $fields Array of field type -> field name mappings * @param $fields Array of field type -> field name mappings
* @param $appname Appname for custom field parsing * @param $appname Appname for custom field parsing
* @param $selects Array of select values to be automatically parsed * @param $selects Array of select values to be automatically parsed
* * @param $format int 0 if records are supposed to be in DB format, 1 to treat as human values (Used for dates and select-cat)
*/ */
public static function convert(Array &$record, Array $fields = array(), $appname = null, Array $selects = array()) { public static function convert(Array &$record, Array $fields = array(), $appname = null, Array $selects = array(), $format=0) {
// Automatic conversions // Automatic conversions
if($appname) { if($appname) {
if(!self::$cf_parse_cache[$appname]) { if(!self::$cf_parse_cache[$appname]) {
@ -305,6 +305,19 @@ class importexport_import_csv implements importexport_iface_import_record { //,
} }
foreach((array)$fields['date-time'] as $name) { foreach((array)$fields['date-time'] as $name) {
if ($record[$name] && !is_numeric($record[$name])) { if ($record[$name] && !is_numeric($record[$name])) {
// Need to handle format first
if($format == 1)
{
$formatted = egw_time::createFromFormat(
egw_time::$user_dateformat . ', ' .egw_time::$user_timeformat,
$record[$name]
);
if($errors = egw_time::getLastErrors() && $errors['error_count'] == 0)
{
$record[$name] = $formatted;
}
}
$record[$name] = egw_time::user2server($record[$name],'ts'); $record[$name] = egw_time::user2server($record[$name],'ts');
if(is_array(self::$cf_parse_cache[$appname][0]['date-time']) && if(is_array(self::$cf_parse_cache[$appname][0]['date-time']) &&
in_array($name, self::$cf_parse_cache[$appname][0]['date-time'])) { in_array($name, self::$cf_parse_cache[$appname][0]['date-time'])) {
@ -315,6 +328,15 @@ class importexport_import_csv implements importexport_iface_import_record { //,
} }
foreach((array)$fields['date'] as $name) { foreach((array)$fields['date'] as $name) {
if ($record[$name] && !is_numeric($record[$name])) { if ($record[$name] && !is_numeric($record[$name])) {
// Need to handle format first
if($format == 1)
{
$formatted = egw_time::createFromFormat(egw_time::$user_dateformat, $record[$name]);
if($errors = egw_time::getLastErrors() && $errors['error_count'] == 0)
{
$record[$name] = $formatted;
}
}
$record[$name] = egw_time::user2server($record[$name],'ts'); $record[$name] = egw_time::user2server($record[$name],'ts');
if(is_array(self::$cf_parse_cache[$appname][0]['date']) && if(is_array(self::$cf_parse_cache[$appname][0]['date']) &&
in_array($name, self::$cf_parse_cache[$appname][0]['date'])) { in_array($name, self::$cf_parse_cache[$appname][0]['date'])) {
@ -336,11 +358,15 @@ class importexport_import_csv implements importexport_iface_import_record { //,
} }
foreach((array)$fields['select-cat'] as $name) { foreach((array)$fields['select-cat'] as $name) {
if($record[$name]) { if($record[$name]) {
// Only parse name if it needs it
if($format == 1)
{
$cat_id = importexport_helper_functions::cat_name2id($record[$name]); $cat_id = importexport_helper_functions::cat_name2id($record[$name]);
// Don't clear it if it wasn't found // Don't clear it if it wasn't found
if($cat_id) $record[$name] = $cat_id; if($cat_id) $record[$name] = $cat_id;
} }
} }
}
$GLOBALS['egw_info']['flags']['currentapp'] = $current_app; $GLOBALS['egw_info']['flags']['currentapp'] = $current_app;
} }

View File

@ -211,12 +211,19 @@ class importexport_wizard_basic_import_csv
if(!$content['update_cats'] && $content['plugin_options']['update_cats']) { if(!$content['update_cats'] && $content['plugin_options']['update_cats']) {
$content['update_cats'] = $content['plugin_options']['update_cats']; $content['update_cats'] = $content['plugin_options']['update_cats'];
} }
if(!array_key_exists('convert', $content) && array_key_exists('convert', $content['plugin_options'])) {
$content['convert'] = $content['plugin_options']['convert'];
}
$sel_options['charset'] = $GLOBALS['egw']->translation->get_installed_charsets()+ $sel_options['charset'] = $GLOBALS['egw']->translation->get_installed_charsets()+
array( array(
'utf-8' => 'utf-8 (Unicode)', 'utf-8' => 'utf-8 (Unicode)',
'user' => lang('User preference') 'user' => lang('User preference')
); );
$sel_options['convert'] = array(
0 => lang('Database values'),
1 => lang('Human friendly values')
);
$preserv = $content; $preserv = $content;
if($this->mapping_fields['cat_id']) { if($this->mapping_fields['cat_id']) {
$sel_options['update_cats'] = array( $sel_options['update_cats'] = array(