-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathSessionContainer.php
More file actions
178 lines (167 loc) · 5.02 KB
/
SessionContainer.php
File metadata and controls
178 lines (167 loc) · 5.02 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<?php
/**
* Object wrapping around session variable used to store controller data
*
* PHP version 5
*
* LICENSE
*
* This source file is subject to BSD 3-Clause License that is bundled
* with this package in the file LICENSE and available at the URL
* https://raw.githubusercontent.com/pear/HTML_QuickForm2/trunk/docs/LICENSE
*
* @category HTML
* @package HTML_QuickForm2
* @author Alexey Borzov <avb@php.net>
* @author Bertrand Mansion <golgote@mamasam.com>
* @copyright 2006-2025 Alexey Borzov <avb@php.net>, Bertrand Mansion <golgote@mamasam.com>
* @license https://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License
* @link https://pear.php.net/package/HTML_QuickForm2
*/
/**
* Object wrapping around session variable used to store controller data
*
* This is a bit less fragile than allowing to directly manipulate the array
* as was done in old HTML_QuickForm_Controller package
*
* @category HTML
* @package HTML_QuickForm2
* @author Alexey Borzov <avb@php.net>
* @author Bertrand Mansion <golgote@mamasam.com>
* @license https://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License
* @version Release: @package_version@
* @link https://pear.php.net/package/HTML_QuickForm2
*/
class HTML_QuickForm2_Controller_SessionContainer
{
/**
* A reference to a key in $_SESSION superglobal array
* @var array
*/
protected $data;
/**
* Class constructor
*
* Initializes a variable in $_SESSION array, its name is based upon the
* name of the Controller passed here
*
* @param HTML_QuickForm2_Controller $controller
*/
public function __construct(HTML_QuickForm2_Controller $controller)
{
$name = sprintf(
HTML_QuickForm2_Controller::KEY_CONTAINER, $controller->getId()
);
if (empty($_SESSION[$name])) {
$_SESSION[$name] = [
'datasources' => [],
'values' => [],
'valid' => []
];
}
$this->data =& $_SESSION[$name];
}
/**
* Stores the page submit values
*
* @param string $pageId Page ID
* @param array $values Page submit values
*/
public function storeValues($pageId, array $values)
{
$this->data['values'][$pageId] = $values;
}
/**
* Returns the page values kept in session
*
* @param string $pageId Page ID
*
* @return array
*/
public function getValues($pageId)
{
return array_key_exists($pageId, $this->data['values'])
? $this->data['values'][$pageId]: [];
}
/**
* Stores the page validation status
*
* @param string $pageId Page ID
* @param bool $status Whether the page is valid
*/
public function storeValidationStatus($pageId, $status)
{
$this->data['valid'][$pageId] = (bool)$status;
}
/**
* Returns the page validation status kept in session
*
* @param string $pageId Page ID
*
* @return bool|null
*/
public function getValidationStatus($pageId)
{
return array_key_exists($pageId, $this->data['valid'])
? $this->data['valid'][$pageId]: null;
}
/**
* Stores the controller data sources
*
* @param HTML_QuickForm2_DataSource[] $datasources A new data source list
*
* @throws HTML_QuickForm2_InvalidArgumentException if given array
* contains something that is not a valid data source
*/
public function storeDatasources(array $datasources)
{
foreach ($datasources as $ds) {
if (!$ds instanceof HTML_QuickForm2_DataSource) {
throw new HTML_QuickForm2_InvalidArgumentException(
'Array should contain only DataSource instances'
);
}
}
$this->data['datasources'] = $datasources;
}
/**
* Returns the controller data sources
*
* @return HTML_QuickForm2_DataSource[]
*/
public function getDatasources()
{
return $this->data['datasources'];
}
/**
* Stores some user-supplied parameter alongside controller data
*
* It is sometimes useful to pass some additional user data between pages
* of the form, thus this method. Data added by this method will be removed
* alongside all the other data by
* {@link HTML_QuickForm2_Controller::destroySessionContainer()}
*
* @param string $name Parameter name
* @param mixed $value Parameter value
*/
public function storeOpaque($name, $value)
{
if (!array_key_exists('opaque', $this->data)) {
$this->data['opaque'] = [];
}
$this->data['opaque'][$name] = $value;
}
/**
* Returns a user-supplied parameter
*
* @param string $name Parameter name
*
* @return mixed
*/
public function getOpaque($name)
{
return (array_key_exists('opaque', $this->data)
&& array_key_exists($name, $this->data['opaque']))
? $this->data['opaque'][$name]: null;
}
}