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,
+ };
+ }
+}