AbstractDetector::setLanguages()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Vluzrmos\LanguageDetector\Drivers;
4
5
use Illuminate\Http\Request;
6
use Vluzrmos\LanguageDetector\Contracts\DetectorDriverInterface;
7
8
/**
9
 * Class AbstractDetectorDriver.
10
 */
11
abstract class AbstractDetector implements DetectorDriverInterface
12
{
13
    /**
14
     * Illuminate (Laravel or Lumen) Request.
15
     *
16
     * @var Request
17
     */
18
    protected $request;
19
20
    /**
21
     * Available Languages.
22
     *
23
     * @var array
24
     */
25
    protected $languages;
26
27
    /**
28
     * Default segment to use on uri and browser detectors.
29
     *
30
     * @var int
31
     */
32
    protected $segment = 0;
33
34
    /**
35
     * Browser Language Detector.
36
     *
37
     * @param Request $request   Current request.
38
     * @param array   $languages array of available languages.
39
     */
40
    public function __construct(Request $request, array $languages = [])
41
    {
42
        $this->setRequest($request);
43
        $this->setLanguages($languages);
44
    }
45
46
    /**
47
     * Getter to the request.
48
     *
49
     * @return Request
50
     */
51
    public function getRequest()
52
    {
53
        return $this->request;
54
    }
55
56
    /**
57
     * Setter to the request.
58
     *
59
     * @param Request $request
60
     */
61
    public function setRequest(Request $request)
0 ignored issues
show
Bug introduced by
You have injected the Request via parameter $request. This is generally not recommended as there might be multiple instances during a request cycle (f.e. when using sub-requests). Instead, it is recommended to inject the RequestStack and retrieve the current request each time you need it via getCurrentRequest().
Loading history...
62
    {
63
        $this->request = $request;
64
    }
65
66
    /**
67
     * Get the languages available for the application.
68
     *
69
     * @return array
70
     */
71
    public function getLanguages()
72
    {
73
        $languages = [];
74
75
        foreach ($this->languages as $key => $value) {
76
            $languages[] = $this->keyOrValue($key, $value);
77
        }
78
79
        return $languages;
80
    }
81
82
    /**
83
     * Set languages available to the application.
84
     *
85
     * @param array $languages
86
     */
87
    public function setLanguages(array $languages)
88
    {
89
        $this->languages = $languages;
90
    }
91
92
    /**
93
     * Set default segment value.
94
     *
95
     * @param int $segment
96
     */
97
    public function setDefaultSegment($segment = 0)
98
    {
99
        $this->segment = (int) $segment;
100
    }
101
102
    /**
103
     * Get default segment value.
104
     *
105
     * @return int
106
     */
107
    public function getDefaultSegment()
108
    {
109
        return $this->segment;
110
    }
111
112
    /**
113
     * Return the real locale based on available languages.
114
     *
115
     * @param string $locale
116
     * @return string|null
117
     */
118
    public function getAliasedLocale($locale)
119
    {
120
        if (isset($this->languages[$locale])) {
121
            return $this->languages[$locale];
122
        }
123
124
        return in_array($locale, $this->languages) ? $locale : null;
125
    }
126
127
    /**
128
     * Get the $value if key is numeric or null, otherwise will return the key.
129
     *
130
     * @param string|int $key
131
     * @param mixed      $value
132
     *
133
     * @return mixed
134
     */
135
    protected function keyOrValue($key, $value)
136
    {
137
        if (is_numeric($key) || empty($key)) {
138
            return $value;
139
        }
140
141
        return $key;
142
    }
143
}
144