PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.4.0
GiveWP – Donation Plugin and Fundraising Platform v3.4.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 / DonationForms / DataTransferObjects / DonationFormGoalData.php
give / src / DonationForms / DataTransferObjects Last commit date
AuthenticationData.php 2 years ago DonateControllerData.php 2 years ago DonateFormRouteData.php 2 years ago DonateRouteData.php 2 years ago DonationConfirmationReceiptViewRouteData.php 2 years ago DonationFormGoalData.php 2 years ago DonationFormPreviewRouteData.php 2 years ago DonationFormQueryData.php 2 years ago DonationFormViewRouteData.php 2 years ago LegacyPurchaseFormData.php 2 years ago UserData.php 2 years ago ValidationRouteData.php 2 years ago
DonationFormGoalData.php
117 lines
1 <?php
2
3 namespace Give\DonationForms\DataTransferObjects;
4
5 use Give\DonationForms\Properties\FormSettings;
6 use Give\DonationForms\Repositories\DonationFormRepository;
7 use Give\DonationForms\ValueObjects\GoalType;
8 use Give\Framework\Support\Contracts\Arrayable;
9
10 /**
11 * @since 3.0.0
12 */
13 class DonationFormGoalData implements Arrayable
14 {
15 /**
16 * @var int
17 */
18 public $formId;
19 /**
20 * @var array
21 */
22 public $formSettings;
23 /**
24 * @var false
25 */
26 public $isEnabled;
27 /**
28 * @var GoalType
29 */
30 public $goalType;
31 /**
32 * @var int
33 */
34 public $targetAmount;
35
36 /**
37 * @since 3.0.0
38 */
39 public function __construct(int $formId, FormSettings $formSettings)
40 {
41 $this->formId = $formId;
42 $this->formSettings = $formSettings;
43 $this->isEnabled = $formSettings->enableDonationGoal ?? false;
44 $this->goalType = $formSettings->goalType ?? GoalType::AMOUNT();
45 $this->targetAmount = $this->formSettings->goalAmount ?? 0;
46 }
47
48 /**
49 * @since 3.0.0
50 *
51 * @return int|float
52 */
53 public function getCurrentAmount()
54 {
55 /** @var DonationFormRepository $donationFormRepository */
56 $donationFormRepository = give(DonationFormRepository::class);
57
58 switch ($this->goalType):
59 case GoalType::DONORS():
60 return $donationFormRepository->getTotalNumberOfDonors($this->formId);
61 case GoalType::DONATIONS():
62 return $donationFormRepository->getTotalNumberOfDonations($this->formId);
63 case GoalType::SUBSCRIPTIONS():
64 return $donationFormRepository->getTotalNumberOfSubscriptions($this->formId);
65 case GoalType::AMOUNT_FROM_SUBSCRIPTIONS():
66 return $donationFormRepository->getTotalInitialAmountFromSubscriptions($this->formId);
67 case GoalType::DONORS_FROM_SUBSCRIPTIONS():
68 return $donationFormRepository->getTotalNumberOfDonorsFromSubscriptions($this->formId);
69 case GoalType::AMOUNT():
70 default:
71 return $donationFormRepository->getTotalRevenue($this->formId);
72 endswitch;
73 }
74
75 /**
76 * @since 3.0.0
77 */
78 public function getLabel(): string
79 {
80 if ($this->goalType->isDonors() || $this->goalType->isDonorsFromSubscriptions()) {
81 return __('donors', 'give');
82 }
83
84 if ($this->goalType->isDonations()) {
85 return __('donations', 'give');
86 }
87
88 if ($this->goalType->isSubscriptions()) {
89 return __('recurring donations', 'give');
90 }
91
92 return __('amount', 'give');
93 }
94
95 /**
96 * @since 3.0.0
97 */
98 public function toArray(): array
99 {
100 $currentAmount = $this->getCurrentAmount();
101 $progressPercentage = !$currentAmount || !$this->targetAmount ? 0 : ($currentAmount / $this->targetAmount) * 100;
102 $goalTypeIsAmount = $this->goalType->isOneOf(GoalType::AMOUNT(), GoalType::AMOUNT_FROM_SUBSCRIPTIONS());
103
104 return [
105 'type' => $this->goalType->getValue(),
106 'typeIsCount' => !$goalTypeIsAmount,
107 'typeIsMoney' => $goalTypeIsAmount,
108 'enabled' => $this->isEnabled,
109 'show' => $this->isEnabled,
110 'currentAmount' => $currentAmount,
111 'targetAmount' => $this->targetAmount,
112 'label' => $this->getLabel(),
113 'isAchieved' => $this->isEnabled && $this->formSettings->enableAutoClose && $progressPercentage >= 100
114 ];
115 }
116 }
117