Skip to content

Commit 5548a8e

Browse files
refactor: migrate \$_REQUEST to ServerRequest in 9 controllers
Replace direct \$_REQUEST access with ServerRequest methods (getParam, has) in: - Database\ImportController - Database\Structure\EmptyTableController - Database\Structure\FavoriteTableController - Database\Structure\RealRowCountController - Database\StructureController - Operations\DatabaseController - Server\ImportController - Table\ChartController - Table\DeleteRowsController The empty() replacement in EmptyTableController and DeleteRowsController intentionally narrows the condition: empty() treats '0' as falsy, but 0 is a valid pagination offset for calculatePosForLastPage(). Update phpstan-baseline.neon and psalm-baseline.xml to reflect the changed type signatures. Update RealRowCountControllerTest to pass parameters via ServerRequest query params instead of \$_REQUEST globals. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
1 parent 2354c6b commit 5548a8e

12 files changed

Lines changed: 63 additions & 76 deletions

phpstan-baseline.neon

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1629,6 +1629,12 @@ parameters:
16291629
count: 1
16301630
path: src/Controllers/Database/Structure/CopyFormController.php
16311631

1632+
-
1633+
message: '#^Cannot cast mixed to int\.$#'
1634+
identifier: cast.int
1635+
count: 1
1636+
path: src/Controllers/Database/Structure/EmptyTableController.php
1637+
16321638
-
16331639
message: '#^Cannot access offset ''table_limit_offset'' on mixed\.$#'
16341640
identifier: offsetAccess.nonOffsetAccessible
@@ -1654,22 +1660,16 @@ parameters:
16541660
path: src/Controllers/Database/Structure/DropTableController.php
16551661

16561662
-
1657-
message: '#^Construct empty\(\) is not allowed\. Use more strict comparison\.$#'
1658-
identifier: empty.notAllowed
1659-
count: 1
1660-
path: src/Controllers/Database/Structure/EmptyTableController.php
1661-
1662-
-
1663-
message: '#^Parameter \#3 \$pos of method PhpMyAdmin\\Sql\:\:calculatePosForLastPage\(\) expects int\|null, mixed given\.$#'
1664-
identifier: argument.type
1663+
message: '#^Cannot cast mixed to string\.$#'
1664+
identifier: cast.string
16651665
count: 1
1666-
path: src/Controllers/Database/Structure/EmptyTableController.php
1666+
path: src/Controllers/Database/Structure/RealRowCountController.php
16671667

16681668
-
16691669
message: '#^Cannot cast mixed to string\.$#'
16701670
identifier: cast.string
1671-
count: 1
1672-
path: src/Controllers/Database/Structure/RealRowCountController.php
1671+
count: 2
1672+
path: src/Controllers/Database/StructureController.php
16731673

16741674
-
16751675
message: '#^Binary operation "\+" between bool\|int\|string\|null and bool\|int\|string\|null results in an error\.$#'
@@ -2667,6 +2667,12 @@ parameters:
26672667
count: 1
26682668
path: src/Controllers/Table/ChangeRowsController.php
26692669

2670+
-
2671+
message: '#^Cannot cast mixed to int\.$#'
2672+
identifier: cast.int
2673+
count: 2
2674+
path: src/Controllers/Table/ChartController.php
2675+
26702676
-
26712677
message: '#^Binary operation "\+" between int\|string and mixed results in an error\.$#'
26722678
identifier: binaryOp.invalid
@@ -2746,20 +2752,14 @@ parameters:
27462752
path: src/Controllers/Table/CreateController.php
27472753

27482754
-
2749-
message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#'
2750-
identifier: foreach.nonIterable
2751-
count: 1
2752-
path: src/Controllers/Table/DeleteRowsController.php
2753-
2754-
-
2755-
message: '#^Construct empty\(\) is not allowed\. Use more strict comparison\.$#'
2756-
identifier: empty.notAllowed
2755+
message: '#^Cannot cast mixed to int\.$#'
2756+
identifier: cast.int
27572757
count: 1
27582758
path: src/Controllers/Table/DeleteRowsController.php
27592759

27602760
-
2761-
message: '#^Parameter \#3 \$pos of method PhpMyAdmin\\Sql\:\:calculatePosForLastPage\(\) expects int\|null, mixed given\.$#'
2762-
identifier: argument.type
2761+
message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#'
2762+
identifier: foreach.nonIterable
27632763
count: 1
27642764
path: src/Controllers/Table/DeleteRowsController.php
27652765

psalm-baseline.xml

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,15 +1038,9 @@
10381038
</PossiblyUnusedMethod>
10391039
</file>
10401040
<file src="src/Controllers/Database/Structure/EmptyTableController.php">
1041-
<InvalidArgument>
1042-
<code><![CDATA[$_REQUEST['pos']]]></code>
1043-
</InvalidArgument>
10441041
<PossiblyUnusedMethod>
10451042
<code><![CDATA[__construct]]></code>
10461043
</PossiblyUnusedMethod>
1047-
<RiskyTruthyFalsyComparison>
1048-
<code><![CDATA[empty($_REQUEST['pos'])]]></code>
1049-
</RiskyTruthyFalsyComparison>
10501044
</file>
10511045
<file src="src/Controllers/Database/Structure/FavoriteTableController.php">
10521046
<MixedAssignment>
@@ -1064,9 +1058,6 @@
10641058
<code><![CDATA[Current::$database]]></code>
10651059
<code><![CDATA[Current::$database]]></code>
10661060
</MixedArgument>
1067-
<PossiblyInvalidCast>
1068-
<code><![CDATA[$parameters['table']]]></code>
1069-
</PossiblyInvalidCast>
10701061
<PossiblyUnusedReturnValue>
10711062
<code><![CDATA[Response]]></code>
10721063
</PossiblyUnusedReturnValue>
@@ -2074,18 +2065,6 @@
20742065
<MixedPropertyTypeCoercion>
20752066
<code><![CDATA[['db' => Current::$database, 'table' => Current::$table]]]></code>
20762067
</MixedPropertyTypeCoercion>
2077-
<PossiblyInvalidArgument>
2078-
<code><![CDATA[$_REQUEST['pos']]]></code>
2079-
<code><![CDATA[$_REQUEST['session_max_rows']]]></code>
2080-
<code><![CDATA[$rows]]></code>
2081-
<code><![CDATA[$start]]></code>
2082-
</PossiblyInvalidArgument>
2083-
<PossiblyInvalidOperand>
2084-
<code><![CDATA[$_REQUEST['pos']]]></code>
2085-
<code><![CDATA[$_REQUEST['pos']]]></code>
2086-
<code><![CDATA[$statement->limit->offset]]></code>
2087-
<code><![CDATA[$statement->limit->rowCount]]></code>
2088-
</PossiblyInvalidOperand>
20892068
<PossiblyUnusedReturnValue>
20902069
<code><![CDATA[Response]]></code>
20912070
</PossiblyUnusedReturnValue>
@@ -2139,9 +2118,6 @@
21392118
</PossiblyUnusedReturnValue>
21402119
</file>
21412120
<file src="src/Controllers/Table/DeleteRowsController.php">
2142-
<InvalidArgument>
2143-
<code><![CDATA[$_REQUEST['pos']]]></code>
2144-
</InvalidArgument>
21452121
<MixedArgument>
21462122
<code><![CDATA[$row]]></code>
21472123
</MixedArgument>
@@ -2154,9 +2130,6 @@
21542130
<PossiblyUnusedReturnValue>
21552131
<code><![CDATA[Response]]></code>
21562132
</PossiblyUnusedReturnValue>
2157-
<RiskyTruthyFalsyComparison>
2158-
<code><![CDATA[empty($_REQUEST['pos'])]]></code>
2159-
</RiskyTruthyFalsyComparison>
21602133
</file>
21612134
<file src="src/Controllers/Table/DropColumnConfirmationController.php">
21622135
<PossiblyUnusedReturnValue>

src/Controllers/Database/ImportController.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,14 @@ public function __invoke(ServerRequest $request): Response
7979
}
8080

8181
$offset = null;
82-
if (isset($_REQUEST['offset']) && is_numeric($_REQUEST['offset'])) {
83-
$offset = (int) $_REQUEST['offset'];
82+
if ($request->has('offset') && is_numeric($request->getParam('offset'))) {
83+
$offset = (int) $request->getParam('offset');
8484
}
8585

86-
$timeoutPassed = $_REQUEST['timeout_passed'] ?? null;
87-
$localImportFile = $_REQUEST['local_import_file'] ?? null;
86+
/** @var string|null $timeoutPassed */
87+
$timeoutPassed = $request->getParam('timeout_passed');
88+
/** @var string|null $localImportFile */
89+
$localImportFile = $request->getParam('local_import_file');
8890
$compressions = Import::getCompressions($this->config);
8991

9092
$charsets = Charsets::getCharsets($this->dbi, $this->config->selectedServer['DisableIS']);

src/Controllers/Database/Structure/EmptyTableController.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,12 @@ public function __invoke(ServerRequest $request): Response
6363
$this->dbi->query($aQuery);
6464
}
6565

66-
if (! empty($_REQUEST['pos'])) {
66+
$pos = $request->getParam('pos');
67+
if ($pos !== null && $pos !== '') {
6768
$_REQUEST['pos'] = $this->sql->calculatePosForLastPage(
6869
Current::$database,
6970
Current::$table,
70-
$_REQUEST['pos'],
71+
(int) $pos,
7172
);
7273
}
7374

src/Controllers/Database/Structure/FavoriteTableController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ public function __invoke(ServerRequest $request): Response
7373
$favoriteTable = new RecentFavoriteTable($databaseName, TableName::from($favoriteTableName));
7474
$alreadyFavorite = $favoriteInstance->contains($favoriteTable);
7575

76-
if (isset($_REQUEST['remove_favorite'])) {
76+
if ($request->has('remove_favorite')) {
7777
if ($alreadyFavorite) {
7878
// If already in favorite list, remove it.
7979
$favoriteInstance->remove($favoriteTable);
8080
$alreadyFavorite = false; // for favorite_anchor template
8181
}
82-
} elseif (isset($_REQUEST['add_favorite'])) {
82+
} elseif ($request->has('add_favorite')) {
8383
if (! $alreadyFavorite) {
8484
$numTables = count($favoriteInstance->getTables());
8585
if ($numTables === $this->config->settings['NumFavoriteTables']) {

src/Controllers/Database/Structure/RealRowCountController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public function __construct(
3434
public function __invoke(ServerRequest $request): Response
3535
{
3636
$parameters = [
37-
'real_row_count_all' => $_REQUEST['real_row_count_all'] ?? null,
38-
'table' => $_REQUEST['table'] ?? null,
37+
'real_row_count_all' => $request->getParam('real_row_count_all'),
38+
'table' => $request->getParam('table'),
3939
];
4040

4141
if (Current::$database === '') {

src/Controllers/Database/StructureController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private function getDatabaseInfo(ServerRequest $request): void
140140

141141
public function __invoke(ServerRequest $request): Response
142142
{
143-
$parameters = ['sort' => $_REQUEST['sort'] ?? null, 'sort_order' => $_REQUEST['sort_order'] ?? null];
143+
$parameters = ['sort' => $request->getParam('sort'), 'sort_order' => $request->getParam('sort_order')];
144144

145145
if (Current::$database === '') {
146146
return $this->response->missingParameterError('db');
@@ -184,11 +184,11 @@ public function __invoke(ServerRequest $request): Response
184184
if ($this->numTables > 0) {
185185
$urlParams = ['pos' => $this->position, 'db' => Current::$database];
186186
if (isset($parameters['sort'])) {
187-
$urlParams['sort'] = $parameters['sort'];
187+
$urlParams['sort'] = (string) $parameters['sort'];
188188
}
189189

190190
if (isset($parameters['sort_order'])) {
191-
$urlParams['sort_order'] = $parameters['sort_order'];
191+
$urlParams['sort_order'] = (string) $parameters['sort_order'];
192192
}
193193

194194
$listNavigator = Generator::getListNavigator(

src/Controllers/Operations/DatabaseController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function __invoke(ServerRequest $request): Response
7979
}
8080

8181
if ($newDatabaseName !== null) {
82-
if ($newDatabaseName->getName() === $_REQUEST['db']) {
82+
if ($newDatabaseName->getName() === $request->getParam('db')) {
8383
Current::$message = Message::error(
8484
__('Cannot copy database to the same name. Change the name and try again.'),
8585
);

src/Controllers/Server/ImportController.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,14 @@ public function __invoke(ServerRequest $request): Response
6464
}
6565

6666
$offset = null;
67-
if (isset($_REQUEST['offset']) && is_numeric($_REQUEST['offset'])) {
68-
$offset = (int) $_REQUEST['offset'];
67+
if ($request->has('offset') && is_numeric($request->getParam('offset'))) {
68+
$offset = (int) $request->getParam('offset');
6969
}
7070

71-
$timeoutPassed = $_REQUEST['timeout_passed'] ?? null;
72-
$localImportFile = $_REQUEST['local_import_file'] ?? null;
71+
/** @var string|null $timeoutPassed */
72+
$timeoutPassed = $request->getParam('timeout_passed');
73+
/** @var string|null $localImportFile */
74+
$localImportFile = $request->getParam('local_import_file');
7375
$compressions = Import::getCompressions($this->config);
7476

7577
$charsets = Charsets::getCharsets($this->dbi, $this->config->selectedServer['DisableIS']);

src/Controllers/Table/ChartController.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function __construct(
4646

4747
public function __invoke(ServerRequest $request): Response
4848
{
49-
if (isset($_REQUEST['pos'], $_REQUEST['session_max_rows']) && $request->isAjax()) {
49+
if ($request->has('pos') && $request->has('session_max_rows') && $request->isAjax()) {
5050
$this->ajax($request);
5151

5252
return $this->response->response();
@@ -215,11 +215,13 @@ public function ajax(ServerRequest $request): void
215215
$parser = new Parser(Current::$sqlQuery);
216216
/** @var SelectStatement $statement */
217217
$statement = $parser->statements[0];
218+
$pos = (int) $request->getParam('pos');
219+
$sessionMaxRows = (int) $request->getParam('session_max_rows');
218220
if (empty($statement->limit)) {
219-
$statement->limit = new Limit($_REQUEST['session_max_rows'], $_REQUEST['pos']);
221+
$statement->limit = new Limit($sessionMaxRows, $pos);
220222
} else {
221-
$start = $statement->limit->offset + $_REQUEST['pos'];
222-
$rows = min($_REQUEST['session_max_rows'], $statement->limit->rowCount - $_REQUEST['pos']);
223+
$start = (int) $statement->limit->offset + $pos;
224+
$rows = min($sessionMaxRows, (int) $statement->limit->rowCount - $pos);
223225
$statement->limit = new Limit($rows, $start);
224226
}
225227

0 commit comments

Comments
 (0)