Internal: Add ContainerHelper to inject dependencies in legacy container

pull/5329/head
Angel Fernando Quiroz Campos 2 years ago
parent 35d2f87bff
commit c37a19102d
  1. 8
      config/services.yaml
  2. 3
      public/main/auth/inscription.php
  3. 16
      public/main/inc/global.inc.php
  4. 3
      src/CoreBundle/DataFixtures/AccessUserUrlFixtures.php
  5. 2
      src/CoreBundle/EventListener/LegacyListener.php
  6. 49
      src/CoreBundle/Framework/Container.php
  7. 72
      src/CoreBundle/ServiceHelper/ContainerHelper.php
  8. 8
      tests/ChamiloTestTrait.php

@ -94,6 +94,14 @@ services:
tags:
- name: security.voter
Chamilo\CoreBundle\ServiceHelper\ContainerHelper:
calls:
- setAuthorizationChecker: [ '@security.authorization_checker' ]
- setTokenStorage: [ '@security.token_storage' ]
- setKernel: [ '@kernel' ]
- setMessengerBus: [ '@messenger.bus.default' ]
- setValidator: [ '@validator' ]
cocur_slugify:
lowercase: true

@ -2,6 +2,7 @@
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\ServiceHelper\ContainerHelper;
use ChamiloSession as Session;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
@ -1140,7 +1141,7 @@ if ($form->validate()) {
$roles = $userEntity->getRoles();
$token = new UsernamePasswordToken($userEntity, null, $providerKey, $roles);
$container->get('security.token_storage')->setToken($token);
$container->get(ContainerHelper::class)->getTokenStorage()->setToken($token);
$container->get('session')->set('_security_' . $providerKey, serialize($token));
$session = $container->get('session');
$userData = [

@ -42,20 +42,18 @@ $request = Request::createFromGlobals();
// and not called from a symfony controller from public/
$request->request->set('load_legacy', true);
$currentBaseUrl = $request->getBaseUrl();
$kernel->boot();
$currentUri = $request->getRequestUri();
if (empty($currentBaseUrl)) {
$currentBaseUrl = $request->getSchemeAndHttpHost() . $request->getBasePath();
}
$response = $kernel->handle($request, HttpKernelInterface::MAIN_REQUEST, false);
$container = $kernel->getContainer();
$router = $container->get('router');
$context = $router->getContext();
$router->setContext($context);
/** @var FlashBag $flashBag */
$flashBag = $container->get('session')->getFlashBag();
$saveFlashBag = !empty($flashBag->keys()) ? $flashBag->all() : null;
$response = $kernel->handle($request, HttpKernelInterface::MAIN_REQUEST, false);
$context = Container::getRouter()->getContext();
$isCli = 'cli' === php_sapi_name();
@ -70,6 +68,8 @@ if ($isCli) {
if ($isCli && $baseUrl) {
$context->setBaseUrl($baseUrl);
} else {
$currentUri = $request->getRequestUri();
$fullUrl = $currentBaseUrl . $currentUri;
$posMain = strpos($fullUrl, '/main');
$posPlugin = strpos($fullUrl, '/plugin');
@ -110,6 +110,10 @@ try {
$container->get('request_stack')->push($request);
$container->get('translator')->setLocale($request->getLocale());
/** @var FlashBag $flashBag */
$flashBag = $request->getSession()->getFlashBag();
$saveFlashBag = !empty($flashBag->keys()) ? $flashBag->all() : null;
if (!empty($saveFlashBag)) {
foreach ($saveFlashBag as $typeMessage => $messageList) {
foreach ($messageList as $message) {

@ -8,6 +8,7 @@ namespace Chamilo\CoreBundle\DataFixtures;
use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\ServiceHelper\ContainerHelper;
use Chamilo\CoreBundle\Settings\SettingsManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
@ -25,7 +26,7 @@ class AccessUserUrlFixtures extends Fixture implements ContainerAwareInterface
public function setContainer(?ContainerInterface $container = null): void
{
$this->tokenStorage = $container->get('security.token_storage');
$this->tokenStorage = $container->get(ContainerHelper::class)->getTokenStorage();
$this->settingsManager = $container->get(SettingsManager::class);
}

@ -173,7 +173,7 @@ class LegacyListener implements EventSubscriberInterface
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 7],
KernelEvents::REQUEST => 'onKernelRequest',
KernelEvents::RESPONSE => 'onKernelResponse',
KernelEvents::CONTROLLER => 'onKernelController',
];

@ -40,6 +40,7 @@ use Chamilo\CoreBundle\Repository\TrackEDownloadsRepository;
use Chamilo\CoreBundle\Repository\TrackEExerciseRepository;
use Chamilo\CoreBundle\Repository\TrackELoginRecordRepository;
use Chamilo\CoreBundle\Serializer\UserToJsonNormalizer;
use Chamilo\CoreBundle\ServiceHelper\ContainerHelper;
use Chamilo\CoreBundle\Settings\SettingsManager;
use Chamilo\CoreBundle\Tool\ToolChain;
use Chamilo\CourseBundle\Repository\CAnnouncementAttachmentRepository;
@ -90,10 +91,11 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionInterface as HttpSessionInterface;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Router;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Translation\Translator;
use Twig\Environment;
use UnitEnum;
@ -125,47 +127,46 @@ class Container
return false;
}
public static function getLegacyHelper(): ContainerHelper
{
return self::$container->get(ContainerHelper::class);
}
public static function getEnvironment(): string
{
return self::$container->get('kernel')->getEnvironment();
return self::getLegacyHelper()->getKernel()->getEnvironment();
}
public static function getLogDir(): string
{
return self::$container->get('kernel')->getLogDir();
return self::getLegacyHelper()->getKernel()->getLogDir();
}
public static function getCacheDir(): string
{
return self::$container->get('kernel')->getCacheDir().'/';
return self::getLegacyHelper()->getKernel()->getCacheDir().'/';
}
/**
* @return string
*/
public static function getProjectDir()
public static function getProjectDir(): string
{
if (null !== self::$container) {
return self::$container->get('kernel')->getProjectDir().'/';
return self::getLegacyHelper()->getKernel()->getProjectDir().'/';
}
return str_replace('\\', '/', realpath(__DIR__.'/../../../')).'/';
}
/**
* @return bool
*/
public static function isInstalled()
public static function isInstalled(): bool
{
return self::$container->get('kernel')->isInstalled();
return self::getLegacyHelper()->getKernel()->isInstalled();
}
public static function getMessengerBus()
public static function getMessengerBus(): MessageBusInterface
{
return self::$container->get('messenger.bus.default');
return self::getLegacyHelper()->getMessengerBus();
}
public static function getTwig()
public static function getTwig(): Environment
{
return self::$twig;
}
@ -217,20 +218,17 @@ class Container
self::$session = $session;
}
/**
* @return AuthorizationChecker
*/
public static function getAuthorizationChecker()
public static function getAuthorizationChecker(): AuthorizationCheckerInterface
{
return self::$container->get('security.authorization_checker');
return self::getLegacyHelper()->getAuthorizationChecker();
}
/**
* @return TokenStorage|TokenStorageInterface
*/
public static function getTokenStorage()
public static function getTokenStorage(): TokenStorageInterface|TokenStorage
{
return self::$container->get('security.token_storage');
return self::getLegacyHelper()->getTokenStorage();
}
public static function getMailer(): Mailer
@ -606,9 +604,6 @@ class Container
return self::$container->get('form.factory');
}
/**
* @param string $type error|success|warning|danger
*/
public static function addFlash(string $message, string $type = 'success'): void
{
$type = match ($type) {

@ -0,0 +1,72 @@
<?php
/* For licensing terms, see /license.txt */
declare(strict_types=1);
namespace Chamilo\CoreBundle\ServiceHelper;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class ContainerHelper
{
private AuthorizationCheckerInterface $authorizationChecker;
private TokenStorageInterface $tokenStorage;
private KernelInterface $kernel;
private MessageBusInterface $messengerBus;
private ValidatorInterface $validator;
public function getAuthorizationChecker(): AuthorizationCheckerInterface
{
return $this->authorizationChecker;
}
public function setAuthorizationChecker(AuthorizationCheckerInterface $authorizationChecker): void
{
$this->authorizationChecker = $authorizationChecker;
}
public function getTokenStorage(): TokenStorageInterface
{
return $this->tokenStorage;
}
public function setTokenStorage(TokenStorageInterface $tokenStorage): void
{
$this->tokenStorage = $tokenStorage;
}
public function getKernel(): KernelInterface
{
return $this->kernel;
}
public function setKernel(KernelInterface $kernel): void
{
$this->kernel = $kernel;
}
public function getMessengerBus(): MessageBusInterface
{
return $this->messengerBus;
}
public function setMessengerBus(MessageBusInterface $messengerBus): void
{
$this->messengerBus = $messengerBus;
}
public function getValidator(): ValidatorInterface
{
return $this->validator;
}
public function setValidator(ValidatorInterface $validator): void
{
$this->validator = $validator;
}
}

@ -11,8 +11,10 @@ use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
use Chamilo\CoreBundle\Repository\Node\UserRepository;
use Chamilo\CoreBundle\Repository\SessionRepository;
use Chamilo\CoreBundle\ServiceHelper\ContainerHelper;
use Chamilo\CourseBundle\Entity\CGroup;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
@ -208,8 +210,10 @@ trait ChamiloTestTrait
public function getViolations($entity)
{
/** @var ValidatorInterface $validator */
$validator = static::$kernel->getContainer()->get('validator');
/** @var ContainerHelper $containerHelper */
$containerHelper = static::$kernel->getContainer()->get(ContainerHelper::class);
$validator = $containerHelper->getValidator();
/** @var ConstraintViolationList $errors */
return $validator->validate($entity);

Loading…
Cancel
Save