Completed
Push — development ( b626b0...ff940a )
by Thomas
16s
created

LanguageProvider::getDefaultLanguage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Oc\GlobalContext\Provider;
4
5
use Oc\Language\LanguageService;
6
use Oc\Session\SessionDataInterface;
7
use Oc\User\UserProvider;
8
use Symfony\Component\HttpFoundation\Request;
9
10
/**
11
 * Class LanguageProvider
12
 */
13
class LanguageProvider
14
{
15
    /**
16
     * @var LanguageService
17
     */
18
    private $languageService;
19
20
    /**
21
     * @var SessionDataInterface
22
     */
23
    private $sessionData;
24
25
    /**
26
     * @var string
27
     */
28
    private $defaultLanguage;
29
30
    /**
31
     * @var UserProvider
32
     */
33
    private $userProvider;
34
35
    /**
36
     * LanguageProvider constructor.
37
     *
38
     * @param LanguageService $languageService
39
     * @param SessionDataInterface $sessionData
40
     * @param UserProvider $userProvider
41
     * @param string $defaultLanguage
42
     */
43
    public function __construct(
44
        LanguageService $languageService,
45
        SessionDataInterface $sessionData,
46
        UserProvider $userProvider,
47
        $defaultLanguage
48
    ) {
49
        $this->languageService = $languageService;
50
        $this->sessionData = $sessionData;
51
        $this->defaultLanguage = $defaultLanguage;
52
        $this->userProvider = $userProvider;
53
    }
54
55
    /**
56
     * Returns default language configured in config.yml
57
     *
58
     * @return string
59
     */
60
    public function getDefaultLanguage()
61
    {
62
        return $this->defaultLanguage;
63
    }
64
65
    /**
66
     * Determines the language of the user.
67
     *
68
     * @param Request $request
69
     *
70
     * @return string
71
     */
72
    public function getPreferredLanguage(Request $request)
73
    {
74
        // Determine session locale
75
        $sessionLocale = $this->sessionData->get('locale');
76
77
        if ($sessionLocale !== null) {
78
            return strtolower($sessionLocale);
79
        }
80
81
        $userLocale = $this->getUserLocale();
82
83
        if ($userLocale !== null) {
84
            return $userLocale;
85
        }
86
87
        $availableTranslations = $this->languageService->getAvailableTranslations();
88
89
        // Determine preferred language by Accepted-Language header and the available translations.
90
        $preferredLanguage = $request->getPreferredLanguage($availableTranslations);
91
92
        $locale = substr($preferredLanguage, 0, 2);
93
94
        return $locale ?: $this->defaultLanguage;
95
    }
96
97
    /**
98
     * Fetches the user locale.
99
     *
100
     * @return string|null
101
     */
102
    private function getUserLocale()
103
    {
104
        if ($user = $this->userProvider->bySession()) {
105
            return $user->language;
106
        }
107
108
        return null;
109
    }
110
}
111