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