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   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 200
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 15

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 16
lcom 1
cbo 15
dl 0
loc 200
ccs 52
cts 52
cp 1
rs 9.1666
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getParser() 0 8 2
A hydrateBot() 0 5 1
B hydrateBrowser() 0 20 5
A hydrateRenderingEngine() 0 5 1
A hydrateOperatingSystem() 0 5 1
A hydrateDevice() 0 10 2
B parse() 0 38 3
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