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