PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.5.13
GiveWP – Donation Plugin and Fundraising Platform v2.5.13
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 / includes / currency-functions.php
give / includes Last commit date
admin 6 years ago api 6 years ago database 6 years ago deprecated 6 years ago donors 6 years ago emails 6 years ago forms 6 years ago frontend 7 years ago gateways 6 years ago libraries 7 years ago payments 6 years ago actions.php 6 years ago ajax-functions.php 6 years ago class-give-async-process.php 7 years ago class-give-background-updater.php 6 years ago class-give-cache-setting.php 6 years ago class-give-cache.php 6 years ago class-give-cli-commands.php 6 years ago class-give-comment.php 7 years ago class-give-cron.php 6 years ago class-give-donate-form.php 6 years ago class-give-donor-wall-widget.php 6 years ago class-give-donor.php 6 years ago class-give-email-access.php 7 years ago class-give-license-handler.php 6 years ago class-give-logging.php 7 years ago class-give-readme-parser.php 7 years ago class-give-roles.php 6 years ago class-give-scripts.php 6 years ago class-give-session.php 6 years ago class-give-stats.php 7 years ago class-give-template-loader.php 8 years ago class-give-tooltips.php 7 years ago class-give-translation.php 8 years ago class-notices.php 6 years ago country-functions.php 6 years ago currencies-list.php 6 years ago currency-functions.php 6 years ago error-tracking.php 7 years ago filters.php 7 years ago formatting.php 6 years ago install.php 6 years ago login-register.php 7 years ago misc-functions.php 6 years ago plugin-compatibility.php 6 years ago post-types.php 6 years ago price-functions.php 7 years ago process-donation.php 6 years ago setting-functions.php 6 years ago shortcodes.php 6 years ago template-functions.php 6 years ago user-functions.php 6 years ago
currency-functions.php
449 lines
1 <?php
2 /**
3 * Currency Functions
4 *
5 * @package Give
6 * @subpackage Functions
7 * @copyright Copyright (c) 2017, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.8.17
10 */
11
12 /**
13 * Get the set currency
14 *
15 * @since 1.0
16 * @since 1.8.15 Upgrade function to handle dynamic currency
17 *
18 * @param int $donation_or_form_id Donation or Form ID
19 * @param array|object $args Additional data
20 *
21 * @return string The currency code
22 */
23 function give_get_currency( $donation_or_form_id = null, $args = array() ) {
24
25 // Get currency from donation
26 if ( is_numeric( $donation_or_form_id ) && 'give_payment' === get_post_type( $donation_or_form_id ) ) {
27 $currency = give_get_meta( $donation_or_form_id, '_give_payment_currency', true );
28
29 if ( empty( $currency ) ) {
30 $currency = give_get_option( 'currency', 'USD' );
31 }
32 } else {
33 $currency = give_get_option( 'currency', 'USD' );
34 }
35
36 /**
37 * Filter the currency on basis of donation, form id, or additional data.
38 *
39 * @since 1.0
40 */
41 return apply_filters( 'give_currency', $currency, $donation_or_form_id, $args );
42 }
43
44 /**
45 * Get the set currency position
46 *
47 * @since 1.3.6
48 *
49 * @return string The currency code
50 */
51 function give_get_currency_position() {
52
53 $currency_pos = give_get_option( 'currency_position', 'before' );
54
55 return apply_filters( 'give_currency_position', $currency_pos );
56 }
57
58 /**
59 * Get Currencies List
60 *
61 * @since 1.8.17
62 *
63 * @return array $currencies A list of the available currencies
64 */
65 function give_get_currencies_list() {
66 $currencies = Give_Cache_Setting::get_option( 'currencies' );
67
68 /**
69 * Filter the currencies
70 * Note: you can register new currency by using this filter
71 * array(
72 * 'admin_label' => '', // required
73 * 'symbol' => '', // required
74 * 'setting' => '' // required
75 * ....
76 * )
77 *
78 * @since 1.8.15
79 *
80 * @param array $currencies
81 */
82 return (array) apply_filters( 'give_currencies', $currencies );
83 }
84
85 /**
86 * Get Currencies
87 *
88 * @since 1.0
89 *
90 * @param string $info Specify currency info
91 *
92 * @return array $currencies A list of the available currencies
93 */
94 function give_get_currencies( $info = 'admin_label' ) {
95
96 $currencies = give_get_currencies_list();
97
98 // Backward compatibility: handle old way of currency registration.
99 // Backward compatibility: Return desired result.
100 if ( ! empty( $currencies ) ) {
101 foreach ( $currencies as $currency_code => $currency_setting ) {
102 if ( is_string( $currency_setting ) ) {
103 $currencies[ $currency_code ] = array(
104 'admin_label' => $currency_setting,
105 );
106 }
107
108 $currencies[ $currency_code ] = wp_parse_args(
109 $currencies[ $currency_code ],
110 array(
111 'admin_label' => '',
112 'symbol' => $currency_code,
113 'setting' => array(),
114 )
115 );
116 }
117
118 if ( ! empty( $info ) && is_string( $info ) && 'all' !== $info ) {
119 $currencies = wp_list_pluck( $currencies, $info );
120 }
121 }
122
123 return $currencies;
124 }
125
126
127 /**
128 * Get all currency symbols
129 *
130 * @since 1.8.14
131 *
132 * @param bool $decode_currencies
133 *
134 * @return array
135 */
136 function give_currency_symbols( $decode_currencies = false ) {
137 $currencies = give_get_currencies( 'symbol' );
138
139 if ( $decode_currencies ) {
140 array_walk( $currencies, function ( &$currency_symbol ) {
141 $currency_symbol = html_entity_decode( $currency_symbol, ENT_COMPAT, 'UTF-8' );
142 } );
143 }
144
145 /**
146 * Filter the currency symbols
147 *
148 * @since 1.8.14
149 *
150 * @param array $currencies
151 */
152 return apply_filters( 'give_currency_symbols', $currencies );
153 }
154
155
156 /**
157 * Give Currency Symbol
158 *
159 * Given a currency determine the symbol to use. If no currency given, site default is used. If no symbol is determine,
160 * the currency string is returned.
161 *
162 * @since 1.0
163 *
164 * @param string $currency The currency string.
165 * @param bool $decode_currency Option to HTML decode the currency symbol.
166 *
167 * @return string The symbol to use for the currency
168 */
169 function give_currency_symbol( $currency = '', $decode_currency = false ) {
170
171 if ( empty( $currency ) ) {
172 $currency = give_get_currency();
173 }
174
175 $currencies = give_currency_symbols( $decode_currency );
176 $symbol = array_key_exists( $currency, $currencies ) ? $currencies[ $currency ] : $currency;
177
178 /**
179 * Filter the currency symbol
180 *
181 * @since 1.0
182 *
183 * @param string $symbol
184 * @param string $currency
185 */
186 return apply_filters( 'give_currency_symbol', $symbol, $currency );
187 }
188
189
190 /**
191 * Get currency name.
192 *
193 * @since 1.8.8
194 *
195 * @param string $currency_code
196 *
197 * @return string
198 */
199 function give_get_currency_name( $currency_code ) {
200 $currency_name = '';
201 $currency_names = give_get_currencies();
202
203 if ( $currency_code && array_key_exists( $currency_code, $currency_names ) ) {
204 $currency_name = explode( '(', $currency_names[ $currency_code ] );
205 $currency_name = trim( current( $currency_name ) );
206 }
207
208 /**
209 * Filter the currency name
210 *
211 * @since 1.8.8
212 *
213 * @param string $currency_name
214 * @param string $currency_code
215 */
216 return apply_filters( 'give_currency_name', $currency_name, $currency_code );
217 }
218
219 /**
220 * Formats the currency displayed.
221 *
222 * @since 1.0
223 *
224 * @param string $price The donation amount.
225 * @param array $args It accepts 'currency_code', 'decode_currency' and 'form_id'.
226 *
227 * @return mixed|string
228 */
229 function give_currency_filter( $price = '', $args = array() ) {
230
231 // Get functions arguments.
232 $func_args = func_get_args();
233
234 // Backward compatibility: modify second param to array
235 if ( isset( $func_args[1] ) && is_string( $func_args[1] ) ) {
236 $args = array(
237 'currency_code' => isset( $func_args[1] ) ? $func_args[1] : '',
238 'decode_currency' => isset( $func_args[2] ) ? $func_args[2] : false,
239 'form_id' => isset( $func_args[3] ) ? $func_args[3] : '',
240 );
241
242 give_doing_it_wrong( __FUNCTION__, 'Pass second argument as Array.' );
243 }
244
245 // Set default values.
246 $args = wp_parse_args(
247 $args,
248 array(
249 'currency_code' => '',
250 'decode_currency' => false,
251 'form_id' => '',
252 )
253 );
254
255 if ( empty( $args['currency_code'] ) || ! array_key_exists( (string) $args['currency_code'], give_get_currencies() ) ) {
256 $args['currency_code'] = give_get_currency( $args['form_id'] );
257 }
258
259 $args['position'] = give_get_option( 'currency_position', 'before' );
260
261 $negative = $price < 0;
262
263 if ( $negative ) {
264 // Remove proceeding "-".
265 $price = substr( $price, 1 );
266 }
267
268 $args['symbol'] = give_currency_symbol( $args['currency_code'], $args['decode_currency'] );
269
270 switch ( $args['currency_code'] ) :
271 case 'GBP' :
272 case 'BRL' :
273 case 'EUR' :
274 case 'USD' :
275 case 'AUD' :
276 case 'CAD' :
277 case 'HKD' :
278 case 'MXN' :
279 case 'NZD' :
280 case 'SGD' :
281 case 'JPY' :
282 case 'THB' :
283 case 'INR' :
284 case 'IDR' :
285 case 'IRR' :
286 case 'TRY' :
287 case 'RUB' :
288 case 'SEK' :
289 case 'PLN' :
290 case 'PHP' :
291 case 'TWD' :
292 case 'MYR' :
293 case 'CZK' :
294 case 'DKK' :
295 case 'HUF' :
296 case 'ILS' :
297 case 'MAD' :
298 case 'KRW' :
299 case 'ZAR' :
300 $formatted = ( 'before' === $args['position'] ? $args['symbol'] . $price : $price . $args['symbol'] );
301 break;
302 case 'NOK':
303 $formatted = ( 'before' === $args['position'] ? $args['symbol'] . ' ' . $price : $price . ' ' . $args['symbol'] );
304 break;
305 default:
306 $formatted = ( 'before' === $args['position'] ? $args['symbol'] . ' ' . $price : $price . ' ' . $args['symbol'] );
307 break;
308 endswitch;
309
310 /**
311 * Filter formatted amount
312 *
313 * @since 1.8.17
314 */
315 $formatted = apply_filters( 'give_currency_filter', $formatted, $args, $price );
316
317 /**
318 * Filter formatted amount with currency
319 *
320 * Filter name depends upon current value of currency and currency position.
321 * For example :
322 * if currency is USD and currency position is before then
323 * filter name will be give_usd_currency_filter_before
324 *
325 * and if currency is USD and currency position is after then
326 * filter name will be give_usd_currency_filter_after
327 */
328 $formatted = apply_filters(
329 'give_' . strtolower( $args['currency_code'] ) . "_currency_filter_{$args['position']}",
330 $formatted,
331 $args['currency_code'],
332 $price,
333 $args
334 );
335
336 if ( $negative ) {
337 // Prepend the minus sign before the currency sign.
338 $formatted = '-' . $formatted;
339 }
340
341 return $formatted;
342 }
343
344 /**
345 * This function is used to fetch list of zero based currencies.
346 *
347 * @since 2.3.0
348 *
349 * @return array
350 */
351 function give_get_zero_based_currencies() {
352
353 $zero_based_currencies = array(
354 'JPY', // Japanese Yen.
355 'KRW', // South Korean Won.
356 'CLP', // Chilean peso.
357 'ISK', // Icelandic króna.
358 'BIF', // Burundian franc.
359 'DJF', // Djiboutian franc.
360 'GNF', // Guinean franc.
361 'KHR', // Cambodian riel.
362 'KPW', // North Korean won.
363 'LAK', // Lao kip.
364 'LKR', // Sri Lankan rupee.
365 'MGA', // Malagasy ariary.
366 'MZN', // Mozambican metical.
367 'VUV', // Vanuatu vatu.
368 );
369
370 /**
371 * This filter hook can be used to update the list of zero based currencies.
372 *
373 * @since 2.3.0
374 */
375 return apply_filters( 'give_get_zero_based_currencies', $zero_based_currencies );
376 }
377
378 /**
379 * Zero Decimal based Currency.
380 *
381 * @since 1.8.14
382 * @since 2.2.0 Modified list.
383 * @see https://github.com/impress-org/give/issues/2191
384 *
385 * @param string $currency Currency code
386 *
387 * @return bool
388 */
389 function give_is_zero_based_currency( $currency = '' ) {
390
391 $zero_based_currency = give_get_zero_based_currencies();
392
393 // Set default currency.
394 if ( empty( $currency ) ) {
395 $currency = give_get_currency();
396 }
397
398 // Check for Zero Based Currency.
399 if ( in_array( $currency, $zero_based_currency ) ) {
400 return true;
401 }
402
403 return false;
404 }
405
406
407 /**
408 * Check if currency support right to left direction or not.
409 *
410 * @param string $currency
411 *
412 * @return bool
413 */
414 function give_is_right_to_left_supported_currency( $currency = '' ) {
415 $zero_based_currency = apply_filters(
416 'give_right_to_left_supported_currency',
417 array(
418 'IRR',
419 'RIAL',
420 'MAD',
421 'AED',
422 'BHD',
423 'KWD',
424 'OMR',
425 'SAR',
426 'TND', //https://en.wikipedia.org/wiki/Tunisian_dinar
427 'QAR', //https://en.wikipedia.org/wiki/Qatari_riyal
428 'LYD', //https://en.wikipedia.org/wiki/Libyan_dinar
429 'LBP', //https://en.wikipedia.org/wiki/Lebanese_pound
430 'IRT', //https://en.wikipedia.org/wiki/Iranian_toman
431 'IQD', //https://en.wikipedia.org/wiki/Iraqi_dinar
432 'DZD', //https://en.wikipedia.org/wiki/Algerian_dinar
433 'AFN', //https://en.wikipedia.org/wiki/Afghan_afghani
434 )
435 );
436
437 // Set default currency.
438 if ( empty( $currency ) ) {
439 $currency = give_get_currency();
440 }
441
442 // Check for Zero Based Currency.
443 if ( in_array( $currency, $zero_based_currency ) ) {
444 return true;
445 }
446
447 return false;
448 }
449