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