Split some code out of ImportCsv::doImport into buildErrorsForParams
Signed-off-by: William Desportes <williamdes@wdes.fr>
This commit is contained in:
parent
3683e4b022
commit
646092e367
@ -147,7 +147,7 @@ class ImportCsv extends AbstractImportCsv
|
|||||||
$csv_new_line, $csv_columns, $err_url;
|
$csv_new_line, $csv_columns, $err_url;
|
||||||
// $csv_replace and $csv_ignore should have been here,
|
// $csv_replace and $csv_ignore should have been here,
|
||||||
// but we use directly from $_POST
|
// but we use directly from $_POST
|
||||||
global $error, $timeout_passed, $finished, $message;
|
global $timeout_passed, $finished;
|
||||||
|
|
||||||
$replacements = [
|
$replacements = [
|
||||||
'\\n' => "\n",
|
'\\n' => "\n",
|
||||||
@ -159,63 +159,14 @@ class ImportCsv extends AbstractImportCsv
|
|||||||
$csv_escaped = strtr($csv_escaped, $replacements);
|
$csv_escaped = strtr($csv_escaped, $replacements);
|
||||||
$csv_new_line = strtr($csv_new_line, $replacements);
|
$csv_new_line = strtr($csv_new_line, $replacements);
|
||||||
|
|
||||||
$param_error = false;
|
[$error, $message] = $this->buildErrorsForParams(
|
||||||
if (strlen($csv_terminated) === 0) {
|
$csv_terminated,
|
||||||
$message = Message::error(
|
$csv_enclosed,
|
||||||
__('Invalid parameter for CSV import: %s')
|
$csv_escaped,
|
||||||
);
|
$csv_new_line,
|
||||||
$message->addParam(__('Columns terminated with'));
|
(string) $err_url
|
||||||
$error = true;
|
);
|
||||||
$param_error = true;
|
|
||||||
// The default dialog of MS Excel when generating a CSV produces a
|
|
||||||
// semi-colon-separated file with no chance of specifying the
|
|
||||||
// enclosing character. Thus, users who want to import this file
|
|
||||||
// tend to remove the enclosing character on the Import dialog.
|
|
||||||
// I could not find a test case where having no enclosing characters
|
|
||||||
// confuses this script.
|
|
||||||
// But the parser won't work correctly with strings so we allow just
|
|
||||||
// one character.
|
|
||||||
} elseif (mb_strlen($csv_enclosed) > 1) {
|
|
||||||
$message = Message::error(
|
|
||||||
__('Invalid parameter for CSV import: %s')
|
|
||||||
);
|
|
||||||
$message->addParam(__('Columns enclosed with'));
|
|
||||||
$error = true;
|
|
||||||
$param_error = true;
|
|
||||||
// I could not find a test case where having no escaping characters
|
|
||||||
// confuses this script.
|
|
||||||
// But the parser won't work correctly with strings so we allow just
|
|
||||||
// one character.
|
|
||||||
} elseif (mb_strlen($csv_escaped) > 1) {
|
|
||||||
$message = Message::error(
|
|
||||||
__('Invalid parameter for CSV import: %s')
|
|
||||||
);
|
|
||||||
$message->addParam(__('Columns escaped with'));
|
|
||||||
$error = true;
|
|
||||||
$param_error = true;
|
|
||||||
} elseif (mb_strlen($csv_new_line) != 1
|
|
||||||
&& $csv_new_line != 'auto'
|
|
||||||
) {
|
|
||||||
$message = Message::error(
|
|
||||||
__('Invalid parameter for CSV import: %s')
|
|
||||||
);
|
|
||||||
$message->addParam(__('Lines terminated with'));
|
|
||||||
$error = true;
|
|
||||||
$param_error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there is an error in the parameters entered,
|
|
||||||
// indicate that immediately.
|
|
||||||
if ($param_error) {
|
|
||||||
Generator::mysqlDie(
|
|
||||||
$message->getMessage(),
|
|
||||||
'',
|
|
||||||
false,
|
|
||||||
$err_url
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$buffer = '';
|
|
||||||
[$sql_template, $required_fields, $fields] = $this->getSqlTemplateAndRequiredFields($db, $table, $csv_columns);
|
[$sql_template, $required_fields, $fields] = $this->getSqlTemplateAndRequiredFields($db, $table, $csv_columns);
|
||||||
|
|
||||||
// Defaults for parser
|
// Defaults for parser
|
||||||
@ -247,6 +198,7 @@ class ImportCsv extends AbstractImportCsv
|
|||||||
$col_names = [];
|
$col_names = [];
|
||||||
$tables = [];
|
$tables = [];
|
||||||
|
|
||||||
|
$buffer = '';
|
||||||
$col_count = 0;
|
$col_count = 0;
|
||||||
$max_cols = 0;
|
$max_cols = 0;
|
||||||
$csv_terminated_len = mb_strlen($csv_terminated);
|
$csv_terminated_len = mb_strlen($csv_terminated);
|
||||||
@ -684,6 +636,73 @@ class ImportCsv extends AbstractImportCsv
|
|||||||
$error = true;
|
$error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function buildErrorsForParams(
|
||||||
|
string $csvTerminated,
|
||||||
|
string $csvEnclosed,
|
||||||
|
string $csvEscaped,
|
||||||
|
string $csvNewLine,
|
||||||
|
string $errUrl
|
||||||
|
): array {
|
||||||
|
global $error, $message;
|
||||||
|
|
||||||
|
$param_error = false;
|
||||||
|
if (strlen($csvTerminated) === 0) {
|
||||||
|
$message = Message::error(
|
||||||
|
__('Invalid parameter for CSV import: %s')
|
||||||
|
);
|
||||||
|
$message->addParam(__('Columns terminated with'));
|
||||||
|
$error = true;
|
||||||
|
$param_error = true;
|
||||||
|
// The default dialog of MS Excel when generating a CSV produces a
|
||||||
|
// semi-colon-separated file with no chance of specifying the
|
||||||
|
// enclosing character. Thus, users who want to import this file
|
||||||
|
// tend to remove the enclosing character on the Import dialog.
|
||||||
|
// I could not find a test case where having no enclosing characters
|
||||||
|
// confuses this script.
|
||||||
|
// But the parser won't work correctly with strings so we allow just
|
||||||
|
// one character.
|
||||||
|
} elseif (mb_strlen($csvEnclosed) > 1) {
|
||||||
|
$message = Message::error(
|
||||||
|
__('Invalid parameter for CSV import: %s')
|
||||||
|
);
|
||||||
|
$message->addParam(__('Columns enclosed with'));
|
||||||
|
$error = true;
|
||||||
|
$param_error = true;
|
||||||
|
// I could not find a test case where having no escaping characters
|
||||||
|
// confuses this script.
|
||||||
|
// But the parser won't work correctly with strings so we allow just
|
||||||
|
// one character.
|
||||||
|
} elseif (mb_strlen($csvEscaped) > 1) {
|
||||||
|
$message = Message::error(
|
||||||
|
__('Invalid parameter for CSV import: %s')
|
||||||
|
);
|
||||||
|
$message->addParam(__('Columns escaped with'));
|
||||||
|
$error = true;
|
||||||
|
$param_error = true;
|
||||||
|
} elseif (mb_strlen($csvNewLine) != 1
|
||||||
|
&& $csvNewLine != 'auto'
|
||||||
|
) {
|
||||||
|
$message = Message::error(
|
||||||
|
__('Invalid parameter for CSV import: %s')
|
||||||
|
);
|
||||||
|
$message->addParam(__('Lines terminated with'));
|
||||||
|
$error = true;
|
||||||
|
$param_error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is an error in the parameters entered,
|
||||||
|
// indicate that immediately.
|
||||||
|
if ($param_error) {
|
||||||
|
Generator::mysqlDie(
|
||||||
|
$message->getMessage(),
|
||||||
|
'',
|
||||||
|
false,
|
||||||
|
$errUrl
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return [$error, $message];
|
||||||
|
}
|
||||||
|
|
||||||
private function getTableNameFromImport(string $databaseName): string
|
private function getTableNameFromImport(string $databaseName): string
|
||||||
{
|
{
|
||||||
global $import_file_name;
|
global $import_file_name;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user