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