Merge pull request #18860 from MauricioFauth/container
Decouple from Symfony's container
This commit is contained in:
commit
0634b67c09
@ -7,7 +7,7 @@ use PhpMyAdmin\Command\SetVersionCommand;
|
||||
use PhpMyAdmin\Command\WriteGitRevisionCommand;
|
||||
use PhpMyAdmin\Command\TwigLintCommand;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use Symfony\Component\Console\Application;
|
||||
@ -26,7 +26,7 @@ if (! class_exists(Application::class)) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$containerBuilder = Core::getContainerBuilder();
|
||||
$containerBuilder = ContainerBuilder::getContainer();
|
||||
$cfg['environment'] = 'production';
|
||||
$config = new Config();
|
||||
$config->loadAndCheck(CONFIG_FILE);
|
||||
|
||||
@ -65,6 +65,7 @@
|
||||
"phpmyadmin/shapefile": "^4.0-dev",
|
||||
"phpmyadmin/sql-parser": "^6.0-dev",
|
||||
"phpmyadmin/twig-i18n-extension": "^5.0-dev",
|
||||
"psr/container": "^2.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/http-message": "^1.1",
|
||||
"psr/http-server-handler": "^1.0",
|
||||
|
||||
2
composer.lock
generated
2
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "7533829654de25bcf0c6bc1a3b29bfb7",
|
||||
"content-hash": "aefe28bbea442c1dc86fae2004bd3ff0",
|
||||
"packages": [
|
||||
{
|
||||
"name": "composer/ca-bundle",
|
||||
|
||||
@ -1144,11 +1144,6 @@
|
||||
<code><![CDATA[$request->getParsedBodyParam('sql_query')]]></code>
|
||||
</MixedArgument>
|
||||
</file>
|
||||
<file src="src/Controllers/Database/MultiTableQuery/TablesController.php">
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
</PossiblyUnusedMethod>
|
||||
</file>
|
||||
<file src="src/Controllers/Database/MultiTableQueryController.php">
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
@ -2149,9 +2144,6 @@
|
||||
<PossiblyInvalidArgument>
|
||||
<code><![CDATA[min($skip, $GLOBALS['read_limit'])]]></code>
|
||||
</PossiblyInvalidArgument>
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
</PossiblyUnusedMethod>
|
||||
<RedundantCondition>
|
||||
<code><![CDATA[! $GLOBALS['finished']]]></code>
|
||||
<code><![CDATA[$GLOBALS['offset'] == 0]]></code>
|
||||
@ -2234,9 +2226,6 @@
|
||||
<code>$itemName</code>
|
||||
<code>$itemType</code>
|
||||
</MixedAssignment>
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
</PossiblyUnusedMethod>
|
||||
</file>
|
||||
<file src="src/Controllers/Normalization/AddNewPrimaryController.php">
|
||||
<UnusedParam>
|
||||
@ -2428,9 +2417,6 @@
|
||||
<code>$showTable</code>
|
||||
<code>$showTable</code>
|
||||
</MixedAssignment>
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
</PossiblyUnusedMethod>
|
||||
</file>
|
||||
<file src="src/Controllers/Operations/ViewController.php">
|
||||
<DeprecatedMethod>
|
||||
@ -3176,9 +3162,6 @@
|
||||
<code>$column</code>
|
||||
<code>$currValue</code>
|
||||
</MixedAssignment>
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
</PossiblyUnusedMethod>
|
||||
</file>
|
||||
<file src="src/Controllers/Sql/RelationalValuesController.php">
|
||||
<MixedArgument>
|
||||
@ -3209,9 +3192,6 @@
|
||||
<code>$currentValue</code>
|
||||
<code>$whereClause</code>
|
||||
</MixedAssignment>
|
||||
<PossiblyUnusedMethod>
|
||||
<code>__construct</code>
|
||||
</PossiblyUnusedMethod>
|
||||
</file>
|
||||
<file src="src/Controllers/Sql/SqlController.php">
|
||||
<DeprecatedMethod>
|
||||
@ -12242,11 +12222,6 @@
|
||||
<code><![CDATA[$values['token']]]></code>
|
||||
</MixedAssignment>
|
||||
</file>
|
||||
<file src="src/UrlRedirector.php">
|
||||
<DeprecatedMethod>
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
</DeprecatedMethod>
|
||||
</file>
|
||||
<file src="src/UserPassword.php">
|
||||
<DeprecatedMethod>
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
@ -12580,7 +12555,6 @@
|
||||
<file src="tests/classes/AbstractTestCase.php">
|
||||
<DeprecatedMethod>
|
||||
<code>Config::getInstance()</code>
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
</DeprecatedMethod>
|
||||
<PossiblyUndefinedArrayOffset>
|
||||
<code><![CDATA[$_SERVER['PHP_SELF']]]></code>
|
||||
@ -13196,6 +13170,7 @@
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
<code>DatabaseInterface::getInstance()</code>
|
||||
</DeprecatedMethod>
|
||||
<MixedArgument>
|
||||
<code>$currentTable</code>
|
||||
|
||||
@ -7,6 +7,7 @@ namespace PhpMyAdmin;
|
||||
use Fig\Http\Message\StatusCodeInterface;
|
||||
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
|
||||
use Laminas\HttpHandlerRunner\RequestHandlerRunner;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Http\Factory\ResponseFactory;
|
||||
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
|
||||
use PhpMyAdmin\Http\Handler\ApplicationHandler;
|
||||
@ -66,7 +67,7 @@ class Application
|
||||
public static function init(): self
|
||||
{
|
||||
/** @var Application $application */
|
||||
$application = Core::getContainerBuilder()->get(self::class);
|
||||
$application = ContainerBuilder::getContainer()->get(self::class);
|
||||
|
||||
return $application;
|
||||
}
|
||||
@ -139,7 +140,7 @@ class Application
|
||||
return Routing::callControllerForRoute(
|
||||
$request,
|
||||
Routing::getDispatcher(),
|
||||
Core::getContainerBuilder(),
|
||||
ContainerBuilder::getContainer(),
|
||||
$this->responseFactory,
|
||||
);
|
||||
}
|
||||
|
||||
37
src/Container/ContainerBuilder.php
Normal file
37
src/Container/ContainerBuilder.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Container;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder as SymfonyContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
|
||||
|
||||
use const ROOT_PATH;
|
||||
|
||||
final class ContainerBuilder
|
||||
{
|
||||
public static ContainerInterface|null $container = null;
|
||||
|
||||
public static function getContainer(): ContainerInterface
|
||||
{
|
||||
if (self::$container !== null) {
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
self::$container = self::getSymfonyContainer();
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
private static function getSymfonyContainer(): ContainerInterface
|
||||
{
|
||||
$container = new SymfonyContainerBuilder();
|
||||
$loader = new PhpFileLoader($container, new FileLocator(ROOT_PATH . 'app'));
|
||||
$loader->load('services_loader.php');
|
||||
|
||||
return $container;
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Controllers\Export;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Controllers\AbstractController;
|
||||
use PhpMyAdmin\Controllers\Database\ExportController as DatabaseExportController;
|
||||
use PhpMyAdmin\Core;
|
||||
@ -301,7 +302,7 @@ final class ExportController extends AbstractController
|
||||
);
|
||||
$GLOBALS['active_page'] = Url::getFromRoute('/database/export');
|
||||
/** @var DatabaseExportController $controller */
|
||||
$controller = Core::getContainerBuilder()->get(DatabaseExportController::class);
|
||||
$controller = ContainerBuilder::getContainer()->get(DatabaseExportController::class);
|
||||
$controller($request);
|
||||
|
||||
return;
|
||||
|
||||
@ -5,9 +5,9 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Controllers\View;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Controllers\AbstractController;
|
||||
use PhpMyAdmin\Controllers\Table\StructureController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\DbTableExists;
|
||||
@ -232,7 +232,7 @@ class CreateController extends AbstractController
|
||||
if ($ajaxdialog) {
|
||||
$GLOBALS['message'] = Message::success();
|
||||
/** @var StructureController $controller */
|
||||
$controller = Core::getContainerBuilder()->get(StructureController::class);
|
||||
$controller = ContainerBuilder::getContainer()->get(StructureController::class);
|
||||
$controller($request);
|
||||
} else {
|
||||
$this->response->addJSON(
|
||||
|
||||
18
src/Core.php
18
src/Core.php
@ -6,9 +6,6 @@ namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Exceptions\MissingExtensionException;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
|
||||
|
||||
use function __;
|
||||
use function array_keys;
|
||||
@ -57,8 +54,6 @@ use const FILTER_VALIDATE_IP;
|
||||
*/
|
||||
class Core
|
||||
{
|
||||
public static ContainerBuilder|null $containerBuilder = null;
|
||||
|
||||
/**
|
||||
* Removes insecure parts in a path; used before include() or
|
||||
* require() when a part of the path comes from an insecure source
|
||||
@ -746,19 +741,6 @@ class Core
|
||||
return hash_equals($hmac, $signature);
|
||||
}
|
||||
|
||||
public static function getContainerBuilder(): ContainerBuilder
|
||||
{
|
||||
if (self::$containerBuilder !== null) {
|
||||
return self::$containerBuilder;
|
||||
}
|
||||
|
||||
self::$containerBuilder = new ContainerBuilder();
|
||||
$loader = new PhpFileLoader(self::$containerBuilder, new FileLocator(ROOT_PATH . 'app'));
|
||||
$loader->load('services_loader.php');
|
||||
|
||||
return self::$containerBuilder;
|
||||
}
|
||||
|
||||
public static function populateRequestWithEncryptedQueryParams(ServerRequest $request): ServerRequest
|
||||
{
|
||||
$queryParams = $request->getQueryParams();
|
||||
|
||||
@ -7,6 +7,7 @@ namespace PhpMyAdmin\Display;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\SpecialSchemaLinks;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
@ -1152,7 +1153,7 @@ class Results
|
||||
}
|
||||
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
|
||||
$tmpImage = '<img class="fulltext" src="'
|
||||
. $themeManager->theme->getImgPath($tmpImageFile)
|
||||
|
||||
@ -8,6 +8,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Favorites\RecentFavoriteTable;
|
||||
use PhpMyAdmin\Favorites\RecentFavoriteTables;
|
||||
use PhpMyAdmin\Favorites\TableType;
|
||||
@ -278,7 +279,7 @@ class Header
|
||||
$baseDir = defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : '';
|
||||
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
$theme = $themeManager->theme;
|
||||
|
||||
$version = self::getVersionParameter();
|
||||
|
||||
@ -7,7 +7,7 @@ namespace PhpMyAdmin\Http\Middleware;
|
||||
use Fig\Http\Message\StatusCodeInterface;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\Settings\Server;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Dbal\Connection;
|
||||
use PhpMyAdmin\Exceptions\AuthenticationPluginException;
|
||||
@ -43,7 +43,7 @@ final class Authentication implements MiddlewareInterface
|
||||
}
|
||||
|
||||
/** @var AuthenticationPluginFactory $authPluginFactory */
|
||||
$authPluginFactory = Core::getContainerBuilder()->get(AuthenticationPluginFactory::class);
|
||||
$authPluginFactory = ContainerBuilder::getContainer()->get(AuthenticationPluginFactory::class);
|
||||
try {
|
||||
$authPlugin = $authPluginFactory->create();
|
||||
} catch (AuthenticationPluginException $exception) {
|
||||
|
||||
@ -5,7 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Theme\ThemeManager;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
@ -22,7 +22,7 @@ final class LanguageAndThemeCookieSaving implements MiddlewareInterface
|
||||
{
|
||||
$this->config->setCookie('pma_lang', (string) $GLOBALS['lang']);
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
$themeManager->setThemeCookie();
|
||||
|
||||
return $handler->handle($request);
|
||||
|
||||
@ -5,7 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Exceptions\ExitException;
|
||||
use PhpMyAdmin\Http\Factory\ResponseFactory;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
@ -32,7 +32,7 @@ final class MinimumCommonRedirection implements MiddlewareInterface
|
||||
return $handler->handle($request);
|
||||
}
|
||||
|
||||
$container = Core::getContainerBuilder();
|
||||
$container = ContainerBuilder::getContainer();
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = $container->get(ThemeManager::class);
|
||||
$this->config->loadUserPreferences($themeManager, true);
|
||||
|
||||
@ -6,7 +6,7 @@ namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\ConfigFile;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Exceptions\ExitException;
|
||||
use PhpMyAdmin\Http\Factory\ResponseFactory;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
@ -35,7 +35,7 @@ final class SetupPageRedirection implements MiddlewareInterface
|
||||
return $handler->handle($request);
|
||||
}
|
||||
|
||||
$container = Core::getContainerBuilder();
|
||||
$container = ContainerBuilder::getContainer();
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = $container->get(ThemeManager::class);
|
||||
$this->config->loadUserPreferences($themeManager, true);
|
||||
|
||||
@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Theme\ThemeManager;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
@ -16,7 +16,7 @@ final class ThemeInitialization implements MiddlewareInterface
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||
{
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
$themeManager->initializeTheme();
|
||||
|
||||
return $handler->handle($request);
|
||||
|
||||
@ -5,7 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Theme\ThemeManager;
|
||||
use PhpMyAdmin\Tracking\Tracker;
|
||||
use PhpMyAdmin\UrlRedirector;
|
||||
@ -28,7 +28,7 @@ final class UrlRedirection implements MiddlewareInterface
|
||||
return $handler->handle($request);
|
||||
}
|
||||
|
||||
$container = Core::getContainerBuilder();
|
||||
$container = ContainerBuilder::getContainer();
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = $container->get(ThemeManager::class);
|
||||
$this->config->loadUserPreferences($themeManager, true);
|
||||
|
||||
@ -5,7 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Theme\ThemeManager;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
@ -21,7 +21,7 @@ final class UserPreferencesLoading implements MiddlewareInterface
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||
{
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
$this->config->loadUserPreferences($themeManager);
|
||||
|
||||
return $handler->handle($request);
|
||||
|
||||
@ -6,7 +6,7 @@ namespace PhpMyAdmin\Http\Middleware;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
@ -24,7 +24,7 @@ final class ZeroConfPostConnection implements MiddlewareInterface
|
||||
$settings = $this->config->getSettings();
|
||||
if (! empty($GLOBALS['server']) && $settings->zeroConf) {
|
||||
/** @var Relation $relation */
|
||||
$relation = Core::getContainerBuilder()->get('relation');
|
||||
$relation = ContainerBuilder::getContainer()->get('relation');
|
||||
DatabaseInterface::getInstance()->postConnectControl($relation);
|
||||
}
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ namespace PhpMyAdmin\Navigation;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\PageSettings;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Dbal\Connection;
|
||||
use PhpMyAdmin\ResponseRenderer;
|
||||
@ -256,7 +256,7 @@ class Navigation
|
||||
private function getLogoSource(): string
|
||||
{
|
||||
/** @var ThemeManager $themeManager */
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
$theme = $themeManager->theme;
|
||||
|
||||
if (@file_exists($theme->getFsPath() . 'img/logo_left.png')) {
|
||||
|
||||
@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use FilesystemIterator;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Html\MySQLDocumentation;
|
||||
use PhpMyAdmin\Plugins\ExportPlugin;
|
||||
use PhpMyAdmin\Plugins\ImportPlugin;
|
||||
@ -65,7 +66,7 @@ class Plugins
|
||||
}
|
||||
|
||||
if ($type === 'export') {
|
||||
$container = Core::getContainerBuilder();
|
||||
$container = ContainerBuilder::getContainer();
|
||||
|
||||
/** @psalm-suppress MixedMethodCall */
|
||||
return new $class(
|
||||
@ -154,7 +155,7 @@ class Plugins
|
||||
}
|
||||
|
||||
if ($type === 'Export' && is_subclass_of($class, ExportPlugin::class)) {
|
||||
$container = Core::getContainerBuilder();
|
||||
$container = ContainerBuilder::getContainer();
|
||||
$plugins[] = new $class(
|
||||
$container->get('relation'),
|
||||
$container->get('export'),
|
||||
|
||||
@ -4,8 +4,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Table;
|
||||
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Controllers\Table\StructureController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Html\Generator;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
@ -112,7 +112,7 @@ final class Indexes
|
||||
}
|
||||
|
||||
/** @var StructureController $controller */
|
||||
$controller = Core::getContainerBuilder()->get(StructureController::class);
|
||||
$controller = ContainerBuilder::getContainer()->get(StructureController::class);
|
||||
$controller($request);
|
||||
}
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Twig\AssetExtension;
|
||||
use PhpMyAdmin\Twig\CoreExtension;
|
||||
use PhpMyAdmin\Twig\Extensions\Node\TransNode;
|
||||
@ -61,7 +62,7 @@ class Template
|
||||
$loader = new FilesystemLoader(self::TEMPLATES_FOLDER);
|
||||
$twig = new Environment($loader, ['auto_reload' => true, 'cache' => $cacheDir]);
|
||||
|
||||
$twig->addRuntimeLoader(new ContainerRuntimeLoader(Core::getContainerBuilder()));
|
||||
$twig->addRuntimeLoader(new ContainerRuntimeLoader(ContainerBuilder::getContainer()));
|
||||
|
||||
if ($isDevEnv) {
|
||||
$twig->enableDebug();
|
||||
|
||||
@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Twig;
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Theme\ThemeManager;
|
||||
use Twig\Extension\AbstractExtension;
|
||||
use Twig\TwigFunction;
|
||||
@ -22,7 +22,7 @@ final class AssetExtension extends AbstractExtension
|
||||
public function getImagePath(string|null $filename = null, string|null $fallback = null): string
|
||||
{
|
||||
if ($this->themeManager === null) {
|
||||
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
|
||||
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
|
||||
if (! ($themeManager instanceof ThemeManager)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Http\Response;
|
||||
|
||||
use function __;
|
||||
@ -16,9 +17,7 @@ final class UrlRedirector
|
||||
{
|
||||
public static function redirect(string $url): Response
|
||||
{
|
||||
// Load database service because services.php is not available here
|
||||
$container = Core::getContainerBuilder();
|
||||
$container->set(DatabaseInterface::class, DatabaseInterface::getInstance());
|
||||
$container = ContainerBuilder::getContainer();
|
||||
|
||||
// Only output the http headers
|
||||
$response = ResponseRenderer::getInstance();
|
||||
|
||||
@ -7,7 +7,7 @@ namespace PhpMyAdmin\Tests;
|
||||
use PhpMyAdmin\Cache;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Dbal\DbiExtension;
|
||||
@ -15,7 +15,6 @@ use PhpMyAdmin\LanguageManager;
|
||||
use PhpMyAdmin\SqlParser\Translator;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PhpMyAdmin\Utils\HttpRequest;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use ReflectionClass;
|
||||
@ -84,55 +83,7 @@ abstract class AbstractTestCase extends TestCase
|
||||
Cache::purge();
|
||||
|
||||
(new ReflectionProperty(Relation::class, 'cache'))->setValue(null, null);
|
||||
Core::$containerBuilder = null;
|
||||
}
|
||||
|
||||
protected function loadDbiIntoContainerBuilder(): void
|
||||
{
|
||||
$containerBuilder = Core::getContainerBuilder();
|
||||
$containerBuilder->set(DatabaseInterface::class, DatabaseInterface::getInstance());
|
||||
$containerBuilder->setAlias('dbi', DatabaseInterface::class);
|
||||
}
|
||||
|
||||
protected function loadResponseIntoContainerBuilder(): void
|
||||
{
|
||||
$response = new ResponseRenderer();
|
||||
$containerBuilder = Core::getContainerBuilder();
|
||||
$containerBuilder->set(ResponseRenderer::class, $response);
|
||||
$containerBuilder->setAlias('response', ResponseRenderer::class);
|
||||
}
|
||||
|
||||
protected function getResponseHtmlResult(): string
|
||||
{
|
||||
/** @var ResponseRenderer $response */
|
||||
$response = Core::getContainerBuilder()->get(ResponseRenderer::class);
|
||||
|
||||
return $response->getHTMLResult();
|
||||
}
|
||||
|
||||
/** @return mixed[] */
|
||||
protected function getResponseJsonResult(): array
|
||||
{
|
||||
/** @var ResponseRenderer $response */
|
||||
$response = Core::getContainerBuilder()->get(ResponseRenderer::class);
|
||||
|
||||
return $response->getJSONResult();
|
||||
}
|
||||
|
||||
protected function assertResponseWasNotSuccessfull(): void
|
||||
{
|
||||
/** @var ResponseRenderer $response */
|
||||
$response = Core::getContainerBuilder()->get(ResponseRenderer::class);
|
||||
|
||||
$this->assertFalse($response->hasSuccessState(), 'expected the request to fail');
|
||||
}
|
||||
|
||||
protected function assertResponseWasSuccessfull(): void
|
||||
{
|
||||
/** @var ResponseRenderer $response */
|
||||
$response = Core::getContainerBuilder()->get(ResponseRenderer::class);
|
||||
|
||||
$this->assertTrue($response->hasSuccessState(), 'expected the request not to fail');
|
||||
ContainerBuilder::$container = null;
|
||||
}
|
||||
|
||||
protected function createDatabaseInterface(DbiExtension|null $extension = null): DatabaseInterface
|
||||
@ -185,7 +136,7 @@ abstract class AbstractTestCase extends TestCase
|
||||
*/
|
||||
protected function tearDown(): void
|
||||
{
|
||||
Core::$containerBuilder = null;
|
||||
ContainerBuilder::$container = null;
|
||||
DatabaseInterface::$instance = null;
|
||||
Config::$instance = null;
|
||||
(new ReflectionProperty(Template::class, 'twig'))->setValue(null, null);
|
||||
|
||||
@ -6,7 +6,7 @@ namespace PhpMyAdmin\Tests;
|
||||
|
||||
use PhpMyAdmin\Application;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\ErrorHandler;
|
||||
use PhpMyAdmin\Exceptions\ConfigException;
|
||||
use PhpMyAdmin\Http\Factory\ResponseFactory;
|
||||
@ -19,7 +19,7 @@ final class ApplicationTest extends AbstractTestCase
|
||||
{
|
||||
public function testInit(): void
|
||||
{
|
||||
$application = Core::getContainerBuilder()->get(Application::class);
|
||||
$application = ContainerBuilder::getContainer()->get(Application::class);
|
||||
self::assertInstanceOf(Application::class, $application);
|
||||
self::assertSame($application, Application::init());
|
||||
}
|
||||
|
||||
23
tests/classes/Container/ContainerBuilderTest.php
Normal file
23
tests/classes/Container/ContainerBuilderTest.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Tests\Container;
|
||||
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
#[CoversClass(ContainerBuilder::class)]
|
||||
final class ContainerBuilderTest extends TestCase
|
||||
{
|
||||
public function testGetContainer(): void
|
||||
{
|
||||
ContainerBuilder::$container = null;
|
||||
$container = ContainerBuilder::getContainer();
|
||||
self::assertSame($container, ContainerBuilder::getContainer());
|
||||
ContainerBuilder::$container = null;
|
||||
self::assertNotSame($container, ContainerBuilder::getContainer());
|
||||
ContainerBuilder::$container = null;
|
||||
}
|
||||
}
|
||||
@ -5,11 +5,12 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Tests\Controllers\Database\MultiTableQuery;
|
||||
|
||||
use PhpMyAdmin\Controllers\Database\MultiTableQuery\TablesController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\AbstractTestCase;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(TablesController::class)]
|
||||
@ -29,11 +30,7 @@ class TablesControllerTest extends AbstractTestCase
|
||||
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
|
||||
DatabaseInterface::$instance = $this->dbi;
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
}
|
||||
|
||||
public function testGetForeignKeyConstrainsForTable(): void
|
||||
@ -41,8 +38,9 @@ class TablesControllerTest extends AbstractTestCase
|
||||
$_GET['tables'] = ['table1', 'table2'];
|
||||
$_GET['db'] = 'test';
|
||||
|
||||
/** @var TablesController $multiTableQueryController */
|
||||
$multiTableQueryController = Core::getContainerBuilder()->get(TablesController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$multiTableQueryController = new TablesController($responseRenderer, new Template(), $this->dbi);
|
||||
|
||||
$request = $this->createStub(ServerRequest::class);
|
||||
$request->method('getQueryParam')->willReturn($_GET['tables'], $_GET['db']);
|
||||
$multiTableQueryController($request);
|
||||
@ -57,7 +55,7 @@ class TablesControllerTest extends AbstractTestCase
|
||||
],
|
||||
],
|
||||
],
|
||||
$this->getResponseJsonResult(),
|
||||
$responseRenderer->getJSONResult(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,6 @@ use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\PageSettings;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Controllers\Database\StructureController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\DbTableExists;
|
||||
@ -312,13 +311,20 @@ class StructureControllerTest extends AbstractTestCase
|
||||
*/
|
||||
public function testGetValuesForMroongaTable(): void
|
||||
{
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
Current::$database = 'testdb';
|
||||
Current::$table = 'mytable';
|
||||
|
||||
/** @var StructureController $structureController */
|
||||
$structureController = Core::getContainerBuilder()->get(StructureController::class);
|
||||
$dbi = DatabaseInterface::getInstance();
|
||||
$structureController = new StructureController(
|
||||
$this->response,
|
||||
$this->template,
|
||||
$this->relation,
|
||||
$this->replication,
|
||||
$dbi,
|
||||
$this->createStub(TrackingChecker::class),
|
||||
$this->createStub(PageSettings::class),
|
||||
new DbTableExists($dbi),
|
||||
);
|
||||
|
||||
$this->assertSame(
|
||||
[[], '', '', 0],
|
||||
|
||||
@ -50,8 +50,6 @@ class ExportControllerTest extends AbstractTestCase
|
||||
|
||||
public function testExportController(): void
|
||||
{
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['text_dir'] = 'ltr';
|
||||
$GLOBALS['lang'] = 'en';
|
||||
|
||||
@ -4,14 +4,22 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Tests\Controllers\Import;
|
||||
|
||||
use PhpMyAdmin\Bookmarks\BookmarkRepository;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\ConfigStorage\RelationCleanup;
|
||||
use PhpMyAdmin\Controllers\Import\ImportController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
use PhpMyAdmin\Import\Import;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\AbstractTestCase;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PhpMyAdmin\Transformations;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(ImportController::class)]
|
||||
@ -32,15 +40,11 @@ class ImportControllerTest extends AbstractTestCase
|
||||
|
||||
public function testIndexParametrized(): void
|
||||
{
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
parent::setLanguage();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
Config::getInstance()->selectedServer['user'] = 'user';
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
|
||||
// Some params were not added as they are not required for this test
|
||||
Current::$database = 'pma_test';
|
||||
Current::$table = 'table1';
|
||||
@ -79,23 +83,43 @@ class ImportControllerTest extends AbstractTestCase
|
||||
[],
|
||||
);
|
||||
|
||||
/** @var ImportController $importController */
|
||||
$importController = Core::getContainerBuilder()->get(ImportController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$relation = new Relation($this->dbi);
|
||||
$bookmarkRepository = new BookmarkRepository($this->dbi, $relation);
|
||||
$template = new Template();
|
||||
$sql = new Sql(
|
||||
$this->dbi,
|
||||
$relation,
|
||||
self::createStub(RelationCleanup::class),
|
||||
self::createStub(Operations::class),
|
||||
self::createStub(Transformations::class),
|
||||
$template,
|
||||
$bookmarkRepository,
|
||||
);
|
||||
|
||||
$importController = new ImportController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
new Import(),
|
||||
$sql,
|
||||
$this->dbi,
|
||||
$bookmarkRepository,
|
||||
);
|
||||
|
||||
$this->dummyDbi->addSelectDb('pma_test');
|
||||
$this->dummyDbi->addSelectDb('pma_test');
|
||||
$importController($request);
|
||||
$this->dummyDbi->assertAllSelectsConsumed();
|
||||
$this->assertResponseWasSuccessfull();
|
||||
self::assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'MySQL returned an empty result set (i.e. zero rows).',
|
||||
$this->getResponseHtmlResult(),
|
||||
);
|
||||
$output = $responseRenderer->getHTMLResult();
|
||||
|
||||
$this->assertStringContainsString('MySQL returned an empty result set (i.e. zero rows).', $output);
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'SELECT A.*' . "\n" . 'FROM table1 A' . "\n"
|
||||
. 'WHERE A.nomEtablissement = \'Saint-Louis - Châteaulin\' AND foo = 4 AND `:a` IS NULL',
|
||||
$this->getResponseHtmlResult(),
|
||||
$output,
|
||||
);
|
||||
|
||||
$this->dummyDbi->assertAllQueriesConsumed();
|
||||
|
||||
@ -5,13 +5,18 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Tests\Controllers;
|
||||
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\PageSettings;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Controllers\NavigationController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
use PhpMyAdmin\Navigation\Navigation;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\AbstractTestCase;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
use function sprintf;
|
||||
@ -34,8 +39,6 @@ class NavigationControllerTest extends AbstractTestCase
|
||||
|
||||
public function testIndex(): void
|
||||
{
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
parent::setLanguage();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
@ -44,8 +47,6 @@ class NavigationControllerTest extends AbstractTestCase
|
||||
$config->selectedServer['DisableIS'] = false;
|
||||
$config->selectedServer['auth_type'] = 'cookie';
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
|
||||
// This example path data has nothing to do with the actual test
|
||||
// root.air-balloon_burner_dev2
|
||||
$_POST['n0_aPath'] = 'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=';
|
||||
@ -122,17 +123,26 @@ class NavigationControllerTest extends AbstractTestCase
|
||||
[[0]],
|
||||
);
|
||||
|
||||
/** @var NavigationController $navigationController */
|
||||
$navigationController = Core::getContainerBuilder()->get(NavigationController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$template = new Template();
|
||||
$relation = new Relation($this->dbi);
|
||||
$navigationController = new NavigationController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
new Navigation($template, $relation, $this->dbi),
|
||||
$relation,
|
||||
new PageSettings(new UserPreferences($this->dbi, $relation, $template)),
|
||||
);
|
||||
|
||||
$_POST['full'] = '1';
|
||||
|
||||
$request = $this->createStub(ServerRequest::class);
|
||||
$request->method('isAjax')->willReturn(true);
|
||||
|
||||
$navigationController($request);
|
||||
$this->assertResponseWasSuccessfull();
|
||||
$this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
|
||||
|
||||
$responseMessage = $this->getResponseJsonResult()['message'];
|
||||
$responseMessage = $responseRenderer->getJSONResult()['message'];
|
||||
|
||||
$this->assertStringContainsString('<div id=\'pma_navigation_tree_content\'>', $responseMessage);
|
||||
|
||||
@ -182,8 +192,6 @@ class NavigationControllerTest extends AbstractTestCase
|
||||
|
||||
public function testIndexWithPosAndValue(): void
|
||||
{
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
parent::setLanguage();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
@ -192,8 +200,6 @@ class NavigationControllerTest extends AbstractTestCase
|
||||
$config->selectedServer['DisableIS'] = false;
|
||||
$config->selectedServer['auth_type'] = 'cookie';
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
|
||||
// root.air-balloon_burner_dev2
|
||||
$_POST['n0_aPath'] = 'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=';
|
||||
// root.air-balloon.burner_dev2
|
||||
@ -272,17 +278,26 @@ class NavigationControllerTest extends AbstractTestCase
|
||||
[[0]],
|
||||
);
|
||||
|
||||
/** @var NavigationController $navigationController */
|
||||
$navigationController = Core::getContainerBuilder()->get(NavigationController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$template = new Template();
|
||||
$relation = new Relation($this->dbi);
|
||||
$navigationController = new NavigationController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
new Navigation($template, $relation, $this->dbi),
|
||||
$relation,
|
||||
new PageSettings(new UserPreferences($this->dbi, $relation, $template)),
|
||||
);
|
||||
|
||||
$_POST['full'] = '1';
|
||||
|
||||
$request = $this->createStub(ServerRequest::class);
|
||||
$request->method('isAjax')->willReturn(true);
|
||||
|
||||
$navigationController($request);
|
||||
$this->assertResponseWasSuccessfull();
|
||||
$this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
|
||||
|
||||
$responseMessage = $this->getResponseJsonResult()['message'];
|
||||
$responseMessage = $responseRenderer->getJSONResult()['message'];
|
||||
|
||||
$this->assertStringContainsString('<div id=\'pma_navigation_tree_content\'>', $responseMessage);
|
||||
|
||||
|
||||
@ -33,12 +33,8 @@ class MainControllerTest extends AbstractTestCase
|
||||
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
|
||||
DatabaseInterface::$instance = $this->dbi;
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
|
||||
Current::$database = 'my_db';
|
||||
Current::$table = 'test_tbl';
|
||||
}
|
||||
|
||||
@ -5,16 +5,20 @@ declare(strict_types=1);
|
||||
namespace PhpMyAdmin\Tests\Controllers\Operations;
|
||||
|
||||
use PhpMyAdmin\Charsets;
|
||||
use PhpMyAdmin\CheckUserPrivileges;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\Controllers\Operations\TableController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\DbTableExists;
|
||||
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\StorageEngine;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\AbstractTestCase;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(TableController::class)]
|
||||
@ -45,9 +49,6 @@ class TableControllerTest extends AbstractTestCase
|
||||
$config->selectServer('1');
|
||||
$config->settings['MaxDbList'] = 0;
|
||||
|
||||
$this->loadDbiIntoContainerBuilder();
|
||||
$this->loadResponseIntoContainerBuilder();
|
||||
|
||||
$this->dummyDbi->addResult(
|
||||
'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`',
|
||||
[['test_db']],
|
||||
@ -121,10 +122,19 @@ class TableControllerTest extends AbstractTestCase
|
||||
$request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/')
|
||||
->withQueryParams(['db' => 'test_db', 'table' => 'test_table']);
|
||||
|
||||
/** @var TableController $controller */
|
||||
$controller = Core::getContainerBuilder()->get(TableController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$relation = new Relation($this->dbi);
|
||||
$controller = new TableController(
|
||||
$responseRenderer,
|
||||
new Template($config),
|
||||
new Operations($this->dbi, $relation),
|
||||
new CheckUserPrivileges($this->dbi),
|
||||
$relation,
|
||||
$this->dbi,
|
||||
new DbTableExists($this->dbi),
|
||||
);
|
||||
$controller($request);
|
||||
|
||||
$this->assertEquals($expectedOutput, $this->getResponseHtmlResult());
|
||||
$this->assertEquals($expectedOutput, $responseRenderer->getHTMLResult());
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,13 +4,21 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Tests\Controllers\Sql;
|
||||
|
||||
use PhpMyAdmin\Bookmarks\BookmarkRepository;
|
||||
use PhpMyAdmin\CheckUserPrivileges;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\ConfigStorage\RelationCleanup;
|
||||
use PhpMyAdmin\Controllers\Sql\EnumValuesController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\AbstractTestCase;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PhpMyAdmin\Transformations;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(EnumValuesController::class)]
|
||||
@ -28,12 +36,8 @@ class EnumValuesControllerTest extends AbstractTestCase
|
||||
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
|
||||
DatabaseInterface::$instance = $this->dbi;
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['text_dir'] = 'ltr';
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
}
|
||||
|
||||
public function testGetEnumValuesError(): void
|
||||
@ -52,16 +56,31 @@ class EnumValuesControllerTest extends AbstractTestCase
|
||||
['curr_value', null, 'b&c'],
|
||||
]);
|
||||
|
||||
/** @var EnumValuesController $sqlController */
|
||||
$sqlController = Core::getContainerBuilder()->get(EnumValuesController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$template = new Template();
|
||||
$relation = new Relation($this->dbi);
|
||||
$bookmarkRepository = new BookmarkRepository($this->dbi, $relation);
|
||||
$sql = new Sql(
|
||||
$this->dbi,
|
||||
$relation,
|
||||
self::createStub(RelationCleanup::class),
|
||||
self::createStub(Operations::class),
|
||||
self::createStub(Transformations::class),
|
||||
$template,
|
||||
$bookmarkRepository,
|
||||
);
|
||||
|
||||
$sqlController = new EnumValuesController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
$sql,
|
||||
new CheckUserPrivileges($this->dbi),
|
||||
);
|
||||
$sqlController($request);
|
||||
|
||||
$this->assertResponseWasNotSuccessfull();
|
||||
$this->assertFalse($responseRenderer->hasSuccessState(), 'expected the request to fail');
|
||||
|
||||
$this->assertSame(
|
||||
['message' => 'Error in processing request'],
|
||||
$this->getResponseJsonResult(),
|
||||
);
|
||||
$this->assertSame(['message' => 'Error in processing request'], $responseRenderer->getJSONResult());
|
||||
}
|
||||
|
||||
public function testGetEnumValuesSuccess(): void
|
||||
@ -93,11 +112,29 @@ class EnumValuesControllerTest extends AbstractTestCase
|
||||
['curr_value', null, 'b&c'],
|
||||
]);
|
||||
|
||||
/** @var EnumValuesController $sqlController */
|
||||
$sqlController = Core::getContainerBuilder()->get(EnumValuesController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$template = new Template();
|
||||
$relation = new Relation($this->dbi);
|
||||
$bookmarkRepository = new BookmarkRepository($this->dbi, $relation);
|
||||
$sql = new Sql(
|
||||
$this->dbi,
|
||||
$relation,
|
||||
self::createStub(RelationCleanup::class),
|
||||
self::createStub(Operations::class),
|
||||
self::createStub(Transformations::class),
|
||||
$template,
|
||||
$bookmarkRepository,
|
||||
);
|
||||
|
||||
$sqlController = new EnumValuesController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
$sql,
|
||||
new CheckUserPrivileges($this->dbi),
|
||||
);
|
||||
$sqlController($request);
|
||||
|
||||
$this->assertResponseWasSuccessfull();
|
||||
$this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
|
||||
|
||||
$this->assertSame(
|
||||
[
|
||||
@ -114,7 +151,7 @@ class EnumValuesControllerTest extends AbstractTestCase
|
||||
. ' <option value=""\'">"\'</option>' . "\n"
|
||||
. ' </select>' . "\n",
|
||||
],
|
||||
$this->getResponseJsonResult(),
|
||||
$responseRenderer->getJSONResult(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,13 +4,21 @@ declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\Tests\Controllers\Sql;
|
||||
|
||||
use PhpMyAdmin\Bookmarks\BookmarkRepository;
|
||||
use PhpMyAdmin\CheckUserPrivileges;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\ConfigStorage\RelationCleanup;
|
||||
use PhpMyAdmin\Controllers\Sql\SetValuesController;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Current;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Http\ServerRequest;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Tests\AbstractTestCase;
|
||||
use PhpMyAdmin\Tests\Stubs\DbiDummy;
|
||||
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
|
||||
use PhpMyAdmin\Transformations;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(SetValuesController::class)]
|
||||
@ -28,12 +36,8 @@ class SetValuesControllerTest extends AbstractTestCase
|
||||
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
|
||||
DatabaseInterface::$instance = $this->dbi;
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['text_dir'] = 'ltr';
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
}
|
||||
|
||||
public function testError(): void
|
||||
@ -53,16 +57,31 @@ class SetValuesControllerTest extends AbstractTestCase
|
||||
Current::$database = 'cvv';
|
||||
Current::$table = 'enums';
|
||||
|
||||
/** @var SetValuesController $sqlController */
|
||||
$sqlController = Core::getContainerBuilder()->get(SetValuesController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$template = new Template();
|
||||
$relation = new Relation($this->dbi);
|
||||
$bookmarkRepository = new BookmarkRepository($this->dbi, $relation);
|
||||
$sql = new Sql(
|
||||
$this->dbi,
|
||||
$relation,
|
||||
self::createStub(RelationCleanup::class),
|
||||
self::createStub(Operations::class),
|
||||
self::createStub(Transformations::class),
|
||||
$template,
|
||||
$bookmarkRepository,
|
||||
);
|
||||
|
||||
$sqlController = new SetValuesController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
$sql,
|
||||
new CheckUserPrivileges($this->dbi),
|
||||
);
|
||||
$sqlController($request);
|
||||
|
||||
$this->assertResponseWasNotSuccessfull();
|
||||
$this->assertFalse($responseRenderer->hasSuccessState(), 'expected the request to fail');
|
||||
|
||||
$this->assertSame(
|
||||
['message' => 'Error in processing request'],
|
||||
$this->getResponseJsonResult(),
|
||||
);
|
||||
$this->assertSame(['message' => 'Error in processing request'], $responseRenderer->getJSONResult());
|
||||
}
|
||||
|
||||
public function testSuccess(): void
|
||||
@ -95,11 +114,29 @@ class SetValuesControllerTest extends AbstractTestCase
|
||||
Current::$database = 'cvv';
|
||||
Current::$table = 'enums';
|
||||
|
||||
/** @var SetValuesController $sqlController */
|
||||
$sqlController = Core::getContainerBuilder()->get(SetValuesController::class);
|
||||
$responseRenderer = new ResponseRenderer();
|
||||
$template = new Template();
|
||||
$relation = new Relation($this->dbi);
|
||||
$bookmarkRepository = new BookmarkRepository($this->dbi, $relation);
|
||||
$sql = new Sql(
|
||||
$this->dbi,
|
||||
$relation,
|
||||
self::createStub(RelationCleanup::class),
|
||||
self::createStub(Operations::class),
|
||||
self::createStub(Transformations::class),
|
||||
$template,
|
||||
$bookmarkRepository,
|
||||
);
|
||||
|
||||
$sqlController = new SetValuesController(
|
||||
$responseRenderer,
|
||||
$template,
|
||||
$sql,
|
||||
new CheckUserPrivileges($this->dbi),
|
||||
);
|
||||
$sqlController($request);
|
||||
|
||||
$this->assertResponseWasSuccessfull();
|
||||
$this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
|
||||
|
||||
$this->assertSame(
|
||||
[
|
||||
@ -112,7 +149,7 @@ class SetValuesControllerTest extends AbstractTestCase
|
||||
. ' <option value=""></option>' . "\n"
|
||||
. ' </select>' . "\n",
|
||||
],
|
||||
$this->getResponseJsonResult(),
|
||||
$responseRenderer->getJSONResult(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,8 +40,6 @@ class ExportControllerTest extends AbstractTestCase
|
||||
|
||||
public function testExportController(): void
|
||||
{
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
Current::$database = 'test_db';
|
||||
Current::$table = 'test_table';
|
||||
$config = Config::getInstance();
|
||||
|
||||
@ -125,10 +125,6 @@ class SearchControllerTest extends AbstractTestCase
|
||||
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
|
||||
DatabaseInterface::$instance = $this->dbi;
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
parent::loadResponseIntoContainerBuilder();
|
||||
|
||||
$_SESSION[' HMAC_secret '] = hash('sha1', 'test');
|
||||
|
||||
$this->dummyDbi->addResult(
|
||||
@ -151,8 +147,14 @@ class SearchControllerTest extends AbstractTestCase
|
||||
],
|
||||
);
|
||||
|
||||
/** @var SearchController $ctrl */
|
||||
$ctrl = Core::getContainerBuilder()->get(SearchController::class);
|
||||
$ctrl = new SearchController(
|
||||
$this->response,
|
||||
$this->template,
|
||||
new Search($this->dbi),
|
||||
new Relation($this->dbi),
|
||||
$this->dbi,
|
||||
new DbTableExists($this->dbi),
|
||||
);
|
||||
|
||||
$_POST['db'] = 'PMA';
|
||||
$_POST['table'] = 'PMA_BookMark';
|
||||
@ -161,7 +163,7 @@ class SearchControllerTest extends AbstractTestCase
|
||||
$expected = ['col1' => 1, 'col2' => 2];
|
||||
$ctrl->getDataRowAction();
|
||||
|
||||
$json = $this->getResponseJsonResult();
|
||||
$json = $this->response->getJSONResult();
|
||||
$this->assertEquals($expected, $json['row_info']);
|
||||
}
|
||||
}
|
||||
|
||||
@ -732,14 +732,4 @@ class CoreTest extends AbstractTestCase
|
||||
|
||||
self::assertSame('', Core::getEnv('PHPMYADMIN_GET_ENV_TEST'));
|
||||
}
|
||||
|
||||
public function testGetContainerBuilder(): void
|
||||
{
|
||||
Core::$containerBuilder = null;
|
||||
$containerBuilder = Core::getContainerBuilder();
|
||||
self::assertSame($containerBuilder, Core::getContainerBuilder());
|
||||
Core::$containerBuilder = null;
|
||||
self::assertNotSame($containerBuilder, Core::getContainerBuilder());
|
||||
Core::$containerBuilder = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,8 +32,6 @@ class OptionsTest extends AbstractTestCase
|
||||
$dbi = $this->createDatabaseInterface();
|
||||
DatabaseInterface::$instance = $dbi;
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['server'] = 0;
|
||||
|
||||
Current::$table = 'table';
|
||||
|
||||
@ -21,8 +21,6 @@ class PluginsTest extends AbstractTestCase
|
||||
parent::setUp();
|
||||
|
||||
DatabaseInterface::$instance = $this->createDatabaseInterface();
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
}
|
||||
|
||||
public function testGetExport(): void
|
||||
|
||||
@ -1436,8 +1436,6 @@ class TableTest extends AbstractTestCase
|
||||
'utf8mb4_unicode_ci',
|
||||
]);
|
||||
|
||||
$this->loadDbiIntoContainerBuilder();
|
||||
|
||||
$GLOBALS['sql_query'] = '';
|
||||
$return = Table::moveCopy('aa', 'ad', 'bb', 'ad', 'structure', true, 'db_copy', true);
|
||||
$this->assertTrue($return);
|
||||
|
||||
@ -33,8 +33,6 @@ class TrackerTest extends AbstractTestCase
|
||||
|
||||
DatabaseInterface::$instance = $this->createDatabaseInterface();
|
||||
|
||||
parent::loadDbiIntoContainerBuilder();
|
||||
|
||||
/**
|
||||
* SET these to avoid undefined index error
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user