PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.23.2
GiveWP – Donation Plugin and Fundraising Platform v2.23.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 4 years ago FormEntry.php 4 years ago
Donation.php
214 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 * Array of properties and their cast type.
78 *
79 * @var ValueObjects[]
80 */
81 private $caseTo = [
82 'formEntry' => FormEntry::class,
83 'donorInfo' => DonorInfo::class,
84 'cardInfo' => CardInfo::class,
85 ];
86
87 /**
88 * Take array and return object.
89 *
90 * @param $array
91 *
92 * @return Donation
93 */
94 public static function fromArray($array)
95 {
96 $expectedKeys = [
97 'id',
98 'totalAmount',
99 'purchaseKey',
100 'donorEmail',
101 'createdAt',
102 'paymentGateway',
103 'formEntry',
104 'cardInfo',
105 'donorInfo',
106 ];
107
108 if ( ! ArrayDataSet::hasRequiredKeys($array, $expectedKeys)) {
109 throw new InvalidArgumentException(
110 'Invalid Donation object, must have the exact following keys: ' . implode(', ', $expectedKeys)
111 );
112 }
113
114 $donation = new self();
115
116 $array['donorInfo'] = $donation->renameKeyInDonorInfo($array['donorInfo']);
117 $array['cardInfo'] = $donation->filterCardInfoKeys($array['cardInfo']);
118
119 foreach ($array as $key => $value) {
120 if (array_key_exists($key, $donation->caseTo)) {
121 $class = $donation->caseTo[$key];
122 $donation->{$key} = $class::fromArray($value);
123 continue;
124 }
125
126 $donation->{$key} = is_array($value) ?
127 json_decode(json_encode($value)) // Convert unlisted array type session data to stdClass object
128 : $value;
129 }
130
131 return $donation;
132 }
133
134 /**
135 * Rename array key in donor info
136 *
137 * @since 2.7.0
138 *
139 * @param array $array
140 *
141 * @return array
142 */
143 private function renameKeyInDonorInfo($array)
144 {
145 return ArrayDataSet::renameKeys(
146 $array,
147 [
148 'id' => 'wpUserId',
149 'title' => 'honorific',
150 ]
151 );
152 }
153
154 /**
155 * Filter array keys in card info
156 *
157 * @since 2.7.0
158 *
159 * @param $array
160 *
161 * @return array
162 */
163 private function filterCardInfoKeys($array)
164 {
165 $array = $this->removePrefixFromArrayKeys($array, ['card']);
166 $array = ArrayDataSet::renameKeys(
167 $array,
168 [
169 'address' => 'line1',
170 'address2' => 'line2',
171 ]
172 );
173 $array = ArrayDataSet::moveArrayItemsUnderArrayKey(
174 $array,
175 ['line1', 'line2', 'city', 'state', 'country', 'zip'],
176 'address'
177 );
178
179 // Rename zip to postal code.
180 $array['address']['postalCode'] = $array['address']['zip'];
181 unset($array['address']['zip']);
182
183 return $array;
184 }
185
186 /**
187 * Remove prefix from array key.
188 *
189 * @param array $array
190 * @param array $prefixes
191 *
192 * @return array
193 */
194 private function removePrefixFromArrayKeys($array, $prefixes)
195 {
196 foreach ($array as $key => $value) {
197 $newKey = lcfirst(str_replace((array)$prefixes, '', $key));
198
199 if ($key !== $newKey) {
200 unset($array[$key]);
201 }
202
203 if (is_array($value)) {
204 $array[$newKey] = $this->removePrefixFromArrayKeys($value, $prefixes);
205 continue;
206 }
207
208 $array[$newKey] = $value;
209 }
210
211 return $array;
212 }
213 }
214