PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.17.3
GiveWP – Donation Plugin and Fundraising Platform v2.17.3
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 / Receipt / DonationReceipt.php
give / src / Receipt Last commit date
DonationReceipt.php 4 years ago LineItem.php 4 years ago Receipt.php 4 years ago Section.php 4 years ago UpdateReceipt.php 4 years ago
DonationReceipt.php
304 lines
1 <?php
2
3 namespace Give\Receipt;
4
5 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
6
7 use function give_currency_filter as filterCurrency;
8 use function give_format_amount as formatAmount;
9 use function give_get_donation_address as getDonationDonorAddress;
10 use function give_get_donation_donor_email as getDonationDonorEmail;
11 use function give_get_gateway_checkout_label as getGatewayLabel;
12 use function give_get_payment_meta as getDonationMetaData;
13
14 class DonationReceipt extends Receipt
15 {
16 /**
17 * Receipt donor section id.
18 */
19 const DONORSECTIONID = 'Donor';
20
21 /**
22 * Receipt donation section id.
23 */
24 const DONATIONSECTIONID = 'Donation';
25
26 /**
27 * Receipt additional information section id.
28 */
29 const ADDITIONALINFORMATIONSECTIONID = 'AdditionalInformation';
30
31 /**
32 * Donation id.
33 *
34 * @since 2.7.0
35 * @var int $donationId
36 */
37 public $donationId;
38
39 /**
40 * Receipt constructor.
41 *
42 * @since 2.7.0
43 *
44 * @param $donationId
45 */
46 public function __construct($donationId)
47 {
48 $this->donationId = $donationId;
49
50 $this->addDonorSection();
51 $this->addDonationSection();
52 $this->addSection($this->getAdditionInformationSection()); // Additional Information Section
53 }
54
55 /**
56 * Add donor section.
57 *
58 * @since 2.7.0
59 */
60 private function addDonorSection()
61 {
62 $billingAddressLineItem = $this->getDonorBillingAddressLineItem();
63 $hasAddress = (bool)trim(
64 str_replace(',', '', strip_tags($billingAddressLineItem['value']))
65 ); // Remove formatting from address.
66
67 $section = $this->addSection($this->getDonorSection());
68 $section->addLineItem($this->getDonorNameLineItem());
69 $section->addLineItem($this->getDonorEmailLineItem());
70
71 // Add billing address line item only if donor has billing address.
72 if ($hasAddress) {
73 $section->addLineItem($billingAddressLineItem);
74 }
75 }
76
77 /**
78 * Add donation section.
79 *
80 * @since 2.7.0
81 */
82 private function addDonationSection()
83 {
84 $section = $this->addSection($this->getDonationSection());
85 $section->addLineItem($this->getDonationPaymentGatewayLineItem());
86 $section->addLineItem($this->getDonationStatusLineItem());
87 $section->addLineItem($this->getDonationAmountLineItem());
88 $section->addLineItem($this->getDonationTotalAmountLineItem());
89 }
90
91 /**
92 * Get donor section.
93 *
94 * @since 2.7.0
95 * @return array
96 */
97 private function getDonorSection()
98 {
99 return [
100 'id' => self::DONORSECTIONID,
101 'label' => esc_html__('Donation Details', 'give'),
102 ];
103 }
104
105 /**
106 * Get donor name line item.
107 *
108 * @since 2.7.0
109 * @return array
110 */
111 private function getDonorNameLineItem()
112 {
113 $firstName = getDonationMetaData($this->donationId, '_give_donor_billing_first_name', true);
114 $lastName = getDonationMetaData($this->donationId, '_give_donor_billing_last_name', true);
115
116 return [
117 'id' => 'fullName',
118 'label' => esc_html__('Donor Name', 'give'),
119 'value' => trim("{$firstName} {$lastName}"),
120 'icon' => '<i class="fas fa-user"></i>',
121 ];
122 }
123
124 /**
125 * Get donor email line item.
126 *
127 * @since 2.7.0
128 * @return array
129 */
130 private function getDonorEmailLineItem()
131 {
132 return [
133 'id' => 'emailAddress',
134 'label' => esc_html__('Email Address', 'give'),
135 'value' => getDonationDonorEmail($this->donationId),
136 'icon' => '<i class="fas fa-envelope"></i>',
137 ];
138 }
139
140 /**
141 * Get donor address line item.
142 *
143 * @since 2.7.0
144 * @return array
145 */
146 private function getDonorBillingAddressLineItem()
147 {
148 $address = getDonationDonorAddress($this->donationId);
149 $address = sprintf(
150 '%1$s%7$s%2$s%3$s, %4$s%5$s%7$s%6$s',
151 $address['line1'],
152 ! empty($address['line2']) ? $address['line2'] . "\r\n" : '',
153 $address['city'],
154 $address['state'],
155 $address['zip'],
156 $address['country'],
157 "\r\n"
158 );
159
160 return [
161 'id' => 'billingAddress',
162 'label' => esc_html__('Billing Address', 'give'),
163 'value' => $address,
164 'icon' => '<i class="fas fa-globe-americas"></i>',
165 ];
166 }
167
168 /**
169 * Get donor section.
170 *
171 * @since 2.7.0
172 * @return array
173 */
174 private function getDonationSection()
175 {
176 return [
177 'id' => self::DONATIONSECTIONID,
178 ];
179 }
180
181 /**
182 * Get donation payment gateway line ite.
183 *
184 * @since 2.7.0
185 * @return array
186 */
187 private function getDonationPaymentGatewayLineItem()
188 {
189 return [
190 'id' => 'paymentMethod',
191 'label' => esc_html__('Payment Method', 'give'),
192 'value' => getGatewayLabel(getDonationMetaData($this->donationId, '_give_payment_gateway', true)),
193 ];
194 }
195
196 /**
197 * Get donation status line item.
198 *
199 * @since 2.7.0
200 * @return array
201 */
202 private function getDonationStatusLineItem()
203 {
204 return [
205 'id' => 'paymentStatus',
206 'label' => esc_html__('Payment Status', 'give'),
207 'value' => give_get_payment_statuses()[get_post_status($this->donationId)],
208 ];
209 }
210
211 /**
212 * Get donation amount line item.
213 *
214 * @since 2.7.0
215 * @return array
216 */
217 private function getDonationAmountLineItem()
218 {
219 $value = filterCurrency(
220 formatAmount(getDonationMetaData($this->donationId, '_give_payment_total', true),
221 ['donation_id' => $this->donationId]),
222 [
223 'currency_code' => getDonationMetaData($this->donationId, '_give_payment_currency', true),
224 'decode_currency' => true,
225 'form_id' => getDonationMetaData($this->donationId, '_give_payment_form_id', true),
226 ]
227 );
228
229 return [
230 'id' => 'amount',
231 'label' => esc_html__('Donation Amount', 'give'),
232 'value' => $value,
233 ];
234 }
235
236 /**
237 * Get donation total amount line item.
238 *
239 * @since 2.7.0
240 * @return array
241 */
242 private function getDonationTotalAmountLineItem()
243 {
244 $value = filterCurrency(
245 formatAmount(getDonationMetaData($this->donationId, '_give_payment_total', true),
246 ['donation_id' => $this->donationId]),
247 [
248 'currency_code' => getDonationMetaData($this->donationId, '_give_payment_currency', true),
249 'decode_currency' => true,
250 'form_id' => getDonationMetaData($this->donationId, '_give_payment_form_id', true),
251 ]
252 );
253
254 return [
255 'id' => 'totalAmount',
256 'label' => esc_html__('Donation Total', 'give'),
257 'value' => $value,
258 ];
259 }
260
261 /**
262 * Get additional information section.
263 *
264 * @since 2.7.0
265 * @return array
266 */
267 private function getAdditionInformationSection()
268 {
269 return [
270 'id' => self::ADDITIONALINFORMATIONSECTIONID,
271 'label' => esc_html__('Additional Information', 'give'),
272 ];
273 }
274
275 /**
276 * Set iterator position to zero when rewind.
277 *
278 * @since 2.7.0
279 */
280 public function rewind()
281 {
282 $this->position = 0;
283 }
284
285 /**
286 * Validate section.
287 *
288 * @since 2.7.0
289 *
290 * @param array $array
291 */
292 protected function validateSection($array)
293 {
294 $required = ['id'];
295 $array = array_filter($array); // Remove empty values.
296
297 if (array_diff($required, array_keys($array))) {
298 throw new InvalidArgumentException(
299 esc_html__('Invalid receipt section. Please provide valid section id', 'give')
300 );
301 }
302 }
303 }
304