RefererParser   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 140
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 13
c 0
b 0
f 0
lcom 1
cbo 2
dl 0
loc 140
ccs 27
cts 27
cp 1
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A setReferer() 0 6 1
A getMedium() 0 4 2
A getSource() 0 4 2
A getSearchTerm() 0 4 2
A isKnown() 0 4 1
A parse() 0 6 1
A parseUrl() 0 17 3
1
<?php namespace Arcanedev\LaravelTracker\Parsers;
2
3
use Arcanedev\LaravelTracker\Contracts\Parsers\RefererParser as RefererParserContract;
4
5
/**
6
 * Class     RefererParser
7
 *
8
 * @package  Arcanedev\LaravelTracker\Parsers
9
 * @author   ARCANEDEV <[email protected]>
10
 */
11
class RefererParser implements RefererParserContract
12
{
13
    /* -----------------------------------------------------------------
14
     |  Properties
15
     | -----------------------------------------------------------------
16
     */
17
18
    /**
19
     * Referer parser instance.
20
     *
21
     * @var \Snowplow\RefererParser\Parser
22
     */
23
    private $parser;
24
25
    /**
26
     * Parsed referer instance.
27
     *
28
     * @var \Snowplow\RefererParser\Referer
29
     */
30
    private $referer;
31
32
    /* -----------------------------------------------------------------
33
     |  Constructor
34
     | -----------------------------------------------------------------
35
     */
36
37
    /**
38
     * RefererParser constructor.
39
     *
40
     * @param  \Snowplow\RefererParser\Parser  $parser
41
     */
42 9
    public function __construct($parser)
43
    {
44 9
        $this->parser = $parser;
45 9
    }
46
47
    /* -----------------------------------------------------------------
48
     |  Getters & Setters
49
     | -----------------------------------------------------------------
50
     */
51
52
    /**
53
     * Set the referer.
54
     *
55
     * @param  \Snowplow\RefererParser\Referer  $referer
56
     *
57
     * @return self
58
     */
59 3
    public function setReferer($referer)
60
    {
61 3
        $this->referer = $referer;
62
63 3
        return $this;
64
    }
65
66
    /**
67
     * Get the search medium.
68
     *
69
     * @return string|null
70
     */
71 3
    public function getMedium()
72
    {
73 3
        return $this->isKnown() ? $this->referer->getMedium() : null;
74
    }
75
76
    /**
77
     * Get the search source.
78
     *
79
     * @return string|null
80
     */
81 3
    public function getSource()
82
    {
83 3
        return $this->isKnown() ? $this->referer->getSource() : null;
84
    }
85
86
    /**
87
     * Get the search term.
88
     *
89
     * @return string|null
90
     */
91 3
    public function getSearchTerm()
92
    {
93 3
        return $this->isKnown() ? $this->referer->getSearchTerm() : null;
94
    }
95
96
    /**
97
     * Check if the referer is known.
98
     *
99
     * @return bool
100
     */
101 3
    public function isKnown()
102
    {
103 3
        return $this->referer->isKnown();
104
    }
105
106
    /* -----------------------------------------------------------------
107
     |  Main Methods
108
     | -----------------------------------------------------------------
109
     */
110
111
    /**
112
     * Parse a referer.
113
     *
114
     * @param  string  $refererUrl
115
     * @param  string  $pageUrl
116
     *
117
     * @return self
118
     */
119 3
    public function parse($refererUrl, $pageUrl)
120
    {
121 3
        $this->setReferer($this->parser->parse($refererUrl, $pageUrl));
122
123 3
        return $this;
124
    }
125
126
    /**
127
     * Parse the referer url.
128
     *
129
     * @param  string  $referer
130
     *
131
     * @return array
132
     */
133 9
    public function parseUrl($referer)
134
    {
135 9
        if (is_null($referer)) return null;
136
137 3
        $parsed = parse_url($referer);
138 3
        $parts  = explode('.', $parsed['host']);
139 3
        $domain = array_pop($parts);
140
141 3
        if (count($parts) > 0)
142 3
            $domain = array_pop($parts).'.'.$domain;
143
144
        return [
145 3
            'url'    => $referer,
146 3
            'domain' => $domain,
147 3
            'host'   => $parsed['host'],
148
        ];
149
    }
150
}
151