From 6b57013203836c0e9103d1f250ad28da1fa7e499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 25 May 2026 18:18:50 -0300 Subject: [PATCH] Refactor Header::getMessage() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces REQUEST with POST and GET. Signed-off-by: MaurĂ­cio Meneghini Fauth --- phpstan-baseline.neon | 12 ------ psalm-baseline.xml | 6 --- src/Header.php | 14 +++--- tests/unit/HeaderTest.php | 90 ++++++++++++++++++++++++++++++++++----- 4 files changed, 86 insertions(+), 36 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 7dece79dbe..2cccdb9372 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -6768,18 +6768,6 @@ parameters: count: 1 path: src/Header.php - - - message: '#^Construct empty\(\) is not allowed\. Use more strict comparison\.$#' - identifier: empty.notAllowed - count: 1 - path: src/Header.php - - - - message: '#^Parameter \#1 \$message of static method PhpMyAdmin\\Html\\Generator\:\:getMessage\(\) expects PhpMyAdmin\\Message\|string, mixed given\.$#' - identifier: argument.type - count: 1 - path: src/Header.php - - message: '#^Binary operation "\." between non\-falsy\-string and mixed results in an error\.$#' identifier: binaryOp.invalid diff --git a/psalm-baseline.xml b/psalm-baseline.xml index f7781360f6..024551b850 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -4599,12 +4599,6 @@ - - - - - - diff --git a/src/Header.php b/src/Header.php index 034b41edc7..5197580999 100644 --- a/src/Header.php +++ b/src/Header.php @@ -24,6 +24,7 @@ use function array_merge; use function htmlspecialchars; use function implode; use function ini_get; +use function is_string; use function json_encode; use const JSON_HEX_TAG; @@ -313,20 +314,19 @@ class Header */ public function getMessage(): string { - $retval = ''; - $message = ''; if (Current::$message !== null) { $message = Current::$message; Current::$message = null; - } elseif (! empty($_REQUEST['message'])) { - $message = $_REQUEST['message']; + + return Generator::getMessage($message); } - if ($message !== '') { - $retval .= Generator::getMessage($message); + $message = $_POST['message'] ?? $_GET['message'] ?? null; + if (is_string($message) && $message !== '') { + return Generator::getMessage(Message::notice(htmlspecialchars($message))); } - return $retval; + return ''; } /** @return array */ diff --git a/tests/unit/HeaderTest.php b/tests/unit/HeaderTest.php index 0620a4e2ae..5785c60c27 100644 --- a/tests/unit/HeaderTest.php +++ b/tests/unit/HeaderTest.php @@ -26,6 +26,8 @@ use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Medium; use ReflectionProperty; +use function sprintf; + #[CoversClass(Header::class)] #[Medium] class HeaderTest extends AbstractTestCase @@ -41,10 +43,6 @@ class HeaderTest extends AbstractTestCase DatabaseInterface::$instance = $this->createDatabaseInterface(); - Current::$message = Message::success('phpmyadminmessage'); - Current::$database = 'db'; - Current::$table = ''; - $config = Config::getInstance(); $config->settings['Servers'] = []; $config->selectedServer['DisableIS'] = false; @@ -155,15 +153,85 @@ class HeaderTest extends AbstractTestCase } /** - * Test for Get Message + * @param array|string|null $getParam + * @param array|string|null $postParam */ - public function testGetMessage(): void + #[DataProvider('getMessageProvider')] + public function testGetMessage( + string $expected, + string|null $current, + array|string|null $getParam, + array|string|null $postParam, + bool $hasSqlQuery, + ): void { + Current::$database = 'test_db'; + Current::$table = 'test_table'; + Current::$sqlQuery = $hasSqlQuery ? 'SELECT 1' : ''; + Current::$message = $current === null ? null : Message::success($current); + $_GET['message'] = $getParam; + $_POST['message'] = $postParam; + self::assertSame($expected, $this->getNewHeaderInstance()->getMessage()); + self::assertNull(Current::$message); + } + + /** @return iterable|string|null, array|string|null, bool}> */ + public static function getMessageProvider(): iterable { - $header = $this->getNewHeaderInstance(); - self::assertStringContainsString( - 'phpmyadminmessage', - $header->getMessage(), - ); + $message = <<<'HTML' + + HTML; + // phpcs:enable + + yield ['', null, null, null, false]; + yield ['', null, null, null, true]; + yield ['', null, '', null, false]; + yield ['', null, null, '', false]; + yield ['', null, [], null, false]; + yield ['', null, null, [], false]; + yield ['', null, ['message'], null, false]; + yield ['', null, null, ['message'], false]; + + yield [sprintf($message, 'alert-primary', 'ic_s_notice"> Get'), null, 'Get', null, false]; + yield [sprintf($message, 'alert-primary', 'ic_s_notice"> Post'), null, null, 'Post', false]; + yield [sprintf($message, 'alert-primary', 'ic_s_notice"> Post'), null, 'Get', 'Post', false]; + yield [sprintf($message, 'alert-success', 'ic_s_success"> Current'), 'Current', null, null, false]; + yield [sprintf($message, 'alert-success', 'ic_s_success"> Current'), 'Current', 'Get', null, false]; + yield [sprintf($message, 'alert-success', 'ic_s_success"> Current'), 'Current', null, 'Post', false]; + yield [sprintf($message, 'alert-success', 'ic_s_success"> Current'), 'Current', 'Get', 'Post', false]; + + yield [sprintf($messageWithSqlQuery, 'alert-success', 'ic_s_success"> Current'), 'Current', null, null, true]; + yield [ + sprintf($messageWithSqlQuery, 'alert-primary', 'ic_s_notice"> A <em>B</em> C D'), + null, + 'A B [em]C[/em] D', + null, + true, + ]; } /**