PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.8.1
4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 All 254 releases
give / src / Subscriptions / ViewModels / SubscriptionViewModel.php

SubscriptionViewModel.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.8.1, at src/Subscriptions/ViewModels/SubscriptionViewModel.php

137 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Subscriptions\ViewModels;
4
5 use Give\API\REST\V3\Routes\Donors\ValueObjects\DonorAnonymousMode;
6 use Give\Framework\PaymentGateways\Contracts\Subscription\SubscriptionTransactionsSynchronizable;
7 use Give\Framework\PaymentGateways\PaymentGatewayRegister;
8 use Give\Framework\Support\Facades\Str;
9 use Give\Subscriptions\Models\Subscription;
10
11 /**
12 * @since 4.8.0
13 */
14 class SubscriptionViewModel
15 {
16 private Subscription $subscription;
17
18 private DonorAnonymousMode $anonymousMode;
19
20 private bool $includeSensitiveData = false;
21
22 /**
23 * @since 4.8.0
24 */
25 public function __construct(Subscription $subscription)
26 {
27 $this->subscription = $subscription;
28 }
29
30 /**
31 * @since 4.8.0
32 */
33 public function includeSensitiveData(bool $includeSensitiveData = true): SubscriptionViewModel
34 {
35 $this->includeSensitiveData = $includeSensitiveData;
36
37 return $this;
38 }
39
40 /**
41 * @since 4.8.0
42 */
43 public function anonymousMode(DonorAnonymousMode $mode): SubscriptionViewModel
44 {
45 $this->anonymousMode = $mode;
46
47 return $this;
48 }
49
50 /**
51 * @since 4.14.0 lastName should return only the first letter when sensitive data is not included
52 * @since 4.10.0 added campaignId
53 * @since 4.8.0
54 */
55 public function exports(): array
56 {
57 $donor = $this->subscription->donor;
58
59 $data = array_merge(
60 $this->subscription->toArray(),
61 [
62 'firstName' => $donor ? $donor->firstName : '',
63 'lastName' => $donor ? $donor->lastName : '',
64 'gateway' => $this->getGatewayDetails(),
65 'projectedAnnualRevenue' => $this->subscription->projectedAnnualRevenue(),
66 'campaignId' => $this->subscription->campaign ? $this->subscription->campaign->id : null,
67 ]
68 );
69
70 if (!$this->includeSensitiveData) {
71 $sensitiveDataExcluded = [
72 'transactionId',
73 'gatewaySubscriptionId',
74 'lastName',
75 ];
76
77 foreach ($sensitiveDataExcluded as $propertyName) {
78 switch ($propertyName) {
79 case 'lastName':
80 $data[$propertyName] = Str::substr($data[$propertyName], 0, 1);
81 break;
82 default:
83 $data[$propertyName] = '';
84 break;
85 }
86 }
87 }
88
89 if (isset($this->anonymousMode) && $this->anonymousMode->isRedacted() && $this->subscription->donor->isAnonymous()) {
90 $anonymousDataRedacted = [
91 'donorId',
92 'firstName',
93 'lastName',
94 ];
95
96 foreach ($anonymousDataRedacted as $propertyName) {
97 switch ($propertyName) {
98 case 'donorId':
99 $data[$propertyName] = 0;
100 break;
101 default:
102 $data[$propertyName] = __('anonymous', 'give');
103 break;
104 }
105 }
106 }
107
108 return $data;
109 }
110
111 /**
112 * @since 4.14.0 Return gateway details without subscriptionUrl when sensitive data is not included
113 * @since 4.10.0 Return null if subscription URL is not available
114 * @since 4.8.0
115 */
116 private function getGatewayDetails(): ?array
117 {
118 if (empty($this->subscription->gatewayId) || !give(PaymentGatewayRegister::class)->hasPaymentGateway($this->subscription->gatewayId)) {
119 return null;
120 }
121
122 if (!$this->includeSensitiveData) {
123 return $this->subscription->gateway()->toArray();
124 }
125
126 $subscriptionUrl = $this->subscription->gateway()->gatewayDashboardSubscriptionUrl($this->subscription);
127
128 return array_merge(
129 $this->subscription->gateway()->toArray(),
130 [
131 'subscriptionUrl' => $subscriptionUrl ?: null,
132 'canSync' => $this->subscription->gateway()->subscriptionModule instanceof SubscriptionTransactionsSynchronizable
133 ]
134 );
135 }
136 }
137