blob: 874502579ccf113be95e4edd6f00ba3dc1b34b64 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
<?php
/**
* Magic session class.
* This class is intended to extend the $_SESSION magic variable by providing an API hook
* to plug in other values.
*
* Primarily this is intended to provide a way of supplying "logged in user" details without touching the session
* (which can cause problems when accessed server side).
*
* If a value is present in the session then that value is returned, otherwise a plugin hook 'session:get', '$var' is called,
* where $var is the variable being requested.
*
* Setting values will store variables in the session in the normal way.
*
* LIMITATIONS: You can not access multidimensional arrays
*
* This is EXPERIMENTAL.
*/
class ElggSession implements ArrayAccess {
/** Local cache of trigger retrieved variables */
private static $__localcache;
function __isset($key) {
return $this->offsetExists($key);
}
/** Set a value, go straight to session. */
function offsetSet($key, $value) {
$_SESSION[$key] = $value;
}
/**
* Get a variable from either the session, or if its not in the session attempt to get it from
* an api call.
*/
function offsetGet($key) {
if (!ElggSession::$__localcache) {
ElggSession::$__localcache = array();
}
if (isset($_SESSION[$key])) {
return $_SESSION[$key];
}
if (isset(ElggSession::$__localcache[$key])) {
return ElggSession::$__localcache[$key];
}
$value = NULL;
$value = trigger_plugin_hook('session:get', $key, NULL, $value);
ElggSession::$__localcache[$key] = $value;
return ElggSession::$__localcache[$key];
}
/**
* Unset a value from the cache and the session.
*/
function offsetUnset($key) {
unset(ElggSession::$__localcache[$key]);
unset($_SESSION[$key]);
}
/**
* Return whether the value is set in either the session or the cache.
*/
function offsetExists($offset) {
if (isset(ElggSession::$__localcache[$offset])) {
return true;
}
if (isset($_SESSION[$offset])) {
return true;
}
if ($this->offsetGet($offset)){
return true;
}
}
// Alias functions
function get($key) {
return $this->offsetGet($key);
}
function set($key, $value) {
return $this->offsetSet($key, $value);
}
function del($key) {
return $this->offsetUnset($key);
}
}
|