PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.14.0
GiveWP – Donation Plugin and Fundraising Platform v2.14.0
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 6 years ago Receipt.php 6 years ago Section.php 5 years ago UpdateReceipt.php 6 years ago
DonationReceipt.php
278 lines
1 <?php
2 namespace Give\Receipt;
3
4 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
5 use function give_get_payment_meta as getDonationMetaData;
6 use function give_get_gateway_checkout_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( $billingAddressLineItem );
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%7$s%2$s%3$s, %4$s%5$s%7$s%6$s',
138 $address['line1'],
139 ! empty( $address['line2'] ) ? $address['line2'] . "\r\n" : '',
140 $address['city'],
141 $address['state'],
142 $address['zip'],
143 $address['country'],
144 "\r\n"
145 );
146
147 return [
148 'id' => 'billingAddress',
149 'label' => esc_html__( 'Billing Address', 'give' ),
150 'value' => $address,
151 'icon' => '<i class="fas fa-globe-americas"></i>',
152 ];
153 }
154
155 /**
156 * Get donor section.
157 *
158 * @return array
159 * @since 2.7.0
160 */
161 private function getDonationSection() {
162 return [
163 'id' => self::DONATIONSECTIONID,
164 ];
165 }
166
167 /**
168 * Get donation payment gateway line ite.
169 *
170 * @return array
171 * @since 2.7.0
172 */
173 private function getDonationPaymentGatewayLineItem() {
174 return [
175 'id' => 'paymentMethod',
176 'label' => esc_html__( 'Payment Method', 'give' ),
177 'value' => getGatewayLabel( getDonationMetaData( $this->donationId, '_give_payment_gateway', true ) ),
178 ];
179 }
180
181 /**
182 * Get donation status line item.
183 *
184 * @return array
185 * @since 2.7.0
186 */
187 private function getDonationStatusLineItem() {
188 return [
189 'id' => 'paymentStatus',
190 'label' => esc_html__( 'Payment Status', 'give' ),
191 'value' => give_get_payment_statuses()[ get_post_status( $this->donationId ) ],
192 ];
193 }
194
195 /**
196 * Get donation amount line item.
197 *
198 * @return array
199 * @since 2.7.0
200 */
201 private function getDonationAmountLineItem() {
202 $value = filterCurrency(
203 formatAmount( getDonationMetaData( $this->donationId, '_give_payment_total', true ), [ 'donation_id' => $this->donationId ] ),
204 [
205 'currency_code' => getDonationMetaData( $this->donationId, '_give_payment_currency', true ),
206 'decode_currency' => true,
207 'form_id' => getDonationMetaData( $this->donationId, '_give_payment_form_id', true ),
208 ]
209 );
210
211 return [
212 'id' => 'amount',
213 'label' => esc_html__( 'Donation Amount', 'give' ),
214 'value' => $value,
215 ];
216 }
217
218 /**
219 * Get donation total amount line item.
220 *
221 * @return array
222 * @since 2.7.0
223 */
224 private function getDonationTotalAmountLineItem() {
225 $value = filterCurrency(
226 formatAmount( getDonationMetaData( $this->donationId, '_give_payment_total', true ), [ 'donation_id' => $this->donationId ] ),
227 [
228 'currency_code' => getDonationMetaData( $this->donationId, '_give_payment_currency', true ),
229 'decode_currency' => true,
230 'form_id' => getDonationMetaData( $this->donationId, '_give_payment_form_id', true ),
231 ]
232 );
233
234 return [
235 'id' => 'totalAmount',
236 'label' => esc_html__( 'Donation Total', 'give' ),
237 'value' => $value,
238 ];
239 }
240
241 /**
242 * Get additional information section.
243 *
244 * @return array
245 * @since 2.7.0
246 */
247 private function getAdditionInformationSection() {
248 return [
249 'id' => self::ADDITIONALINFORMATIONSECTIONID,
250 'label' => esc_html__( 'Additional Information', 'give' ),
251 ];
252 }
253
254 /**
255 * Set iterator position to zero when rewind.
256 *
257 * @since 2.7.0
258 */
259 public function rewind() {
260 $this->position = 0;
261 }
262
263 /**
264 * Validate section.
265 *
266 * @param array $array
267 * @since 2.7.0
268 */
269 protected function validateSection( $array ) {
270 $required = [ 'id' ];
271 $array = array_filter( $array ); // Remove empty values.
272
273 if ( array_diff( $required, array_keys( $array ) ) ) {
274 throw new InvalidArgumentException( esc_html__( 'Invalid receipt section. Please provide valid section id', 'give' ) );
275 }
276 }
277 }
278