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