PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.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 / SessionDonation / SessionObjects / Donation.php
give / src / Session / SessionDonation / SessionObjects Last commit date
Donation.php 8 months ago FormEntry.php 1 year ago
Donation.php
239 lines
1 <?php
2
3 namespace Give\Session\SessionDonation\SessionObjects;
4
5 use DateTime;
6 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
7 use Give\Helpers\ArrayDataSet;
8 use Give\Session\Objects;
9 use Give\ValueObjects\CardInfo;
10 use Give\ValueObjects\DonorInfo;
11 use Give\ValueObjects\ValueObjects;
12
13 /**
14 * Class Donation
15 *
16 * This class is use to represent donation session data as object.
17 * You can add custom data but that data only store momentarily because of donation session time limit.
18 * This does not represent actual Donation model instead of that it has few donation related information which required for donation processing.
19 *
20 * @package Give\Session\SessionDonation\SessionObjects
21 *
22 * @property CardInfo $cardInfo
23 * @property FormEntry $formEntry
24 * @property DonorInfo $donorInfo
25 */
26 #[\AllowDynamicProperties]
27 class Donation implements Objects
28 {
29 /**
30 * Donation id.
31 *
32 * @since 2.7.0
33 * @var array
34 */
35 public $id;
36
37 /**
38 * Sanitized donation total amount.
39 *
40 * @since 2.7.0
41 * @var string
42 */
43 public $totalAmount;
44
45 /**
46 * Donation purchase key.
47 *
48 * @since 2.7.0
49 * @var string
50 */
51 public $purchaseKey;
52
53 /**
54 * Donor email.
55 *
56 * @since 2.7.0
57 * @var string
58 */
59 public $donorEmail;
60
61 /**
62 * Donor email.
63 *
64 * @since 2.7.0
65 * @var DateTime
66 */
67 public $createdAt;
68
69 /**
70 * Payment gateway id.
71 *
72 * @since 2.7.0
73 * @var array
74 */
75 public $paymentGateway;
76
77 /**
78 * Donation-related objects.
79 *
80 * @since 3.18.0
81 * @var FormEntry
82 */
83 public $formEntry;
84
85 /**
86 * Donor information.
87 *
88 * @since 3.18.0
89 * @var DonorInfo
90 */
91 public $donorInfo;
92
93 /**
94 * Card information.
95 *
96 * @since 3.18.0
97 * @var CardInfo
98 */
99 public $cardInfo;
100
101 /**
102 * Array of properties and their cast type.
103 *
104 * @var ValueObjects[]
105 */
106 private $caseTo = [
107 'formEntry' => FormEntry::class,
108 'donorInfo' => DonorInfo::class,
109 'cardInfo' => CardInfo::class,
110 ];
111
112 /**
113 * Take array and return object.
114 *
115 * @param $array
116 *
117 * @return Donation
118 */
119 public static function fromArray($array)
120 {
121 $expectedKeys = [
122 'id',
123 'totalAmount',
124 'purchaseKey',
125 'donorEmail',
126 'createdAt',
127 'paymentGateway',
128 'formEntry',
129 'cardInfo',
130 'donorInfo',
131 ];
132
133 if ( ! ArrayDataSet::hasRequiredKeys($array, $expectedKeys)) {
134 throw new InvalidArgumentException(
135 'Invalid Donation object, must have the exact following keys: ' . implode(', ', $expectedKeys)
136 );
137 }
138
139 $donation = new self();
140
141 $array['donorInfo'] = $donation->renameKeyInDonorInfo($array['donorInfo']);
142 $array['cardInfo'] = $donation->filterCardInfoKeys($array['cardInfo']);
143
144 foreach ($array as $key => $value) {
145 if (array_key_exists($key, $donation->caseTo)) {
146 $class = $donation->caseTo[$key];
147 $donation->{$key} = $class::fromArray($value);
148 continue;
149 }
150
151 $donation->{$key} = is_array($value) ?
152 json_decode(json_encode($value)) // Convert unlisted array type session data to stdClass object
153 : $value;
154 }
155
156 return $donation;
157 }
158
159 /**
160 * Rename array key in donor info
161 *
162 * @since 2.7.0
163 *
164 * @param array $array
165 *
166 * @return array
167 */
168 private function renameKeyInDonorInfo($array)
169 {
170 return ArrayDataSet::renameKeys(
171 $array,
172 [
173 'id' => 'wpUserId',
174 'title' => 'honorific',
175 ]
176 );
177 }
178
179 /**
180 * Filter array keys in card info
181 *
182 * @since 2.7.0
183 *
184 * @param $array
185 *
186 * @return array
187 */
188 private function filterCardInfoKeys($array)
189 {
190 $array = $this->removePrefixFromArrayKeys($array, ['card']);
191 $array = ArrayDataSet::renameKeys(
192 $array,
193 [
194 'address' => 'line1',
195 'address2' => 'line2',
196 ]
197 );
198 $array = ArrayDataSet::moveArrayItemsUnderArrayKey(
199 $array,
200 ['line1', 'line2', 'city', 'state', 'country', 'zip'],
201 'address'
202 );
203
204 // Rename zip to postal code.
205 $array['address']['postalCode'] = $array['address']['zip'];
206 unset($array['address']['zip']);
207
208 return $array;
209 }
210
211 /**
212 * Remove prefix from array key.
213 *
214 * @param array $array
215 * @param array $prefixes
216 *
217 * @return array
218 */
219 private function removePrefixFromArrayKeys($array, $prefixes)
220 {
221 foreach ($array as $key => $value) {
222 $newKey = lcfirst(str_replace((array)$prefixes, '', $key));
223
224 if ($key !== $newKey) {
225 unset($array[$key]);
226 }
227
228 if (is_array($value)) {
229 $array[$newKey] = $this->removePrefixFromArrayKeys($value, $prefixes);
230 continue;
231 }
232
233 $array[$newKey] = $value;
234 }
235
236 return $array;
237 }
238 }
239