DeviceTracker::getDeviceDetector()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php namespace Arcanedev\LaravelTracker\Trackers;
2
3
use Arcanedev\LaravelTracker\Contracts\Detectors\DeviceDetector;
4
use Arcanedev\LaravelTracker\Contracts\Parsers\UserAgentParser;
5
use Arcanedev\LaravelTracker\Contracts\Trackers\DeviceTracker as DeviceTrackerContract;
6
use Arcanedev\LaravelTracker\Support\BindingManager;
7
8
/**
9
 * Class     DeviceTracker
10
 *
11
 * @package  Arcanedev\LaravelTracker\Trackers
12
 * @author   ARCANEDEV <[email protected]>
13
 */
14
class DeviceTracker extends AbstractTracker implements DeviceTrackerContract
15
{
16
    /* -----------------------------------------------------------------
17
     |  Getters & Setters
18
     | -----------------------------------------------------------------
19
     */
20
21
    /**
22
     * Get the model.
23
     *
24
     * @return \Arcanedev\LaravelTracker\Models\Device
25
     */
26 9
    protected function getModel()
27
    {
28 9
        return $this->makeModel(BindingManager::MODEL_DEVICE);
29
    }
30
31
    /**
32
     * @return \Arcanedev\LaravelTracker\Contracts\Detectors\DeviceDetector
33
     */
34 9
    private function getDeviceDetector()
35
    {
36 9
        return $this->make(DeviceDetector::class);
37
    }
38
39
    /**
40
     * @return \Arcanedev\LaravelTracker\Contracts\Parsers\UserAgentParser
41
     */
42 9
    private function getUserAgentParser()
43
    {
44 9
        return $this->make(UserAgentParser::class);
45
    }
46
47
    /* -----------------------------------------------------------------
48
     |  Main Methods
49
     | -----------------------------------------------------------------
50
     */
51
52
    /**
53
     * Track the device.
54
     *
55
     * @return int
56
     */
57 9
    public function track()
58
    {
59 9
        return $this->getModel()
60 9
                    ->newQuery()
61 9
                    ->firstOrCreate($this->getCurrentDeviceProperties())
62 9
                    ->getKey();
63
    }
64
65
    /* -----------------------------------------------------------------
66
     |  Other Methods
67
     | -----------------------------------------------------------------
68
     */
69
70
    /**
71
     * Get the current device properties.
72
     *
73
     * @return array
74
     */
75 9
    private function getCurrentDeviceProperties()
76
    {
77 9
        if ($properties = $this->getDeviceDetector()->detect()) {
78 9
            $parser = $this->getUserAgentParser();
79
80 9
            $properties['platform']         = $parser->getOperatingSystemFamily();
81 9
            $properties['platform_version'] = $parser->getOperatingSystemVersion();
82
        }
83
84 9
        return $properties;
85
    }
86
}
87