Move Routing::getCurrentRoute to ServerRequest

The route is retrieved from the request, so it makes sense to move the
method to the Http\ServerRequest class.

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
This commit is contained in:
Maurício Meneghini Fauth 2022-06-06 23:36:57 -03:00
parent e7487227e5
commit eb3703882b
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
40 changed files with 216 additions and 194 deletions

View File

@ -37,9 +37,4 @@ require AUTOLOAD_FILE;
Common::run();
Routing::callControllerForRoute(
Common::getRequest(),
Routing::getCurrentRoute(),
Routing::getDispatcher(),
$GLOBALS['containerBuilder']
);
Routing::callControllerForRoute(Common::getRequest(), Routing::getDispatcher(), $GLOBALS['containerBuilder']);

View File

@ -93,8 +93,7 @@ final class Common
$GLOBALS['token_mismatch'] = $GLOBALS['token_mismatch'] ?? null;
$request = self::getRequest();
$route = Routing::getCurrentRoute();
$route = $request->getRoute();
if ($route === '/import-status') {
$GLOBALS['isMinimumCommon'] = true;

View File

@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\ExportForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -43,7 +43,7 @@ class ExportController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -51,8 +51,6 @@ class ExportController extends AbstractController
$GLOBALS['hash'] = $GLOBALS['hash'] ?? null;
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$route = Routing::getCurrentRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);
@ -92,7 +90,7 @@ class ExportController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\FeaturesForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -43,7 +43,7 @@ class FeaturesController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -51,8 +51,6 @@ class FeaturesController extends AbstractController
$GLOBALS['hash'] = $GLOBALS['hash'] ?? null;
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$route = Routing::getCurrentRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);
@ -92,7 +90,7 @@ class FeaturesController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\ImportForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -43,7 +43,7 @@ class ImportController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -51,8 +51,6 @@ class ImportController extends AbstractController
$GLOBALS['hash'] = $GLOBALS['hash'] ?? null;
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$route = Routing::getCurrentRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);
@ -92,7 +90,7 @@ class ImportController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\MainForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -43,7 +43,7 @@ class MainPanelController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -51,8 +51,6 @@ class MainPanelController extends AbstractController
$GLOBALS['hash'] = $GLOBALS['hash'] ?? null;
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$route = Routing::getCurrentRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);
@ -92,7 +90,7 @@ class MainPanelController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -11,9 +11,9 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Core;
use PhpMyAdmin\File;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\ThemeManager;
use PhpMyAdmin\UserPreferences;
@ -65,7 +65,7 @@ class ManageController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -79,7 +79,7 @@ class ManageController extends AbstractController
$GLOBALS['params'] = $GLOBALS['params'] ?? null;
$GLOBALS['query'] = $GLOBALS['query'] ?? null;
$route = Routing::getCurrentRoute();
$route = $request->getRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);

View File

@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\NaviForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -43,7 +43,7 @@ class NavigationController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -51,8 +51,6 @@ class NavigationController extends AbstractController
$GLOBALS['hash'] = $GLOBALS['hash'] ?? null;
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$route = Routing::getCurrentRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);
@ -92,7 +90,7 @@ class NavigationController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\SqlForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -43,7 +43,7 @@ class SqlController extends AbstractController
$this->config = $config;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['cf'] = $GLOBALS['cf'] ?? null;
$GLOBALS['error'] = $GLOBALS['error'] ?? null;
@ -51,8 +51,6 @@ class SqlController extends AbstractController
$GLOBALS['hash'] = $GLOBALS['hash'] ?? null;
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$route = Routing::getCurrentRoute();
$GLOBALS['cf'] = new ConfigFile($this->config->baseSettings);
$this->userPreferences->pageInit($GLOBALS['cf']);
@ -92,7 +90,7 @@ class SqlController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -6,9 +6,9 @@ namespace PhpMyAdmin\Controllers\Preferences;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
@ -26,14 +26,12 @@ class TwoFactorController extends AbstractController
$this->relation = $relation;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$route = Routing::getCurrentRoute();
$relationParameters = $this->relation->getRelationParameters();
echo $this->template->render('preferences/header', [
'route' => $route,
'route' => $request->getRoute(),
'is_saved' => ! empty($_GET['saved']),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);

View File

@ -11,6 +11,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Core;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Server\Plugins;
@ -49,7 +50,7 @@ class PrivilegesController extends AbstractController
$this->dbi = $dbi;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['errorUrl'] = $GLOBALS['errorUrl'] ?? null;
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -435,7 +436,8 @@ class PrivilegesController extends AbstractController
$GLOBALS['username'],
$GLOBALS['hostname'] ?? '',
$GLOBALS['dbname'] ?? '',
$GLOBALS['tablename'] ?? ''
$GLOBALS['tablename'] ?? '',
$request->getRoute()
)
);
}

View File

@ -11,9 +11,9 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Core;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Index;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Table;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
@ -56,10 +56,8 @@ final class RelationController extends AbstractController
/**
* Index
*/
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$route = Routing::getCurrentRoute();
$options = [
'CASCADE' => 'CASCADE',
'SET_NULL' => 'SET NULL',
@ -224,7 +222,7 @@ final class RelationController extends AbstractController
'databases' => $GLOBALS['dblist']->databases,
'dbi' => $this->dbi,
'default_sliders_state' => $GLOBALS['cfg']['InitialSlidersState'],
'route' => $route,
'route' => $request->getRoute(),
'display_field' => $this->relation->getDisplayField($GLOBALS['db'], $GLOBALS['table']),
'foreign_key_row' => $foreignKeyRow,
]);

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -34,7 +35,7 @@ final class AddIndexController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -67,6 +68,6 @@ final class AddIndexController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Sql\SqlController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -29,7 +30,7 @@ final class AddKeyController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['reload'] = $GLOBALS['reload'] ?? null;
@ -37,6 +38,6 @@ final class AddKeyController extends AbstractController
$GLOBALS['reload'] = true;
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -32,7 +33,7 @@ final class CentralColumnsAddController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -55,6 +56,6 @@ final class CentralColumnsAddController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -32,7 +33,7 @@ final class CentralColumnsRemoveController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -55,6 +56,6 @@ final class CentralColumnsRemoveController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -34,7 +35,7 @@ final class FulltextController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -67,6 +68,6 @@ final class FulltextController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\CreateAddField;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\Partitioning\TablePartitionDefinition;
use PhpMyAdmin\ResponseRenderer;
@ -51,12 +52,12 @@ final class PartitioningController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
if (isset($_POST['save_partitioning'])) {
$this->dbi->selectDb($GLOBALS['db']);
$this->updatePartitioning();
($this->structureController)();
($this->structureController)($request);
return;
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -36,7 +37,7 @@ final class PrimaryController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
$GLOBALS['urlParams'] = $GLOBALS['urlParams'] ?? null;
@ -106,7 +107,7 @@ final class PrimaryController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
/**

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Core;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Index;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -62,7 +63,7 @@ final class SaveController extends AbstractController
$this->tableObj = $this->dbi->getTable($GLOBALS['db'], $GLOBALS['table']);
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$regenerate = $this->updateColumns();
if (! $regenerate) {
@ -70,7 +71,7 @@ final class SaveController extends AbstractController
unset($_POST['selected']);
}
($this->structureController)();
($this->structureController)($request);
}
/**

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -34,7 +35,7 @@ final class SpatialController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -67,6 +68,6 @@ final class SpatialController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -34,7 +35,7 @@ final class UniqueController extends AbstractController
$this->structureController = $structureController;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['message'] = $GLOBALS['message'] ?? null;
@ -67,6 +68,6 @@ final class UniqueController extends AbstractController
$GLOBALS['message'] = Message::success();
}
($this->structureController)();
($this->structureController)($request);
}
}

View File

@ -18,11 +18,11 @@ use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Engines\Innodb;
use PhpMyAdmin\FlashMessages;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Index;
use PhpMyAdmin\Partitioning\Partition;
use PhpMyAdmin\Query\Utilities;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\StorageEngine;
use PhpMyAdmin\Table;
use PhpMyAdmin\Template;
@ -86,7 +86,7 @@ class StructureController extends AbstractController
$this->tableObj = $this->dbi->getTable($GLOBALS['db'], $GLOBALS['table']);
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['reread_info'] = $GLOBALS['reread_info'] ?? null;
$GLOBALS['showtable'] = $GLOBALS['showtable'] ?? null;
@ -150,7 +150,8 @@ class StructureController extends AbstractController
$primary,
$fields,
$columns_with_index,
$isSystemSchema
$isSystemSchema,
$request->getRoute()
));
}
@ -161,6 +162,7 @@ class StructureController extends AbstractController
* @param Index|false $primary_index primary index or false if no one exists
* @param array $fields Fields
* @param array $columns_with_index Columns with index
* @psalm-param non-empty-string $route
*
* @return string
*/
@ -170,13 +172,12 @@ class StructureController extends AbstractController
$primary_index,
array $fields,
array $columns_with_index,
bool $isSystemSchema
bool $isSystemSchema,
string $route
) {
$GLOBALS['tbl_is_view'] = $GLOBALS['tbl_is_view'] ?? null;
$GLOBALS['tbl_storage_engine'] = $GLOBALS['tbl_storage_engine'] ?? null;
$route = Routing::getCurrentRoute();
// prepare comments
$comments_map = [];
$mime_map = [];

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -35,7 +36,7 @@ class UserPasswordController extends AbstractController
$this->dbi = $dbi;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$GLOBALS['hostname'] = $GLOBALS['hostname'] ?? null;
$GLOBALS['username'] = $GLOBALS['username'] ?? null;
@ -116,7 +117,8 @@ class UserPasswordController extends AbstractController
$this->response->addHTML($this->userPassword->getFormForChangePassword(
$GLOBALS['username'],
$GLOBALS['hostname']
$GLOBALS['hostname'],
$request->getRoute()
));
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\SqlParser\Parser;
@ -42,7 +43,7 @@ class CreateController extends AbstractController
$this->dbi = $dbi;
}
public function __invoke(): void
public function __invoke(ServerRequest $request): void
{
$this->checkParameters(['db']);
$GLOBALS['text_dir'] = $GLOBALS['text_dir'] ?? null;
@ -204,7 +205,7 @@ class CreateController extends AbstractController
$GLOBALS['message'] = Message::success();
/** @var StructureController $controller */
$controller = $GLOBALS['containerBuilder']->get(StructureController::class);
$controller();
$controller($request);
} else {
$this->response->addJSON(
'message',

View File

@ -244,7 +244,7 @@ class DatabaseInterface implements DbalInterface
sprintf(
'SQL[%s?route=%s]: %0.3f(W:%d,C:%s,L:0x%02X) > %s',
basename($_SERVER['SCRIPT_NAME']),
Routing::getCurrentRoute(),
Common::getRequest()->getRoute(),
$this->lastQueryExecutionTime,
$warningsCount,
$cacheAffectedRows ? 'y' : 'n',

View File

@ -141,7 +141,7 @@ class Footer
$GLOBALS['server'] = $GLOBALS['server'] ?? null;
$params = [];
$params['route'] = Routing::getCurrentRoute();
$params['route'] = Common::getRequest()->getRoute();
if (isset($GLOBALS['db']) && strlen($GLOBALS['db']) > 0) {
$params['db'] = $GLOBALS['db'];

View File

@ -10,6 +10,7 @@ use Psr\Http\Message\UriInterface;
use function is_array;
use function is_object;
use function is_string;
use function property_exists;
class ServerRequest implements ServerRequestInterface
@ -339,4 +340,37 @@ class ServerRequest implements ServerRequestInterface
{
return $this->getMethod() === 'POST';
}
/**
* @psalm-return non-empty-string
*/
public function getRoute(): string
{
$getParams = $this->getQueryParams();
$postParams = $this->getParsedBody();
$route = '/';
if (isset($getParams['route']) && is_string($getParams['route']) && $getParams['route'] !== '') {
$route = $getParams['route'];
} elseif (
is_array($postParams)
&& isset($postParams['route'])
&& is_string($postParams['route'])
&& $postParams['route'] !== ''
) {
$route = $postParams['route'];
}
/**
* See FAQ 1.34.
*
* @see https://docs.phpmyadmin.net/en/latest/faq.html#faq1-34
*/
$db = isset($getParams['db']) && is_string($getParams['db']) ? $getParams['db'] : '';
if ($route === '/' && $db !== '') {
$table = isset($getParams['table']) && is_string($getParams['table']) ? $getParams['table'] : '';
$route = $table === '' ? '/database/structure' : '/sql';
}
return $route;
}
}

View File

@ -218,7 +218,7 @@ class Menu
*/
private function getTableTabs(): array
{
$route = Routing::getCurrentRoute();
$route = Common::getRequest()->getRoute();
$isSystemSchema = Utilities::isSystemSchema($this->db);
$tableIsView = $this->dbi->getTable($this->db, $this->table)
@ -337,7 +337,7 @@ class Menu
*/
private function getDbTabs(): array
{
$route = Routing::getCurrentRoute();
$route = Common::getRequest()->getRoute();
$isSystemSchema = Utilities::isSystemSchema($this->db);
$numTables = count($this->dbi->getTables($this->db));
@ -452,7 +452,7 @@ class Menu
*/
private function getServerTabs(): array
{
$route = Routing::getCurrentRoute();
$route = Common::getRequest()->getRoute();
$isSuperUser = $this->dbi->isSuperUser();
$isCreateOrGrantUser = $this->dbi->isGrantUser() || $this->dbi->isCreateUser();

View File

@ -7,13 +7,13 @@ declare(strict_types=1);
namespace PhpMyAdmin\Plugins\Auth;
use PhpMyAdmin\Common;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\Message;
use PhpMyAdmin\Plugins\AuthenticationPlugin;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Server\Select;
use PhpMyAdmin\Session;
use PhpMyAdmin\Url;
@ -148,7 +148,7 @@ class AuthenticationCookie extends AuthenticationPlugin
}
$_form_params = [];
$_form_params['route'] = Routing::getCurrentRoute();
$_form_params['route'] = Common::getRequest()->getRoute();
if (strlen($GLOBALS['db'])) {
$_form_params['db'] = $GLOBALS['db'];
@ -467,7 +467,7 @@ class AuthenticationCookie extends AuthenticationPlugin
// any parameters to pass?
$url_params = [];
$url_params['route'] = Routing::getCurrentRoute();
$url_params['route'] = Common::getRequest()->getRoute();
if (strlen($GLOBALS['db']) > 0) {
$url_params['db'] = $GLOBALS['db'];

View File

@ -116,40 +116,15 @@ class Routing
return @file_put_contents(self::ROUTES_CACHE_FILE, $cacheContents) !== false;
}
/**
* @psalm-return non-empty-string
*/
public static function getCurrentRoute(): string
{
/** @var mixed $route */
$route = $_GET['route'] ?? $_POST['route'] ?? '/';
if (! is_string($route) || $route === '') {
$route = '/';
}
/**
* See FAQ 1.34.
*
* @see https://docs.phpmyadmin.net/en/latest/faq.html#faq1-34
*/
$db = isset($_GET['db']) && is_string($_GET['db']) ? $_GET['db'] : '';
if ($route === '/' && $db !== '') {
$table = isset($_GET['table']) && is_string($_GET['table']) ? $_GET['table'] : '';
$route = $table === '' ? '/database/structure' : '/sql';
}
return $route;
}
/**
* Call associated controller for a route using the dispatcher
*/
public static function callControllerForRoute(
ServerRequest $request,
string $route,
Dispatcher $dispatcher,
ContainerInterface $container
): void {
$route = $request->getRoute();
$routeInfo = $dispatcher->dispatch($request->getMethod(), rawurldecode($route));
if ($routeInfo[0] === Dispatcher::NOT_FOUND) {

View File

@ -19,7 +19,6 @@ use PhpMyAdmin\Html\MySQLDocumentation;
use PhpMyAdmin\Message;
use PhpMyAdmin\Query\Compatibility;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -3071,6 +3070,7 @@ class Privileges
* @param string $hostname host name
* @param string|array $dbname database name
* @param string $tablename table name
* @psalm-param non-empty-string $route
*
* @return string
*/
@ -3080,7 +3080,8 @@ class Privileges
$username,
$hostname,
$dbname,
$tablename
$tablename,
string $route
) {
$sql = "SELECT '1' FROM `mysql`.`user`"
. " WHERE `User` = '" . $this->dbi->escapeString($username) . "'"
@ -3151,7 +3152,7 @@ class Privileges
$changeLoginInfoFields = '';
if (! is_array($dbname) && strlen($dbname) === 0 && ! $userDoesNotExists) {
//change login information
$changePassword = $this->getFormForChangePassword($username, $hostname, true);
$changePassword = $this->getFormForChangePassword($username, $hostname, true, $route);
$userGroup = $this->getUserGroupForUser($username);
$changeLoginInfoFields = $this->getHtmlForLoginInformationFields('change', $username, $hostname);
}
@ -3701,10 +3702,15 @@ class Privileges
return $this->parseProcPriv($privileges);
}
public function getFormForChangePassword(string $username, string $hostname, bool $editOthers): string
{
$route = Routing::getCurrentRoute();
/**
* @psalm-param non-empty-string $route
*/
public function getFormForChangePassword(
string $username,
string $hostname,
bool $editOthers,
string $route
): string {
$isPrivileges = $route === '/server/privileges';
$serverVersion = $this->dbi->getVersion();

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Table;
use PhpMyAdmin\Common;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
@ -107,7 +108,7 @@ final class Indexes
} else {
/** @var StructureController $controller */
$controller = $GLOBALS['containerBuilder']->get(StructureController::class);
$controller();
$controller(Common::getRequest());
}
} else {
$this->response->setRequestStatus(false);

View File

@ -208,8 +208,11 @@ class UserPassword
$GLOBALS['dbi']->tryQuery('FLUSH PRIVILEGES;');
}
public function getFormForChangePassword(?string $username, ?string $hostname): string
/**
* @psalm-param non-empty-string $route
*/
public function getFormForChangePassword(?string $username, ?string $hostname, string $route): string
{
return $this->serverPrivileges->getFormForChangePassword($username ?? '', $hostname ?? '', false);
return $this->serverPrivileges->getFormForChangePassword($username ?? '', $hostname ?? '', false, $route);
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Tests\Controllers\Server;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\Server\PrivilegesController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
@ -54,8 +55,10 @@ class PrivilegesControllerTest extends AbstractTestCase
);
// phpcs:enable
$request = $this->createStub(ServerRequest::class);
$response = new ResponseRenderer();
(new PrivilegesController($response, new Template(), new Relation($this->dbi), $this->dbi))();
(new PrivilegesController($response, new Template(), new Relation($this->dbi), $this->dbi))($request);
$actual = $response->getHTMLResult();
$this->assertStringContainsString('User accounts overview', $actual);

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Controllers\Table\Structure;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\Table\Structure\SaveController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
@ -76,8 +77,10 @@ class SaveControllerTest extends AbstractTestCase
);
$dbi = $this->createDatabaseInterface($dummyDbi);
$request = $this->createStub(ServerRequest::class);
$mock = $this->createMock(StructureController::class);
$mock->expects($this->once())->method('__invoke');
$mock->expects($this->once())->method('__invoke')->with($request);
(new SaveController(
new ResponseRenderer(),
@ -86,7 +89,7 @@ class SaveControllerTest extends AbstractTestCase
new Transformations(),
$dbi,
$mock
))();
))($request);
$this->assertArrayNotHasKey('selected', $_POST);
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\ConfigStorage\RelationCleanup;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\CreateAddField;
use PhpMyAdmin\FlashMessages;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Index;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
@ -34,7 +35,6 @@ class StructureControllerTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['cfg']['ShowStats'] = false;
$GLOBALS['cfg']['ShowPropertyComments'] = false;
$_GET['route'] = '/table/structure';
$_SESSION['relation'] = [];
$this->dummyDbi->addSelectDb('test_db');
@ -68,6 +68,9 @@ class StructureControllerTest extends AbstractTestCase
$pageSettings = new PageSettings('TableStructure');
$fields = $this->dbi->getColumns($GLOBALS['db'], $GLOBALS['table'], true);
$request = $this->createStub(ServerRequest::class);
$request->method('getRoute')->willReturn('/table/structure');
$response = new ResponseRenderer();
$relation = new Relation($this->dbi);
$template = new Template();
@ -80,7 +83,7 @@ class StructureControllerTest extends AbstractTestCase
new RelationCleanup($this->dbi, $relation),
$this->dbi,
new FlashMessages()
))();
))($request);
$expected = $pageSettings->getHTML();
$expected .= $template->render('table/structure/display_structure', [

View File

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Http;
use PhpMyAdmin\Http\ServerRequest;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\ServerRequestInterface;
/**
* @covers \PhpMyAdmin\Http\ServerRequest
*/
class ServerRequestTest extends TestCase
{
/**
* @param array<string, string> $get
* @param array<string, string> $post
*
* @dataProvider providerForTestGetRoute
*/
public function testGetRoute(string $expected, array $get, array $post): void
{
$requestStub = $this->createStub(ServerRequestInterface::class);
$requestStub->method('getQueryParams')->willReturn($get);
$requestStub->method('getParsedBody')->willReturn($post);
$request = new ServerRequest($requestStub);
$this->assertSame($expected, $request->getRoute());
}
/**
* @return array<int, array<int, array<string, string>|string>>
* @psalm-return array<int, array{string, array<string, string>, array<string, string>}>
*/
public function providerForTestGetRoute(): iterable
{
return [
['/', [], []],
['/test', ['route' => '/test'], []],
['/test', [], ['route' => '/test']],
['/test-get', ['route' => '/test-get'], ['route' => '/test-post']],
['/database/structure', ['db' => 'db'], []],
['/sql', ['db' => 'db', 'table' => 'table'], []],
['/test', ['route' => '/test', 'db' => 'db'], []],
['/test', ['route' => '/test', 'db' => 'db', 'table' => 'table'], []],
['/', [], ['db' => 'db']],
['/', [], ['db' => 'db', 'table' => 'table']],
];
}
}

View File

@ -60,62 +60,4 @@ class RoutingTest extends AbstractTestCase
$this->assertInstanceOf(Dispatcher::class, $dispatcher);
$this->assertSame($expected, $dispatcher->dispatch('GET', '/'));
}
/**
* Test for Routing::getCurrentRoute
*/
public function testGetCurrentRouteNoParams(): void
{
$this->assertSame('/', Routing::getCurrentRoute());
}
/**
* Test for Routing::getCurrentRoute
*/
public function testGetCurrentRouteGet(): void
{
$_GET['route'] = '/test';
$this->assertSame('/test', Routing::getCurrentRoute());
}
/**
* Test for Routing::getCurrentRoute
*/
public function testGetCurrentRoutePost(): void
{
unset($_GET['route']);
$_POST['route'] = '/testpost';
$this->assertSame('/testpost', Routing::getCurrentRoute());
}
/**
* Test for Routing::getCurrentRoute
*/
public function testGetCurrentRouteGetIsOverPost(): void
{
$_GET['route'] = '/testget';
$_POST['route'] = '/testpost';
$this->assertSame('/testget', Routing::getCurrentRoute());
}
/**
* Test for Routing::getCurrentRoute
*/
public function testGetCurrentRouteRedirectDbStructure(): void
{
unset($_POST['route']);
unset($_GET['route']);
$_GET['db'] = 'testDB';
$this->assertSame('/database/structure', Routing::getCurrentRoute());
}
/**
* Test for Routing::getCurrentRoute
*/
public function testGetCurrentRouteRedirectSql(): void
{
$_GET['db'] = 'testDB';
$_GET['table'] = 'tableTest';
$this->assertSame('/sql', Routing::getCurrentRoute());
}
}

View File

@ -1438,7 +1438,8 @@ class PrivilegesTest extends AbstractTestCase
$username,
$hostname,
$tablename,
$_REQUEST['tablename']
$_REQUEST['tablename'],
'/server/privileges'
);
//title
@ -1549,7 +1550,15 @@ class PrivilegesTest extends AbstractTestCase
$GLOBALS['username'] = 'user';
$GLOBALS['hostname'] = 'host';
$actual = $serverPrivileges->getHtmlForUserProperties(false, 'sakila', 'user', 'host', 'sakila', 'actor');
$actual = $serverPrivileges->getHtmlForUserProperties(
false,
'sakila',
'user',
'host',
'sakila',
'actor',
'/server/privileges'
);
$this->assertStringContainsString('addUsersForm', $actual);
$this->assertStringContainsString('SELECT', $actual);
$this->assertStringContainsString('Allows reading data.', $actual);
@ -1813,9 +1822,8 @@ class PrivilegesTest extends AbstractTestCase
{
$username = 'pma_username';
$hostname = 'pma_hostname';
$_GET['route'] = '/server/privileges';
$html = $this->serverPrivileges->getFormForChangePassword($username, $hostname, false);
$html = $this->serverPrivileges->getFormForChangePassword($username, $hostname, false, '/server/privileges');
$this->assertStringContainsString(
Url::getFromRoute('/server/privileges'),