PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.9.4
GiveWP – Donation Plugin and Fundraising Platform v2.9.4
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 5 years ago api 5 years ago database 6 years ago deprecated 5 years ago donors 5 years ago emails 6 years ago forms 5 years ago frontend 6 years ago gateways 5 years ago libraries 6 years ago payments 5 years ago actions.php 6 years ago ajax-functions.php 5 years ago class-give-async-process.php 6 years ago class-give-background-updater.php 6 years ago class-give-cache-setting.php 5 years ago class-give-cache.php 6 years ago class-give-cli-commands.php 6 years ago class-give-comment.php 6 years ago class-give-cron.php 6 years ago class-give-donate-form.php 6 years ago class-give-donor.php 6 years ago class-give-email-access.php 6 years ago class-give-license-handler.php 5 years ago class-give-logging.php 6 years ago class-give-readme-parser.php 6 years ago class-give-roles.php 6 years ago class-give-scripts.php 5 years ago class-give-session.php 5 years ago class-give-stats.php 6 years ago class-give-template-loader.php 6 years ago class-give-tooltips.php 6 years ago class-give-translation.php 6 years ago class-notices.php 5 years ago country-functions.php 5 years ago currencies-list.php 6 years ago currency-functions.php 6 years ago error-tracking.php 6 years ago filters.php 6 years ago formatting.php 6 years ago install.php 5 years ago login-register.php 6 years ago misc-functions.php 5 years ago plugin-compatibility.php 6 years ago post-types.php 5 years ago price-functions.php 6 years ago process-donation.php 5 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
452 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(
141 $currencies,
142 function ( &$currency_symbol ) {
143 $currency_symbol = html_entity_decode( $currency_symbol, ENT_COMPAT, 'UTF-8' );
144 }
145 );
146 }
147
148 /**
149 * Filter the currency symbols
150 *
151 * @since 1.8.14
152 *
153 * @param array $currencies
154 */
155 return apply_filters( 'give_currency_symbols', $currencies );
156 }
157
158
159 /**
160 * Give Currency Symbol
161 *
162 * Given a currency determine the symbol to use. If no currency given, site default is used. If no symbol is determine,
163 * the currency string is returned.
164 *
165 * @since 1.0
166 *
167 * @param string $currency The currency string.
168 * @param bool $decode_currency Option to HTML decode the currency symbol.
169 *
170 * @return string The symbol to use for the currency
171 */
172 function give_currency_symbol( $currency = '', $decode_currency = false ) {
173
174 if ( empty( $currency ) ) {
175 $currency = give_get_currency();
176 }
177
178 $currencies = give_currency_symbols( $decode_currency );
179 $symbol = array_key_exists( $currency, $currencies ) ? $currencies[ $currency ] : $currency;
180
181 /**
182 * Filter the currency symbol
183 *
184 * @since 1.0
185 *
186 * @param string $symbol
187 * @param string $currency
188 */
189 return apply_filters( 'give_currency_symbol', $symbol, $currency );
190 }
191
192
193 /**
194 * Get currency name.
195 *
196 * @since 1.8.8
197 *
198 * @param string $currency_code
199 *
200 * @return string
201 */
202 function give_get_currency_name( $currency_code ) {
203 $currency_name = '';
204 $currency_names = give_get_currencies();
205
206 if ( $currency_code && array_key_exists( $currency_code, $currency_names ) ) {
207 $currency_name = explode( '(', $currency_names[ $currency_code ] );
208 $currency_name = trim( current( $currency_name ) );
209 }
210
211 /**
212 * Filter the currency name
213 *
214 * @since 1.8.8
215 *
216 * @param string $currency_name
217 * @param string $currency_code
218 */
219 return apply_filters( 'give_currency_name', $currency_name, $currency_code );
220 }
221
222 /**
223 * Formats the currency displayed.
224 *
225 * @since 1.0
226 *
227 * @param string $price The donation amount.
228 * @param array $args It accepts 'currency_code', 'decode_currency' and 'form_id'.
229 *
230 * @return mixed|string
231 */
232 function give_currency_filter( $price = '', $args = array() ) {
233
234 // Get functions arguments.
235 $func_args = func_get_args();
236
237 // Backward compatibility: modify second param to array
238 if ( isset( $func_args[1] ) && is_string( $func_args[1] ) ) {
239 $args = array(
240 'currency_code' => isset( $func_args[1] ) ? $func_args[1] : '',
241 'decode_currency' => isset( $func_args[2] ) ? $func_args[2] : false,
242 'form_id' => isset( $func_args[3] ) ? $func_args[3] : '',
243 );
244
245 give_doing_it_wrong( __FUNCTION__, 'Pass second argument as Array.' );
246 }
247
248 // Set default values.
249 $args = wp_parse_args(
250 $args,
251 array(
252 'currency_code' => '',
253 'decode_currency' => false,
254 'form_id' => '',
255 )
256 );
257
258 if ( empty( $args['currency_code'] ) || ! array_key_exists( (string) $args['currency_code'], give_get_currencies() ) ) {
259 $args['currency_code'] = give_get_currency( $args['form_id'] );
260 }
261
262 $args['position'] = give_get_option( 'currency_position', 'before' );
263
264 $negative = $price < 0;
265
266 if ( $negative ) {
267 // Remove proceeding "-".
268 $price = substr( $price, 1 );
269 }
270
271 $args['symbol'] = give_currency_symbol( $args['currency_code'], $args['decode_currency'] );
272
273 switch ( $args['currency_code'] ) :
274 case 'GBP':
275 case 'BRL':
276 case 'EUR':
277 case 'USD':
278 case 'AUD':
279 case 'CAD':
280 case 'HKD':
281 case 'MXN':
282 case 'NZD':
283 case 'SGD':
284 case 'JPY':
285 case 'THB':
286 case 'INR':
287 case 'IDR':
288 case 'IRR':
289 case 'TRY':
290 case 'RUB':
291 case 'SEK':
292 case 'PLN':
293 case 'PHP':
294 case 'TWD':
295 case 'MYR':
296 case 'CZK':
297 case 'DKK':
298 case 'HUF':
299 case 'ILS':
300 case 'MAD':
301 case 'KRW':
302 case 'ZAR':
303 $formatted = ( 'before' === $args['position'] ? $args['symbol'] . $price : $price . $args['symbol'] );
304 break;
305 case 'NOK':
306 $formatted = ( 'before' === $args['position'] ? $args['symbol'] . ' ' . $price : $price . ' ' . $args['symbol'] );
307 break;
308 default:
309 $formatted = ( 'before' === $args['position'] ? $args['symbol'] . ' ' . $price : $price . ' ' . $args['symbol'] );
310 break;
311 endswitch;
312
313 /**
314 * Filter formatted amount
315 *
316 * @since 1.8.17
317 */
318 $formatted = apply_filters( 'give_currency_filter', $formatted, $args, $price );
319
320 /**
321 * Filter formatted amount with currency
322 *
323 * Filter name depends upon current value of currency and currency position.
324 * For example :
325 * if currency is USD and currency position is before then
326 * filter name will be give_usd_currency_filter_before
327 *
328 * and if currency is USD and currency position is after then
329 * filter name will be give_usd_currency_filter_after
330 */
331 $formatted = apply_filters(
332 'give_' . strtolower( $args['currency_code'] ) . "_currency_filter_{$args['position']}",
333 $formatted,
334 $args['currency_code'],
335 $price,
336 $args
337 );
338
339 if ( $negative ) {
340 // Prepend the minus sign before the currency sign.
341 $formatted = '-' . $formatted;
342 }
343
344 return $formatted;
345 }
346
347 /**
348 * This function is used to fetch list of zero based currencies.
349 *
350 * @since 2.3.0
351 *
352 * @return array
353 */
354 function give_get_zero_based_currencies() {
355
356 $zero_based_currencies = array(
357 'JPY', // Japanese Yen.
358 'KRW', // South Korean Won.
359 'CLP', // Chilean peso.
360 'ISK', // Icelandic króna.
361 'BIF', // Burundian franc.
362 'DJF', // Djiboutian franc.
363 'GNF', // Guinean franc.
364 'KHR', // Cambodian riel.
365 'KPW', // North Korean won.
366 'LAK', // Lao kip.
367 'LKR', // Sri Lankan rupee.
368 'MGA', // Malagasy ariary.
369 'MZN', // Mozambican metical.
370 'VUV', // Vanuatu vatu.
371 );
372
373 /**
374 * This filter hook can be used to update the list of zero based currencies.
375 *
376 * @since 2.3.0
377 */
378 return apply_filters( 'give_get_zero_based_currencies', $zero_based_currencies );
379 }
380
381 /**
382 * Zero Decimal based Currency.
383 *
384 * @since 1.8.14
385 * @since 2.2.0 Modified list.
386 * @see https://github.com/impress-org/give/issues/2191
387 *
388 * @param string $currency Currency code
389 *
390 * @return bool
391 */
392 function give_is_zero_based_currency( $currency = '' ) {
393
394 $zero_based_currency = give_get_zero_based_currencies();
395
396 // Set default currency.
397 if ( empty( $currency ) ) {
398 $currency = give_get_currency();
399 }
400
401 // Check for Zero Based Currency.
402 if ( in_array( $currency, $zero_based_currency ) ) {
403 return true;
404 }
405
406 return false;
407 }
408
409
410 /**
411 * Check if currency support right to left direction or not.
412 *
413 * @param string $currency
414 *
415 * @return bool
416 */
417 function give_is_right_to_left_supported_currency( $currency = '' ) {
418 $zero_based_currency = apply_filters(
419 'give_right_to_left_supported_currency',
420 array(
421 'IRR',
422 'RIAL',
423 'MAD',
424 'AED',
425 'BHD',
426 'KWD',
427 'OMR',
428 'SAR',
429 'TND', // https://en.wikipedia.org/wiki/Tunisian_dinar
430 'QAR', // https://en.wikipedia.org/wiki/Qatari_riyal
431 'LYD', // https://en.wikipedia.org/wiki/Libyan_dinar
432 'LBP', // https://en.wikipedia.org/wiki/Lebanese_pound
433 'IRT', // https://en.wikipedia.org/wiki/Iranian_toman
434 'IQD', // https://en.wikipedia.org/wiki/Iraqi_dinar
435 'DZD', // https://en.wikipedia.org/wiki/Algerian_dinar
436 'AFN', // https://en.wikipedia.org/wiki/Afghan_afghani
437 )
438 );
439
440 // Set default currency.
441 if ( empty( $currency ) ) {
442 $currency = give_get_currency();
443 }
444
445 // Check for Zero Based Currency.
446 if ( in_array( $currency, $zero_based_currency ) ) {
447 return true;
448 }
449
450 return false;
451 }
452