@@ -75,7 +75,7 @@ discard block |
||
| 75 | 75 | 'row_classes' => 'give-subfield', |
| 76 | 76 | 'render_row_cb' => 'give_cmb_amount_field_render_row_cb', |
| 77 | 77 | 'sanitization_cb' => 'give_sanitize_price_field_value', |
| 78 | - 'attributes' => array( |
|
| 78 | + 'attributes' => array( |
|
| 79 | 79 | 'placeholder' => give_format_decimal( '1.00' ), |
| 80 | 80 | 'value' => give_format_decimal( $price ), |
| 81 | 81 | 'class' => 'cmb-type-text-small give-money-field', |
@@ -110,7 +110,7 @@ discard block |
||
| 110 | 110 | 'before_field' => give_get_option( 'currency_position' ) == 'before' ? '<span class="give-money-symbol give-money-symbol-before">' . give_currency_symbol() . '</span>' : '', |
| 111 | 111 | 'after_field' => give_get_option( 'currency_position' ) == 'after' ? '<span class="give-money-symbol give-money-symbol-after">' . give_currency_symbol() . '</span>' : '', |
| 112 | 112 | 'sanitization_cb' => 'give_sanitize_price_field_value', |
| 113 | - 'attributes' => array( |
|
| 113 | + 'attributes' => array( |
|
| 114 | 114 | 'placeholder' => give_format_decimal( '1.00' ), |
| 115 | 115 | 'class' => 'cmb-type-text-small give-money-field', |
| 116 | 116 | ), |
@@ -23,7 +23,7 @@ discard block |
||
| 23 | 23 | * @return mixed |
| 24 | 24 | */ |
| 25 | 25 | function give_get_price_decimals() { |
| 26 | - return apply_filters( 'give_sanitize_amount_decimals', give_get_option( 'number_decimals', 0 ) ); |
|
| 26 | + return apply_filters( 'give_sanitize_amount_decimals', give_get_option( 'number_decimals', 0 ) ); |
|
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | /** |
@@ -34,7 +34,7 @@ discard block |
||
| 34 | 34 | * @return mixed |
| 35 | 35 | */ |
| 36 | 36 | function give_get_price_thousand_separator() { |
| 37 | - return give_get_option( 'thousands_separator', ',' ); |
|
| 37 | + return give_get_option( 'thousands_separator', ',' ); |
|
| 38 | 38 | } |
| 39 | 39 | |
| 40 | 40 | /** |
@@ -45,7 +45,7 @@ discard block |
||
| 45 | 45 | * @return mixed |
| 46 | 46 | */ |
| 47 | 47 | function give_get_price_decimal_separator() { |
| 48 | - return give_get_option( 'decimal_separator', '.' ); |
|
| 48 | + return give_get_option( 'decimal_separator', '.' ); |
|
| 49 | 49 | } |
| 50 | 50 | |
| 51 | 51 | /** |
@@ -64,65 +64,65 @@ discard block |
||
| 64 | 64 | */ |
| 65 | 65 | function give_sanitize_amount( $number, $dp = false, $trim_zeros = false ) { |
| 66 | 66 | |
| 67 | - // Bailout. |
|
| 68 | - if( empty( $number ) ) { |
|
| 69 | - return $number; |
|
| 70 | - } |
|
| 67 | + // Bailout. |
|
| 68 | + if( empty( $number ) ) { |
|
| 69 | + return $number; |
|
| 70 | + } |
|
| 71 | 71 | |
| 72 | 72 | // Remove slash from amount. |
| 73 | 73 | // If thousand or decimal separator is set to ' then in $_POST or $_GET param we will get an escaped number. |
| 74 | 74 | // To prevent notices and warning remove slash from amount/number. |
| 75 | 75 | $number = wp_unslash( $number ); |
| 76 | 76 | |
| 77 | - $thousand_separator = give_get_price_thousand_separator(); |
|
| 77 | + $thousand_separator = give_get_price_thousand_separator(); |
|
| 78 | 78 | |
| 79 | - $locale = localeconv(); |
|
| 80 | - $decimals = array( give_get_price_decimal_separator(), $locale['decimal_point'], $locale['mon_decimal_point'] ); |
|
| 79 | + $locale = localeconv(); |
|
| 80 | + $decimals = array( give_get_price_decimal_separator(), $locale['decimal_point'], $locale['mon_decimal_point'] ); |
|
| 81 | 81 | |
| 82 | - // Remove locale from string |
|
| 83 | - if ( ! is_float( $number ) ) { |
|
| 84 | - $number = str_replace( $decimals, '.', $number ); |
|
| 85 | - } |
|
| 82 | + // Remove locale from string |
|
| 83 | + if ( ! is_float( $number ) ) { |
|
| 84 | + $number = str_replace( $decimals, '.', $number ); |
|
| 85 | + } |
|
| 86 | 86 | |
| 87 | - // Remove thousand amount formatting if amount has. |
|
| 88 | - // This condition use to add backward compatibility to version before 1.6, because before version 1.6 we were saving formatted amount to db. |
|
| 89 | - // Do not replace thousand separator from price if it is same as decimal separator, because it will be already replace by above code. |
|
| 90 | - if( ! in_array( $thousand_separator, $decimals ) && ( false !== strpos( $number, $thousand_separator ) ) ) { |
|
| 91 | - $number = str_replace( $thousand_separator, '', $number ); |
|
| 92 | - } elseif ( in_array( $thousand_separator, $decimals ) ) { |
|
| 87 | + // Remove thousand amount formatting if amount has. |
|
| 88 | + // This condition use to add backward compatibility to version before 1.6, because before version 1.6 we were saving formatted amount to db. |
|
| 89 | + // Do not replace thousand separator from price if it is same as decimal separator, because it will be already replace by above code. |
|
| 90 | + if( ! in_array( $thousand_separator, $decimals ) && ( false !== strpos( $number, $thousand_separator ) ) ) { |
|
| 91 | + $number = str_replace( $thousand_separator, '', $number ); |
|
| 92 | + } elseif ( in_array( $thousand_separator, $decimals ) ) { |
|
| 93 | 93 | $number = preg_replace( '/\.(?=.*\.)/', '', $number ); |
| 94 | 94 | } |
| 95 | 95 | |
| 96 | - // Remove non numeric entity before decimal separator. |
|
| 97 | - $number = preg_replace( '/[^0-9\.]/', '', $number ); |
|
| 98 | - $default_dp = give_get_price_decimals(); |
|
| 96 | + // Remove non numeric entity before decimal separator. |
|
| 97 | + $number = preg_replace( '/[^0-9\.]/', '', $number ); |
|
| 98 | + $default_dp = give_get_price_decimals(); |
|
| 99 | 99 | |
| 100 | - // Format number of decimals in number. |
|
| 101 | - if( false !== $dp ) { |
|
| 102 | - $dp = intval( empty( $dp ) ? $default_dp : $dp ); |
|
| 103 | - $dp = apply_filters( 'give_sanitize_amount_decimals', $dp, $number ); |
|
| 104 | - $number = number_format( floatval( $number ), $dp, '.', '' ); |
|
| 105 | - } |
|
| 100 | + // Format number of decimals in number. |
|
| 101 | + if( false !== $dp ) { |
|
| 102 | + $dp = intval( empty( $dp ) ? $default_dp : $dp ); |
|
| 103 | + $dp = apply_filters( 'give_sanitize_amount_decimals', $dp, $number ); |
|
| 104 | + $number = number_format( floatval( $number ), $dp, '.', '' ); |
|
| 105 | + } |
|
| 106 | 106 | |
| 107 | - // Reset negative amount to zero. |
|
| 107 | + // Reset negative amount to zero. |
|
| 108 | 108 | if ( 0 > $number ) { |
| 109 | 109 | $number = number_format( 0, $default_dp, '.' ); |
| 110 | 110 | } |
| 111 | 111 | |
| 112 | - // If number does not have decimal then add number of decimals to it. |
|
| 113 | - if( |
|
| 114 | - false === strpos( $number, '.' ) |
|
| 115 | - || ( $default_dp > strlen( substr( $number, strpos( $number , '.' ) + 1 ) ) ) |
|
| 116 | - ) { |
|
| 117 | - $number = number_format( $number, $default_dp, '.', '' ); |
|
| 118 | - } |
|
| 112 | + // If number does not have decimal then add number of decimals to it. |
|
| 113 | + if( |
|
| 114 | + false === strpos( $number, '.' ) |
|
| 115 | + || ( $default_dp > strlen( substr( $number, strpos( $number , '.' ) + 1 ) ) ) |
|
| 116 | + ) { |
|
| 117 | + $number = number_format( $number, $default_dp, '.', '' ); |
|
| 118 | + } |
|
| 119 | 119 | |
| 120 | - // Trim zeros. |
|
| 121 | - if ( $trim_zeros && strstr( $number, '.' ) ) { |
|
| 122 | - $number = rtrim( rtrim( $number, '0' ), '.' ); |
|
| 123 | - } |
|
| 120 | + // Trim zeros. |
|
| 121 | + if ( $trim_zeros && strstr( $number, '.' ) ) { |
|
| 122 | + $number = rtrim( rtrim( $number, '0' ), '.' ); |
|
| 123 | + } |
|
| 124 | 124 | |
| 125 | - return apply_filters( 'give_sanitize_amount', $number ); |
|
| 125 | + return apply_filters( 'give_sanitize_amount', $number ); |
|
| 126 | 126 | } |
| 127 | 127 | |
| 128 | 128 | /** |
@@ -168,31 +168,31 @@ discard block |
||
| 168 | 168 | */ |
| 169 | 169 | function give_human_format_large_amount( $amount ) { |
| 170 | 170 | |
| 171 | - // Get thousand separator. |
|
| 172 | - $thousands_sep = give_get_price_thousand_separator(); |
|
| 171 | + // Get thousand separator. |
|
| 172 | + $thousands_sep = give_get_price_thousand_separator(); |
|
| 173 | 173 | |
| 174 | - // Sanitize amount. |
|
| 175 | - $sanitize_amount = give_sanitize_amount( $amount ); |
|
| 174 | + // Sanitize amount. |
|
| 175 | + $sanitize_amount = give_sanitize_amount( $amount ); |
|
| 176 | 176 | |
| 177 | - // Explode amount to calculate name of large numbers. |
|
| 177 | + // Explode amount to calculate name of large numbers. |
|
| 178 | 178 | $amount_array = explode( $thousands_sep, $amount ); |
| 179 | 179 | |
| 180 | - // Calculate amount parts count. |
|
| 181 | - $amount_count_parts = count( $amount_array ); |
|
| 180 | + // Calculate amount parts count. |
|
| 181 | + $amount_count_parts = count( $amount_array ); |
|
| 182 | 182 | |
| 183 | 183 | // Human format amount (default). |
| 184 | 184 | $human_format_amount = $amount; |
| 185 | 185 | |
| 186 | - // Calculate large number formatted amount. |
|
| 187 | - if ( 4 < $amount_count_parts ){ |
|
| 188 | - $human_format_amount = sprintf( esc_html__( '%s trillion', 'give' ), round( ( $sanitize_amount / 1000000000000 ), 2 ) ); |
|
| 189 | - } elseif ( 3 < $amount_count_parts ){ |
|
| 190 | - $human_format_amount = sprintf( esc_html__( '%s billion', 'give' ), round( ( $sanitize_amount / 1000000000 ), 2 )); |
|
| 191 | - } elseif ( 2 < $amount_count_parts ) { |
|
| 192 | - $human_format_amount = sprintf( esc_html__( '%s million', 'give' ), round( ( $sanitize_amount / 1000000), 2 ) ); |
|
| 193 | - } |
|
| 186 | + // Calculate large number formatted amount. |
|
| 187 | + if ( 4 < $amount_count_parts ){ |
|
| 188 | + $human_format_amount = sprintf( esc_html__( '%s trillion', 'give' ), round( ( $sanitize_amount / 1000000000000 ), 2 ) ); |
|
| 189 | + } elseif ( 3 < $amount_count_parts ){ |
|
| 190 | + $human_format_amount = sprintf( esc_html__( '%s billion', 'give' ), round( ( $sanitize_amount / 1000000000 ), 2 )); |
|
| 191 | + } elseif ( 2 < $amount_count_parts ) { |
|
| 192 | + $human_format_amount = sprintf( esc_html__( '%s million', 'give' ), round( ( $sanitize_amount / 1000000), 2 ) ); |
|
| 193 | + } |
|
| 194 | 194 | |
| 195 | - return apply_filters( 'give_human_format_large_amount', $human_format_amount, $amount, $sanitize_amount ); |
|
| 195 | + return apply_filters( 'give_human_format_large_amount', $human_format_amount, $amount, $sanitize_amount ); |
|
| 196 | 196 | } |
| 197 | 197 | |
| 198 | 198 | /** |
@@ -206,14 +206,14 @@ discard block |
||
| 206 | 206 | * @return string $amount Newly formatted amount or Price Not Available |
| 207 | 207 | */ |
| 208 | 208 | function give_format_decimal( $amount, $dp = false ){ |
| 209 | - $decimal_separator = give_get_price_decimal_separator(); |
|
| 210 | - $formatted_amount = give_sanitize_amount( $amount, $dp ); |
|
| 209 | + $decimal_separator = give_get_price_decimal_separator(); |
|
| 210 | + $formatted_amount = give_sanitize_amount( $amount, $dp ); |
|
| 211 | 211 | |
| 212 | - if( false !== strpos( $formatted_amount, '.' ) ) { |
|
| 213 | - $formatted_amount = str_replace( '.', $decimal_separator, $formatted_amount ); |
|
| 214 | - } |
|
| 212 | + if( false !== strpos( $formatted_amount, '.' ) ) { |
|
| 213 | + $formatted_amount = str_replace( '.', $decimal_separator, $formatted_amount ); |
|
| 214 | + } |
|
| 215 | 215 | |
| 216 | - return apply_filters( 'give_format_decimal', $formatted_amount, $amount, $decimal_separator ); |
|
| 216 | + return apply_filters( 'give_format_decimal', $formatted_amount, $amount, $decimal_separator ); |
|
| 217 | 217 | } |
| 218 | 218 | |
| 219 | 219 | |
@@ -257,66 +257,66 @@ discard block |
||
| 257 | 257 | $negative = $price < 0; |
| 258 | 258 | |
| 259 | 259 | if ( $negative ) { |
| 260 | - // Remove proceeding "-". |
|
| 260 | + // Remove proceeding "-". |
|
| 261 | 261 | $price = substr( $price, 1 ); |
| 262 | 262 | } |
| 263 | 263 | |
| 264 | 264 | $symbol = give_currency_symbol( $currency ); |
| 265 | 265 | |
| 266 | - switch ( $currency ): |
|
| 267 | - case 'GBP' : |
|
| 268 | - case 'BRL' : |
|
| 269 | - case 'EUR' : |
|
| 270 | - case 'USD' : |
|
| 271 | - case 'AUD' : |
|
| 272 | - case 'CAD' : |
|
| 273 | - case 'HKD' : |
|
| 274 | - case 'MXN' : |
|
| 275 | - case 'NZD' : |
|
| 276 | - case 'SGD' : |
|
| 277 | - case 'JPY' : |
|
| 278 | - case 'THB' : |
|
| 279 | - case 'INR' : |
|
| 280 | - case 'RIAL' : |
|
| 281 | - case 'TRY' : |
|
| 282 | - case 'RUB' : |
|
| 283 | - case 'SEK' : |
|
| 284 | - case 'PLN' : |
|
| 285 | - case 'PHP' : |
|
| 286 | - case 'TWD' : |
|
| 287 | - case 'MYR' : |
|
| 288 | - case 'CZK' : |
|
| 289 | - case 'DKK' : |
|
| 290 | - case 'HUF' : |
|
| 291 | - case 'ILS' : |
|
| 292 | - case 'MAD' : |
|
| 293 | - case 'KRW' : |
|
| 294 | - case 'ZAR' : |
|
| 295 | - $formatted = ( 'before' === $position ? $symbol . $price : $price . $symbol ); |
|
| 296 | - break; |
|
| 297 | - case 'NOK' : |
|
| 298 | - $formatted = ( 'before' === $position ? $symbol . ' ' . $price : $price . ' ' . $symbol ); |
|
| 299 | - break; |
|
| 300 | - default : |
|
| 301 | - $formatted = ( 'before' === $position ? $currency . ' ' . $price : $price . ' ' . $currency ); |
|
| 302 | - break; |
|
| 303 | - endswitch; |
|
| 304 | - |
|
| 305 | - /** |
|
| 306 | - * Filter formatted amount with currency |
|
| 307 | - * |
|
| 308 | - * Filter name depends upon current value of currency and currency position. |
|
| 309 | - * For example : |
|
| 310 | - * if currency is USD and currency position is before then |
|
| 311 | - * filter name will be give_usd_currency_filter_before |
|
| 312 | - * |
|
| 313 | - * and if currency is USD and currency position is after then |
|
| 314 | - * filter name will be give_usd_currency_filter_after |
|
| 315 | - * |
|
| 316 | - */ |
|
| 317 | - $formatted = apply_filters( 'give_' . strtolower( $currency ) . "_currency_filter_{$position}", $formatted, $currency, $price ); |
|
| 318 | - |
|
| 319 | - if ( $negative ) { |
|
| 266 | + switch ( $currency ): |
|
| 267 | + case 'GBP' : |
|
| 268 | + case 'BRL' : |
|
| 269 | + case 'EUR' : |
|
| 270 | + case 'USD' : |
|
| 271 | + case 'AUD' : |
|
| 272 | + case 'CAD' : |
|
| 273 | + case 'HKD' : |
|
| 274 | + case 'MXN' : |
|
| 275 | + case 'NZD' : |
|
| 276 | + case 'SGD' : |
|
| 277 | + case 'JPY' : |
|
| 278 | + case 'THB' : |
|
| 279 | + case 'INR' : |
|
| 280 | + case 'RIAL' : |
|
| 281 | + case 'TRY' : |
|
| 282 | + case 'RUB' : |
|
| 283 | + case 'SEK' : |
|
| 284 | + case 'PLN' : |
|
| 285 | + case 'PHP' : |
|
| 286 | + case 'TWD' : |
|
| 287 | + case 'MYR' : |
|
| 288 | + case 'CZK' : |
|
| 289 | + case 'DKK' : |
|
| 290 | + case 'HUF' : |
|
| 291 | + case 'ILS' : |
|
| 292 | + case 'MAD' : |
|
| 293 | + case 'KRW' : |
|
| 294 | + case 'ZAR' : |
|
| 295 | + $formatted = ( 'before' === $position ? $symbol . $price : $price . $symbol ); |
|
| 296 | + break; |
|
| 297 | + case 'NOK' : |
|
| 298 | + $formatted = ( 'before' === $position ? $symbol . ' ' . $price : $price . ' ' . $symbol ); |
|
| 299 | + break; |
|
| 300 | + default : |
|
| 301 | + $formatted = ( 'before' === $position ? $currency . ' ' . $price : $price . ' ' . $currency ); |
|
| 302 | + break; |
|
| 303 | + endswitch; |
|
| 304 | + |
|
| 305 | + /** |
|
| 306 | + * Filter formatted amount with currency |
|
| 307 | + * |
|
| 308 | + * Filter name depends upon current value of currency and currency position. |
|
| 309 | + * For example : |
|
| 310 | + * if currency is USD and currency position is before then |
|
| 311 | + * filter name will be give_usd_currency_filter_before |
|
| 312 | + * |
|
| 313 | + * and if currency is USD and currency position is after then |
|
| 314 | + * filter name will be give_usd_currency_filter_after |
|
| 315 | + * |
|
| 316 | + */ |
|
| 317 | + $formatted = apply_filters( 'give_' . strtolower( $currency ) . "_currency_filter_{$position}", $formatted, $currency, $price ); |
|
| 318 | + |
|
| 319 | + if ( $negative ) { |
|
| 320 | 320 | // Prepend the minus sign before the currency sign. |
| 321 | 321 | $formatted = '-' . $formatted; |
| 322 | 322 | } |
@@ -334,18 +334,18 @@ discard block |
||
| 334 | 334 | */ |
| 335 | 335 | function give_currency_decimal_filter() { |
| 336 | 336 | |
| 337 | - remove_filter( 'give_sanitize_amount_decimals', 'give_currency_decimal_filter' ); |
|
| 337 | + remove_filter( 'give_sanitize_amount_decimals', 'give_currency_decimal_filter' ); |
|
| 338 | 338 | |
| 339 | - // Set default number of decimals. |
|
| 340 | - $decimals = give_get_price_decimals(); |
|
| 339 | + // Set default number of decimals. |
|
| 340 | + $decimals = give_get_price_decimals(); |
|
| 341 | 341 | |
| 342 | - add_filter( 'give_sanitize_amount_decimals', 'give_currency_decimal_filter' ); |
|
| 342 | + add_filter( 'give_sanitize_amount_decimals', 'give_currency_decimal_filter' ); |
|
| 343 | 343 | |
| 344 | 344 | |
| 345 | - // Get number of decimals with backward compatibility ( version < 1.6 ) |
|
| 346 | - if( 1 <= func_num_args() ){ |
|
| 347 | - $decimals = ( false === func_get_arg( 0 ) ? $decimals : absint( func_get_arg( 0 ) ) ); |
|
| 348 | - } |
|
| 345 | + // Get number of decimals with backward compatibility ( version < 1.6 ) |
|
| 346 | + if( 1 <= func_num_args() ){ |
|
| 347 | + $decimals = ( false === func_get_arg( 0 ) ? $decimals : absint( func_get_arg( 0 ) ) ); |
|
| 348 | + } |
|
| 349 | 349 | |
| 350 | 350 | $currency = give_get_currency(); |
| 351 | 351 | |
@@ -377,7 +377,7 @@ discard block |
||
| 377 | 377 | * @return mixed |
| 378 | 378 | */ |
| 379 | 379 | function give_sanitize_thousand_separator( $value, $field_args, $field ){ |
| 380 | - return stripslashes( $value ); |
|
| 380 | + return stripslashes( $value ); |
|
| 381 | 381 | } |
| 382 | 382 | |
| 383 | 383 | |
@@ -408,7 +408,7 @@ discard block |
||
| 408 | 408 | * @return mixed |
| 409 | 409 | */ |
| 410 | 410 | function give_sanitize_price_field_value( $value, $field_args, $field ){ |
| 411 | - return give_sanitize_amount( $value ); |
|
| 411 | + return give_sanitize_amount( $value ); |
|
| 412 | 412 | } |
| 413 | 413 | |
| 414 | 414 | |