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'
+
+

+
+

SELECT 1
+
+ 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,
+ ];
}
/**