code = strtoupper( $currency_code ); $this->setup(); } /** * Returns a new currency object. * * @param string $currency_code * * @since 3.0 * * @return Currency */ public static function from_code( $currency_code ) { return new self( $currency_code ); } /** * Sets up properties. * * @since 3.0 */ private function setup() { $this->symbol = $this->get_symbol(); $this->decimal_separator = edd_get_option( 'decimal_separator', '.' ); $this->thousands_separator = edd_get_option( 'thousands_separator', ',' ); /** * Filters the decimal separator. * * @param string $decimal_separator * @param string $code * * @since 3.0 */ $this->decimal_separator = apply_filters( 'edd_currency_decimal_separator', $this->decimal_separator, $this->code ); /** * Filters the thousands separator. * * @param string $thousands_separator * @param string $code * * @since 3.0 */ $this->thousands_separator = apply_filters( 'edd_currency_thousands_separator', $this->thousands_separator, $this->code ); $separator = $this->_has_space_around_symbol() ? ' ' : ''; if ( 'before' === edd_get_option( 'currency_position', 'before' ) ) { $this->prefix = $this->symbol . $separator; } else { $this->suffix = $separator . $this->symbol; } /** * Filters the currency prefix. * * @param string $prefix * @param string $code * * @since 3.0 */ $this->prefix = apply_filters( 'edd_currency_prefix', $this->prefix, $this->code ); /** * Filters the currency suffix. * * @param string $prefix * @param string $code * * @since 3.0 */ $this->suffix = apply_filters( 'edd_currency_suffix', $this->suffix, $this->code ); $this->number_decimals = $this->_is_zero_decimal() ? 0 : 2; } /** * Whether or not this currency has a space between the symbol and the amount. * * @since 3.0 * * @return bool */ private function _has_space_around_symbol() { return ! in_array( $this->code, array( 'GBP', 'BRL', 'EUR', 'USD', 'AUD', 'CAD', 'HKD', 'MXN', 'SGD', 'JPY' ) ); } /** * Returns the symbol for this currency. * Depending on settings, this will be used as either the prefix or the suffix. * * @since 3.0 * @return string */ public function get_symbol() { switch ( $this->code ) : case "GBP" : $symbol = '£'; break; case "BRL" : $symbol = 'R$'; break; case "EUR" : $symbol = '€'; break; case "USD" : case "AUD" : case "NZD" : case "CAD" : case "HKD" : case "MXN" : case "SGD" : $symbol = '$'; break; case "JPY" : $symbol = '¥'; break; case "AOA" : $symbol = 'Kz'; break; default : $symbol = $this->code; break; endswitch; /** * Filters the currency symbol. * * @since unknown * * @param string $symbol Currency symbol. * @param string $code Currency code. */ return apply_filters( 'edd_currency_symbol', $symbol, $this->code ); } /** * Determines whether or not the currency is zero-decimal. * * @since 3.0 * * @return bool */ private function _is_zero_decimal() { $currencies = array( 'bif', 'clp', 'djf', 'gnf', 'huf', 'jpy', 'kmf', 'krw', 'mga', 'pyg', 'rwf', 'ugx', 'vnd', 'vuv', 'xaf', 'xof', 'xpf', ); return in_array( strtolower( $this->code ), $currencies, true ); } }