PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.1
GiveWP – Donation Plugin and Fundraising Platform v3.19.1
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 / vendor / moneyphp / money / src / Parser / IntlMoneyParser.php
give / vendor / moneyphp / money / src / Parser Last commit date
AggregateMoneyParser.php 4 years ago BitcoinMoneyParser.php 4 years ago DecimalMoneyParser.php 4 years ago IntlLocalizedDecimalParser.php 4 years ago IntlMoneyParser.php 4 years ago
IntlMoneyParser.php
104 lines
1 <?php
2
3 namespace Money\Parser;
4
5 use Money\Currencies;
6 use Money\Currency;
7 use Money\Exception\ParserException;
8 use Money\Money;
9 use Money\MoneyParser;
10 use Money\Number;
11
12 /**
13 * Parses a string into a Money object using intl extension.
14 *
15 * @author Frederik Bosch <f.bosch@genkgo.nl>
16 */
17 final class IntlMoneyParser implements MoneyParser
18 {
19 /**
20 * @var \NumberFormatter
21 */
22 private $formatter;
23
24 /**
25 * @var Currencies
26 */
27 private $currencies;
28
29 /**
30 * @param \NumberFormatter $formatter
31 * @param Currencies $currencies
32 */
33 public function __construct(\NumberFormatter $formatter, Currencies $currencies)
34 {
35 $this->formatter = $formatter;
36 $this->currencies = $currencies;
37 }
38
39 /**
40 * {@inheritdoc}
41 */
42 public function parse($money, $forceCurrency = null)
43 {
44 if (!is_string($money)) {
45 throw new ParserException('Formatted raw money should be string, e.g. $1.00');
46 }
47
48 $currency = null;
49 $decimal = $this->formatter->parseCurrency($money, $currency);
50
51 if (false === $decimal) {
52 throw new ParserException(
53 'Cannot parse '.$money.' to Money. '.$this->formatter->getErrorMessage()
54 );
55 }
56
57 if (null !== $forceCurrency) {
58 $currency = $forceCurrency;
59 } else {
60 $currency = new Currency($currency);
61 }
62
63 /*
64 * This conversion is only required whilst currency can be either a string or a
65 * Currency object.
66 */
67 if (!$currency instanceof Currency) {
68 @trigger_error('Passing a currency as string is deprecated since 3.1 and will be removed in 4.0. Please pass a '.Currency::class.' instance instead.', E_USER_DEPRECATED);
69 $currency = new Currency($currency);
70 }
71
72 $decimal = (string) $decimal;
73 $subunit = $this->currencies->subunitFor($currency);
74 $decimalPosition = strpos($decimal, '.');
75
76 if (false !== $decimalPosition) {
77 $decimalLength = strlen($decimal);
78 $fractionDigits = $decimalLength - $decimalPosition - 1;
79 $decimal = str_replace('.', '', $decimal);
80 $decimal = Number::roundMoneyValue($decimal, $subunit, $fractionDigits);
81
82 if ($fractionDigits > $subunit) {
83 $decimal = substr($decimal, 0, $decimalPosition + $subunit);
84 } elseif ($fractionDigits < $subunit) {
85 $decimal .= str_pad('', $subunit - $fractionDigits, '0');
86 }
87 } else {
88 $decimal .= str_pad('', $subunit, '0');
89 }
90
91 if ('-' === $decimal[0]) {
92 $decimal = '-'.ltrim(substr($decimal, 1), '0');
93 } else {
94 $decimal = ltrim($decimal, '0');
95 }
96
97 if ('' === $decimal) {
98 $decimal = '0';
99 }
100
101 return new Money($decimal, $currency);
102 }
103 }
104