Skip to content

Commit 8c51321

Browse files
committed
Create ImportFormat enum
Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
1 parent 5bfceae commit 8c51321

4 files changed

Lines changed: 45 additions & 20 deletions

File tree

phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2592,7 +2592,7 @@ parameters:
25922592

25932593
-
25942594
message: "#^Cannot access offset 'message' on mixed\\.$#"
2595-
count: 7
2595+
count: 6
25962596
path: src/Controllers/Import/ImportController.php
25972597

25982598
-

psalm-baseline.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8648,6 +8648,11 @@
86488648
<code><![CDATA[string[]]]></code>
86498649
</PossiblyUnusedReturnValue>
86508650
</file>
8651+
<file src="src/Plugins/Import/ImportFormat.php">
8652+
<PossiblyUnusedMethod>
8653+
<code><![CDATA[getClassName]]></code>
8654+
</PossiblyUnusedMethod>
8655+
</file>
86518656
<file src="src/Plugins/Import/ImportLdi.php">
86528657
<DeprecatedMethod>
86538658
<code><![CDATA[Config::getInstance()]]></code>

src/Controllers/Import/ImportController.php

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,18 @@
2020
use PhpMyAdmin\Import\ImportSettings;
2121
use PhpMyAdmin\Message;
2222
use PhpMyAdmin\ParseAnalyze;
23-
use PhpMyAdmin\Plugins;
24-
use PhpMyAdmin\Plugins\ImportPlugin;
23+
use PhpMyAdmin\Plugins\Import\ImportFormat;
2524
use PhpMyAdmin\ResponseRenderer;
2625
use PhpMyAdmin\Sql;
2726
use PhpMyAdmin\Template;
2827
use PhpMyAdmin\Url;
2928
use PhpMyAdmin\Util;
3029
use PhpMyAdmin\Utils\ForeignKey;
3130
use Throwable;
31+
use Webmozart\Assert\Assert;
3232

3333
use function __;
3434
use function _ngettext;
35-
use function in_array;
3635
use function ini_get;
3736
use function ini_parse_quantity;
3837
use function ini_set;
@@ -187,7 +186,9 @@ public function __invoke(ServerRequest $request): void
187186
$this->response->addJSON('console_message_id', $consoleMessageId);
188187
}
189188

190-
if (! in_array($format, ['csv', 'ldi', 'mediawiki', 'ods', 'shp', 'sql', 'xml'], true)) {
189+
Assert::string($format);
190+
$importFormat = ImportFormat::tryFrom($format);
191+
if ($importFormat === null) {
191192
$this->response->setRequestStatus(false);
192193
$this->response->addHTML(Message::error(__('Incorrect format parameter'))->getDisplay());
193194

@@ -482,21 +483,8 @@ public function __invoke(ServerRequest $request): void
482483
$queriesToBeExecuted = [];
483484

484485
if (! $GLOBALS['error']) {
485-
/** @var ImportPlugin $importPlugin */
486-
$importPlugin = Plugins::getPlugin('import', $format, ImportSettings::$importType);
487-
if ($importPlugin == null) {
488-
$GLOBALS['message'] = Message::error(
489-
__('Could not load import plugins, please check your installation!'),
490-
);
491-
492-
$_SESSION['Import_message']['message'] = $GLOBALS['message']->getDisplay();
493-
494-
$this->response->setRequestStatus(false);
495-
$this->response->addJSON('message', $GLOBALS['message']->getDisplay());
496-
$this->response->addHTML($GLOBALS['message']->getDisplay());
497-
498-
return;
499-
}
486+
$GLOBALS['plugin_param'] = ImportSettings::$importType;
487+
$importPlugin = new ($importFormat->getClassName());
500488

501489
// Do the real import
502490
$defaultFkCheck = ForeignKey::handleDisableCheckInit();
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpMyAdmin\Plugins\Import;
6+
7+
use PhpMyAdmin\Plugins\ImportPlugin;
8+
9+
enum ImportFormat: string
10+
{
11+
case Csv = 'csv';
12+
case Ldi = 'ldi';
13+
case Mediawiki = 'mediawiki';
14+
case Ods = 'ods';
15+
case Shp = 'shp';
16+
case Sql = 'sql';
17+
case Xml = 'xml';
18+
19+
/** @return class-string<ImportPlugin> */
20+
public function getClassName(): string
21+
{
22+
return match ($this) {
23+
ImportFormat::Csv => ImportCsv::class,
24+
ImportFormat::Ldi => ImportLdi::class,
25+
ImportFormat::Mediawiki => ImportMediawiki::class,
26+
ImportFormat::Ods => ImportOds::class,
27+
ImportFormat::Shp => ImportShp::class,
28+
ImportFormat::Sql => ImportSql::class,
29+
ImportFormat::Xml => ImportXml::class,
30+
};
31+
}
32+
}

0 commit comments

Comments
 (0)