X7ROOT File Manager
Current Path:
/home/freights/public_html/wp-content/plugins/sliced-invoices/includes
home
/
freights
/
public_html
/
wp-content
/
plugins
/
sliced-invoices
/
includes
/
??
..
??
class-sliced-shared.php
(55.46 KB)
??
csv
??
functions.php
(16.78 KB)
??
gateways
??
index.php
(26 B)
??
invoice
??
payments
??
quote
??
template-tags
??
vendor
Editing: class-sliced-shared.php
<?php // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { die; } /** * Calls the class. */ function sliced_call_shared_class() { new Sliced_Shared(); } add_action( 'sliced_loaded', 'sliced_call_shared_class', 2 ); class Sliced_Shared { /** * @var object Instance of this class */ protected static $instance; /** * @var array Array of instantiated option objects */ protected static $option_instances; public function __construct() { } public static function get_instance() { if ( ! ( self::$instance instanceof self ) ) { self::$instance = new self(); } return self::$instance; } private static $options = array( 'general' => 'sliced_general', 'business' => 'sliced_business', 'quotes' => 'sliced_quotes', 'invoices' => 'sliced_invoices', 'payments' => 'sliced_payments', 'tax' => 'sliced_tax', 'translate' => 'sliced_translate' ); public static function get_sliced_option( $get_option ) { $sliced_option = get_option( self::$options[$get_option] ); return $sliced_option; } public static function get_sliced_options() { foreach ( self::$options as $option_name => $option ) { $sliced_options[$option_name] = get_option( $option ); } return $sliced_options; } /** * Get the id of the invoice/quote. * * @since 2.0.0 */ public static function get_item_id( $id = 0 ) { global $post; $payments = get_option( 'sliced_payments' ); $payment_page = $payments['payment_page']; if ( isset( $id ) && ! empty( $id ) ) { return (int)$id; } else if ( get_the_ID() && get_the_ID() != $payment_page ) { return (int) get_the_ID(); } else if ( isset( $post->ID ) && ! empty( $post->ID ) && $post->ID != $payment_page ) { return (int) $post->ID; } else if ( isset( $_GET['post'] ) && ! empty( $_GET['post'] ) && $_GET['post'] != $payment_page ) { return intval( $_GET['post'] ); } else if ( isset( $_GET['id'] ) && ! empty( $_GET['id'] ) && $_GET['id'] != $payment_page ) { return intval( $_GET['id'] ); } else if ( isset( $_POST['id'] ) && ! empty( $_POST['id'] ) && $_POST['id'] != $payment_page ) { return intval( $_POST['id'] ); } else if ( isset( $_POST['sliced_payment_invoice_id'] ) && ! empty( $_POST['sliced_payment_invoice_id'] ) && $_POST['sliced_payment_invoice_id'] != $payment_page ) { return intval( $_POST['sliced_payment_invoice_id'] ); } return null; } /** * Get the type - quote or invoice. * * @since 2.0.0 */ public static function get_type( $id = 0 ) { if ( ! $id ) { $id = self::get_item_id(); } $type = get_post_type( $id ); if ( ! $type ) { $type = isset( $_GET['post_type'] ) && ! empty( $_GET['post_type'] ) ? $_GET['post_type'] : null; } if ( $type == 'sliced_quote' || $type == 'sliced_invoice' ) { return str_replace( 'sliced_', '', $type ); } if( isset( $_POST['accept-quote'] ) ) { $type = 'invoice'; } return null; } /** * Get the status. * * @since 2.0.0 */ public static function get_status( $id = 0, $type = null ) { if ( ! $id ) { $id = self::get_item_id(); } if ( ! $type ) { $type = self::get_type(); } $statuses = wp_get_post_terms( $id, $type . '_status' ); if ( is_array( $statuses ) && ! empty( $statuses ) ) { $term = $statuses[0]; return $term->slug; } else { return false; } } /** * Get filename. * * @version 3.9.0 * @since 2.0.0 */ public static function get_filename( $id = 0 ) { if ( ! $id ) { $id = self::get_item_id(); } $type = self::get_type( $id ); $filename = sanitize_file_name( strtolower( $type . '-' . sliced_get_prefix( $id ) . sliced_get_number( $id ) . sliced_get_suffix( $id ) ) ); return apply_filters( 'sliced_get_the_filename', $filename, $id ); } /** * Get post meta. * * @version 3.9.0 * @since 2.0.0 */ private static function get_sliced_meta( $id = 0, $key = '', $single = true ) { if ( ! $id ) { $id = self::get_item_id(); } $meta = get_post_meta( $id, $key, $single ); return $meta; } /** * get the tax name. * * @since 2.0.0 */ public static function get_tax_name() { $tax = self::get_sliced_option( 'tax' ); $name = $tax['tax_name'] ? $tax['tax_name'] : __( 'Tax', 'sliced-invoices' ); return $name; } /** * Get the tax amount. * * @since 2.0.0 */ public static function get_tax_amount( $id = 0, $formatted = false ) { if ( ! $id ) { $id = Sliced_Shared::get_item_id( $id ); } if ( $id ) { $amount = self::get_sliced_meta( $id, '_sliced_tax', false ); if( ! empty( $amount ) ) { $amount = $amount[0]; } else { $tax = self::get_sliced_option( 'tax' ); $amount = isset( $tax['tax'] ) ? $tax['tax'] : '0.00'; } } else { $tax = self::get_sliced_option( 'tax' ); $amount = isset( $tax['tax'] ) ? $tax['tax'] : '0.00'; } if ( $formatted ) { return self::get_formatted_number( $amount ); } else { return self::get_raw_number( $amount ); } } /** * Get the tax calculation method (exclusive or inclusive). * * @since 3.7.0 */ public static function get_tax_calc_method( $id = 0 ) { if ( ! $id ) { $id = Sliced_Shared::get_item_id( $id ); } if ( $id ) { $method = self::get_sliced_meta( $id, '_sliced_tax_calc_method', true ); if( ! $method ) { $tax = self::get_sliced_option( 'tax' ); $method = isset( $tax['tax_calc_method'] ) ? $tax['tax_calc_method'] : 'exclusive'; } } else { $tax = self::get_sliced_option( 'tax' ); $method = isset( $tax['tax_calc_method'] ) ? $tax['tax_calc_method'] : 'exclusive'; } return $method; } /** * Get the currency. * * @since 2.875 */ public static function get_currency( $id = 0 ) { $currency = false; if ( ! $id ) { $id = Sliced_Shared::get_item_id(); } $currency = self::get_sliced_meta( $id, '_sliced_currency', true ); return $currency; } /** * Get the currency symbol. * * @since 2.0.0 */ public static function get_currency_symbol( $id = 0 ) { if ( ! $id ) { $id = Sliced_Shared::get_item_id(); } if ( isset( $id ) ) { $symbol = self::get_sliced_meta( $id, '_sliced_currency_symbol', false ); if( !empty( $symbol ) ) { $symbol = $symbol[0]; } else { $payments = self::get_sliced_option( 'payments' ); $symbol = isset( $payments['currency_symbol'] ) ? $payments['currency_symbol'] : '$'; } } else { $payments = self::get_sliced_option( 'payments' ); $symbol = isset( $payments['currency_symbol'] ) ? $payments['currency_symbol'] : '$'; } return $symbol; } /** * Get the currency position. * * @since 2.0.0 */ public static function get_currency_position() { $payments = self::get_sliced_option( 'payments' ); $position = isset( $payments['currency_pos'] ) ? $payments['currency_pos'] : 'left'; return $position; } /** * Get the decimals. * * @since 2.0.0 */ public static function get_decimals() { $payments = self::get_sliced_option( 'payments' ); $decimals = isset( $payments['decimals'] ) ? $payments['decimals'] : '2'; return $decimals; } /** * Get the decimal seperator. * * @since 2.0.0 */ public static function get_decimal_seperator() { $payments = self::get_sliced_option( 'payments' ); $decimals = isset( $payments['decimal_sep'] ) ? $payments['decimal_sep'] : '.'; return $decimals; } /** * Get the thousand seperator. * * @since 2.0.0 */ public static function get_thousand_seperator() { $payments = self::get_sliced_option( 'payments' ); $thousand = isset( $payments['thousand_sep'] ) ? $payments['thousand_sep'] : ''; return $thousand; } /** * Get the raw number with a period as the decimal. For calculations. * * @version 3.9.1 * @since 2.0.0 */ public static function get_raw_number( $amount, $id = 0 ) { $currency = sliced_get_currency_symbol( $id ); $amount = str_replace( $currency, '', $amount ); $thou_sep = sliced_get_thousand_seperator(); $dec_sep = sliced_get_decimal_seperator(); $pieces = explode( $dec_sep, $amount ); $whole = str_replace( $thou_sep, '', $pieces[0] ); $decimals = isset( $pieces[1] ) ? $pieces[1] : '00'; $amount = floatval( $whole . '.' . $decimals ); return apply_filters( 'sliced_get_raw_number', $amount, $id ); } /** * Get the formatted number only. * * @since 2.0.0 * * @var $amount must be raw amount, either integer or float. */ public static function get_formatted_number( $amount ) { $thou_sep = sliced_get_thousand_seperator(); $dec_sep = sliced_get_decimal_seperator(); $decimals = sliced_get_decimals(); $formatted = number_format( round( (float)$amount, $decimals ), (int)$decimals, $dec_sep, $thou_sep ); return apply_filters( 'sliced_get_formatted_number', $formatted ); } /** * Get the complete formatted currency. * * @since 2.0.0 */ public static function get_formatted_currency( $amount, $id = 0 ) { $symbol = sliced_get_currency_symbol( $id ); $position = sliced_get_currency_position(); $amount = self::get_formatted_number( $amount ); switch ($position) { case 'left': $formatted = $symbol . $amount; break; case 'right': $formatted = $amount . $symbol; break; case 'left_space': $formatted = $symbol . ' ' . $amount; break; case 'right_space': $formatted = $amount . ' ' . $symbol; break; default: $formatted = $symbol . $amount; break; } return apply_filters( 'sliced_get_formatted_currency', $formatted ); } /** * Get the line items. * * @since 2.0.0 */ public static function get_line_items( $id = 0 ) { $items = self::get_sliced_meta( $id, '_sliced_items', false ); return $items; } /** * Get the payments. * * @since 3.6.0 */ public static function get_payments( $id = 0 ) { $items = self::get_sliced_meta( $id, '_sliced_payment', false ); return $items; } /** * Get the line items totals. * * @version 3.9.0 * @since 2.0.0 */ public static function get_totals( $id ) { if ( ! $id ) { $id = Sliced_Shared::get_item_id( $id ); } $decimals = self::get_decimals(); $items = self::get_line_items( $id ); $tax_calc_method = self::get_tax_calc_method( $id ); $totals = array( 'sub_total' => 0, 'sub_total_taxable' => 0, 'tax' => 0, 'discounts' => 0, 'payments' => 0, 'total' => 0, 'total_due' => 0, ); // if there are no line items, simply return zero for all amounts if( ! $items || $items == null || empty( $items ) || empty( $items[0] ) || ! is_array( $items[0] ) ) { return $totals; } // work out the line item totals foreach ( $items[0] as $value ) { $qty = isset( $value['qty'] ) ? self::get_raw_number( $value['qty'], $id ) : 0; $amt = isset( $value['amount'] ) ? self::get_raw_number( $value['amount'], $id ) : 0; // for historical reasons, the "adjust" field is named "tax" internally, // but it is unrelated to the actual tax field(s) in use today. $adj = isset( $value['tax'] ) ? self::get_raw_number( $value['tax'], $id ) : 0; $line_total = self::get_line_item_sub_total( $qty, $amt, $adj ); $totals['sub_total'] = $totals['sub_total'] + $line_total; if ( isset( $value['taxable'] ) && $value['taxable'] === 'on' ) { $totals['sub_total_taxable'] = $totals['sub_total_taxable'] + $line_total; } } // add discounts, if any (part 1 of 2 -- before tax) $discounts = 0; $discount_value = get_post_meta( $id, '_sliced_discount', true ); // for Sliced Invoices >= 3.9.0 $discount_type = get_post_meta( $id, '_sliced_discount_type', true ); $discount_tax_treatment = get_post_meta( $id, '_sliced_discount_tax_treatment', true ); if ( ! $discount_value ) { $discount_value = get_post_meta( $id, 'sliced_invoice_discount', true ); // for Sliced Invoices < 3.9.0 $discount_type = 'amount'; $discount_tax_treatment = 'after'; } $discount_value = self::get_raw_number( $discount_value, $id ); if ( $discount_type === 'percentage' ) { $discount_percentage = $discount_value / 100; } if ( $discount_tax_treatment === 'before' ) { if ( $discount_type === 'percentage' ) { $discounts = round( $totals['sub_total'] * $discount_percentage, $decimals ); } else { $discounts = $discount_value; } $totals['sub_total_taxable'] = $totals['sub_total_taxable'] - $discounts; if ( $totals['sub_total_taxable'] < 0 ) { $totals['sub_total_taxable'] = 0; } } apply_filters( 'sliced_totals_discounts_before_tax', $discounts ); // add tax, if any $tax_amount = apply_filters( 'sliced_totals_global_tax', self::get_tax_amount( $id ), $id ); if( $tax_amount == '' || $tax_amount == '0' || $tax_amount == null || $tax_amount == '0.00' ) { $totals['total'] = $totals['sub_total']; } else { $tax_percentage = $tax_amount / 100; if ( $tax_calc_method === 'inclusive' ) { // europe: $totals['tax'] = round( $totals['sub_total_taxable'] - ( $totals['sub_total_taxable'] / ( 1 + $tax_percentage ) ), $decimals ); $totals['total'] = $totals['sub_total']; } else { // everybody else: $totals['tax'] = round( $totals['sub_total_taxable'] * $tax_percentage, $decimals ); $totals['total'] = $totals['sub_total'] + $totals['tax']; } } // add discounts, if any (part 2 of 2 -- after tax) if ( $discount_tax_treatment !== 'before' ) { if ( $discount_type === 'percentage' ) { $discounts = round( $totals['total'] * $discount_percentage, $decimals ); } else { $discounts = $discount_value; } } apply_filters( 'sliced_totals_discounts_after_tax', $discounts ); if ( $discounts ) { $totals['discounts'] = $discounts; $totals['total'] = $totals['total'] - $totals['discounts']; } else { $totals['discounts'] = 0; $discounts = 0; } // work out the payments totals $payments = self::get_payments( $id ); $payments_total = 0; if ( is_array( $payments ) && isset( $payments[0] ) && is_array( $payments[0] ) ) { foreach ( $payments[0] as $payment ) { $amount = isset( $payment['amount'] ) ? self::get_raw_number( $payment['amount'], $id ) : 0; $status = isset( $payment['status'] ) ? $payment['status'] : false; if ( $status === 'success' ) { // only count "Completed" payments $payments_total = $payments_total + $amount; } } $totals['payments'] = $payments_total; } // apply filters $totals = apply_filters( 'sliced_invoice_totals', $totals, $id ); // patch for Deposit Invoices extension < 2.2.0, which overwrites $totals if ( defined( 'SI_DEPOSIT_VERSION' ) && version_compare( SI_DEPOSIT_VERSION, '2.2.0', '<=' ) ) { $totals['discounts'] = $discounts; $totals['payments'] = $payments_total; } // process any adjustments from external add-ons here // (avoids any potential race condition by doing this only here) if ( isset( $totals['addons'] ) && is_array( $totals['addons'] ) ) { foreach ( $totals['addons'] as $addon ) { if ( isset( $addon['_adjustments'] ) && is_array( $addon['_adjustments'] ) ) { foreach ( $addon['_adjustments'] as $adjustment ) { $type = isset( $adjustment['type'] ) ? $adjustment['type'] : false; $source = isset( $adjustment['source'] ) ? $adjustment['source'] : false; $target = isset( $adjustment['target'] ) ? $adjustment['target'] : false; if ( ! $type || ! $source || ! $target ) { continue; // if missing required fields, skip } if ( ! isset( $addon[ $source ] ) ) { continue; // if can't map source, skip } if ( ! isset( $totals[ $target ] ) ) { continue; // if can't map target, skip } // we go on... switch ( $type ) { case 'add': $totals[ $target ] = $totals[ $target ] + $addon[ $source ]; break; case 'subtract': $totals[ $target ] = $totals[ $target ] - $addon[ $source ]; break; } } } } } // save this for last $totals['total_due'] = $totals['total'] - $totals['payments']; return $totals; } /** * Get the line item sub total for an individual row. * * @since 2.0.0 */ public static function get_line_item_sub_total( $qty, $amt, $tax ) { $line_tax_perc = $tax != 0 ? $tax / 100 : 0; // 0.10 $line_sub_total = $qty * $amt; // 100 $line_tax_amt = $line_sub_total * $line_tax_perc; // 10 $line_total = $line_sub_total + $line_tax_amt; // 110 return apply_filters( 'sliced_get_line_item_sub_total', $line_total ); } /** * Get the accepted payment methods. * * @since 2.0.0 */ public static function get_accepted_payment_methods() { $pay_array = array(); $payments = get_option( 'sliced_payments' ); if ( ! empty( $payments['bank'] ) ) { $pay_array['bank'] = __( 'Bank', 'sliced-invoices' ); } if ( ! empty( $payments['generic_pay'] ) ) { $pay_array['generic'] = __( 'Generic', 'sliced-invoices' ); } return apply_filters( 'sliced_register_payment_method', $pay_array ); } /** * Get possible payment statuses * * @since 3.6.0 */ public static function get_payment_statuses() { $statuses = array( 'success' => __( 'Completed', 'sliced-invoices' ), 'pending' => __( 'Pending', 'sliced-invoices' ), 'failed' => __( 'Failed', 'sliced-invoices' ), 'refunded' => __( 'Refunded', 'sliced-invoices' ), 'cancelled' => __( 'Cancelled', 'sliced-invoices' ), ); return apply_filters( 'sliced_payment_statuses', $statuses ); } /** * Get the business details. * * @since 2.0.0 */ public static function get_business_details() { $options = self::get_sliced_options(); return apply_filters( 'sliced_business_details', array( 'logo' => isset( $options['business']['logo'] ) ? $options['business']['logo'] : '', 'name' => isset( $options['business']['name'] ) ? $options['business']['name'] : '', 'address' => isset( $options['business']['address'] ) ? $options['business']['address'] : '', 'extra_info' => isset( $options['business']['extra_info'] ) ? $options['business']['extra_info'] : '', 'website' => isset( $options['business']['website'] ) ? $options['business']['website'] : '', 'bank' => isset( $options['payments']['bank'] ) ? $options['payments']['bank'] : '', 'generic_pay' => isset( $options['payments']['generic_pay'] ) ? $options['payments']['generic_pay'] : '', 'footer' => isset( $options['payments']['footer'] ) ? $options['payments']['footer'] : '', ) ); } /** * Get the id of the client from the id of the invoice or quote. * * @since 2.0.0 */ public static function get_client_id( $id = 0 ) { $id = self::get_item_id( $id ); $client_id = self::get_sliced_meta( $id, '_sliced_client' ); return $client_id; } /** * Get the data of the client. * * @since 2.0.0 */ public static function get_client_data( $id = 0 ) { $client_data = get_userdata( self::get_client_id( $id ) ); return $client_data; } /** * Get the client details. * * @since 2.0.0 */ public static function get_client_details( $id = 0 ) { $client = apply_filters( 'sliced_client_data', self::get_client_data( $id ) ); //DG note: this is not used here -- $id = apply_filters( 'sliced_client_id', self::get_client_id( $id ) ); if ( ! $client ) { return; } return apply_filters( 'sliced_client_details', array( 'id' => $client->ID, 'first_name' => isset( $client->first_name ) ? $client->first_name : '', 'last_name' => isset( $client->last_name ) ? $client->last_name : '', 'business' => get_user_meta( $client->ID, '_sliced_client_business', true ), 'address' => get_user_meta( $client->ID, '_sliced_client_address', true ), 'extra_info' => get_user_meta( $client->ID, '_sliced_client_extra_info', true ), 'website' => isset( $client->data->user_url ) ? $client->data->user_url : $client->user_url, 'email' => isset( $client->data->user_email ) ? $client->data->user_email : $client->user_email, ) ); } /** * Get localised date from utc timestamp * * @since 3.8.0 */ public static function get_local_date_from_timestamp( $timestamp = 0, $format = '' ) { $date_iso = date( 'Y-m-d H:i:s', $timestamp ); $date = get_date_from_gmt( $date_iso, $format ); return $date; } /** * Get full localised date from utc timestamp * * @since 3.8.0 */ public static function get_local_date_i18n_from_timestamp( $timestamp = 0 ) { $date_iso = date( 'Y-m-d H:i:s', $timestamp ); $date_i18n = date_i18n( get_option( 'date_format' ), strtotime( get_date_from_gmt( $date_iso ) ) ); return $date_i18n; } /** * Get the site's timezone * * @since 3.8.0 */ public static function get_local_timezone() { // get the local timezone $timezone_setting = get_option( 'timezone_string' ); if ( ! $timezone_setting > '' ) { $timezone_setting = get_option( 'gmt_offset' ); if ( floatval( $timezone_setting > 0 ) ) { $timezone_setting = '+' . $timezone_setting; } } if( ! $timezone_setting ) { // if set to "UTC+0" in WordPress it returns "0", but DateTimeZone doesn't recognize this $timezone_setting = 'UTC'; } try { $timezone = new DateTimeZone( $timezone_setting ); } catch (Exception $e) { // worst case scenario $timezone = new DateTimeZone( 'UTC' ); } return $timezone; } /** * Convert localized time fields to utc timestamp for saving * * @since 3.8.0 */ public static function get_timestamp_from_local_time( $Y, $m, $d, $H, $i, $s ) { // validate args $Y = intval( $Y ); $m = intval( $m ); $d = intval( $d ); $H = intval( $H ); $i = intval( $i ); $s = intval( $s ); $timezone = Sliced_Shared::get_local_timezone(); $date = new DateTime(); $date->setTimezone( $timezone ); $date->setDate( $Y, $m, $d ); $date->setTime( $H, $i, $s ); return $date->getTimestamp(); } /** * Get todays date (localized format). * * @since 2.0.0 */ public static function get_todays_date() { $format = get_option( 'date_format' ); if (strpos( $format, 'd/m') !== false) { $format = str_replace("/", ".", $format); } $today = date_i18n( $format, (int) current_time( 'timestamp', true ) ); return $today; } /** * Get today's date, formatted ISO_8601. * * @since 2.873 */ public static function get_todays_date_iso8601() { $format = "Y-m-d"; $today = date_i18n( $format, (int) current_time( 'timestamp', true ) ); return $today; } /** * Get users IP. * * @since 2.0.0 */ public static function get_ip() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'UNKNOWN'; return $ipaddress; } /** * Determine if the current request is for any Sliced Invoices-related page. * * @since 3.8.3 */ public static function is_sliced_invoices_page() { global $pagenow; $is_sliced_invoices_page = false; $payments = get_option( 'sliced_payments' ); if ( in_array( sliced_get_the_type(), array( 'invoice', 'quote' ) ) // quote or invoice listing page, editing page, or frontend page || is_page( (int)$payments['payment_page'] ) // payment page || ( $pagenow === 'admin.php' && // sliced settings pages in_array( $_GET['page'], array( 'sliced_invoices_settings', 'sliced_reports', 'sliced_tools', 'sliced_extras', 'sliced_licenses' ) ) ) ) { $is_sliced_invoices_page = true; } return $is_sliced_invoices_page; } /** * Defines the function used to initial the cURL library. * * @since 2.0.0 */ private static function curl( $url ) { // removed 2019-10-14 return null; } /** * Retrieves the response from the specified URL using one of PHP's outbound request facilities. * * @since 2.0.0 */ public static function request_data( $url ) { $general = get_option( 'sliced_general' ); $sslverify = $general['pdf_ssl'] == 'true' ? true : false; $response = apply_filters( 'sliced_invoices_request_data', false, $url ); if ( ! $response ) { $response = wp_remote_get( $url, array( 'sslverify' => $sslverify, 'timeout' => 10, ) ); if ( ! is_wp_error( $response ) ) { $response = $response['body']; } else { $response = false; } } if ( is_wp_error( $response ) ) { $error_string = $response->get_error_message(); $response = '<div id="message" class="error"><p>' . $error_string . '</p></div>'; } return $response; } /** * Quote and invoice currencies data * * @since 2.875 */ public static function currencies() { $currencies = array( array( 'name' => 'UAE Dirham', 'alpha3' => 'AED', 'numeric' => '784', 'exp' => 2, 'country' => 'AE', ), array( 'name' => 'Afghan Afghani', 'alpha3' => 'AFN', 'numeric' => '971', 'exp' => 2, 'country' => 'AF', ), array( 'name' => 'Albanian Lek', 'alpha3' => 'ALL', 'numeric' => '008', 'exp' => 2, 'country' => 'AL', ), array( 'name' => 'Armenian Dram', 'alpha3' => 'AMD', 'numeric' => '051', 'exp' => 2, 'country' => 'AM', ), array( 'name' => 'Netherlands Antillean Guilder', 'alpha3' => 'ANG', 'numeric' => '532', 'exp' => 2, 'country' => array( 'CW', 'SX', ), ), array( 'name' => 'Angolan Kwanza', 'alpha3' => 'AOA', 'numeric' => '973', 'exp' => 2, 'country' => 'AO', ), array( 'name' => 'Argentine Peso', 'alpha3' => 'ARS', 'numeric' => '032', 'exp' => 2, 'country' => 'AR', ), array( 'name' => 'Australian Dollar', 'alpha3' => 'AUD', 'numeric' => '036', 'exp' => 2, 'country' => array( 'AU', 'CC', 'CX', 'HM', 'KI', 'NF', 'NR', 'TV', ), ), array( 'name' => 'Aruban Florin', 'alpha3' => 'AWG', 'numeric' => '533', 'exp' => 2, 'country' => 'AW', ), array( 'name' => 'Azerbaijani Manat', 'alpha3' => 'AZN', 'numeric' => '944', 'exp' => 2, 'country' => 'AZ', ), array( 'name' => 'Bosnia and Herzegovina Convertible Mark', 'alpha3' => 'BAM', 'numeric' => '977', 'exp' => 2, 'country' => 'BA', ), array( 'name' => 'Barbados Dollar', 'alpha3' => 'BBD', 'numeric' => '052', 'exp' => 2, 'country' => 'BB', ), array( 'name' => 'Bangladeshi Taka', 'alpha3' => 'BDT', 'numeric' => '050', 'exp' => 2, 'country' => 'BD', ), array( 'name' => 'Bulgarian Lev', 'alpha3' => 'BGN', 'numeric' => '975', 'exp' => 2, 'country' => 'BG', ), array( 'name' => 'Bahraini Dinar', 'alpha3' => 'BHD', 'numeric' => '048', 'exp' => 3, 'country' => 'BH', ), array( 'name' => 'Burundian Franc', 'alpha3' => 'BIF', 'numeric' => '108', 'exp' => 0, 'country' => 'BI', ), array( 'name' => 'Bermudian Dollar', 'alpha3' => 'BMD', 'numeric' => '060', 'exp' => 2, 'country' => 'BM', ), array( 'name' => 'Brunei Dollar', 'alpha3' => 'BND', 'numeric' => '096', 'exp' => 2, 'country' => 'BN', ), array( 'name' => 'Boliviano', 'alpha3' => 'BOB', 'numeric' => '068', 'exp' => 2, 'country' => 'BO', ), array( 'name' => 'Brazilian Real', 'alpha3' => 'BRL', 'numeric' => '986', 'exp' => 2, 'country' => 'BR', ), array( 'name' => 'Bahamian Dollar', 'alpha3' => 'BSD', 'numeric' => '044', 'exp' => 2, 'country' => 'BS', ), array( 'name' => 'Bhutanese Ngultrum', 'alpha3' => 'BTN', 'numeric' => '064', 'exp' => 2, 'country' => 'BT', ), array( 'name' => 'Botswana Pula', 'alpha3' => 'BWP', 'numeric' => '072', 'exp' => 2, 'country' => array( 'BW', 'ZW', ), ), array( 'name' => 'Belarussian Ruble', 'alpha3' => 'BYR', 'numeric' => '974', 'exp' => 0, 'country' => 'BY', ), array( 'name' => 'Belize Dollar', 'alpha3' => 'BZD', 'numeric' => '084', 'exp' => 2, 'country' => 'BZ', ), array( 'name' => 'Canadian Dollar', 'alpha3' => 'CAD', 'numeric' => '124', 'exp' => 2, 'country' => 'CA', ), array( 'name' => 'Congolese Franc', 'alpha3' => 'CDF', 'numeric' => '976', 'exp' => 2, 'country' => 'CD', ), array( 'name' => 'Swiss Franc', 'alpha3' => 'CHF', 'numeric' => '756', 'exp' => 2, 'country' => array( 'CH', 'LI', ), ), array( 'name' => 'Chilean Peso', 'alpha3' => 'CLP', 'numeric' => '152', 'exp' => 0, 'country' => 'CL', ), array( 'name' => 'Chinese Yuan', 'alpha3' => 'CNY', 'numeric' => '156', 'exp' => 2, 'country' => 'CN', ), array( 'name' => 'Colombian Peso', 'alpha3' => 'COP', 'numeric' => '170', 'exp' => 2, 'country' => 'CO', ), array( 'name' => 'Costa Rican Colon', 'alpha3' => 'CRC', 'numeric' => '188', 'exp' => 2, 'country' => 'CR', ), array( 'name' => 'Cuban Convertible Peso', 'alpha3' => 'CUC', 'numeric' => '931', 'exp' => 2, 'country' => 'CU', ), array( 'name' => 'Cuban Peso', 'alpha3' => 'CUP', 'numeric' => '192', 'exp' => 2, 'country' => 'CU', ), array( 'name' => 'Cape Verde Escudo', 'alpha3' => 'CVE', 'numeric' => '132', 'exp' => 2, 'country' => 'CV', ), array( 'name' => 'Czech Koruna', 'alpha3' => 'CZK', 'numeric' => '203', 'exp' => 2, 'country' => 'CZ', ), array( 'name' => 'Djiboutian Franc', 'alpha3' => 'DJF', 'numeric' => '262', 'exp' => 0, 'country' => 'DJ', ), array( 'name' => 'Danish Krone', 'alpha3' => 'DKK', 'numeric' => '208', 'exp' => 2, 'country' => array( 'DK', 'FO', 'GL', ), ), array( 'name' => 'Dominican Peso', 'alpha3' => 'DOP', 'numeric' => '214', 'exp' => 2, 'country' => 'DO', ), array( 'name' => 'Algerian Dinar', 'alpha3' => 'DZD', 'numeric' => '012', 'exp' => 2, 'country' => 'DZ', ), array( 'name' => 'Egyptian Pound', 'alpha3' => 'EGP', 'numeric' => '818', 'exp' => 2, 'country' => 'EG', ), array( 'name' => 'Eritrean Nakfa', 'alpha3' => 'ERN', 'numeric' => '232', 'exp' => 2, 'country' => 'ER', ), array( 'name' => 'Ethiopian Birr', 'alpha3' => 'ETB', 'numeric' => '230', 'exp' => 2, 'country' => 'ET', ), array( 'name' => 'Euro', 'alpha3' => 'EUR', 'numeric' => '978', 'exp' => 2, 'country' => array( 'AD', 'AT', 'AX', 'BE', 'BL', 'CY', 'DE', 'ES', 'FI', 'FR', 'GF', 'GP', 'GR', 'IE', 'IT', 'LT', 'LU', 'MC', 'ME', 'MF', 'MQ', 'MT', 'NL', 'PM', 'PT', 'RE', 'SI', 'SK', 'SM', 'TF', 'VA', 'YT', 'ZW', ), ), array( 'name' => 'Fiji Dollar', 'alpha3' => 'FJD', 'numeric' => '242', 'exp' => 2, 'country' => 'FJ', ), array( 'name' => 'Falkland Islands Pound', 'alpha3' => 'FKP', 'numeric' => '238', 'exp' => 2, 'country' => 'FK', ), array( 'name' => 'Pound Sterling', 'alpha3' => 'GBP', 'numeric' => '826', 'exp' => 2, 'country' => array( 'GB', 'GG', 'GS', 'IM', 'IO', 'JE', 'ZW', ), ), array( 'name' => 'Georgian Lari', 'alpha3' => 'GEL', 'numeric' => '981', 'exp' => 2, 'country' => 'GE', ), array( 'name' => 'Ghanaian Cedi', 'alpha3' => 'GHS', 'numeric' => '936', 'exp' => 2, 'country' => 'GH', ), array( 'name' => 'Gibraltar Pound', 'alpha3' => 'GIP', 'numeric' => '292', 'exp' => 2, 'country' => 'GI', ), array( 'name' => 'Gambian Dalasi', 'alpha3' => 'GMD', 'numeric' => '270', 'exp' => 2, 'country' => 'GM', ), array( 'name' => 'Guinean Franc', 'alpha3' => 'GNF', 'numeric' => '324', 'exp' => 0, 'country' => 'GN', ), array( 'name' => 'Guatemalan Quetzal', 'alpha3' => 'GTQ', 'numeric' => '320', 'exp' => 2, 'country' => 'GT', ), array( 'name' => 'Guyanese Dollar', 'alpha3' => 'GYD', 'numeric' => '328', 'exp' => 2, 'country' => 'GY', ), array( 'name' => 'Hong Kong Dollar', 'alpha3' => 'HKD', 'numeric' => '344', 'exp' => 2, 'country' => 'HK', ), array( 'name' => 'Honduran Lempira', 'alpha3' => 'HNL', 'numeric' => '340', 'exp' => 2, 'country' => 'HN', ), array( 'name' => 'Kuna', 'alpha3' => 'HRK', 'numeric' => '191', 'exp' => 2, 'country' => 'HR', ), array( 'name' => 'Haitian Gourde', 'alpha3' => 'HTG', 'numeric' => '332', 'exp' => 2, 'country' => 'HT', ), array( 'name' => 'Hungarian Forint', 'alpha3' => 'HUF', 'numeric' => '348', 'exp' => 2, 'country' => 'HU', ), array( 'name' => 'Indonesian Rupiah', 'alpha3' => 'IDR', 'numeric' => '360', 'exp' => 2, 'country' => 'ID', ), array( 'name' => 'Israeli New Sheqel', 'alpha3' => 'ILS', 'numeric' => '376', 'exp' => 2, 'country' => array( 'IL', 'PS', ), ), array( 'name' => 'Indian Rupee', 'alpha3' => 'INR', 'numeric' => '356', 'exp' => 2, 'country' => 'IN', ), array( 'name' => 'Iraqi Dinar', 'alpha3' => 'IQD', 'numeric' => '368', 'exp' => 3, 'country' => 'IQ', ), array( 'name' => 'Iranian Rial', 'alpha3' => 'IRR', 'numeric' => '364', 'exp' => 2, 'country' => 'IR', ), array( 'name' => 'Icelandic Króna', 'alpha3' => 'ISK', 'numeric' => '352', 'exp' => 0, 'country' => 'IS', ), array( 'name' => 'Jamaican Dollar', 'alpha3' => 'JMD', 'numeric' => '388', 'exp' => 2, 'country' => 'JM', ), array( 'name' => 'Jordanian Dinar', 'alpha3' => 'JOD', 'numeric' => '400', 'exp' => 3, 'country' => 'JO', ), array( 'name' => 'Japanese Yen', 'alpha3' => 'JPY', 'numeric' => '392', 'exp' => 0, 'country' => 'JP', ), array( 'name' => 'Kenyan Shilling', 'alpha3' => 'KES', 'numeric' => '404', 'exp' => 2, 'country' => 'KE', ), array( 'name' => 'Kyrgyzstani Som', 'alpha3' => 'KGS', 'numeric' => '417', 'exp' => 2, 'country' => 'KG', ), array( 'name' => 'Cambodian Riel', 'alpha3' => 'KHR', 'numeric' => '116', 'exp' => 2, 'country' => 'KH', ), array( 'name' => 'Comoro Franc', 'alpha3' => 'KMF', 'numeric' => '174', 'exp' => 0, 'country' => 'KM', ), array( 'name' => 'North Korean Won', 'alpha3' => 'KPW', 'numeric' => '408', 'exp' => 2, 'country' => 'KP', ), array( 'name' => 'South Korean Won', 'alpha3' => 'KRW', 'numeric' => '410', 'exp' => 0, 'country' => 'KR', ), array( 'name' => 'Kuwaiti Dinar', 'alpha3' => 'KWD', 'numeric' => '414', 'exp' => 3, 'country' => 'KW', ), array( 'name' => 'Cayman Islands Dollar', 'alpha3' => 'KYD', 'numeric' => '136', 'exp' => 2, 'country' => 'KY', ), array( 'name' => 'Kazakhstani Tenge', 'alpha3' => 'KZT', 'numeric' => '398', 'exp' => 2, 'country' => 'KZ', ), array( 'name' => 'Lao Kip', 'alpha3' => 'LAK', 'numeric' => '418', 'exp' => 2, 'country' => 'LA', ), array( 'name' => 'Lebanese Pound', 'alpha3' => 'LBP', 'numeric' => '422', 'exp' => 2, 'country' => 'LB', ), array( 'name' => 'Sri Lankan Rupee', 'alpha3' => 'LKR', 'numeric' => '144', 'exp' => 2, 'country' => 'LK', ), array( 'name' => 'Liberian Dollar', 'alpha3' => 'LRD', 'numeric' => '430', 'exp' => 2, 'country' => 'LR', ), array( 'name' => 'Lesotho Loti', 'alpha3' => 'LSL', 'numeric' => '426', 'exp' => 2, 'country' => 'LS', ), array( 'name' => 'Latvian Lats', 'alpha3' => 'LVL', 'numeric' => '428', 'exp' => 2, 'country' => 'LV', ), array( 'name' => 'Libyan Dinar', 'alpha3' => 'LYD', 'numeric' => '434', 'exp' => 3, 'country' => 'LY', ), array( 'name' => 'Moroccan Dirham', 'alpha3' => 'MAD', 'numeric' => '504', 'exp' => 2, 'country' => array( 'EH', 'MA', ), ), array( 'name' => 'Moldovan Leu', 'alpha3' => 'MDL', 'numeric' => '498', 'exp' => 2, 'country' => 'MD', ), array( 'name' => 'Malagasy Ariary', 'alpha3' => 'MGA', 'numeric' => '969', 'exp' => 0, 'country' => 'MG', ), array( 'name' => 'Macedonian Denar', 'alpha3' => 'MKD', 'numeric' => '807', 'exp' => 2, 'country' => 'MK', ), array( 'name' => 'Myanmar Kyat', 'alpha3' => 'MMK', 'numeric' => '104', 'exp' => 2, 'country' => 'MM', ), array( 'name' => 'Mongolian Tugrik', 'alpha3' => 'MNT', 'numeric' => '496', 'exp' => 2, 'country' => 'MN', ), array( 'name' => 'Macanese Pataca', 'alpha3' => 'MOP', 'numeric' => '446', 'exp' => 2, 'country' => 'MO', ), array( 'name' => 'Mauritanian Ouguiya', 'alpha3' => 'MRO', 'numeric' => '478', 'exp' => 0, 'country' => 'MR', ), array( 'name' => 'Mauritian Rupee', 'alpha3' => 'MUR', 'numeric' => '480', 'exp' => 2, 'country' => 'MU', ), array( 'name' => 'Maldivian Rufiyaa', 'alpha3' => 'MVR', 'numeric' => '462', 'exp' => 2, 'country' => 'MV', ), array( 'name' => 'Malawian Kwacha', 'alpha3' => 'MWK', 'numeric' => '454', 'exp' => 2, 'country' => 'MW', ), array( 'name' => 'Mexican Peso', 'alpha3' => 'MXN', 'numeric' => '484', 'exp' => 2, 'country' => 'MX', ), array( 'name' => 'Malaysian Ringgit', 'alpha3' => 'MYR', 'numeric' => '458', 'exp' => 2, 'country' => 'MY', ), array( 'name' => 'Mozambican Metical', 'alpha3' => 'MZN', 'numeric' => '943', 'exp' => 2, 'country' => 'MZ', ), array( 'name' => 'Namibian Dollar', 'alpha3' => 'NAD', 'numeric' => '516', 'exp' => 2, 'country' => 'NA', ), array( 'name' => 'Nigerian Naira', 'alpha3' => 'NGN', 'numeric' => '566', 'exp' => 2, 'country' => 'NG', ), array( 'name' => 'Nicaraguan Córdoba', 'alpha3' => 'NIO', 'numeric' => '558', 'exp' => 2, 'country' => 'NI', ), array( 'name' => 'Norwegian Krone', 'alpha3' => 'NOK', 'numeric' => '578', 'exp' => 2, 'country' => array( 'AQ', 'BV', 'NO', 'SJ', ), ), array( 'name' => 'Nepalese Rupee', 'alpha3' => 'NPR', 'numeric' => '524', 'exp' => 2, 'country' => 'NP', ), array( 'name' => 'New Zealand Dollar', 'alpha3' => 'NZD', 'numeric' => '554', 'exp' => 2, 'country' => array( 'CK', 'NU', 'NZ', 'PN', 'TK', ), ), array( 'name' => 'Omani Rial', 'alpha3' => 'OMR', 'numeric' => '512', 'exp' => 3, 'country' => 'OM', ), array( 'name' => 'Panamanian Balboa', 'alpha3' => 'PAB', 'numeric' => '590', 'exp' => 2, 'country' => 'PA', ), array( 'name' => 'Peruvian Nuevo Sol', 'alpha3' => 'PEN', 'numeric' => '604', 'exp' => 2, 'country' => 'PE', ), array( 'name' => 'Papua New Guinean Kina', 'alpha3' => 'PGK', 'numeric' => '598', 'exp' => 2, 'country' => 'PG', ), array( 'name' => 'Philippine Peso', 'alpha3' => 'PHP', 'numeric' => '608', 'exp' => 2, 'country' => 'PH', ), array( 'name' => 'Pakistani Rupee', 'alpha3' => 'PKR', 'numeric' => '586', 'exp' => 2, 'country' => 'PK', ), array( 'name' => 'Polish Zloty', 'alpha3' => 'PLN', 'numeric' => '985', 'exp' => 2, 'country' => 'PL', ), array( 'name' => 'Paraguayan Guarani', 'alpha3' => 'PYG', 'numeric' => '600', 'exp' => 0, 'country' => 'PY', ), array( 'name' => 'Qatari Rial', 'alpha3' => 'QAR', 'numeric' => '634', 'exp' => 2, 'country' => 'QA', ), array( 'name' => 'Romanian Leu', 'alpha3' => 'RON', 'numeric' => '946', 'exp' => 2, 'country' => 'RO', ), array( 'name' => 'Serbian Dinar', 'alpha3' => 'RSD', 'numeric' => '941', 'exp' => 0, 'country' => 'RS', ), array( 'name' => 'Russian Ruble', 'alpha3' => 'RUB', 'numeric' => '643', 'exp' => 2, 'country' => 'RU', ), array( 'name' => 'Rwandan Franc', 'alpha3' => 'RWF', 'numeric' => '646', 'exp' => 0, 'country' => 'RW', ), array( 'name' => 'Saudi Riyal', 'alpha3' => 'SAR', 'numeric' => '682', 'exp' => 2, 'country' => 'SA', ), array( 'name' => 'Solomon Islands Dollar', 'alpha3' => 'SBD', 'numeric' => '090', 'exp' => 2, 'country' => 'SB', ), array( 'name' => 'Seychelles Rupee', 'alpha3' => 'SCR', 'numeric' => '690', 'exp' => 2, 'country' => 'SC', ), array( 'name' => 'Sudanese Pound', 'alpha3' => 'SDG', 'numeric' => '938', 'exp' => 2, 'country' => 'SD', ), array( 'name' => 'Swedish Krona', 'alpha3' => 'SEK', 'numeric' => '752', 'exp' => 2, 'country' => 'SE', ), array( 'name' => 'Singapore Dollar', 'alpha3' => 'SGD', 'numeric' => '702', 'exp' => 2, 'country' => array( 'BN', 'SG', ), ), array( 'name' => 'Saint Helena Pound', 'alpha3' => 'SHP', 'numeric' => '654', 'exp' => 2, 'country' => 'SH', ), array( 'name' => 'Sierra Leonean Leone', 'alpha3' => 'SLL', 'numeric' => '694', 'exp' => 2, 'country' => 'SL', ), array( 'name' => 'Somali Shilling', 'alpha3' => 'SOS', 'numeric' => '706', 'exp' => 2, 'country' => 'SO', ), array( 'name' => 'Surinamese Dollar', 'alpha3' => 'SRD', 'numeric' => '968', 'exp' => 2, 'country' => 'SR', ), array( 'name' => 'South Sudanese Pound', 'alpha3' => 'SSP', 'numeric' => '728', 'exp' => 2, 'country' => 'SS', ), array( 'name' => 'São Tomé and Principe Dobra', 'alpha3' => 'STD', 'numeric' => '678', 'exp' => 2, 'country' => 'ST', ), array( 'name' => 'Syrian Pound', 'alpha3' => 'SYP', 'numeric' => '760', 'exp' => 2, 'country' => 'SY', ), array( 'name' => 'Swazi Lilangeni', 'alpha3' => 'SZL', 'numeric' => '748', 'exp' => 2, 'country' => 'SZ', ), array( 'name' => 'Thai Baht', 'alpha3' => 'THB', 'numeric' => '764', 'exp' => 2, 'country' => 'TH', ), array( 'name' => 'Tajikistani Somoni', 'alpha3' => 'TJS', 'numeric' => '972', 'exp' => 2, 'country' => 'TJ', ), array( 'name' => 'Turkmenistani Manat', 'alpha3' => 'TMT', 'numeric' => '934', 'exp' => 2, 'country' => 'TM', ), array( 'name' => 'Tunisian Dinar', 'alpha3' => 'TND', 'numeric' => '788', 'exp' => 3, 'country' => 'TN', ), array( 'name' => 'Tongan Paʻanga', 'alpha3' => 'TOP', 'numeric' => '776', 'exp' => 2, 'country' => 'TO', ), array( 'name' => 'Turkish Lira', 'alpha3' => 'TRY', 'numeric' => '949', 'exp' => 2, 'country' => 'TR', ), array( 'name' => 'Trinidad and Tobago Dollar', 'alpha3' => 'TTD', 'numeric' => '780', 'exp' => 2, 'country' => 'TT', ), array( 'name' => 'New Taiwan Dollar', 'alpha3' => 'TWD', 'numeric' => '901', 'exp' => 2, 'country' => 'TW', ), array( 'name' => 'Tanzanian Shilling', 'alpha3' => 'TZS', 'numeric' => '834', 'exp' => 2, 'country' => 'TZ', ), array( 'name' => 'Ukrainian Hryvnia', 'alpha3' => 'UAH', 'numeric' => '980', 'exp' => 2, 'country' => 'UA', ), array( 'name' => 'Ugandan Shilling', 'alpha3' => 'UGX', 'numeric' => '800', 'exp' => 0, 'country' => 'UG', ), array( 'name' => 'US Dollar', 'alpha3' => 'USD', 'numeric' => '840', 'exp' => 2, 'country' => array( 'AS', 'BQ', 'EC', 'FM', 'GU', 'MF', 'MH', 'MP', 'PR', 'PW', 'SV', 'TC', 'TL', 'UM', 'US', 'VG', 'VI', 'ZW', ), ), array( 'name' => 'Uruguayan Peso', 'alpha3' => 'UYU', 'numeric' => '858', 'exp' => 2, 'country' => 'UY', ), array( 'name' => 'Uzbekistan Som', 'alpha3' => 'UZS', 'numeric' => '860', 'exp' => 2, 'country' => 'UZ', ), array( 'name' => 'Venezuelan Bolivar', 'alpha3' => 'VEF', 'numeric' => '937', 'exp' => 2, 'country' => 'VE', ), array( 'name' => 'Vietnamese Dong', 'alpha3' => 'VND', 'numeric' => '704', 'exp' => 0, 'country' => 'VN', ), array( 'name' => 'Vanuatu Vatu', 'alpha3' => 'VUV', 'numeric' => '548', 'exp' => 0, 'country' => 'VU', ), array( 'name' => 'Samoan Tala', 'alpha3' => 'WST', 'numeric' => '882', 'exp' => 2, 'country' => 'WS', ), array( 'name' => 'CFA Franc BEAC', 'alpha3' => 'XAF', 'numeric' => '950', 'exp' => 0, 'country' => array( 'CF', 'CG', 'CM', 'GA', 'GQ', 'TD', ), ), array( 'name' => 'East Caribbean Dollar', 'alpha3' => 'XCD', 'numeric' => '951', 'exp' => 2, 'country' => array( 'AG', 'AI', 'DM', 'GD', 'KN', 'LC', 'MS', 'VC', ), ), array( 'name' => 'CFA Franc BCEAO', 'alpha3' => 'XOF', 'numeric' => '952', 'exp' => 0, 'country' => array( 'BJ', 'BF', 'CI', 'GW', 'ML', 'NE', 'SN', 'TG', ), ), array( 'name' => 'CFP Franc', 'alpha3' => 'XPF', 'numeric' => '953', 'exp' => 0, 'country' => array( 'NC', 'PF', 'WF', ), ), array( 'name' => 'Yemeni Rial', 'alpha3' => 'YER', 'numeric' => '886', 'exp' => 2, 'country' => 'YE', ), array( 'name' => 'South African Rand', 'alpha3' => 'ZAR', 'numeric' => '710', 'exp' => 2, 'country' => array( 'NA', 'LS', 'SZ', 'ZA', 'ZW', ), ), array( 'name' => 'Zambian Kwacha', 'alpha3' => 'ZMW', 'numeric' => '967', 'exp' => 2, 'country' => 'ZM', ), ); return $currencies; } /** * Quote and invoice currency exponent value (see zero-decimal currencies) * * @since 2.875 */ public static function currency_exponent( $currency_code ) { $currencies = Sliced_Shared::currencies(); foreach ( $currencies as $currency ) { if ( $currency['alpha3'] === $currency_code ) { return $currency['exp']; } } // if not found, pow(10,0) leaves it as is return 0; } /** * Quote and invoice currency options * * @since 2.875 */ public static function currency_options() { $currencies = Sliced_Shared::currencies(); $options = array( 'default' => 'Default Currency' ); foreach ( $currencies as $currency ) { $options[ $currency['alpha3'] ] = $currency['alpha3'] . ' - ' . $currency['name']; } return ( $options ); } /** * Convert a quote to an invoice. * * @version 3.9.4 * @since 3.9.0 */ public static function convert_quote_to_invoice( $id ) { $settings_invoices = get_option( 'sliced_invoices' ); // convert $new_slug = ''; $old_post = get_post( $id ); if ( $old_post ) { $new_slug = sanitize_title( $old_post->post_title ); } wp_update_post( array( 'ID' => $id, 'post_type' => 'sliced_invoice', 'post_name' => $new_slug, 'comment_status' => 'closed', ) ); // update the appropriate post meta $number = sliced_get_next_invoice_number(); $payment = sliced_get_accepted_payment_methods(); update_post_meta( $id, '_sliced_invoice_terms', $settings_invoices['terms'] ); update_post_meta( $id, '_sliced_invoice_created', time() ); update_post_meta( $id, '_sliced_invoice_number', $number ); update_post_meta( $id, '_sliced_invoice_prefix', sliced_get_invoice_prefix() ); update_post_meta( $id, '_sliced_invoice_suffix', sliced_get_invoice_suffix() ); update_post_meta( $id, '_sliced_number', sliced_get_invoice_prefix() . $number . sliced_get_invoice_suffix() ); update_post_meta( $id, '_sliced_payment_methods', array_keys( $payment ) ); update_post_meta( $id, '_sliced_invoice_due', Sliced_Invoice::get_auto_due_date() ); delete_post_meta( $id, '_sliced_quote_created' ); delete_post_meta( $id, '_sliced_quote_number' ); delete_post_meta( $id, '_sliced_quote_prefix' ); delete_post_meta( $id, '_sliced_quote_suffix' ); delete_post_meta( $id, '_sliced_quote_terms' ); // update the invoice number Sliced_Invoice::update_invoice_number( $id ); // set the status as draft wp_set_object_terms( $id, null, 'quote_status' ); // clear old status Sliced_Invoice::set_as_draft( $id ); // set new status } /** * Create a new invoice from a quote. * * @version 3.9.4 * @since 3.9.0 */ public static function create_invoice_from_quote( $id ) { global $wpdb; $settings_invoices = get_option( 'sliced_invoices' ); // duplicate post $post = get_post( $id ); $args = array( 'comment_status' => 'closed', 'ping_status' => $post->ping_status, 'post_author' => $post->post_author, 'post_content' => $post->post_content, 'post_excerpt' => $post->post_excerpt, 'post_name' => $post->post_name, 'post_parent' => $post->post_parent, 'post_password' => $post->post_password, 'post_status' => 'publish', 'post_title' => $post->post_title, 'post_type' => 'sliced_invoice', 'to_ping' => $post->to_ping, 'menu_order' => $post->menu_order ); $new_post_id = wp_insert_post( $args ); // get all current post terms and set them to the new post draft $taxonomies = get_object_taxonomies( $post->post_type ); foreach ( $taxonomies as $taxonomy ) { $post_terms = wp_get_object_terms( $id, $taxonomy, array( 'fields' => 'slugs' ) ); wp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false ); } // duplicate post metas $post_metas = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id=%d", $id ) ); if ( $post_metas && count( $post_metas ) ) { $sql_query = "INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) VALUES "; $sql_values = array(); foreach ( $post_metas as $post_meta ) { $meta_key = esc_sql( $post_meta->meta_key ); $meta_value = esc_sql( $post_meta->meta_value ); $sql_values[]= "($new_post_id, '$meta_key', '$meta_value')"; } $sql_query .= implode( ',', $sql_values ); $wpdb->query( $sql_query ); } // update the appropriate post meta on the new post $number = sliced_get_next_invoice_number(); $payment = sliced_get_accepted_payment_methods(); update_post_meta( $new_post_id, '_sliced_invoice_terms', $settings_invoices['terms'] ); update_post_meta( $new_post_id, '_sliced_invoice_created', time() ); update_post_meta( $new_post_id, '_sliced_invoice_number', $number ); update_post_meta( $new_post_id, '_sliced_invoice_prefix', sliced_get_invoice_prefix() ); update_post_meta( $new_post_id, '_sliced_invoice_suffix', sliced_get_invoice_suffix() ); update_post_meta( $new_post_id, '_sliced_number', sliced_get_invoice_prefix() . $number . sliced_get_invoice_suffix() ); update_post_meta( $new_post_id, '_sliced_payment_methods', array_keys( $payment ) ); update_post_meta( $new_post_id, '_sliced_invoice_due', Sliced_Invoice::get_auto_due_date() ); delete_post_meta( $new_post_id, '_sliced_quote_created' ); delete_post_meta( $new_post_id, '_sliced_quote_number' ); delete_post_meta( $new_post_id, '_sliced_quote_prefix' ); delete_post_meta( $new_post_id, '_sliced_quote_suffix' ); delete_post_meta( $new_post_id, '_sliced_quote_terms' ); // update the invoice number and set as draft Sliced_Invoice::update_invoice_number( $new_post_id ); Sliced_Invoice::set_as_draft( $new_post_id ); return $new_post_id; } }
Upload File
Create Folder