LocaleListener::onKernelRequest()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 8
cts 8
cp 1
rs 9.8333
c 0
b 0
f 0
cc 3
nc 3
nop 1
crap 3
1
<?php
2
declare(strict_types=1);
3
4
namespace Maba\Bundle\RestBundle\Listener;
5
6
use Maba\Bundle\RestBundle\Service\RestRequestHelper;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
9
use Symfony\Component\HttpKernel\Event\RequestEvent;
10
11
/**
12
 * @internal
13
 */
14
class LocaleListener
15
{
16
    private $requestHelper;
17
    private $locales;
18
19 8
    public function __construct(
20
        RestRequestHelper $requestHelper,
21
        array $locales
22
    ) {
23 8
        $this->requestHelper = $requestHelper;
24 8
        $this->locales = $locales;
25 8
    }
26
27
    /**
28
     * Both events are type-casted as one is deprecated from 4.3, but another not available before this version
29
     * @param GetResponseEvent|RequestEvent $event
30
     */
31 8
    public function onKernelRequest($event)
32
    {
33 8
        $request = $event->getRequest();
34
35 8
        if (!$this->requestHelper->isRestRequest($request)) {
36 1
            return;
37
        }
38
39 7
        $locale = $this->resolveFromHeaders($request);
40 7
        if ($locale !== null) {
41 6
            $request->setLocale($locale);
42
        }
43 7
    }
44
45 7
    private function resolveFromHeaders(Request $request)
46
    {
47 7
        $defaultLocale = 'default';
48 7
        $preferredLanguage = $request->getPreferredLanguage(array_merge([$defaultLocale], $this->locales));
49
50 7
        if ($preferredLanguage !== null && $preferredLanguage !== $defaultLocale) {
51 6
            return $preferredLanguage;
52
        }
53
54 1
        return null;
55
    }
56
}
57