#!/usr/local/bin/perl # import.cgi # Import data from a text file require './postgresql-lib.pl'; &ReadParseMime(); &can_edit_db($in{'db'}) || &error($text{'dbase_ecannot'}); &error_setup($text{'import_err'}); if ($in{'mode'}) { # From uploaded file $in{'upload'} || &error($text{'import_eupload'}); $in{'upload_filename'} =~ /([^\/\\\s]+)$/ || &error($text{'import_eupload'}); $file = &transname($1); open(TEMP, ">$file"); print TEMP $in{'upload'}; close(TEMP); $need_unlink = 1; &ui_print_header(undef, $text{'import_title'}, ""); print "$text{'import_uploadout'}
\n"; } else { # From local file -r $in{'file'} || &error($text{'import_efile'}); $file = $in{'file'}; &ui_print_header(undef, $text{'import_title'}, ""); print &text('import_fileout', "$in{'file'}"),"
\n";
}
if (!$in{'delete'}) {
$data = &execute_sql($in{'db'},
"select * from "."e_table($in{'table'}));
foreach $r (@{$data->{'data'}}) {
$done{join("/", @$r)}++;
}
}
# Read the file
$skip = 0;
open(FILE, $file);
while( \n";
goto failed;
}
if ($in{'ignore'} && $done{join("/", @row)}++) {
# Skip duplicate
$skip++;
next;
}
push(@rv, \@row);
}
# Empty the table, if requested
if ($in{'delete'}) {
&execute_sql_logged($in{'db'}, "delete from ".
"e_table($in{'table'}));
}
# Add the rows
@str = &table_structure($in{'db'}, $in{'table'});
foreach $r (@rv) {
@sets = map { "?" } @str;
$cmd = "insert into "."e_table($in{'table'})." values (".
join(",", @sets).")";
&execute_sql_logged($in{'db'}, $cmd, @$r);
}
print &text('import_done', scalar(@rv), $skip)," \n";
&webmin_log("import", undef, $in{'db'}, { 'mode' => $in{'mode'},
'file' => $in{'file'} });
failed:
unlink($file) if ($need_unlink);
&ui_print_footer("exec_form.cgi?db=$in{'db'}&mode=import", $text{'exec_return'},
"edit_dbase.cgi?db=$in{'db'}", $text{'dbase_return'},
"", $text{'index_return'});