Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Tekiela <tekiela246@gmail.com>2022-11-05 19:04:45 +0300
committerGitHub <noreply@github.com>2022-11-05 19:04:45 +0300
commit959849f446825a03d28d19aa35bc18d9dd14ce98 (patch)
treefa46f651cc70834163623b1a288c1e6799a75122
parent95a93ba9092de9aaf170719396a46781bf227055 (diff)
Introduce ServerRequest::hasBodyParam() (#17870)
* Drop Sql::setUiProp() * Remove ternary operator * Improve array guard * Remove redundant isset * Implement hasBodyParam() * Add has() and hasQueryParam() Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
-rw-r--r--libraries/classes/Controllers/CheckRelationsController.php13
-rw-r--r--libraries/classes/Controllers/Database/SearchController.php2
-rw-r--r--libraries/classes/Controllers/Database/SqlController.php6
-rw-r--r--libraries/classes/Controllers/ErrorReportController.php8
-rw-r--r--libraries/classes/Controllers/Export/ExportController.php3
-rw-r--r--libraries/classes/Controllers/GisDataEditorController.php4
-rw-r--r--libraries/classes/Controllers/SchemaExportController.php2
-rw-r--r--libraries/classes/Controllers/Sql/ColumnPreferencesController.php22
-rw-r--r--libraries/classes/Controllers/Sql/SetValuesController.php3
-rw-r--r--libraries/classes/Controllers/Sql/SqlController.php6
-rw-r--r--libraries/classes/Controllers/Table/Structure/AddIndexController.php3
-rw-r--r--libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php3
-rw-r--r--libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php3
-rw-r--r--libraries/classes/Controllers/Table/Structure/FulltextController.php3
-rw-r--r--libraries/classes/Controllers/Table/Structure/MoveColumnsController.php2
-rw-r--r--libraries/classes/Controllers/Table/Structure/SpatialController.php3
-rw-r--r--libraries/classes/Controllers/Table/Structure/UniqueController.php3
-rw-r--r--libraries/classes/Controllers/Table/TrackingController.php18
-rw-r--r--libraries/classes/Controllers/TableController.php2
-rw-r--r--libraries/classes/Controllers/View/CreateController.php21
-rw-r--r--libraries/classes/Controllers/View/OperationsController.php7
-rw-r--r--libraries/classes/Http/ServerRequest.php20
-rw-r--r--libraries/classes/Sql.php27
-rw-r--r--libraries/services_controllers.php1
-rw-r--r--phpstan-baseline.neon71
-rw-r--r--psalm-baseline.xml65
-rw-r--r--test/classes/Http/ServerRequestTest.php28
27 files changed, 127 insertions, 222 deletions
diff --git a/libraries/classes/Controllers/CheckRelationsController.php b/libraries/classes/Controllers/CheckRelationsController.php
index 06ed459930..b4a1369c59 100644
--- a/libraries/classes/Controllers/CheckRelationsController.php
+++ b/libraries/classes/Controllers/CheckRelationsController.php
@@ -28,29 +28,22 @@ class CheckRelationsController extends AbstractController
public function __invoke(ServerRequest $request): void
{
- /** @var string|null $createPmaDb */
- $createPmaDb = $request->getParsedBodyParam('create_pmadb');
- /** @var string|null $fixAllPmaDb */
- $fixAllPmaDb = $request->getParsedBodyParam('fixall_pmadb');
- /** @var string|null $fixPmaDb */
- $fixPmaDb = $request->getParsedBodyParam('fix_pmadb');
-
$cfgStorageDbName = $this->relation->getConfigurationStorageDbName();
$db = DatabaseName::tryFromValue($GLOBALS['db']);
// If request for creating the pmadb
- if (isset($createPmaDb) && $this->relation->createPmaDatabase($cfgStorageDbName)) {
+ if ($request->hasBodyParam('create_pmadb') && $this->relation->createPmaDatabase($cfgStorageDbName)) {
$this->relation->fixPmaTables($cfgStorageDbName);
}
// If request for creating all PMA tables.
- if (isset($fixAllPmaDb) && $db !== null) {
+ if ($request->hasBodyParam('fixall_pmadb') && $db !== null) {
$this->relation->fixPmaTables($db->getName());
}
// If request for creating missing PMA tables.
- if (isset($fixPmaDb)) {
+ if ($request->hasBodyParam('fix_pmadb')) {
$relationParameters = $this->relation->getRelationParameters();
$this->relation->fixPmaTables((string) $relationParameters->db);
}
diff --git a/libraries/classes/Controllers/Database/SearchController.php b/libraries/classes/Controllers/Database/SearchController.php
index 06562f9e2d..ee27a48b5a 100644
--- a/libraries/classes/Controllers/Database/SearchController.php
+++ b/libraries/classes/Controllers/Database/SearchController.php
@@ -79,7 +79,7 @@ class SearchController extends AbstractController
}
// Main search form has been submitted, get results
- if ($request->getParsedBodyParam('submit_search') !== null) {
+ if ($request->hasBodyParam('submit_search')) {
$this->response->addHTML($databaseSearch->getSearchResults());
}
diff --git a/libraries/classes/Controllers/Database/SqlController.php b/libraries/classes/Controllers/Database/SqlController.php
index 2d9c23e006..2124b544d5 100644
--- a/libraries/classes/Controllers/Database/SqlController.php
+++ b/libraries/classes/Controllers/Database/SqlController.php
@@ -56,16 +56,14 @@ class SqlController extends AbstractController
*/
$GLOBALS['goto'] = Url::getFromRoute('/database/sql');
$GLOBALS['back'] = $GLOBALS['goto'];
- $delimiter = $request->getParsedBodyParam('delimiter');
+ $delimiter = $request->getParsedBodyParam('delimiter', ';');
$this->response->addHTML($this->sqlQueryForm->getHtml(
$GLOBALS['db'],
'',
true,
false,
- $delimiter !== null
- ? htmlspecialchars($delimiter)
- : ';'
+ htmlspecialchars($delimiter)
));
}
}
diff --git a/libraries/classes/Controllers/ErrorReportController.php b/libraries/classes/Controllers/ErrorReportController.php
index 2f9579a068..21300693b2 100644
--- a/libraries/classes/Controllers/ErrorReportController.php
+++ b/libraries/classes/Controllers/ErrorReportController.php
@@ -48,20 +48,16 @@ class ErrorReportController extends AbstractController
{
/** @var string $exceptionType */
$exceptionType = $request->getParsedBodyParam('exception_type', '');
- /** @var string|null $sendErrorReport */
- $sendErrorReport = $request->getParsedBodyParam('send_error_report');
/** @var string|null $automatic */
$automatic = $request->getParsedBodyParam('automatic');
/** @var string|null $alwaysSend */
$alwaysSend = $request->getParsedBodyParam('always_send');
- /** @var string|null $getSettings */
- $getSettings = $request->getParsedBodyParam('get_settings');
if (! in_array($exceptionType, ['js', 'php'])) {
return;
}
- if ($sendErrorReport) {
+ if ($request->hasBodyParam('send_error_report')) {
if ($exceptionType === 'php') {
/**
* Prevent infinite error submission.
@@ -148,7 +144,7 @@ class ErrorReportController extends AbstractController
$userPreferences->persistOption('SendErrorReports', 'always', 'ask');
}
}
- } elseif ($getSettings) {
+ } elseif ($request->hasBodyParam('get_settings')) {
$this->response->addJSON('report_setting', $GLOBALS['cfg']['SendErrorReports']);
} elseif ($exceptionType === 'js') {
$this->response->addJSON('report_modal', $this->errorReport->getEmptyModal());
diff --git a/libraries/classes/Controllers/Export/ExportController.php b/libraries/classes/Controllers/Export/ExportController.php
index 2c36018c5e..70baec81ab 100644
--- a/libraries/classes/Controllers/Export/ExportController.php
+++ b/libraries/classes/Controllers/Export/ExportController.php
@@ -109,8 +109,7 @@ final class ExportController extends AbstractController
$onServerParam = $request->getParsedBodyParam('onserver');
/** @var array|null $aliasesParam */
$aliasesParam = $request->getParsedBodyParam('aliases');
- /** @var string|null $structureOrDataForced */
- $structureOrDataForced = $request->getParsedBodyParam('structure_or_data_forced');
+ $structureOrDataForced = $request->hasBodyParam('structure_or_data_forced');
$this->addScriptFiles(['export_output.js']);
diff --git a/libraries/classes/Controllers/GisDataEditorController.php b/libraries/classes/Controllers/GisDataEditorController.php
index b538d3effd..7a6fbfc322 100644
--- a/libraries/classes/Controllers/GisDataEditorController.php
+++ b/libraries/classes/Controllers/GisDataEditorController.php
@@ -51,8 +51,6 @@ class GisDataEditorController extends AbstractController
$type = $request->getParsedBodyParam('type', '');
/** @var string|null $value */
$value = $request->getParsedBodyParam('value');
- /** @var string|null $generate */
- $generate = $request->getParsedBodyParam('generate');
/** @var string|null $inputName */
$inputName = $request->getParsedBodyParam('input_name');
@@ -143,7 +141,7 @@ class GisDataEditorController extends AbstractController
->asOl();
// If the call is to update the WKT and visualization make an AJAX response
- if ($generate) {
+ if ($request->hasBodyParam('generate')) {
$this->response->addJSON([
'result' => $GLOBALS['result'],
'visualization' => $GLOBALS['visualization'],
diff --git a/libraries/classes/Controllers/SchemaExportController.php b/libraries/classes/Controllers/SchemaExportController.php
index c3882825cf..7a9d26b726 100644
--- a/libraries/classes/Controllers/SchemaExportController.php
+++ b/libraries/classes/Controllers/SchemaExportController.php
@@ -32,7 +32,7 @@ class SchemaExportController
public function __invoke(ServerRequest $request): void
{
- if ($request->getParsedBodyParam('export_type') === null) {
+ if (! $request->hasBodyParam('export_type')) {
$errorMessage = __('Missing parameter:') . ' export_type'
. MySQLDocumentation::showDocumentation('faq', 'faqmissingparameters', true)
. '[br]';
diff --git a/libraries/classes/Controllers/Sql/ColumnPreferencesController.php b/libraries/classes/Controllers/Sql/ColumnPreferencesController.php
index ca16b9b1f1..e4d229d1b1 100644
--- a/libraries/classes/Controllers/Sql/ColumnPreferencesController.php
+++ b/libraries/classes/Controllers/Sql/ColumnPreferencesController.php
@@ -11,13 +11,15 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Sql;
+use PhpMyAdmin\Table;
use PhpMyAdmin\Template;
+use function array_map;
+use function explode;
+use function is_string;
+
final class ColumnPreferencesController extends AbstractController
{
- /** @var Sql */
- private $sql;
-
/** @var CheckUserPrivileges */
private $checkUserPrivileges;
@@ -32,7 +34,6 @@ final class ColumnPreferencesController extends AbstractController
DatabaseInterface $dbi
) {
parent::__construct($response, $template);
- $this->sql = $sql;
$this->checkUserPrivileges = $checkUserPrivileges;
$this->dbi = $dbi;
}
@@ -44,16 +45,21 @@ final class ColumnPreferencesController extends AbstractController
$tableObject = $this->dbi->getTable($GLOBALS['db'], $GLOBALS['table']);
$status = false;
+ /** @var string|null $tableCreateTime */
+ $tableCreateTime = $request->getParsedBodyParam('table_create_time');
+
// set column order
$colorder = $request->getParsedBodyParam('col_order');
- if ($colorder !== null) {
- $status = $this->sql->setColumnProperty($tableObject, 'col_order');
+ if (is_string($colorder)) {
+ $propertyValue = array_map('intval', explode(',', $colorder));
+ $status = $tableObject->setUiProp(Table::PROP_COLUMN_ORDER, $propertyValue, $tableCreateTime);
}
// set column visibility
$colvisib = $request->getParsedBodyParam('col_visib');
- if ($status === true && $colvisib !== null) {
- $status = $this->sql->setColumnProperty($tableObject, 'col_visib');
+ if ($status === true && is_string($colvisib)) {
+ $propertyValue = array_map('intval', explode(',', $colvisib));
+ $status = $tableObject->setUiProp(Table::PROP_COLUMN_ORDER, $propertyValue, $tableCreateTime);
}
if ($status instanceof Message) {
diff --git a/libraries/classes/Controllers/Sql/SetValuesController.php b/libraries/classes/Controllers/Sql/SetValuesController.php
index ec01e0d896..8ff77f6204 100644
--- a/libraries/classes/Controllers/Sql/SetValuesController.php
+++ b/libraries/classes/Controllers/Sql/SetValuesController.php
@@ -44,7 +44,6 @@ final class SetValuesController extends AbstractController
$column = $request->getParsedBodyParam('column');
$currentValue = $request->getParsedBodyParam('curr_value');
- $fullValues = $request->getParsedBodyParam('get_full_values', false);
$whereClause = $request->getParsedBodyParam('where_clause');
$values = $this->sql->getValuesForColumn($GLOBALS['db'], $GLOBALS['table'], $column);
@@ -57,7 +56,7 @@ final class SetValuesController extends AbstractController
}
// If the $currentValue was truncated, we should fetch the correct full values from the table.
- if ($fullValues && ! empty($whereClause)) {
+ if ($request->hasBodyParam('get_full_values') && ! empty($whereClause)) {
$currentValue = $this->sql->getFullValuesForSetColumn(
$GLOBALS['db'],
$GLOBALS['table'],
diff --git a/libraries/classes/Controllers/Sql/SqlController.php b/libraries/classes/Controllers/Sql/SqlController.php
index 4452568bb3..699f9ac300 100644
--- a/libraries/classes/Controllers/Sql/SqlController.php
+++ b/libraries/classes/Controllers/Sql/SqlController.php
@@ -191,9 +191,9 @@ class SqlController extends AbstractController
/**
* Bookmark add
*/
- $store_bkm = $request->getParsedBodyParam('store_bkm');
- $bkm_all_users = $request->getParsedBodyParam('bkm_all_users');
- if ($store_bkm !== null && $bkm_fields !== null) {
+ $store_bkm = $request->hasBodyParam('store_bkm');
+ $bkm_all_users = $request->getParsedBodyParam('bkm_all_users'); // Should this be hasBodyParam?
+ if ($store_bkm && $bkm_fields !== null) {
$this->addBookmark($GLOBALS['goto'], $bkm_fields, (bool) $bkm_all_users);
return;
diff --git a/libraries/classes/Controllers/Table/Structure/AddIndexController.php b/libraries/classes/Controllers/Table/Structure/AddIndexController.php
index 72d8ca2518..8e232be87d 100644
--- a/libraries/classes/Controllers/Table/Structure/AddIndexController.php
+++ b/libraries/classes/Controllers/Table/Structure/AddIndexController.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Util;
use function __;
use function count;
+use function is_array;
final class AddIndexController extends AbstractController
{
@@ -41,7 +42,7 @@ final class AddIndexController extends AbstractController
$selected = $request->getParsedBodyParam('selected_fld', []);
- if (empty($selected)) {
+ if (! is_array($selected) || $selected === []) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
diff --git a/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php b/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php
index 057010ade7..be2949eb76 100644
--- a/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php
+++ b/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
+use function is_array;
final class CentralColumnsAddController extends AbstractController
{
@@ -39,7 +40,7 @@ final class CentralColumnsAddController extends AbstractController
$selected = $request->getParsedBodyParam('selected_fld', []);
- if (empty($selected)) {
+ if (! is_array($selected) || $selected === []) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
diff --git a/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php b/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php
index 6f3665e68c..b5ea5d8d47 100644
--- a/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php
+++ b/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
+use function is_array;
final class CentralColumnsRemoveController extends AbstractController
{
@@ -39,7 +40,7 @@ final class CentralColumnsRemoveController extends AbstractController
$selected = $request->getParsedBodyParam('selected_fld', []);
- if (empty($selected)) {
+ if (! is_array($selected) || $selected === []) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
diff --git a/libraries/classes/Controllers/Table/Structure/FulltextController.php b/libraries/classes/Controllers/Table/Structure/FulltextController.php
index 5cc532b2e7..06251edbc6 100644
--- a/libraries/classes/Controllers/Table/Structure/FulltextController.php
+++ b/libraries/classes/Controllers/Table/Structure/FulltextController.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Util;
use function __;
use function count;
+use function is_array;
final class FulltextController extends AbstractController
{
@@ -41,7 +42,7 @@ final class FulltextController extends AbstractController
$selected = $request->getParsedBodyParam('selected_fld', []);
- if (empty($selected)) {
+ if (! is_array($selected) || $selected === []) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
diff --git a/libraries/classes/Controllers/Table/Structure/MoveColumnsController.php b/libraries/classes/Controllers/Table/Structure/MoveColumnsController.php
index 9b72e0fe20..924d7b4d7a 100644
--- a/libraries/classes/Controllers/Table/Structure/MoveColumnsController.php
+++ b/libraries/classes/Controllers/Table/Structure/MoveColumnsController.php
@@ -45,7 +45,7 @@ final class MoveColumnsController extends AbstractController
public function __invoke(ServerRequest $request): void
{
$move_columns = $request->getParsedBodyParam('move_columns');
- if (! isset($move_columns) || ! is_array($move_columns) || ! $this->response->isAjax()) {
+ if (! is_array($move_columns) || ! $this->response->isAjax()) {
return;
}
diff --git a/libraries/classes/Controllers/Table/Structure/SpatialController.php b/libraries/classes/Controllers/Table/Structure/SpatialController.php
index 0bd04ea358..b13de2c851 100644
--- a/libraries/classes/Controllers/Table/Structure/SpatialController.php
+++ b/libraries/classes/Controllers/Table/Structure/SpatialController.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Util;
use function __;
use function count;
+use function is_array;
final class SpatialController extends AbstractController
{
@@ -41,7 +42,7 @@ final class SpatialController extends AbstractController
$selected = $request->getParsedBodyParam('selected_fld', []);
- if (empty($selected)) {
+ if (! is_array($selected) || $selected === []) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
diff --git a/libraries/classes/Controllers/Table/Structure/UniqueController.php b/libraries/classes/Controllers/Table/Structure/UniqueController.php
index 15e9e1f6dd..55389a8435 100644
--- a/libraries/classes/Controllers/Table/Structure/UniqueController.php
+++ b/libraries/classes/Controllers/Table/Structure/UniqueController.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Util;
use function __;
use function count;
+use function is_array;
final class UniqueController extends AbstractController
{
@@ -41,7 +42,7 @@ final class UniqueController extends AbstractController
$selected = $request->getParsedBodyParam('selected_fld', []);
- if (empty($selected)) {
+ if (! is_array($selected) || $selected === []) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
diff --git a/libraries/classes/Controllers/Table/TrackingController.php b/libraries/classes/Controllers/Table/TrackingController.php
index d8bb8bddfc..9f0386f522 100644
--- a/libraries/classes/Controllers/Table/TrackingController.php
+++ b/libraries/classes/Controllers/Table/TrackingController.php
@@ -96,14 +96,14 @@ final class TrackingController extends AbstractController
$GLOBALS['selection_data'] = false;
$GLOBALS['selection_both'] = false;
- $report = $request->getParsedBodyParam('report');
+ $report = $request->hasBodyParam('report');
/** @var string $versionParam */
$versionParam = $request->getParsedBodyParam('version');
/** @var string $tableParam */
$tableParam = $request->getParsedBodyParam('table');
// Init vars for tracking report
- if ($report !== null || $reportExport !== null) {
+ if ($report || $reportExport !== null) {
$GLOBALS['data'] = Tracker::getTrackedData(
$GLOBALS['db'],
$GLOBALS['table'],
@@ -170,7 +170,7 @@ final class TrackingController extends AbstractController
}
$deleteVersion = '';
- if ($request->getParsedBodyParam('submit_delete_version') !== null) {
+ if ($request->hasBodyParam('submit_delete_version')) {
$deleteVersion = $this->tracking->deleteTrackingVersion(
$GLOBALS['db'],
$GLOBALS['table'],
@@ -179,7 +179,7 @@ final class TrackingController extends AbstractController
}
$createVersion = '';
- if ($request->getParsedBodyParam('submit_create_version') !== null) {
+ if ($request->hasBodyParam('submit_create_version')) {
$createVersion = $this->tracking->createTrackingVersion(
$GLOBALS['db'],
$GLOBALS['table'],
@@ -220,7 +220,7 @@ final class TrackingController extends AbstractController
}
$schemaSnapshot = '';
- if ($request->getParsedBodyParam('snapshot') !== null) {
+ if ($request->hasBodyParam('snapshot')) {
/** @var string $db */
$db = $request->getParsedBodyParam('db');
$schemaSnapshot = $this->tracking->getHtmlForSchemaSnapshot(
@@ -232,11 +232,7 @@ final class TrackingController extends AbstractController
}
$trackingReportRows = '';
- if (
- $report !== null
- && ($request->getParsedBodyParam('delete_ddlog') !== null
- || $request->getParsedBodyParam('delete_dmlog') !== null)
- ) {
+ if ($report && ($request->hasBodyParam('delete_ddlog') || $request->hasBodyParam('delete_dmlog'))) {
$trackingReportRows = $this->tracking->deleteTrackingReportRows(
$GLOBALS['db'],
$GLOBALS['table'],
@@ -248,7 +244,7 @@ final class TrackingController extends AbstractController
}
$trackingReport = '';
- if ($report !== null || $reportExport !== null) {
+ if ($report || $reportExport !== null) {
$trackingReport = $this->tracking->getHtmlForTrackingReport(
$GLOBALS['data'],
$GLOBALS['urlParams'],
diff --git a/libraries/classes/Controllers/TableController.php b/libraries/classes/Controllers/TableController.php
index a2e0cefda0..5b9755a83d 100644
--- a/libraries/classes/Controllers/TableController.php
+++ b/libraries/classes/Controllers/TableController.php
@@ -23,7 +23,7 @@ final class TableController extends AbstractController
public function __invoke(ServerRequest $request): void
{
- if ($request->getParsedBodyParam('db') === null) {
+ if (! $request->hasBodyParam('db')) {
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => Message::error()]);
diff --git a/libraries/classes/Controllers/View/CreateController.php b/libraries/classes/Controllers/View/CreateController.php
index dac9cf7a45..5d5a4e52c5 100644
--- a/libraries/classes/Controllers/View/CreateController.php
+++ b/libraries/classes/Controllers/View/CreateController.php
@@ -103,22 +103,17 @@ class CreateController extends AbstractController
return;
}
- /** @var string|null $createview */
- $createview = $request->getParsedBodyParam('createview');
+ $createview = $request->hasBodyParam('createview');
+ $alterview = $request->hasBodyParam('alterview');
+ $ajaxdialog = $request->hasBodyParam('ajax_dialog');
- /** @var string|null $alterview */
- $alterview = $request->getParsedBodyParam('alterview');
-
- /** @var string|null $ajaxdialog */
- $ajaxdialog = $request->getParsedBodyParam('ajax_dialog');
-
- if ($createview !== null || $alterview !== null) {
+ if ($createview || $alterview) {
/**
* Creates the view
*/
$GLOBALS['sep'] = "\r\n";
- if ($createview !== null) {
+ if ($createview) {
$GLOBALS['sql_query'] = 'CREATE';
if (isset($view['or_replace'])) {
$GLOBALS['sql_query'] .= ' OR REPLACE';
@@ -167,7 +162,7 @@ class CreateController extends AbstractController
}
if (! $this->dbi->tryQuery($GLOBALS['sql_query'])) {
- if ($ajaxdialog === null) {
+ if (! $ajaxdialog) {
$GLOBALS['message'] = Message::rawError($this->dbi->getError());
return;
@@ -213,7 +208,7 @@ class CreateController extends AbstractController
unset($GLOBALS['pma_transformation_data']);
- if ($ajaxdialog !== null) {
+ if ($ajaxdialog) {
$GLOBALS['message'] = Message::success();
/** @var StructureController $controller */
$controller = Core::getContainerBuilder()->get(StructureController::class);
@@ -296,7 +291,7 @@ class CreateController extends AbstractController
$this->addScriptFiles(['sql.js']);
echo $this->template->render('view_create', [
- 'ajax_dialog' => $ajaxdialog !== null,
+ 'ajax_dialog' => $ajaxdialog,
'text_dir' => $GLOBALS['text_dir'],
'url_params' => $GLOBALS['urlParams'],
'view' => $GLOBALS['view'],
diff --git a/libraries/classes/Controllers/View/OperationsController.php b/libraries/classes/Controllers/View/OperationsController.php
index 3d037f29c2..cbbc5dde0d 100644
--- a/libraries/classes/Controllers/View/OperationsController.php
+++ b/libraries/classes/Controllers/View/OperationsController.php
@@ -17,7 +17,7 @@ use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use function __;
-use function strval;
+use function is_string;
/**
* View manipulations
@@ -64,11 +64,10 @@ class OperationsController extends AbstractController
$message = new Message();
$type = 'success';
- $submitoptions = $request->getParsedBodyParam('submitoptions');
$newname = $request->getParsedBodyParam('new_name');
- if ($submitoptions !== null) {
- if ($newname !== null && $tableObject->rename(strval($newname))) {
+ if ($request->hasBodyParam('submitoptions')) {
+ if (is_string($newname) && $tableObject->rename($newname)) {
$message->addText($tableObject->getLastMessage());
$GLOBALS['result'] = true;
$GLOBALS['table'] = $tableObject->getName();
diff --git a/libraries/classes/Http/ServerRequest.php b/libraries/classes/Http/ServerRequest.php
index c1a45d5328..941e37eace 100644
--- a/libraries/classes/Http/ServerRequest.php
+++ b/libraries/classes/Http/ServerRequest.php
@@ -381,4 +381,24 @@ class ServerRequest implements ServerRequestInterface
return $route;
}
+
+ public function has(string $param): bool
+ {
+ return $this->hasBodyParam($param) || $this->hasQueryParam($param);
+ }
+
+ public function hasQueryParam(string $param): bool
+ {
+ $getParams = $this->getQueryParams();
+
+ return isset($getParams[$param]);
+ }
+
+ public function hasBodyParam(string $param): bool
+ {
+ $postParams = $this->getParsedBody();
+
+ return is_array($postParams) && isset($postParams[$param])
+ || is_object($postParams) && property_exists($postParams, $param);
+ }
}
diff --git a/libraries/classes/Sql.php b/libraries/classes/Sql.php
index 7fefef45f2..957e902453 100644
--- a/libraries/classes/Sql.php
+++ b/libraries/classes/Sql.php
@@ -23,12 +23,10 @@ use PhpMyAdmin\Utils\ForeignKey;
use function __;
use function array_keys;
-use function array_map;
use function bin2hex;
use function ceil;
use function count;
use function defined;
-use function explode;
use function htmlspecialchars;
use function in_array;
use function is_array;
@@ -432,31 +430,6 @@ class Sql
}
/**
- * Function to set a column property
- *
- * @param Table $table Table instance
- * @param string $requestIndex col_order|col_visib
- *
- * @return bool|Message
- */
- public function setColumnProperty(Table $table, string $requestIndex)
- {
- $propertyValue = array_map('intval', explode(',', $_POST[$requestIndex]));
- switch ($requestIndex) {
- case 'col_order':
- $propertyToSet = Table::PROP_COLUMN_ORDER;
- break;
- case 'col_visib':
- $propertyToSet = Table::PROP_COLUMN_VISIB;
- break;
- default:
- $propertyToSet = '';
- }
-
- return $table->setUiProp($propertyToSet, $propertyValue, $_POST['table_create_time'] ?? null);
- }
-
- /**
* Function to find the real end of rows
*
* @param string $db the current database
diff --git a/libraries/services_controllers.php b/libraries/services_controllers.php
index 8ccba7d506..13215dedf8 100644
--- a/libraries/services_controllers.php
+++ b/libraries/services_controllers.php
@@ -1115,7 +1115,6 @@ return [
'arguments' => [
'$response' => '@response',
'$template' => '@template',
- '$sql' => '@sql',
'$checkUserPrivileges' => '@check_user_privileges',
'$dbi' => '@dbi',
],
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
index dd1caf2341..7add82f9b8 100644
--- a/phpstan-baseline.neon
+++ b/phpstan-baseline.neon
@@ -1736,49 +1736,14 @@ parameters:
path: libraries/classes/Controllers/Table/SearchController.php
-
- message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/AddIndexController.php
-
- -
- message: "#^Parameter \\#1 \\$identifier of static method PhpMyAdmin\\\\Util\\:\\:backquote\\(\\) expects string\\|Stringable\\|null, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/AddIndexController.php
-
- -
- message: "#^Parameter \\#1 \\$var of function count expects array\\|Countable, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/AddIndexController.php
-
- -
- message: "#^Parameter \\#1 \\$field_select of method PhpMyAdmin\\\\Database\\\\CentralColumns\\:\\:syncUniqueColumns\\(\\) expects array, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php
-
- -
- message: "#^Parameter \\#2 \\$field_select of method PhpMyAdmin\\\\Database\\\\CentralColumns\\:\\:deleteColumnsFromList\\(\\) expects array, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php
-
- -
- message: "#^Parameter \\#1 \\$selected of method PhpMyAdmin\\\\Controllers\\\\Table\\\\Structure\\\\ChangeController\\:\\:displayHtmlForColumnChange\\(\\) expects array\\<string\\>, array\\<int, mixed\\> given\\.$#"
+ message: "#^Method PhpMyAdmin\\\\Controllers\\\\Table\\\\Structure\\\\ChangeController\\:\\:displayHtmlForColumnChange\\(\\) has parameter \\$selected with no value type specified in iterable type array\\.$#"
count: 1
path: libraries/classes/Controllers/Table/Structure/ChangeController.php
-
- message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/FulltextController.php
-
- -
- message: "#^Parameter \\#1 \\$identifier of static method PhpMyAdmin\\\\Util\\:\\:backquote\\(\\) expects string\\|Stringable\\|null, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/FulltextController.php
-
- -
- message: "#^Parameter \\#1 \\$var of function count expects array\\|Countable, mixed given\\.$#"
+ message: "#^Parameter \\#1 \\$selected of method PhpMyAdmin\\\\Controllers\\\\Table\\\\Structure\\\\ChangeController\\:\\:displayHtmlForColumnChange\\(\\) expects array\\|null, mixed given\\.$#"
count: 1
- path: libraries/classes/Controllers/Table/Structure/FulltextController.php
+ path: libraries/classes/Controllers/Table/Structure/ChangeController.php
-
message: "#^Cannot cast mixed to string\\.$#"
@@ -1881,36 +1846,6 @@ parameters:
path: libraries/classes/Controllers/Table/Structure/SaveController.php
-
- message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/SpatialController.php
-
- -
- message: "#^Parameter \\#1 \\$identifier of static method PhpMyAdmin\\\\Util\\:\\:backquote\\(\\) expects string\\|Stringable\\|null, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/SpatialController.php
-
- -
- message: "#^Parameter \\#1 \\$var of function count expects array\\|Countable, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/SpatialController.php
-
- -
- message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/UniqueController.php
-
- -
- message: "#^Parameter \\#1 \\$identifier of static method PhpMyAdmin\\\\Util\\:\\:backquote\\(\\) expects string\\|Stringable\\|null, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/UniqueController.php
-
- -
- message: "#^Parameter \\#1 \\$var of function count expects array\\|Countable, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Table/Structure/UniqueController.php
-
- -
message: "#^Cannot use array destructuring on array\\|null\\.$#"
count: 7
path: libraries/classes/Controllers/Table/StructureController.php
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index d2d79d29ad..a58106e78c 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -3089,10 +3089,9 @@
<code>$currentValue</code>
<code>$whereClause</code>
</MixedArgument>
- <MixedAssignment occurrences="4">
+ <MixedAssignment occurrences="3">
<code>$column</code>
<code>$currentValue</code>
- <code>$fullValues</code>
<code>$whereClause</code>
</MixedAssignment>
</file>
@@ -3114,7 +3113,7 @@
<MixedArrayAccess occurrences="1">
<code>$GLOBALS['ajax_reload']['reload']</code>
</MixedArrayAccess>
- <MixedAssignment occurrences="17">
+ <MixedAssignment occurrences="16">
<code>$GLOBALS['ajax_reload']</code>
<code>$GLOBALS['back']</code>
<code>$GLOBALS['disp_message']</code>
@@ -3131,7 +3130,6 @@
<code>$GLOBALS['unlim_num_rows']</code>
<code>$bkm_all_users</code>
<code>$sql_query</code>
- <code>$store_bkm</code>
</MixedAssignment>
<MixedOperand occurrences="1">
<code>$GLOBALS['errorUrl']</code>
@@ -3870,13 +3868,11 @@
</PossiblyInvalidArgument>
</file>
<file src="libraries/classes/Controllers/Table/Structure/AddIndexController.php">
- <MixedArgument occurrences="2">
+ <MixedArgument occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedArgument>
- <MixedAssignment occurrences="2">
+ <MixedAssignment occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedAssignment>
</file>
<file src="libraries/classes/Controllers/Table/Structure/AddKeyController.php">
@@ -3898,22 +3894,6 @@
<code>$_POST['selected_fld']</code>
</PossiblyInvalidIterator>
</file>
- <file src="libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php">
- <MixedArgument occurrences="1">
- <code>$selected</code>
- </MixedArgument>
- <MixedAssignment occurrences="1">
- <code>$selected</code>
- </MixedAssignment>
- </file>
- <file src="libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php">
- <MixedArgument occurrences="1">
- <code>$selected</code>
- </MixedArgument>
- <MixedAssignment occurrences="1">
- <code>$selected</code>
- </MixedAssignment>
- </file>
<file src="libraries/classes/Controllers/Table/Structure/ChangeController.php">
<MixedArgumentTypeCoercion occurrences="2">
<code>$selected</code>
@@ -3924,13 +3904,11 @@
</MixedAssignment>
</file>
<file src="libraries/classes/Controllers/Table/Structure/FulltextController.php">
- <MixedArgument occurrences="2">
+ <MixedArgument occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedArgument>
- <MixedAssignment occurrences="2">
+ <MixedAssignment occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedAssignment>
</file>
<file src="libraries/classes/Controllers/Table/Structure/MoveColumnsController.php">
@@ -4108,23 +4086,19 @@
</PossiblyInvalidOperand>
</file>
<file src="libraries/classes/Controllers/Table/Structure/SpatialController.php">
- <MixedArgument occurrences="2">
+ <MixedArgument occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedArgument>
- <MixedAssignment occurrences="2">
+ <MixedAssignment occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedAssignment>
</file>
<file src="libraries/classes/Controllers/Table/Structure/UniqueController.php">
- <MixedArgument occurrences="2">
+ <MixedArgument occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedArgument>
- <MixedAssignment occurrences="2">
+ <MixedAssignment occurrences="1">
<code>$field</code>
- <code>$selected</code>
</MixedAssignment>
</file>
<file src="libraries/classes/Controllers/Table/StructureController.php">
@@ -4219,7 +4193,7 @@
<code>$GLOBALS['data']['date_from']</code>
<code>$GLOBALS['data']['date_to']</code>
</MixedArrayAccess>
- <MixedAssignment occurrences="18">
+ <MixedAssignment occurrences="17">
<code>$GLOBALS['data']</code>
<code>$GLOBALS['data']</code>
<code>$GLOBALS['entries']</code>
@@ -4232,7 +4206,6 @@
<code>$GLOBALS['selection_data']</code>
<code>$GLOBALS['selection_schema']</code>
<code>$logType</code>
- <code>$report</code>
<code>$reportExport</code>
<code>$selectedVersions</code>
<code>$submitMult</code>
@@ -4453,17 +4426,15 @@
</RedundantConditionGivenDocblockType>
</file>
<file src="libraries/classes/Controllers/View/OperationsController.php">
- <MixedArgument occurrences="2">
+ <MixedArgument occurrences="1">
<code>$GLOBALS['warning_messages']</code>
- <code>$newname</code>
</MixedArgument>
- <MixedAssignment occurrences="6">
+ <MixedAssignment occurrences="5">
<code>$GLOBALS['errorUrl']</code>
<code>$GLOBALS['reload']</code>
<code>$GLOBALS['result']</code>
<code>$GLOBALS['warning_messages']</code>
<code>$newname</code>
- <code>$submitoptions</code>
</MixedAssignment>
</file>
<file src="libraries/classes/Core.php">
@@ -12994,21 +12965,15 @@
<NullableReturnStatement occurrences="1">
<code>$unlimNumRows</code>
</NullableReturnStatement>
- <PossiblyInvalidArgument occurrences="8">
- <code>$_POST[$requestIndex]</code>
+ <PossiblyInvalidArgument occurrences="6">
<code>$_POST['bkm_label']</code>
<code>$_POST['dropped_column'] ?? null</code>
- <code>$_POST['table_create_time'] ?? null</code>
<code>$numRows</code>
<code>$numRows</code>
<code>$numRows</code>
<code>$numRows</code>
</PossiblyInvalidArgument>
- <PossiblyInvalidArrayOffset occurrences="1">
- <code>$_POST[$requestIndex]</code>
- </PossiblyInvalidArrayOffset>
- <PossiblyInvalidCast occurrences="2">
- <code>$_POST[$requestIndex]</code>
+ <PossiblyInvalidCast occurrences="1">
<code>$_POST['bkm_label']</code>
</PossiblyInvalidCast>
<PossiblyInvalidOperand occurrences="1">
diff --git a/test/classes/Http/ServerRequestTest.php b/test/classes/Http/ServerRequestTest.php
index ef94872e85..6948c95551 100644
--- a/test/classes/Http/ServerRequestTest.php
+++ b/test/classes/Http/ServerRequestTest.php
@@ -63,4 +63,32 @@ class ServerRequestTest extends TestCase
$this->assertSame('', $request->getQueryParam('key4'));
$this->assertSame('', $request->getQueryParam('key4', 'default'));
}
+
+ public function testHasBodyParam(): void
+ {
+ $queryParams = ['key1' => 'value1', 'key2' => ['value2'], 'key4' => ''];
+ $requestStub = $this->createStub(ServerRequestInterface::class);
+ $requestStub->method('getParsedBody')->willReturn($queryParams);
+ $request = new ServerRequest($requestStub);
+ $this->assertTrue($request->hasBodyParam('key1'));
+ $this->assertTrue($request->hasBodyParam('key2'));
+ $this->assertFalse($request->hasBodyParam('key3'));
+ $this->assertTrue($request->hasBodyParam('key4'));
+ }
+
+ public function testHasQueryParam(): void
+ {
+ $queryParams = ['key1' => 'value1', 'key2' => ['value2'], 'key4' => ''];
+ $requestStub = $this->createStub(ServerRequestInterface::class);
+ $requestStub->method('getQueryParams')->willReturn($queryParams);
+ $request = new ServerRequest($requestStub);
+ $this->assertTrue($request->hasQueryParam('key1'));
+ $this->assertTrue($request->has('key1'));
+ $this->assertTrue($request->hasQueryParam('key2'));
+ $this->assertTrue($request->has('key2'));
+ $this->assertFalse($request->hasQueryParam('key3'));
+ $this->assertFalse($request->has('key3'));
+ $this->assertTrue($request->hasQueryParam('key4'));
+ $this->assertTrue($request->has('key4'));
+ }
}