PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.9.3
GiveWP – Donation Plugin and Fundraising Platform v2.9.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 / src / ValueObjects / Money.php
give / src / ValueObjects Last commit date
Address.php 6 years ago CardInfo.php 6 years ago DonorInfo.php 6 years ago Money.php 5 years ago ValueObjects.php 6 years ago
Money.php
141 lines
1 <?php
2
3 namespace Give\ValueObjects;
4
5 /**
6 * Class Money
7 * @package Give\ValueObjects
8 *
9 * @since 2.9.0
10 */
11 class Money {
12 /**
13 * @var int|string
14 */
15 private $amount;
16
17 /**
18 * @var int
19 */
20 private $minorAmount;
21
22 /**
23 * @var string
24 */
25 private $currency;
26
27 /**
28 * @var array
29 */
30 private $currencyData;
31
32 /**
33 * Return Money class object.
34 *
35 * @since 2.9.0
36 *
37 * @param int|string $amount Amount value without currency formatting
38 * @param string $currency
39 *
40 * @return Money
41 */
42 public static function of( $amount, $currency ) {
43 $object = new static();
44
45 $object->amount = $amount;
46 $object->currency = $currency;
47 $object->currencyData = self::getCurrencyData( $currency );
48
49 return $object;
50 }
51
52 /**
53 * Return Money class object.
54 *
55 * @since 2.9.0
56 *
57 * @param int|string $amount
58 * @param string $currency
59 *
60 * @return Money
61 */
62 public static function ofMinor( $amount, $currency ) {
63 $object = new static();
64
65 $object->minorAmount = $amount;
66 $object->currency = $currency;
67 $object->currencyData = self::getCurrencyData( $currency );
68
69 return $object;
70 }
71
72 /**
73 * Retrieves the currency data for a given currency with some optimizations to avoid loading all the currencies more
74 * than once.
75 *
76 * @since 2.9.0
77 *
78 * @param $currency
79 *
80 * @return array
81 */
82 private static function getCurrencyData( $currency ) {
83 static $currenciesData = null;
84
85 if ( $currenciesData === null ) {
86 $currenciesData = give_get_currencies( 'all' );
87 }
88
89 return $currenciesData[ $currency ];
90 }
91
92 /**
93 * Get amount in smallest unit of currency.
94 *
95 * @sicne 2.9.0
96 *
97 * @return int
98 */
99 public function getMinorAmount() {
100 if ( $this->minorAmount ) {
101 return $this->minorAmount;
102 }
103
104 $decimals = $this->getNumberDecimals();
105
106 $tensMultiplier = 10 ** $decimals;
107
108 return $this->minorAmount = absint( $this->amount * $tensMultiplier );
109 }
110
111 /**
112 * Get amount in smallest unit of currency.
113 *
114 * @sicne 2.9.0
115 *
116 * @return string
117 */
118 public function getAmount() {
119 if ( $this->amount ) {
120 return $this->amount;
121 }
122
123 $decimals = $this->getNumberDecimals();
124
125 $tensMultiplier = 10 ** $decimals;
126
127 return $this->amount = absint( $this->minorAmount / $tensMultiplier );
128 }
129
130 /**
131 * Returns the number of decimals based on the currency
132 *
133 * @since 2.9.0
134 *
135 * @return int
136 */
137 private function getNumberDecimals() {
138 return $this->currencyData['setting']['number_decimals'];
139 }
140 }
141