diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 004f9da8ba..05395142c5 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -2592,7 +2592,7 @@ parameters: - message: "#^Cannot access offset 'message' on mixed\\.$#" - count: 7 + count: 6 path: src/Controllers/Import/ImportController.php - diff --git a/psalm-baseline.xml b/psalm-baseline.xml index fb8d150fd6..9397624cd4 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -8648,6 +8648,11 @@ + + + + + diff --git a/src/Controllers/Import/ImportController.php b/src/Controllers/Import/ImportController.php index 2e29e02cde..0804652e71 100644 --- a/src/Controllers/Import/ImportController.php +++ b/src/Controllers/Import/ImportController.php @@ -20,8 +20,7 @@ use PhpMyAdmin\Import\Import; use PhpMyAdmin\Import\ImportSettings; use PhpMyAdmin\Message; use PhpMyAdmin\ParseAnalyze; -use PhpMyAdmin\Plugins; -use PhpMyAdmin\Plugins\ImportPlugin; +use PhpMyAdmin\Plugins\Import\ImportFormat; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Sql; use PhpMyAdmin\Template; @@ -29,10 +28,10 @@ use PhpMyAdmin\Url; use PhpMyAdmin\Util; use PhpMyAdmin\Utils\ForeignKey; use Throwable; +use Webmozart\Assert\Assert; use function __; use function _ngettext; -use function in_array; use function ini_get; use function ini_parse_quantity; use function ini_set; @@ -187,7 +186,9 @@ final class ImportController extends AbstractController $this->response->addJSON('console_message_id', $consoleMessageId); } - if (! in_array($format, ['csv', 'ldi', 'mediawiki', 'ods', 'shp', 'sql', 'xml'], true)) { + Assert::string($format); + $importFormat = ImportFormat::tryFrom($format); + if ($importFormat === null) { $this->response->setRequestStatus(false); $this->response->addHTML(Message::error(__('Incorrect format parameter'))->getDisplay()); @@ -482,21 +483,8 @@ final class ImportController extends AbstractController $queriesToBeExecuted = []; if (! $GLOBALS['error']) { - /** @var ImportPlugin $importPlugin */ - $importPlugin = Plugins::getPlugin('import', $format, ImportSettings::$importType); - if ($importPlugin == null) { - $GLOBALS['message'] = Message::error( - __('Could not load import plugins, please check your installation!'), - ); - - $_SESSION['Import_message']['message'] = $GLOBALS['message']->getDisplay(); - - $this->response->setRequestStatus(false); - $this->response->addJSON('message', $GLOBALS['message']->getDisplay()); - $this->response->addHTML($GLOBALS['message']->getDisplay()); - - return; - } + $GLOBALS['plugin_param'] = ImportSettings::$importType; + $importPlugin = new ($importFormat->getClassName()); // Do the real import $defaultFkCheck = ForeignKey::handleDisableCheckInit(); diff --git a/src/Plugins/Import/ImportFormat.php b/src/Plugins/Import/ImportFormat.php new file mode 100644 index 0000000000..52b4619a7d --- /dev/null +++ b/src/Plugins/Import/ImportFormat.php @@ -0,0 +1,32 @@ + */ + public function getClassName(): string + { + return match ($this) { + ImportFormat::Csv => ImportCsv::class, + ImportFormat::Ldi => ImportLdi::class, + ImportFormat::Mediawiki => ImportMediawiki::class, + ImportFormat::Ods => ImportOds::class, + ImportFormat::Shp => ImportShp::class, + ImportFormat::Sql => ImportSql::class, + ImportFormat::Xml => ImportXml::class, + }; + } +}