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