PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.10.0
GiveWP – Donation Plugin and Fundraising Platform v4.10.0
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 9 months ago
SubscriptionViewModel.php
126 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\Subscriptions\Models\Subscription;
9
10 /**
11 * @since 4.8.0
12 */
13 class SubscriptionViewModel
14 {
15 private Subscription $subscription;
16
17 private DonorAnonymousMode $anonymousMode;
18
19 private bool $includeSensitiveData = false;
20
21 /**
22 * @since 4.8.0
23 */
24 public function __construct(Subscription $subscription)
25 {
26 $this->subscription = $subscription;
27 }
28
29 /**
30 * @since 4.8.0
31 */
32 public function includeSensitiveData(bool $includeSensitiveData = true): SubscriptionViewModel
33 {
34 $this->includeSensitiveData = $includeSensitiveData;
35
36 return $this;
37 }
38
39 /**
40 * @since 4.8.0
41 */
42 public function anonymousMode(DonorAnonymousMode $mode): SubscriptionViewModel
43 {
44 $this->anonymousMode = $mode;
45
46 return $this;
47 }
48
49 /**
50 * @since 4.10.0 added campaignId
51 * @since 4.8.0
52 */
53 public function exports(): array
54 {
55 $donor = $this->subscription->donor;
56
57 $data = array_merge(
58 $this->subscription->toArray(),
59 [
60 'firstName' => $donor ? $donor->firstName : '',
61 'lastName' => $donor ? $donor->lastName : '',
62 'gateway' => $this->getGatewayDetails(),
63 'projectedAnnualRevenue' => $this->subscription->projectedAnnualRevenue(),
64 'campaignId' => $this->subscription->campaign ? $this->subscription->campaign->id : null,
65 ]
66 );
67
68 if (!$this->includeSensitiveData) {
69 $sensitiveDataExcluded = [
70 'transactionId',
71 'gatewaySubscriptionId',
72 ];
73
74 foreach ($sensitiveDataExcluded as $propertyName) {
75 switch ($propertyName) {
76 default:
77 $data[$propertyName] = '';
78 break;
79 }
80 }
81 }
82
83 if (isset($this->anonymousMode) && $this->anonymousMode->isRedacted() && $this->subscription->donor->isAnonymous()) {
84 $anonymousDataRedacted = [
85 'donorId',
86 'firstName',
87 'lastName',
88 ];
89
90 foreach ($anonymousDataRedacted as $propertyName) {
91 switch ($propertyName) {
92 case 'donorId':
93 $data[$propertyName] = 0;
94 break;
95 default:
96 $data[$propertyName] = __('anonymous', 'give');
97 break;
98 }
99 }
100 }
101
102 return $data;
103 }
104
105 /**
106 * @since 4.10.0 Return null if subscription URL is not available
107 * @since 4.8.0
108 */
109 private function getGatewayDetails(): ?array
110 {
111 if (empty($this->subscription->gatewayId) || !give(PaymentGatewayRegister::class)->hasPaymentGateway($this->subscription->gatewayId)) {
112 return null;
113 }
114
115 $subscriptionUrl = $this->subscription->gateway()->gatewayDashboardSubscriptionUrl($this->subscription);
116
117 return array_merge(
118 $this->subscription->gateway()->toArray(),
119 [
120 'subscriptionUrl' => $subscriptionUrl ?: null,
121 'canSync' => $this->subscription->gateway()->subscriptionModule instanceof SubscriptionTransactionsSynchronizable
122 ]
123 );
124 }
125 }
126