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