PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.13.2
GiveWP – Donation Plugin and Fundraising Platform v2.13.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 5 years ago Accessor.php 5 years ago Objects.php 6 years ago
Accessor.php
235 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 * Session Id.
19 *
20 * @var string
21 */
22 protected $sessionKey;
23
24 /**
25 * Session data as array.
26 *
27 * We use this array internally to perform database related operations.
28 *
29 * @var mixed
30 */
31 protected $data;
32
33 /**
34 * Session data as object.
35 * Session data in object format will be return when query.
36 *
37 * @var stdClass
38 */
39 protected $dataObj;
40
41 /**
42 * Class constructor.
43 */
44 public function __construct() {
45 $this->get();
46 }
47
48 /**
49 * Convert session data to object.
50 *
51 * @param array $data
52 *
53 * @return stdClass
54 * @since 2.7.0
55 */
56 protected function convertToObject( $data ) {
57 $dataObj = new stdClass();
58 $data = $this->renameArrayKeysToPropertyNames( $data );
59
60 foreach ( $data as $key => $value ) {
61 if ( is_array( $value ) ) {
62 $dataObj->{$key} = $this->convertToObject( $value );
63 continue;
64 }
65
66 $dataObj->{$key} = $value;
67 }
68
69 return $dataObj;
70 }
71
72 /**
73 * Get data from session.
74 *
75 * @return stdClass
76 * @since 2.7.0
77 */
78 public function get() {
79 if ( $this->dataObj ) {
80 return $this->dataObj;
81 }
82
83 $this->data = Give()->session->get( $this->sessionKey, $this->data );
84 $this->dataObj = $this->convertToObject( $this->data );
85
86 return $this->dataObj;
87 }
88
89 /**
90 * Get data from session.
91 *
92 * @param string $key
93 *
94 * @return stdClass
95 * @since 2.7.0
96 */
97 public function getByKey( $key ) {
98 $result = null;
99
100 if ( null !== $this->dataObj ) {
101 $result = property_exists( $this->dataObj, $key ) ? $this->dataObj->{$key} : $result;
102 }
103 return $result;
104 }
105
106 /**
107 * Save/Replace/Remove data into session
108 *
109 * @param string $key
110 * @param mixed $data
111 *
112 * @return string
113 */
114 public function store( $key, $data ) {
115 $this->validateData( $data );
116
117 if ( ! empty( $this->data[ $key ] ) ) {
118 // Merge data.
119 $this->data[ $key ] = array_merge(
120 $this->data[ $key ],
121 $data
122 );
123
124 } else {
125 $this->data[ $key ] = $data;
126 }
127
128 return $this->set();
129 }
130
131
132 /**
133 * Store data into session.
134 *
135 * @return string
136 * @since 2.7.0
137 */
138 protected function set() {
139 $this->dataObj = $this->convertToObject( $this->data );
140
141 return Give()->session->set( $this->sessionKey, $this->data );
142 }
143
144 /**
145 * Replace session data.
146 *
147 * @param string $key
148 * @param mixed $data
149 *
150 * @return string
151 * @since 2.7.0
152 */
153 public function replace( $key, $data ) {
154 $this->validateData( $data );
155 $this->data[ $key ] = $data;
156
157 return $this->set();
158 }
159
160 /**
161 * Delete session data.
162 *
163 * @param string $key
164 *
165 * @return string
166 * @since 2.7.0
167 */
168 public function delete( $key ) {
169 if ( array_key_exists( $key, $this->data ) ) {
170 unset( $this->data[ $key ] );
171 }
172
173 return $this->set();
174 }
175
176 /**
177 * Return session data in array format.
178 *
179 * @return array
180 * @since 2.7.0
181 */
182 public function toArray() {
183 return $this->data;
184 }
185
186 /**
187 * Rename array key to property name
188 *
189 * @param array $data
190 *
191 * @return array
192 * @since 2.7.0
193 */
194 protected function renameArrayKeysToPropertyNames( $data ) {
195
196 foreach ( $data as $key => $value ) {
197 // Convert array key string to property name.
198 // Remove other then char, dash, give related prefix and hyphen and prefix.
199 $newName = preg_replace( '/[^a-zA-Z0-9_\-]/', '', $key );
200 $newName = preg_replace( '/(-|_)?give(-|_)?/', '', $newName );
201 $keyParts = preg_split( '/(-|_)/', $newName );
202 $keyParts = array_map( 'ucfirst', array_filter( $keyParts ) );
203 $newName = lcfirst( implode( '', $keyParts ) );
204
205 // Remove old key/value pair if renamed.
206 if ( $key !== $newName ) {
207 unset( $data[ $key ] );
208 }
209
210 if ( is_array( $value ) ) {
211 // Process array.
212 $data[ $newName ] = $this->renameArrayKeysToPropertyNames( $value );
213 continue;
214 }
215
216 $data[ $newName ] = $value;
217 }
218
219 return $data;
220 }
221
222 /**
223 * Validate data.
224 *
225 * @param mixed $data
226 *
227 * @since 2.7.0
228 */
229 protected function validateData( $data ) {
230 if ( is_array( $data ) && isset( $data[0] ) ) {
231 throw new InvalidArgumentException( 'Invalid value. Please pass an associative array' );
232 }
233 }
234 }
235