Merge #20105 - Fix #19891 - invalid $cfg['Export']['format'] or $cfg['Import']['format'] defaulting to sql in dropdown
Pull-request: #20105 Fixes: #19891 Signed-off-by: William Desportes <williamdes@wdes.fr>
This commit is contained in:
commit
6f66b76c5d
@ -94,6 +94,7 @@ final class ImportController extends AbstractController
|
||||
];
|
||||
|
||||
$default = isset($_GET['format']) ? (string) $_GET['format'] : Plugins::getDefault('Import', 'format');
|
||||
$default = Plugins::validatePluginNameOrUseDefault($importList, $default);
|
||||
$choice = Plugins::getChoice($importList, $default);
|
||||
$options = Plugins::getOptions('Import', $importList);
|
||||
$skipQueriesDefault = Plugins::getDefault('Import', 'skip_queries');
|
||||
|
||||
@ -79,6 +79,7 @@ final class ImportController extends AbstractController
|
||||
];
|
||||
|
||||
$default = isset($_GET['format']) ? (string) $_GET['format'] : Plugins::getDefault('Import', 'format');
|
||||
$default = Plugins::validatePluginNameOrUseDefault($importList, $default);
|
||||
$choice = Plugins::getChoice($importList, $default);
|
||||
$options = Plugins::getOptions('Import', $importList);
|
||||
$skipQueriesDefault = Plugins::getDefault('Import', 'skip_queries');
|
||||
|
||||
@ -92,6 +92,7 @@ final class ImportController extends AbstractController
|
||||
];
|
||||
|
||||
$default = isset($_GET['format']) ? (string) $_GET['format'] : Plugins::getDefault('Import', 'format');
|
||||
$default = Plugins::validatePluginNameOrUseDefault($importList, $default);
|
||||
$choice = Plugins::getChoice($importList, $default);
|
||||
$options = Plugins::getOptions('Import', $importList);
|
||||
$skipQueriesDefault = Plugins::getDefault('Import', 'skip_queries');
|
||||
|
||||
@ -132,6 +132,8 @@ final class Options
|
||||
}
|
||||
|
||||
$default = isset($_GET['what']) ? (string) $_GET['what'] : Plugins::getDefault('Export', 'format');
|
||||
$default = Plugins::validatePluginNameOrUseDefault($exportList, $default);
|
||||
|
||||
$dropdown = Plugins::getChoice($exportList, $default);
|
||||
$tableObject = new Table($table, $db);
|
||||
$rows = [];
|
||||
|
||||
@ -25,10 +25,12 @@ use SplFileInfo;
|
||||
use Throwable;
|
||||
|
||||
use function __;
|
||||
use function array_map;
|
||||
use function class_exists;
|
||||
use function count;
|
||||
use function get_class;
|
||||
use function htmlspecialchars;
|
||||
use function in_array;
|
||||
use function is_subclass_of;
|
||||
use function mb_strpos;
|
||||
use function mb_strtolower;
|
||||
@ -189,6 +191,25 @@ class Plugins
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the plugin name and returns it, or falls back to 'sql' if invalid.
|
||||
*
|
||||
* @param ExportPlugin[]|ImportPlugin[] $plugins
|
||||
*/
|
||||
public static function validatePluginNameOrUseDefault(array $plugins, string $pluginName): string
|
||||
{
|
||||
// If the format is invalid, fall back to 'sql' (issue: #19891)
|
||||
$validNames = array_map(static function ($plugin) {
|
||||
return $plugin->getName();
|
||||
}, $plugins);
|
||||
|
||||
if (! in_array($pluginName, $validNames, true)) {
|
||||
return 'sql';
|
||||
}
|
||||
|
||||
return $pluginName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns default value for option $opt
|
||||
*
|
||||
|
||||
@ -125,4 +125,31 @@ class PluginsTest extends AbstractTestCase
|
||||
];
|
||||
self::assertSame($expected, $actual);
|
||||
}
|
||||
|
||||
public function testValidatePluginNameOrUseDefaultForExport(): void
|
||||
{
|
||||
$exportList = [
|
||||
new Plugins\Export\ExportJson(),
|
||||
new Plugins\Export\ExportOds(),
|
||||
new Plugins\Export\ExportSql(),
|
||||
new Plugins\Export\ExportXml(),
|
||||
];
|
||||
$actual = Plugins::validatePluginNameOrUseDefault($exportList, 'xml');
|
||||
self::assertSame('xml', $actual);
|
||||
$actual = Plugins::validatePluginNameOrUseDefault($exportList, 'lmx');
|
||||
self::assertSame('sql', $actual);
|
||||
}
|
||||
|
||||
public function testValidatePluginNameOrUseDefaultForImport(): void
|
||||
{
|
||||
$importList = [
|
||||
new Plugins\Import\ImportOds(),
|
||||
new Plugins\Import\ImportSql(),
|
||||
new Plugins\Import\ImportXml(),
|
||||
];
|
||||
$actual = Plugins::validatePluginNameOrUseDefault($importList, 'xml');
|
||||
self::assertSame('xml', $actual);
|
||||
$actual = Plugins::validatePluginNameOrUseDefault($importList, 'lmx');
|
||||
self::assertSame('sql', $actual);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user