PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.16.1
GiveWP – Donation Plugin and Fundraising Platform v2.16.1
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 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 5 years ago
Donation.php
193 lines
1 <?php
2 namespace Give\Session\SessionDonation\SessionObjects;
3
4 use DateTime;
5 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
6 use Give\Helpers\ArrayDataSet;
7 use Give\Session\Objects;
8 use Give\ValueObjects\CardInfo;
9 use Give\ValueObjects\DonorInfo;
10 use Give\ValueObjects\ValueObjects;
11
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 * Donation id.
29 *
30 * @since 2.7.0
31 * @var array
32 */
33 public $id;
34
35 /**
36 * Sanitized donation total amount.
37 *
38 * @since 2.7.0
39 * @var string
40 */
41 public $totalAmount;
42
43 /**
44 * Donation purchase key.
45 *
46 * @since 2.7.0
47 * @var string
48 */
49 public $purchaseKey;
50
51 /**
52 * Donor email.
53 *
54 * @since 2.7.0
55 * @var string
56 */
57 public $donorEmail;
58
59 /**
60 * Donor email.
61 *
62 * @since 2.7.0
63 * @var DateTime
64 */
65 public $createdAt;
66
67 /**
68 * Payment gateway id.
69 *
70 * @since 2.7.0
71 * @var array
72 */
73 public $paymentGateway;
74
75 /**
76 * Array of properties and their cast type.
77 *
78 * @var ValueObjects[]
79 */
80 private $caseTo = [
81 'formEntry' => FormEntry::class,
82 'donorInfo' => DonorInfo::class,
83 'cardInfo' => CardInfo::class,
84 ];
85
86 /**
87 * Take array and return object.
88 *
89 * @param $array
90 *
91 * @return Donation
92 */
93 public static function fromArray( $array ) {
94 $expectedKeys = [ 'id', 'totalAmount', 'purchaseKey', 'donorEmail', 'createdAt', 'paymentGateway', 'formEntry', 'cardInfo', 'donorInfo' ];
95
96 if ( ! ArrayDataSet::hasRequiredKeys( $array, $expectedKeys ) ) {
97 throw new InvalidArgumentException(
98 'Invalid Donation object, must have the exact following keys: ' . implode( ', ', $expectedKeys )
99 );
100 }
101
102 $donation = new self();
103
104 $array['donorInfo'] = $donation->renameKeyInDonorInfo( $array['donorInfo'] );
105 $array['cardInfo'] = $donation->filterCardInfoKeys( $array['cardInfo'] );
106
107 foreach ( $array as $key => $value ) {
108 if ( array_key_exists( $key, $donation->caseTo ) ) {
109 $class = $donation->caseTo[ $key ];
110 $donation->{$key} = $class::fromArray( $value );
111 continue;
112 }
113
114 $donation->{$key} = is_array( $value ) ?
115 json_decode( json_encode( $value ) ) // Convert unlisted array type session data to stdClass object
116 : $value;
117 }
118
119 return $donation;
120 }
121
122 /**
123 * Rename array key in donor info
124 *
125 * @since 2.7.0
126 * @param array $array
127 *
128 * @return array
129 */
130 private function renameKeyInDonorInfo( $array ) {
131 return ArrayDataSet::renameKeys(
132 $array,
133 [
134 'id' => 'wpUserId',
135 'title' => 'honorific',
136 ]
137 );
138 }
139
140 /**
141 * Filter array keys in card info
142 *
143 * @since 2.7.0
144 * @param $array
145 * @return array
146 */
147 private function filterCardInfoKeys( $array ) {
148 $array = $this->removePrefixFromArrayKeys( $array, [ 'card' ] );
149 $array = ArrayDataSet::renameKeys(
150 $array,
151 [
152 'address' => 'line1',
153 'address2' => 'line2',
154 ]
155 );
156 $array = ArrayDataSet::moveArrayItemsUnderArrayKey( $array, [ 'line1', 'line2', 'city', 'state', 'country', 'zip' ], 'address' );
157
158 // Rename zip to postal code.
159 $array['address']['postalCode'] = $array['address']['zip'];
160 unset( $array['address']['zip'] );
161
162 return $array;
163 }
164
165 /**
166 * Remove prefix from array key.
167 *
168 * @param array $array
169 * @param array $prefixes
170 *
171 * @return array
172 */
173 private function removePrefixFromArrayKeys( $array, $prefixes ) {
174 foreach ( $array as $key => $value ) {
175 $newKey = lcfirst( str_replace( (array) $prefixes, '', $key ) );
176
177 if ( $key !== $newKey ) {
178 unset( $array[ $key ] );
179 }
180
181 if ( is_array( $value ) ) {
182 $array[ $newKey ] = $this->removePrefixFromArrayKeys( $value, $prefixes );
183 continue;
184 }
185
186 $array[ $newKey ] = $value;
187
188 }
189
190 return $array;
191 }
192 }
193