PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.8.0
GiveWP – Donation Plugin and Fundraising Platform v4.8.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 / Donations / ViewModels / DonationViewModel.php
give / src / Donations / ViewModels Last commit date
DonationViewModel.php 9 months ago
DonationViewModel.php
225 lines
1 <?php
2
3 namespace Give\Donations\ViewModels;
4
5 use Give\API\REST\V3\Routes\Donations\ValueObjects\DonationAnonymousMode;
6 use Give\DonationForms\Models\DonationForm;
7 use Give\DonationForms\Repositories\DonationFormRepository;
8 use Give\Donations\Models\Donation;
9 use Give\EventTickets\Repositories\EventTicketRepository;
10 use Give\Framework\FieldsAPI\Field;
11 use Give\Framework\FieldsAPI\Types;
12 use Give\Framework\PaymentGateways\PaymentGatewayRegister;
13 use Give\Framework\Support\Facades\DateTime\Temporal;
14
15 /**
16 * @since 4.6.0
17 */
18 class DonationViewModel
19 {
20 private Donation $donation;
21 private DonationAnonymousMode $anonymousMode;
22 private bool $includeSensitiveData = false;
23
24 /**
25 * @since 4.6.0
26 */
27 public function __construct(Donation $donation)
28 {
29 $this->donation = $donation;
30 }
31
32 /**
33 * @since 4.6.0
34 */
35 public function includeSensitiveData(bool $includeSensitiveData = true): DonationViewModel
36 {
37 $this->includeSensitiveData = $includeSensitiveData;
38
39 return $this;
40 }
41
42 /**
43 * @since 4.6.0
44 */
45 public function anonymousMode(DonationAnonymousMode $mode): DonationViewModel
46 {
47 $this->anonymousMode = $mode;
48
49 return $this;
50 }
51
52 /**
53 * @since 4.6.0
54 */
55 public function exports(): array
56 {
57 $data = array_merge(
58 $this->donation->toArray(),
59 [
60 'customFields' => $this->getCustomFields(),
61 'eventTicketsAmount' => $this->donation->eventTicketsAmount(),
62 'eventTickets' => $this->getEventTickets(),
63 'gateway' => $this->getGatewayDetails(),
64 ]
65 );
66
67 if (!$this->includeSensitiveData) {
68 $sensitiveDataExcluded = [
69 'donorIp',
70 'email',
71 'phone',
72 'billingAddress',
73 'purchaseKey',
74 'customFields'
75 ];
76
77 foreach ($sensitiveDataExcluded as $propertyName) {
78 switch ($propertyName) {
79 case 'billingAddress':
80 case 'customFields':
81 $data[$propertyName] = [];
82 break;
83 default:
84 $data[$propertyName] = '';
85 break;
86 }
87 }
88 }
89
90 if (isset($this->anonymousMode) && $this->anonymousMode->isRedacted() && $this->donation->anonymous) {
91 $anonymousDataRedacted = [
92 'donorId',
93 'honorific',
94 'firstName',
95 'lastName',
96 'company',
97 'customFields'
98 ];
99
100 foreach ($anonymousDataRedacted as $propertyName) {
101 switch ($propertyName) {
102 case 'donorId':
103 $data[$propertyName] = 0;
104 break;
105 case 'customFields':
106 $data[$propertyName] = [];
107 break;
108 default:
109 $data[$propertyName] = __('anonymous', 'give');
110 break;
111 }
112 }
113 }
114
115 return $data;
116 }
117
118 /**
119 * Get custom fields for the donation
120 *
121 * @since 4.6.0
122 */
123 private function getCustomFields(): array
124 {
125 $customFields = [];
126
127 // get custom fields from v3 forms
128 $v3Form = $this->getDonationForm();
129
130 if ($v3Form) {
131 $displayedFields = $this->getDisplayedDonationMetaFieldsForForm($v3Form);
132
133 foreach ($displayedFields as $field) {
134 $value = $this->getFieldValue($field);
135
136 if (empty($value)) {
137 continue;
138 }
139
140 $customFields[] = [
141 'label' => method_exists($field, 'getLabel') ? $field->getLabel() : $field->getName(),
142 'value' => $value,
143 ];
144 }
145 }
146
147 return apply_filters('givewp_donation_details_custom_fields', $customFields, $this->donation->id);
148 }
149
150 /**
151 * Get donation form for the donation
152 *
153 * @since 4.6.0
154 */
155 private function getDonationForm(): ?DonationForm
156 {
157 $formId = $this->donation->formId;
158
159 if (!$formId || give(DonationFormRepository::class)->isLegacyForm($formId)) {
160 return null;
161 }
162
163 return DonationForm::find($formId);
164 }
165
166 /**
167 * Get displayed donation meta fields for a form
168 *
169 * @since 4.6.0
170 */
171 private function getDisplayedDonationMetaFieldsForForm(DonationForm $form): array
172 {
173 return array_filter($form->schema()->getFields(), static function (Field $field): bool {
174 return $field->shouldShowInAdmin() && !$field->shouldStoreAsDonorMeta();
175 });
176 }
177
178 /**
179 * Get field value for a custom field
180 *
181 * @since 4.6.0
182 */
183 private function getFieldValue(Field $field): string
184 {
185 $metaValue = give()->payment_meta->get_meta($this->donation->id, $field->getName(), true);
186
187 if (empty($metaValue)) {
188 return '';
189 }
190
191 if ($field->getType() === Types::FILE) {
192 $attachmentLink = wp_get_attachment_link($metaValue);
193 return $attachmentLink ?: '';
194 }
195
196 return (string) $metaValue;
197 }
198
199 /**
200 * @since 4.6.0
201 */
202 private function getEventTickets(): array
203 {
204 return give(EventTicketRepository::class)->getEventTicketDetails($this->donation);
205 }
206
207 /**
208 * @since 4.8.0 Return empty array if gateway is not registered
209 * @since 4.6.0
210 */
211 private function getGatewayDetails(): array
212 {
213 if ( ! give(PaymentGatewayRegister::class)->hasPaymentGateway($this->donation->gatewayId)) {
214 return [];
215 }
216
217 return array_merge(
218 $this->donation->gateway()->toArray(),
219 [
220 'transactionUrl' => $this->donation->gateway()->getTransactionUrl($this->donation),
221 ]
222 );
223 }
224 }
225