Completed
Pull Request — master (#294)
by Robbie
01:48
created

SubsiteState::getSubsiteId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace SilverStripe\Subsites\State;
4
5
use SilverStripe\Control\HTTPRequest;
6
use SilverStripe\Core\Injector\Injectable;
7
use SilverStripe\Core\Injector\Injector;
8
9
/**
10
 * SubsiteState provides static access to the current state for subsite related data during a request
11
 */
12
class SubsiteState
13
{
14
    use Injectable;
15
16
    /**
17
     * @var int|null
18
     */
19
    protected $subsiteId;
20
21
    /**
22
     * @var bool
23
     */
24
    protected $useSessions;
25
26
    /**
27
     * Get the current subsite ID
28
     *
29
     * @return int|null
30
     */
31
    public function getSubsiteId()
32
    {
33
        return $this->subsiteId;
34
    }
35
36
    /**
37
     * Set the current subsite ID
38
     *
39
     * @param int $id
40
     * @return $this
41
     */
42
    public function setSubsiteId($id)
43
    {
44
        $this->subsiteId = (int) $id;
45
46
        // Persist to session, if they are enabled
47
        if ($this->getUseSessions() && Injector::inst()->has(HTTPRequest::class)) {
48
            Injector::inst()
49
                ->get(HTTPRequest::class)
50
                ->getSession()
51
                ->set('SubsiteID', $id);
52
        }
53
54
        return $this;
55
    }
56
57
    /**
58
     * Get whether to use sessions for storing the subsite ID
59
     *
60
     * @return bool
61
     */
62
    public function getUseSessions()
63
    {
64
        return $this->useSessions;
65
    }
66
67
    /**
68
     * Set whether to use sessions for storing the subsite ID
69
     *
70
     * @param bool $useSessions
71
     * @return $this
72
     */
73
    public function setUseSessions($useSessions)
74
    {
75
        $this->useSessions = $useSessions;
76
        return $this;
77
    }
78
79
    /**
80
     * Perform a given action within the context of a new, isolated state. Modifications are temporary
81
     * and the existing state will be restored afterwards.
82
     *
83
     * @param callable $callback Callback to run. Will be passed the nested state as a parameter
84
     * @return mixed Result of callback
85
     */
86
    public function withState(callable $callback)
87
    {
88
        $newState = clone $this;
89
        try {
90
            Injector::inst()->registerService($newState);
91
            return $callback($newState);
92
        } finally {
93
            Injector::inst()->registerService($this);
94
        }
95
    }
96
}
97