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 / DecimalMoneyParser.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
DecimalMoneyParser.php
109 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 decimal string into a Money object.
14 *
15 * @author Teoh Han Hui <teohhanhui@gmail.com>
16 */
17 final class DecimalMoneyParser implements MoneyParser
18 {
19 const DECIMAL_PATTERN = '/^(?P<sign>-)?(?P<digits>0|[1-9]\d*)?\.?(?P<fraction>\d+)?$/';
20
21 /**
22 * @var Currencies
23 */
24 private $currencies;
25
26 /**
27 * @param Currencies $currencies
28 */
29 public function __construct(Currencies $currencies)
30 {
31 $this->currencies = $currencies;
32 }
33
34 /**
35 * {@inheritdoc}
36 */
37 public function parse($money, $forceCurrency = null)
38 {
39 if (!is_string($money)) {
40 throw new ParserException('Formatted raw money should be string, e.g. 1.00');
41 }
42
43 if (null === $forceCurrency) {
44 throw new ParserException(
45 'DecimalMoneyParser cannot parse currency symbols. Use forceCurrency argument'
46 );
47 }
48
49 /*
50 * This conversion is only required whilst currency can be either a string or a
51 * Currency object.
52 */
53 $currency = $forceCurrency;
54 if (!$currency instanceof Currency) {
55 @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);
56 $currency = new Currency($currency);
57 }
58
59 $decimal = trim($money);
60
61 if ($decimal === '') {
62 return new Money(0, $currency);
63 }
64
65 $subunit = $this->currencies->subunitFor($currency);
66
67 if (!preg_match(self::DECIMAL_PATTERN, $decimal, $matches) || !isset($matches['digits'])) {
68 throw new ParserException(sprintf(
69 'Cannot parse "%s" to Money.',
70 $decimal
71 ));
72 }
73
74 $negative = isset($matches['sign']) && $matches['sign'] === '-';
75
76 $decimal = $matches['digits'];
77
78 if ($negative) {
79 $decimal = '-'.$decimal;
80 }
81
82 if (isset($matches['fraction'])) {
83 $fractionDigits = strlen($matches['fraction']);
84 $decimal .= $matches['fraction'];
85 $decimal = Number::roundMoneyValue($decimal, $subunit, $fractionDigits);
86
87 if ($fractionDigits > $subunit) {
88 $decimal = substr($decimal, 0, $subunit - $fractionDigits);
89 } elseif ($fractionDigits < $subunit) {
90 $decimal .= str_pad('', $subunit - $fractionDigits, '0');
91 }
92 } else {
93 $decimal .= str_pad('', $subunit, '0');
94 }
95
96 if ($negative) {
97 $decimal = '-'.ltrim(substr($decimal, 1), '0');
98 } else {
99 $decimal = ltrim($decimal, '0');
100 }
101
102 if ($decimal === '' || $decimal === '-') {
103 $decimal = '0';
104 }
105
106 return new Money($decimal, $currency);
107 }
108 }
109