Issues (75)

app/Http/Filter/ContentNegotiator.php (1 issue)

1
<?php
2
namespace App\Http\Filter;
3
4
use Yii;
5
use yii\di\Instance;
6
use yii\filters\ContentNegotiator as BaseContentNegotiator;
7
use yii\web\User;
8
use yii\web\Cookie;
9
10
class ContentNegotiator extends BaseContentNegotiator
11
{
12
    /**
13
     * A user component.
14
     *
15
     * @var string|User
16
     */
17
    public $user = 'user';
18
19
    /**
20
     * {@inheritdoc}
21
     */
22
    protected function negotiateLanguage($request)
23
    {
24
        if (empty($this->languageParam) || ($language = $request->get($this->languageParam)) === null) {
0 ignored issues
show
The assignment to $language is dead and can be removed.
Loading history...
25
            $language = null;
26
            $this->user = Instance::ensure($this->user, User::class);
27
            if (!$this->user->getIsGuest() && ($identity = $this->user->getIdentity()) instanceof LanguagePickerInterface) {
28
                $language = $identity->getLanguage();
29
            
30
                $picked = $this->pick($language);
31
                if ($picked !== null) {
32
                    return $picked;
33
                }
34
            }
35
            
36
            $language = $request->getCookies()->getValue($this->languageParam, null);
37
            $picked = $this->pick($language);
38
            if ($picked !== null) {
39
                return $picked;
40
            }
41
        }
42
43
        return parent::negotiateLanguage($request);
44
    }
45
46
    /**
47
     * Pick language.
48
     *
49
     * @param string $language
50
     *
51
     * @return string|null returns a supportted language, returns null if not supported.
52
     */
53
    protected function pick($language)
54
    {
55
        if ($language === null) {
56
            return null;
57
        }
58
59
        if (isset($this->languages[$language])) {
60
            return $this->languages[$language];
61
        }
62
        foreach ($this->languages as $key => $supported) {
63
            if (is_int($key) && $this->isLanguageSupported($language, $supported)) {
64
                return $supported;
65
            }
66
        }
67
68
        return null;
69
    }
70
71
    /**
72
     * Store language to cookie.
73
     *
74
     * @param string $lang
75
     */
76
    public function storeLanguageToCookie($lang)
77
    {
78
        $cookie = new Cookie(['name' => $this->languageParam, 'value' => $lang]);
79
        Yii::$app->getResponse()->getCookies()->add($cookie);
80
    }
81
}
82