Merge pull request #15953 from mauriciofauth/routes-refactor

Refactor the route definition file 

- Move request and response handling from routes file to the controllers.
- Simplify the routes file by moving the controller creation to the `index.php` file.
- Other minor changes.
This commit is contained in:
Maurício Meneghini Fauth 2020-02-12 18:53:01 -03:00 committed by GitHub
commit d0283d7df2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 712 additions and 1265 deletions

View File

@ -60,6 +60,7 @@ if ($routeInfo[0] === Dispatcher::NOT_FOUND) {
$response->setHttpResponseCode(405);
Message::error(__('Error 405! Request method not allowed.'))->display();
} elseif ($routeInfo[0] === Dispatcher::FOUND) {
$handler = $routeInfo[1];
$handler($routeInfo[2]);
[$controllerName, $action] = $routeInfo[1];
$controller = $containerBuilder->get($controllerName);
$controller->$action($routeInfo[2]);
}

View File

@ -12,7 +12,7 @@
/* global generateFromBlock, generateWhereBlock */ // js/database/query_generator.js
/**
* js file for handling AJAX and other events in /database/multi_table_query
* js file for handling AJAX and other events in /database/multi-table-query
*/
/**
@ -70,7 +70,7 @@ AJAX.registerOnload('database/multi_table_query.js', function () {
$.ajax({
type: 'GET',
async: false,
url: 'index.php?route=/database/multi_table_query/tables',
url: 'index.php?route=/database/multi-table-query/tables',
data: {
'server': sessionStorage.server,
'db': $('#db_name').val(),
@ -132,7 +132,7 @@ AJAX.registerOnload('database/multi_table_query.js', function () {
};
$.ajax({
type: 'POST',
url: 'index.php?route=/database/multi_table_query/query',
url: 'index.php?route=/database/multi-table-query/query',
data: data,
success: function (data) {
var $resultsDom = $(data.message);

View File

@ -933,7 +933,7 @@ AJAX.registerOnload('export.js', function () {
'server': CommonParams.get('server'),
'db': database,
};
var url = 'index.php?route=/ajax/list-tables/' + encodeURIComponent(database);
var url = 'index.php?route=/ajax/list-tables';
$.post(url, params, function (response) {
if (response.success === true) {
$.each(response.tables, function (idx, value) {
@ -958,7 +958,7 @@ AJAX.registerOnload('export.js', function () {
'db': database,
'table': table,
};
var url = 'index.php?route=/ajax/list-columns/' + encodeURIComponent(database) + '/' + encodeURIComponent(table);
var url = 'index.php?route=/ajax/list-columns';
$.post(url, params, function (response) {
if (response.success === true) {
$.each(response.columns, function (idx, value) {

View File

@ -33,78 +33,70 @@ class AjaxController extends AbstractController
$this->config = $config;
}
/**
* @return array JSON
*/
public function databases(): array
public function databases(): void
{
global $dblist;
return ['databases' => $dblist->databases];
$this->response->addJSON(['databases' => $dblist->databases]);
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function tables(array $params): array
public function tables(): void
{
return ['tables' => $this->dbi->getTables($params['database'])];
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function columns(array $params): array
{
return [
'columns' => $this->dbi->getColumnNames(
$params['database'],
$params['table']
),
];
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function getConfig(array $params): array
{
if (! isset($params['key'])) {
if (! isset($_POST['db'])) {
$this->response->setRequestStatus(false);
return ['message' => Message::error()];
$this->response->addJSON(['message' => Message::error()]);
return;
}
return ['value' => $this->config->get($params['key'])];
$this->response->addJSON(['tables' => $this->dbi->getTables($_POST['db'])]);
}
/**
* @param array $params Request parameters
*
* @return array
*/
public function setConfig(array $params): array
public function columns(): void
{
if (! isset($params['key'], $params['value'])) {
if (! isset($_POST['db'], $_POST['table'])) {
$this->response->setRequestStatus(false);
return ['message' => Message::error()];
$this->response->addJSON(['message' => Message::error()]);
return;
}
$this->response->addJSON([
'columns' => $this->dbi->getColumnNames(
$_POST['db'],
$_POST['table']
),
]);
}
public function getConfig(): void
{
if (! isset($_POST['key'])) {
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => Message::error()]);
return;
}
$this->response->addJSON(['value' => $this->config->get($_POST['key'])]);
}
public function setConfig(): void
{
if (! isset($_POST['key'], $_POST['value'])) {
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => Message::error()]);
return;
}
$result = $this->config->setUserValue(
null,
$params['key'],
json_decode($params['value'])
$_POST['key'],
json_decode($_POST['value'])
);
$json = [];
if ($result !== true) {
$this->response->setRequestStatus(false);
$json['message'] = $result;
if ($result === true) {
return;
}
return $json;
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => $result]);
}
}

View File

@ -37,15 +37,20 @@ class BrowseForeignersController extends AbstractController
$this->relation = $relation;
}
/**
* @param array $params Request parameters
*
* @return string HTML
*/
public function index(array $params): string
public function index(): void
{
$params = [
'db' => $_POST['db'] ?? null,
'table' => $_POST['table'] ?? null,
'field' => $_POST['field'] ?? null,
'fieldkey' => $_POST['fieldkey'] ?? null,
'data' => $_POST['data'] ?? null,
'foreign_showAll' => $_POST['foreign_showAll'] ?? null,
'foreign_filter' => $_POST['foreign_filter'] ?? null,
];
if (! isset($params['db'], $params['table'], $params['field'])) {
return '';
return;
}
$this->response->getFooter()->setMinimal();
@ -69,13 +74,13 @@ class BrowseForeignersController extends AbstractController
true
);
return $this->browseForeigners->getHtmlForRelationalFieldSelection(
$this->response->addHTML($this->browseForeigners->getHtmlForRelationalFieldSelection(
$params['db'],
$params['table'],
$params['field'],
$foreignData,
$params['fieldkey'] ?? '',
$params['data'] ?? ''
);
));
}
}

View File

@ -28,13 +28,16 @@ class CheckRelationsController extends AbstractController
$this->relation = $relation;
}
/**
* @param array $params Request parameters
*/
public function index(array $params): string
public function index(): void
{
global $db;
$params = [
'create_pmadb' => $_POST['create_pmadb'] ?? null,
'fixall_pmadb' => $_POST['fixall_pmadb'] ?? null,
'fix_pmadb' => $_POST['fix_pmadb'] ?? null,
];
// If request for creating the pmadb
if (isset($params['create_pmadb']) && $this->relation->createPmaDatabase()) {
$this->relation->fixPmaTables('phpmyadmin');
@ -51,6 +54,6 @@ class CheckRelationsController extends AbstractController
$this->relation->fixPmaTables($cfgRelation['db']);
}
return $this->relation->getRelationsParamDiagnostic($cfgRelation);
$this->response->addHTML($this->relation->getRelationsParamDiagnostic($cfgRelation));
}
}

View File

@ -39,12 +39,9 @@ class DataDictionaryController extends AbstractController
$this->transformations = $transformations;
}
/**
* @param array $params Request parameters
*/
public function index(array $params): string
public function index(): void
{
$this->db = $params['database'];
Util::checkParameters(['db'], true);
$header = $this->response->getHeader();
$header->enablePrintView();
@ -141,10 +138,10 @@ class DataDictionaryController extends AbstractController
];
}
return $this->template->render('database/data_dictionary/index', [
$this->response->addHTML($this->template->render('database/data_dictionary/index', [
'database' => $this->db,
'comment' => $comment,
'tables' => $tables,
]);
]));
}
}

View File

@ -13,7 +13,7 @@ use PhpMyAdmin\Database\MultiTableQuery;
*/
class MultiTableQueryController extends AbstractController
{
public function index(): string
public function index(): void
{
$header = $this->response->getHeader();
$scripts = $header->getScripts();
@ -23,16 +23,18 @@ class MultiTableQueryController extends AbstractController
$queryInstance = new MultiTableQuery($this->dbi, $this->template, $this->db);
return $queryInstance->getFormHtml();
$this->response->addHTML($queryInstance->getFormHtml());
}
/**
* @param array $params Request parameters
*/
public function displayResults(array $params): void
public function displayResults(): void
{
global $pmaThemeImage;
$params = [
'sql_query' => $_POST['sql_query'],
'db' => $_POST['db'] ?? $_GET['db'] ?? null,
];
MultiTableQuery::displayResults(
$params['sql_query'],
$params['db'],
@ -40,18 +42,16 @@ class MultiTableQueryController extends AbstractController
);
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function table(array $params): array
public function table(): void
{
$params = [
'tables' => $_GET['tables'],
'db' => $_GET['db'] ?? null,
];
$constrains = $this->dbi->getForeignKeyConstrains(
$params['db'],
$params['tables']
);
return ['foreignKeyConstrains' => $constrains];
$this->response->addJSON(['foreignKeyConstrains' => $constrains]);
}
}

View File

@ -164,9 +164,9 @@ class QueryByExampleController extends AbstractController
$secondaryTabs = [
'multi' => [
'link' => Url::getFromRoute('/database/multi_table_query'),
'link' => Url::getFromRoute('/database/multi-table-query'),
'text' => __('Multi-table query'),
'active' => $route === '/database/multi_table_query',
'active' => $route === '/database/multi-table-query',
],
'qbe' => [
'link' => Url::getFromRoute('/database/qbe'),

View File

@ -38,15 +38,14 @@ class RoutinesController extends AbstractController
$this->checkUserPrivileges = $checkUserPrivileges;
}
/**
* @param array $params Request parameters
*/
public function index(array $params): void
public function index(): void
{
global $_PMA_RTE, $db, $table, $tables, $num_tables, $total_num_tables, $sub_part, $is_show_stats;
global $db_is_system_schema, $tooltip_truename, $tooltip_aliasname, $pos, $url_query;
global $errors, $titles;
$params = ['type' => $_REQUEST['type'] ?? null];
$this->checkUserPrivileges->getPrivileges();
$_PMA_RTE = 'RTN';

View File

@ -10,10 +10,7 @@ use function json_encode;
*/
class SqlAutoCompleteController extends AbstractController
{
/**
* @return array JSON
*/
public function index(): array
public function index(): void
{
global $cfg, $db, $sql_autocomplete;
@ -31,6 +28,6 @@ class SqlAutoCompleteController extends AbstractController
}
}
}
return ['tables' => json_encode($sql_autocomplete)];
$this->response->addJSON(['tables' => json_encode($sql_autocomplete)]);
}
}

View File

@ -11,14 +11,10 @@ use function strlen;
*/
class SqlFormatController extends AbstractController
{
/**
* @param array $params Request parameters
*
* @return array
*/
public function index(array $params): array
public function index(): void
{
$params = ['sql' => $_POST['sql'] ?? null];
$query = strlen((string) $params['sql']) > 0 ? $params['sql'] : '';
return ['sql' => Formatter::format($query)];
$this->response->addJSON(['sql' => Formatter::format($query)]);
}
}

View File

@ -107,17 +107,15 @@ class StructureController extends AbstractController
$this->isShowStats = $isShowStats;
}
/**
* Index action
*
* @param array $parameters Request parameters
*
* @return string HTML
*/
public function index(array $parameters): string
public function index(): void
{
global $cfg;
$parameters = [
'sort' => $_REQUEST['sort'] ?? null,
'sort_order' => $_REQUEST['sort_order'] ?? null,
];
Common::database();
$this->response->getHeader()->getScripts()->addFiles([
@ -126,8 +124,8 @@ class StructureController extends AbstractController
]);
// Drops/deletes/etc. multiple tables if required
if ((! empty($parameters['submit_mult']) && isset($parameters['selected_tbl']))
|| isset($parameters['mult_btn'])
if ((! empty($_POST['submit_mult']) && isset($_POST['selected_tbl']))
|| isset($_POST['mult_btn'])
) {
$this->multiSubmitAction();
}
@ -179,31 +177,30 @@ class StructureController extends AbstractController
$createTable = CreateTable::getHtml($this->db);
}
return $this->template->render('database/structure/index', [
$this->response->addHTML($this->template->render('database/structure/index', [
'database' => $this->db,
'has_tables' => $this->numTables > 0,
'list_navigator_html' => $listNavigator ?? '',
'table_list_html' => $tableList ?? '',
'is_system_schema' => ! empty($this->dbIsSystemSchema),
'create_table_html' => $createTable,
]);
]));
}
/**
* Add or remove favorite tables
*
* @param array $parameters Request parameters
*
* @return array
*/
public function addRemoveFavoriteTablesAction(array $parameters): ?array
public function addRemoveFavoriteTablesAction(): void
{
global $cfg;
$parameters = [
'favorite_table' => $_REQUEST['favorite_table'] ?? null,
'favoriteTables' => $_REQUEST['favoriteTables'] ?? null,
'sync_favorite_tables' => $_REQUEST['sync_favorite_tables'] ?? null,
];
Common::database();
if (! $this->response->isAjax()) {
return [];
return;
}
$favoriteInstance = RecentFavoriteTable::getInstance('favorite');
@ -219,22 +216,26 @@ class StructureController extends AbstractController
if (isset($parameters['sync_favorite_tables'])) {
$cfgRelation = $this->relation->getRelationsParam();
if ($cfgRelation['favoritework']) {
return $this->synchronizeFavoriteTables($favoriteInstance, $user, $favoriteTables);
$this->response->addJSON($this->synchronizeFavoriteTables(
$favoriteInstance,
$user,
$favoriteTables
));
}
return [];
return;
}
$changes = true;
$titles = Util::buildActionTitles();
$favoriteTable = $parameters['favorite_table'] ?? '';
$alreadyFavorite = $this->checkFavoriteTable($favoriteTable);
if (isset($parameters['remove_favorite'])) {
if (isset($_REQUEST['remove_favorite'])) {
if ($alreadyFavorite) {
// If already in favorite list, remove it.
$favoriteInstance->remove($this->db, $favoriteTable);
$alreadyFavorite = false; // for favorite_anchor template
}
} elseif (isset($parameters['add_favorite'])) {
} elseif (isset($_REQUEST['add_favorite'])) {
if (! $alreadyFavorite) {
$numTables = count($favoriteInstance->getTables());
if ($numTables == $cfg['NumFavoriteTables']) {
@ -255,7 +256,8 @@ class StructureController extends AbstractController
$json['message'] = $this->template->render('components/error_message', [
'msg' => __('Favorite List is full!'),
]);
return $json;
$this->response->addJSON($json);
return;
}
// Check if current table is already in favorite list.
$favoriteParams = [
@ -276,22 +278,23 @@ class StructureController extends AbstractController
'titles' => $titles,
]);
return $json;
$this->response->addJSON($json);
}
/**
* Handles request for real row count on database level view page.
*
* @param array $parameters Request parameters
*
* @return array JSON
*/
public function handleRealRowCountRequestAction(array $parameters): array
public function handleRealRowCountRequestAction(): void
{
$parameters = [
'real_row_count_all' => $_REQUEST['real_row_count_all'] ?? null,
'table' => $_REQUEST['table'] ?? null,
];
Common::database();
if (! $this->response->isAjax()) {
return [];
return;
}
// If there is a request to update all table's row count.
@ -303,7 +306,8 @@ class StructureController extends AbstractController
// Format the number.
$realRowCount = Util::formatNumber($realRowCount, 0);
return ['real_row_count' => $realRowCount];
$this->response->addJSON(['real_row_count' => $realRowCount]);
return;
}
// Array to store the results.
@ -319,7 +323,7 @@ class StructureController extends AbstractController
];
}
return ['real_row_count_all' => json_encode($realRowCountAll)];
$this->response->addJSON(['real_row_count_all' => json_encode($realRowCountAll)]);
}
/**

View File

@ -23,16 +23,13 @@ use function trim;
*/
class GisDataEditorController extends AbstractController
{
/**
* @return array
*/
public function index(): array
public function index(): void
{
global $gis_data, $gis_types, $start, $geom_type, $gis_obj, $srid, $wkt, $wkt_with_zero;
global $result, $visualizationSettings, $data, $visualization, $open_layers, $geom_count;
if (! isset($_POST['field'])) {
return [];
return;
}
// Get data if any posted
@ -109,12 +106,12 @@ class GisDataEditorController extends AbstractController
// If the call is to update the WKT and visualization make an AJAX response
if (isset($_POST['generate']) && $_POST['generate'] == true) {
$extra_data = [
'result' => $result,
$this->response->addJSON([
'result' => $result,
'visualization' => $visualization,
'openLayers' => $open_layers,
];
return $extra_data;
'openLayers' => $open_layers,
]);
return;
}
$geom_count = 1;
@ -141,6 +138,7 @@ class GisDataEditorController extends AbstractController
'gis_data' => $gis_data,
'result' => $result,
]);
return ['gis_editor' => $templateOutput];
$this->response->addJSON(['gis_editor' => $templateOutput]);
}
}

View File

@ -60,17 +60,12 @@ class HomeController extends AbstractController
$this->themeManager = $themeManager;
}
/**
* @param array $params Request parameters
*
* @return string HTML
*/
public function index(array $params): string
public function index(): void
{
global $cfg, $server, $collation_connection, $message, $show_query, $db, $table;
if ($this->response->isAjax() && ! empty($params['access_time'])) {
return '';
if ($this->response->isAjax() && ! empty($_REQUEST['access_time'])) {
return;
}
$db = '';
@ -266,7 +261,7 @@ class HomeController extends AbstractController
$this->checkRequirements();
return $this->template->render('home/index', [
$this->response->addHTML($this->template->render('home/index', [
'message' => $displayMessage ?? '',
'partial_logout' => $partialLogout ?? '',
'is_git_revision' => $this->config->isGitRevision(),
@ -287,69 +282,58 @@ class HomeController extends AbstractController
'is_version_checked' => $cfg['VersionCheck'],
'phpmyadmin_version' => PMA_VERSION,
'config_storage_message' => $configStorageMessage ?? '',
]);
]));
}
/**
* @param array $params Request parameters
*/
public function setTheme(array $params): void
public function setTheme(): void
{
$this->themeManager->setActiveTheme($params['set_theme']);
$this->themeManager->setActiveTheme($_POST['set_theme']);
$this->themeManager->setThemeCookie();
$userPreferences = new UserPreferences();
$preferences = $userPreferences->load();
$preferences['config_data']['ThemeDefault'] = $params['set_theme'];
$preferences['config_data']['ThemeDefault'] = $_POST['set_theme'];
$userPreferences->save($preferences['config_data']);
$this->response->header('Location: index.php?route=/' . Url::getCommonRaw([], '&'));
}
/**
* @param array $params Request parameters
*/
public function setCollationConnection(array $params): void
public function setCollationConnection(): void
{
$this->config->setUserValue(
null,
'DefaultConnectionCollation',
$params['collation_connection'],
$_POST['collation_connection'],
'utf8mb4_unicode_ci'
);
$this->response->header('Location: index.php?route=/' . Url::getCommonRaw([], '&'));
}
/**
* @return array JSON
*/
public function reloadRecentTablesList(): array
public function reloadRecentTablesList(): void
{
if (! $this->response->isAjax()) {
return [];
return;
}
return [
$this->response->addJSON([
'list' => RecentFavoriteTable::getInstance('recent')->getHtmlList(),
];
]);
}
/**
* @return string HTML
*/
public function gitRevision(): string
public function gitRevision(): void
{
global $PMA_Config;
if (! $this->response->isAjax() || ! $PMA_Config->isGitRevision()) {
return '';
return;
}
return (new GitRevision(
$this->response->addHTML((new GitRevision(
$this->response,
$this->config,
$this->template
))->display();
))->display());
}
private function checkRequirements(): void

View File

@ -15,11 +15,13 @@ use function json_encode;
*/
class LintController extends AbstractController
{
/**
* @param array $params Request parameters
*/
public function index(array $params): void
public function index(): void
{
$params = [
'sql_query' => $_POST['sql_query'] ?? null,
'options' => $_POST['options'] ?? null,
];
/**
* The SQL query to be analyzed.
*

View File

@ -45,15 +45,16 @@ class BinlogController extends AbstractController
);
}
/**
* Index action
*
* @param array $params Request params
*/
public function index(array $params): string
public function index(): void
{
global $cfg, $pmaThemeImage;
$params = [
'log' => $_POST['log'] ?? null,
'pos' => $_POST['pos'] ?? null,
'is_full_query' => $_POST['is_full_query'] ?? null,
];
Common::server();
$position = ! empty($params['pos']) ? (int) $params['pos'] : 0;
@ -105,7 +106,7 @@ class BinlogController extends AbstractController
$values[] = $value;
}
return $this->template->render('server/binlog/index', [
$this->response->addHTML($this->template->render('server/binlog/index', [
'url_params' => $urlParams,
'binary_logs' => $this->binaryLogs,
'log' => $params['log'],
@ -119,7 +120,7 @@ class BinlogController extends AbstractController
'has_icons' => Util::showIcons('TableNavigationLinksMode'),
'is_full_query' => $isFullQuery,
'image_path' => $pmaThemeImage,
]);
]));
}
/**

View File

@ -54,12 +54,7 @@ class CollationsController extends AbstractController
);
}
/**
* Index action
*
* @return string HTML
*/
public function index(): string
public function index(): void
{
Common::server();
@ -83,8 +78,8 @@ class CollationsController extends AbstractController
];
}
return $this->template->render('server/collations/index', [
$this->response->addHTML($this->template->render('server/collations/index', [
'charsets' => $charsets,
]);
]));
}
}

View File

@ -67,18 +67,18 @@ class DatabasesController extends AbstractController
$checkUserPrivileges->getPrivileges();
}
/**
* Index action
*
* @param array $params Request parameters
*
* @return string HTML
*/
public function index(array $params): string
public function index(): void
{
global $cfg, $server, $dblist, $is_create_db_priv;
global $replication_info, $db_to_create, $pmaThemeImage, $text_dir;
$params = [
'statistics' => $_REQUEST['statistics'] ?? null,
'pos' => $_REQUEST['pos'] ?? null,
'sort_by' => $_REQUEST['sort_by'] ?? null,
'sort_order' => $_REQUEST['sort_order'] ?? null,
];
$header = $this->response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('server/databases.js');
@ -141,7 +141,7 @@ class DatabasesController extends AbstractController
$headerStatistics = $this->getStatisticsColumns();
return $this->template->render('server/databases/index', [
$this->response->addHTML($this->template->render('server/databases/index', [
'is_create_database_shown' => $cfg['ShowCreateDb'],
'has_create_database_privileges' => $is_create_db_priv,
'has_statistics' => $this->hasStatistics,
@ -159,22 +159,21 @@ class DatabasesController extends AbstractController
'is_drop_allowed' => $this->dbi->isSuperuser() || $cfg['AllowUserDropDatabase'],
'pma_theme_image' => $pmaThemeImage,
'text_dir' => $text_dir,
]);
]));
}
/**
* Handles creating a new database
*
* @param array $params Request parameters
*
* @return array JSON
*/
public function create(array $params): array
public function create(): void
{
global $cfg, $db;
$params = [
'new_db' => $_POST['new_db'] ?? null,
'db_collation' => $_POST['db_collation'] ?? null,
];
if (! isset($params['new_db']) || mb_strlen($params['new_db']) === 0 || ! $this->response->isAjax()) {
return ['message' => Message::error()];
$this->response->addJSON(['message' => Message::error()]);
return;
}
// lower_case_table_names=1 `DB` becomes `db`
@ -238,20 +237,21 @@ class DatabasesController extends AbstractController
];
}
return $json;
$this->response->addJSON($json);
}
/**
* Handles dropping multiple databases
*
* @param array $params Request parameters
*
* @return array JSON
*/
public function destroy(array $params): array
public function destroy(): void
{
global $submit_mult, $mult_btn, $selected, $err_url, $cfg;
$params = [
'drop_selected_dbs' => $_POST['drop_selected_dbs'] ?? null,
'selected_dbs' => $_POST['selected_dbs'] ?? null,
];
if (! isset($params['drop_selected_dbs'])
|| ! $this->response->isAjax()
|| (! $this->dbi->isSuperuser() && ! $cfg['AllowUserDropDatabase'])
@ -288,7 +288,7 @@ class DatabasesController extends AbstractController
$this->response->setRequestStatus($message->isSuccess());
}
return $json;
$this->response->addJSON($json);
}
/**

View File

@ -15,16 +15,13 @@ use PhpMyAdmin\StorageEngine;
*/
class EnginesController extends AbstractController
{
/**
* Index action
*/
public function index(): string
public function index(): void
{
Common::server();
return $this->template->render('server/engines/index', [
$this->response->addHTML($this->template->render('server/engines/index', [
'engines' => StorageEngine::getStorageEngines(),
]);
]));
}
/**
@ -32,7 +29,7 @@ class EnginesController extends AbstractController
*
* @param array $params Request params
*/
public function show(array $params): string
public function show(array $params): void
{
Common::server();
@ -53,9 +50,9 @@ class EnginesController extends AbstractController
];
}
return $this->template->render('server/engines/show', [
$this->response->addHTML($this->template->render('server/engines/show', [
'engine' => $engine,
'page' => $page,
]);
]));
}
}

View File

@ -38,10 +38,7 @@ class PluginsController extends AbstractController
$this->plugins = $plugins;
}
/**
* Index action
*/
public function index(): string
public function index(): void
{
Common::server();
@ -65,9 +62,10 @@ class PluginsController extends AbstractController
mb_strtolower($type)
);
}
return $this->template->render('server/plugins/index', [
$this->response->addHTML($this->template->render('server/plugins/index', [
'plugins' => $plugins,
'clean_types' => $cleanTypes,
]);
]));
}
}

View File

@ -35,13 +35,17 @@ class ReplicationController extends AbstractController
$this->replicationGui = $replicationGui;
}
/**
* @param array $params Request parameters
*/
public function index(array $params): string
public function index(): void
{
global $replication_info, $server_slave_replication, $url_params;
$params = [
'url_params' => $_POST['url_params'] ?? null,
'mr_configure' => $_POST['mr_configure'] ?? null,
'sl_configure' => $_POST['sl_configure'] ?? null,
'repl_clear_scr' => $_POST['repl_clear_scr'] ?? null,
];
Common::server();
ReplicationInfo::load();
@ -79,7 +83,7 @@ class ReplicationController extends AbstractController
}
}
return $this->template->render('server/replication/index', [
$this->response->addHTML($this->template->render('server/replication/index', [
'url_params' => $url_params,
'is_super_user' => $this->dbi->isSuperuser(),
'error_messages' => $errorMessages,
@ -91,6 +95,6 @@ class ReplicationController extends AbstractController
'master_configuration_html' => $masterConfigurationHtml ?? '',
'slave_configuration_html' => $slaveConfigurationHtml ?? '',
'change_master_html' => $changeMasterHtml ?? '',
]);
]));
}
}

View File

@ -34,10 +34,7 @@ class SqlController extends AbstractController
$this->sqlQueryForm = $sqlQueryForm;
}
/**
* @return string HTML
*/
public function index(): string
public function index(): void
{
$header = $this->response->getHeader();
$scripts = $header->getScripts();
@ -49,6 +46,6 @@ class SqlController extends AbstractController
Common::server();
return $this->sqlQueryForm->getHtml();
$this->response->addHTML($this->sqlQueryForm->getHtml());
}
}

View File

@ -34,7 +34,7 @@ class AdvisorController extends AbstractController
$this->advisor = $advisor;
}
public function index(): string
public function index(): void
{
$scripts = $this->response->getHeader()->getScripts();
$scripts->addFile('server/status/advisor.js');
@ -44,8 +44,8 @@ class AdvisorController extends AbstractController
$data = json_encode($this->advisor->run());
}
return $this->template->render('server/status/advisor/index', [
$this->response->addHTML($this->template->render('server/status/advisor/index', [
'data' => $data,
]);
]));
}
}

View File

@ -34,10 +34,7 @@ class MonitorController extends AbstractController
$this->monitor = $monitor;
}
/**
* @return string HTML
*/
public function index(): string
public function index(): void
{
Common::server();
@ -71,121 +68,115 @@ class MonitorController extends AbstractController
}
}
return $this->template->render('server/status/monitor/index', [
$this->response->addHTML($this->template->render('server/status/monitor/index', [
'image_path' => $GLOBALS['pmaThemeImage'],
'javascript_variable_names' => $javascriptVariableNames,
'form' => $form,
]));
}
public function chartingData(): void
{
$params = ['requiredData' => $_POST['requiredData'] ?? null];
Common::server();
if (! $this->response->isAjax()) {
return;
}
$this->response->addJSON([
'message' => $this->monitor->getJsonForChartingData(
$params['requiredData'] ?? ''
),
]);
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function chartingData(array $params): array
public function logDataTypeSlow(): void
{
$params = [
'time_start' => $_POST['time_start'] ?? null,
'time_end' => $_POST['time_end'] ?? null,
];
Common::server();
if (! $this->response->isAjax()) {
return [];
return;
}
$json = [];
$json['message'] = $this->monitor->getJsonForChartingData(
$params['requiredData'] ?? ''
);
return $json;
$this->response->addJSON([
'message' => $this->monitor->getJsonForLogDataTypeSlow(
(int) $params['time_start'],
(int) $params['time_end']
),
]);
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function logDataTypeSlow(array $params): array
public function logDataTypeGeneral(): void
{
$params = [
'time_start' => $_POST['time_start'] ?? null,
'time_end' => $_POST['time_end'] ?? null,
'limitTypes' => $_POST['limitTypes'] ?? null,
'removeVariables' => $_POST['removeVariables'] ?? null,
];
Common::server();
if (! $this->response->isAjax()) {
return [];
return;
}
$json = [];
$json['message'] = $this->monitor->getJsonForLogDataTypeSlow(
(int) $params['time_start'],
(int) $params['time_end']
);
return $json;
$this->response->addJSON([
'message' => $this->monitor->getJsonForLogDataTypeGeneral(
(int) $params['time_start'],
(int) $params['time_end'],
(bool) $params['limitTypes'],
(bool) $params['removeVariables']
),
]);
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function logDataTypeGeneral(array $params): array
public function loggingVars(): void
{
$params = [
'varName' => $_POST['varName'] ?? null,
'varValue' => $_POST['varValue'] ?? null,
];
Common::server();
if (! $this->response->isAjax()) {
return [];
return;
}
$json = [];
$json['message'] = $this->monitor->getJsonForLogDataTypeGeneral(
(int) $params['time_start'],
(int) $params['time_end'],
(bool) $params['limitTypes'],
(bool) $params['removeVariables']
);
return $json;
$this->response->addJSON([
'message' => $this->monitor->getJsonForLoggingVars(
$params['varName'],
$params['varValue']
),
]);
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function loggingVars(array $params): array
public function queryAnalyzer(): void
{
$params = [
'database' => $_POST['database'] ?? null,
'query' => $_POST['query'] ?? null,
];
Common::server();
if (! $this->response->isAjax()) {
return [];
return;
}
$json = [];
$json['message'] = $this->monitor->getJsonForLoggingVars(
$params['varName'],
$params['varValue']
);
return $json;
}
/**
* @param array $params Request parameters
*
* @return array JSON
*/
public function queryAnalyzer(array $params): array
{
Common::server();
if (! $this->response->isAjax()) {
return [];
}
$json = [];
$json['message'] = $this->monitor->getJsonForQueryAnalyzer(
$params['database'] ?? '',
$params['query'] ?? ''
);
return $json;
$this->response->addJSON([
'message' => $this->monitor->getJsonForQueryAnalyzer(
$params['database'] ?? '',
$params['query'] ?? ''
),
]);
}
}

View File

@ -18,11 +18,16 @@ use function ucfirst;
class ProcessesController extends AbstractController
{
/**
* @param array $params Request parameters
*/
public function index(array $params): string
public function index(): void
{
$params = [
'showExecuting' => $_POST['showExecuting'] ?? null,
'full' => $_POST['full'] ?? null,
'column_name' => $_POST['column_name'] ?? null,
'order_by_field' => $_POST['order_by_field'] ?? null,
'sort_order' => $_POST['sort_order'] ?? null,
];
Common::server();
$header = $this->response->getHeader();
@ -44,36 +49,40 @@ class ProcessesController extends AbstractController
$serverProcessList = $this->getList($params);
return $this->template->render('server/status/processes/index', [
$this->response->addHTML($this->template->render('server/status/processes/index', [
'url_params' => $urlParams,
'is_checked' => $isChecked,
'server_process_list' => $serverProcessList,
]);
]));
}
/**
* Only sends the process list table
*
* @param array $params Request parameters
*/
public function refresh(array $params): string
public function refresh(): void
{
$params = [
'showExecuting' => $_POST['showExecuting'] ?? null,
'full' => $_POST['full'] ?? null,
'column_name' => $_POST['column_name'] ?? null,
'order_by_field' => $_POST['order_by_field'] ?? null,
'sort_order' => $_POST['sort_order'] ?? null,
];
if (! $this->response->isAjax()) {
return '';
return;
}
return $this->getList($params);
$this->response->addHTML($this->getList($params));
}
/**
* @param array $params Request parameters
*
* @return array
*/
public function kill(array $params): array
public function kill(array $params): void
{
if (! $this->response->isAjax()) {
return [];
return;
}
$kill = (int) $params['id'];
@ -95,10 +104,7 @@ class ProcessesController extends AbstractController
}
$message->addParam($kill);
$json = [];
$json['message'] = $message;
return $json;
$this->response->addJSON(['message' => $message]);
}
/**

View File

@ -14,10 +14,7 @@ use function str_replace;
class QueriesController extends AbstractController
{
/**
* @return string HTML
*/
public function index(): string
public function index(): void
{
Common::server();
@ -77,11 +74,11 @@ class QueriesController extends AbstractController
}
}
return $this->template->render('server/status/queries/index', [
$this->response->addHTML($this->template->render('server/status/queries/index', [
'is_data_loaded' => $this->data->dataLoaded,
'stats' => $stats ?? null,
'queries' => $queries ?? [],
'chart' => $chart ?? [],
]);
]));
}
}

View File

@ -36,7 +36,7 @@ class StatusController extends AbstractController
$this->replicationGui = $replicationGui;
}
public function index(): string
public function index(): void
{
global $replication_info;
@ -69,7 +69,7 @@ class StatusController extends AbstractController
}
}
return $this->template->render('server/status/status/index', [
$this->response->addHTML($this->template->render('server/status/status/index', [
'is_data_loaded' => $this->data->dataLoaded,
'network_traffic' => $networkTraffic ?? null,
'uptime' => $uptime ?? null,
@ -79,7 +79,7 @@ class StatusController extends AbstractController
'is_master' => $replication_info['master']['status'],
'is_slave' => $replication_info['slave']['status'],
'replication' => $replication,
]);
]));
}
private function getStartTime(): int

View File

@ -14,13 +14,16 @@ use function mb_strpos;
class VariablesController extends AbstractController
{
/**
* @param array $params Request parameters
*
* @return string HTML
*/
public function index(array $params): string
public function index(): void
{
$params = [
'flush' => $_POST['flush'] ?? null,
'filterAlert' => $_POST['filterAlert'] ?? null,
'filterText' => $_POST['filterText'] ?? null,
'filterCategory' => $_POST['filterCategory'] ?? null,
'dontFormat' => $_POST['dontFormat'] ?? null,
];
Common::server();
$header = $this->response->getHeader();
@ -102,7 +105,7 @@ class VariablesController extends AbstractController
}
}
return $this->template->render('server/status/variables/index', [
$this->response->addHTML($this->template->render('server/status/variables/index', [
'is_data_loaded' => $this->data->dataLoaded,
'filter_text' => ! empty($params['filterText']) ? $params['filterText'] : '',
'is_only_alerts' => ! empty($params['filterAlert']),
@ -110,7 +113,7 @@ class VariablesController extends AbstractController
'categories' => $categories ?? [],
'links' => $links ?? [],
'variables' => $variables ?? [],
]);
]));
}
/**

View File

@ -29,13 +29,10 @@ use function trim;
*/
class VariablesController extends AbstractController
{
/**
* Index action
*
* @param array $params Request parameters
*/
public function index(array $params): string
public function index(): void
{
$params = ['filter' => $_GET['filter'] ?? null];
Common::server();
$filterValue = ! empty($params['filter']) ? $params['filter'] : '';
@ -89,25 +86,23 @@ class VariablesController extends AbstractController
}
}
return $this->template->render('server/variables/index', [
$this->response->addHTML($this->template->render('server/variables/index', [
'variables' => $variables,
'filter_value' => $filterValue,
'is_superuser' => $this->dbi->isSuperuser(),
'is_mariadb' => $this->dbi->isMariaDB(),
]);
]));
}
/**
* Handle the AJAX request for a single variable value
*
* @param array $params Request parameters
*
* @return array
*/
public function getValue(array $params): array
public function getValue(array $params): void
{
if (! $this->response->isAjax()) {
return [];
return;
}
// Send with correct charset
@ -135,20 +130,23 @@ class VariablesController extends AbstractController
$json['message'] = $varValue[1];
}
return $json;
$this->response->addJSON($json);
}
/**
* Handle the AJAX request for setting value for a single variable
*
* @param array $params Request parameters
*
* @return array
* @param array $vars Request parameters
*/
public function setValue(array $params): array
public function setValue(array $vars): void
{
$params = [
'varName' => $vars['name'],
'varValue' => $_POST['varValue'] ?? null,
];
if (! $this->response->isAjax()) {
return [];
return;
}
$value = $params['varValue'];
@ -211,7 +209,7 @@ class VariablesController extends AbstractController
$json['error'] = __('Setting variable failed');
}
return $json;
$this->response->addJSON($json);
}
/**

View File

@ -11,7 +11,7 @@ use function preg_replace;
*/
class ThemesController extends AbstractController
{
public function index(): string
public function index(): void
{
$this->response->getFooter()->setMinimal();
$header = $this->response->getHeader();
@ -19,13 +19,13 @@ class ThemesController extends AbstractController
$header->setTitle('phpMyAdmin - ' . __('Theme'));
$header->disableMenuAndConsole();
return $this->template->render('themes', [
$this->response->addHTML($this->template->render('themes', [
'version' => preg_replace(
'/([0-9]*)\.([0-9]*)\..*/',
'\1_\2',
PMA_VERSION
),
'previews' => ThemeManager::getInstance()->getPrintPreviews(),
]);
]));
}
}

View File

@ -33,10 +33,7 @@ class TransformationOverviewController extends AbstractController
$this->transformations = $transformations;
}
/**
* @return string HTML
*/
public function index(): string
public function index(): void
{
$header = $this->response->getHeader();
$header->disableMenuAndConsole();
@ -67,9 +64,9 @@ class TransformationOverviewController extends AbstractController
}
}
return $this->template->render('transformation_overview', [
$this->response->addHTML($this->template->render('transformation_overview', [
'mime_types' => $mimeTypes,
'transformations' => $transformations,
]);
]));
}
}

View File

@ -112,7 +112,7 @@ class MultiTableQuery
{
list(,$db,) = ParseAnalyze::sqlQuery($sqlQuery, $db);
$goto = Url::getFromRoute('/database/multi_table_query');
$goto = Url::getFromRoute('/database/multi-table-query');
$sql = new Sql();
$sql->executeQueryAndSendQueryResponse(
null, // analyzed_sql_results

View File

@ -411,8 +411,8 @@ class Menu
$tabs['query']['text'] = __('Query');
$tabs['query']['icon'] = 's_db';
$tabs['query']['route'] = '/database/multi_table_query';
$tabs['query']['active'] = $route === '/database/multi_table_query' || $route === '/database/qbe';
$tabs['query']['route'] = '/database/multi-table-query';
$tabs['query']['active'] = $route === '/database/multi-table-query' || $route === '/database/qbe';
if ($num_tables == 0) {
$tabs['query']['warning'] = __('Database seems to be empty!');
}

View File

@ -1,7 +1,5 @@
<?php
/**
* Route definition file
*/
declare(strict_types=1);
use FastRoute\RouteCollector;
@ -94,686 +92,164 @@ use PhpMyAdmin\Controllers\UserPasswordController;
use PhpMyAdmin\Controllers\VersionCheckController;
use PhpMyAdmin\Controllers\ViewCreateController;
use PhpMyAdmin\Controllers\ViewOperationsController;
use PhpMyAdmin\Response;
global $containerBuilder;
if (! defined('PHPMYADMIN')) {
exit;
}
/** @var Response $response */
$response = $containerBuilder->get(Response::class);
return function (RouteCollector $routes) use ($containerBuilder, $response) {
$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());
});
return function (RouteCollector $routes) {
$routes->addGroup('', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '[/]', [HomeController::class, 'index']);
$routes->post('/set-theme', [HomeController::class, 'setTheme']);
$routes->post('/collation-connection', [HomeController::class, 'setCollationConnection']);
$routes->addRoute(['GET', 'POST'], '/recent-table', [HomeController::class, 'reloadRecentTablesList']);
$routes->addRoute(['GET', 'POST'], '/git-revision', [HomeController::class, 'gitRevision']);
});
$routes->addGroup('/ajax', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var AjaxController $controller */
$controller = $containerBuilder->get(AjaxController::class);
$routes->post('/list-databases', function () use ($response, $controller) {
$response->addJSON($controller->databases());
});
$routes->post('/list-tables/{database}', function (array $vars) use ($response, $controller) {
$response->addJSON($controller->tables($vars));
});
$routes->post('/list-columns/{database}/{table}', function (array $vars) use ($response, $controller) {
$response->addJSON($controller->columns($vars));
});
$routes->post('/config-get', function () use ($response, $controller) {
$response->addJSON($controller->getConfig([
'key' => $_POST['key'] ?? null,
]));
});
$routes->post('/config-set', function () use ($response, $controller) {
$response->addJSON($controller->setConfig([
'key' => $_POST['key'] ?? null,
'value' => $_POST['value'] ?? null,
]));
});
$routes->addGroup('/ajax', function (RouteCollector $routes) {
$routes->post('/list-databases', [AjaxController::class, 'databases']);
$routes->post('/list-tables', [AjaxController::class, 'tables']);
$routes->post('/list-columns', [AjaxController::class, 'columns']);
$routes->post('/config-get', [AjaxController::class, 'getConfig']);
$routes->post('/config-set', [AjaxController::class, 'setConfig']);
});
$routes->addRoute(['GET', 'POST'], '/browse-foreigners', function () use ($containerBuilder, $response) {
/** @var BrowseForeignersController $controller */
$controller = $containerBuilder->get(BrowseForeignersController::class);
$response->addHTML($controller->index([
'db' => $_POST['db'] ?? null,
'table' => $_POST['table'] ?? null,
'field' => $_POST['field'] ?? null,
'fieldkey' => $_POST['fieldkey'] ?? null,
'data' => $_POST['data'] ?? null,
'foreign_showAll' => $_POST['foreign_showAll'] ?? null,
'foreign_filter' => $_POST['foreign_filter'] ?? null,
]));
$routes->addRoute(['GET', 'POST'], '/browse-foreigners', [BrowseForeignersController::class, 'index']);
$routes->get('/changelog', [ChangeLogController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/check-relations', [CheckRelationsController::class, 'index']);
$routes->addGroup('/database', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '/central-columns', [CentralColumnsController::class, 'index']);
$routes->get('/data-dictionary', [DataDictionaryController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/designer', [DesignerController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/events', [EventsController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/export', [DatabaseExportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/import', [DatabaseImportController::class, 'index']);
$routes->addGroup('/multi-table-query', function (RouteCollector $routes) {
$routes->get('', [MultiTableQueryController::class, 'index']);
$routes->get('/tables', [MultiTableQueryController::class, 'table']);
$routes->post('/query', [MultiTableQueryController::class, 'displayResults']);
});
$routes->addRoute(['GET', 'POST'], '/operations', [OperationsController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/qbe', [QueryByExampleController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/routines', [RoutinesController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/search', [SearchController::class, 'index']);
$routes->addGroup('/sql', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '', [DatabaseSqlController::class, 'index']);
$routes->post('/autocomplete', [SqlAutoCompleteController::class, 'index']);
$routes->post('/format', [SqlFormatController::class, 'index']);
});
$routes->addGroup('/structure', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '', [StructureController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/favorite-table', [StructureController::class, 'addRemoveFavoriteTablesAction']);
$routes->addRoute(['GET', 'POST'], '/real-row-count', [StructureController::class, 'handleRealRowCountRequestAction']);
});
$routes->addRoute(['GET', 'POST'], '/tracking', [TrackingController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/triggers', [TriggersController::class, 'index']);
});
$routes->get('/changelog', function () use ($containerBuilder) {
/** @var ChangeLogController $controller */
$controller = $containerBuilder->get(ChangeLogController::class);
$controller->index();
$routes->addRoute(['GET', 'POST'], '/error-report', [ErrorReportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/export', [ExportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/gis-data-editor', [GisDataEditorController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/import', [ImportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/import-status', [ImportStatusController::class, 'index']);
$routes->get('/license', [LicenseController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/lint', [LintController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/logout', [LogoutController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/navigation', [NavigationController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/normalization', [NormalizationController::class, 'index']);
$routes->get('/phpinfo', [PhpInfoController::class, 'index']);
$routes->addGroup('/preferences', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '/export', [PreferencesExportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/features', [FeaturesController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/import', [PreferencesImportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/main-panel', [MainPanelController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/manage', [ManageController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/navigation', [PreferencesNavigationController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/sql', [PreferencesSqlController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/two-factor', [TwoFactorController::class, 'index']);
});
$routes->addRoute(['GET', 'POST'], '/check-relations', function () use ($containerBuilder, $response) {
/** @var CheckRelationsController $controller */
$controller = $containerBuilder->get(CheckRelationsController::class);
$response->addHTML($controller->index([
'create_pmadb' => $_POST['create_pmadb'] ?? null,
'fixall_pmadb' => $_POST['fixall_pmadb'] ?? null,
'fix_pmadb' => $_POST['fix_pmadb'] ?? null,
]));
});
$routes->addGroup('/database', function (RouteCollector $routes) use ($containerBuilder, $response) {
$routes->addRoute(['GET', 'POST'], '/central-columns', function () use ($containerBuilder) {
/** @var CentralColumnsController $controller */
$controller = $containerBuilder->get(CentralColumnsController::class);
$controller->index();
$routes->addRoute(['GET', 'POST'], '/schema-export', [SchemaExportController::class, 'index']);
$routes->addGroup('/server', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '/binlog', [BinlogController::class, 'index']);
$routes->get('/collations', [CollationsController::class, 'index']);
$routes->addGroup('/databases', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '', [DatabasesController::class, 'index']);
$routes->post('/create', [DatabasesController::class, 'create']);
$routes->post('/destroy', [DatabasesController::class, 'destroy']);
});
$routes->get('/data-dictionary/{database}', function (array $vars) use ($containerBuilder, $response) {
/** @var DataDictionaryController $controller */
$controller = $containerBuilder->get(DataDictionaryController::class);
$response->addHTML($controller->index($vars));
$routes->addGroup('/engines', function (RouteCollector $routes) {
$routes->get('', [EnginesController::class, 'index']);
$routes->get('/{engine}[/{page}]', [EnginesController::class, 'show']);
});
$routes->addRoute(['GET', 'POST'], '/designer', function () use ($containerBuilder) {
/** @var DesignerController $controller */
$controller = $containerBuilder->get(DesignerController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/events', function () use ($containerBuilder) {
/** @var EventsController $controller */
$controller = $containerBuilder->get(EventsController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/export', function () use ($containerBuilder) {
/** @var DatabaseExportController $controller */
$controller = $containerBuilder->get(DatabaseExportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/import', function () use ($containerBuilder) {
/** @var DatabaseImportController $controller */
$controller = $containerBuilder->get(DatabaseImportController::class);
$controller->index();
});
$routes->addGroup('/multi_table_query', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var MultiTableQueryController $controller */
$controller = $containerBuilder->get(MultiTableQueryController::class);
$routes->get('', function () use ($response, $controller) {
$response->addHTML($controller->index());
$routes->addRoute(['GET', 'POST'], '/export', [ServerExportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/import', [ServerImportController::class, 'index']);
$routes->get('/plugins', [PluginsController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/privileges', [PrivilegesController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/replication', [ReplicationController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/sql', [ServerSqlController::class, 'index']);
$routes->addGroup('/status', function (RouteCollector $routes) {
$routes->get('', [StatusController::class, 'index']);
$routes->get('/advisor', [AdvisorController::class, 'index']);
$routes->addGroup('/monitor', function (RouteCollector $routes) {
$routes->get('', [MonitorController::class, 'index']);
$routes->post('/chart', [MonitorController::class, 'chartingData']);
$routes->post('/slow-log', [MonitorController::class, 'logDataTypeSlow']);
$routes->post('/general-log', [MonitorController::class, 'logDataTypeGeneral']);
$routes->post('/log-vars', [MonitorController::class, 'loggingVars']);
$routes->post('/query', [MonitorController::class, 'queryAnalyzer']);
});
$routes->get('/tables', function () use ($response, $controller) {
$response->addJSON($controller->table([
'tables' => $_GET['tables'],
'db' => $_GET['db'] ?? null,
]));
});
$routes->post('/query', function () use ($controller) {
$controller->displayResults([
'sql_query' => $_POST['sql_query'],
'db' => $_POST['db'] ?? $_GET['db'] ?? null,
]);
$routes->addGroup('/processes', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '', [ProcessesController::class, 'index']);
$routes->post('/refresh', [ProcessesController::class, 'refresh']);
$routes->post('/kill/{id:\d+}', [ProcessesController::class, 'kill']);
});
$routes->get('/queries', [QueriesController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/variables', [StatusVariables::class, 'index']);
});
$routes->addRoute(['GET', 'POST'], '/operations', function () use ($containerBuilder) {
/** @var OperationsController $controller */
$controller = $containerBuilder->get(OperationsController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/qbe', function () use ($containerBuilder) {
/** @var QueryByExampleController $controller */
$controller = $containerBuilder->get(QueryByExampleController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/routines', function () use ($containerBuilder) {
/** @var RoutinesController $controller */
$controller = $containerBuilder->get(RoutinesController::class);
$controller->index([
'type' => $_REQUEST['type'] ?? null,
]);
});
$routes->addRoute(['GET', 'POST'], '/search', function () use ($containerBuilder) {
/** @var SearchController $controller */
$controller = $containerBuilder->get(SearchController::class);
$controller->index();
});
$routes->addGroup('/sql', function (RouteCollector $routes) use ($containerBuilder, $response) {
$routes->addRoute(['GET', 'POST'], '', function () use ($containerBuilder) {
/** @var DatabaseSqlController $controller */
$controller = $containerBuilder->get(DatabaseSqlController::class);
$controller->index();
});
$routes->post('/autocomplete', function () use ($containerBuilder, $response) {
/** @var SqlAutoCompleteController $controller */
$controller = $containerBuilder->get(SqlAutoCompleteController::class);
$response->addJSON($controller->index());
});
$routes->post('/format', function () use ($containerBuilder, $response) {
/** @var SqlFormatController $controller */
$controller = $containerBuilder->get(SqlFormatController::class);
$response->addJSON($controller->index(['sql' => $_POST['sql'] ?? null]));
});
});
$routes->addGroup('/structure', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var StructureController $controller */
$controller = $containerBuilder->get(StructureController::class);
$routes->addRoute(['GET', 'POST'], '', function () use ($response, $controller) {
$response->addHTML($controller->index([
'submit_mult' => $_POST['submit_mult'] ?? null,
'selected_tbl' => $_POST['selected_tbl'] ?? null,
'mult_btn' => $_POST['mult_btn'] ?? null,
'sort' => $_REQUEST['sort'] ?? null,
'sort_order' => $_REQUEST['sort_order'] ?? null,
]));
});
$routes->addRoute(['GET', 'POST'], '/favorite-table', function () use ($response, $controller) {
$response->addJSON($controller->addRemoveFavoriteTablesAction([
'favorite_table' => $_REQUEST['favorite_table'] ?? null,
'favoriteTables' => $_REQUEST['favoriteTables'] ?? null,
'sync_favorite_tables' => $_REQUEST['sync_favorite_tables'] ?? null,
'add_favorite' => $_REQUEST['add_favorite'] ?? null,
'remove_favorite' => $_REQUEST['remove_favorite'] ?? null,
]));
});
$routes->addRoute(['GET', 'POST'], '/real-row-count', function () use ($response, $controller) {
$response->addJSON($controller->handleRealRowCountRequestAction([
'real_row_count_all' => $_REQUEST['real_row_count_all'] ?? null,
'table' => $_REQUEST['table'] ?? null,
]));
});
});
$routes->addRoute(['GET', 'POST'], '/tracking', function () use ($containerBuilder) {
/** @var TrackingController $controller */
$controller = $containerBuilder->get(TrackingController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/triggers', function () use ($containerBuilder) {
/** @var TriggersController $controller */
$controller = $containerBuilder->get(TriggersController::class);
$controller->index();
$routes->addRoute(['GET', 'POST'], '/user-groups', [UserGroupsController::class, 'index']);
$routes->addGroup('/variables', function (RouteCollector $routes) {
$routes->get('', [VariablesController::class, 'index']);
$routes->get('/get/{name}', [VariablesController::class, 'getValue']);
$routes->post('/set/{name}', [VariablesController::class, 'setValue']);
});
});
$routes->addRoute(['GET', 'POST'], '/error-report', function () use ($containerBuilder) {
/** @var ErrorReportController $controller */
$controller = $containerBuilder->get(ErrorReportController::class);
$controller->index();
$routes->addGroup('/sql', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '', [SqlController::class, 'index']);
$routes->post('/get-relational-values', [SqlController::class, 'getRelationalValues']);
$routes->post('/get-enum-values', [SqlController::class, 'getEnumValues']);
$routes->post('/get-set-values', [SqlController::class, 'getSetValues']);
$routes->get('/get-default-fk-check-value', [SqlController::class, 'getDefaultForeignKeyCheckValue']);
$routes->post('/set-column-preferences', [SqlController::class, 'setColumnOrderOrVisibility']);
});
$routes->addRoute(['GET', 'POST'], '/export', function () use ($containerBuilder) {
/** @var ExportController $controller */
$controller = $containerBuilder->get(ExportController::class);
$controller->index();
$routes->addGroup('/table', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '/add-field', [AddFieldController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/change', [ChangeController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/chart', [ChartController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/create', [CreateController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/export', [TableExportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/find-replace', [FindReplaceController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/get-field', [GetFieldController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/gis-visualization', [GisVisualizationController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/import', [TableImportController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/indexes', [IndexesController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/operations', [TableOperationsController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/recent-favorite', [RecentFavoriteController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/relation', [RelationController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/replace', [ReplaceController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/row-action', [RowActionController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/search', [TableSearchController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/sql', [TableSqlController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/structure', [TableStructureController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/tracking', [TableTrackingController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/triggers', [TableTriggersController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/zoom-search', [ZoomSearchController::class, 'index']);
});
$routes->addRoute(['GET', 'POST'], '/gis-data-editor', function () use ($containerBuilder, $response) {
/** @var GisDataEditorController $controller */
$controller = $containerBuilder->get(GisDataEditorController::class);
$response->addJSON($controller->index());
$routes->get('/themes', [ThemesController::class, 'index']);
$routes->addGroup('/transformation', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '/overview', [TransformationOverviewController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/wrapper', [TransformationWrapperController::class, 'index']);
});
$routes->addRoute(['GET', 'POST'], '/import', function () use ($containerBuilder) {
/** @var ImportController $controller */
$controller = $containerBuilder->get(ImportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/import-status', function () use ($containerBuilder) {
/** @var ImportStatusController $controller */
$controller = $containerBuilder->get(ImportStatusController::class);
$controller->index();
});
$routes->get('/license', function () use ($containerBuilder) {
/** @var LicenseController $controller */
$controller = $containerBuilder->get(LicenseController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/lint', function () use ($containerBuilder) {
/** @var LintController $controller */
$controller = $containerBuilder->get(LintController::class);
$controller->index([
'sql_query' => $_POST['sql_query'] ?? null,
'options' => $_POST['options'] ?? null,
]);
});
$routes->addRoute(['GET', 'POST'], '/logout', function () use ($containerBuilder) {
/** @var LogoutController $controller */
$controller = $containerBuilder->get(LogoutController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/navigation', function () use ($containerBuilder) {
/** @var NavigationController $controller */
$controller = $containerBuilder->get(NavigationController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/normalization', function () use ($containerBuilder) {
/** @var NormalizationController $controller */
$controller = $containerBuilder->get(NormalizationController::class);
$controller->index();
});
$routes->get('/phpinfo', function () use ($containerBuilder) {
/** @var PhpInfoController $controller */
$controller = $containerBuilder->get(PhpInfoController::class);
$controller->index();
});
$routes->addGroup('/preferences', function (RouteCollector $routes) use ($containerBuilder) {
$routes->addRoute(['GET', 'POST'], '/export', function () use ($containerBuilder) {
/** @var PreferencesExportController $controller */
$controller = $containerBuilder->get(PreferencesExportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/features', function () use ($containerBuilder) {
/** @var FeaturesController $controller */
$controller = $containerBuilder->get(FeaturesController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/import', function () use ($containerBuilder) {
/** @var PreferencesImportController $controller */
$controller = $containerBuilder->get(PreferencesImportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/main-panel', function () use ($containerBuilder) {
/** @var MainPanelController $controller */
$controller = $containerBuilder->get(MainPanelController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/manage', function () use ($containerBuilder) {
/** @var ManageController $controller */
$controller = $containerBuilder->get(ManageController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/navigation', function () use ($containerBuilder) {
/** @var PreferencesNavigationController $controller */
$controller = $containerBuilder->get(PreferencesNavigationController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/sql', function () use ($containerBuilder) {
/** @var PreferencesSqlController $controller */
$controller = $containerBuilder->get(PreferencesSqlController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/two-factor', function () use ($containerBuilder) {
/** @var TwoFactorController $controller */
$controller = $containerBuilder->get(TwoFactorController::class);
$controller->index();
});
});
$routes->addRoute(['GET', 'POST'], '/schema-export', function () use ($containerBuilder) {
/** @var SchemaExportController $controller */
$controller = $containerBuilder->get(SchemaExportController::class);
$controller->index();
});
$routes->addGroup('/server', function (RouteCollector $routes) use ($containerBuilder, $response) {
$routes->addRoute(['GET', 'POST'], '/binlog', function () use ($containerBuilder, $response) {
/** @var BinlogController $controller */
$controller = $containerBuilder->get(BinlogController::class);
$response->addHTML($controller->index([
'log' => $_POST['log'] ?? null,
'pos' => $_POST['pos'] ?? null,
'is_full_query' => $_POST['is_full_query'] ?? null,
]));
});
$routes->get('/collations', function () use ($containerBuilder, $response) {
/** @var CollationsController $controller */
$controller = $containerBuilder->get(CollationsController::class);
$response->addHTML($controller->index());
});
$routes->addGroup('/databases', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var DatabasesController $controller */
$controller = $containerBuilder->get(DatabasesController::class);
$routes->addRoute(['GET', 'POST'], '', function () use ($response, $controller) {
$response->addHTML($controller->index([
'statistics' => $_REQUEST['statistics'] ?? null,
'pos' => $_REQUEST['pos'] ?? null,
'sort_by' => $_REQUEST['sort_by'] ?? null,
'sort_order' => $_REQUEST['sort_order'] ?? null,
]));
});
$routes->post('/create', function () use ($response, $controller) {
$response->addJSON($controller->create([
'new_db' => $_POST['new_db'] ?? null,
'db_collation' => $_POST['db_collation'] ?? null,
]));
});
$routes->post('/destroy', function () use ($response, $controller) {
$response->addJSON($controller->destroy([
'drop_selected_dbs' => $_POST['drop_selected_dbs'] ?? null,
'selected_dbs' => $_POST['selected_dbs'] ?? null,
]));
});
});
$routes->addGroup('/engines', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var EnginesController $controller */
$controller = $containerBuilder->get(EnginesController::class);
$routes->get('', function () use ($response, $controller) {
$response->addHTML($controller->index());
});
$routes->get('/{engine}[/{page}]', function (array $vars) use ($response, $controller) {
$response->addHTML($controller->show($vars));
});
});
$routes->addRoute(['GET', 'POST'], '/export', function () use ($containerBuilder) {
/** @var ServerExportController $controller */
$controller = $containerBuilder->get(ServerExportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/import', function () use ($containerBuilder) {
/** @var ServerImportController $controller */
$controller = $containerBuilder->get(ServerImportController::class);
$controller->index();
});
$routes->get('/plugins', function () use ($containerBuilder, $response) {
/** @var PluginsController $controller */
$controller = $containerBuilder->get(PluginsController::class);
$response->addHTML($controller->index());
});
$routes->addRoute(['GET', 'POST'], '/privileges', function () use ($containerBuilder) {
/** @var PrivilegesController $controller */
$controller = $containerBuilder->get(PrivilegesController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/replication', function () use ($containerBuilder, $response) {
/** @var ReplicationController $controller */
$controller = $containerBuilder->get(ReplicationController::class);
$response->addHTML($controller->index([
'url_params' => $_POST['url_params'] ?? null,
'mr_configure' => $_POST['mr_configure'] ?? null,
'sl_configure' => $_POST['sl_configure'] ?? null,
'repl_clear_scr' => $_POST['repl_clear_scr'] ?? null,
]));
});
$routes->addRoute(['GET', 'POST'], '/sql', function () use ($containerBuilder, $response) {
/** @var ServerSqlController $controller */
$controller = $containerBuilder->get(ServerSqlController::class);
$response->addHTML($controller->index());
});
$routes->addGroup('/status', function (RouteCollector $routes) use ($containerBuilder, $response) {
$routes->get('', function () use ($containerBuilder, $response) {
/** @var StatusController $controller */
$controller = $containerBuilder->get(StatusController::class);
$response->addHTML($controller->index());
});
$routes->get('/advisor', function () use ($containerBuilder, $response) {
/** @var AdvisorController $controller */
$controller = $containerBuilder->get(AdvisorController::class);
$response->addHTML($controller->index());
});
$routes->addGroup('/monitor', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var MonitorController $controller */
$controller = $containerBuilder->get(MonitorController::class);
$routes->get('', function () use ($response, $controller) {
$response->addHTML($controller->index());
});
$routes->post('/chart', function () use ($response, $controller) {
$response->addJSON($controller->chartingData([
'requiredData' => $_POST['requiredData'] ?? null,
]));
});
$routes->post('/slow-log', function () use ($response, $controller) {
$response->addJSON($controller->logDataTypeSlow([
'time_start' => $_POST['time_start'] ?? null,
'time_end' => $_POST['time_end'] ?? null,
]));
});
$routes->post('/general-log', function () use ($response, $controller) {
$response->addJSON($controller->logDataTypeGeneral([
'time_start' => $_POST['time_start'] ?? null,
'time_end' => $_POST['time_end'] ?? null,
'limitTypes' => $_POST['limitTypes'] ?? null,
'removeVariables' => $_POST['removeVariables'] ?? null,
]));
});
$routes->post('/log-vars', function () use ($response, $controller) {
$response->addJSON($controller->loggingVars([
'varName' => $_POST['varName'] ?? null,
'varValue' => $_POST['varValue'] ?? null,
]));
});
$routes->post('/query', function () use ($response, $controller) {
$response->addJSON($controller->queryAnalyzer([
'database' => $_POST['database'] ?? null,
'query' => $_POST['query'] ?? null,
]));
});
});
$routes->addGroup('/processes', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var ProcessesController $controller */
$controller = $containerBuilder->get(ProcessesController::class);
$routes->addRoute(['GET', 'POST'], '', function () use ($response, $controller) {
$response->addHTML($controller->index([
'showExecuting' => $_POST['showExecuting'] ?? null,
'full' => $_POST['full'] ?? null,
'column_name' => $_POST['column_name'] ?? null,
'order_by_field' => $_POST['order_by_field'] ?? null,
'sort_order' => $_POST['sort_order'] ?? null,
]));
});
$routes->post('/refresh', function () use ($response, $controller) {
$response->addHTML($controller->refresh([
'showExecuting' => $_POST['showExecuting'] ?? null,
'full' => $_POST['full'] ?? null,
'column_name' => $_POST['column_name'] ?? null,
'order_by_field' => $_POST['order_by_field'] ?? null,
'sort_order' => $_POST['sort_order'] ?? null,
]));
});
$routes->post('/kill/{id:\d+}', function (array $vars) use ($response, $controller) {
$response->addJSON($controller->kill($vars));
});
});
$routes->get('/queries', function () use ($containerBuilder, $response) {
/** @var QueriesController $controller */
$controller = $containerBuilder->get(QueriesController::class);
$response->addHTML($controller->index());
});
$routes->addRoute(['GET', 'POST'], '/variables', function () use ($containerBuilder, $response) {
/** @var StatusVariables $controller */
$controller = $containerBuilder->get(StatusVariables::class);
$response->addHTML($controller->index([
'flush' => $_POST['flush'] ?? null,
'filterAlert' => $_POST['filterAlert'] ?? null,
'filterText' => $_POST['filterText'] ?? null,
'filterCategory' => $_POST['filterCategory'] ?? null,
'dontFormat' => $_POST['dontFormat'] ?? null,
]));
});
});
$routes->addRoute(['GET', 'POST'], '/user-groups', function () use ($containerBuilder) {
/** @var UserGroupsController $controller */
$controller = $containerBuilder->get(UserGroupsController::class);
$controller->index();
});
$routes->addGroup('/variables', function (RouteCollector $routes) use ($containerBuilder, $response) {
/** @var VariablesController $controller */
$controller = $containerBuilder->get(VariablesController::class);
$routes->get('', function () use ($response, $controller) {
$response->addHTML($controller->index([
'filter' => $_GET['filter'] ?? null,
]));
});
$routes->get('/get/{name}', function (array $vars) use ($response, $controller) {
$response->addJSON($controller->getValue($vars));
});
$routes->post('/set/{name}', function (array $vars) use ($response, $controller) {
$response->addJSON($controller->setValue([
'varName' => $vars['name'],
'varValue' => $_POST['varValue'] ?? null,
]));
});
});
});
$routes->addGroup('/sql', function (RouteCollector $routes) use ($containerBuilder) {
/** @var SqlController $controller */
$controller = $containerBuilder->get(SqlController::class);
$routes->addRoute(['GET', 'POST'], '', function () use ($controller) {
$controller->index();
});
$routes->post('/get-relational-values', function () use ($controller) {
$controller->getRelationalValues();
});
$routes->post('/get-enum-values', function () use ($controller) {
$controller->getEnumValues();
});
$routes->post('/get-set-values', function () use ($controller) {
$controller->getSetValues();
});
$routes->get('/get-default-fk-check-value', function () use ($controller) {
$controller->getDefaultForeignKeyCheckValue();
});
$routes->post('/set-column-preferences', function () use ($controller) {
$controller->setColumnOrderOrVisibility();
});
});
$routes->addGroup('/table', function (RouteCollector $routes) use ($containerBuilder) {
$routes->addRoute(['GET', 'POST'], '/add-field', function () use ($containerBuilder) {
/** @var AddFieldController $controller */
$controller = $containerBuilder->get(AddFieldController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/change', function () use ($containerBuilder) {
/** @var ChangeController $controller */
$controller = $containerBuilder->get(ChangeController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/chart', function () use ($containerBuilder) {
/** @var ChartController $controller */
$controller = $containerBuilder->get(ChartController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/create', function () use ($containerBuilder) {
/** @var CreateController $controller */
$controller = $containerBuilder->get(CreateController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/export', function () use ($containerBuilder) {
/** @var TableExportController $controller */
$controller = $containerBuilder->get(TableExportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/find-replace', function () use ($containerBuilder) {
/** @var FindReplaceController $controller */
$controller = $containerBuilder->get(FindReplaceController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/get-field', function () use ($containerBuilder) {
/** @var GetFieldController $controller */
$controller = $containerBuilder->get(GetFieldController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/gis-visualization', function () use ($containerBuilder) {
/** @var GisVisualizationController $controller */
$controller = $containerBuilder->get(GisVisualizationController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/import', function () use ($containerBuilder) {
/** @var TableImportController $controller */
$controller = $containerBuilder->get(TableImportController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/indexes', function () use ($containerBuilder) {
/** @var IndexesController $controller */
$controller = $containerBuilder->get(IndexesController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/operations', function () use ($containerBuilder) {
/** @var TableOperationsController $controller */
$controller = $containerBuilder->get(TableOperationsController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/recent-favorite', function () use ($containerBuilder) {
/** @var RecentFavoriteController $controller */
$controller = $containerBuilder->get(RecentFavoriteController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/relation', function () use ($containerBuilder) {
/** @var RelationController $controller */
$controller = $containerBuilder->get(RelationController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/replace', function () use ($containerBuilder) {
/** @var ReplaceController $controller */
$controller = $containerBuilder->get(ReplaceController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/row-action', function () use ($containerBuilder) {
/** @var RowActionController $controller */
$controller = $containerBuilder->get(RowActionController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/search', function () use ($containerBuilder) {
/** @var TableSearchController $controller */
$controller = $containerBuilder->get(TableSearchController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/sql', function () use ($containerBuilder) {
/** @var TableSqlController $controller */
$controller = $containerBuilder->get(TableSqlController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/structure', function () use ($containerBuilder) {
/** @var TableStructureController $controller */
$controller = $containerBuilder->get(TableStructureController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/tracking', function () use ($containerBuilder) {
/** @var TableTrackingController $controller */
$controller = $containerBuilder->get(TableTrackingController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/triggers', function () use ($containerBuilder) {
/** @var TableTriggersController $controller */
$controller = $containerBuilder->get(TableTriggersController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/zoom-search', function () use ($containerBuilder) {
/** @var ZoomSearchController $controller */
$controller = $containerBuilder->get(ZoomSearchController::class);
$controller->index();
});
});
$routes->get('/themes', function () use ($containerBuilder, $response) {
/** @var ThemesController $controller */
$controller = $containerBuilder->get(ThemesController::class);
$response->addHTML($controller->index());
});
$routes->addGroup('/transformation', function (RouteCollector $routes) use ($containerBuilder, $response) {
$routes->addRoute(['GET', 'POST'], '/overview', function () use ($containerBuilder, $response) {
/** @var TransformationOverviewController $controller */
$controller = $containerBuilder->get(TransformationOverviewController::class);
$response->addHTML($controller->index());
});
$routes->addRoute(['GET', 'POST'], '/wrapper', function () use ($containerBuilder) {
/** @var TransformationWrapperController $controller */
$controller = $containerBuilder->get(TransformationWrapperController::class);
$controller->index();
});
});
$routes->addRoute(['GET', 'POST'], '/user-password', function () use ($containerBuilder) {
/** @var UserPasswordController $controller */
$controller = $containerBuilder->get(UserPasswordController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/version-check', function () use ($containerBuilder) {
/** @var VersionCheckController $controller */
$controller = $containerBuilder->get(VersionCheckController::class);
$controller->index();
});
$routes->addGroup('/view', function (RouteCollector $routes) use ($containerBuilder) {
$routes->addRoute(['GET', 'POST'], '/create', function () use ($containerBuilder) {
/** @var ViewCreateController $controller */
$controller = $containerBuilder->get(ViewCreateController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/operations', function () use ($containerBuilder) {
/** @var ViewOperationsController $controller */
$controller = $containerBuilder->get(ViewOperationsController::class);
$controller->index();
});
$routes->addRoute(['GET', 'POST'], '/user-password', [UserPasswordController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/version-check', [VersionCheckController::class, 'index']);
$routes->addGroup('/view', function (RouteCollector $routes) {
$routes->addRoute(['GET', 'POST'], '/create', [ViewCreateController::class, 'index']);
$routes->addRoute(['GET', 'POST'], '/operations', [ViewOperationsController::class, 'index']);
});
};

View File

@ -3227,36 +3227,11 @@ parameters:
count: 1
path: test/classes/ConfigTest.php
-
message: "#^Parameter \\#1 \\$response of class PhpMyAdmin\\\\Controllers\\\\Database\\\\StructureController constructor expects PhpMyAdmin\\\\Response, PhpMyAdmin\\\\Tests\\\\Stubs\\\\Response given\\.$#"
count: 10
path: test/classes/Controllers/Database/StructureControllerTest.php
-
message: "#^Parameter \\#1 \\$string of function htmlspecialchars expects string, string\\|false given\\.$#"
count: 3
path: test/classes/Controllers/Server/Status/AdvisorControllerTest.php
-
message: "#^Parameter \\#1 \\$response of class PhpMyAdmin\\\\Controllers\\\\Table\\\\IndexesController constructor expects PhpMyAdmin\\\\Response, PhpMyAdmin\\\\Tests\\\\Stubs\\\\Response given\\.$#"
count: 2
path: test/classes/Controllers/Table/IndexesControllerTest.php
-
message: "#^Parameter \\#1 \\$response of class PhpMyAdmin\\\\Controllers\\\\Table\\\\RelationController constructor expects PhpMyAdmin\\\\Response, PhpMyAdmin\\\\Tests\\\\Stubs\\\\Response given\\.$#"
count: 4
path: test/classes/Controllers/Table/RelationControllerTest.php
-
message: "#^Parameter \\#1 \\$response of class PhpMyAdmin\\\\Controllers\\\\Table\\\\SearchController constructor expects PhpMyAdmin\\\\Response, PhpMyAdmin\\\\Tests\\\\Stubs\\\\Response given\\.$#"
count: 2
path: test/classes/Controllers/Table/SearchControllerTest.php
-
message: "#^Parameter \\#1 \\$response of class PhpMyAdmin\\\\Controllers\\\\Table\\\\StructureController constructor expects PhpMyAdmin\\\\Response, PhpMyAdmin\\\\Tests\\\\Stubs\\\\Response given\\.$#"
count: 5
path: test/classes/Controllers/Table/StructureControllerTest.php
-
message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertSame\\(\\) with int and bool will always evaluate to false\\.$#"
count: 1

View File

@ -4,9 +4,9 @@
},
'sub_tabs': [
{
'link': url('/database/multi_table_query'),
'link': url('/database/multi-table-query'),
'text': 'Multi-table query'|trans,
'active': route == '/database/multi_table_query'
'active': route == '/database/multi-table-query'
},
{
'link': url('/database/qbe'),

View File

@ -11,7 +11,7 @@
<a href="#" id="printView">
{{ get_icon('b_print', 'Print'|trans, true) }}
</a>
<a href="{{ url('/database/data-dictionary/' ~ database|escape('url'), {'goto': url('/database/structure')}) }}" target="print_view">
<a href="{{ url('/database/data-dictionary', {'db': database, 'goto': url('/database/structure')}) }}" target="print_view">
{{ get_icon('b_tblanalyse', 'Data dictionary'|trans, true) }}
</a>
</p>

View File

@ -487,9 +487,9 @@ class StructureControllerTest extends PmaTestCase
$property = $class->getProperty('tables');
$property->setAccessible(true);
$json = $controller->handleRealRowCountRequestAction([
'table' => 'table',
]);
$_REQUEST['table'] = 'table';
$controller->handleRealRowCountRequestAction();
$json = $this->response->getJSONResult();
$this->assertEquals(
6,
$json['real_row_count']
@ -497,10 +497,9 @@ class StructureControllerTest extends PmaTestCase
// Fall into another branch
$property->setValue($controller, [['TABLE_NAME' => 'table']]);
$json = $controller->handleRealRowCountRequestAction([
'table' => 'table',
'real_row_count_all' => 'abc',
]);
$_REQUEST['real_row_count_all'] = 'abc';
$controller->handleRealRowCountRequestAction();
$json = $this->response->getJSONResult();
$expectedResult = [[
'table' => 'table',

View File

@ -9,8 +9,8 @@ namespace PhpMyAdmin\Tests\Controllers\Server;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\BinlogController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use PHPUnit\Framework\TestCase;
@ -94,16 +94,18 @@ class BinlogControllerTest extends TestCase
$dbi->expects($this->at(4))->method('fetchAssoc')
->will($this->returnValue(false));
$response = new Response();
$controller = new BinlogController(
Response::getInstance(),
$response,
$dbi,
new Template()
);
$actual = $controller->index([
'log' => 'index1',
'pos' => '3',
'is_full_query' => null,
]);
$_POST['log'] = 'index1';
$_POST['pos'] = '3';
$controller->index();
$actual = $response->getHTMLResult();
$this->assertStringContainsString(
'Select binary log to view',

View File

@ -8,8 +8,8 @@ namespace PhpMyAdmin\Tests\Controllers\Server;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\CollationsController;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPUnit\Framework\TestCase;
/**
@ -34,13 +34,16 @@ class CollationsControllerTest extends TestCase
public function testIndexAction(): void
{
$response = new Response();
$controller = new CollationsController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template()
);
$actual = $controller->index();
$controller->index();
$actual = $response->getHTMLResult();
$this->assertStringContainsString(
'<div id="div_mysql_charset_collations" class="row">',

View File

@ -10,8 +10,8 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\DatabasesController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Message;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPUnit\Framework\TestCase;
use stdClass;
use function sprintf;
@ -45,18 +45,16 @@ class DatabasesControllerTest extends TestCase
'employees',
];
$response = new Response();
$controller = new DatabasesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template()
);
$actual = $controller->index([
'statistics' => null,
'pos' => null,
'sort_by' => null,
'sort_order' => null,
]);
$controller->index();
$actual = $response->getHTMLResult();
$this->assertStringContainsString('data-filter-row="SAKILA"', $actual);
$this->assertStringContainsString('sakila', $actual);
@ -74,15 +72,22 @@ class DatabasesControllerTest extends TestCase
$this->assertStringContainsString(__('No privileges to create databases'), $actual);
$this->assertStringNotContainsString(__('Indexes'), $actual);
$response = new Response();
$controller = new DatabasesController(
$response,
$GLOBALS['dbi'],
new Template()
);
$cfg['ShowCreateDb'] = true;
$is_create_db_priv = true;
$_REQUEST['statistics'] = '1';
$_REQUEST['sort_by'] = 'SCHEMA_TABLES';
$_REQUEST['sort_order'] = 'desc';
$actual = $controller->index([
'statistics' => '1',
'pos' => null,
'sort_by' => 'SCHEMA_TABLES',
'sort_order' => 'desc',
]);
$controller->index();
$actual = $response->getHTMLResult();
$this->assertStringNotContainsString(__('Enable statistics'), $actual);
$this->assertStringContainsString(__('Indexes'), $actual);
@ -108,7 +113,7 @@ class DatabasesControllerTest extends TestCase
$dbi->method('getError')
->willReturn('CreateDatabaseError');
$response = Response::getInstance();
$response = new Response();
$response->setAjax(true);
$controller = new DatabasesController(
@ -117,30 +122,37 @@ class DatabasesControllerTest extends TestCase
new Template()
);
$actual = $controller->create([
'new_db' => 'pma_test',
'db_collation' => null,
]);
$_POST['new_db'] = 'pma_test';
$controller->create();
$actual = $response->getJSONResult();
$this->assertArrayHasKey('message', $actual);
$this->assertInstanceOf(Message::class, $actual['message']);
$this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']->getDisplay());
$this->assertStringContainsString('CreateDatabaseError', $actual['message']->getDisplay());
$this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']);
$this->assertStringContainsString('CreateDatabaseError', $actual['message']);
$dbi->method('tryQuery')
->willReturn(true);
$actual = $controller->create([
'new_db' => 'pma_test',
'db_collation' => 'utf8_general_ci',
]);
$response = new Response();
$response->setAjax(true);
$controller = new DatabasesController(
$response,
$dbi,
new Template()
);
$_POST['db_collation'] = 'utf8_general_ci';
$controller->create();
$actual = $response->getJSONResult();
$this->assertArrayHasKey('message', $actual);
$this->assertInstanceOf(Message::class, $actual['message']);
$this->assertStringContainsString('<div class="alert alert-success" role="alert">', $actual['message']->getDisplay());
$this->assertStringContainsString('<div class="alert alert-success" role="alert">', $actual['message']);
$this->assertStringContainsString(
sprintf(__('Database %1$s has been created.'), 'pma_test'),
$actual['message']->getDisplay()
$actual['message']
);
}
@ -155,7 +167,7 @@ class DatabasesControllerTest extends TestCase
->disableOriginalConstructor()
->getMock();
$response = Response::getInstance();
$response = new Response();
$response->setAjax(true);
$cfg['AllowUserDropDatabase'] = true;
@ -166,14 +178,13 @@ class DatabasesControllerTest extends TestCase
new Template()
);
$actual = $controller->destroy([
'drop_selected_dbs' => true,
'selected_dbs' => null,
]);
$_POST['drop_selected_dbs'] = '1';
$controller->destroy();
$actual = $response->getJSONResult();
$this->assertArrayHasKey('message', $actual);
$this->assertInstanceOf(Message::class, $actual['message']);
$this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']->getDisplay());
$this->assertStringContainsString(__('No databases selected.'), $actual['message']->getDisplay());
$this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']);
$this->assertStringContainsString(__('No databases selected.'), $actual['message']);
}
}

View File

@ -9,9 +9,9 @@ namespace PhpMyAdmin\Tests\Controllers\Server;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\EnginesController;
use PhpMyAdmin\Html\MySQLDocumentation;
use PhpMyAdmin\Response;
use PhpMyAdmin\StorageEngine;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPStan\Testing\TestCase;
use function htmlspecialchars;
@ -37,13 +37,16 @@ class EnginesControllerTest extends TestCase
public function testIndex(): void
{
$response = new Response();
$controller = new EnginesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template()
);
$actual = $controller->index();
$controller->index();
$actual = $response->getHTMLResult();
$this->assertStringContainsString(
'<th>Storage Engine</th>',
@ -83,16 +86,19 @@ class EnginesControllerTest extends TestCase
public function testShow(): void
{
$response = new Response();
$controller = new EnginesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template()
);
$actual = $controller->show([
$controller->show([
'engine' => 'Pbxt',
'page' => 'page',
]);
$actual = $response->getHTMLResult();
$enginePlugin = StorageEngine::getEngine('Pbxt');

View File

@ -9,9 +9,9 @@ namespace PhpMyAdmin\Tests\Controllers\Server;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\PluginsController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Plugins;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPUnit\Framework\TestCase;
/**
@ -70,13 +70,16 @@ class PluginsControllerTest extends TestCase
->method('freeResult')
->will($this->returnValue(true));
$response = new Response();
$controller = new PluginsController(
Response::getInstance(),
$response,
$dbi,
new Template(),
new Plugins($dbi)
);
$actual = $controller->index();
$controller->index();
$actual = $response->getHTMLResult();
//validate 1:Items
$this->assertStringContainsString(

View File

@ -11,9 +11,9 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\Status\AdvisorController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\ReplicationInfo;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Status\Data;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPUnit\Framework\TestCase;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use function htmlspecialchars;
@ -95,15 +95,18 @@ class AdvisorControllerTest extends TestCase
public function testIndex(): void
{
$response = new Response();
$controller = new AdvisorController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
new Data(),
new Advisor($GLOBALS['dbi'], new ExpressionLanguage())
);
$html = $controller->index();
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'<a href="#openAdvisorInstructions">',

View File

@ -8,10 +8,10 @@ namespace PhpMyAdmin\Tests\Controllers\Server\Status;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\Status\MonitorController;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Status\Data;
use PhpMyAdmin\Server\Status\Monitor;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PhpMyAdmin\Util;
use PHPUnit\Framework\TestCase;
@ -41,15 +41,18 @@ class MonitorControllerTest extends TestCase
public function testIndex(): void
{
$response = new Response();
$controller = new MonitorController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
$this->data,
new Monitor($GLOBALS['dbi'])
);
$html = $controller->index();
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'<div class="tabLinks row">',
@ -136,7 +139,7 @@ class MonitorControllerTest extends TestCase
public function testLogDataTypeSlow(): void
{
$response = Response::getInstance();
$response = new Response();
$response->setAjax(true);
$controller = new MonitorController(
@ -147,10 +150,11 @@ class MonitorControllerTest extends TestCase
new Monitor($GLOBALS['dbi'])
);
$ret = $controller->logDataTypeSlow([
'time_start' => '0',
'time_end' => '10',
]);
$_POST['time_start'] = '0';
$_POST['time_end'] = '10';
$controller->logDataTypeSlow();
$ret = $response->getJSONResult();
$resultRows = [
[
@ -195,7 +199,7 @@ class MonitorControllerTest extends TestCase
'argument' => 'argument3 argument4',
];
$response = Response::getInstance();
$response = new Response();
$response->setAjax(true);
$controller = new MonitorController(
@ -206,12 +210,12 @@ class MonitorControllerTest extends TestCase
new Monitor($GLOBALS['dbi'])
);
$ret = $controller->logDataTypeGeneral([
'time_start' => '0',
'time_end' => '10',
'limitTypes' => '1',
'removeVariables' => null,
]);
$_POST['time_start'] = '0';
$_POST['time_end'] = '10';
$_POST['limitTypes'] = '1';
$controller->logDataTypeGeneral();
$ret = $response->getJSONResult();
$resultRows = [
$value,
@ -246,7 +250,7 @@ class MonitorControllerTest extends TestCase
'slow_query_log' => 'OFF',
];
$response = Response::getInstance();
$response = new Response();
$response->setAjax(true);
$controller = new MonitorController(
@ -257,10 +261,10 @@ class MonitorControllerTest extends TestCase
new Monitor($GLOBALS['dbi'])
);
$ret = $controller->loggingVars([
'varName' => 'varName',
'varValue' => null,
]);
$_POST['varName'] = 'varName';
$controller->loggingVars();
$ret = $response->getJSONResult();
$this->assertEquals(
$value,
@ -281,7 +285,7 @@ class MonitorControllerTest extends TestCase
'argument' => 'argument argument2',
];
$response = Response::getInstance();
$response = new Response();
$response->setAjax(true);
$controller = new MonitorController(
@ -292,10 +296,11 @@ class MonitorControllerTest extends TestCase
new Monitor($GLOBALS['dbi'])
);
$ret = $controller->queryAnalyzer([
'database' => 'database',
'query' => 'query',
]);
$_POST['database'] = 'database';
$_POST['query'] = 'query';
$controller->queryAnalyzer();
$ret = $response->getJSONResult();
$this->assertEquals(
'cached_affected_rows',

View File

@ -9,9 +9,9 @@ namespace PhpMyAdmin\Tests\Controllers\Server\Status;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\Status\ProcessesController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Status\Data;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PhpMyAdmin\Url;
use PHPUnit\Framework\TestCase;
use function htmlspecialchars;
@ -94,20 +94,17 @@ class ProcessesControllerTest extends TestCase
public function testIndex(): void
{
$response = new Response();
$controller = new ProcessesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
$this->data
);
$html = $controller->index([
'showExecuting' => null,
'full' => null,
'column_name' => null,
'order_by_field' => null,
'sort_order' => null,
]);
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'Note: Enabling the auto refresh here might cause '
@ -162,13 +159,13 @@ class ProcessesControllerTest extends TestCase
$html
);
$html = $controller->index([
'showExecuting' => null,
'full' => '1',
'column_name' => 'Database',
'order_by_field' => 'db',
'sort_order' => 'ASC',
]);
$_POST['full'] = '1';
$_POST['column_name'] = 'Database';
$_POST['order_by_field'] = 'db';
$_POST['sort_order'] = 'ASC';
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'Truncate shown queries',
@ -183,13 +180,12 @@ class ProcessesControllerTest extends TestCase
$html
);
$html = $controller->index([
'showExecuting' => null,
'full' => '1',
'column_name' => 'Host',
'order_by_field' => 'Host',
'sort_order' => 'DESC',
]);
$_POST['column_name'] = 'Host';
$_POST['order_by_field'] = 'Host';
$_POST['sort_order'] = 'DESC';
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'Host',
@ -217,20 +213,22 @@ class ProcessesControllerTest extends TestCase
$GLOBALS['dbi']->expects($this->any())->method('fetchAssoc')
->will($this->onConsecutiveCalls($process));
$response = new Response();
$response->setAjax(true);
$controller = new ProcessesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
$this->data
);
$html = $controller->refresh([
'showExecuting' => null,
'full' => '1',
'column_name' => null,
'order_by_field' => 'process',
'sort_order' => 'DESC',
]);
$_POST['full'] = '1';
$_POST['order_by_field'] = 'process';
$_POST['sort_order'] = 'DESC';
$controller->refresh();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'index.php?route=/server/status/processes',

View File

@ -9,9 +9,9 @@ namespace PhpMyAdmin\Tests\Controllers\Server\Status;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\Status\QueriesController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Status\Data;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PhpMyAdmin\Util;
use PHPUnit\Framework\TestCase;
use function array_sum;
@ -104,14 +104,17 @@ class QueriesControllerTest extends TestCase
public function testIndex(): void
{
$response = new Response();
$controller = new QueriesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
$this->data
);
$html = $controller->index();
$controller->index();
$html = $response->getHTMLResult();
$hourFactor = 3600 / $this->data->status['Uptime'];
$usedQueries = $this->data->used_queries;

View File

@ -11,9 +11,9 @@ use PhpMyAdmin\Controllers\Server\Status\StatusController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Replication;
use PhpMyAdmin\ReplicationGui;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Status\Data;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPUnit\Framework\TestCase;
class StatusControllerTest extends TestCase
@ -131,16 +131,19 @@ class StatusControllerTest extends TestCase
$data->status['Aborted_connects'] = $abortedConnections;
$data->status['Connections'] = $connections;
$response = new Response();
$template = new Template();
$controller = new StatusController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
$template,
$data,
new ReplicationGui(new Replication(), $template)
);
$html = $controller->index();
$controller->index();
$html = $response->getHTMLResult();
$traffic = $bytesReceived + $bytesSent;
$trafficHtml = 'Network traffic since startup: ' . $traffic . ' B';

View File

@ -9,9 +9,9 @@ namespace PhpMyAdmin\Tests\Controllers\Server\Status;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\Server\Status\VariablesController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Status\Data;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PHPUnit\Framework\TestCase;
class VariablesControllerTest extends TestCase
@ -118,20 +118,17 @@ class VariablesControllerTest extends TestCase
public function testIndex(): void
{
$response = new Response();
$controller = new VariablesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
$this->data
);
$html = $controller->index([
'flush' => null,
'filterAlert' => null,
'filterText' => null,
'filterCategory' => null,
'dontFormat' => null,
]);
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
'<fieldset id="tableFilter">',

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response as ResponseStub;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
use Williamdes\MariaDBMySQLKBS\Search as KBSearch;
@ -80,13 +81,16 @@ class VariablesControllerTest extends TestCase
public function testIndex(): void
{
$response = new ResponseStub();
$controller = new VariablesController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template()
);
$html = $controller->index([]);
$controller->index();
$html = $response->getHTMLResult();
$this->assertStringContainsString(
Generator::getIcon('b_save', __('Save')),

View File

@ -8,8 +8,8 @@ namespace PhpMyAdmin\Tests\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\TransformationOverviewController;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\Response;
use PhpMyAdmin\Transformations;
use PHPUnit\Framework\TestCase;
@ -34,14 +34,17 @@ class TransformationOverviewControllerTest extends TestCase
public function testIndexAction(): void
{
$response = new Response();
$controller = new TransformationOverviewController(
Response::getInstance(),
$response,
$GLOBALS['dbi'],
new Template(),
new Transformations()
);
$actual = $controller->index();
$controller->index();
$actual = $response->getHTMLResult();
$this->assertStringContainsString(
__('Available media types'),

View File

@ -14,7 +14,7 @@ use PhpMyAdmin\Header;
use PhpMyAdmin\Message;
use function is_array;
class Response
class Response extends \PhpMyAdmin\Response
{
/**
* PhpMyAdmin\Header instance
@ -154,10 +154,8 @@ class Response
* whether it is a success or an error
*
* @param bool $state Whether the request was successfully processed
*
* @return void
*/
public function setRequestStatus($state)
public function setRequestStatus(bool $state): void
{
$this->_isSuccess = $state;
}
@ -190,10 +188,8 @@ class Response
* we are servicing an ajax request
*
* @param bool $isAjax Whether we are servicing an ajax request
*
* @return void
*/
public function setAjax($isAjax)
public function setAjax(bool $isAjax): void
{
$this->_isAjax = (bool) $isAjax;
}
@ -201,10 +197,8 @@ class Response
/**
* Returns true or false depending on whether
* we are servicing an ajax request
*
* @return bool
*/
public function isAjax()
public function isAjax(): bool
{
return $this->_isAjax;
}