Passed
Push — master ( ddbf8b...086098 )
by Robbie
11:17
created

SessionEnvTypeSwitcher::setSessionEnvType()   B

Complexity

Conditions 7
Paths 7

Size

Total Lines 29
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 16
nc 7
nop 1
dl 0
loc 29
rs 8.8333
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Control\Middleware\URLSpecialsMiddleware;
4
5
use SilverStripe\Core\Injector\Injector;
6
use SilverStripe\Core\Startup\ScheduledFlushDiscoverer;
7
use SilverStripe\Control\HTTPRequest;
8
9
/**
10
 * Implements switching user session into Test and Dev environment types
11
 */
12
trait SessionEnvTypeSwitcher
13
{
14
    /**
15
     * Checks whether the request has GET flags to control
16
     * environment type and amends the user session accordingly
17
     *
18
     * @param HTTPRequest $request
19
     *
20
     * @return bool true if changed the user session state, false otherwise
21
     */
22
    public function setSessionEnvType(HTTPRequest $request)
23
    {
24
        $session = $request->getSession();
25
26
        if (array_key_exists('isTest', $request->getVars())) {
27
            if (!is_null($isTest = $request->getVar('isTest'))) {
28
                if ($isTest === $session->get('isTest')) {
29
                    return false;
30
                }
31
            }
32
33
            $session->clear('isDev');
34
            $session->set('isTest', $isTest);
35
36
            return true;
37
        } elseif (array_key_exists('isDev', $request->getVars())) {
38
            if (!is_null($isDev = $request->getVar('isDev'))) {
39
                if ($isDev === $session->get('isDev')) {
40
                    return false;
41
                }
42
            }
43
44
            $session->clear('isTest');
45
            $session->set('isDev', $isDev);
46
47
            return true;
48
        }
49
50
        return false;
51
    }
52
}
53