PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.25.0
GiveWP – Donation Plugin and Fundraising Platform v2.25.0
4.16.4 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 / Framework / Support / Facades / CurrencyFacade.php
give / src / Framework / Support / Facades Last commit date
DateTime 3 years ago CurrencyFacade.php 3 years ago Facade.php 4 years ago Str.php 4 years ago
CurrencyFacade.php
117 lines
1 <?php
2
3 namespace Give\Framework\Support\Facades;
4
5 use Give\Log\Log;
6 use Money\Converter;
7 use Money\Currencies\ISOCurrencies;
8 use Money\Currency;
9 use Money\Exchange\FixedExchange;
10 use Money\Formatter\DecimalMoneyFormatter;
11 use Money\Formatter\IntlMoneyFormatter;
12 use Money\Money;
13 use Money\Parser\DecimalMoneyParser;
14 use NumberFormatter;
15
16 class CurrencyFacade
17 {
18 /**
19 * Immutably converts the given amount into the system currency.
20 *
21 * @since 2.20.0
22 *
23 * @param Money $amount
24 * @param int|float $exchangeRate
25 */
26 public function convertToBaseCurrency(Money $amount, $exchangeRate = 1): Money
27 {
28 $baseCurrency = $this->getBaseCurrency();
29
30 if ($amount->getCurrency()->equals($baseCurrency)) {
31 return $amount;
32 }
33
34 $converter = new Converter(
35 new ISOCurrencies(), new FixedExchange([
36 $amount->getCurrency()->getCode() => [
37 give_get_option('currency', 'USD') => $exchangeRate,
38 ],
39 ])
40 );
41
42 return $converter->convert($amount, $baseCurrency);
43 }
44
45 /**
46 * Creates a new Money instance from a decimal amount
47 *
48 * @since 2.20.0
49 *
50 * @param string|float|int $amount
51 */
52 public function parseFromDecimal($amount, string $currency): Money
53 {
54 return (new DecimalMoneyParser(new ISOCurrencies()))->parse((string)$amount, new Currency($currency));
55 }
56
57 /**
58 * Returns the amount in a decimal format, not including any currency symbols:
59 * - $1,500.25 -> 1500.25
60 *
61 * @since 2.20.0
62 */
63 public function formatToDecimal(Money $amount): string
64 {
65 return (new DecimalMoneyFormatter(new ISOCurrencies()))->format($amount);
66 }
67
68 /**
69 * Formats the amount to a currency format, including currency symbols, in the given locale.
70 *
71 * @since 2.24.2 fallback on give formatting system if intl extension is not available
72 * @since 2.20.0
73 *
74 * @param Money $amount
75 * @param string|null $locale
76 *
77 * @return string
78 */
79 public function formatToLocale(Money $amount, $locale = null): string
80 {
81 $useAutoFormatting = give_get_option('auto_format_currency');
82 if (!class_exists(NumberFormatter::class) || !$useAutoFormatting) {
83 if ($useAutoFormatting) {
84 Log::warning(
85 'Auto-formatting is enabled at Donations > Settings > General > Currency but the INTL extension for PHP is not available. Please install the INTL extension to enable auto-formatting, or disable the Auto-formatting setting to prevent this error message. Most web hosts can help with installing and activating INTL. GiveWP is falling back to formatting based on the legacy settings.'
86 );
87 }
88
89 return give_currency_filter(
90 $this->formatToDecimal($amount),
91 ['currency' => $amount->getCurrency()->getCode()]
92 );
93 }
94
95 if ($locale === null) {
96 $locale = get_locale();
97 }
98
99 $numberFormatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);
100 $moneyFormatter = new IntlMoneyFormatter($numberFormatter, new ISOCurrencies());
101
102 return $moneyFormatter->format($amount);
103 }
104
105 /**
106 * Retrieves the system's base currency
107 *
108 * @since 2.20.0
109 *
110 * @return Currency
111 */
112 public function getBaseCurrency(): Currency
113 {
114 return new Currency(give_get_option('currency', 'USD'));
115 }
116 }
117