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