PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.14.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 / Receipt / DonationReceipt.php
give / src / Receipt Last commit date
DonationReceipt.php 3 years ago LineItem.php 4 years ago Receipt.php 3 years ago Section.php 4 years ago UpdateReceipt.php 4 years ago
DonationReceipt.php
222 lines
1 <?php
2
3 namespace Give\Receipt;
4
5 use Give\Donations\ValueObjects\DonationStatus;
6 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
7 use Give_Payment;
8
9 class DonationReceipt extends Receipt
10 {
11 /**
12 * Receipt donor section id.
13 */
14 const DONORSECTIONID = 'Donor';
15
16 /**
17 * Receipt donation section id.
18 */
19 const DONATIONSECTIONID = 'Donation';
20
21 /**
22 * Receipt additional information section id.
23 */
24 const ADDITIONALINFORMATIONSECTIONID = 'AdditionalInformation';
25
26 /**
27 * Donation id.
28 *
29 * @since 2.7.0
30 * @var int $donationId
31 */
32 public $donationId;
33
34 /**
35 * @var Give_Payment
36 * @since 2.18.0
37 */
38 protected $donation;
39
40 /**
41 * Receipt constructor.
42 *
43 * @param $donationId
44 *
45 * @since 2.7.0
46 */
47 public function __construct($donationId)
48 {
49 $this->donationId = $donationId;
50 $this->donation = new Give_Payment($donationId);
51
52 $this->addDonorSection();
53 $this->addDonationSection();
54 $this->addAdditionalInformationSection();
55 }
56
57 /**
58 * Add donor section.
59 *
60 * @since 2.7.0
61 */
62 private function addDonorSection()
63 {
64 $donorSection = $this->addSection([
65 'id' => self::DONORSECTIONID,
66 'label' => esc_html__('Donor Details', 'give'),
67 ]);
68
69 $donorSection->addLineItem([
70 'id' => 'fullName',
71 'label' => esc_html__('Donor Name', 'give'),
72 'value' => trim("{$this->donation->first_name} {$this->donation->last_name}"),
73 'icon' => '<i class="fas fa-user"></i>',
74 ]);
75
76 $donorSection->addLineItem([
77 'id' => 'emailAddress',
78 'label' => esc_html__('Email Address', 'give'),
79 'value' => $this->donation->email,
80 'icon' => '<i class="fas fa-envelope"></i>',
81 ]);
82
83 if ($address = $this->getDonorBillingAddress()) {
84 $donorSection->addLineItem([
85 'id' => 'billingAddress',
86 'label' => esc_html__('Billing Address', 'give'),
87 'value' => $address,
88 'icon' => '<i class="fas fa-globe-americas"></i>',
89 ]);
90 }
91 }
92
93 /**
94 * Add donation section.
95 *
96 * @since 2.24.0 Add notice for donations with the "processing" status
97 * @since 2.7.0
98 */
99 private function addDonationSection()
100 {
101 $donationSection = $this->addSection([
102 'id' => self::DONATIONSECTIONID,
103 'label' => esc_html__('Donation Details', 'give'),
104 ]);
105
106 $donationSection->addLineItem([
107 'id' => 'paymentStatus',
108 'label' => esc_html__('Payment Status', 'give'),
109 'value' => give_get_payment_statuses()[$this->donation->post_status],
110 ]);
111
112 if (DonationStatus::PROCESSING()->getValue() === $this->donation->post_status) {
113 $donationSection->addLineItem([
114 'id' => 'processingStatusNotice',
115 'label' => '<div style="text-transform:initial;font-size:0.73rem;color:#3398DB;display:flex;flex-flow:row nowrap;white-space:pre-wrap;margin-top:-0.5rem;">' .
116 esc_html__('You will receive a final receipt in your email once it has been completed.',
117 'give') .
118 '</div>',
119 'value' => '',
120 ]);
121 }
122
123 $donationSection->addLineItem([
124 'id' => 'paymentMethod',
125 'label' => esc_html__('Payment Method', 'give'),
126 'value' => give_get_gateway_checkout_label($this->donation->gateway),
127 ]);
128
129 $donationSection->addLineItem([
130 'id' => 'amount',
131 'label' => esc_html__('Donation Amount', 'give'),
132 'value' => give_currency_filter(
133 give_format_amount($this->donation->total, ['donation_id' => $this->donation->ID]),
134 [
135 'currency_code' => $this->donation->currency,
136 'form_id' => $this->donation->form_id,
137 'decode_currency' => true,
138 ]
139 ),
140 ]);
141
142 $donationSection->addLineItem([
143 'id' => 'totalAmount',
144 'label' => esc_html__('Donation Total', 'give'),
145 'value' => give_currency_filter(
146 give_format_amount($this->donation->total, ['donation_id' => $this->donation->ID]),
147 [
148 'currency_code' => $this->donation->currency,
149 'form_id' => $this->donation->form_id,
150 'decode_currency' => true,
151 ]
152 ),
153 ]);
154 }
155
156 /**
157 * Add Additional Information Section
158 */
159 private function addAdditionalInformationSection()
160 {
161 $this->addSection([
162 'id' => self::ADDITIONALINFORMATIONSECTIONID,
163 'label' => esc_html__('Additional Information', 'give'),
164 ]);
165 }
166
167 /**
168 * Get donor billing address
169 *
170 * @return string|null
171 */
172 private function getDonorBillingAddress()
173 {
174 $address = give_get_donation_address($this->donationId);
175 $formatted = sprintf(
176 '%1$s%7$s%2$s%3$s, %4$s%5$s%7$s%6$s',
177 $address['line1'],
178 ! empty($address['line2']) ? $address['line2'] . "\r\n" : '',
179 $address['city'],
180 $address['state'],
181 $address['zip'],
182 $address['country'],
183 "\r\n"
184 );
185
186 $hasAddress = (bool) trim(str_replace(',', '', strip_tags($formatted)));
187
188 if ($hasAddress) {
189 return $formatted;
190 }
191
192 return null;
193 }
194
195 /**
196 * Set iterator position to zero when rewind.
197 *
198 * @since 2.7.0
199 */
200 public function rewind()
201 {
202 $this->position = 0;
203 }
204
205 /**
206 * Validate section.
207 *
208 * @param array $array
209 *
210 * @since 2.7.0
211 */
212 protected function validateSection($array)
213 {
214 $required = [ 'id' ];
215 $array = array_filter($array); // Remove empty values.
216
217 if (array_diff($required, array_keys($array))) {
218 throw new InvalidArgumentException(esc_html__('Invalid receipt section. Please provide valid section id', 'give'));
219 }
220 }
221 }
222