]> Raphaƫl G. Git Repositories - userbundle/blobdiff - Controller/AbstractController.php
Remove guestid and guestgroup in favour of more reliable defaultgroup
[userbundle] / Controller / AbstractController.php
index d6f34a2936c475a3296d6d7fc2cb5d83937cb8eb..77cf860f4d59bcc66dc67fefd4ddb2e384d3fff4 100644 (file)
@@ -13,11 +13,18 @@ namespace Rapsys\UserBundle\Controller;
 
 use Doctrine\ORM\EntityManagerInterface;
 use Doctrine\Persistence\ManagerRegistry;
+
+use Rapsys\PackBundle\Util\SluggerUtil;
+
+use Rapsys\UserBundle\RapsysUserBundle;
+
+use Psr\Container\ContainerInterface;
 use Psr\Log\LoggerInterface;
+
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as BaseAbstractController;
 use Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait;
 use Symfony\Bundle\SecurityBundle\Security;
-use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Form\FormFactoryInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\HttpFoundation\Response;
@@ -27,20 +34,23 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 use Symfony\Component\Routing\RouterInterface;
 use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
 use Symfony\Component\Security\Core\User\UserInterface;
+use Symfony\Contracts\Cache\CacheInterface;
 use Symfony\Contracts\Service\ServiceSubscriberInterface;
 use Symfony\Contracts\Translation\TranslatorInterface;
-use Twig\Environment;
 
-use Rapsys\PackBundle\Util\SluggerUtil;
-
-use Rapsys\UserBundle\RapsysUserBundle;
+use Twig\Environment;
 
 /**
- * Provides common features needed in controllers.
- *
  * {@inheritdoc}
+ *
+ * Provides common features needed in controllers.
  */
 abstract class AbstractController extends BaseAbstractController implements ServiceSubscriberInterface {
+       /**
+        * Alias string
+        */
+       protected string $alias;
+
        /**
         * Config array
         */
@@ -51,11 +61,6 @@ abstract class AbstractController extends BaseAbstractController implements Serv
         */
        protected array $context;
 
-       /**
-        * Limit integer
-        */
-       protected int $limit;
-
        /**
         * Locale string
         */
@@ -66,72 +71,19 @@ abstract class AbstractController extends BaseAbstractController implements Serv
         */
        protected int $page;
 
-       /**
-        * AuthorizationCheckerInterface instance
-        */
-       protected AuthorizationCheckerInterface $checker;
-
-       /**
-        * ManagerRegistry instance
-        */
-       protected ManagerRegistry $doctrine;
-
-       /**
-        * UserPasswordHasherInterface instance
-        */
-       protected UserPasswordHasherInterface $hasher;
-
-       /**
-        * LoggerInterface instance
-        */
-       protected LoggerInterface $logger;
-
-       /**
-        * MailerInterface instance
-        */
-       protected MailerInterface $mailer;
-
-       /**
-        * EntityManagerInterface instance
-        */
-       protected EntityManagerInterface $manager;
-
        /**
         * Request instance
         */
        protected Request $request;
 
-       /**
-        * Router instance
-        */
-       protected RouterInterface $router;
-
-       /**
-        * Security instance
-        */
-       protected Security $security;
-
-       /**
-        * Slugger util instance
-        */
-       protected SluggerUtil $slugger;
-
-       /**
-        * Translator instance
-        */
-       protected TranslatorInterface $translator;
-
-       /**
-        * Twig\Environment instance
-        */
-       protected Environment $twig;
-
        /**
         * Abstract constructor
         *
+        * @param CacheInterface $cache The cache instance
         * @param AuthorizationCheckerInterface $checker The checker instance
         * @param ContainerInterface $container The container instance
         * @param ManagerRegistry $doctrine The doctrine instance
+        * @param FormFactoryInterface $factory The factory instance
         * @param UserPasswordHasherInterface $hasher The password hasher instance
         * @param LoggerInterface $logger The logger instance
         * @param MailerInterface $mailer The mailer instance
@@ -144,48 +96,9 @@ abstract class AbstractController extends BaseAbstractController implements Serv
         * @param Environment $twig The twig environment instance
         * @param integer $limit The page limit
         */
-       public function __construct(AuthorizationCheckerInterface $checker, ContainerInterface $container, ManagerRegistry $doctrine, UserPasswordHasherInterface $hasher, LoggerInterface $logger, MailerInterface $mailer, EntityManagerInterface $manager, RouterInterface $router, Security $security, SluggerUtil $slugger, RequestStack $stack, TranslatorInterface $translator, Environment $twig, int $limit = 5) {
+       public function __construct(protected CacheInterface $cache, protected AuthorizationCheckerInterface $checker, protected ContainerInterface $container, protected ManagerRegistry $doctrine, protected FormFactoryInterface $factory, protected UserPasswordHasherInterface $hasher, protected LoggerInterface $logger, protected MailerInterface $mailer, protected EntityManagerInterface $manager, protected RouterInterface $router, protected Security $security, protected SluggerUtil $slugger, protected RequestStack $stack, protected TranslatorInterface $translator, protected Environment $twig, protected int $limit = 5) {
                //Retrieve config
-               $this->config = $container->getParameter(RapsysUserBundle::getAlias());
-
-               //Set checker
-               $this->checker = $checker;
-
-               //Set container
-               $this->container = $container;
-
-               //Set doctrine
-               $this->doctrine = $doctrine;
-
-               //Set hasher
-               $this->hasher = $hasher;
-
-               //Set logger
-               $this->logger = $logger;
-
-               //Set limit
-               $this->limit = $limit;
-
-               //Set mailer
-               $this->mailer = $mailer;
-
-               //Set manager
-               $this->manager = $manager;
-
-               //Set router
-               $this->router = $router;
-
-               //Set security
-               $this->security = $security;
-
-               //Set slugger
-               $this->slugger = $slugger;
-
-               //Set translator
-               $this->translator = $translator;
-
-               //Set twig
-               $this->twig = $twig;
+               $this->config = $container->getParameter($this->alias = RapsysUserBundle::getAlias());
 
                //Get current request
                $this->request = $stack->getCurrentRequest();
@@ -290,7 +203,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                                                }
 
                                                                //Translate tmp value
-                                                               $tmp = $this->translator->trans($tmp);
+                                                               $tmp = $this->translator->trans($tmp, [], $this->alias);
 
                                                                //Iterate on keys
                                                                foreach(array_reverse($keys) as $curkey) {
@@ -309,13 +222,13 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                                        $pathInfo = $this->router->getContext()->getPathInfo();
 
                                                        //Iterate on locales excluding current one
-                                                       foreach(($locales = array_keys($this->config['languages'])) as $locale) {
+                                                       foreach(($locales = array_keys($this->config['default']['languages'])) as $locale) {
                                                                //Set titles
                                                                $titles = [];
 
                                                                //Iterate on other locales
                                                                foreach(array_diff($locales, [$locale]) as $other) {
-                                                                       $titles[$other] = $this->translator->trans($this->config['languages'][$locale], [], null, $other);
+                                                                       $titles[$other] = $this->translator->trans($this->config['default']['languages'][$locale], [], $this->alias, $other);
                                                                }
 
                                                                //Retrieve route matching path
@@ -330,25 +243,26 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                                                //With current locale
                                                                if ($locale == $this->locale) {
                                                                        //Set locale locales context
-                                                                       $this->config[$tag][$view]['context']['head']['canonical'] = $this->router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL);
+                                                                       $this->config[$tag][$view]['context']['canonical'] = $this->router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL);
+                                                                       $this->config[$tag][$view]['context']['self_url'] = $this->router->generate($name, ['_locale' => $locale]+$route);
                                                                } else {
                                                                        //Set locale locales context
-                                                                       $this->config[$tag][$view]['context']['head']['alternates'][$locale] = [
+                                                                       $this->config[$tag][$view]['context']['alternates'][$locale] = [
                                                                                'absolute' => $this->router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL),
                                                                                'relative' => $this->router->generate($name, ['_locale' => $locale]+$route),
                                                                                'title' => implode('/', $titles),
-                                                                               'translated' => $this->translator->trans($this->config['languages'][$locale], [], null, $locale)
+                                                                               'translated' => $this->translator->trans($this->config['default']['languages'][$locale], [], $this->alias, $locale)
                                                                        ];
                                                                }
 
                                                                //Add shorter locale
-                                                               if (empty($this->config[$tag][$view]['context']['head']['alternates'][$slocale = substr($locale, 0, 2)])) {
+                                                               if (empty($this->config[$tag][$view]['context']['alternates'][$slocale = substr($locale, 0, 2)])) {
                                                                        //Add shorter locale
-                                                                       $this->config[$tag][$view]['context']['head']['alternates'][$slocale] = [
+                                                                       $this->config[$tag][$view]['context']['alternates'][$slocale] = [
                                                                                'absolute' => $this->router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL),
                                                                                'relative' => $this->router->generate($name, ['_locale' => $locale]+$route),
                                                                                'title' => implode('/', $titles),
-                                                                               'translated' => $this->translator->trans($this->config['languages'][$locale], [], null, $locale)
+                                                                               'translated' => $this->translator->trans($this->config['default']['languages'][$locale], [], $this->alias, $locale)
                                                                        ];
                                                                }
                                                        }
@@ -360,28 +274,18 @@ abstract class AbstractController extends BaseAbstractController implements Serv
        }
 
        /**
-        * Renders a view
-        *
         * {@inheritdoc}
+        *
+        * Renders a view
         */
        protected function render(string $view, array $parameters = [], Response $response = null): Response {
                //Create response when null
                $response ??= new Response();
 
                //With empty head locale
-               if (empty($parameters['head']['locale'])) {
+               if (empty($parameters['locale'])) {
                        //Set head locale
-                       $parameters['head']['locale'] = $this->locale;
-               }
-
-               //With empty head title and section
-               if (empty($parameters['head']['title']) && !empty($parameters['section'])) {
-                       //Set head title
-                       $parameters['head']['title'] = implode(' - ', [$parameters['title'], $parameters['section'], $parameters['head']['site']]);
-               //With empty head title
-               } elseif (empty($parameters['head']['title'])) {
-                       //Set head title
-                       $parameters['head']['title'] = implode(' - ', [$parameters['title'], $parameters['head']['site']]);
+                       $parameters['locale'] = $this->locale;
                }
 
                //Call twig render method
@@ -414,16 +318,19 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                return [
                        'doctrine' => ManagerRegistry::class,
                        'doctrine.orm.default_entity_manager' => EntityManagerInterface::class,
+                       'form.factory' => FormFactoryInterface::class,
                        'logger' => LoggerInterface::class,
                        'mailer.mailer' => MailerInterface::class,
                        'rapsys_pack.slugger_util' => SluggerUtil::class,
                        'request_stack' => RequestStack::class,
                        'router' => RouterInterface::class,
                        'security.authorization_checker' => AuthorizationCheckerInterface::class,
-                       'security' => Security::class,
+                       'security.helper' => Security::class,
                        'security.user_password_hasher' => UserPasswordHasherInterface::class,
                        'service_container' => ContainerInterface::class,
-                       'translator' => TranslatorInterface::class
+                       'translator' => TranslatorInterface::class,
+                       'twig' => Environment::class,
+                       'user.cache' => CacheInterface::class
                ];
        }
 }