Merge pull request #19104 from MauricioFauth/abstract-controller-removal

Remove the Controllers\AbstractController abstract class
This commit is contained in:
Maurício Meneghini Fauth 2024-04-09 15:04:59 -03:00 committed by GitHub
commit 0777b61b77
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
286 changed files with 1656 additions and 2316 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1385,11 +1385,6 @@ parameters:
count: 3
path: src/ConfigStorage/UserGroups.php
-
message: "#^Parameter \\#1 \\$params of static method PhpMyAdmin\\\\Url\\:\\:getCommonRaw\\(\\) expects array\\<int\\|string, bool\\|int\\|string\\>, array\\<string, mixed\\> given\\.$#"
count: 1
path: src/Controllers/AbstractController.php
-
message: "#^Parameter \\#2 \\$table of method PhpMyAdmin\\\\Database\\\\CentralColumns\\:\\:getColumnsNotInCentralList\\(\\) expects string, mixed given\\.$#"
count: 1
@ -1456,7 +1451,7 @@ parameters:
path: src/Controllers/Database/CentralColumnsController.php
-
message: "#^Parameter \\#2 \\$templateData of method PhpMyAdmin\\\\Controllers\\\\AbstractController\\:\\:render\\(\\) expects array\\<string, mixed\\>, array given\\.$#"
message: "#^Parameter \\#2 \\$templateData of method PhpMyAdmin\\\\ResponseRenderer\\:\\:render\\(\\) expects array\\<string, mixed\\>, array given\\.$#"
count: 1
path: src/Controllers/Database/CentralColumnsController.php
@ -4036,7 +4031,7 @@ parameters:
path: src/Controllers/Table/ChangeController.php
-
message: "#^Parameter \\#1 \\$files of method PhpMyAdmin\\\\Controllers\\\\AbstractController\\:\\:addScriptFiles\\(\\) expects array\\<string\\>, mixed given\\.$#"
message: "#^Parameter \\#1 \\$files of method PhpMyAdmin\\\\ResponseRenderer\\:\\:addScriptFiles\\(\\) expects array\\<int, string\\>, mixed given\\.$#"
count: 1
path: src/Controllers/Table/ChangeController.php
@ -12675,6 +12670,11 @@ parameters:
count: 1
path: src/ResponseRenderer.php
-
message: "#^Parameter \\#1 \\$params of static method PhpMyAdmin\\\\Url\\:\\:getCommonRaw\\(\\) expects array\\<int\\|string, bool\\|int\\|string\\>, array\\<string, mixed\\> given\\.$#"
count: 1
path: src/ResponseRenderer.php
-
message: "#^Parameter \\#1 \\$string of function mb_strlen expects string, mixed given\\.$#"
count: 1

View File

@ -839,11 +839,6 @@
<code><![CDATA[Config::getInstance()]]></code>
</DeprecatedMethod>
</file>
<file src="src/Controllers/AbstractController.php">
<MixedArgumentTypeCoercion>
<code><![CDATA[$params]]></code>
</MixedArgumentTypeCoercion>
</file>
<file src="src/Controllers/BrowseForeignersController.php">
<PossiblyUnusedReturnValue>
<code><![CDATA[Response|null]]></code>
@ -1140,6 +1135,9 @@
<code><![CDATA[$request->getParam('db')]]></code>
<code><![CDATA[$request->getParsedBodyParam('sql_query')]]></code>
</MixedArgument>
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/MultiTableQuery/TablesController.php">
<PossiblyUnusedReturnValue>
@ -1335,6 +1333,16 @@
<code><![CDATA[Response|null]]></code>
</PossiblyUnusedReturnValue>
</file>
<file src="src/Controllers/Database/SqlFormatController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/AddPrefixController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/AddPrefixTableController.php">
<MixedOperand>
<code><![CDATA[$request->getParsedBodyParam('add_prefix', '')]]></code>
@ -1364,10 +1372,18 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/ChangePrefixFormController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/CopyFormController.php">
<DeprecatedMethod>
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
</DeprecatedMethod>
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/CopyTableController.php">
<MixedArgument>
@ -1409,6 +1425,11 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/EmptyFormController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/EmptyTableController.php">
<DeprecatedMethod>
<code><![CDATA[Config::getInstance()]]></code>
@ -1645,6 +1666,11 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Export/CheckTimeOutController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Export/ExportController.php">
<ArgumentTypeCoercion>
<code><![CDATA[$exportPlugin]]></code>
@ -2047,6 +2073,11 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/LicenseController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/LintController.php">
<MixedAssignment>
<code><![CDATA[$options]]></code>
@ -2317,6 +2348,9 @@
<DeprecatedMethod>
<code><![CDATA[Config::getInstance()]]></code>
</DeprecatedMethod>
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Preferences/ExportController.php">
<DeprecatedMethod>
@ -2520,6 +2554,11 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/RecentTablesListController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/SchemaExportController.php">
<PossiblyUnusedReturnValue>
<code><![CDATA[Response|null]]></code>
@ -3061,6 +3100,11 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Sql/DefaultForeignKeyCheckValueController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Sql/EnumValuesController.php">
<MixedAssignment>
<code><![CDATA[$column]]></code>
@ -4056,6 +4100,9 @@
<code><![CDATA[$column]]></code>
<code><![CDATA[$columnsNames]]></code>
</MixedAssignment>
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
<RiskyTruthyFalsyComparison>
<code><![CDATA[! Context::isKeyword(trim($column), true)]]></code>
<code><![CDATA[Context::isKeyword(trim(Current::$table), true)]]></code>
@ -10249,6 +10296,9 @@
<code><![CDATA[$GLOBALS['focus_querywindow']]]></code>
<code><![CDATA[$GLOBALS['reload']]]></code>
</InvalidArrayOffset>
<MixedArgumentTypeCoercion>
<code><![CDATA[$params]]></code>
</MixedArgumentTypeCoercion>
<MixedAssignment>
<code><![CDATA[$value]]></code>
</MixedAssignment>

View File

@ -1,105 +0,0 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Controllers;
use Fig\Http\Message\StatusCodeInterface;
use PhpMyAdmin\Current;
use PhpMyAdmin\Html\MySQLDocumentation;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use function __;
abstract class AbstractController implements InvocableController
{
public function __construct(protected ResponseRenderer $response, protected Template $template)
{
}
/** @param array<string, mixed> $templateData */
protected function render(string $templatePath, array $templateData = []): void
{
$this->response->addHTML($this->template->render($templatePath, $templateData));
}
/** @param string[] $files */
protected function addScriptFiles(array $files): void
{
$header = $this->response->getHeader();
$scripts = $header->getScripts();
$scripts->addFiles($files);
}
/** @param array<string, mixed> $params */
protected function redirect(string $route, array $params = []): void
{
$this->response->redirect('./index.php?route=' . $route . Url::getCommonRaw($params, '&'));
}
/**
* Function added to avoid path disclosures.
* Called by each script that needs parameters.
*
* @param bool $request Check parameters in request
* @psalm-param non-empty-list<non-empty-string> $params The names of the parameters needed by the calling script
*/
protected function checkParameters(array $params, bool $request = false): bool
{
$foundError = false;
$errorMessage = '';
$array = $request ? $_REQUEST : $GLOBALS;
foreach ($params as $param) {
if (isset($array[$param]) && $array[$param] !== '') {
continue;
}
if (! $request && $param === 'server' && Current::$server > 0) {
continue;
}
if (! $request && $param === 'db' && Current::$database !== '') {
continue;
}
if (! $request && $param === 'table' && Current::$table !== '') {
continue;
}
$errorMessage .=
__('Missing parameter:') . ' '
. $param
. MySQLDocumentation::showDocumentation('faq', 'faqmissingparameters', true)
. '[br]';
$foundError = true;
}
if ($foundError) {
$this->response->setStatusCode(StatusCodeInterface::STATUS_BAD_REQUEST);
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error($errorMessage)->getDisplay());
}
return ! $foundError;
}
/** @psalm-param StatusCodeInterface::STATUS_* $statusCode */
protected function sendErrorResponse(string $message, int $statusCode = 400): void
{
$this->response->setStatusCode($statusCode);
$this->response->setRequestStatus(false);
if ($this->response->isAjax()) {
$this->response->addJSON('isErrorResponse', true);
$this->response->addJSON('message', $message);
return;
}
$this->response->addHTML(Message::error($message)->getDisplay());
}
}

View File

@ -9,20 +9,17 @@ use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
/**
* Display selection for relational field values
*/
class BrowseForeignersController extends AbstractController
final class BrowseForeignersController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private BrowseForeigners $browseForeigners,
private Relation $relation,
private readonly ResponseRenderer $response,
private readonly BrowseForeigners $browseForeigners,
private readonly Relation $relation,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -9,7 +9,6 @@ use PhpMyAdmin\Core;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use function __;
@ -25,11 +24,10 @@ use function printf;
use function readgzfile;
use function str_ends_with;
final class ChangeLogController extends AbstractController
final class ChangeLogController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private readonly Config $config)
public function __construct(private readonly ResponseRenderer $response, private readonly Config $config)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -113,7 +111,7 @@ final class ChangeLogController extends AbstractController
$this->response->addHeader('Content-Type', 'text/html; charset=utf-8');
$this->render('changelog', [
$this->response->render('changelog', [
'changelog' => preg_replace(array_keys($replaces), $replaces, $changelog),
]);

View File

@ -11,18 +11,16 @@ use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use const SQL_DIR;
/**
* Displays status of phpMyAdmin configuration storage
*/
class CheckRelationsController extends AbstractController
final class CheckRelationsController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Relation $relation)
public function __construct(private readonly ResponseRenderer $response, private readonly Relation $relation)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -50,7 +48,7 @@ class CheckRelationsController extends AbstractController
// Do not use any previous $relationParameters value as it could have changed after a successful fixPmaTables()
$relationParameters = $this->relation->getRelationParameters();
$this->render('relation/check_relations', [
$this->response->render('relation/check_relations', [
'db' => $db?->getName() ?? '',
'zero_conf' => Config::getInstance()->settings['ZeroConf'],
'relation_parameters' => $relationParameters->toArray(),

View File

@ -8,14 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
final class CollationConnectionController extends AbstractController
final class CollationConnectionController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Config $config)
public function __construct(private readonly ResponseRenderer $response, private readonly Config $config)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -9,13 +9,11 @@ use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class ColumnController extends AbstractController
final class ColumnController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private DatabaseInterface $dbi)
public function __construct(private readonly ResponseRenderer $response, private readonly DatabaseInterface $dbi)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -6,23 +6,20 @@ namespace PhpMyAdmin\Controllers\Console\Bookmark;
use PhpMyAdmin\Bookmarks\BookmarkRepository;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
use function is_string;
final class AddController extends AbstractController
final class AddController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private readonly ResponseRenderer $response,
private readonly BookmarkRepository $bookmarkRepository,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -5,20 +5,15 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Console\Bookmark;
use PhpMyAdmin\Console;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class RefreshController extends AbstractController
final class RefreshController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Console $console,
) {
parent::__construct($response, $template);
public function __construct(private readonly ResponseRenderer $response, private readonly Console $console)
{
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -7,21 +7,21 @@ namespace PhpMyAdmin\Controllers\Console;
use Fig\Http\Message\StatusCodeInterface;
use InvalidArgumentException;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
use function in_array;
use function is_numeric;
final class UpdateConfigController extends AbstractController
final class UpdateConfigController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Config $config)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Config $config,
) {
}
public function __invoke(ServerRequest $request): Response

View File

@ -4,22 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\CentralColumns;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class PopulateColumnsController extends AbstractController
final class PopulateColumnsController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private CentralColumns $centralColumns,
private readonly ResponseRenderer $response,
private readonly CentralColumns $centralColumns,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -28,7 +25,7 @@ final class PopulateColumnsController extends AbstractController
Current::$database,
$request->getParsedBodyParam('selectedTable'),
);
$this->render('database/central_columns/populate_columns', ['columns' => $columns]);
$this->response->render('database/central_columns/populate_columns', ['columns' => $columns]);
return null;
}

View File

@ -8,7 +8,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
@ -16,7 +16,6 @@ use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use Webmozart\Assert\Assert;
use function __;
@ -25,14 +24,12 @@ use function is_numeric;
use function parse_str;
use function sprintf;
class CentralColumnsController extends AbstractController
final class CentralColumnsController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private CentralColumns $centralColumns,
private readonly ResponseRenderer $response,
private readonly CentralColumns $centralColumns,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -91,7 +88,7 @@ class CentralColumnsController extends AbstractController
);
}
$this->addScriptFiles([
$this->response->addScriptFiles([
'vendor/jquery/jquery.uitablefilter.js',
'vendor/jquery/jquery.tablesorter.js',
'database/central_columns.js',
@ -181,7 +178,7 @@ class CentralColumnsController extends AbstractController
LanguageManager::$textDir,
);
$this->render('database/central_columns/main', $variables);
$this->response->render('database/central_columns/main', $variables);
}
/** @return true|Message */
@ -256,7 +253,7 @@ class CentralColumnsController extends AbstractController
Assert::allString($params['selected_fld']);
$rows = $this->centralColumns->getHtmlForEditingPage($params['selected_fld'], $params['db']);
$this->render('database/central_columns/edit', ['rows' => $rows]);
$this->response->render('database/central_columns/edit', ['rows' => $rows]);
}
/**

View File

@ -5,35 +5,32 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Index;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Util;
use function is_array;
use function str_replace;
class DataDictionaryController extends AbstractController
final class DataDictionaryController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Relation $relation,
private Transformations $transformations,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Relation $relation,
private readonly Transformations $transformations,
private readonly DatabaseInterface $dbi,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
{
if (! $this->checkParameters(['db'], true)) {
if (! $this->response->checkParameters(['db'], true)) {
return null;
}
@ -107,7 +104,7 @@ class DataDictionaryController extends AbstractController
];
}
$this->render('database/data_dictionary/index', [
$this->response->render('database/data_dictionary/index', [
'database' => Current::$database,
'comment' => $comment,
'tables' => $tables,

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Designer;
use PhpMyAdmin\Database\Designer\Common as DesignerCommon;
@ -26,16 +26,15 @@ use function in_array;
use function json_encode;
use function sprintf;
class DesignerController extends AbstractController
final class DesignerController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Designer $databaseDesigner,
private DesignerCommon $designerCommon,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly Designer $databaseDesigner,
private readonly DesignerCommon $designerCommon,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -154,7 +153,7 @@ class DesignerController extends AbstractController
return null;
}
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -173,7 +172,7 @@ class DesignerController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -223,7 +222,7 @@ class DesignerController extends AbstractController
$header = $this->response->getHeader();
$header->setBodyId('designer_body');
$this->addScriptFiles(['designer/init.js']);
$this->response->addScriptFiles(['designer/init.js']);
$columnsType = $this->databaseDesigner->getColumnTypes($tableColumn, $tablesAllKeys);

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Events;
use PhpMyAdmin\DatabaseInterface;
@ -27,16 +27,15 @@ use function mb_strtoupper;
use function sprintf;
use function trim;
final class EventsController extends AbstractController
final class EventsController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Events $events,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly Events $events,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -44,10 +43,10 @@ final class EventsController extends AbstractController
$GLOBALS['errors'] ??= null;
$GLOBALS['errorUrl'] ??= null;
$this->addScriptFiles(['database/events.js', 'sql.js']);
$this->response->addScriptFiles(['database/events.js', 'sql.js']);
if (! $request->isAjax()) {
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -59,7 +58,7 @@ final class EventsController extends AbstractController
$databaseName = DatabaseName::tryFrom($request->getParam('db'));
if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -258,7 +257,7 @@ final class EventsController extends AbstractController
$items = $this->events->getDetails(Current::$database);
$this->render('database/events/index', [
$this->response->render('database/events/index', [
'db' => Current::$database,
'items' => $items,
'has_privilege' => Util::currentUserHasPrivilege('EVENT', Current::$database),

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Export\Export;
@ -17,7 +17,6 @@ use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -26,17 +25,15 @@ use function array_merge;
use function count;
use function is_array;
final class ExportController extends AbstractController
final class ExportController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Export $export,
private Options $exportOptions,
private PageSettings $pageSettings,
private readonly ResponseRenderer $response,
private readonly Export $export,
private readonly Options $exportOptions,
private readonly PageSettings $pageSettings,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -50,9 +47,9 @@ final class ExportController extends AbstractController
$pageSettingsErrorHtml = $this->pageSettings->getErrorHTML();
$pageSettingsHtml = $this->pageSettings->getHTML();
$this->addScriptFiles(['export.js']);
$this->response->addScriptFiles(['export.js']);
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -71,7 +68,7 @@ final class ExportController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -166,7 +163,7 @@ final class ExportController extends AbstractController
$exportList,
);
$this->render('database/export/index', array_merge($options, [
$this->response->render('database/export/index', array_merge($options, [
'page_settings_error_html' => $pageSettingsErrorHtml,
'page_settings_html' => $pageSettingsHtml,
'structure_or_data_forced' => $request->getParsedBodyParam('structure_or_data_forced', 0),

View File

@ -7,7 +7,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -21,7 +21,6 @@ use PhpMyAdmin\Import\ImportSettings;
use PhpMyAdmin\Message;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use PhpMyAdmin\Utils\ForeignKey;
@ -29,16 +28,14 @@ use PhpMyAdmin\Utils\ForeignKey;
use function __;
use function is_numeric;
final class ImportController extends AbstractController
final class ImportController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private PageSettings $pageSettings,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly PageSettings $pageSettings,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -50,9 +47,9 @@ final class ImportController extends AbstractController
$pageSettingsErrorHtml = $this->pageSettings->getErrorHTML();
$pageSettingsHtml = $this->pageSettings->getHTML();
$this->addScriptFiles(['import.js']);
$this->response->addScriptFiles(['import.js']);
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -69,7 +66,7 @@ final class ImportController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -110,7 +107,7 @@ final class ImportController extends AbstractController
$isAllowInterruptChecked = Plugins::checkboxCheck('Import', 'allow_interrupt');
$maxUploadSize = (int) $config->get('max_upload_size');
$this->render('database/import/index', [
$this->response->render('database/import/index', [
'page_settings_error_html' => $pageSettingsErrorHtml,
'page_settings_html' => $pageSettingsHtml,
'upload_id' => $uploadId,

View File

@ -4,13 +4,18 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\MultiTableQuery;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Database\MultiTableQuery;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
final class QueryController extends AbstractController
final class QueryController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
$this->response->addHTML(MultiTableQuery::displayResults(

View File

@ -4,22 +4,20 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\MultiTableQuery;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Query\Generator as QueryGenerator;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function array_map;
use function implode;
final class TablesController extends AbstractController
final class TablesController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private DatabaseInterface $dbi)
public function __construct(private readonly ResponseRenderer $response, private readonly DatabaseInterface $dbi)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\MultiTableQuery;
use PhpMyAdmin\DatabaseInterface;
@ -16,16 +16,18 @@ use PhpMyAdmin\Template;
/**
* Handles database multi-table querying
*/
class MultiTableQueryController extends AbstractController
final class MultiTableQueryController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private DatabaseInterface $dbi)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly DatabaseInterface $dbi,
) {
}
public function __invoke(ServerRequest $request): Response|null
{
$this->addScriptFiles(['database/multi_table_query.js', 'database/query_generator.js']);
$this->response->addScriptFiles(['database/multi_table_query.js', 'database/query_generator.js']);
$queryInstance = new MultiTableQuery($this->dbi, $this->template, Current::$database);

View File

@ -8,7 +8,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
@ -18,7 +18,6 @@ use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Server\Privileges;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
use function __;
@ -27,15 +26,13 @@ use function mb_strtolower;
/**
* Controller for database privileges
*/
class PrivilegesController extends AbstractController
final class PrivilegesController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Privileges $privileges,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Privileges $privileges,
private readonly DatabaseInterface $dbi,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class PrivilegesController extends AbstractController
return null;
}
$this->addScriptFiles(['server/privileges.js', 'vendor/zxcvbn-ts.js']);
$this->response->addScriptFiles(['server/privileges.js', 'vendor/zxcvbn-ts.js']);
/**
* Checks if the user is allowed to do what they try to...
@ -60,7 +57,7 @@ class PrivilegesController extends AbstractController
$isCreateUser = $this->dbi->isCreateUser();
if (! $this->dbi->isSuperUser() && ! $isGrantUser && ! $isCreateUser) {
$this->render('server/sub_page_header', ['type' => 'privileges', 'is_image' => false]);
$this->response->render('server/sub_page_header', ['type' => 'privileges', 'is_image' => false]);
$this->response->addHTML(
Message::error(__('No Privileges'))
->getDisplay(),
@ -82,7 +79,7 @@ class PrivilegesController extends AbstractController
$privileges = $this->privileges->getAllPrivileges($db);
}
$this->render('database/privileges/index', [
$this->response->render('database/privileges/index', [
'is_superuser' => $this->dbi->isSuperUser(),
'db' => $db->getName(),
'database_url' => $scriptName,
@ -91,7 +88,7 @@ class PrivilegesController extends AbstractController
'is_grantuser' => $this->dbi->isGrantUser(),
'privileges' => $privileges,
]);
$this->render('export_modal');
$this->response->render('export_modal', []);
return null;
}

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Routines;
use PhpMyAdmin\DatabaseInterface;
@ -35,17 +35,16 @@ use const ENT_QUOTES;
/**
* Routines management.
*/
class RoutinesController extends AbstractController
final class RoutinesController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPrivilegesFactory $userPrivilegesFactory,
private DatabaseInterface $dbi,
private Routines $routines,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
private readonly DatabaseInterface $dbi,
private readonly Routines $routines,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -54,7 +53,7 @@ class RoutinesController extends AbstractController
$GLOBALS['errorUrl'] ??= null;
$GLOBALS['urlParams'] ??= null;
$this->addScriptFiles(['database/routines.js', 'sql.js']);
$this->response->addScriptFiles(['database/routines.js', 'sql.js']);
$type = $_REQUEST['type'] ?? null;
@ -66,7 +65,7 @@ class RoutinesController extends AbstractController
* Displays the header and tabs
*/
if (Current::$table !== '' && in_array(Current::$table, $this->dbi->getTables(Current::$database), true)) {
if (! $this->checkParameters(['db', 'table'])) {
if (! $this->response->checkParameters(['db', 'table'])) {
return null;
}
@ -76,21 +75,24 @@ class RoutinesController extends AbstractController
$databaseName = DatabaseName::tryFrom($request->getParam('db'));
if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute(
'/',
['reload' => true, 'message' => __('No databases selected.')],
);
return null;
}
$tableName = TableName::tryFrom($request->getParam('table'));
if ($tableName === null || ! $this->dbTableExists->hasTable($databaseName, $tableName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No table selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No table selected.')]);
return null;
}
} else {
Current::$table = '';
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -102,7 +104,10 @@ class RoutinesController extends AbstractController
$databaseName = DatabaseName::tryFrom($request->getParam('db'));
if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) {
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute(
'/',
['reload' => true, 'message' => __('No databases selected.')],
);
return null;
}
@ -481,7 +486,7 @@ class RoutinesController extends AbstractController
);
}
$this->render('database/routines/index', [
$this->response->render('database/routines/index', [
'db' => Current::$database,
'table' => Current::$table,
'has_any_routines' => $items !== [],

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\Search;
use PhpMyAdmin\DatabaseInterface;
@ -22,15 +22,14 @@ use PhpMyAdmin\Util;
use function __;
class SearchController extends AbstractController
final class SearchController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -38,9 +37,9 @@ class SearchController extends AbstractController
$GLOBALS['errorUrl'] ??= null;
$GLOBALS['urlParams'] ??= null;
$this->addScriptFiles(['database/search.js', 'sql.js', 'makegrid.js']);
$this->response->addScriptFiles(['database/search.js', 'sql.js', 'makegrid.js']);
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -57,7 +56,7 @@ class SearchController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -74,7 +73,10 @@ class SearchController extends AbstractController
return null;
}
$this->render('error/simple', ['error_message' => $errorMessage, 'back_url' => $GLOBALS['errorUrl']]);
$this->response->render('error/simple', [
'error_message' => $errorMessage,
'back_url' => $GLOBALS['errorUrl'],
]);
return null;
}

View File

@ -5,28 +5,25 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function sprintf;
/**
* Table/Column autocomplete in SQL editors.
*/
class SqlAutoCompleteController extends AbstractController
final class SqlAutoCompleteController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly Config $config,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Http\Response;
@ -15,7 +15,6 @@ use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\SqlQueryForm;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -25,16 +24,14 @@ use function htmlspecialchars;
/**
* Database SQL executor
*/
class SqlController extends AbstractController
class SqlController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private SqlQueryForm $sqlQueryForm,
private PageSettings $pageSettings,
private readonly ResponseRenderer $response,
private readonly SqlQueryForm $sqlQueryForm,
private readonly PageSettings $pageSettings,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -43,13 +40,13 @@ class SqlController extends AbstractController
$GLOBALS['back'] ??= null;
$GLOBALS['errorUrl'] ??= null;
$this->addScriptFiles(['makegrid.js', 'vendor/jquery/jquery.uitablefilter.js', 'sql.js']);
$this->response->addScriptFiles(['makegrid.js', 'vendor/jquery/jquery.uitablefilter.js', 'sql.js']);
$this->pageSettings->init('Sql');
$this->response->addHTML($this->pageSettings->getErrorHTML());
$this->response->addHTML($this->pageSettings->getHTML());
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -68,7 +65,7 @@ class SqlController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}

View File

@ -4,16 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\SqlParser\Utils\Formatter;
/**
* Format SQL for SQL editors.
*/
class SqlFormatController extends AbstractController
final class SqlFormatController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
/** @var string $query */

View File

@ -4,15 +4,20 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use function __;
final class AddPrefixController extends AbstractController
final class AddPrefixController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
@ -31,7 +36,7 @@ final class AddPrefixController extends AbstractController
}
$this->response->disable();
$this->render('database/structure/add_prefix', ['url_params' => $params]);
$this->response->render('database/structure/add_prefix', ['url_params' => $params]);
return null;
}

View File

@ -4,26 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
final class AddPrefixTableController extends AbstractController
final class AddPrefixTableController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private StructureController $structureController,
private readonly DatabaseInterface $dbi,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,8 +4,8 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure\CentralColumns;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
@ -13,21 +13,18 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use Webmozart\Assert\Assert;
use function __;
use function is_array;
final class AddController extends AbstractController
final class AddController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private StructureController $structureController,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,8 +4,8 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure\CentralColumns;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
@ -13,21 +13,18 @@ use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use Webmozart\Assert\Assert;
use function __;
use function is_array;
final class MakeConsistentController extends AbstractController
final class MakeConsistentController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private StructureController $structureController,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,29 +4,26 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure\CentralColumns;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use Webmozart\Assert\Assert;
use function __;
use function is_array;
final class RemoveController extends AbstractController
final class RemoveController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private StructureController $structureController,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,15 +4,20 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use function __;
final class ChangePrefixFormController extends AbstractController
final class ChangePrefixFormController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
@ -36,7 +41,10 @@ final class ChangePrefixFormController extends AbstractController
}
$this->response->disable();
$this->render('database/structure/change_prefix_form', ['route' => $route, 'url_params' => $urlParams]);
$this->response->render('database/structure/change_prefix_form', [
'route' => $route,
'url_params' => $urlParams,
]);
return null;
}

View File

@ -4,16 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use function __;
final class CopyFormController extends AbstractController
final class CopyFormController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
@ -40,7 +45,7 @@ final class CopyFormController extends AbstractController
}
$this->response->disable();
$this->render('database/structure/copy_form', [
$this->response->render('database/structure/copy_form', [
'url_params' => $urlParams,
'options' => $databasesList->getList(),
]);

View File

@ -4,28 +4,23 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\Operations;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Table\Table;
use PhpMyAdmin\Template;
use PhpMyAdmin\UserPrivilegesFactory;
final class CopyTableController extends AbstractController
final class CopyTableController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Operations $operations,
private StructureController $structureController,
private readonly Operations $operations,
private readonly StructureController $structureController,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,27 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Table\Table;
use PhpMyAdmin\Template;
use function mb_strlen;
use function mb_substr;
final class CopyTableWithPrefixController extends AbstractController
final class CopyTableWithPrefixController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private StructureController $structureController,
) {
parent::__construct($response, $template);
public function __construct(private readonly StructureController $structureController)
{
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,24 +4,22 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
use PhpMyAdmin\Utils\ForeignKey;
use function __;
use function htmlspecialchars;
final class DropFormController extends AbstractController
final class DropFormController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private DatabaseInterface $dbi)
public function __construct(private readonly ResponseRenderer $response, private readonly DatabaseInterface $dbi)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -62,7 +60,7 @@ final class DropFormController extends AbstractController
$urlParams['selected'][] = $selectedValue;
}
$this->render('database/structure/drop_form', [
$this->response->render('database/structure/drop_form', [
'url_params' => $urlParams,
'full_query' => $fullQuery,
'is_foreign_key_check' => ForeignKey::isCheckEnabled(),

View File

@ -5,30 +5,25 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\ConfigStorage\RelationCleanup;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
use PhpMyAdmin\Utils\ForeignKey;
use function __;
final class DropTableController extends AbstractController
final class DropTableController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private RelationCleanup $relationCleanup,
private StructureController $structureController,
private readonly DatabaseInterface $dbi,
private readonly RelationCleanup $relationCleanup,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,18 +4,23 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Util;
use PhpMyAdmin\Utils\ForeignKey;
use function __;
use function htmlspecialchars;
final class EmptyFormController extends AbstractController
final class EmptyFormController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
@ -37,7 +42,7 @@ final class EmptyFormController extends AbstractController
$urlParams['selected'][] = $selectedValue;
}
$this->render('database/structure/empty_form', [
$this->response->render('database/structure/empty_form', [
'url_params' => $urlParams,
'full_query' => $fullQuery,
'is_foreign_key_check' => ForeignKey::isCheckEnabled(),

View File

@ -8,8 +8,8 @@ use PhpMyAdmin\Bookmarks\BookmarkRepository;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationCleanup;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\FlashMessages;
@ -26,18 +26,17 @@ use PhpMyAdmin\Utils\ForeignKey;
use function __;
final class EmptyTableController extends AbstractController
final class EmptyTableController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private Relation $relation,
private RelationCleanup $relationCleanup,
private FlashMessages $flash,
private StructureController $structureController,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly DatabaseInterface $dbi,
private readonly Relation $relation,
private readonly RelationCleanup $relationCleanup,
private readonly FlashMessages $flash,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -48,7 +47,7 @@ final class EmptyTableController extends AbstractController
if ($multBtn !== __('Yes')) {
$this->flash->addMessage('success', __('No change'));
$this->redirect('/database/structure', ['db' => Current::$database]);
$this->response->redirectToRoute('/database/structure', ['db' => Current::$database]);
return null;
}

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DbTableExists;
use PhpMyAdmin\Favorites\RecentFavoriteTable;
@ -29,15 +29,14 @@ use function json_encode;
use function md5;
use function sha1;
final class FavoriteTableController extends AbstractController
final class FavoriteTableController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Relation $relation,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly Relation $relation,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -14,7 +14,6 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -23,15 +22,13 @@ use function __;
/**
* Handles request for real row count on database level view page.
*/
final class RealRowCountController extends AbstractController
final class RealRowCountController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -43,7 +40,7 @@ final class RealRowCountController extends AbstractController
'table' => $_REQUEST['table'] ?? null,
];
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}

View File

@ -4,29 +4,24 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
use function mb_strlen;
use function mb_substr;
final class ReplacePrefixController extends AbstractController
final class ReplacePrefixController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private StructureController $structureController,
private readonly DatabaseInterface $dbi,
private readonly StructureController $structureController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
@ -15,11 +15,13 @@ use PhpMyAdmin\Template;
use function __;
final class ShowCreateController extends AbstractController
final class ShowCreateController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private DatabaseInterface $dbi)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly DatabaseInterface $dbi,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -8,7 +8,7 @@ use PhpMyAdmin\Charsets;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -56,7 +56,7 @@ use function urlencode;
/**
* Handles database structure logic
*/
final class StructureController extends AbstractController
final class StructureController implements InvocableController
{
/** @var int Number of tables */
private int $numTables = 0;
@ -79,17 +79,15 @@ final class StructureController extends AbstractController
private ReplicationInfo $replicationInfo;
public function __construct(
ResponseRenderer $response,
Template $template,
private Relation $relation,
private Replication $replication,
private DatabaseInterface $dbi,
private TrackingChecker $trackingChecker,
private PageSettings $pageSettings,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly Relation $relation,
private readonly Replication $replication,
private readonly DatabaseInterface $dbi,
private readonly TrackingChecker $trackingChecker,
private readonly PageSettings $pageSettings,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
$this->replicationInfo = new ReplicationInfo($this->dbi);
}
@ -129,7 +127,7 @@ final class StructureController extends AbstractController
$parameters = ['sort' => $_REQUEST['sort'] ?? null, 'sort_order' => $_REQUEST['sort_order'] ?? null];
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -146,12 +144,12 @@ final class StructureController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
$this->addScriptFiles(['database/structure.js', 'table/change.js']);
$this->response->addScriptFiles(['database/structure.js', 'table/change.js']);
// Gets the database structure
$this->getDatabaseInfo($request);
@ -160,7 +158,7 @@ final class StructureController extends AbstractController
// If there are no tables, the user is redirected to the last page
// having any.
if ($this->totalNumTables > 0 && $this->position > $this->totalNumTables) {
$this->redirect('/database/structure', [
$this->response->redirectToRoute('/database/structure', [
'db' => Current::$database,
'pos' => max(0, $this->totalNumTables - $config->settings['MaxTableList']),
'reload' => 1,
@ -201,7 +199,7 @@ final class StructureController extends AbstractController
$createTable = $this->template->render('database/create_table', ['db' => Current::$database]);
}
$this->render('database/structure/index', [
$this->response->render('database/structure/index', [
'database' => Current::$database,
'has_tables' => $this->numTables > 0,
'list_navigator_html' => $listNavigator ?? '',

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -17,7 +17,6 @@ use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\Message;
use PhpMyAdmin\Query\Utilities;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tracking\Tracking;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -29,16 +28,14 @@ use function sprintf;
/**
* Tracking configuration for database.
*/
class TrackingController extends AbstractController
final class TrackingController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Tracking $tracking,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Tracking $tracking,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -46,9 +43,9 @@ class TrackingController extends AbstractController
$GLOBALS['urlParams'] ??= null;
$GLOBALS['errorUrl'] ??= null;
$this->addScriptFiles(['vendor/jquery/jquery.tablesorter.js', 'database/tracking.js']);
$this->response->addScriptFiles(['vendor/jquery/jquery.tablesorter.js', 'database/tracking.js']);
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -65,7 +62,7 @@ class TrackingController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -107,7 +104,7 @@ class TrackingController extends AbstractController
__('Tracking data deleted successfully.'),
)->getDisplay());
} elseif ($request->getParsedBodyParam('submit_mult') === 'track') {
$this->render('create_tracking_version', [
$this->response->render('create_tracking_version', [
'route' => '/database/tracking',
'url_params' => $GLOBALS['urlParams'],
'last_version' => 0,
@ -134,7 +131,7 @@ class TrackingController extends AbstractController
$this->response->addHTML('<p>' . __('No tables found in database.') . '</p>' . "\n");
if (! $isSystemSchema) {
$this->render('database/create_table', ['db' => Current::$database]);
$this->response->render('database/create_table', ['db' => Current::$database]);
}
return null;

View File

@ -8,13 +8,11 @@ use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class DatabaseController extends AbstractController
final class DatabaseController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private readonly DatabaseInterface $dbi)
public function __construct(private readonly ResponseRenderer $response, private readonly DatabaseInterface $dbi)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -28,16 +28,15 @@ use function time;
/**
* Handle error report submission
*/
class ErrorReportController extends AbstractController
final class ErrorReportController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private ErrorReport $errorReport,
private ErrorHandler $errorHandler,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly ErrorReport $errorReport,
private readonly ErrorHandler $errorHandler,
private readonly DatabaseInterface $dbi,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,12 +4,17 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Export;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
final class CheckTimeOutController extends AbstractController
final class CheckTimeOutController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {

View File

@ -6,8 +6,8 @@ namespace PhpMyAdmin\Controllers\Export;
use PhpMyAdmin\Config;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\ExportController as DatabaseExportController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\Encoding;
@ -24,7 +24,6 @@ use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Sanitize;
use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Statements\SelectStatement;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use Webmozart\Assert\Assert;
@ -38,11 +37,10 @@ use function is_array;
use function register_shutdown_function;
use function time;
final class ExportController extends AbstractController
final class ExportController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Export $export)
public function __construct(private readonly ResponseRenderer $response, private readonly Export $export)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -90,14 +88,14 @@ final class ExportController extends AbstractController
$tableStructure = $request->getParsedBodyParam('table_structure');
$lockTables = $request->hasBodyParam('lock_tables');
$this->addScriptFiles(['export_output.js']);
$this->response->addScriptFiles(['export_output.js']);
$this->setGlobalsFromRequest($postParams);
// sanitize this parameter which will be used below in a file inclusion
$GLOBALS['what'] = Core::securePath($whatParam);
if (! $this->checkParameters(['what', 'export_type'])) {
if (! $this->response->checkParameters(['what', 'export_type'])) {
return null;
}

View File

@ -4,23 +4,20 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Export;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\Database\ExportController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
final class TablesController extends AbstractController
final class TablesController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private ExportController $exportController,
private readonly ResponseRenderer $response,
private readonly ExportController $exportController,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Controllers\Export\Template;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Export\Template as ExportTemplate;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
@ -16,15 +16,14 @@ use PhpMyAdmin\Template;
use function is_array;
final class CreateController extends AbstractController
final class CreateController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private TemplateModel $model,
private Relation $relation,
private readonly ResponseRenderer $response,
private readonly Template $template,
private readonly TemplateModel $model,
private readonly Relation $relation,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -6,22 +6,19 @@ namespace PhpMyAdmin\Controllers\Export\Template;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class DeleteController extends AbstractController
final class DeleteController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private TemplateModel $model,
private Relation $relation,
private readonly ResponseRenderer $response,
private readonly TemplateModel $model,
private readonly Relation $relation,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -6,23 +6,20 @@ namespace PhpMyAdmin\Controllers\Export\Template;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Export\Template as ExportTemplate;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class LoadController extends AbstractController
final class LoadController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private TemplateModel $model,
private Relation $relation,
private readonly ResponseRenderer $response,
private readonly TemplateModel $model,
private readonly Relation $relation,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -6,23 +6,20 @@ namespace PhpMyAdmin\Controllers\Export\Template;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Export\Template as ExportTemplate;
use PhpMyAdmin\Export\TemplateModel;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class UpdateController extends AbstractController
final class UpdateController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private TemplateModel $model,
private Relation $relation,
private readonly ResponseRenderer $response,
private readonly TemplateModel $model,
private readonly Relation $relation,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -11,6 +11,8 @@ use PhpMyAdmin\Gis\GisFactory;
use PhpMyAdmin\Gis\GisVisualization;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function array_merge;
use function in_array;
@ -22,8 +24,12 @@ use function trim;
/**
* Editor for Geometry data types.
*/
class GisDataEditorController extends AbstractController
final class GisDataEditorController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response, private readonly Template $template)
{
}
private const GIS_TYPES = [
'POINT',
'MULTIPOINT',

View File

@ -9,16 +9,14 @@ use PhpMyAdmin\Git;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Util;
use function strtotime;
final class GitInfoController extends AbstractController
final class GitInfoController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Config $config)
public function __construct(private readonly ResponseRenderer $response, private readonly Config $config)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -44,7 +42,7 @@ final class GitInfoController extends AbstractController
$commit['author']['date'] = Util::localisedDate(strtotime($commit['author']['date']));
$commit['committer']['date'] = Util::localisedDate(strtotime($commit['committer']['date']));
$this->render('home/git_info', $commit);
$this->response->render('home/git_info', $commit);
return null;
}

View File

@ -24,7 +24,6 @@ use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Server\Select;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -42,7 +41,7 @@ use function sprintf;
use const PHP_VERSION;
use const SODIUM_CRYPTO_SECRETBOX_KEYBYTES;
class HomeController extends AbstractController
final class HomeController implements InvocableController
{
/**
* @var array<int, array<string, string>>
@ -51,14 +50,12 @@ class HomeController extends AbstractController
private array $errors = [];
public function __construct(
ResponseRenderer $response,
Template $template,
private Config $config,
private ThemeManager $themeManager,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Config $config,
private readonly ThemeManager $themeManager,
private readonly DatabaseInterface $dbi,
private readonly ResponseFactory $responseFactory,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -75,7 +72,7 @@ class HomeController extends AbstractController
return null;
}
$this->addScriptFiles(['home.js']);
$this->response->addScriptFiles(['home.js']);
// This is for $cfg['ShowDatabasesNavigationAsTree'] = false;
// See: https://github.com/phpmyadmin/phpmyadmin/issues/16520
@ -220,7 +217,7 @@ class HomeController extends AbstractController
$git = new Git($this->config->get('ShowGitRevision') ?? true);
$this->render('home/index', [
$this->response->render('home/index', [
'db' => Current::$database,
'table' => Current::$table,
'message' => $displayMessage ?? '',

View File

@ -8,7 +8,7 @@ use PhpMyAdmin\Bookmarks\Bookmark;
use PhpMyAdmin\Bookmarks\BookmarkRepository;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
@ -24,7 +24,6 @@ use PhpMyAdmin\ParseAnalyze;
use PhpMyAdmin\Plugins\Import\ImportFormat;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Sql;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use PhpMyAdmin\Utils\ForeignKey;
@ -48,17 +47,15 @@ use function preg_quote;
use function preg_replace;
use function time;
final class ImportController extends AbstractController
final class ImportController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Import $import,
private Sql $sql,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Import $import,
private readonly Sql $sql,
private readonly DatabaseInterface $dbi,
private readonly BookmarkRepository $bookmarkRepository,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Import;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Import\SimulateDml;
@ -14,20 +14,15 @@ use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Statements\DeleteStatement;
use PhpMyAdmin\SqlParser\Statements\UpdateStatement;
use PhpMyAdmin\SqlParser\Utils\Query;
use PhpMyAdmin\Template;
use function __;
use function count;
use function explode;
final class SimulateDmlController extends AbstractController
final class SimulateDmlController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private SimulateDml $simulateDml,
) {
parent::__construct($response, $template);
public function __construct(private readonly ResponseRenderer $response, private readonly SimulateDml $simulateDml)
{
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -26,7 +26,7 @@ use function usleep;
*/
class StatusController implements InvocableController
{
public function __construct(private Template $template)
public function __construct(private readonly Template $template)
{
}

View File

@ -9,6 +9,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use function __;
use function is_readable;
@ -18,8 +19,12 @@ use function readfile;
/**
* Simple script to set correct charset for the license
*/
class LicenseController extends AbstractController
final class LicenseController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
$this->response->disable();

View File

@ -11,6 +11,7 @@ use PhpMyAdmin\Core;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Linter;
use PhpMyAdmin\ResponseRenderer;
use function header;
use function is_array;
@ -20,8 +21,12 @@ use function sprintf;
/**
* Represents the interface between the linter and the query editor.
*/
class LintController extends AbstractController
final class LintController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {

View File

@ -9,9 +9,9 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Plugins\AuthenticationPluginFactory;
use PhpMyAdmin\ResponseRenderer;
class LogoutController implements InvocableController
final class LogoutController implements InvocableController
{
public function __construct(private AuthenticationPluginFactory $authPluginFactory)
public function __construct(private readonly AuthenticationPluginFactory $authPluginFactory)
{
}

View File

@ -5,21 +5,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Navigation;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
use function is_numeric;
final class UpdateNavWidthConfigController extends AbstractController
final class UpdateNavWidthConfigController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private readonly Config $config)
public function __construct(private readonly ResponseRenderer $response, private readonly Config $config)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -11,7 +11,6 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\Navigation\Navigation;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Utils\SessionCache;
use function __;
@ -21,16 +20,14 @@ use function __;
*
* Displays server, database and table selection tree.
*/
class NavigationController extends AbstractController
final class NavigationController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Navigation $navigation,
private Relation $relation,
private PageSettings $pageSettings,
private readonly ResponseRenderer $response,
private readonly Navigation $navigation,
private readonly Relation $relation,
private readonly PageSettings $pageSettings,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
@ -12,19 +12,16 @@ use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivilegesFactory;
final class AddNewPrimaryController extends AbstractController
final class AddNewPrimaryController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Normalization $normalization,
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,27 +4,24 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivilegesFactory;
use function min;
final class CreateNewColumnController extends AbstractController
final class CreateNewColumnController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Normalization $normalization,
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,26 +4,26 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function in_array;
final class FirstStepController extends AbstractController
final class FirstStepController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null
{
$this->addScriptFiles(['normalization.js', 'vendor/jquery/jquery.uitablefilter.js']);
$this->response->addScriptFiles(['normalization.js', 'vendor/jquery/jquery.uitablefilter.js']);
$normalForm = '1nf';
$normalizeTo = $request->getParsedBodyParam('normalizeTo');

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class FourthStepController extends AbstractController
final class FourthStepController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class SecondStepController extends AbstractController
final class SecondStepController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\FirstNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class ThirdStepController extends AbstractController
final class ThirdStepController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,22 +4,22 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
use function _pgettext;
final class GetColumnsController extends AbstractController
final class GetColumnsController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,20 +4,28 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
/**
* Normalization process (temporarily specific to 1NF).
*/
class MainController extends AbstractController
final class MainController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
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]);
$this->response->addScriptFiles(['normalization.js', 'vendor/jquery/jquery.uitablefilter.js']);
$this->response->render('table/normalization/normalization', [
'db' => Current::$database,
'table' => Current::$table,
]);
return null;
}

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class MoveRepeatingGroup extends AbstractController
final class MoveRepeatingGroup implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class PartialDependenciesController extends AbstractController
final class PartialDependenciesController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,21 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\SecondNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function json_decode;
final class CreateNewTablesController extends AbstractController
final class CreateNewTablesController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\SecondNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class FirstStepController extends AbstractController
final class FirstStepController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,21 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\SecondNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function json_decode;
final class NewTablesController extends AbstractController
final class NewTablesController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,21 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\ThirdNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function json_decode;
final class CreateNewTablesController extends AbstractController
final class CreateNewTablesController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\ThirdNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
final class FirstStepController extends AbstractController
final class FirstStepController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -4,21 +4,21 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Normalization\ThirdNormalForm;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Normalization;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function json_decode;
final class NewTablesController extends AbstractController
final class NewTablesController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Normalization $normalization)
{
parent::__construct($response, $template);
public function __construct(
private readonly ResponseRenderer $response,
private readonly Normalization $normalization,
) {
}
public function __invoke(ServerRequest $request): Response|null

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Operations\Database;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -15,22 +15,19 @@ use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Message;
use PhpMyAdmin\Operations;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use function __;
final class CollationController extends AbstractController
final class CollationController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Operations $operations,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Operations $operations,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -49,7 +46,7 @@ final class CollationController extends AbstractController
return null;
}
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}

View File

@ -8,7 +8,7 @@ use PhpMyAdmin\Charsets;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationCleanup;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -22,7 +22,6 @@ use PhpMyAdmin\Operations;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\Query\Utilities;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivilegesFactory;
use PhpMyAdmin\Util;
@ -33,19 +32,17 @@ use function mb_strtolower;
/**
* Handles miscellaneous database operations.
*/
class DatabaseController extends AbstractController
final class DatabaseController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Operations $operations,
private UserPrivilegesFactory $userPrivilegesFactory,
private Relation $relation,
private RelationCleanup $relationCleanup,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Operations $operations,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
private readonly Relation $relation,
private readonly RelationCleanup $relationCleanup,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -57,7 +54,7 @@ class DatabaseController extends AbstractController
$userPrivileges = $this->userPrivilegesFactory->getPrivileges();
$this->addScriptFiles(['database/operations.js']);
$this->response->addScriptFiles(['database/operations.js']);
$GLOBALS['sql_query'] = '';
@ -227,7 +224,7 @@ class DatabaseController extends AbstractController
$this->relation->setDbComment(Current::$database, $request->getParsedBodyParam('comment'));
}
if (! $this->checkParameters(['db'])) {
if (! $this->response->checkParameters(['db'])) {
return null;
}
@ -244,7 +241,7 @@ class DatabaseController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -296,7 +293,7 @@ class DatabaseController extends AbstractController
}
}
$this->render('database/operations/index', [
$this->response->render('database/operations/index', [
'message' => $oldMessage,
'db' => Current::$database,
'has_comment' => $relationParameters->columnCommentsFeature !== null,

View File

@ -7,7 +7,7 @@ namespace PhpMyAdmin\Controllers\Operations;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -24,7 +24,6 @@ use PhpMyAdmin\Query\Generator as QueryGenerator;
use PhpMyAdmin\Query\Utilities;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\StorageEngine;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivilegesFactory;
use PhpMyAdmin\Util;
@ -40,18 +39,16 @@ use function preg_replace;
use function str_contains;
use function urldecode;
class TableController extends AbstractController
final class TableController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private Operations $operations,
private UserPrivilegesFactory $userPrivilegesFactory,
private Relation $relation,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly Operations $operations,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
private readonly Relation $relation,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -69,9 +66,9 @@ class TableController extends AbstractController
$pmaTable = $this->dbi->getTable(Current::$database, Current::$table);
$this->addScriptFiles(['table/operations.js']);
$this->response->addScriptFiles(['table/operations.js']);
if (! $this->checkParameters(['db', 'table'])) {
if (! $this->response->checkParameters(['db', 'table'])) {
return null;
}
@ -90,7 +87,7 @@ class TableController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -104,7 +101,7 @@ class TableController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No table selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No table selected.')]);
return null;
}
@ -488,7 +485,7 @@ class TableController extends AbstractController
$relationParameters->relationFeature !== null,
);
$this->render('table/operations/index', [
$this->response->render('table/operations/index', [
'db' => Current::$database,
'table' => Current::$table,
'url_params' => $GLOBALS['urlParams'],

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Operations;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\DbTableExists;
@ -16,7 +16,6 @@ use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\TableName;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -28,15 +27,13 @@ use function strval;
/**
* View manipulations
*/
class ViewController extends AbstractController
final class ViewController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
private readonly DbTableExists $dbTableExists,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -45,9 +42,9 @@ class ViewController extends AbstractController
$tableObject = $this->dbi->getTable(Current::$database, Current::$table);
$GLOBALS['errorUrl'] ??= null;
$this->addScriptFiles(['table/operations.js']);
$this->response->addScriptFiles(['table/operations.js']);
if (! $this->checkParameters(['db', 'table'])) {
if (! $this->response->checkParameters(['db', 'table'])) {
return null;
}
@ -67,7 +64,7 @@ class ViewController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No databases selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No databases selected.')]);
return null;
}
@ -81,7 +78,7 @@ class ViewController extends AbstractController
return null;
}
$this->redirect('/', ['reload' => true, 'message' => __('No table selected.')]);
$this->response->redirectToRoute('/', ['reload' => true, 'message' => __('No table selected.')]);
return null;
}
@ -136,7 +133,7 @@ class ViewController extends AbstractController
));
}
$this->render('table/operations/view', [
$this->response->render('table/operations/view', [
'db' => Current::$database,
'table' => Current::$table,
'url_params' => $GLOBALS['urlParams'],

View File

@ -10,6 +10,7 @@ namespace PhpMyAdmin\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use function phpinfo;
@ -20,8 +21,12 @@ use const INFO_MODULES;
/**
* phpinfo() wrapper to allow displaying only when configured to do so.
*/
class PhpInfoController extends AbstractController
final class PhpInfoController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
$this->response->disable();

View File

@ -8,13 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\ExportForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -23,17 +22,15 @@ use PhpMyAdmin\UserPreferences;
use function define;
use function ltrim;
class ExportController extends AbstractController
final class ExportController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class ExportController extends AbstractController
if ($request->hasBodyParam('revert')) {
// revert erroneous fields to their default values
$formDisplay->fixErrors();
$this->redirect('/preferences/export');
$this->response->redirectToRoute('/preferences/export', []);
return null;
}
@ -79,7 +76,7 @@ class ExportController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -87,7 +84,7 @@ class ExportController extends AbstractController
$formErrors = $formDisplay->displayErrors();
$this->render('preferences/forms/main', [
$this->response->render('preferences/forms/main', [
'error' => $GLOBALS['error'] instanceof Message ? $GLOBALS['error']->getDisplay() : '',
'has_errors' => $formDisplay->hasErrors(),
'errors' => $formErrors,

View File

@ -8,13 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\FeaturesForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -23,17 +22,15 @@ use PhpMyAdmin\UserPreferences;
use function define;
use function ltrim;
class FeaturesController extends AbstractController
final class FeaturesController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class FeaturesController extends AbstractController
if ($request->hasBodyParam('revert')) {
// revert erroneous fields to their default values
$formDisplay->fixErrors();
$this->redirect('/preferences/features');
$this->response->redirectToRoute('/preferences/features', []);
return null;
}
@ -79,7 +76,7 @@ class FeaturesController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -87,7 +84,7 @@ class FeaturesController extends AbstractController
$formErrors = $formDisplay->displayErrors();
$this->render('preferences/forms/main', [
$this->response->render('preferences/forms/main', [
'error' => $GLOBALS['error'] instanceof Message ? $GLOBALS['error']->getDisplay() : '',
'has_errors' => $formDisplay->hasErrors(),
'errors' => $formErrors,

View File

@ -8,13 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\ImportForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -23,17 +22,15 @@ use PhpMyAdmin\UserPreferences;
use function define;
use function ltrim;
class ImportController extends AbstractController
final class ImportController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class ImportController extends AbstractController
if ($request->hasBodyParam('revert')) {
// revert erroneous fields to their default values
$formDisplay->fixErrors();
$this->redirect('/preferences/import');
$this->response->redirectToRoute('/preferences/import', []);
return null;
}
@ -79,7 +76,7 @@ class ImportController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -87,7 +84,7 @@ class ImportController extends AbstractController
$formErrors = $formDisplay->displayErrors();
$this->render('preferences/forms/main', [
$this->response->render('preferences/forms/main', [
'error' => $GLOBALS['error'] instanceof Message ? $GLOBALS['error']->getDisplay() : '',
'has_errors' => $formDisplay->hasErrors(),
'errors' => $formErrors,

View File

@ -8,13 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\MainForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -23,17 +22,15 @@ use PhpMyAdmin\UserPreferences;
use function define;
use function ltrim;
class MainPanelController extends AbstractController
final class MainPanelController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class MainPanelController extends AbstractController
if ($request->hasBodyParam('revert')) {
// revert erroneous fields to their default values
$formDisplay->fixErrors();
$this->redirect('/preferences/main-panel');
$this->response->redirectToRoute('/preferences/main-panel', []);
return null;
}
@ -79,7 +76,7 @@ class MainPanelController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -87,7 +84,7 @@ class MainPanelController extends AbstractController
$formErrors = $formDisplay->displayErrors();
$this->render('preferences/forms/main', [
$this->response->render('preferences/forms/main', [
'error' => $GLOBALS['error'] instanceof Message ? $GLOBALS['error']->getDisplay() : '',
'has_errors' => $formDisplay->hasErrors(),
'errors' => $formErrors,

View File

@ -8,14 +8,13 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\UserFormList;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\File;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\UserPreferences;
use PhpMyAdmin\Util;
@ -44,17 +43,15 @@ use const UPLOAD_ERR_OK;
/**
* User preferences management page.
*/
class ManageController extends AbstractController
final class ManageController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -169,13 +166,13 @@ class ManageController extends AbstractController
// mimic original form and post json in a hidden field
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $route,
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
]);
$this->render('preferences/manage/error', [
$this->response->render('preferences/manage/error', [
'form_errors' => $formDisplay->displayErrors(),
'json' => $json,
'import_merge' => $request->getParsedBodyParam('import_merge'),
@ -245,7 +242,7 @@ class ManageController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $route,
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -259,7 +256,7 @@ class ManageController extends AbstractController
$GLOBALS['error']->getDisplay();
}
$this->render('preferences/manage/main', [
$this->response->render('preferences/manage/main', [
'error' => $GLOBALS['error'],
'max_upload_size' => Config::getInstance()->get('max_upload_size'),
'exists_setup_and_not_exists_config' => @file_exists(ROOT_PATH . 'setup/index.php')

View File

@ -8,13 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\NaviForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -23,17 +22,15 @@ use PhpMyAdmin\UserPreferences;
use function define;
use function ltrim;
class NavigationController extends AbstractController
final class NavigationController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class NavigationController extends AbstractController
if ($request->hasBodyParam('revert')) {
// revert erroneous fields to their default values
$formDisplay->fixErrors();
$this->redirect('/preferences/navigation');
$this->response->redirectToRoute('/preferences/navigation', []);
return null;
}
@ -79,7 +76,7 @@ class NavigationController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -87,7 +84,7 @@ class NavigationController extends AbstractController
$formErrors = $formDisplay->displayErrors();
$this->render('preferences/forms/main', [
$this->response->render('preferences/forms/main', [
'error' => $GLOBALS['error'] instanceof Message ? $GLOBALS['error']->getDisplay() : '',
'has_errors' => $formDisplay->hasErrors(),
'errors' => $formErrors,

View File

@ -8,13 +8,12 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Forms\User\SqlForm;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
@ -23,17 +22,15 @@ use PhpMyAdmin\UserPreferences;
use function define;
use function ltrim;
class SqlController extends AbstractController
final class SqlController implements InvocableController
{
public function __construct(
ResponseRenderer $response,
Template $template,
private UserPreferences $userPreferences,
private Relation $relation,
private Config $config,
private ThemeManager $themeManager,
private readonly ResponseRenderer $response,
private readonly UserPreferences $userPreferences,
private readonly Relation $relation,
private readonly Config $config,
private readonly ThemeManager $themeManager,
) {
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
@ -51,7 +48,7 @@ class SqlController extends AbstractController
if ($request->hasBodyParam('revert')) {
// revert erroneous fields to their default values
$formDisplay->fixErrors();
$this->redirect('/preferences/sql');
$this->response->redirectToRoute('/preferences/sql', []);
return null;
}
@ -79,7 +76,7 @@ class SqlController extends AbstractController
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -87,7 +84,7 @@ class SqlController extends AbstractController
$formErrors = $formDisplay->displayErrors();
$this->render('preferences/forms/main', [
$this->response->render('preferences/forms/main', [
'error' => $GLOBALS['error'] instanceof Message ? $GLOBALS['error']->getDisplay() : '',
'has_errors' => $formDisplay->hasErrors(),
'errors' => $formErrors,

View File

@ -6,30 +6,28 @@ namespace PhpMyAdmin\Controllers\Preferences;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use function __;
use function count;
use function define;
class TwoFactorController extends AbstractController
final class TwoFactorController implements InvocableController
{
public function __construct(ResponseRenderer $response, Template $template, private Relation $relation)
public function __construct(private readonly ResponseRenderer $response, private readonly Relation $relation)
{
parent::__construct($response, $template);
}
public function __invoke(ServerRequest $request): Response|null
{
$relationParameters = $this->relation->getRelationParameters();
$this->render('preferences/header', [
$this->response->render('preferences/header', [
'route' => $request->getRoute(),
'is_saved' => $request->hasQueryParam('saved'),
'has_config_storage' => $relationParameters->userPreferencesFeature !== null,
@ -39,7 +37,7 @@ class TwoFactorController extends AbstractController
if ($request->hasBodyParam('2fa_remove')) {
if (! $twoFactor->check($request, true)) {
$this->render('preferences/two_factor/confirm', ['form' => $twoFactor->render($request)]);
$this->response->render('preferences/two_factor/confirm', ['form' => $twoFactor->render($request)]);
return null;
}
@ -50,7 +48,7 @@ class TwoFactorController extends AbstractController
);
} elseif ($request->hasBodyParam('2fa_configure')) {
if (! $twoFactor->configure($request, $request->getParsedBodyParam('2fa_configure'))) {
$this->render('preferences/two_factor/configure', [
$this->response->render('preferences/two_factor/configure', [
'form' => $twoFactor->setup($request),
'configure' => $request->getParsedBodyParam('2fa_configure'),
]);
@ -64,7 +62,7 @@ class TwoFactorController extends AbstractController
}
$backend = $twoFactor->getBackend();
$this->render('preferences/two_factor/main', [
$this->response->render('preferences/two_factor/main', [
'enabled' => $twoFactor->isWritable(),
'num_backends' => count($twoFactor->getAvailable()),
'backend_id' => $backend::$id,

View File

@ -8,9 +8,14 @@ use PhpMyAdmin\Favorites\RecentFavoriteTables;
use PhpMyAdmin\Favorites\TableType;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
final class RecentTablesListController extends AbstractController
final class RecentTablesListController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
}
public function __invoke(ServerRequest $request): Response|null
{
if (! $request->isAjax()) {

View File

@ -21,9 +21,9 @@ use function mb_strlen;
/**
* Schema export handler
*/
class SchemaExportController implements InvocableController
final class SchemaExportController implements InvocableController
{
public function __construct(private Export $export, private ResponseRenderer $response)
public function __construct(private readonly Export $export, private readonly ResponseRenderer $response)
{
}

View File

@ -5,14 +5,13 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Server;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@ -21,7 +20,7 @@ use function array_key_exists;
/**
* Handles viewing binary logs
*/
final class BinlogController extends AbstractController
final class BinlogController implements InvocableController
{
/**
* binary log files
@ -30,10 +29,8 @@ final class BinlogController extends AbstractController
*/
private array $binaryLogs;
public function __construct(ResponseRenderer $response, Template $template, private DatabaseInterface $dbi)
public function __construct(private readonly ResponseRenderer $response, private readonly DatabaseInterface $dbi)
{
parent::__construct($response, $template);
$this->binaryLogs = $this->dbi->fetchResult('SHOW MASTER LOGS', 'Log_name');
}
@ -86,7 +83,7 @@ final class BinlogController extends AbstractController
$values = $result->fetchAllAssoc();
$this->render('server/binlog/index', [
$this->response->render('server/binlog/index', [
'url_params' => $urlParams,
'binary_logs' => $this->binaryLogs,
'log' => $log,

View File

@ -8,18 +8,17 @@ use PhpMyAdmin\Charsets;
use PhpMyAdmin\Charsets\Charset;
use PhpMyAdmin\Charsets\Collation;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
/**
* Handles viewing character sets and collations
*/
class CollationsController extends AbstractController
final class CollationsController implements InvocableController
{
/** @var array<string, Charset> */
private array $charsets;
@ -32,14 +31,11 @@ class CollationsController extends AbstractController
* @param array<string, array<string, Collation>>|null $collations
*/
public function __construct(
ResponseRenderer $response,
Template $template,
private DatabaseInterface $dbi,
private readonly ResponseRenderer $response,
private readonly DatabaseInterface $dbi,
array|null $charsets = null,
array|null $collations = null,
) {
parent::__construct($response, $template);
$config = Config::getInstance();
$this->charsets = $charsets ?? Charsets::getCharsets($this->dbi, $config->selectedServer['DisableIS']);
$this->collations = $collations ?? Charsets::getCollations($this->dbi, $config->selectedServer['DisableIS']);
@ -71,7 +67,7 @@ class CollationsController extends AbstractController
];
}
$this->render('server/collations/index', ['charsets' => $charsets]);
$this->response->render('server/collations/index', ['charsets' => $charsets]);
return null;
}

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