diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 28dc3da2e5..eb3e3c8b01 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -11859,12 +11859,6 @@ parameters: count: 2 path: src/Plugins/Export/ExportCodegen.php - - - message: '#^Cannot cast mixed to int\.$#' - identifier: cast.int - count: 1 - path: src/Plugins/Export/ExportCodegen.php - - message: '#^Parameter \#1 \$str of static method PhpMyAdmin\\Plugins\\Export\\ExportCodegen\:\:cgMakeIdentifier\(\) expects string, string\|null given\.$#' identifier: argument.type diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 524f464675..63d39c8e15 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1441,7 +1441,6 @@ - @@ -6884,9 +6883,6 @@ - - - @@ -6896,12 +6892,6 @@ - - - - - - diff --git a/psalm.xml b/psalm.xml index 1cab57c101..69ccf99bcb 100644 --- a/psalm.xml +++ b/psalm.xml @@ -44,7 +44,6 @@ cached_affected_rows: int|numeric-string, charset: string, charset_connection: string, - codegen_format: 0|1, collation_connection: string, complete_query: string, compression: 'none'|'zip'|'gzip', diff --git a/src/Controllers/Export/ExportController.php b/src/Controllers/Export/ExportController.php index c395d7a223..05c9aecfa1 100644 --- a/src/Controllers/Export/ExportController.php +++ b/src/Controllers/Export/ExportController.php @@ -494,10 +494,6 @@ final class ExportController implements InvocableController $GLOBALS['xkana'] = $postParams['xkana']; } - if (isset($postParams['codegen_format'])) { - $GLOBALS['codegen_format'] = $postParams['codegen_format']; - } - if (isset($postParams['excel_null'])) { $GLOBALS['excel_null'] = $postParams['excel_null']; } diff --git a/src/Plugins/Export/ExportCodegen.php b/src/Plugins/Export/ExportCodegen.php index 569e98c20b..25495bc590 100644 --- a/src/Plugins/Export/ExportCodegen.php +++ b/src/Plugins/Export/ExportCodegen.php @@ -21,6 +21,7 @@ use PhpMyAdmin\Util; use function __; use function implode; +use function is_numeric; use function preg_match; use function preg_replace; use function sprintf; @@ -39,6 +40,9 @@ class ExportCodegen extends ExportPlugin private const HANDLER_NHIBERNATE_CS = 0; private const HANDLER_NHIBERNATE_XML = 1; + /** @var self::HANDLER_NHIBERNATE_* */ + private int $format = self::HANDLER_NHIBERNATE_CS; + /** @psalm-return non-empty-lowercase-string */ public function getName(): string { @@ -140,17 +144,11 @@ class ExportCodegen extends ExportPlugin string $sqlQuery, array $aliases = [], ): bool { - $format = (int) $GLOBALS['codegen_format']; - - if ($format === self::HANDLER_NHIBERNATE_CS) { - return $this->export->outputHandler($this->handleNHibernateCSBody($db, $table, $aliases)); - } - - if ($format === self::HANDLER_NHIBERNATE_XML) { + if ($this->format === self::HANDLER_NHIBERNATE_XML) { return $this->export->outputHandler($this->handleNHibernateXMLBody($db, $table, $aliases)); } - return $this->export->outputHandler(sprintf('%s is not supported.', $format)); + return $this->export->outputHandler($this->handleNHibernateCSBody($db, $table, $aliases)); } /** @@ -354,5 +352,22 @@ class ExportCodegen extends ExportPlugin $exportConfig['codegen_structure_or_data'] ?? null, StructureOrData::Data, ); + $this->format = $this->setFormat( + $request->getParsedBodyParam('codegen_format'), + $exportConfig['codegen_format'] ?? null, + ); + } + + /** @return self::HANDLER_NHIBERNATE_* */ + private function setFormat(mixed $fromRequest, mixed $fromConfig): int + { + $value = self::HANDLER_NHIBERNATE_CS; + if (is_numeric($fromRequest)) { + $value = (int) $fromRequest; + } elseif (is_numeric($fromConfig)) { + $value = (int) $fromConfig; + } + + return $value === self::HANDLER_NHIBERNATE_XML ? self::HANDLER_NHIBERNATE_XML : self::HANDLER_NHIBERNATE_CS; } } diff --git a/tests/unit/Plugins/Export/ExportCodegenTest.php b/tests/unit/Plugins/Export/ExportCodegenTest.php index 9f5fa435e2..0dc1de3150 100644 --- a/tests/unit/Plugins/Export/ExportCodegenTest.php +++ b/tests/unit/Plugins/Export/ExportCodegenTest.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Plugins\Export; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Export\Export; +use PhpMyAdmin\Http\Factory\ServerRequestFactory; use PhpMyAdmin\Plugins\Export\ExportCodegen; use PhpMyAdmin\Properties\Options\Groups\OptionsPropertyMainGroup; use PhpMyAdmin\Properties\Options\Groups\OptionsPropertyRootGroup; @@ -166,13 +167,17 @@ class ExportCodegenTest extends AbstractTestCase public function testExportData(): void { - $GLOBALS['codegen_format'] = 1; $GLOBALS['output_kanji_conversion'] = false; $GLOBALS['output_charset_conversion'] = false; $GLOBALS['buffer_needed'] = false; $GLOBALS['asfile'] = true; $GLOBALS['save_on_server'] = false; + $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') + ->withParsedBody(['codegen_format' => '1']); + + $this->object->setExportOptions($request, []); + ob_start(); $this->object->exportData('test_db', 'test_table', 'SELECT * FROM `test_db`.`test_table`;'); $result = ob_get_clean(); @@ -196,12 +201,6 @@ class ExportCodegenTest extends AbstractTestCase . '', $result, ); - - $GLOBALS['codegen_format'] = 4; - - $this->object->exportData('test_db', 'test_table', 'SELECT * FROM `test_db`.`test_table`;'); - - $this->expectOutputString('4 is not supported.'); } public function testCgMakeIdentifier(): void