BrowserLanguageDetect   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 31
rs 10
c 0
b 0
f 0
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 29 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lochmueller\LanguageDetection\Detect;
6
7
use Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection;
8
use Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent;
9
use TYPO3\CMS\Core\Utility\GeneralUtility;
10
11
class BrowserLanguageDetect
12
{
13
    public function __invoke(DetectUserLanguagesEvent $event): void
14
    {
15
        $languages = GeneralUtility::trimExplode(
16
            ',',
17
            implode(',', $event->getRequest()->getHeader('accept-language')),
18
            true
19
        );
20
21
        // Set default quality
22
        $acceptedLanguagesArr = [];
23
        foreach ($languages as $languageAndQualityStr) {
24
            if (str_contains($languageAndQualityStr, ';')) {
25
                $parts = GeneralUtility::trimExplode(';', $languageAndQualityStr, true);
26
                $languageCode = $parts[0];
27
                $quality = isset($parts[1]) ? $parts[1] : '';
28
            } else {
29
                $languageCode = $languageAndQualityStr;
30
                $quality = 'q=1.0';
31
            }
32
            $acceptedLanguagesArr[$languageCode] = $quality !== '' ? (float)mb_substr($quality, 2) : 1.0;
33
        }
34
35
        // Sort
36
        arsort($acceptedLanguagesArr);
37
38
        // Remove quality 0.0
39
        $acceptedLanguagesArr = array_filter($acceptedLanguagesArr, fn($value, $key): bool => $value !== 0.0, \ARRAY_FILTER_USE_BOTH);
0 ignored issues
show
Unused Code introduced by
The parameter $key is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

39
        $acceptedLanguagesArr = array_filter($acceptedLanguagesArr, fn($value, /** @scrutinizer ignore-unused */ $key): bool => $value !== 0.0, \ARRAY_FILTER_USE_BOTH);

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
40
41
        $event->setUserLanguages(LocaleCollection::fromArray(array_keys($acceptedLanguagesArr)));
42
    }
43
}
44