PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.15.2
GiveWP – Donation Plugin and Fundraising Platform v4.15.2
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 / Subscriptions / ViewModels / SubscriptionViewModel.php
give / src / Subscriptions / ViewModels Last commit date
SubscriptionViewModel.php 5 months ago
SubscriptionViewModel.php
137 lines
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