Completed
Push — master ( aba493...5356ed )
by Ruud
315:38 queued 305:00
created

AdminBundle/EventListener/AdminLocaleListener.php (1 issue)

Check that @param annotations have the correct type.

Documentation Informational

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\AdminBundle\EventListener;
4
5
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
6
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
7
use Symfony\Component\HttpKernel\KernelEvents;
8
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
9
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
10
use Symfony\Component\Translation\TranslatorInterface;
11
use Kunstmaan\AdminBundle\Helper\AdminRouteHelper;
12
13
/**
14
 * AdminLocaleListener to override default locale if user-specific locale is set in database
15
 */
16
class AdminLocaleListener implements EventSubscriberInterface
17
{
18
    /**
19
     * @var TokenStorageInterface
20
     */
21
    private $tokenStorage;
22
23
    /**
24
     * @var TranslatorInterface
25
     */
26
    private $translator;
27
28
    /**
29
     * @var string
30
     */
31
    private $defaultAdminLocale;
32
33
    /**
34
     * @var string
35
     */
36
    private $providerKey;
37
38
    /**
39
     * @var AdminRouteHelper
40
     */
41
    private $adminRouteHelper;
42
43
    /**
44
     * @param TokenStorageInterface $tokenStorage
45
     * @param TranslatorInterface   $translator
46
     * @param string                $defaultAdminLocale
47
     * @param AdminRouteHelper      $adminRouteHelper
48
     * @param string                $providerKey        Firewall name to check against
49
     */
50 1
    public function __construct(TokenStorageInterface $tokenStorage, TranslatorInterface $translator, AdminRouteHelper $adminRouteHelper, $defaultAdminLocale, $providerKey = 'main')
51
    {
52 1
        $this->translator = $translator;
53 1
        $this->tokenStorage = $tokenStorage;
54 1
        $this->defaultAdminLocale = $defaultAdminLocale;
55 1
        $this->providerKey = $providerKey;
56 1
        $this->adminRouteHelper = $adminRouteHelper;
57 1
    }
58
59
    /**
60
     * onKernelRequest
61
     *
62
     * @param GetResponseEvent $event
63
     */
64 1
    public function onKernelRequest(GetResponseEvent $event)
65
    {
66 1
        $url = $event->getRequest()->getRequestUri();
67 1
        $token = $this->tokenStorage->getToken();
68
69 1
        if ($token && $this->isAdminToken($this->providerKey, $token) && $this->adminRouteHelper->isAdminRoute($url)) {
70 1
            $locale = $token->getUser()->getAdminLocale();
71
72 1
            if (!$locale) {
73 1
                $locale = $this->defaultAdminLocale;
74
            }
75
76 1
            $this->translator->setLocale($locale);
77
        }
78 1
    }
79
80
    /**
81
     * @param TokenInterface $token
0 ignored issues
show
Should the type for parameter $token not be null|TokenInterface?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
82
     * @param                $providerKey
83
     *
84
     * @return bool
85
     */
86 1
    private function isAdminToken($providerKey, TokenInterface $token = null)
87
    {
88 1
        return is_callable([$token, 'getProviderKey']) && $token->getProviderKey() === $providerKey;
89
    }
90
91
    /**
92
     * getSubscribedEvents
93
     */
94 1
    public static function getSubscribedEvents()
95
    {
96
        return array(
97
            // Must be registered before the default Locale listener
98 1
            KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
99
        );
100
    }
101
}
102