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