PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.9.0
GiveWP – Donation Plugin and Fundraising Platform v4.9.0
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 / ValueObjects / Money.php
give / src / ValueObjects Last commit date
Address.php 4 years ago CardInfo.php 4 years ago DonorInfo.php 4 years ago Money.php 3 years ago ValueObjects.php 4 years ago
Money.php
132 lines
1 <?php
2
3 namespace Give\ValueObjects;
4
5 /**
6 * Class Money
7 *
8 * @since 2.9.0
9 * @since 2.11.0 Refactored to make the minor amount the base.
10 * @deprecated @since 2.20.0 Use Give\Framework\Support\ValueObjects\Money in framework instead
11 *
12 */
13 final class Money
14 {
15 /**
16 * The amount in smallest unit of currency.
17 * @var int
18 */
19 protected $minorAmount;
20
21 /**
22 * @var array
23 */
24 protected $currencyData;
25
26 /**
27 * Money constructor.
28 *
29 * @param int $minorAmount
30 * @param array $currencyData
31 */
32 public function __construct($minorAmount, $currencyData)
33 {
34 $this->minorAmount = $minorAmount;
35 $this->currencyData = $currencyData;
36 }
37
38 /**
39 * Get amount in smallest unit of currency.
40 *
41 * @sicne 2.9.0
42 * @since 2.11.0 Round minor amount to account for floating point precision.
43 *
44 * @return int
45 */
46 public function getMinorAmount()
47 {
48 return $this->minorAmount;
49 }
50
51 /**
52 * Get amount in smallest unit of currency.
53 *
54 * @sicne 2.9.0
55 *
56 * @return string
57 */
58 public function getAmount()
59 {
60 if ($this->currencyData['setting']['number_decimals']) {
61 return $this->minorAmount / (10 ** $this->currencyData['setting']['number_decimals']);
62 }
63
64 return $this->minorAmount;
65 }
66
67 // Static Methods and Factories
68
69 /**
70 * @since 2.9.0
71 * @since 2.11.0 Converts the amount to a minor amount when creating an instance.
72 *
73 * @param int|string $amount Amount value without currency formatting
74 * @param string $currency
75 *
76 * @return Money
77 */
78 public static function of($amount, $currency)
79 {
80 $currencyData = self::getCurrencyData($currency);
81
82 /**
83 * When working with float values, be careful when casting to an integer.
84 * Due to "floating point precision", the output may not match the expected value.
85 *
86 * @link https://www.php.net/manual/en/language.types.float.php
87 * This can lead to confusing results:
88 * for example, floor((0.1+0.7)*10) will usually return 7 instead of the expected 8,
89 * since the internal representation will be something like 7.9999999999999991118....
90 */
91 $amount = absint(
92 round($amount * (10 ** $currencyData['setting']['number_decimals']))
93 );
94
95 return new static($amount, $currencyData);
96 }
97
98 /**
99 * @since 2.9.0
100 *
101 * @param int|string $minorAmount
102 * @param string $currency
103 *
104 * @return Money
105 */
106 public static function ofMinor($minorAmount, $currency)
107 {
108 return new static($minorAmount, self::getCurrencyData($currency));
109 }
110
111 /**
112 * Retrieves the currency data for a given currency with some optimizations to avoid loading all the currencies more
113 * than once.
114 *
115 * @since 2.9.0
116 *
117 * @param $currency
118 *
119 * @return array
120 */
121 private static function getCurrencyData($currency)
122 {
123 static $currenciesData = null;
124
125 if ($currenciesData === null) {
126 $currenciesData = give_get_currencies('all');
127 }
128
129 return $currenciesData[$currency];
130 }
131 }
132