diff --git a/js/functions.js b/js/functions.js index 0f79b876d1..c2d6429eab 100644 --- a/js/functions.js +++ b/js/functions.js @@ -612,10 +612,9 @@ Functions.displayGitRevision = function () { $('#is_git_revision').remove(); $('#li_pma_version_git').remove(); $.get( - 'index.php?route=/', + 'index.php?route=/git-revision', { 'server': CommonParams.get('server'), - 'git_revision': true, 'ajax_request': true, 'no_debug': true }, diff --git a/libraries/classes/Controllers/HomeController.php b/libraries/classes/Controllers/HomeController.php index 26a836c146..d1f6076eac 100644 --- a/libraries/classes/Controllers/HomeController.php +++ b/libraries/classes/Controllers/HomeController.php @@ -61,11 +61,25 @@ class HomeController extends AbstractController /** + * @param array $params Request parameters + * * @return string HTML */ - public function index(): string + public function index(array $params): string { - global $cfg, $server, $collation_connection, $message; + global $cfg, $server, $collation_connection, $message, $show_query, $db, $table; + + if ($this->response->isAjax() && ! empty($params['access_time'])) { + return ''; + } + + $db = ''; + $table = ''; + $show_query = '1'; + + if ($server > 0) { + include ROOT_PATH . 'libraries/server_common.inc.php'; + } $languageManager = LanguageManager::getInstance(); @@ -289,6 +303,8 @@ class HomeController extends AbstractController $preferences = $userPreferences->load(); $preferences['config_data']['ThemeDefault'] = $params['set_theme']; $userPreferences->save($preferences['config_data']); + + $this->response->header('Location: index.php?route=/' . Url::getCommonRaw([], '&')); } /** @@ -303,6 +319,8 @@ class HomeController extends AbstractController $params['collation_connection'], 'utf8mb4_unicode_ci' ); + + $this->response->header('Location: index.php?route=/' . Url::getCommonRaw([], '&')); } /** @@ -310,6 +328,9 @@ class HomeController extends AbstractController */ public function reloadRecentTablesList(): array { + if (! $this->response->isAjax()) { + return []; + } return [ 'list' => RecentFavoriteTable::getInstance('recent')->getHtmlList(), ]; @@ -320,6 +341,13 @@ class HomeController extends AbstractController */ public function gitRevision(): string { + global $PMA_Config; + + /** @var Config $PMA_Config */ + if (! $this->response->isAjax() || ! $PMA_Config->isGitRevision()) { + return ''; + } + return (new GitRevision( $this->response, $this->config, diff --git a/libraries/classes/RecentFavoriteTable.php b/libraries/classes/RecentFavoriteTable.php index 3a06b47930..639940a857 100644 --- a/libraries/classes/RecentFavoriteTable.php +++ b/libraries/classes/RecentFavoriteTable.php @@ -365,7 +365,7 @@ class RecentFavoriteTable public static function getHtmlUpdateRecentTables() { $retval = 'get(Response::class); - -/** @var DatabaseInterface $dbi */ -$dbi = $containerBuilder->get(DatabaseInterface::class); - -/** @var HomeController $controller */ -$controller = $containerBuilder->get(HomeController::class); - -if (isset($_REQUEST['ajax_request']) && ! empty($_REQUEST['access_time'])) { - exit; -} - -if (isset($_POST['set_theme'])) { - $controller->setTheme([ - 'set_theme' => $_POST['set_theme'], - ]); - - header('Location: index.php?route=/' . Url::getCommonRaw([], '&')); -} elseif (isset($_POST['collation_connection'])) { - $controller->setCollationConnection([ - 'collation_connection' => $_POST['collation_connection'], - ]); - - header('Location: index.php?route=/' . Url::getCommonRaw([], '&')); -} elseif ($response->isAjax() && ! empty($_REQUEST['recent_table'])) { - $response->addJSON($controller->reloadRecentTablesList()); -} elseif ($GLOBALS['PMA_Config']->isGitRevision() - && isset($_REQUEST['git_revision']) - && $response->isAjax() -) { - $response->addHTML($controller->gitRevision()); -} else { - // Handles some variables that may have been sent by the calling script - $db = ''; - $table = ''; - $show_query = '1'; - - if ($server > 0) { - include ROOT_PATH . 'libraries/server_common.inc.php'; - } - - $response->addHTML($controller->index()); -} diff --git a/libraries/routes.php b/libraries/routes.php index 3fd9a4eef0..3c8bc8eaf7 100644 --- a/libraries/routes.php +++ b/libraries/routes.php @@ -9,6 +9,7 @@ use FastRoute\RouteCollector; use PhpMyAdmin\Controllers\Database\DataDictionaryController; use PhpMyAdmin\Controllers\Database\MultiTableQueryController; use PhpMyAdmin\Controllers\Database\StructureController; +use PhpMyAdmin\Controllers\HomeController; use PhpMyAdmin\Controllers\Server\BinlogController; use PhpMyAdmin\Controllers\Server\CollationsController; use PhpMyAdmin\Controllers\Server\DatabasesController; @@ -35,8 +36,24 @@ if (! defined('PHPMYADMIN')) { $response = $containerBuilder->get(Response::class); return function (RouteCollector $routes) use ($containerBuilder, $response) { - $routes->addRoute(['GET', 'POST'], '[/]', function () { - require_once ROOT_PATH . 'libraries/entry_points/home.php'; + $routes->addGroup('', function (RouteCollector $routes) use ($containerBuilder, $response) { + /** @var HomeController $controller */ + $controller = $containerBuilder->get(HomeController::class); + $routes->addRoute(['GET', 'POST'], '[/]', function () use ($response, $controller) { + $response->addHTML($controller->index(['access_time' => $_REQUEST['access_time'] ?? null])); + }); + $routes->post('/set-theme', function () use ($controller) { + $controller->setTheme(['set_theme' => $_POST['set_theme']]); + }); + $routes->post('/collation-connection', function () use ($controller) { + $controller->setCollationConnection(['collation_connection' => $_POST['collation_connection']]); + }); + $routes->addRoute(['GET', 'POST'], '/recent-table', function () use ($response, $controller) { + $response->addJSON($controller->reloadRecentTablesList()); + }); + $routes->addRoute(['GET', 'POST'], '/git-revision', function () use ($response, $controller) { + $response->addHTML($controller->gitRevision()); + }); }); $routes->addRoute(['GET', 'POST'], '/ajax', function () { require_once ROOT_PATH . 'libraries/entry_points/ajax.php'; diff --git a/templates/home/index.twig b/templates/home/index.twig index c41f29701b..a24bbd9a6f 100644 --- a/templates/home/index.twig +++ b/templates/home/index.twig @@ -39,7 +39,7 @@ {{ change_password is not empty ? change_password|raw }}
  • -
    + {{ get_hidden_inputs(null, null, 4, 'collation_connection') }}

    - + {% if screen is not empty %} {{ name }}
    diff --git a/test/classes/ThemeTest.php b/test/classes/ThemeTest.php index 104b6977d8..70f13eaacc 100644 --- a/test/classes/ThemeTest.php +++ b/test/classes/ThemeTest.php @@ -250,7 +250,7 @@ class ThemeTest extends PmaTestCase $this->object->getPrintPreview() ); $this->assertStringContainsString( - 'name="" href="index.php?route=/&set_theme=&server=99&lang=en">', + 'name="" href="index.php?route=/set-theme&set_theme=&server=99&lang=en">', $this->object->getPrintPreview() ); $this->assertStringContainsString(