GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

WhichBrowser::hydrateOperatingSystem()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 5
c 0
b 0
f 0
ccs 4
cts 4
cp 1
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
crap 1
1
<?php
2
namespace UserAgentParser\Provider;
3
4
use UserAgentParser\Exception\NoResultFoundException;
5
use UserAgentParser\Exception\PackageNotLoadedException;
6
use UserAgentParser\Model;
7
use WhichBrowser\Parser as WhichBrowserParser;
8
9
/**
10
 * Abstraction for whichbrowser/parser
11
 *
12
 * @author Martin Keckeis <[email protected]>
13
 * @author Niels Leenheer <[email protected]>
14
 * @license MIT
15
 * @see https://github.com/WhichBrowser/Parser
16
 */
17
class WhichBrowser extends AbstractProvider
18
{
19
    /**
20
     * Name of the provider
21
     *
22
     * @var string
23
     */
24
    protected $name = 'WhichBrowser';
25
26
    /**
27
     * Homepage of the provider
28
     *
29
     * @var string
30
     */
31
    protected $homepage = 'https://github.com/WhichBrowser/Parser';
32
33
    /**
34
     * Composer package name
35
     *
36
     * @var string
37
     */
38
    protected $packageName = 'whichbrowser/parser';
39
40
    protected $detectionCapabilities = [
41
42
        'browser' => [
43
            'name'    => true,
44
            'version' => true,
45
        ],
46
47
        'renderingEngine' => [
48
            'name'    => true,
49
            'version' => true,
50
        ],
51
52
        'operatingSystem' => [
53
            'name'    => true,
54
            'version' => true,
55
        ],
56
57
        'device' => [
58
            'model'    => true,
59
            'brand'    => true,
60
            'type'     => true,
61
            'isMobile' => true,
62
            'isTouch'  => false,
63
        ],
64
65
        'bot' => [
66
            'isBot' => true,
67
            'name'  => true,
68
            'type'  => false,
69
        ],
70
    ];
71
72
    /**
73
     * Used for unitTests mocking
74
     *
75
     * @var WhichBrowserParser
76
     */
77
    private $parser;
78
79
    /**
80
     *
81
     * @throws PackageNotLoadedException
82
     */
83 16
    public function __construct()
84
    {
85 16
        $this->checkIfInstalled();
86 16
    }
87
88
    /**
89
     *
90
     * @param  array              $headers
91
     * @return WhichBrowserParser
92
     */
93 9
    public function getParser(array $headers)
94
    {
95 9
        if ($this->parser !== null) {
96 8
            return $this->parser;
97
        }
98
99 1
        return new WhichBrowserParser($headers);
100
    }
101
102
    /**
103
     *
104
     * @param Model\Bot                   $bot
105
     * @param \WhichBrowser\Model\Browser $browserRaw
106
     */
107 2
    private function hydrateBot(Model\Bot $bot, \WhichBrowser\Model\Browser $browserRaw)
108
    {
109 2
        $bot->setIsBot(true);
110 2
        $bot->setName($this->getRealResult($browserRaw->getName()));
111 2
    }
112
113
    /**
114
     *
115
     * @param Model\Browser               $browser
116
     * @param \WhichBrowser\Model\Browser $browserRaw
117
     */
118 5
    private function hydrateBrowser(Model\Browser $browser, \WhichBrowser\Model\Browser $browserRaw)
119
    {
120 5
        if ($this->isRealResult($browserRaw->getName(), 'browser', 'name') === true) {
121 1
            $browser->setName($browserRaw->getName());
122 1
            $browser->getVersion()->setComplete($this->getRealResult($browserRaw->getVersion()));
123
124 1
            return;
125
        }
126
127 4
        if (isset($browserRaw->using) && $browserRaw->using instanceof \WhichBrowser\Model\Using) {
128
            /* @var $usingRaw \WhichBrowser\Model\Using */
129 1
            $usingRaw = $browserRaw->using;
130
131 1
            if ($this->isRealResult($usingRaw->getName()) === true) {
132 1
                $browser->setName($usingRaw->getName());
133
134 1
                $browser->getVersion()->setComplete($this->getRealResult($usingRaw->getVersion()));
135
            }
136
        }
137 4
    }
138
139
    /**
140
     *
141
     * @param Model\RenderingEngine      $engine
142
     * @param \WhichBrowser\Model\Engine $engineRaw
143
     */
144 5
    private function hydrateRenderingEngine(Model\RenderingEngine $engine, \WhichBrowser\Model\Engine $engineRaw)
145
    {
146 5
        $engine->setName($this->getRealResult($engineRaw->getName()));
147 5
        $engine->getVersion()->setComplete($this->getRealResult($engineRaw->getVersion()));
148 5
    }
149
150
    /**
151
     *
152
     * @param Model\OperatingSystem  $os
153
     * @param \WhichBrowser\Model\Os $osRaw
154
     */
155 5
    private function hydrateOperatingSystem(Model\OperatingSystem $os, \WhichBrowser\Model\Os $osRaw)
156
    {
157 5
        $os->setName($this->getRealResult($osRaw->getName()));
158 5
        $os->getVersion()->setComplete($this->getRealResult($osRaw->getVersion()));
159 5
    }
160
161
    /**
162
     *
163
     * @param Model\Device               $device
164
     * @param \WhichBrowser\Model\Device $deviceRaw
165
     * @param WhichBrowserParser         $parser
166
     */
167 5
    private function hydrateDevice(Model\Device $device, \WhichBrowser\Model\Device $deviceRaw, WhichBrowserParser $parser)
168
    {
169 5
        $device->setModel($this->getRealResult($deviceRaw->getModel()));
170 5
        $device->setBrand($this->getRealResult($deviceRaw->getManufacturer()));
171 5
        $device->setType($this->getRealResult($parser->getType()));
172
173 5
        if ($parser->isMobile() === true) {
174 1
            $device->setIsMobile(true);
175
        }
176 5
    }
177
178 8
    public function parse($userAgent, array $headers = [])
179
    {
180 8
        $headers['User-Agent'] = $userAgent;
181
182 8
        $parser = $this->getParser($headers);
183
184
        /*
185
         * No result found?
186
         */
187 8
        if ($parser->isDetected() !== true) {
188 1
            throw new NoResultFoundException('No result found for user agent: ' . $userAgent);
189
        }
190
191
        /*
192
         * Hydrate the model
193
         */
194 7
        $result = new Model\UserAgent($this->getName(), $this->getVersion());
195 7
        $result->setProviderResultRaw($parser->toArray());
196
197
        /*
198
         * Bot detection
199
         */
200 7
        if ($parser->getType() === 'bot') {
201 2
            $this->hydrateBot($result->getBot(), $parser->browser);
202
203 2
            return $result;
204
        }
205
206
        /*
207
         * hydrate the result
208
         */
209 5
        $this->hydrateBrowser($result->getBrowser(), $parser->browser);
210 5
        $this->hydrateRenderingEngine($result->getRenderingEngine(), $parser->engine);
211 5
        $this->hydrateOperatingSystem($result->getOperatingSystem(), $parser->os);
212 5
        $this->hydrateDevice($result->getDevice(), $parser->device, $parser);
213
214 5
        return $result;
215
    }
216
}
217