Completed
Push — master ( 36ffde...a7fc49 )
by Sebastian
10s
created

Referer::determineFromRequest()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 5
nc 3
nop 1
1
<?php
2
3
namespace Spatie\Referer;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Contracts\Session\Session;
7
use Spatie\Referer\Exceptions\InvalidConfiguration;
8
9
class Referer
10
{
11
    /** @var string */
12
    protected $sessionKey;
13
14
    /** @var array */
15
    protected $sources;
16
17
    /** @var \Illuminate\Contracts\Session\Session */
18
    protected $session;
19
20
    public function __construct(string $sessionKey, array $sources, Session $session)
21
    {
22
        if (empty($sessionKey)) {
23
            throw InvalidConfiguration::emptySessionKey();
24
        }
25
26
        $this->sessionKey = $sessionKey;
27
        $this->sources = $sources;
28
        $this->session = $session;
29
    }
30
31
    public function get(): string
32
    {
33
        return $this->session->get($this->sessionKey, '');
34
    }
35
36
    public function forget()
37
    {
38
        $this->session->forget($this->sessionKey);
39
    }
40
41
    public function put(string $referer)
42
    {
43
        return $this->session->put($this->sessionKey, $referer);
44
    }
45
46
    public function putFromRequest(Request $request)
47
    {
48
        $referer = $this->determineFromRequest($request);
49
50
        if (! empty($referer)) {
51
            $this->put($referer);
52
        }
53
    }
54
55
    protected function determineFromRequest(Request $request): string
56
    {
57
        foreach ($this->sources as $source) {
58
            if ($referer = (new $source)->getReferer($request)) {
59
                return $referer;
60
            }
61
        }
62
63
        return '';
64
    }
65
}
66