Refactor Header::getMessage()

Replaces REQUEST with POST and GET.

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.com.br>
This commit is contained in:
Maurício Meneghini Fauth 2026-05-25 18:18:50 -03:00
parent e89cda7ecd
commit 6b57013203
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
4 changed files with 86 additions and 36 deletions

View File

@ -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

View File

@ -4599,12 +4599,6 @@
<MixedAssignment>
<code><![CDATA[$pftext]]></code>
</MixedAssignment>
<PossiblyInvalidArgument>
<code><![CDATA[$message]]></code>
</PossiblyInvalidArgument>
<RiskyTruthyFalsyComparison>
<code><![CDATA[empty($_REQUEST['message'])]]></code>
</RiskyTruthyFalsyComparison>
</file>
<file src="src/Html/Generator.php">
<DeprecatedMethod>

View File

@ -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<string, string> */

View File

@ -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<mixed>|string|null $getParam
* @param array<mixed>|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<array-key, array{string, string|null, array<mixed>|string|null, array<mixed>|string|null, bool}> */
public static function getMessageProvider(): iterable
{
$header = $this->getNewHeaderInstance();
self::assertStringContainsString(
'phpmyadminmessage',
$header->getMessage(),
);
$message = <<<'HTML'
<div class="alert %s" role="alert">
<img src="themes/dot.gif" title="" alt="" class="icon %s
</div>
HTML;
// phpcs:disable Generic.Files.LineLength.TooLong
$messageWithSqlQuery = <<<'HTML'
<div class="card mb-3 result_query">
<div class="alert %s border-top-0 border-start-0 border-end-0 rounded-bottom-0 mb-0" role="alert">
<img src="themes/dot.gif" title="" alt="" class="icon %s
</div>
<div class="card-body sqlOuter"><pre><code class="sql" dir="ltr">SELECT 1</code></pre></div>
<div class="card-footer tools d-print-none">
<div class="row align-items-center">
<div class="col-auto">
<form action="index.php?route=/sql&db=test_db&table=test_table&lang=en" method="post" class="disableAjax">
<input type="hidden" name="db" value="test_db"><input type="hidden" name="table" value="test_table"><input type="hidden" name="lang" value="en"><input type="hidden" name="token" value="token">
<input type="hidden" name="sql_query" value="SELECT 1">
</form></div>
<div class="col-auto"><a href="#" class="btn btn-link inline_edit_sql">Edit inline</a></div>
<div class="col-auto"><a href="index.php" data-post="route=/table/sql&db=test_db&table=test_table&sql_query=SELECT+1&show_query=1&lang=en" class="btn btn-link">Edit</a></div>
<div class="col-auto"><a href="index.php" data-post="route=/import&db=test_db&table=test_table&sql_query=EXPLAIN+SELECT+1&lang=en" class="btn btn-link">Explain SQL</a></div>
<div class="col-auto"><a href="index.php" data-post="route=/import&db=test_db&table=test_table&sql_query=SELECT+1&show_query=1&show_as_php=1&lang=en" class="btn btn-link">Create PHP code</a></div>
<div class="col-auto"><a href="index.php" data-post="route=/sql&db=test_db&table=test_table&sql_query=SELECT+1&show_query=1&lang=en" class="btn btn-link">Refresh</a></div>
</div></div></div>
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 &lt;em&gt;B&lt;/em&gt; <em>C</em> D'),
null,
'A <em>B</em> [em]C[/em] D',
null,
true,
];
}
/**