PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 1 month ago
LicenseRepository.php
225 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, including Harbor unified licenses.
75 *
76 * @since 4.15.0 add support for Harbor unified licenses
77 * @since 4.3.0
78 */
79 public function hasActiveLicenses(): bool
80 {
81 return !empty($this->getActiveLicenses())
82 || lw_harbor_is_product_license_active('give');
83 }
84
85 /**
86 * The platform fee percentage is used by gateways to calculate a platform fee.
87 *
88 * @since 4.8.0 add grace period
89 * @since 4.3.0
90 */
91 public function getPlatformFeePercentage(): float
92 {
93 if (!$this->hasActiveLicenses()) {
94
95 if ($this->isLicenseInGracePeriod()) {
96 return 0.0;
97 }
98
99 return 2.0;
100 }
101
102 if (!$this->hasStoredPlatformFeePercentage()) {
103 return 0.0;
104 }
105
106 return $this->getStoredPlatformFeePercentage();
107 }
108
109 /**
110 * Check if licenses are in the grace period.
111 *
112 * @since 4.8.0
113 */
114 private function isLicenseInGracePeriod(): bool
115 {
116 $currentTime = current_time('timestamp', true);
117 $lastActiveDate = $this->getLastActiveLicenseDate();
118
119 if ($lastActiveDate && $currentTime <= $lastActiveDate + $this->getGracePeriodInSeconds()) {
120 return true;
121 }
122
123 return false;
124 }
125
126 /**
127 * Returns the current timestamp if at least one active license is present.
128 * This is used to track the moment a license was last confirmed active,
129 *
130 * @since 4.8.0
131 */
132 public function getCurrentActiveLicenseDate(): ?int
133 {
134 if (!$this->hasActiveLicenses()) {
135 return null;
136 }
137
138 $currentTime = current_time('timestamp', true);
139
140 return $currentTime;
141 }
142
143 /**
144 * Retrieves the timestamp of when a license was last active.
145 *
146 * @since 4.8.0
147 */
148 public function getLastActiveLicenseDate(): ?int
149 {
150 $value = get_option(LicenseOptionKeys::LAST_ACTIVE_LICENSE_DATE);
151 return $value ?: null;
152 }
153
154 /**
155 * Grace period is 30 days after the last active license date with a 3 day buffer for the refresh system.
156 *
157 * @since 4.8.0
158 */
159 public function getGracePeriodInSeconds(): ?int
160 {
161 return 33 * DAY_IN_SECONDS;
162 }
163
164 /**
165 * Check if we have an available platform fee percentage set.
166 * This can be used to determine if we can charge a platform fee.
167 *
168 * @since 4.3.0
169 */
170 public function hasPlatformFeePercentage(): bool
171 {
172 return $this->getPlatformFeePercentage() > 0;
173 }
174
175 /**
176 * The stored platform fee percentage comes from License Server API.
177 * When licenses are activated and refreshed, this value is stored in the database.
178 *
179 * @since 4.3.0
180 */
181 public function getStoredPlatformFeePercentage(): ?float
182 {
183 if (!get_option(LicenseOptionKeys::PLATFORM_FEE_PERCENTAGE)) {
184 return null;
185 }
186
187 return (float)get_option(LicenseOptionKeys::PLATFORM_FEE_PERCENTAGE);
188 }
189
190 /**
191 * Check if we have a stored platform fee percentage.
192 *
193 * @since 4.3.0
194 */
195 public function hasStoredPlatformFeePercentage(): bool
196 {
197 return !is_null($this->getStoredPlatformFeePercentage());
198 }
199
200 /**
201 * Find the lowest platform fee percentage from active licenses.
202 * Since there can be multiple licenses, we need to find the lowest fee from all active licenses.
203 * Once we have the lowest fee, we store it in the database for future use.
204 *
205 * @since 4.3.0
206 */
207 public function findLowestPlatformFeePercentageFromActiveLicenses(): ?float
208 {
209 if (!$this->hasActiveLicenses()) {
210 return null;
211 }
212
213 $fees = array_map(static function(License $license) {
214 return $license->gatewayFee;
215
216 }, $this->getActiveLicenses());
217
218 if (empty($fees)) {
219 return null;
220 }
221
222 return (float)min($fees);
223 }
224 }
225