PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.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 / Campaigns / DataTransferObjects / CampaignGoalData.php
give / src / Campaigns / DataTransferObjects Last commit date
CampaignGoalData.php 1 year ago
CampaignGoalData.php
142 lines
1 <?php
2
3 namespace Give\Campaigns\DataTransferObjects;
4
5 use Give\Campaigns\CampaignDonationQuery;
6 use Give\Campaigns\CampaignSubscriptionQuery;
7 use Give\Campaigns\Models\Campaign;
8 use Give\Campaigns\ValueObjects\CampaignGoalType;
9 use Give\Framework\Support\Contracts\Arrayable;
10
11 /**
12 * @since 4.0.0
13 */
14 class CampaignGoalData implements Arrayable
15 {
16 /**
17 * @var Campaign
18 */
19 private $campaign;
20
21 /**
22 * @var int
23 */
24 public $actual;
25
26 /**
27 * @var int
28 */
29 public $percentage;
30
31 /**
32 * @var int
33 */
34 public $goal;
35
36 /**
37 * @var int|string
38 */
39 public $goalFormatted;
40
41 /**
42 * @var int|string
43 */
44 public $actualFormatted;
45
46 /**
47 * @since 4.0.0
48 */
49 public function __construct(Campaign $campaign)
50 {
51 $this->campaign = $campaign;
52 $this->actual = $this->getActual();
53 $this->actualFormatted = $this->getActualFormatted();
54 $this->percentage = $this->getPercentage();
55 $this->goal = $campaign->goal;
56 $this->goalFormatted = $this->getGoalFormatted();
57 }
58
59 /**
60 * @since 4.2.0 return union type int|float
61 * @since 4.0.0
62 *
63 * @return int|float
64 */
65 private function getActual()
66 {
67 $query = $this->campaign->goalType->isOneOf(
68 CampaignGoalType::SUBSCRIPTIONS(),
69 CampaignGoalType::AMOUNT_FROM_SUBSCRIPTIONS(),
70 CampaignGoalType::DONORS_FROM_SUBSCRIPTIONS()
71 )
72 ? new CampaignSubscriptionQuery($this->campaign)
73 : new CampaignDonationQuery($this->campaign);
74
75 switch ($this->campaign->goalType->getValue()) {
76 case CampaignGoalType::DONATIONS():
77 case CampaignGoalType::SUBSCRIPTIONS():
78 return $query->countDonations();
79
80 case CampaignGoalType::DONORS():
81 case CampaignGoalType::DONORS_FROM_SUBSCRIPTIONS():
82 return $query->countDonors();
83
84 case CampaignGoalType::AMOUNT_FROM_SUBSCRIPTIONS():
85 return $query->sumInitialAmount();
86
87 case CampaignGoalType::AMOUNT():
88 default:
89 return $query->sumIntendedAmount();
90 }
91 }
92
93 /**
94 * @since 4.0.0
95 */
96 private function getPercentage(): float
97 {
98 $percentage = $this->campaign->goal
99 ? $this->actual / $this->campaign->goal
100 : 0;
101 return round($percentage * 100, 2);
102 }
103
104 /**
105 * @since 4.0.0
106 */
107 private function getActualFormatted(): string
108 {
109 if ($this->campaign->goalType->isAmount()) {
110 return give_currency_filter(give_format_amount($this->actual));
111 }
112
113 return $this->actual;
114 }
115
116 /**
117 * @since 4.0.0
118 */
119 private function getGoalFormatted(): string
120 {
121 if ($this->campaign->goalType->isAmount()) {
122 return give_currency_filter(give_format_amount($this->goal));
123 }
124
125 return $this->goal;
126 }
127
128 /**
129 * @since 4.0.0
130 */
131 public function toArray(): array
132 {
133 return [
134 'actual' => $this->actual,
135 'actualFormatted' => $this->actualFormatted,
136 'percentage' => $this->percentage,
137 'goal' => $this->goal,
138 'goalFormatted' => $this->goalFormatted,
139 ];
140 }
141 }
142