diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 43f5e52dee..c960d48414 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -5651,7 +5651,7 @@ parameters: path: src/Controllers/Table/ChangeController.php - - message: "#^Parameter \\#4 \\$currentResult of method PhpMyAdmin\\\\InsertEdit\\:\\:getHtmlForInsertEditRow\\(\\) expects PhpMyAdmin\\\\Dbal\\\\ResultInterface, mixed given\\.$#" + message: "#^Parameter \\#4 \\$currentResult of method PhpMyAdmin\\\\InsertEdit\\:\\:getHtmlForInsertEditRow\\(\\) expects PhpMyAdmin\\\\Dbal\\\\ResultInterface, array\\\\|PhpMyAdmin\\\\Dbal\\\\ResultInterface given\\.$#" count: 1 path: src/Controllers/Table/ChangeController.php @@ -5955,11 +5955,6 @@ parameters: count: 1 path: src/Controllers/Table/DropColumnController.php - - - message: "#^Cannot access an offset on mixed\\.$#" - count: 2 - path: src/Controllers/Table/ExportController.php - - message: "#^Cannot access offset 'back' on mixed\\.$#" count: 1 @@ -5995,11 +5990,6 @@ parameters: count: 1 path: src/Controllers/Table/ExportController.php - - - message: "#^Parameter \\#3 \\$ops of static method PhpMyAdmin\\\\SqlParser\\\\Utils\\\\Query\\:\\:replaceClauses\\(\\) expects array\\\\>, mixed given\\.$#" - count: 1 - path: src/Controllers/Table/ExportController.php - - message: "#^Parameter \\#3 \\$table of method PhpMyAdmin\\\\Export\\\\Options\\:\\:getOptions\\(\\) expects string, mixed given\\.$#" count: 1 @@ -11420,11 +11410,6 @@ parameters: count: 6 path: src/Import/Import.php - - - message: "#^Parameter \\#2 \\$db of method PhpMyAdmin\\\\Import\\\\Import\\:\\:lookForUse\\(\\) expects string\\|null, mixed given\\.$#" - count: 1 - path: src/Import/Import.php - - message: "#^Parameter \\#2 \\$start of function mb_substr expects int, mixed given\\.$#" count: 1 @@ -11440,11 +11425,6 @@ parameters: count: 1 path: src/Import/Import.php - - - message: "#^Parameter \\#3 \\$reload of method PhpMyAdmin\\\\Import\\\\Import\\:\\:lookForUse\\(\\) expects bool\\|null, mixed given\\.$#" - count: 1 - path: src/Import/Import.php - - message: "#^Parameter \\#3 \\$subject of function preg_replace expects array\\|string, mixed given\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index d623c52cea..c8ed29dcbe 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -901,9 +901,6 @@ Config::getInstance() - - - $columnDefault $columnDefault @@ -932,7 +929,6 @@ - $columnDefault $columnDefault @@ -2068,7 +2064,6 @@ - @@ -2129,10 +2124,8 @@ - - @@ -2387,7 +2380,6 @@ - @@ -2395,7 +2387,6 @@ - @@ -2416,8 +2407,6 @@ - - $tableAlters @@ -2430,8 +2419,6 @@ - - $rereadInfo @@ -2446,13 +2433,9 @@ - - - - $newname @@ -2701,7 +2684,6 @@ - @@ -2709,7 +2691,6 @@ - $database @@ -3282,7 +3263,6 @@ - @@ -3293,7 +3273,6 @@ - @@ -3324,7 +3303,6 @@ - @@ -3347,7 +3325,6 @@ - $isUpload @@ -3501,26 +3478,19 @@ - - - - - - - @@ -3920,12 +3890,6 @@ - - - - - - __construct @@ -6722,7 +6686,6 @@ - @@ -6733,7 +6696,6 @@ - $active $additionalSql[$i] $size @@ -6829,7 +6791,6 @@ - @@ -6903,6 +6864,9 @@ + + + diff --git a/src/Controllers/Database/CentralColumnsController.php b/src/Controllers/Database/CentralColumnsController.php index d627d191fc..a71d86b4d2 100644 --- a/src/Controllers/Database/CentralColumnsController.php +++ b/src/Controllers/Database/CentralColumnsController.php @@ -35,7 +35,6 @@ class CentralColumnsController extends AbstractController public function __invoke(ServerRequest $request): void { $GLOBALS['message'] ??= null; - $GLOBALS['num_cols'] ??= null; if ($request->hasBodyParam('edit_save')) { $this->response->addHTML((string) $this->editSave([ @@ -135,13 +134,13 @@ class CentralColumnsController extends AbstractController $pos = (int) $request->getParsedBodyParam('pos'); } - $GLOBALS['num_cols'] = $this->centralColumns->getColumnsCount( + $numberOfColumns = $this->centralColumns->getColumnsCount( $GLOBALS['db'], $pos, Config::getInstance()->settings['MaxRows'], ); $GLOBALS['message'] = Message::success( - sprintf(__('Showing rows %1$s - %2$s.'), $pos + 1, $pos + $GLOBALS['num_cols']), + sprintf(__('Showing rows %1$s - %2$s.'), $pos + 1, $pos + $numberOfColumns), ); if (! isset($tmpMsg) || $tmpMsg === true) { return; diff --git a/src/Controllers/Import/ImportController.php b/src/Controllers/Import/ImportController.php index bedff96729..92075ddc2b 100644 --- a/src/Controllers/Import/ImportController.php +++ b/src/Controllers/Import/ImportController.php @@ -94,9 +94,7 @@ final class ImportController extends AbstractController $GLOBALS['import_file_name'] ??= null; $GLOBALS['import_notice'] ??= null; $GLOBALS['read_multiply'] ??= null; - $GLOBALS['my_die'] ??= null; $GLOBALS['active_page'] ??= null; - $GLOBALS['reload'] ??= null; $GLOBALS['charset_of_file'] = $request->getParsedBodyParam('charset_of_file'); $GLOBALS['format'] = $request->getParsedBodyParam('format', ''); diff --git a/src/Controllers/Operations/DatabaseController.php b/src/Controllers/Operations/DatabaseController.php index ee7962a1aa..6b6ca0b0fc 100644 --- a/src/Controllers/Operations/DatabaseController.php +++ b/src/Controllers/Operations/DatabaseController.php @@ -52,7 +52,6 @@ class DatabaseController extends AbstractController $GLOBALS['server'] ??= null; $GLOBALS['message'] ??= null; $GLOBALS['errorUrl'] ??= null; - $GLOBALS['reload'] ??= null; $GLOBALS['urlParams'] ??= null; $GLOBALS['single_table'] ??= null; diff --git a/src/Controllers/Operations/TableController.php b/src/Controllers/Operations/TableController.php index bf98a92a7e..cd44115a24 100644 --- a/src/Controllers/Operations/TableController.php +++ b/src/Controllers/Operations/TableController.php @@ -57,8 +57,6 @@ class TableController extends AbstractController { $GLOBALS['urlParams'] ??= null; $GLOBALS['auto_increment'] ??= null; - $GLOBALS['reload'] ??= null; - $GLOBALS['result'] ??= null; $GLOBALS['message_to_show'] ??= null; $GLOBALS['errorUrl'] ??= null; @@ -213,13 +211,13 @@ class TableController extends AbstractController $GLOBALS['db'] = $oldDb; $this->dbi->selectDb($oldDb); $newMessage .= $pmaTable->getLastMessage(); - $GLOBALS['result'] = true; + $result = true; $GLOBALS['table'] = $pmaTable->getName(); $rereadInfo = true; $GLOBALS['reload'] = true; } else { $newMessage .= $pmaTable->getLastError(); - $GLOBALS['result'] = false; + $result = false; } } @@ -258,7 +256,8 @@ class TableController extends AbstractController . Util::backquote($GLOBALS['table']); $GLOBALS['sql_query'] .= "\r\n" . implode("\r\n", $tableAlters); $GLOBALS['sql_query'] .= ';'; - $GLOBALS['result'] = (bool) $this->dbi->query($GLOBALS['sql_query']); + $this->dbi->query($GLOBALS['sql_query']); + $result = true; $rereadInfo = true; $warningMessages = $this->operations->getWarningMessagesArray(); } @@ -299,7 +298,8 @@ class TableController extends AbstractController urldecode($orderField), is_string($orderOrder) ? $orderOrder : '', ); - $GLOBALS['result'] = $this->dbi->query($GLOBALS['sql_query']); + $this->dbi->query($GLOBALS['sql_query']); + $result = true; } /** @var mixed $partitionOperation */ @@ -318,7 +318,8 @@ class TableController extends AbstractController $partitionOperation, is_array($partitionNames) ? $partitionNames : [], ); - $GLOBALS['result'] = $this->dbi->query($GLOBALS['sql_query']); + $this->dbi->query($GLOBALS['sql_query']); + $result = true; } if ($rereadInfo) { @@ -342,12 +343,12 @@ class TableController extends AbstractController $createOptions = $pmaTable->getCreateOptions(); } - if (isset($GLOBALS['result']) && empty($GLOBALS['message_to_show'])) { + if (isset($result) && empty($GLOBALS['message_to_show'])) { if ($newMessage === '') { if (empty($GLOBALS['sql_query'])) { $newMessage = Message::success(__('No change')); } else { - $newMessage = $GLOBALS['result'] + $newMessage = $result ? Message::success() : Message::error(); } @@ -365,7 +366,7 @@ class TableController extends AbstractController return; } } else { - $newMessage = $GLOBALS['result'] + $newMessage = $result ? Message::success($newMessage) : Message::error($newMessage); } diff --git a/src/Controllers/Operations/ViewController.php b/src/Controllers/Operations/ViewController.php index 16ae248e99..a3cf4a4978 100644 --- a/src/Controllers/Operations/ViewController.php +++ b/src/Controllers/Operations/ViewController.php @@ -40,8 +40,6 @@ class ViewController extends AbstractController public function __invoke(ServerRequest $request): void { $GLOBALS['urlParams'] ??= null; - $GLOBALS['reload'] ??= null; - $GLOBALS['result'] ??= null; $tableObject = $this->dbi->getTable($GLOBALS['db'], $GLOBALS['table']); $GLOBALS['errorUrl'] ??= null; @@ -96,24 +94,24 @@ class ViewController extends AbstractController if ($request->hasBodyParam('submitoptions')) { if (is_string($newname) && $tableObject->rename($newname)) { $message->addText($tableObject->getLastMessage()); - $GLOBALS['result'] = true; + $result = true; $GLOBALS['table'] = $tableObject->getName(); /* Force reread after rename */ $tableObject->getStatusInfo(null, true); $GLOBALS['reload'] = true; } else { - $message->addText($tableObject->getLastError()); - $GLOBALS['result'] = false; + $message->addText($tableObject->getLastError()); + $result = false; } $warningMessages = $this->operations->getWarningMessagesArray(); } - if (isset($GLOBALS['result'])) { + if (isset($result)) { // set to success by default, because result set could be empty // (for example, a table rename) if ($message->getString() === '') { - if ($GLOBALS['result']) { + if ($result) { $message->addText( __('Your SQL query has been executed successfully.'), ); @@ -121,8 +119,7 @@ class ViewController extends AbstractController $message->addText(__('Error')); } - // $result should exist, regardless of $_message - $type = $GLOBALS['result'] ? 'success' : 'error'; + $type = $result ? 'success' : 'error'; } if ($warningMessages !== []) { diff --git a/src/Controllers/Server/Databases/DestroyController.php b/src/Controllers/Server/Databases/DestroyController.php index b8a949a684..4f91ac2a65 100644 --- a/src/Controllers/Server/Databases/DestroyController.php +++ b/src/Controllers/Server/Databases/DestroyController.php @@ -37,7 +37,6 @@ final class DestroyController extends AbstractController { $GLOBALS['selected'] ??= null; $GLOBALS['errorUrl'] ??= null; - $GLOBALS['reload'] ??= null; $selectedDbs = $request->getParsedBodyParam('selected_dbs'); diff --git a/src/Controllers/Table/AddFieldController.php b/src/Controllers/Table/AddFieldController.php index d1f3d8693d..d0b1d979f2 100644 --- a/src/Controllers/Table/AddFieldController.php +++ b/src/Controllers/Table/AddFieldController.php @@ -50,7 +50,6 @@ class AddFieldController extends AbstractController $GLOBALS['errorUrl'] ??= null; $GLOBALS['message'] ??= null; $GLOBALS['active_page'] ??= null; - $GLOBALS['result'] ??= null; /** @var string|null $numberOfFields */ $numberOfFields = $request->getParsedBodyParam('num_fields'); @@ -91,13 +90,13 @@ class AddFieldController extends AbstractController return; } - $GLOBALS['result'] = $createAddField->tryColumnCreationQuery( + $result = $createAddField->tryColumnCreationQuery( DatabaseName::from($GLOBALS['db']), $GLOBALS['sql_query'], $GLOBALS['errorUrl'], ); - if (! $GLOBALS['result']) { + if (! $result) { $errorMessageHtml = Generator::mysqlDie('', '', false, $GLOBALS['errorUrl'], false); $this->response->addHTML($errorMessageHtml ?? ''); $this->response->setRequestStatus(false); diff --git a/src/Controllers/Table/ChangeController.php b/src/Controllers/Table/ChangeController.php index f1c736f8e8..abe9293a02 100644 --- a/src/Controllers/Table/ChangeController.php +++ b/src/Controllers/Table/ChangeController.php @@ -56,7 +56,6 @@ class ChangeController extends AbstractController $GLOBALS['errorUrl'] ??= null; $GLOBALS['where_clause'] ??= null; $GLOBALS['unsaved_values'] ??= null; - $GLOBALS['result'] ??= null; $GLOBALS['current_result'] ??= null; $this->pageSettings->init('Edit'); @@ -108,7 +107,7 @@ class ChangeController extends AbstractController $GLOBALS['where_clause'], $whereClauseArray, $whereClauses, - $GLOBALS['result'], + $result, $rows, $foundUniqueIndex, $afterInsert, @@ -231,10 +230,9 @@ class ChangeController extends AbstractController $GLOBALS['plugin_scripts'] = []; foreach ($rows as $rowId => $currentRow) { - $GLOBALS['current_result'] = (isset($GLOBALS['result']) - && is_array($GLOBALS['result']) && isset($GLOBALS['result'][$rowId]) - ? $GLOBALS['result'][$rowId] - : $GLOBALS['result']); + $GLOBALS['current_result'] = is_array($result) && isset($result[$rowId]) + ? $result[$rowId] + : $result; $repopulate = []; $checked = true; if (isset($GLOBALS['unsaved_values'][$rowId])) { diff --git a/src/Controllers/Table/ExportController.php b/src/Controllers/Table/ExportController.php index 812159c81d..e6235548c7 100644 --- a/src/Controllers/Table/ExportController.php +++ b/src/Controllers/Table/ExportController.php @@ -38,7 +38,6 @@ class ExportController extends AbstractController public function __invoke(ServerRequest $request): void { $GLOBALS['urlParams'] ??= null; - $GLOBALS['replaces'] ??= null; $GLOBALS['errorUrl'] ??= null; $GLOBALS['where_clause'] ??= null; $GLOBALS['unlim_num_rows'] ??= null; @@ -71,19 +70,16 @@ class ExportController extends AbstractController if (! empty($parser->statements[0]) && ($parser->statements[0] instanceof SelectStatement)) { // Checking if the WHERE clause has to be replaced. + $replaces = []; if (! empty($GLOBALS['where_clause']) && is_array($GLOBALS['where_clause'])) { - $GLOBALS['replaces'][] = ['WHERE', 'WHERE (' . implode(') OR (', $GLOBALS['where_clause']) . ')']; + $replaces[] = ['WHERE', 'WHERE (' . implode(') OR (', $GLOBALS['where_clause']) . ')']; } // Preparing to remove the LIMIT clause. - $GLOBALS['replaces'][] = ['LIMIT', '']; + $replaces[] = ['LIMIT', '']; // Replacing the clauses. - $GLOBALS['sql_query'] = Query::replaceClauses( - $parser->statements[0], - $parser->list, - $GLOBALS['replaces'], - ); + $GLOBALS['sql_query'] = Query::replaceClauses($parser->statements[0], $parser->list, $replaces); } } diff --git a/src/Controllers/Table/Structure/AddKeyController.php b/src/Controllers/Table/Structure/AddKeyController.php index 80ce5d3840..da90f16443 100644 --- a/src/Controllers/Table/Structure/AddKeyController.php +++ b/src/Controllers/Table/Structure/AddKeyController.php @@ -24,8 +24,6 @@ final class AddKeyController extends AbstractController public function __invoke(ServerRequest $request): void { - $GLOBALS['reload'] ??= null; - ($this->sqlController)($request); $GLOBALS['reload'] = true; diff --git a/src/Import/Import.php b/src/Import/Import.php index 41aa9d6110..f57d4bf9eb 100644 --- a/src/Import/Import.php +++ b/src/Import/Import.php @@ -127,9 +127,7 @@ class Import */ public function executeQuery(string $sql, array &$sqlData): void { - $GLOBALS['my_die'] ??= null; $GLOBALS['error'] ??= null; - $GLOBALS['reload'] ??= null; $GLOBALS['msg'] ??= null; $GLOBALS['sql_query_disabled'] ??= null; $dbi = DatabaseInterface::getInstance(); @@ -141,10 +139,7 @@ class Import $GLOBALS['msg'] = '# '; if ($GLOBALS['result'] === false) { // execution failed - if (! isset($GLOBALS['my_die'])) { - $GLOBALS['my_die'] = []; - } - + $GLOBALS['my_die'] ??= []; $GLOBALS['my_die'][] = ['sql' => $sql, 'error' => $dbi->getError()]; $GLOBALS['msg'] .= __('Error'); @@ -178,7 +173,11 @@ class Import // If a 'USE ' SQL-clause was found and the query // succeeded, set our current $db to the new one if ($GLOBALS['result'] != false) { - [$GLOBALS['db'], $GLOBALS['reload']] = $this->lookForUse($sql, $GLOBALS['db'], $GLOBALS['reload']); + $dbNameInsideUse = $this->lookForUse($sql); + if ($dbNameInsideUse !== '') { + $GLOBALS['db'] = $dbNameInsideUse; + $GLOBALS['reload'] = true; + } } $pattern = '@^[\s]*(DROP|CREATE)[\s]+(IF EXISTS[[:space:]]+)?(TABLE|DATABASE)[[:space:]]+(.+)@im'; @@ -290,28 +289,20 @@ class Import /** * Looks for the presence of USE to possibly change current db - * - * @param string|null $buffer buffer to examine - * @param string|null $db current db - * @param bool|null $reload reload - * - * @return mixed[] (current or new db, whether to reload) */ - public function lookForUse(string|null $buffer, string|null $db, bool|null $reload): array + public function lookForUse(string $buffer): string { - if (preg_match('@^[\s]*USE[[:space:]]+([\S]+)@i', (string) $buffer, $match)) { + if (preg_match('@^[\s]*USE[[:space:]]+([\S]+)@i', $buffer, $match)) { $db = trim($match[1]); $db = trim($db, ';'); // for example, USE abc; // $db must not contain the escape characters generated by backquote() // ( used in buildSql() as: backquote($db_name), and then called // in runQuery() which in turn calls lookForUse() ) - $db = Util::unQuote($db); - - $reload = true; + return Util::unQuote($db); } - return [$db, $reload]; + return ''; } /** diff --git a/tests/classes/Import/ImportTest.php b/tests/classes/Import/ImportTest.php index 10e9f68c10..756410592f 100644 --- a/tests/classes/Import/ImportTest.php +++ b/tests/classes/Import/ImportTest.php @@ -86,38 +86,18 @@ class ImportTest extends AbstractTestCase public function testLookForUse(): void { $this->assertEquals( - [null, null], - $this->import->lookForUse(null, null, null), + '', + $this->import->lookForUse('select 1 from myTable'), ); $this->assertEquals( - ['myDb', null], - $this->import->lookForUse(null, 'myDb', null), + 'anotherDb', + $this->import->lookForUse('use anotherDb'), ); $this->assertEquals( - ['myDb', true], - $this->import->lookForUse(null, 'myDb', true), - ); - - $this->assertEquals( - ['myDb', true], - $this->import->lookForUse('select 1 from myTable', 'myDb', true), - ); - - $this->assertEquals( - ['anotherDb', true], - $this->import->lookForUse('use anotherDb', 'myDb', false), - ); - - $this->assertEquals( - ['anotherDb', true], - $this->import->lookForUse('use anotherDb', 'myDb', true), - ); - - $this->assertEquals( - ['anotherDb', true], - $this->import->lookForUse('use `anotherDb`;', 'myDb', true), + 'anotherDb', + $this->import->lookForUse('use `anotherDb`;'), ); }