PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.1
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 / Framework / Support / Currencies / GiveCurrencies.php
give / src / Framework / Support / Currencies Last commit date
GiveCurrencies.php 9 months ago
GiveCurrencies.php
66 lines
1 <?php
2
3 namespace Give\Framework\Support\Currencies;
4
5 use Money\Currencies;
6 use Money\Currency;
7 use Money\Exception\UnknownCurrencyException;
8
9 /**
10 * Custom currencies implementation that uses GiveWP's currency list and filter.
11 * Implements the Money library's Currencies interface to ensure Money operations
12 * use GiveWP's configured currencies and decimal settings.
13 *
14 * @since 4.10.0
15 */
16 class GiveCurrencies implements Currencies
17 {
18 /**
19 * @since 4.10.0
20 */
21 public function contains(Currency $currency): bool
22 {
23 $supportedCurrencies = array_keys(give_get_currencies_list());
24 return in_array($currency->getCode(), $supportedCurrencies, true);
25 }
26
27 /**
28 * @since 4.10.0
29 */
30 public function subunitFor(Currency $currency): int
31 {
32 if (!$this->contains($currency)) {
33 throw new UnknownCurrencyException('Unknown currency: ' . $currency->getCode());
34 }
35
36 $currencies = give_get_currencies_list();
37 $currencyData = $currencies[$currency->getCode()] ?? [];
38 $decimals = $currencyData['setting']['number_decimals'] ?? 2;
39
40 return (int) $decimals;
41 }
42
43 /**
44 * Returns an iterator over all supported currencies.
45 *
46 * Uses yield (Generator) instead of ArrayIterator for better performance and memory efficiency:
47 * - Lazy loading: Creates Currency objects only when needed during iteration
48 * - Memory efficient: Doesn't load all 100+ Currency objects into memory at once
49 * - Dynamic data: Based on give_get_currencies_list() which can change via filters
50 * - Better performance: Especially important for large currency lists (100+ currencies)
51 *
52 * This approach is more suitable than ArrayIterator (used by BitcoinCurrencies/ISOCurrencies)
53 * because GiveWP's currency list is dynamic and potentially large, unlike static ISO lists.
54 *
55 * @since 4.10.0
56 */
57 public function getIterator(): \Traversable
58 {
59 $supportedCurrencies = array_keys(give_get_currencies_list());
60
61 foreach ($supportedCurrencies as $currencyCode) {
62 yield new Currency($currencyCode);
63 }
64 }
65 }
66