PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.0.0
GiveWP – Donation Plugin and Fundraising Platform v4.0.0
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 / Campaigns / DataTransferObjects / CampaignGoalData.php
give / src / Campaigns / DataTransferObjects Last commit date
CampaignGoalData.php 1 year ago
CampaignGoalData.php
139 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.0.0
61 */
62 private function getActual(): int
63 {
64 $query = $this->campaign->goalType->isOneOf(
65 CampaignGoalType::SUBSCRIPTIONS(),
66 CampaignGoalType::AMOUNT_FROM_SUBSCRIPTIONS(),
67 CampaignGoalType::DONORS_FROM_SUBSCRIPTIONS()
68 )
69 ? new CampaignSubscriptionQuery($this->campaign)
70 : new CampaignDonationQuery($this->campaign);
71
72 switch ($this->campaign->goalType->getValue()) {
73 case CampaignGoalType::DONATIONS():
74 case CampaignGoalType::SUBSCRIPTIONS():
75 return $query->countDonations();
76
77 case CampaignGoalType::DONORS():
78 case CampaignGoalType::DONORS_FROM_SUBSCRIPTIONS():
79 return $query->countDonors();
80
81 case CampaignGoalType::AMOUNT_FROM_SUBSCRIPTIONS():
82 return $query->sumInitialAmount();
83
84 case CampaignGoalType::AMOUNT():
85 default:
86 return $query->sumIntendedAmount();
87 }
88 }
89
90 /**
91 * @since 4.0.0
92 */
93 private function getPercentage(): float
94 {
95 $percentage = $this->campaign->goal
96 ? $this->actual / $this->campaign->goal
97 : 0;
98 return round($percentage * 100, 2);
99 }
100
101 /**
102 * @since 4.0.0
103 */
104 private function getActualFormatted(): string
105 {
106 if ($this->campaign->goalType->isAmount()) {
107 return give_currency_filter(give_format_amount($this->actual));
108 }
109
110 return $this->actual;
111 }
112
113 /**
114 * @since 4.0.0
115 */
116 private function getGoalFormatted(): string
117 {
118 if ($this->campaign->goalType->isAmount()) {
119 return give_currency_filter(give_format_amount($this->goal));
120 }
121
122 return $this->goal;
123 }
124
125 /**
126 * @since 4.0.0
127 */
128 public function toArray(): array
129 {
130 return [
131 'actual' => $this->actual,
132 'actualFormatted' => $this->actualFormatted,
133 'percentage' => $this->percentage,
134 'goal' => $this->goal,
135 'goalFormatted' => $this->goalFormatted,
136 ];
137 }
138 }
139