Completed
Pull Request — master (#7)
by Patrick
04:03
created

FlipSession::doesVarExist()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
require_once('Autoload.php');
3
if(!isset($_SESSION) && php_sapi_name() !== 'cli') { session_start(); }
4
if(!isset($_SESSION['ip_address']) && isset($_SERVER['REMOTE_ADDR']))
5
{
6
    $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
7
}
8
if(!isset($_SESSION['init_time']))
9
{
10
    $_SESSION['init_time'] = date('c');
11
}
12
13
class FlipSession extends Singleton
14
{
15
    /**
16
     * Does the variable exist in the session
17
     *
18
     * @SuppressWarnings(PHPMD.Superglobals)
19
     */
20
    static function doesVarExist($name)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
21
    {
22
        return isset($_SESSION[$name]);
23
    }
24
25
    /**
26
     * Get a variable from the session
27
     *
28
     * @SuppressWarnings(PHPMD.Superglobals)
29
     */
30
    static function getVar($name, $default = false)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
31
    {
32
        if(FlipSession::doesVarExist($name))
33
        {
34
            return $_SESSION[$name];
35
        }
36
        else
37
        {
38
            return $default;
39
        }
40
    }
41
42
    /**
43
     * Set a variable in the session
44
     *
45
     * @SuppressWarnings(PHPMD.Superglobals)
46
     */
47
    static function setVar($name, $value)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
48
    {
49
        $_SESSION[$name] = $value;
50
    }
51
52
    /**
53
     * Is a user currently logged in?
54
     *
55
     * @SuppressWarnings(PHPMD.Superglobals)
56
     */
57
    static function isLoggedIn()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
58
    {
59
        if(isset($_SESSION['flipside_user']))
60
        {
61
            return true;
62
        }
63
        else if(isset($_SESSION['AuthMethod']) && isset($_SESSION['AuthData']))
64
        {
65
            $auth = AuthProvider::getInstance();
66
            return $auth->isLoggedIn($_SESSION['AuthData'], $_SESSION['AuthMethod']);
67
        }
68
        else
69
        {
70
            return false;
71
        }
72
    }
73
74
    /**
75
     * Get the currently logged in user
76
     *
77
     * @SuppressWarnings(PHPMD.Superglobals)
78
     */
79
    static function getUser()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
80
    {
81
        if(isset($_SESSION['flipside_user']))
82
        {
83
            return $_SESSION['flipside_user'];
84
        }
85
        else if(isset($_SESSION['AuthMethod']) && isset($_SESSION['AuthData']))
86
        {
87
            $auth = AuthProvider::getInstance();
88
            $user = $auth->getUser($_SESSION['AuthData'], $_SESSION['AuthMethod']);
89
            if($user !== null)
90
            {
91
                $_SESSION['flipside_user'] = $user;
92
            }
93
            return $user;
94
        }
95
        else
96
        {
97
            return null;
98
        }
99
    }
100
101
    /**
102
     * Set the currently logged in user
103
     *
104
     * @SuppressWarnings(PHPMD.Superglobals)
105
     */
106
    static function setUser($user)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
107
    {
108
        $_SESSION['flipside_user'] = $user;
109
    }
110
111
    /**
112
     * Obtain the current users email address
113
     *
114
     * @SuppressWarnings(PHPMD.Superglobals)
115
     */
116
    static function getUserEmail()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
117
    {
118
        if(isset($_SESSION['flipside_email']))
119
        {
120
            return $_SESSION['flipside_email'];
121
        }
122
        $user = FlipSession::getUser();
123
        if($user === false || $user === null)
124
        {
125
            return false;
126
        }
127
        if(isset($user->mail) && isset($user->mail[0]))
128
        {
129
            $_SESSION['flipside_email'] = $user->mail[0];
130
            return $_SESSION['flipside_email'];
131
        }
132
        return false;
133
    }
134
135
    /**
136
     * This will end your session
137
     *
138
     * @SuppressWarnings(PHPMD.Superglobals)
139
     */
140
    static function end()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
141
    {
142
        if(isset($_SESSION) && !empty($_SESSION))
143
        {
144
            $_SESSION = array();
145
            session_destroy();
146
        }
147
    }
148
149
    static function unserializePhpSession($sessionData)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
150
    {
151
        $res = array();
152
        $offset = 0;
153
        $length = strlen($sessionData);
154
        while($offset < $length)
155
        {
156
            $pos = strpos($sessionData, "|", $offset);
157
            $len = $pos - $offset;
158
            $name = substr($sessionData, $offset, $len);
159
            if($name === false) break;
160
            $offset += $len + 1;
161
            $data = @unserialize(substr($sessionData, $offset));
162
            $res[$name] = $data;
163
            $offset += strlen(serialize($data));
164
        }
165
        return $res;
166
    }
167
168
    static function getAllSessions()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
169
    {
170
        $res = array();
171
        $sessFiles = scandir(ini_get('session.save_path'));
172
        $count = count($sessFiles);
173
        for($i = 0; $i < $count; $i++)
174
        {
175
            if($sessFiles[$i][0] === '.')
176
            {
177
                continue;
178
            }
179
            $sessionId = substr($sessFiles[$i], 5);
180
            $sessionData = file_get_contents(ini_get('session.save_path').'/'.$sessFiles[$i]);
181
            if($sessionData === false)
182
            {
183
                array_push($res, array('sid' => $sessionId));
184
            }
185
            else
186
            {
187
                $tmp = FlipSession::unserializePhpSession($sessionData);
188
                $tmp['sid'] = $sessionId;
189
                array_push($res, $tmp);
190
            }
191
        }
192
        if(count($res) == 0)
193
        {
194
            return false;
195
        }
196
        return $res;
197
    }
198
199
    static function getSessionById($sid)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
200
    {
201
        $sessionData = file_get_contents(ini_get('session.save_path').'/sess_'.$sid);
202
        return FlipSession::unserializePhpSession($sessionData);
203
    }
204
205
    static function deleteSessionById($sid)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
206
    {
207
        return unlink(ini_get('session.save_path').'/sess_'.$sid); 
208
    }
209
}
210
/* vim: set tabstop=4 shiftwidth=4 expandtab: */
211