PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.21.2
GiveWP – Donation Plugin and Fundraising Platform v2.21.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Session / Accessor.php
give / src / Session Last commit date
SessionDonation 4 years ago Accessor.php 4 years ago Objects.php 4 years ago
Accessor.php
252 lines
1 <?php
2
3 namespace Give\Session;
4
5 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
6 use stdClass;
7
8 /**
9 * Class Access
10 *
11 * In legacy core session data load in array which contains multiple keys like give_purchase, receipt_access etc.
12 * This class helps to convert them into objects. Every subclass will treat a specific key as group of session data.
13 *
14 * @package Give\Session
15 */
16 abstract class Accessor
17 {
18 /**
19 * Session Id.
20 *
21 * @var string
22 */
23 protected $sessionKey;
24
25 /**
26 * Session data as array.
27 *
28 * We use this array internally to perform database related operations.
29 *
30 * @var mixed
31 */
32 protected $data;
33
34 /**
35 * Session data as object.
36 * Session data in object format will be return when query.
37 *
38 * @var stdClass
39 */
40 protected $dataObj;
41
42 /**
43 * Class constructor.
44 */
45 public function __construct()
46 {
47 $this->get();
48 }
49
50 /**
51 * Convert session data to object.
52 *
53 * @since 2.7.0
54 *
55 * @param array $data
56 *
57 * @return stdClass
58 */
59 protected function convertToObject($data)
60 {
61 $dataObj = new stdClass();
62 $data = $this->renameArrayKeysToPropertyNames($data);
63
64 foreach ($data as $key => $value) {
65 if (is_array($value)) {
66 $dataObj->{$key} = $this->convertToObject($value);
67 continue;
68 }
69
70 $dataObj->{$key} = $value;
71 }
72
73 return $dataObj;
74 }
75
76 /**
77 * Get data from session.
78 *
79 * @since 2.7.0
80 * @return stdClass
81 */
82 public function get()
83 {
84 if ($this->dataObj) {
85 return $this->dataObj;
86 }
87
88 $this->data = Give()->session->get($this->sessionKey, $this->data);
89 $this->dataObj = $this->convertToObject($this->data);
90
91 return $this->dataObj;
92 }
93
94 /**
95 * Get data from session.
96 *
97 * @since 2.7.0
98 *
99 * @param string $key
100 *
101 * @return stdClass
102 */
103 public function getByKey($key)
104 {
105 $result = null;
106
107 if (null !== $this->dataObj) {
108 $result = property_exists($this->dataObj, $key) ? $this->dataObj->{$key} : $result;
109 }
110
111 return $result;
112 }
113
114 /**
115 * Save/Replace/Remove data into session
116 *
117 * @param string $key
118 * @param mixed $data
119 *
120 * @return string
121 */
122 public function store($key, $data)
123 {
124 $this->validateData($data);
125
126 if ( ! empty($this->data[$key])) {
127 // Merge data.
128 $this->data[$key] = array_merge(
129 $this->data[$key],
130 $data
131 );
132 } else {
133 $this->data[$key] = $data;
134 }
135
136 return $this->set();
137 }
138
139 /**
140 * Store data into session.
141 *
142 * @since 2.7.0
143 * @return string
144 */
145 protected function set()
146 {
147 $this->dataObj = $this->convertToObject($this->data);
148
149 return Give()->session->set($this->sessionKey, $this->data);
150 }
151
152 /**
153 * Replace session data.
154 *
155 * @since 2.7.0
156 *
157 * @param mixed $data
158 *
159 * @param string $key
160 *
161 * @return string
162 */
163 public function replace($key, $data)
164 {
165 $this->validateData($data);
166 $this->data[$key] = $data;
167
168 return $this->set();
169 }
170
171 /**
172 * Delete session data.
173 *
174 * @since 2.7.0
175 *
176 * @param string $key
177 *
178 * @return string
179 */
180 public function delete($key)
181 {
182 if (array_key_exists($key, $this->data)) {
183 unset($this->data[$key]);
184 }
185
186 return $this->set();
187 }
188
189 /**
190 * Return session data in array format.
191 *
192 * @since 2.7.0
193 * @return array
194 */
195 public function toArray()
196 {
197 return $this->data;
198 }
199
200 /**
201 * Rename array key to property name
202 *
203 * @since 2.7.0
204 *
205 * @param array $data
206 *
207 * @return array
208 */
209 protected function renameArrayKeysToPropertyNames($data)
210 {
211 foreach ($data as $key => $value) {
212 // Convert array key string to property name.
213 // Remove other then char, dash, give related prefix and hyphen and prefix.
214 $newName = preg_replace('/[^a-zA-Z0-9_\-]/', '', $key);
215 $newName = preg_replace('/(-|_)?give(-|_)?/', '', $newName);
216 $keyParts = preg_split('/(-|_)/', $newName);
217 $keyParts = array_map('ucfirst', array_filter($keyParts));
218 $newName = lcfirst(implode('', $keyParts));
219
220 // Remove old key/value pair if renamed.
221 if ($key !== $newName) {
222 unset($data[$key]);
223 }
224
225 if (is_array($value)) {
226 // Process array.
227 $data[$newName] = $this->renameArrayKeysToPropertyNames($value);
228 continue;
229 }
230
231 $data[$newName] = $value;
232 }
233
234 return $data;
235 }
236
237 /**
238 * Validate data.
239 *
240 * @since 2.7.0
241 *
242 * @param mixed $data
243 *
244 */
245 protected function validateData($data)
246 {
247 if (is_array($data) && isset($data[0])) {
248 throw new InvalidArgumentException('Invalid value. Please pass an associative array');
249 }
250 }
251 }
252