/home/arranoyd/eventrify/wp-content/plugins/wpforms/pro/includes/payments/functions.php
<?php
/**
* Payment related functions.
*
* @since 1.0.0
*/
/**
* Get supported currencies.
*
* @since 1.2.4
*
* @return array
*/
function wpforms_get_currencies() {
$currencies = array(
'USD' => array(
'name' => esc_html__( 'U.S. Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'GBP' => array(
'name' => esc_html__( 'Pound Sterling', 'wpforms' ),
'symbol' => '£',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'EUR' => array(
'name' => esc_html__( 'Euro', 'wpforms' ),
'symbol' => '€',
'symbol_pos' => 'right',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'AUD' => array(
'name' => esc_html__( 'Australian Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'BRL' => array(
'name' => esc_html__( 'Brazilian Real', 'wpforms' ),
'symbol' => 'R$',
'symbol_pos' => 'left',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'CAD' => array(
'name' => esc_html__( 'Canadian Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'CZK' => array(
'name' => esc_html__( 'Czech Koruna', 'wpforms' ),
'symbol' => 'Kč',
'symbol_pos' => 'right',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'DKK' => array(
'name' => esc_html__( 'Danish Krone', 'wpforms' ),
'symbol' => 'kr.',
'symbol_pos' => 'right',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'HKD' => array(
'name' => esc_html__( 'Hong Kong Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'HUF' => array(
'name' => esc_html__( 'Hungarian Forint', 'wpforms' ),
'symbol' => 'Ft',
'symbol_pos' => 'right',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'ILS' => array(
'name' => esc_html__( 'Israeli New Sheqel', 'wpforms' ),
'symbol' => '₪',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'MYR' => array(
'name' => esc_html__( 'Malaysian Ringgit', 'wpforms' ),
'symbol' => 'RM',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'MXN' => array(
'name' => esc_html__( 'Mexican Peso', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'NOK' => array(
'name' => esc_html__( 'Norwegian Krone', 'wpforms' ),
'symbol' => 'Kr',
'symbol_pos' => 'left',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'NZD' => array(
'name' => esc_html__( 'New Zealand Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'PHP' => array(
'name' => esc_html__( 'Philippine Peso', 'wpforms' ),
'symbol' => 'Php',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'PLN' => array(
'name' => esc_html__( 'Polish Zloty', 'wpforms' ),
'symbol' => 'zł',
'symbol_pos' => 'left',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'RUB' => array(
'name' => esc_html__( 'Russian Ruble', 'wpforms' ),
'symbol' => 'pyб',
'symbol_pos' => 'right',
'thousands_separator' => ' ',
'decimal_separator' => '.',
'decimals' => 2,
),
'SGD' => array(
'name' => esc_html__( 'Singapore Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'ZAR' => array(
'name' => esc_html__( 'South African Rand', 'wpforms' ),
'symbol' => 'R',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'SEK' => array(
'name' => esc_html__( 'Swedish Krona', 'wpforms' ),
'symbol' => 'Kr',
'symbol_pos' => 'right',
'thousands_separator' => '.',
'decimal_separator' => ',',
'decimals' => 2,
),
'CHF' => array(
'name' => esc_html__( 'Swiss Franc', 'wpforms' ),
'symbol' => 'CHF',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'TWD' => array(
'name' => esc_html__( 'Taiwan New Dollar', 'wpforms' ),
'symbol' => '$',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
'THB' => array(
'name' => esc_html__( 'Thai Baht', 'wpforms' ),
'symbol' => '฿',
'symbol_pos' => 'left',
'thousands_separator' => ',',
'decimal_separator' => '.',
'decimals' => 2,
),
);
return apply_filters( 'wpforms_currencies', $currencies );
}
/**
* Sanitize Amount.
*
* Return a sanitized amount by stripping out thousands separators.
*
* @since 1.2.6
* @link https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/includes/formatting.php#L24
*
* @param string $amount
* @param string $currency
*
* @return string $amount
*/
function wpforms_sanitize_amount( $amount, $currency = '' ) {
if ( empty( $currency ) ) {
$currency = wpforms_setting( 'currency', 'USD' );
}
$currency = strtoupper( $currency );
$currencies = wpforms_get_currencies();
$thousands_sep = $currencies[ $currency ]['thousands_separator'];
$decimal_sep = $currencies[ $currency ]['decimal_separator'];
$is_negative = false;
// Sanitize the amount.
if ( $decimal_sep === ',' && false !== ( $found = strpos( $amount, $decimal_sep ) ) ) {
if ( ( $thousands_sep === '.' || $thousands_sep === ' ' ) && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
$amount = str_replace( $thousands_sep, '', $amount );
} elseif ( empty( $thousands_sep ) && false !== ( $found = strpos( $amount, '.' ) ) ) {
$amount = str_replace( '.', '', $amount );
}
$amount = str_replace( $decimal_sep, '.', $amount );
} elseif ( $thousands_sep === ',' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
$amount = str_replace( $thousands_sep, '', $amount );
}
if ( $amount < 0 ) {
$is_negative = true;
}
$amount = preg_replace( '/[^0-9\.]/', '', $amount );
$decimals = apply_filters( 'wpforms_sanitize_amount_decimals', 2, $amount );
$amount = number_format( (double) $amount, $decimals, '.', '' );
if ( $is_negative ) {
$amount *= - 1;
}
return $amount;
}
/**
* Return a nicely formatted amount.
*
* @since 1.2.6
*
* @param string $amount
* @param bool $symbol
* @param string $currency
*
* @return string $amount Newly formatted amount or Price Not Available
*/
function wpforms_format_amount( $amount, $symbol = false, $currency = '' ) {
if ( empty( $currency ) ) {
$currency = wpforms_setting( 'currency', 'USD' );
}
$currency = strtoupper( $currency );
$currencies = wpforms_get_currencies();
$thousands_sep = $currencies[ $currency ]['thousands_separator'];
$decimal_sep = $currencies[ $currency ]['decimal_separator'];
// Format the amount.
if ( $decimal_sep === ',' && false !== ( $sep_found = strpos( $amount, $decimal_sep ) ) ) {
$whole = substr( $amount, 0, $sep_found );
$part = substr( $amount, $sep_found + 1, ( strlen( $amount ) - 1 ) );
$amount = $whole . '.' . $part;
}
// Strip , from the amount (if set as the thousands separator).
if ( $thousands_sep === ',' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
$amount = floatval( str_replace( ',', '', $amount ) );
}
if ( empty( $amount ) ) {
$amount = 0;
}
$decimals = apply_filters( 'wpforms_sanitize_amount_decimals', 2, $amount );
$number = number_format( (float) $amount, $decimals, $decimal_sep, $thousands_sep );
if ( $symbol ) {
$symbol_padding = apply_filters( 'wpforms_currency_symbol_padding', ' ' );
if ( 'right' === $currencies[ $currency ]['symbol_pos'] ) {
$number = $number . $symbol_padding . $currencies[ $currency ]['symbol'];
} else {
$number = $currencies[ $currency ]['symbol'] . $symbol_padding . $number;
}
}
return $number;
}
/**
* Return recognized payment field types.
*
* @since 1.0.0
*
* @return array
*/
function wpforms_payment_fields() {
$fields = array( 'payment-single', 'payment-multiple', 'payment-checkbox', 'payment-select' );
return apply_filters( 'wpforms_payment_fields', $fields );
}
/**
* Check if form or entry contains payment
*
* @since 1.0.0
*
* @param string $type Either 'entry' or 'form'.
* @param array $data List of form fields.
*
* @return bool
*/
function wpforms_has_payment( $type = 'entry', $data = array() ) {
$payment = false;
$payment_fields = wpforms_payment_fields();
if ( ! empty( $data['fields'] ) ) {
$data = $data['fields'];
}
if ( empty( $data ) ) {
return false;
}
foreach ( $data as $field ) {
if ( isset( $field['type'] ) && in_array( $field['type'], $payment_fields, true ) ) {
// For entries, only return true if the payment field has an amount.
if (
'form' === $type ||
(
'entry' === $type &&
! empty( $field['amount'] ) &&
$field['amount'] != wpforms_sanitize_amount( 0 )
)
) {
$payment = true;
break;
}
}
}
return $payment;
}
/**
* Check to see if a form has an active payment gateway configured.
*
* @since 1.4.5
*
* @param array $form_data Form data and settings.
*
* @return bool
*/
function wpforms_has_payment_gateway( $form_data ) {
// PayPal Standard check.
if ( ! empty( $form_data['payments']['paypal_standard']['enable'] ) ) {
return true;
}
// Stripe Check.
if ( ! empty( $form_data['payments']['stripe']['enable'] ) ) {
return true;
}
return apply_filters( 'wpforms_has_payment_gateway', false, $form_data );
}
/**
* Get payment total amount from entry.
*
* @since 1.0.0
*
* @param array $fields
*
* @return float
*/
function wpforms_get_total_payment( $fields ) {
$fields = wpforms_get_payment_items( $fields );
$total = 0;
if ( empty( $fields ) ) {
return false;
}
foreach ( $fields as $field ) {
if ( ! empty( $field['amount'] ) ) {
$amount = wpforms_sanitize_amount( $field['amount'] );
$total = $total + $amount;
}
}
return wpforms_sanitize_amount( $total );
}
/**
* Get payment fields in an entry.
*
* @since 1.0.0
*
* @param array $fields
*
* @return array|bool False if no fields provided, otherwise array.
*/
function wpforms_get_payment_items( $fields = array() ) {
if ( empty( $fields ) ) {
return false;
}
$payment_fields = wpforms_payment_fields();
foreach ( $fields as $id => $field ) {
if (
empty( $field['type'] ) ||
! in_array( $field['type'], $payment_fields, true ) ||
empty( $field['amount'] ) ||
$field['amount'] == wpforms_sanitize_amount( '0' )
) {
// Remove all non-payment fields as well as payment fields with no amount.
unset( $fields[ $id ] );
}
}
return $fields;
}