diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index cfd930ee65..56fd76e7b8 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -148,21 +148,11 @@ parameters: count: 1 path: src/Bookmarks/BookmarkRepository.php - - - message: "#^Cannot cast mixed to string\\.$#" - count: 1 - path: src/BrowseForeigners.php - - message: "#^Parameter \\#1 \\$description of method PhpMyAdmin\\\\BrowseForeigners\\:\\:getDescriptionAndTitle\\(\\) expects string, mixed given\\.$#" count: 2 path: src/BrowseForeigners.php - - - message: "#^Parameter \\#1 \\$string of function htmlspecialchars expects string, mixed given\\.$#" - count: 1 - path: src/BrowseForeigners.php - - message: "#^Parameter \\#1 \\$state of static method PhpMyAdmin\\\\Charsets\\\\Charset\\:\\:fromServer\\(\\) expects array\\{Charset\\?\\: string, Description\\?\\: string, Default collation\\?\\: string, Maxlen\\?\\: string\\}, array\\ given\\.$#" count: 1 @@ -1391,6 +1381,11 @@ parameters: count: 1 path: src/Console.php + - + message: "#^Cannot cast mixed to int\\.$#" + count: 1 + path: src/Controllers/BrowseForeignersController.php + - message: """ #^Call to deprecated method getInstance\\(\\) of class PhpMyAdmin\\\\Config\\: diff --git a/psalm-baseline.xml b/psalm-baseline.xml index b390c62a9d..cc66304969 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -87,16 +87,6 @@ - - - - - - - - - settings->maxRows]]> - diff --git a/src/BrowseForeigners.php b/src/BrowseForeigners.php index cd27e7708b..0b49aa8c1d 100644 --- a/src/BrowseForeigners.php +++ b/src/BrowseForeigners.php @@ -130,21 +130,24 @@ class BrowseForeigners /** * Function to get html for relational field selection * - * @param string $db current database - * @param string $table current table - * @param string $field field - * @param string|null $fieldKey field key - * @param string $currentValue current columns's value + * @param string $db current database + * @param string $table current table + * @param string $field field + * @param string $fieldKey field key + * @param string $currentValue current columns's value */ public function getHtmlForRelationalFieldSelection( string $db, string $table, string $field, ForeignData $foreignData, - string|null $fieldKey, + string $fieldKey, string $currentValue, + int $pos, + string $foreignFilter, + string|null $rownumber, ): string { - $gotoPage = $this->getHtmlForGotoPage($foreignData); + $gotoPage = $this->getHtmlForGotoPage($foreignData, $pos); $foreignShowAll = ''; if ( $foreignData->dispRow !== null && @@ -160,16 +163,13 @@ class BrowseForeigners . Url::getHiddenInputs($db, $table) . "\n" . '' . "\n" . '' . "\n"; + . htmlspecialchars($fieldKey) . '">' . "\n"; - if (isset($_POST['rownumber'])) { - $output .= ''; + if ($rownumber !== null) { + $output .= ''; } - $filterValue = isset($_POST['foreign_filter']) - ? htmlspecialchars($_POST['foreign_filter']) - : ''; + $filterValue = htmlspecialchars($foreignFilter); $output .= '
' . '
' . "\n" . '
the new description and title + * @return array{string, string} the new description and title */ private function getDescriptionAndTitle(string $description): array { @@ -255,9 +255,8 @@ class BrowseForeigners /** * Function to get html for the goto page option */ - private function getHtmlForGotoPage(ForeignData $foreignData): string + private function getHtmlForGotoPage(ForeignData $foreignData, int $pos): string { - isset($_POST['pos']) ? $pos = $_POST['pos'] : $pos = 0; if ($foreignData->dispRow === null) { return ''; } @@ -283,19 +282,12 @@ class BrowseForeigners return ''; } - /** - * Function to get foreign limit - * - * @param string|null $foreignShowAll foreign navigation - */ - public function getForeignLimit(string|null $foreignShowAll): string|null + public function getForeignLimit(string|null $foreignShowAll, int $pos): string { if ($foreignShowAll === __('Show all')) { - return null; + return ''; } - isset($_POST['pos']) ? $pos = $_POST['pos'] : $pos = 0; - return 'LIMIT ' . $pos . ', ' . $this->settings->maxRows . ' '; } } diff --git a/src/Controllers/BrowseForeignersController.php b/src/Controllers/BrowseForeignersController.php index 98ba603bfb..b74462536d 100644 --- a/src/Controllers/BrowseForeignersController.php +++ b/src/Controllers/BrowseForeignersController.php @@ -38,6 +38,8 @@ final class BrowseForeignersController implements InvocableController $foreignShowAll = $request->getParsedBodyParam('foreign_showAll'); /** @var string $foreignFilter */ $foreignFilter = $request->getParsedBodyParam('foreign_filter', ''); + /** @var string|null $rownumber */ + $rownumber = $request->getParsedBodyParam('rownumber'); if (! isset($database, $table, $field)) { return $this->response->response(); @@ -48,13 +50,14 @@ final class BrowseForeignersController implements InvocableController $header->disableMenuAndConsole(); $header->setBodyId('body_browse_foreigners'); - $foreignLimit = $this->browseForeigners->getForeignLimit($foreignShowAll); + $pos = (int) $request->getParsedBodyParam('pos'); + $foreignLimit = $this->browseForeigners->getForeignLimit($foreignShowAll, $pos); $foreignData = $this->relation->getForeignData( $this->relation->getForeigners($database, $table), $field, true, $foreignFilter, - $foreignLimit ?? '', + $foreignLimit, true, ); @@ -65,6 +68,9 @@ final class BrowseForeignersController implements InvocableController $foreignData, $fieldKey, $data, + $pos, + $foreignFilter, + $rownumber, )); return $this->response->response(); diff --git a/tests/unit/BrowseForeignersTest.php b/tests/unit/BrowseForeignersTest.php index 9d396b59b3..1c80481f1b 100644 --- a/tests/unit/BrowseForeignersTest.php +++ b/tests/unit/BrowseForeignersTest.php @@ -31,20 +31,19 @@ class BrowseForeignersTest extends AbstractTestCase */ public function testGetForeignLimit(): void { - self::assertNull( - $this->browseForeigners->getForeignLimit('Show all'), + self::assertSame( + '', + $this->browseForeigners->getForeignLimit('Show all', 0), ); self::assertSame( 'LIMIT 0, 25 ', - $this->browseForeigners->getForeignLimit(null), + $this->browseForeigners->getForeignLimit(null, 0), ); - $_POST['pos'] = 10; - self::assertSame( 'LIMIT 10, 25 ', - $this->browseForeigners->getForeignLimit(null), + $this->browseForeigners->getForeignLimit(null, 10), ); $config = new Config(); @@ -53,12 +52,12 @@ class BrowseForeignersTest extends AbstractTestCase self::assertSame( 'LIMIT 10, 50 ', - $browseForeigners->getForeignLimit(null), + $browseForeigners->getForeignLimit(null, 10), ); self::assertSame( 'LIMIT 10, 50 ', - $browseForeigners->getForeignLimit('xyz'), + $browseForeigners->getForeignLimit('xyz', 10), ); } @@ -74,11 +73,10 @@ class BrowseForeignersTest extends AbstractTestCase $this->browseForeigners, BrowseForeigners::class, 'getHtmlForGotoPage', - [$foreignData], + [$foreignData, 0], ), ); - $_POST['pos'] = 15; $foreignData = new ForeignData(false, 5, '', [], ''); self::assertSame( @@ -87,7 +85,7 @@ class BrowseForeignersTest extends AbstractTestCase $this->browseForeigners, BrowseForeigners::class, 'getHtmlForGotoPage', - [$foreignData], + [$foreignData, 15], ), ); @@ -96,7 +94,7 @@ class BrowseForeignersTest extends AbstractTestCase $this->browseForeigners, BrowseForeigners::class, 'getHtmlForGotoPage', - [$foreignData], + [$foreignData, 15], ); self::assertStringStartsWith('Page number:', $result); @@ -153,8 +151,8 @@ class BrowseForeignersTest extends AbstractTestCase $foreignData = new ForeignData(false, 0, '', null, ''); $fieldkey = 'bar'; $currentValue = ''; - $_POST['rownumber'] = 1; - $_POST['foreign_filter'] = '5'; + $rownumber = '1'; + $foreignFilter = '5'; $result = $this->browseForeigners->getHtmlForRelationalFieldSelection( $db, $table, @@ -162,6 +160,9 @@ class BrowseForeignersTest extends AbstractTestCase $foreignData, $fieldkey, $currentValue, + 0, + $foreignFilter, + $rownumber, ); self::assertStringContainsString( @@ -206,6 +207,9 @@ class BrowseForeignersTest extends AbstractTestCase $foreignData, $fieldkey, $currentValue, + 0, + $foreignFilter, + $rownumber, ); self::assertStringContainsString(