PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.15.5
GiveWP – Donation Plugin and Fundraising Platform v4.15.5
4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 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 All 255 releases
give / vendor / moneyphp / money / src / Parser / BitcoinMoneyParser.php

BitcoinMoneyParser.php in GiveWP – Donation Plugin and Fundraising Platform 4.15.5, at vendor/moneyphp/money/src/Parser/BitcoinMoneyParser.php

83 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Money\Parser;
4
5 use Money\Currencies\BitcoinCurrencies;
6 use Money\Currency;
7 use Money\Exception\ParserException;
8 use Money\Money;
9 use Money\MoneyParser;
10
11 /**
12 * Parses Bitcoin currency to Money.
13 *
14 * @author Frederik Bosch <f.bosch@genkgo.nl>
15 */
16 final class BitcoinMoneyParser implements MoneyParser
17 {
18 /**
19 * @var int
20 */
21 private $fractionDigits;
22
23 /**
24 * @param int $fractionDigits
25 */
26 public function __construct($fractionDigits)
27 {
28 $this->fractionDigits = $fractionDigits;
29 }
30
31 /**
32 * {@inheritdoc}
33 */
34 public function parse($money, $forceCurrency = null)
35 {
36 if (is_string($money) === false) {
37 throw new ParserException('Formatted raw money should be string, e.g. $1.00');
38 }
39
40 if (strpos($money, BitcoinCurrencies::SYMBOL) === false) {
41 throw new ParserException('Value cannot be parsed as Bitcoin');
42 }
43
44 if ($forceCurrency === null) {
45 $forceCurrency = new Currency(BitcoinCurrencies::CODE);
46 }
47
48 /*
49 * This conversion is only required whilst currency can be either a string or a
50 * Currency object.
51 */
52 $currency = $forceCurrency;
53 if (!$currency instanceof Currency) {
54 @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);
55 $currency = new Currency($currency);
56 }
57
58 $decimal = str_replace(BitcoinCurrencies::SYMBOL, '', $money);
59 $decimalSeparator = strpos($decimal, '.');
60
61 if (false !== $decimalSeparator) {
62 $decimal = rtrim($decimal, '0');
63 $lengthDecimal = strlen($decimal);
64 $decimal = str_replace('.', '', $decimal);
65 $decimal .= str_pad('', ($lengthDecimal - $decimalSeparator - $this->fractionDigits - 1) * -1, '0');
66 } else {
67 $decimal .= str_pad('', $this->fractionDigits, '0');
68 }
69
70 if (substr($decimal, 0, 1) === '-') {
71 $decimal = '-'.ltrim(substr($decimal, 1), '0');
72 } else {
73 $decimal = ltrim($decimal, '0');
74 }
75
76 if ('' === $decimal) {
77 $decimal = '0';
78 }
79
80 return new Money($decimal, $currency);
81 }
82 }
83