Merge pull request #19095 from MauricioFauth/controllers

Create InvocableController interface
This commit is contained in:
Maurício Meneghini Fauth 2024-04-05 12:18:16 -03:00 committed by GitHub
commit 5722cdb511
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
202 changed files with 1630 additions and 715 deletions

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@ use PhpMyAdmin\Url;
use function __;
abstract class AbstractController
abstract class AbstractController implements InvocableController
{
public function __construct(protected ResponseRenderer $response, protected Template $template)
{

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\BrowseForeigners;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -24,7 +25,7 @@ class BrowseForeignersController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string|null $database */
$database = $request->getParsedBodyParam('db');
@ -42,7 +43,7 @@ class BrowseForeignersController extends AbstractController
$foreignFilter = $request->getParsedBodyParam('foreign_filter', '');
if (! isset($database, $table, $field)) {
return;
return null;
}
$this->response->setMinimalFooter();
@ -69,5 +70,7 @@ class BrowseForeignersController extends AbstractController
$fieldKey,
$data,
));
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -31,7 +32,7 @@ final class ChangeLogController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->response->disable();
$this->response->getHeader()->sendHttpHeaders();
@ -52,7 +53,7 @@ final class ChangeLogController extends AbstractController
. '" rel="noopener noreferrer" target="_blank">phpmyadmin.net</a>',
);
return;
return null;
}
// Test if the file is in a compressed format
@ -115,5 +116,7 @@ final class ChangeLogController extends AbstractController
$this->render('changelog', [
'changelog' => preg_replace(array_keys($replaces), $replaces, $changelog),
]);
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\ResponseRenderer;
@ -24,7 +25,7 @@ class CheckRelationsController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$cfgStorageDbName = $this->relation->getConfigurationStorageDbName();
@ -57,5 +58,7 @@ class CheckRelationsController extends AbstractController
'config_storage_database_name' => $cfgStorageDbName,
'are_config_storage_tables_defined' => $this->relation->arePmadbTablesDefined(),
]);
return null;
}
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -17,7 +18,7 @@ final class CollationConnectionController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->config->setUserValue(
null,
@ -27,5 +28,7 @@ final class CollationConnectionController extends AbstractController
);
$this->response->redirect('index.php?route=/' . Url::getCommonRaw([], '&'));
return null;
}
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -17,7 +18,7 @@ final class ColumnController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string|null $db */
$db = $request->getParsedBodyParam('db');
@ -28,9 +29,11 @@ final class ColumnController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => Message::error()]);
return;
return null;
}
$this->response->addJSON(['columns' => $this->dbi->getColumnNames($db, $table)]);
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Console\Bookmark;
use PhpMyAdmin\Bookmarks\BookmarkRepository;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -24,7 +25,7 @@ final class AddController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$db = $request->getParsedBodyParam('db');
$label = $request->getParsedBodyParam('label');
@ -34,7 +35,7 @@ final class AddController extends AbstractController
if (! is_string($label) || ! is_string($db) || ! is_string($bookmarkQuery) || ! is_string($shared)) {
$this->response->addJSON('message', __('Incomplete params'));
return;
return null;
}
$bookmark = $this->bookmarkRepository->createBookmark(
@ -47,7 +48,7 @@ final class AddController extends AbstractController
if ($bookmark === false || ! $bookmark->save()) {
$this->response->addJSON('message', __('Failed'));
return;
return null;
}
$bookmarkFields = [
@ -60,5 +61,7 @@ final class AddController extends AbstractController
$this->response->addJSON('message', __('Succeeded'));
$this->response->addJSON('data', $bookmarkFields);
$this->response->addJSON('isShared', $shared === 'true');
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Console\Bookmark;
use PhpMyAdmin\Console;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -20,8 +21,10 @@ final class RefreshController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->response->addJSON('console_message_bookmark', $this->console->getBookmarkContent());
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Database\CentralColumns;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -21,12 +22,14 @@ final class PopulateColumnsController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$columns = $this->centralColumns->getColumnsNotInCentralList(
Current::$database,
$request->getParsedBodyParam('selectedTable'),
);
$this->render('database/central_columns/populate_columns', ['columns' => $columns]);
return null;
}
}

View File

@ -10,6 +10,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\LanguageManager;
@ -34,7 +35,7 @@ class CentralColumnsController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['message'] ??= null;
$db = DatabaseName::from($request->getParam('db'));
@ -54,7 +55,7 @@ class CentralColumnsController extends AbstractController
$db,
));
return;
return null;
}
if ($request->hasBodyParam('add_new_column')) {
@ -78,7 +79,7 @@ class CentralColumnsController extends AbstractController
$request->getParsedBodyParam('cur_table', ''),
));
return;
return null;
}
if ($request->hasBodyParam('add_column')) {
@ -102,7 +103,7 @@ class CentralColumnsController extends AbstractController
'db' => $request->getParsedBodyParam('db'),
]);
return;
return null;
}
if ($request->hasBodyParam('multi_edit_central_column_save')) {
@ -152,10 +153,12 @@ class CentralColumnsController extends AbstractController
sprintf(__('Showing rows %1$s - %2$s.'), $pos + 1, $pos + $numberOfColumns),
);
if (! isset($tmpMsg) || $tmpMsg === true) {
return;
return null;
}
$GLOBALS['message'] = $tmpMsg;
return null;
}
public function main(string $totalRows, string $position, DatabaseName $db): void

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Index;
use PhpMyAdmin\ResponseRenderer;
@ -30,10 +31,10 @@ class DataDictionaryController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $this->checkParameters(['db'], true)) {
return;
return null;
}
$relationParameters = $this->relation->getRelationParameters();
@ -111,5 +112,7 @@ class DataDictionaryController extends AbstractController
'comment' => $comment,
'tables' => $tables,
]);
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Designer;
use PhpMyAdmin\Database\Designer\Common as DesignerCommon;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\LanguageManager;
@ -37,7 +38,7 @@ class DesignerController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['message'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -83,7 +84,7 @@ class DesignerController extends AbstractController
$this->response->addHTML($html);
}
return;
return null;
}
if ($request->hasBodyParam('operation')) {
@ -105,7 +106,7 @@ class DesignerController extends AbstractController
);
$this->response->setRequestStatus(false);
return;
return null;
} else {
$page = $this->designerCommon->createNewPage($request->getParsedBodyParam('selected_value'), $db);
$this->response->addJSON('id', $page);
@ -150,11 +151,11 @@ class DesignerController extends AbstractController
$this->response->setRequestStatus($success);
}
return;
return null;
}
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -169,12 +170,12 @@ class DesignerController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$scriptDisplayField = $this->designerCommon->getTablesInfo();
@ -256,5 +257,7 @@ class DesignerController extends AbstractController
$this->response->addHTML($mainHtml);
$this->response->addHTML('<div id="PMA_disable_floating_menubar"></div>');
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Events;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\LanguageManager;
@ -38,7 +39,7 @@ final class EventsController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errors'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -47,7 +48,7 @@ final class EventsController extends AbstractController
if (! $request->isAjax()) {
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -60,7 +61,7 @@ final class EventsController extends AbstractController
if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
} elseif (Current::$database !== '') {
$this->dbi->selectDb(Current::$database);
@ -111,7 +112,7 @@ final class EventsController extends AbstractController
$this->response->addJSON('tableType', 'events');
return;
return null;
}
}
@ -184,12 +185,12 @@ final class EventsController extends AbstractController
$this->response->addJSON('message', $editor);
$this->response->addJSON('title', $title);
return;
return null;
}
$this->response->addHTML("\n\n<h2>" . $title . "</h2>\n\n" . $editor);
return;
return null;
}
$message = __('Error in processing request:') . ' ';
@ -203,7 +204,7 @@ final class EventsController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
return;
return null;
}
$this->response->addHTML($message->getDisplay());
@ -226,7 +227,7 @@ final class EventsController extends AbstractController
$this->response->addJSON('message', $exportData);
$this->response->addJSON('title', $title);
return;
return null;
}
$output = '<div class="container">';
@ -248,7 +249,7 @@ final class EventsController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
return;
return null;
}
$this->response->addHTML($message->getDisplay());
@ -265,5 +266,7 @@ final class EventsController extends AbstractController
'text_dir' => LanguageManager::$textDir,
'is_ajax' => $request->isAjax() && empty($_REQUEST['ajax_page_request']),
]);
return null;
}
}

View File

@ -11,6 +11,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Export\Export;
use PhpMyAdmin\Export\Options;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -38,7 +39,7 @@ final class ExportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['urlParams'] ??= null;
$GLOBALS['table_select'] ??= null;
@ -52,7 +53,7 @@ final class ExportController extends AbstractController
$this->addScriptFiles(['export.js']);
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -67,12 +68,12 @@ final class ExportController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$GLOBALS['urlParams']['goto'] = Url::getFromRoute('/database/export');
@ -86,7 +87,7 @@ final class ExportController extends AbstractController
Message::error(__('No tables found in database.'))->getDisplay(),
);
return;
return null;
}
$selectedTable = $request->getParsedBodyParam('selected_tbl');
@ -152,7 +153,7 @@ final class ExportController extends AbstractController
__('Could not load export plugins, please check your installation!'),
)->getDisplay());
return;
return null;
}
$options = $this->exportOptions->getOptions(
@ -171,5 +172,7 @@ final class ExportController extends AbstractController
'structure_or_data_forced' => $request->getParsedBodyParam('structure_or_data_forced', 0),
'tables' => $tablesForMultiValues,
]));
return null;
}
}

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Import\Ajax;
@ -40,7 +41,7 @@ final class ImportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['SESSION_KEY'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -52,7 +53,7 @@ final class ImportController extends AbstractController
$this->addScriptFiles(['import.js']);
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$config = Config::getInstance();
@ -65,12 +66,12 @@ final class ImportController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
[$GLOBALS['SESSION_KEY'], $uploadId] = Ajax::uploadProgressSetup();
@ -83,7 +84,7 @@ final class ImportController extends AbstractController
'Could not load import plugins, please check your installation!',
))->getDisplay());
return;
return null;
}
$offset = null;
@ -139,5 +140,7 @@ final class ImportController extends AbstractController
'user_upload_dir' => Util::userDir($config->settings['UploadDir'] ?? ''),
'local_files' => Import::getLocalFiles($importList),
]);
return null;
}
}

View File

@ -6,15 +6,18 @@ namespace PhpMyAdmin\Controllers\Database\MultiTableQuery;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Database\MultiTableQuery;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
final class QueryController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->response->addHTML(MultiTableQuery::displayResults(
$request->getParsedBodyParam('sql_query'),
$request->getParam('db'),
));
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Database\MultiTableQuery;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Query\Generator as QueryGenerator;
use PhpMyAdmin\ResponseRenderer;
@ -21,7 +22,7 @@ final class TablesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $tables */
$tables = $request->getQueryParam('tables', []);
@ -37,5 +38,7 @@ final class TablesController extends AbstractController
),
);
$this->response->addJSON(['foreignKeyConstrains' => $constrains]);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\MultiTableQuery;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -22,12 +23,14 @@ class MultiTableQueryController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->addScriptFiles(['database/multi_table_query.js', 'database/query_generator.js']);
$queryInstance = new MultiTableQuery($this->dbi, $this->template, Current::$database);
$this->response->addHTML($queryInstance->getFormHtml());
return null;
}
}

View File

@ -10,6 +10,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\InvalidDatabaseName;
@ -37,7 +38,7 @@ class PrivilegesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
try {
$db = DatabaseName::from($request->getParam('db'));
@ -47,7 +48,7 @@ class PrivilegesController extends AbstractController
} catch (InvalidDatabaseName $exception) {
$this->response->addHTML(Message::error($exception->getMessage())->getDisplay());
return;
return null;
}
$this->addScriptFiles(['server/privileges.js', 'vendor/zxcvbn-ts.js']);
@ -65,7 +66,7 @@ class PrivilegesController extends AbstractController
->getDisplay(),
);
return;
return null;
}
if (! $isGrantUser && ! $isCreateUser) {
@ -91,5 +92,7 @@ class PrivilegesController extends AbstractController
'privileges' => $privileges,
]);
$this->render('export_modal');
return null;
}
}

View File

@ -11,6 +11,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Routines;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
@ -47,7 +48,7 @@ class RoutinesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errors'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -66,7 +67,7 @@ class RoutinesController extends AbstractController
*/
if (Current::$table !== '' && in_array(Current::$table, $this->dbi->getTables(Current::$database), true)) {
if (! $this->checkParameters(['db', 'table'])) {
return;
return null;
}
$GLOBALS['urlParams'] = ['db' => Current::$database, 'table' => Current::$table];
@ -77,20 +78,20 @@ class RoutinesController extends AbstractController
if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$tableName = TableName::tryFrom($request->getParam('table'));
if ($tableName === null || ! $this->dbTableExists->hasTable($databaseName, $tableName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No table selected.')]);
return;
return null;
}
} else {
Current::$table = '';
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -103,7 +104,7 @@ class RoutinesController extends AbstractController
if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
}
} elseif (Current::$database !== '') {
@ -124,7 +125,7 @@ class RoutinesController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $output);
return;
return null;
}
$routines = Routines::getDetails(
@ -148,7 +149,7 @@ class RoutinesController extends AbstractController
$this->response->addJSON('message', $output);
$this->response->addJSON('tableType', 'routines');
return;
return null;
}
}
@ -276,12 +277,12 @@ class RoutinesController extends AbstractController
);
$this->response->addJSON('type', $routine['item_type']);
return;
return null;
}
$this->response->addHTML("\n\n<h2>" . $title . "</h2>\n\n" . $editor);
return;
return null;
}
$message = __('Error in processing request:') . ' ';
@ -301,7 +302,7 @@ class RoutinesController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
return;
return null;
}
$this->response->addHTML($message->getDisplay());
@ -325,12 +326,12 @@ class RoutinesController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
return;
return null;
}
$this->response->addHTML($message->getDisplay());
return;
return null;
}
[$output, $message] = $this->routines->handleExecuteRoutine($routine);
@ -341,14 +342,14 @@ class RoutinesController extends AbstractController
$this->response->addJSON('message', $message->getDisplay() . $output);
$this->response->addJSON('dialog', false);
return;
return null;
}
$this->response->addHTML($message->getDisplay() . $output);
if ($message->isError()) {
// At least one query has failed, so shouldn't
// execute any more queries, so we quit.
return;
return null;
}
} elseif (! empty($_GET['execute_dialog']) && ! empty($_GET['item_name'])) {
/**
@ -372,13 +373,13 @@ class RoutinesController extends AbstractController
$this->response->addJSON('title', $title);
$this->response->addJSON('dialog', true);
return;
return null;
}
$this->response->addHTML("\n\n<h2>" . __('Execute routine') . "</h2>\n\n");
$this->response->addHTML($form);
return;
return null;
}
if ($request->isAjax()) {
@ -393,7 +394,7 @@ class RoutinesController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
return;
return null;
}
}
@ -433,7 +434,7 @@ class RoutinesController extends AbstractController
$this->response->addJSON('message', $exportData);
$this->response->addJSON('title', $title);
return;
return null;
}
$output = '<div class="container">';
@ -458,7 +459,7 @@ class RoutinesController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
return;
return null;
}
$this->response->addHTML($message->getDisplay());
@ -487,5 +488,7 @@ class RoutinesController extends AbstractController
'rows' => $rows,
'has_privilege' => Util::currentUserHasPrivilege('CREATE ROUTINE', Current::$database, Current::$table),
]);
return null;
}
}

View File

@ -11,6 +11,7 @@ use PhpMyAdmin\Database\Search;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Html\MySQLDocumentation;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -32,7 +33,7 @@ class SearchController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errorUrl'] ??= null;
$GLOBALS['urlParams'] ??= null;
@ -40,7 +41,7 @@ class SearchController extends AbstractController
$this->addScriptFiles(['database/search.js', 'sql.js', 'makegrid.js']);
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$config = Config::getInstance();
@ -53,12 +54,12 @@ class SearchController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
if (! $config->settings['UseDbSearch']) {
@ -70,12 +71,12 @@ class SearchController extends AbstractController
if ($request->isAjax()) {
$this->response->addJSON('message', Message::error($errorMessage)->getDisplay());
return;
return null;
}
$this->render('error/simple', ['error_message' => $errorMessage, 'back_url' => $GLOBALS['errorUrl']]);
return;
return null;
}
$GLOBALS['urlParams']['goto'] = Url::getFromRoute('/database/search');
@ -90,10 +91,12 @@ class SearchController extends AbstractController
// If we are in an Ajax request, we need to exit after displaying all the HTML
if ($request->isAjax() && empty($_REQUEST['ajax_page_request'])) {
return;
return null;
}
// Display the search form
$this->response->addHTML($databaseSearch->getMainHtml());
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\ResponseRenderer;
@ -28,7 +29,7 @@ class SqlAutoCompleteController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$sqlAutocomplete = [];
if ($this->config->settings['EnableAutocompleteForTablesAndColumns']) {
@ -39,6 +40,8 @@ class SqlAutoCompleteController extends AbstractController
}
$this->response->addJSON(['tables' => $sqlAutocomplete]);
return null;
}
/** @return string[][][] */

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -36,7 +37,7 @@ class SqlController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['goto'] ??= null;
$GLOBALS['back'] ??= null;
@ -49,7 +50,7 @@ class SqlController extends AbstractController
$this->response->addHTML($this->pageSettings->getHTML());
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -64,12 +65,12 @@ class SqlController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
/**
@ -87,5 +88,7 @@ class SqlController extends AbstractController
false,
htmlspecialchars($delimiter),
));
return null;
}
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\SqlParser\Utils\Formatter;
@ -13,10 +14,12 @@ use PhpMyAdmin\SqlParser\Utils\Formatter;
*/
class SqlFormatController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string $query */
$query = $request->getParsedBodyParam('sql', '');
$this->response->addJSON(['sql' => Formatter::format($query)]);
return null;
}
}

View File

@ -6,13 +6,14 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function __;
final class AddPrefixController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected_tbl', []);
@ -21,7 +22,7 @@ final class AddPrefixController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
$params = ['db' => Current::$database];
@ -31,5 +32,7 @@ final class AddPrefixController extends AbstractController
$this->response->disable();
$this->render('database/structure/add_prefix', ['url_params' => $params]);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -25,7 +26,7 @@ final class AddPrefixTableController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected', []);
@ -45,5 +46,7 @@ final class AddPrefixTableController extends AbstractController
$GLOBALS['message'] = Message::success();
($this->structureController)($request);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -29,7 +30,7 @@ final class AddController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['message'] ??= null;
@ -39,7 +40,7 @@ final class AddController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
Assert::allString($selected);
@ -52,5 +53,7 @@ final class AddController extends AbstractController
unset($_POST['submit_mult']);
($this->structureController)($request);
return null;
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -29,7 +30,7 @@ final class MakeConsistentController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['message'] ??= null;
@ -39,7 +40,7 @@ final class MakeConsistentController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
Assert::allString($selected);
@ -52,5 +53,7 @@ final class MakeConsistentController extends AbstractController
unset($_POST['submit_mult']);
($this->structureController)($request);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -28,7 +29,7 @@ final class RemoveController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['message'] ??= null;
@ -38,7 +39,7 @@ final class RemoveController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
Assert::allString($selected);
@ -51,5 +52,7 @@ final class RemoveController extends AbstractController
unset($_POST['submit_mult']);
($this->structureController)($request);
return null;
}
}

View File

@ -6,13 +6,14 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function __;
final class ChangePrefixFormController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected_tbl', []);
@ -21,7 +22,7 @@ final class ChangePrefixFormController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
$route = '/database/structure/replace-prefix';
@ -36,5 +37,7 @@ final class ChangePrefixFormController extends AbstractController
$this->response->disable();
$this->render('database/structure/change_prefix_form', ['route' => $route, 'url_params' => $urlParams]);
return null;
}
}

View File

@ -7,13 +7,14 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function __;
final class CopyFormController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected_tbl', []);
@ -22,7 +23,7 @@ final class CopyFormController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
$urlParams = ['db' => Current::$database];
@ -43,5 +44,7 @@ final class CopyFormController extends AbstractController
'url_params' => $urlParams,
'options' => $databasesList->getList(),
]);
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\Operations;
@ -27,7 +28,7 @@ final class CopyTableController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected', []);
@ -64,5 +65,7 @@ final class CopyTableController extends AbstractController
$GLOBALS['message'] = Message::success();
($this->structureController)($request);
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -26,7 +27,7 @@ final class CopyTableWithPrefixController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected', []);
@ -53,5 +54,7 @@ final class CopyTableWithPrefixController extends AbstractController
$GLOBALS['message'] = Message::success();
($this->structureController)($request);
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -23,7 +24,7 @@ final class DropFormController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected_tbl', []);
@ -32,7 +33,7 @@ final class DropFormController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
$fullQueryViews = '';
@ -66,5 +67,7 @@ final class DropFormController extends AbstractController
'full_query' => $fullQuery,
'is_foreign_key_check' => ForeignKey::isCheckEnabled(),
]);
return null;
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -30,7 +31,7 @@ final class DropTableController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['reload'] = $_POST['reload'] ?? $GLOBALS['reload'] ?? null;
$multBtn = $_POST['mult_btn'] ?? '';
@ -44,7 +45,7 @@ final class DropTableController extends AbstractController
($this->structureController)($request);
return;
return null;
}
$defaultFkCheckValue = ForeignKey::handleDisableCheckInit();
@ -106,5 +107,7 @@ final class DropTableController extends AbstractController
unset($_POST['mult_btn']);
($this->structureController)($request);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Util;
use PhpMyAdmin\Utils\ForeignKey;
@ -15,7 +16,7 @@ use function htmlspecialchars;
final class EmptyFormController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected_tbl', []);
@ -24,7 +25,7 @@ final class EmptyFormController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
$fullQuery = '';
@ -41,5 +42,7 @@ final class EmptyFormController extends AbstractController
'full_query' => $fullQuery,
'is_foreign_key_check' => ForeignKey::isCheckEnabled(),
]);
return null;
}
}

View File

@ -13,6 +13,7 @@ use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\FlashMessages;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -39,7 +40,7 @@ final class EmptyTableController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$multBtn = $_POST['mult_btn'] ?? '';
/** @var string[] $selected */
@ -49,7 +50,7 @@ final class EmptyTableController extends AbstractController
$this->flash->addMessage('success', __('No change'));
$this->redirect('/database/structure', ['db' => Current::$database]);
return;
return null;
}
$defaultFkCheckValue = ForeignKey::handleDisableCheckInit();
@ -91,5 +92,7 @@ final class EmptyTableController extends AbstractController
unset($_POST['mult_btn']);
($this->structureController)($request);
return null;
}
}

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Favorites\RecentFavoriteTable;
use PhpMyAdmin\Favorites\RecentFavoriteTables;
use PhpMyAdmin\Favorites\TableType;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
@ -39,12 +40,12 @@ final class FavoriteTableController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errorUrl'] ??= null;
if (Current::$database === '') {
return;
return null;
}
$config = Config::getInstance();
@ -52,7 +53,7 @@ final class FavoriteTableController extends AbstractController
$GLOBALS['errorUrl'] .= Url::getCommon(['db' => Current::$database], '&');
if (! $request->isAjax()) {
return;
return null;
}
$favoriteInstance = RecentFavoriteTables::getInstance(TableType::Favorite);
@ -74,7 +75,7 @@ final class FavoriteTableController extends AbstractController
));
}
return;
return null;
}
$databaseName = DatabaseName::tryFrom($request->getParam('db'));
@ -82,7 +83,7 @@ final class FavoriteTableController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$changes = true;
@ -120,7 +121,7 @@ final class FavoriteTableController extends AbstractController
]);
$this->response->addJSON($json);
return;
return null;
}
// Check if current table is already in favorite list.
@ -142,6 +143,8 @@ final class FavoriteTableController extends AbstractController
]);
$this->response->addJSON($json);
return null;
}
/**

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -33,7 +34,7 @@ final class RealRowCountController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errorUrl'] ??= null;
@ -43,7 +44,7 @@ final class RealRowCountController extends AbstractController
];
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -53,7 +54,7 @@ final class RealRowCountController extends AbstractController
$GLOBALS['errorUrl'] .= Url::getCommon(['db' => Current::$database], '&');
if (! $request->isAjax()) {
return;
return null;
}
$databaseName = DatabaseName::tryFrom($request->getParam('db'));
@ -61,7 +62,7 @@ final class RealRowCountController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
// If there is a request to update all table's row count.
@ -75,7 +76,7 @@ final class RealRowCountController extends AbstractController
$this->response->addJSON(['real_row_count' => $realRowCount]);
return;
return null;
}
// Array to store the results.
@ -89,5 +90,7 @@ final class RealRowCountController extends AbstractController
}
$this->response->addJSON(['real_row_count_all' => $realRowCountAll]);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -28,7 +29,7 @@ final class ReplacePrefixController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected', []);
@ -58,5 +59,7 @@ final class ReplacePrefixController extends AbstractController
$GLOBALS['message'] = Message::success();
($this->structureController)($request);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -21,7 +22,7 @@ final class ShowCreateController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected_tbl', []);
@ -30,7 +31,7 @@ final class ShowCreateController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
$tables = $this->getShowCreateTables($selected);
@ -38,6 +39,8 @@ final class ShowCreateController extends AbstractController
$showCreate = $this->template->render('database/structure/show_create', ['tables' => $tables]);
$this->response->addJSON('message', $showCreate);
return null;
}
/**

View File

@ -16,6 +16,7 @@ use PhpMyAdmin\Favorites\RecentFavoriteTable;
use PhpMyAdmin\Favorites\RecentFavoriteTables;
use PhpMyAdmin\Favorites\TableType;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
@ -122,14 +123,14 @@ final class StructureController extends AbstractController
$this->dbIsSystemSchema = true;
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errorUrl'] ??= null;
$parameters = ['sort' => $_REQUEST['sort'] ?? null, 'sort_order' => $_REQUEST['sort_order'] ?? null];
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$config = Config::getInstance();
@ -142,12 +143,12 @@ final class StructureController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$this->addScriptFiles(['database/structure.js', 'table/change.js']);
@ -208,6 +209,8 @@ final class StructureController extends AbstractController
'is_system_schema' => $this->dbIsSystemSchema,
'create_table_html' => $createTable,
]);
return null;
}
/** @param mixed[] $replicaInfo */

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\LanguageManager;
@ -40,7 +41,7 @@ class TrackingController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['urlParams'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -48,7 +49,7 @@ class TrackingController extends AbstractController
$this->addScriptFiles(['vendor/jquery/jquery.tablesorter.js', 'database/tracking.js']);
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$config = Config::getInstance();
@ -61,12 +62,12 @@ class TrackingController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$GLOBALS['urlParams']['goto'] = Url::getFromRoute('/table/tracking');
@ -116,7 +117,7 @@ class TrackingController extends AbstractController
'default_statements' => $config->selectedServer['tracking_default_statements'],
]);
return;
return null;
}
} else {
$this->response->addHTML(Message::notice(
@ -136,7 +137,7 @@ class TrackingController extends AbstractController
$this->render('database/create_table', ['db' => Current::$database]);
}
return;
return null;
}
$this->response->addHTML($this->tracking->getHtmlForDbTrackingTables(
@ -147,7 +148,7 @@ class TrackingController extends AbstractController
// If available print out database log
if ($trackedData->ddlog === []) {
return;
return null;
}
$log = '';
@ -157,5 +158,7 @@ class TrackingController extends AbstractController
}
$this->response->addHTML(Generator::getMessage(__('Database Log'), $log));
return null;
}
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -16,8 +17,10 @@ final class DatabaseController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->response->addJSON(['databases' => $this->dbi->getDatabaseList()]);
return null;
}
}

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Error\ErrorHandler;
use PhpMyAdmin\Error\ErrorReport;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -39,7 +40,7 @@ class ErrorReportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string $exceptionType */
$exceptionType = $request->getParsedBodyParam('exception_type', '');
@ -49,7 +50,7 @@ class ErrorReportController extends AbstractController
$alwaysSend = $request->getParsedBodyParam('always_send');
if (! in_array($exceptionType, ['js', 'php'], true)) {
return;
return null;
}
$config = Config::getInstance();
@ -145,5 +146,7 @@ class ErrorReportController extends AbstractController
// clear previous errors & save new ones.
$this->errorHandler->savePreviousErrors();
}
return null;
}
}

View File

@ -5,23 +5,26 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Export;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
final class CheckTimeOutController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {
return;
return null;
}
if (isset($_SESSION['pma_export_error'])) {
unset($_SESSION['pma_export_error']);
$this->response->addJSON('message', 'timeout');
return;
return null;
}
$this->response->addJSON('message', 'success');
return null;
}
}

View File

@ -13,6 +13,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\Exceptions\ExportException;
use PhpMyAdmin\Export\Export;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -44,7 +45,7 @@ final class ExportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['export_type'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -97,7 +98,7 @@ final class ExportController extends AbstractController
$GLOBALS['what'] = Core::securePath($whatParam);
if (! $this->checkParameters(['what', 'export_type'])) {
return;
return null;
}
// export class instance, not array of properties, as before
@ -111,7 +112,7 @@ final class ExportController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error(__('Bad type!'))->getDisplay());
return;
return null;
}
if ($request->hasBodyParam('sql_backquotes') && $exportPlugin instanceof ExportSql) {
@ -194,7 +195,7 @@ final class ExportController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error(__('Bad parameters!'))->getDisplay());
return;
return null;
}
// Merge SQL Query aliases with Export aliases from
@ -281,7 +282,7 @@ final class ExportController extends AbstractController
$location = $this->export->getPageLocationAndSaveMessage($GLOBALS['export_type'], $message);
$this->response->redirect($location);
return;
return null;
}
} elseif ($GLOBALS['asfile']) {
/**
@ -306,7 +307,7 @@ final class ExportController extends AbstractController
$controller = ContainerBuilder::getContainer()->get(DatabaseExportController::class);
$controller($request);
return;
return null;
}
}
@ -492,7 +493,7 @@ final class ExportController extends AbstractController
$location = $this->export->getPageLocationAndSaveMessage($GLOBALS['export_type'], $GLOBALS['message']);
$this->response->redirect($location);
return;
return null;
}
/**
@ -505,7 +506,7 @@ final class ExportController extends AbstractController
Current::$table,
);
return;
return null;
}
// Convert the charset if required.
@ -544,10 +545,12 @@ final class ExportController extends AbstractController
$location = $this->export->getPageLocationAndSaveMessage($GLOBALS['export_type'], $message);
$this->response->redirect($location);
return;
return null;
}
echo $this->export->dumpBuffer;
return null;
}
/**

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Export;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\ExportController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -22,15 +23,17 @@ final class TablesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->hasBodyParam('selected_tbl')) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No table selected.'));
return;
return null;
}
($this->exportController)($request);
return null;
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Export\Template as ExportTemplate;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -26,7 +27,7 @@ final class CreateController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string $exportType */
$exportType = $request->getParsedBodyParam('exportType', '');
@ -39,7 +40,7 @@ final class CreateController extends AbstractController
$exportTemplatesFeature = $this->relation->getRelationParameters()->exportTemplatesFeature;
if ($exportTemplatesFeature === null) {
return;
return null;
}
$template = ExportTemplate::fromArray([
@ -58,7 +59,7 @@ final class CreateController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $result);
return;
return null;
}
$templates = $this->model->getAll(
@ -76,5 +77,7 @@ final class CreateController extends AbstractController
'selected_template' => $templateId,
]),
);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -23,13 +24,13 @@ final class DeleteController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$templateId = (int) $request->getParsedBodyParam('templateId');
$exportTemplatesFeature = $this->relation->getRelationParameters()->exportTemplatesFeature;
if ($exportTemplatesFeature === null) {
return;
return null;
}
$result = $this->model->delete(
@ -43,9 +44,11 @@ final class DeleteController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $result);
return;
return null;
}
$this->response->setRequestStatus(true);
return null;
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Export\Template as ExportTemplate;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -24,13 +25,13 @@ final class LoadController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$templateId = (int) $request->getParsedBodyParam('templateId');
$exportTemplatesFeature = $this->relation->getRelationParameters()->exportTemplatesFeature;
if ($exportTemplatesFeature === null) {
return;
return null;
}
$template = $this->model->load(
@ -44,10 +45,12 @@ final class LoadController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $template);
return;
return null;
}
$this->response->setRequestStatus(true);
$this->response->addJSON('data', $template->getData());
return null;
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Export\Template as ExportTemplate;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -24,7 +25,7 @@ final class UpdateController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$templateId = (int) $request->getParsedBodyParam('templateId');
/** @var string $templateData */
@ -32,7 +33,7 @@ final class UpdateController extends AbstractController
$exportTemplatesFeature = $this->relation->getRelationParameters()->exportTemplatesFeature;
if ($exportTemplatesFeature === null) {
return;
return null;
}
$template = ExportTemplate::fromArray([
@ -50,9 +51,11 @@ final class UpdateController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $result);
return;
return null;
}
$this->response->setRequestStatus(true);
return null;
}
}

View File

@ -9,6 +9,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Gis\GisFactory;
use PhpMyAdmin\Gis\GisVisualization;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function array_merge;
@ -33,7 +34,7 @@ class GisDataEditorController extends AbstractController
'GEOMETRYCOLLECTION',
];
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
/** @var string|null $field */
$field = $request->getParsedBodyParam('field');
@ -47,7 +48,7 @@ class GisDataEditorController extends AbstractController
$inputName = $request->getParsedBodyParam('input_name');
if (! isset($field)) {
return;
return null;
}
// Get data if any posted
@ -59,7 +60,7 @@ class GisDataEditorController extends AbstractController
// Generate parameters from value passed.
$gisObj = GisFactory::fromType($geomType);
if ($gisObj === null) {
return;
return null;
}
if (isset($value)) {
@ -84,7 +85,7 @@ class GisDataEditorController extends AbstractController
if ($request->hasBodyParam('generate')) {
$this->response->addJSON(['result' => $result, 'visualization' => $svg, 'openLayers' => $openLayers]);
return;
return null;
}
$templateOutput = $this->template->render('gis_data_editor_form', [
@ -103,6 +104,8 @@ class GisDataEditorController extends AbstractController
]);
$this->response->addJSON(['gis_editor' => $templateOutput]);
return null;
}
/**

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Git;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -20,16 +21,16 @@ final class GitInfoController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {
return;
return null;
}
$git = new Git($this->config->get('ShowGitRevision') ?? true);
if (! $git->isGitRevision()) {
return;
return null;
}
$commit = $git->checkGitRevision();
@ -37,12 +38,14 @@ final class GitInfoController extends AbstractController
if (! $git->hasGitInformation() || $commit === null) {
$this->response->setRequestStatus(false);
return;
return null;
}
$commit['author']['date'] = Util::localisedDate(strtotime($commit['author']['date']));
$commit['committer']['date'] = Util::localisedDate(strtotime($commit['committer']['date']));
$this->render('home/git_info', $commit);
return null;
}
}

View File

@ -15,6 +15,7 @@ use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\File;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Import\Import;
use PhpMyAdmin\Import\ImportSettings;
@ -60,7 +61,7 @@ final class ImportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['goto'] ??= null;
$GLOBALS['display_query'] ??= null;
@ -177,7 +178,7 @@ final class ImportController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $GLOBALS['message']);
return; // the footer is displayed automatically
return null; // the footer is displayed automatically
}
// Add console message id to response output
@ -192,7 +193,7 @@ final class ImportController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error(__('Incorrect format parameter'))->getDisplay());
return;
return null;
}
if (Current::$table !== '' && Current::$database !== '') {
@ -305,7 +306,7 @@ final class ImportController extends AbstractController
$this->response->addJSON('sql_query', $GLOBALS['import_text']);
$this->response->addJSON('action_bookmark', $actionBookmark);
return;
return null;
}
ImportSettings::$runQuery = false;
@ -326,7 +327,7 @@ final class ImportController extends AbstractController
$this->response->addJSON('action_bookmark', $actionBookmark);
$this->response->addJSON('id_bookmark', $idBookmark);
return;
return null;
}
ImportSettings::$runQuery = false;
@ -409,7 +410,7 @@ final class ImportController extends AbstractController
$this->response->addJSON('message', $errorMessage->getDisplay());
$this->response->addHTML($errorMessage->getDisplay());
return;
return null;
}
$importHandle->setDecompressContent(true);
@ -426,7 +427,7 @@ final class ImportController extends AbstractController
$this->response->addJSON('message', $errorMessage->getDisplay());
$this->response->addHTML($errorMessage->getDisplay());
return;
return null;
}
} elseif (! $GLOBALS['error'] && empty($GLOBALS['import_text'])) {
$GLOBALS['message'] = Message::error(
@ -443,7 +444,7 @@ final class ImportController extends AbstractController
$this->response->addJSON('message', $GLOBALS['message']->getDisplay());
$this->response->addHTML($GLOBALS['message']->getDisplay());
return;
return null;
}
// Convert the file's charset if necessary
@ -636,7 +637,7 @@ final class ImportController extends AbstractController
$_SESSION['Import_message']['go_back_url'],
);
return;
return null;
}
if (Current::$table != $tableFromSql && $tableFromSql !== '') {
@ -678,7 +679,7 @@ final class ImportController extends AbstractController
$this->response->addJSON('ajax_reload', $GLOBALS['ajax_reload']);
$this->response->addHTML($htmlOutput);
return;
return null;
}
if ($GLOBALS['result']) {
@ -712,9 +713,11 @@ final class ImportController extends AbstractController
// If there is request for ROLLBACK in the end.
if (! $request->hasBodyParam('rollback_query')) {
return;
return null;
}
$this->dbi->query('ROLLBACK');
return null;
}
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Import;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Import\SimulateDml;
use PhpMyAdmin\Message;
@ -29,7 +30,7 @@ final class SimulateDmlController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$error = '';
$errorMsg = __('Only single-table UPDATE and DELETE queries can be simulated.');
@ -81,9 +82,11 @@ final class SimulateDmlController extends AbstractController
$this->response->addJSON('message', $message);
$this->response->addJSON('sql_data', false);
return;
return null;
}
$this->response->addJSON('sql_data', $sqlData);
return null;
}
}

View File

@ -4,7 +4,9 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Import;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Import\Ajax;
use PhpMyAdmin\Message;
@ -22,13 +24,13 @@ use function usleep;
/**
* Import progress bar backend
*/
class StatusController
class StatusController implements InvocableController
{
public function __construct(private Template $template)
{
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['SESSION_KEY'] ??= null;
@ -75,5 +77,7 @@ class StatusController
} else {
Ajax::status($request->getQueryParam('id'));
}
return null;
}
}

View File

@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
interface InvocableController
{
public function __invoke(ServerRequest $request): Response|null;
}

View File

@ -8,6 +8,7 @@ use Fig\Http\Message\StatusCodeInterface;
use JsonException;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function __;
use function _pgettext;
@ -21,13 +22,13 @@ use const JSON_THROW_ON_ERROR;
/**
* Exporting of translated messages from PHP to JavaScript.
*/
final class JavaScriptMessagesController
final class JavaScriptMessagesController implements InvocableController
{
public function __construct(private readonly ResponseFactory $responseFactory)
{
}
public function __invoke(): Response
public function __invoke(ServerRequest $request): Response
{
$response = $this->responseFactory->createResponse()
->withHeader('Content-Type', 'text/javascript; charset=UTF-8')

View File

@ -7,6 +7,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function __;
@ -19,7 +20,7 @@ use function readfile;
*/
class LicenseController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->response->disable();
$this->response->addHeader('Content-Type', 'text/plain; charset=utf-8');
@ -30,7 +31,7 @@ class LicenseController extends AbstractController
if (@is_readable($filename)) {
readfile($filename);
return;
return null;
}
printf(
@ -40,5 +41,7 @@ class LicenseController extends AbstractController
$filename,
'https://www.phpmyadmin.net/',
);
return null;
}
}

View File

@ -8,6 +8,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Core;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Linter;
@ -21,10 +22,10 @@ use function sprintf;
*/
class LintController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {
return;
return null;
}
/**
@ -59,5 +60,7 @@ class LintController extends AbstractController
}
echo json_encode(Linter::lint("DELIMITER $$\n" . $sqlQuery . "$$\nDELIMITER ;\n"));
return null;
}
}

View File

@ -4,25 +4,28 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Plugins\AuthenticationPluginFactory;
use PhpMyAdmin\ResponseRenderer;
class LogoutController
class LogoutController implements InvocableController
{
public function __construct(private AuthenticationPluginFactory $authPluginFactory)
{
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isPost() || $GLOBALS['token_mismatch']) {
ResponseRenderer::getInstance()->redirect('./index.php?route=/');
return;
return null;
}
$authPlugin = $this->authPluginFactory->create();
$authPlugin->logOut();
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Navigation;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -21,22 +22,24 @@ final class UpdateNavWidthConfigController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$value = $request->getParsedBodyParam('value');
if (! is_numeric($value) || $value < 0) {
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => Message::error(__('Unexpected parameter value.'))]);
return;
return null;
}
$result = $this->config->setUserValue(null, 'NavigationWidth', (int) $value);
if ($result === true) {
return;
return null;
}
$this->response->setRequestStatus(false);
$this->response->addJSON(['message' => $result]);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\Navigation\Navigation;
@ -32,7 +33,7 @@ class NavigationController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {
$this->response->addHTML(
@ -41,7 +42,7 @@ class NavigationController extends AbstractController
)->getDisplay(),
);
return;
return null;
}
if ($request->hasBodyParam('getNaviSettings')) {
@ -49,7 +50,7 @@ class NavigationController extends AbstractController
$this->response->addHTML($this->pageSettings->getErrorHTML());
$this->response->addJSON('message', $this->pageSettings->getHTML());
return;
return null;
}
if ($request->hasBodyParam('reload')) {
@ -67,7 +68,7 @@ class NavigationController extends AbstractController
$this->navigation->hideNavigationItem($itemName, $itemType, $dbName);
}
return;
return null;
}
if ($request->hasBodyParam('unhideNavItem')) {
@ -75,7 +76,7 @@ class NavigationController extends AbstractController
$this->navigation->unhideNavigationItem($itemName, $itemType, $dbName);
}
return;
return null;
}
if ($request->hasBodyParam('showUnhideDialog')) {
@ -86,10 +87,12 @@ class NavigationController extends AbstractController
);
}
return;
return null;
}
}
$this->response->addJSON('message', $this->navigation->getDisplay());
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
@ -26,7 +27,7 @@ final class AddNewPrimaryController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$userPrivileges = $this->userPrivilegesFactory->getPrivileges();
@ -47,5 +48,7 @@ final class AddNewPrimaryController extends AbstractController
);
$html .= Url::getHiddenInputs($dbName, $tableName);
$this->response->addHTML($html);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -26,7 +27,7 @@ final class CreateNewColumnController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$userPrivileges = $this->userPrivilegesFactory->getPrivileges();
@ -39,5 +40,7 @@ final class CreateNewColumnController extends AbstractController
);
$html .= Url::getHiddenInputs(Current::$database, Current::$table);
$this->response->addHTML($html);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -20,7 +21,7 @@ final class FirstStepController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->addScriptFiles(['normalization.js', 'vendor/jquery/jquery.uitablefilter.js']);
@ -32,5 +33,7 @@ final class FirstStepController extends AbstractController
$html = $this->normalization->getHtmlFor1NFStep1(Current::$database, Current::$table, $normalForm);
$this->response->addHTML($html);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,9 +19,11 @@ final class FourthStepController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$res = $this->normalization->getHtmlContentsFor1NFStep4(Current::$database, Current::$table);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,9 +19,11 @@ final class SecondStepController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$res = $this->normalization->getHtmlContentsFor1NFStep2(Current::$database, Current::$table);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,9 +19,11 @@ final class ThirdStepController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$res = $this->normalization->getHtmlContentsFor1NFStep3(Current::$database, Current::$table);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -21,7 +22,7 @@ final class GetColumnsController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$html = '<option selected disabled>' . __('Select one…') . '</option>'
. '<option value="no_such_col">' . __('No such column') . '</option>';
@ -32,5 +33,7 @@ final class GetColumnsController extends AbstractController
_pgettext('string types', 'String'),
);
$this->response->addHTML($html);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
/**
@ -13,9 +14,11 @@ use PhpMyAdmin\Http\ServerRequest;
*/
class MainController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->addScriptFiles(['normalization.js', 'vendor/jquery/jquery.uitablefilter.js']);
$this->render('table/normalization/normalization', ['db' => Current::$database, 'table' => Current::$table]);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,7 +19,7 @@ final class MoveRepeatingGroup extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$repeatingColumns = $request->getParsedBodyParam('repeatingColumns');
$newTable = $request->getParsedBodyParam('newTable');
@ -33,5 +34,7 @@ final class MoveRepeatingGroup extends AbstractController
Current::$database,
);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,9 +19,11 @@ final class PartialDependenciesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$html = $this->normalization->findPartialDependencies(Current::$table, Current::$database);
$this->response->addHTML($html);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\SecondNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -20,7 +21,7 @@ final class CreateNewTablesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$partialDependencies = json_decode($request->getParsedBodyParam('pd'), true);
$tablesName = json_decode($request->getParsedBodyParam('newTablesName'));
@ -31,5 +32,7 @@ final class CreateNewTablesController extends AbstractController
Current::$database,
);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\SecondNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,9 +19,11 @@ final class FirstStepController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$res = $this->normalization->getHtmlFor2NFstep1(Current::$database, Current::$table);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\SecondNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -20,10 +21,12 @@ final class NewTablesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$partialDependencies = json_decode($request->getParsedBodyParam('pd'), true);
$html = $this->normalization->getHtmlForNewTables2NF($partialDependencies, Current::$table);
$this->response->addHTML($html);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\ThirdNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -20,10 +21,12 @@ final class CreateNewTablesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$newtables = json_decode($request->getParsedBodyParam('newTables'), true);
$res = $this->normalization->createNewTablesFor3NF($newtables, Current::$database);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\ThirdNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -18,10 +19,12 @@ final class FirstStepController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$tables = $request->getParsedBodyParam('tables');
$res = $this->normalization->getHtmlFor3NFstep1(Current::$database, $tables);
$this->response->addJSON($res);
return null;
}
}

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Normalization\ThirdNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
@ -20,11 +21,13 @@ final class NewTablesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$dependencies = json_decode($request->getParsedBodyParam('pd'));
$tables = json_decode($request->getParsedBodyParam('tables'), true);
$newTables = $this->normalization->getHtmlForNewTables3NF($dependencies, $tables, Current::$database);
$this->response->addJSON($newTables);
return null;
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -32,12 +33,12 @@ final class CollationController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errorUrl'] ??= null;
if (! $request->isAjax()) {
return;
return null;
}
$dbCollation = $request->getParsedBodyParam('db_collation') ?? '';
@ -45,11 +46,11 @@ final class CollationController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No collation provided.')));
return;
return null;
}
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$GLOBALS['errorUrl'] = Util::getScriptNameForOption(
@ -63,7 +64,7 @@ final class CollationController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$sqlQuery = 'ALTER DATABASE ' . Util::backquote(Current::$database)
@ -103,5 +104,7 @@ final class CollationController extends AbstractController
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON('message', $message);
return null;
}
}

View File

@ -13,6 +13,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\InvalidDatabaseName;
@ -47,7 +48,7 @@ class DatabaseController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['message'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -212,7 +213,7 @@ class DatabaseController extends AbstractController
);
$this->response->addJSON('db', Current::$database);
return;
return null;
}
}
@ -227,7 +228,7 @@ class DatabaseController extends AbstractController
}
if (! $this->checkParameters(['db'])) {
return;
return null;
}
$config = Config::getInstance();
@ -240,12 +241,12 @@ class DatabaseController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$GLOBALS['urlParams']['goto'] = Url::getFromRoute('/database/operations');
@ -259,7 +260,7 @@ class DatabaseController extends AbstractController
$dbCollation = $this->dbi->getDbCollation(Current::$database);
if (Utilities::isSystemSchema(Current::$database)) {
return;
return null;
}
$databaseComment = '';
@ -307,5 +308,7 @@ class DatabaseController extends AbstractController
'charsets' => $charsets,
'collations' => $collations,
]);
return null;
}
}

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
@ -53,7 +54,7 @@ class TableController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['urlParams'] ??= null;
$GLOBALS['auto_increment'] ??= null;
@ -71,7 +72,7 @@ class TableController extends AbstractController
$this->addScriptFiles(['table/operations.js']);
if (! $this->checkParameters(['db', 'table'])) {
return;
return null;
}
$isSystemSchema = Utilities::isSystemSchema(Current::$database);
@ -86,12 +87,12 @@ class TableController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$tableName = TableName::tryFrom($request->getParam('table'));
@ -100,12 +101,12 @@ class TableController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No table selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No table selected.')]);
return;
return null;
}
$GLOBALS['urlParams']['goto'] = $GLOBALS['urlParams']['back'] = Url::getFromRoute('/table/operations');
@ -155,7 +156,7 @@ class TableController extends AbstractController
$message = $this->operations->moveOrCopyTable($userPrivileges, Current::$database, Current::$table);
if (! $request->isAjax()) {
return;
return null;
}
$this->response->addJSON('message', $message);
@ -169,12 +170,12 @@ class TableController extends AbstractController
$this->response->addJSON('db', Current::$database);
return;
return null;
}
$this->response->setRequestStatus(false);
return;
return null;
}
$newMessage = '';
@ -278,7 +279,7 @@ class TableController extends AbstractController
Message::error(__('No collation provided.')),
);
return;
return null;
}
}
}
@ -362,7 +363,7 @@ class TableController extends AbstractController
);
}
return;
return null;
}
} else {
$newMessage = $result
@ -384,7 +385,7 @@ class TableController extends AbstractController
);
}
return;
return null;
}
}
@ -521,5 +522,7 @@ class TableController extends AbstractController
'partitions_choices' => $partitionsChoices,
'foreigners' => $foreigners,
]);
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
@ -38,7 +39,7 @@ class ViewController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['urlParams'] ??= null;
$tableObject = $this->dbi->getTable(Current::$database, Current::$table);
@ -47,7 +48,7 @@ class ViewController extends AbstractController
$this->addScriptFiles(['table/operations.js']);
if (! $this->checkParameters(['db', 'table'])) {
return;
return null;
}
$GLOBALS['urlParams'] = ['db' => Current::$database, 'table' => Current::$table];
@ -63,12 +64,12 @@ class ViewController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No databases selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
return;
return null;
}
$tableName = TableName::tryFrom($request->getParam('table'));
@ -77,12 +78,12 @@ class ViewController extends AbstractController
$this->response->setRequestStatus(false);
$this->response->addJSON('message', Message::error(__('No table selected.')));
return;
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No table selected.')]);
return;
return null;
}
$GLOBALS['urlParams']['goto'] = $GLOBALS['urlParams']['back'] = Url::getFromRoute('/view/operations');
@ -140,5 +141,7 @@ class ViewController extends AbstractController
'table' => Current::$table,
'url_params' => $GLOBALS['urlParams'],
]);
return null;
}
}

View File

@ -8,6 +8,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use function phpinfo;
@ -21,15 +22,17 @@ use const INFO_MODULES;
*/
class PhpInfoController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$this->response->disable();
$this->response->getHeader()->sendHttpHeaders();
if (! Config::getInstance()->settings['ShowPhpInfo']) {
return;
return null;
}
phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES);
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Config\Forms\User\ExportForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ class ExportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -52,7 +53,7 @@ class ExportController extends AbstractController
$formDisplay->fixErrors();
$this->redirect('/preferences/export');
return;
return null;
}
$GLOBALS['error'] = null;
@ -70,7 +71,7 @@ class ExportController extends AbstractController
$GLOBALS['hash'] = ltrim($GLOBALS['tabHash'], '#');
$this->userPreferences->redirect('index.php?route=/preferences/export', null, $GLOBALS['hash']);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -102,5 +103,7 @@ class ExportController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Config\Forms\User\FeaturesForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ class FeaturesController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -52,7 +53,7 @@ class FeaturesController extends AbstractController
$formDisplay->fixErrors();
$this->redirect('/preferences/features');
return;
return null;
}
$GLOBALS['error'] = null;
@ -70,7 +71,7 @@ class FeaturesController extends AbstractController
$GLOBALS['hash'] = ltrim($GLOBALS['tabHash'], '#');
$this->userPreferences->redirect('index.php?route=/preferences/features', null, $GLOBALS['hash']);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -102,5 +103,7 @@ class FeaturesController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Config\Forms\User\ImportForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ class ImportController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -52,7 +53,7 @@ class ImportController extends AbstractController
$formDisplay->fixErrors();
$this->redirect('/preferences/import');
return;
return null;
}
$GLOBALS['error'] = null;
@ -70,7 +71,7 @@ class ImportController extends AbstractController
$GLOBALS['hash'] = ltrim($GLOBALS['tabHash'], '#');
$this->userPreferences->redirect('index.php?route=/preferences/import', null, $GLOBALS['hash']);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -102,5 +103,7 @@ class ImportController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Config\Forms\User\MainForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ class MainPanelController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -52,7 +53,7 @@ class MainPanelController extends AbstractController
$formDisplay->fixErrors();
$this->redirect('/preferences/main-panel');
return;
return null;
}
$GLOBALS['error'] = null;
@ -70,7 +71,7 @@ class MainPanelController extends AbstractController
$GLOBALS['hash'] = ltrim($GLOBALS['tabHash'], '#');
$this->userPreferences->redirect('index.php?route=/preferences/main-panel', null, $GLOBALS['hash']);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -102,5 +103,7 @@ class MainPanelController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -11,6 +11,7 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Core;
use PhpMyAdmin\File;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -56,7 +57,7 @@ class ManageController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -77,7 +78,7 @@ class ManageController extends AbstractController
$settings = $this->userPreferences->load();
echo json_encode($settings['config_data'], JSON_PRETTY_PRINT);
return;
return null;
}
if ($request->hasBodyParam('submit_export') && $request->getParsedBodyParam('export_type') === 'php_file') {
@ -93,7 +94,7 @@ class ManageController extends AbstractController
echo var_export($val, true) . ";\n";
}
return;
return null;
}
if ($request->hasBodyParam('submit_get_json')) {
@ -101,7 +102,7 @@ class ManageController extends AbstractController
$this->response->addJSON('prefs', json_encode($settings['config_data']));
$this->response->addJSON('mtime', $settings['mtime']);
return;
return null;
}
if ($request->hasBodyParam('submit_import')) {
@ -181,7 +182,7 @@ class ManageController extends AbstractController
'return_url' => $returnUrl,
]);
return;
return null;
}
// check for ThemeDefault
@ -223,7 +224,7 @@ class ManageController extends AbstractController
$this->config->loadUserPreferences($this->themeManager);
$this->userPreferences->redirect($returnUrl ?? '', $redirectParams);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -234,12 +235,12 @@ class ManageController extends AbstractController
$this->config->removeCookie('pma_lang');
$this->userPreferences->redirect('index.php?route=/preferences/manage');
return;
return null;
}
$GLOBALS['error'] = $result;
return;
return null;
}
$relationParameters = $this->relation->getRelationParameters();
@ -270,5 +271,7 @@ class ManageController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Config\Forms\User\NaviForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ class NavigationController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -52,7 +53,7 @@ class NavigationController extends AbstractController
$formDisplay->fixErrors();
$this->redirect('/preferences/navigation');
return;
return null;
}
$GLOBALS['error'] = null;
@ -70,7 +71,7 @@ class NavigationController extends AbstractController
$GLOBALS['hash'] = ltrim($GLOBALS['tabHash'], '#');
$this->userPreferences->redirect('index.php?route=/preferences/navigation', null, $GLOBALS['hash']);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -100,9 +101,11 @@ class NavigationController extends AbstractController
if ($request->isAjax()) {
$this->response->addJSON('disableNaviSettings', true);
return;
return null;
}
define('PMA_DISABLE_NAVI_SETTINGS', true);
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Config\Forms\User\SqlForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ class SqlController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['cf'] ??= null;
$GLOBALS['error'] ??= null;
@ -52,7 +53,7 @@ class SqlController extends AbstractController
$formDisplay->fixErrors();
$this->redirect('/preferences/sql');
return;
return null;
}
$GLOBALS['error'] = null;
@ -70,7 +71,7 @@ class SqlController extends AbstractController
$GLOBALS['hash'] = ltrim($GLOBALS['tabHash'], '#');
$this->userPreferences->redirect('index.php?route=/preferences/sql', null, $GLOBALS['hash']);
return;
return null;
}
$GLOBALS['error'] = $result;
@ -102,5 +103,7 @@ class SqlController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Preferences;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -24,7 +25,7 @@ class TwoFactorController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$relationParameters = $this->relation->getRelationParameters();
@ -40,7 +41,7 @@ class TwoFactorController extends AbstractController
if (! $twoFactor->check($request, true)) {
$this->render('preferences/two_factor/confirm', ['form' => $twoFactor->render($request)]);
return;
return null;
}
$twoFactor->configure($request, '');
@ -54,7 +55,7 @@ class TwoFactorController extends AbstractController
'configure' => $request->getParsedBodyParam('2fa_configure'),
]);
return;
return null;
}
$this->response->addHTML(
@ -78,5 +79,7 @@ class TwoFactorController extends AbstractController
} else {
define('PMA_DISABLE_NAVI_SETTINGS', true);
}
return null;
}
}

View File

@ -6,16 +6,19 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Favorites\RecentFavoriteTables;
use PhpMyAdmin\Favorites\TableType;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
final class RecentTablesListController extends AbstractController
{
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {
return;
return null;
}
$this->response->addJSON(['list' => RecentFavoriteTables::getInstance(TableType::Recent)->getHtmlList()]);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Core;
use PhpMyAdmin\Exceptions\ExportException;
use PhpMyAdmin\Export\Export;
use PhpMyAdmin\Html\MySQLDocumentation;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
@ -20,13 +21,13 @@ use function mb_strlen;
/**
* Schema export handler
*/
class SchemaExportController
class SchemaExportController implements InvocableController
{
public function __construct(private Export $export, private ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$db = DatabaseName::tryFrom($request->getParsedBodyParam('db'));
/** @var mixed $exportType */
@ -38,7 +39,7 @@ class SchemaExportController
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error($errorMessage)->getDisplay());
return;
return null;
}
/**
@ -50,7 +51,7 @@ class SchemaExportController
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error($exception->getMessage())->getDisplay());
return;
return null;
}
$this->response->disable();
@ -60,5 +61,7 @@ class SchemaExportController
mb_strlen($exportInfo['fileData'], '8bit'),
);
echo $exportInfo['fileData'];
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -36,7 +37,7 @@ final class BinlogController extends AbstractController
$this->binaryLogs = $this->dbi->fetchResult('SHOW MASTER LOGS', 'Log_name');
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$log = $request->getParsedBodyParam('log');
$position = (int) $request->getParsedBodyParam('pos', 0);
@ -99,6 +100,8 @@ final class BinlogController extends AbstractController
'has_icons' => Util::showIcons('TableNavigationLinksMode'),
'is_full_query' => $isFullQuery,
]);
return null;
}
/**

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Charsets\Collation;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
@ -44,7 +45,7 @@ class CollationsController extends AbstractController
$this->collations = $collations ?? Charsets::getCollations($this->dbi, $config->selectedServer['DisableIS']);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['errorUrl'] = Url::getFromRoute('/');
@ -71,5 +72,7 @@ class CollationsController extends AbstractController
}
$this->render('server/collations/index', ['charsets' => $charsets]);
return null;
}
}

View File

@ -10,6 +10,7 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -31,7 +32,7 @@ final class CreateController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$newDb = $request->getParsedBodyParam('new_db');
$dbCollation = $request->getParsedBodyParam('db_collation');
@ -39,7 +40,7 @@ final class CreateController extends AbstractController
if (! is_string($newDb) || $newDb === '' || ! $request->isAjax()) {
$this->response->addJSON(['message' => Message::error()]);
return;
return null;
}
if ($this->dbi->getLowerCaseNames() === 1) {
@ -95,5 +96,7 @@ final class CreateController extends AbstractController
}
$this->response->addJSON($json);
return null;
}
}

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\RelationCleanup;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
@ -35,7 +36,7 @@ final class DestroyController extends AbstractController
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): void
public function __invoke(ServerRequest $request): Response|null
{
$GLOBALS['selected'] ??= null;
$GLOBALS['errorUrl'] ??= null;
@ -53,7 +54,7 @@ final class DestroyController extends AbstractController
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON($json);
return;
return null;
}
if (
@ -65,7 +66,7 @@ final class DestroyController extends AbstractController
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON($json);
return;
return null;
}
$GLOBALS['errorUrl'] = Url::getFromRoute('/server/databases');
@ -94,5 +95,7 @@ final class DestroyController extends AbstractController
$json = ['message' => $message];
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON($json);
return null;
}
}

Some files were not shown because too many files have changed in this diff Show More