PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.8.0
GiveWP – Donation Plugin and Fundraising Platform v4.8.0
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 / License / Repositories / LicenseRepository.php
give / src / License / Repositories Last commit date
LicenseRepository.php 9 months ago
LicenseRepository.php
229 lines
1 <?php
2
3 namespace Give\License\Repositories;
4
5 use Give\License\DataTransferObjects\License;
6 use Give\License\ValueObjects\LicenseOptionKeys;
7
8 /**
9 * @since 4.3.0
10 */
11 class LicenseRepository
12 {
13 /**
14 * Check if we have stored licenses in the database.
15 *
16 * @since 4.3.0
17 */
18 public function hasStoredLicenses(): bool
19 {
20 return !empty($this->getStoredLicenses());
21 }
22
23 /**
24 * Gets the raw, stored licenses from the database.
25 *
26 * @since 4.3.0
27 */
28 public function getStoredLicenses(): array
29 {
30 return (array)get_option(LicenseOptionKeys::LICENSES, []);
31 }
32
33 /**
34 * Gets the stored licenses from the database and converts them to License objects.
35 *
36 * @since 4.3.0
37 * @return License[]
38 */
39 public function getLicenses(): array
40 {
41 if (!$this->hasStoredLicenses()) {
42 return [];
43 }
44
45 $storedLicenses = $this->getStoredLicenses();
46 $licenses = [];
47
48 foreach ($storedLicenses as $license) {
49 $licenses[] = License::fromData($license);
50 }
51
52 return $licenses;
53 }
54
55 /**
56 * Returns only the active licenses.
57 *
58 * @since 4.3.0
59 */
60 public function getActiveLicenses(): array
61 {
62 if (!$this->hasStoredLicenses()) {
63 return [];
64 }
65
66 $licenses = $this->getLicenses();
67
68 return array_filter($licenses, static function(License $license) {
69 return $license->isActive;
70 });
71 }
72
73 /**
74 * Checks if we have any active licenses.
75 *
76 * @since 4.3.0
77 */
78 public function hasActiveLicenses(): bool
79 {
80 if (!$this->hasStoredLicenses()) {
81 return false;
82 }
83
84 $activeLicenses = $this->getActiveLicenses();
85
86 return !empty($activeLicenses);
87 }
88
89 /**
90 * The platform fee percentage is used by gateways to calculate a platform fee.
91 *
92 * @since 4.8.0 add grace period
93 * @since 4.3.0
94 */
95 public function getPlatformFeePercentage(): float
96 {
97 if (!$this->hasActiveLicenses()) {
98
99 if ($this->isLicenseInGracePeriod()) {
100 return 0.0;
101 }
102
103 return 2.0;
104 }
105
106 if (!$this->hasStoredPlatformFeePercentage()) {
107 return 0.0;
108 }
109
110 return $this->getStoredPlatformFeePercentage();
111 }
112
113 /**
114 * Check if licenses are in the grace period.
115 *
116 * @since 4.8.0
117 */
118 private function isLicenseInGracePeriod(): bool
119 {
120 $currentTime = current_time('timestamp', true);
121 $lastActiveDate = $this->getLastActiveLicenseDate();
122
123 if ($lastActiveDate && $currentTime <= $lastActiveDate + $this->getGracePeriodInSeconds()) {
124 return true;
125 }
126
127 return false;
128 }
129
130 /**
131 * Returns the current timestamp if at least one active license is present.
132 * This is used to track the moment a license was last confirmed active,
133 *
134 * @since 4.8.0
135 */
136 public function getCurrentActiveLicenseDate(): ?int
137 {
138 if (!$this->hasActiveLicenses()) {
139 return null;
140 }
141
142 $currentTime = current_time('timestamp', true);
143
144 return $currentTime;
145 }
146
147 /**
148 * Retrieves the timestamp of when a license was last active.
149 *
150 * @since 4.8.0
151 */
152 public function getLastActiveLicenseDate(): ?int
153 {
154 $value = get_option(LicenseOptionKeys::LAST_ACTIVE_LICENSE_DATE);
155 return $value ?: null;
156 }
157
158 /**
159 * Grace period is 30 days after the last active license date with a 3 day buffer for the refresh system.
160 *
161 * @since 4.8.0
162 */
163 public function getGracePeriodInSeconds(): ?int
164 {
165 return 33 * DAY_IN_SECONDS;
166 }
167
168 /**
169 * Check if we have an available platform fee percentage set.
170 * This can be used to determine if we can charge a platform fee.
171 *
172 * @since 4.3.0
173 */
174 public function hasPlatformFeePercentage(): bool
175 {
176 return $this->getPlatformFeePercentage() > 0;
177 }
178
179 /**
180 * The stored platform fee percentage comes from License Server API.
181 * When licenses are activated and refreshed, this value is stored in the database.
182 *
183 * @since 4.3.0
184 */
185 public function getStoredPlatformFeePercentage(): ?float
186 {
187 if (!get_option(LicenseOptionKeys::PLATFORM_FEE_PERCENTAGE)) {
188 return null;
189 }
190
191 return (float)get_option(LicenseOptionKeys::PLATFORM_FEE_PERCENTAGE);
192 }
193
194 /**
195 * Check if we have a stored platform fee percentage.
196 *
197 * @since 4.3.0
198 */
199 public function hasStoredPlatformFeePercentage(): bool
200 {
201 return !is_null($this->getStoredPlatformFeePercentage());
202 }
203
204 /**
205 * Find the lowest platform fee percentage from active licenses.
206 * Since there can be multiple licenses, we need to find the lowest fee from all active licenses.
207 * Once we have the lowest fee, we store it in the database for future use.
208 *
209 * @since 4.3.0
210 */
211 public function findLowestPlatformFeePercentageFromActiveLicenses(): ?float
212 {
213 if (!$this->hasActiveLicenses()) {
214 return null;
215 }
216
217 $fees = array_map(static function(License $license) {
218 return $license->gatewayFee;
219
220 }, $this->getActiveLicenses());
221
222 if (empty($fees)) {
223 return null;
224 }
225
226 return (float)min($fees);
227 }
228 }
229