Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Data/Currency.php
<?php

namespace XF\Data;

use function
in_array;

class
Currency
{
    protected
$popularCurrencies = [
       
'AUD', 'CAD', 'EUR', 'GBP', 'USD'
   
];

    public function
getCurrencyOptions($popular = false)
    {
       
$output = [];
        foreach (
$this->getCurrencyData() AS $code => $info)
        {
            if (
$popular)
            {
                if (
in_array($code, $this->popularCurrencies))
                {
                   
$output[$code] = $info['code'] . ' - ' . \XF::phrase($info['phrase']);
                }
            }
            else
            {
               
$output[$code] = $info['code'] . ' - ' . \XF::phrase($info['phrase']);
            }
        }
        return
$output;
    }

    public function
languageFormat($value, $currencyCode, \XF\Language $language = null, $format = null)
    {
       
$language = $language ?: \XF::language();

        if (
$currency = $this->getCurrency($currencyCode))
        {
            return
$language->currencyFormat($value, $currency['symbol'], $currency['precision'], $format);
        }
        else
        {
            return
$language->currencyFormat($value, $currencyCode, 2, $format);
        }
    }

    public function
getCurrencyData()
    {
       
// TODO: periodically check to see if FA has more icons available

       
return [
           
'AED' => ['code' => 'AED', 'symbol' => 'AED',    'precision' => 2, 'phrase' => 'currency.aed'],
           
'AFN' => ['code' => 'AFN', 'symbol' => 'AFN',    'precision' => 2, 'phrase' => 'currency.afn'],
           
'ALL' => ['code' => 'ALL', 'symbol' => 'ALL',    'precision' => 2, 'phrase' => 'currency.all'],
           
'AMD' => ['code' => 'AMD', 'symbol' => 'AMD',    'precision' => 2, 'phrase' => 'currency.amd'],
           
'AOA' => ['code' => 'AOA', 'symbol' => 'AOA',    'precision' => 2, 'phrase' => 'currency.aoa'],
           
'ARS' => ['code' => 'ARS', 'symbol' => 'ARS',    'precision' => 2, 'phrase' => 'currency.ars'],
           
'AUD' => ['code' => 'AUD', 'symbol' => 'AU$',    'precision' => 2, 'phrase' => 'currency.aud'],
           
'AWG' => ['code' => 'AWG', 'symbol' => 'AWG',    'precision' => 2, 'phrase' => 'currency.awg'],
           
'AZN' => ['code' => 'AZN', 'symbol' => 'AZN',    'precision' => 2, 'phrase' => 'currency.azn'],
           
'BAM' => ['code' => 'BAM', 'symbol' => 'BAM',    'precision' => 2, 'phrase' => 'currency.bam'],
           
'BBD' => ['code' => 'BBD', 'symbol' => 'BBD',    'precision' => 2, 'phrase' => 'currency.bbd'],
           
'BDT' => ['code' => 'BDT', 'symbol' => 'BDT',    'precision' => 2, 'phrase' => 'currency.bdt'],
           
'BGN' => ['code' => 'BGN', 'symbol' => 'BGN',    'precision' => 2, 'phrase' => 'currency.bgn'],
           
'BHD' => ['code' => 'BHD', 'symbol' => 'BHD',    'precision' => 3, 'phrase' => 'currency.bhd'],
           
'BIF' => ['code' => 'BIF', 'symbol' => 'BIF',    'precision' => 0, 'phrase' => 'currency.bif'],
           
'BMD' => ['code' => 'BMD', 'symbol' => 'BMD',    'precision' => 2, 'phrase' => 'currency.bmd'],
           
'BND' => ['code' => 'BND', 'symbol' => 'BND',    'precision' => 2, 'phrase' => 'currency.bnd'],
           
'BOB' => ['code' => 'BOB', 'symbol' => 'BOB',    'precision' => 2, 'phrase' => 'currency.bob'],
           
'BRL' => ['code' => 'BRL', 'symbol' => 'R$',    'precision' => 2, 'phrase' => 'currency.brl'],
           
'BWP' => ['code' => 'BWP', 'symbol' => 'BWP',    'precision' => 2, 'phrase' => 'currency.bwp'],
           
'BYN' => ['code' => 'BYN', 'symbol' => 'BYN',    'precision' => 0, 'phrase' => 'currency.byn'],
           
'BZD' => ['code' => 'BZD', 'symbol' => 'BZD',    'precision' => 2, 'phrase' => 'currency.bzd'],
           
'CAD' => ['code' => 'CAD', 'symbol' => 'CA$',    'precision' => 2, 'phrase' => 'currency.cad'],
           
'CDF' => ['code' => 'CDF', 'symbol' => 'CDF',    'precision' => 2, 'phrase' => 'currency.cdf'],
           
'CHF' => ['code' => 'CHF', 'symbol' => 'CHF',    'precision' => 2, 'phrase' => 'currency.chf'],
           
'CLP' => ['code' => 'CLP', 'symbol' => 'CLP',    'precision' => 0, 'phrase' => 'currency.clp'],
           
'CNY' => ['code' => 'CNY', 'symbol' => '¥',        'precision' => 2, 'phrase' => 'currency.cny'],
           
'COP' => ['code' => 'COP', 'symbol' => 'COP',    'precision' => 2, 'phrase' => 'currency.cop'],
           
'CRC' => ['code' => 'CRC', 'symbol' => 'CRC',    'precision' => 2, 'phrase' => 'currency.crc'],
           
'CVE' => ['code' => 'CVE', 'symbol' => 'CVE',    'precision' => 2, 'phrase' => 'currency.cve'],
           
'CZK' => ['code' => 'CZK', 'symbol' => 'CZK',    'precision' => 2, 'phrase' => 'currency.czk'],
           
'DJF' => ['code' => 'DJF', 'symbol' => 'DJF',    'precision' => 0, 'phrase' => 'currency.djf'],
           
'DKK' => ['code' => 'DKK', 'symbol' => 'DKK',    'precision' => 2, 'phrase' => 'currency.dkk'],
           
'DOP' => ['code' => 'DOP', 'symbol' => 'DOP',    'precision' => 2, 'phrase' => 'currency.dop'],
           
'DZD' => ['code' => 'DZD', 'symbol' => 'DZD',    'precision' => 2, 'phrase' => 'currency.dzd'],
           
'EGP' => ['code' => 'EGP', 'symbol' => 'EGP',    'precision' => 2, 'phrase' => 'currency.egp'],
           
'ERN' => ['code' => 'ERN', 'symbol' => 'ERN',    'precision' => 2, 'phrase' => 'currency.ern'],
           
'ETB' => ['code' => 'ETB', 'symbol' => 'ETB',    'precision' => 2, 'phrase' => 'currency.etb'],
           
'EUR' => ['code' => 'EUR', 'symbol' => '€',        'precision' => 2, 'phrase' => 'currency.eur', 'fa' => 'fa-euro-sign'],
           
'GBP' => ['code' => 'GBP', 'symbol' => '£',        'precision' => 2, 'phrase' => 'currency.gbp', 'fa' => 'fa-pound-sign'],
           
'GEL' => ['code' => 'GEL', 'symbol' => 'GEL',    'precision' => 2, 'phrase' => 'currency.gel'],
           
'GHS' => ['code' => 'GHS', 'symbol' => 'GHS',    'precision' => 2, 'phrase' => 'currency.ghs'],
           
'GNF' => ['code' => 'GNF', 'symbol' => 'GNF',    'precision' => 0, 'phrase' => 'currency.gnf'],
           
'GTQ' => ['code' => 'GTQ', 'symbol' => 'GTQ',    'precision' => 2, 'phrase' => 'currency.gtq'],
           
'GYD' => ['code' => 'GYD', 'symbol' => 'GYD',    'precision' => 2, 'phrase' => 'currency.gyd'],
           
'HKD' => ['code' => 'HKD', 'symbol' => 'HK$',    'precision' => 2, 'phrase' => 'currency.hkd'],
           
'HNL' => ['code' => 'HNL', 'symbol' => 'HNL',    'precision' => 2, 'phrase' => 'currency.hnl'],
           
'HRK' => ['code' => 'HRK', 'symbol' => 'HRK',    'precision' => 2, 'phrase' => 'currency.hrk'],
           
'HUF' => ['code' => 'HUF', 'symbol' => 'HUF',    'precision' => 2, 'phrase' => 'currency.huf'],
           
'IDR' => ['code' => 'IDR', 'symbol' => 'IDR',    'precision' => 2, 'phrase' => 'currency.idr'],
           
'ILS' => ['code' => 'ILS', 'symbol' => '₪',     'precision' => 2, 'phrase' => 'currency.ils', 'fa' => 'fa-shekel-sign'],
           
'INR' => ['code' => 'INR', 'symbol' => '₹',        'precision' => 2, 'phrase' => 'currency.inr', 'fa' => 'fa-rupee-sign'],
           
'IQD' => ['code' => 'IQD', 'symbol' => 'IQD',    'precision' => 3, 'phrase' => 'currency.iqd'],
           
'IRR' => ['code' => 'IRR', 'symbol' => 'IRR',    'precision' => 2, 'phrase' => 'currency.irr'],
           
'ISK' => ['code' => 'ISK', 'symbol' => 'ISK',    'precision' => 0, 'phrase' => 'currency.isk'],
           
'JMD' => ['code' => 'JMD', 'symbol' => 'JMD',    'precision' => 2, 'phrase' => 'currency.jmd'],
           
'JOD' => ['code' => 'JOD', 'symbol' => 'JOD',    'precision' => 3, 'phrase' => 'currency.jod'],
           
'JPY' => ['code' => 'JPY', 'symbol' => '¥',        'precision' => 0, 'phrase' => 'currency.jpy', 'fa' => 'fa-yen-sign'],
           
'KES' => ['code' => 'KES', 'symbol' => 'KES',    'precision' => 2, 'phrase' => 'currency.kes'],
           
'KHR' => ['code' => 'KHR', 'symbol' => 'KHR',    'precision' => 2, 'phrase' => 'currency.khr'],
           
'KMF' => ['code' => 'KMF', 'symbol' => 'KMF',    'precision' => 0, 'phrase' => 'currency.kmf'],
           
'KRW' => ['code' => 'KRW', 'symbol' => '₩',        'precision' => 0, 'phrase' => 'currency.krw', 'fa' => 'fa-won-sign'],
           
'KWD' => ['code' => 'KWD', 'symbol' => 'KWD',    'precision' => 3, 'phrase' => 'currency.kwd'],
           
'KZT' => ['code' => 'KZT', 'symbol' => '₸',     'precision' => 2, 'phrase' => 'currency.kzt', 'fa' => 'fa-tenge'],
           
'LBP' => ['code' => 'LBP', 'symbol' => 'LBP',    'precision' => 2, 'phrase' => 'currency.lbp'],
           
'LKR' => ['code' => 'LKR', 'symbol' => 'LKR',    'precision' => 2, 'phrase' => 'currency.lkr'],
           
'LRD' => ['code' => 'LRD', 'symbol' => 'LRD',    'precision' => 2, 'phrase' => 'currency.lrd'],
           
'LYD' => ['code' => 'LYD', 'symbol' => 'LYD',    'precision' => 3, 'phrase' => 'currency.lyd'],
           
'MAD' => ['code' => 'MAD', 'symbol' => 'MAD',    'precision' => 2, 'phrase' => 'currency.mad'],
           
'MDL' => ['code' => 'MDL', 'symbol' => 'MDL',    'precision' => 2, 'phrase' => 'currency.mdl'],
           
'MGA' => ['code' => 'MGA', 'symbol' => 'MGA',    'precision' => 2, 'phrase' => 'currency.mga'],
           
'MKD' => ['code' => 'MKD', 'symbol' => 'MKD',    'precision' => 2, 'phrase' => 'currency.mkd'],
           
'MMK' => ['code' => 'MMK', 'symbol' => 'MMK',    'precision' => 2, 'phrase' => 'currency.mmk'],
           
'MOP' => ['code' => 'MOP', 'symbol' => 'MOP',    'precision' => 2, 'phrase' => 'currency.mop'],
           
'MUR' => ['code' => 'MUR', 'symbol' => 'MUR',    'precision' => 2, 'phrase' => 'currency.mur'],
           
'MXN' => ['code' => 'MXN', 'symbol' => 'MX$',    'precision' => 2, 'phrase' => 'currency.mxn'],
           
'MYR' => ['code' => 'MYR', 'symbol' => 'MYR',    'precision' => 2, 'phrase' => 'currency.myr'],
           
'MZN' => ['code' => 'MZN', 'symbol' => 'MZN',    'precision' => 2, 'phrase' => 'currency.mzn'],
           
'NAD' => ['code' => 'NAD', 'symbol' => 'NAD',    'precision' => 2, 'phrase' => 'currency.nad'],
           
'NGN' => ['code' => 'NGN', 'symbol' => 'NGN',    'precision' => 2, 'phrase' => 'currency.ngn'],
           
'NIO' => ['code' => 'NIO', 'symbol' => 'NIO',    'precision' => 2, 'phrase' => 'currency.nio'],
           
'NOK' => ['code' => 'NOK', 'symbol' => 'NOK',    'precision' => 2, 'phrase' => 'currency.nok'],
           
'NPR' => ['code' => 'NPR', 'symbol' => 'NPR',    'precision' => 2, 'phrase' => 'currency.npr'],
           
'NZD' => ['code' => 'NZD', 'symbol' => 'NZ$',    'precision' => 2, 'phrase' => 'currency.nzd'],
           
'OMR' => ['code' => 'OMR', 'symbol' => 'OMR',    'precision' => 3, 'phrase' => 'currency.omr'],
           
'PAB' => ['code' => 'PAB', 'symbol' => 'PAB',    'precision' => 2, 'phrase' => 'currency.pab'],
           
'PEN' => ['code' => 'PEN', 'symbol' => 'PEN',    'precision' => 2, 'phrase' => 'currency.pen'],
           
'PHP' => ['code' => 'PHP', 'symbol' => 'PHP',    'precision' => 2, 'phrase' => 'currency.php'],
           
'PKR' => ['code' => 'PKR', 'symbol' => 'PKR',    'precision' => 2, 'phrase' => 'currency.pkr'],
           
'PLN' => ['code' => 'PLN', 'symbol' => 'PLN',    'precision' => 2, 'phrase' => 'currency.pln'],
           
'PYG' => ['code' => 'PYG', 'symbol' => 'PYG',    'precision' => 0, 'phrase' => 'currency.pyg'],
           
'QAR' => ['code' => 'QAR', 'symbol' => 'QAR',    'precision' => 2, 'phrase' => 'currency.qar'],
           
'RON' => ['code' => 'RON', 'symbol' => 'RON',    'precision' => 2, 'phrase' => 'currency.ron'],
           
'RSD' => ['code' => 'RSD', 'symbol' => 'RSD',    'precision' => 2, 'phrase' => 'currency.rsd'],
           
'RUB' => ['code' => 'RUB', 'symbol' => '₽',       'precision' => 2, 'phrase' => 'currency.rub', 'fa' => 'fa-ruble-sign'],
           
'RWF' => ['code' => 'RWF', 'symbol' => 'RWF',    'precision' => 0, 'phrase' => 'currency.rwf'],
           
'SAR' => ['code' => 'SAR', 'symbol' => 'SAR',    'precision' => 2, 'phrase' => 'currency.sar'],
           
'SDG' => ['code' => 'SDG', 'symbol' => 'SDG',    'precision' => 2, 'phrase' => 'currency.sdg'],
           
'SEK' => ['code' => 'SEK', 'symbol' => 'SEK',    'precision' => 2, 'phrase' => 'currency.sek'],
           
'SGD' => ['code' => 'SGD', 'symbol' => 'SGD',    'precision' => 2, 'phrase' => 'currency.sgd'],
           
'SOS' => ['code' => 'SOS', 'symbol' => 'SOS',    'precision' => 2, 'phrase' => 'currency.sos'],
           
'STD' => ['code' => 'STD', 'symbol' => 'STD',    'precision' => 2, 'phrase' => 'currency.std'],
           
'SYP' => ['code' => 'SYP', 'symbol' => 'SYP',    'precision' => 2, 'phrase' => 'currency.syp'],
           
'THB' => ['code' => 'THB', 'symbol' => '฿',        'precision' => 2, 'phrase' => 'currency.thb'],
           
'TND' => ['code' => 'TND', 'symbol' => 'TND',    'precision' => 3, 'phrase' => 'currency.tnd'],
           
'TOP' => ['code' => 'TOP', 'symbol' => 'TOP',    'precision' => 2, 'phrase' => 'currency.top'],
           
'TRY' => ['code' => 'TRY', 'symbol' => 'TRY',    'precision' => 2, 'phrase' => 'currency.try', 'fa' => 'fa-lira-sign'],
           
'TTD' => ['code' => 'TTD', 'symbol' => 'TTD',    'precision' => 2, 'phrase' => 'currency.ttd'],
           
'TWD' => ['code' => 'TWD', 'symbol' => 'NT$',    'precision' => 2, 'phrase' => 'currency.twd'],
           
'TZS' => ['code' => 'TZS', 'symbol' => 'TZS',    'precision' => 2, 'phrase' => 'currency.tzs'],
           
'UAH' => ['code' => 'UAH', 'symbol' => '₴',     'precision' => 2, 'phrase' => 'currency.uah', 'fa' => 'fa-hryvnia'],
           
'UGX' => ['code' => 'UGX', 'symbol' => 'UGX',    'precision' => 0, 'phrase' => 'currency.ugx'],
           
'USD' => ['code' => 'USD', 'symbol' => '$',        'precision' => 2, 'phrase' => 'currency.usd', 'fa' => 'fa-dollar-sign'],
           
'UYU' => ['code' => 'UYU', 'symbol' => 'UYU',    'precision' => 2, 'phrase' => 'currency.uyu'],
           
'UZS' => ['code' => 'UZS', 'symbol' => 'UZS',    'precision' => 2, 'phrase' => 'currency.uzs'],
           
'VEF' => ['code' => 'VEF', 'symbol' => 'VEF',    'precision' => 2, 'phrase' => 'currency.vef'],
           
'VND' => ['code' => 'VND', 'symbol' => '₫',        'precision' => 0, 'phrase' => 'currency.vnd'],
           
'XAF' => ['code' => 'XAF', 'symbol' => 'FCFA',    'precision' => 0, 'phrase' => 'currency.xaf'],
           
'XOF' => ['code' => 'XOF', 'symbol' => 'CFA',    'precision' => 0, 'phrase' => 'currency.xof'],
           
'YER' => ['code' => 'YER', 'symbol' => 'YER',    'precision' => 2, 'phrase' => 'currency.yer'],
           
'ZAR' => ['code' => 'ZAR', 'symbol' => 'ZAR',    'precision' => 2, 'phrase' => 'currency.zar'],
           
'ZMK' => ['code' => 'ZMK', 'symbol' => 'ZMK',    'precision' => 0, 'phrase' => 'currency.zmk']
        ];
    }

    protected function
getCurrency(&$currencyCode)
    {
       
$currencyCode = strtoupper($currencyCode);
       
$data = $this->getCurrencyData();

        return
$data[$currencyCode] ?? null;
    }

    public function
getCurrencySymbol($currencyCode)
    {
       
$currency = $this->getCurrency($currencyCode);

        return
$currency ? $currency['symbol'] : '';
    }

    public function
getCurrencyFa($currencyCode)
    {
       
$currency = $this->getCurrency($currencyCode);

        return
$currency['fa'] ?? '';
    }

    public function
getCurrencyFormats()
    {
        return [
           
'{symbol}{value}',
           
'{symbol} {value}',
           
'{value}{symbol}',
           
'{value} {symbol}'
       
];
    }

    public function
getCurrencyFormatExamples(\XF\Language $language = null)
    {
       
$language = $language ?: \XF::language();

       
$currencyFormats = [];
        foreach (
$this->getCurrencyFormats() AS $currencyFormat)
        {
           
$currencyFormats[$currencyFormat] = $this->languageFormat('1234.50', 'USD', $language, $currencyFormat);
        }

        return
$currencyFormats;
    }
}