From c37a19102dc16785cf8aa4817dd8afc64bedef5d Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 4 Apr 2024 18:19:40 -0500 Subject: [PATCH] Internal: Add ContainerHelper to inject dependencies in legacy container --- config/services.yaml | 8 +++ public/main/auth/inscription.php | 3 +- public/main/inc/global.inc.php | 16 +++-- .../DataFixtures/AccessUserUrlFixtures.php | 3 +- .../EventListener/LegacyListener.php | 2 +- src/CoreBundle/Framework/Container.php | 49 ++++++------- .../ServiceHelper/ContainerHelper.php | 72 +++++++++++++++++++ tests/ChamiloTestTrait.php | 8 ++- 8 files changed, 123 insertions(+), 38 deletions(-) create mode 100644 src/CoreBundle/ServiceHelper/ContainerHelper.php diff --git a/config/services.yaml b/config/services.yaml index 789f0e42b3..79fe03557d 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -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 diff --git a/public/main/auth/inscription.php b/public/main/auth/inscription.php index 8852bf1668..7ce74b38d6 100644 --- a/public/main/auth/inscription.php +++ b/public/main/auth/inscription.php @@ -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 = [ diff --git a/public/main/inc/global.inc.php b/public/main/inc/global.inc.php index 6bfb270387..02685fb093 100644 --- a/public/main/inc/global.inc.php +++ b/public/main/inc/global.inc.php @@ -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) { diff --git a/src/CoreBundle/DataFixtures/AccessUserUrlFixtures.php b/src/CoreBundle/DataFixtures/AccessUserUrlFixtures.php index 88e085de3f..a24becde49 100644 --- a/src/CoreBundle/DataFixtures/AccessUserUrlFixtures.php +++ b/src/CoreBundle/DataFixtures/AccessUserUrlFixtures.php @@ -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); } diff --git a/src/CoreBundle/EventListener/LegacyListener.php b/src/CoreBundle/EventListener/LegacyListener.php index 6c42d0c3a5..6df99d4266 100644 --- a/src/CoreBundle/EventListener/LegacyListener.php +++ b/src/CoreBundle/EventListener/LegacyListener.php @@ -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', ]; diff --git a/src/CoreBundle/Framework/Container.php b/src/CoreBundle/Framework/Container.php index 9da96ec23f..fb1e8c88b0 100644 --- a/src/CoreBundle/Framework/Container.php +++ b/src/CoreBundle/Framework/Container.php @@ -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) { diff --git a/src/CoreBundle/ServiceHelper/ContainerHelper.php b/src/CoreBundle/ServiceHelper/ContainerHelper.php new file mode 100644 index 0000000000..b30e77e930 --- /dev/null +++ b/src/CoreBundle/ServiceHelper/ContainerHelper.php @@ -0,0 +1,72 @@ +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; + } +} diff --git a/tests/ChamiloTestTrait.php b/tests/ChamiloTestTrait.php index bef96c15db..4a1356042c 100644 --- a/tests/ChamiloTestTrait.php +++ b/tests/ChamiloTestTrait.php @@ -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);