| 1 |
<?php |
| 2 |
/** |
| 3 |
* Currency Helper Class |
| 4 |
* |
| 5 |
* Provides comprehensive currency information and utilities |
| 6 |
* |
| 7 |
* @package EasyInvoice |
| 8 |
* @subpackage Helpers |
| 9 |
*/ |
| 10 |
|
| 11 |
namespace EasyInvoice\Helpers; |
| 12 |
|
| 13 |
class CurrencyHelper { |
| 14 |
|
| 15 |
/** |
| 16 |
* Get all available currencies with their codes, symbols, and names |
| 17 |
* |
| 18 |
* @return array Array of currencies with code as key and array of symbol, name as value |
| 19 |
*/ |
| 20 |
public static function getCurrencies(): array { |
| 21 |
return [ |
| 22 |
'USD' => ['symbol' => '$', 'name' => 'US Dollar'], |
| 23 |
'EUR' => ['symbol' => '€', 'name' => 'Euro'], |
| 24 |
'GBP' => ['symbol' => '£', 'name' => 'British Pound'], |
| 25 |
'JPY' => ['symbol' => '¥', 'name' => 'Japanese Yen'], |
| 26 |
'CAD' => ['symbol' => 'C$', 'name' => 'Canadian Dollar'], |
| 27 |
'AUD' => ['symbol' => 'A$', 'name' => 'Australian Dollar'], |
| 28 |
'CHF' => ['symbol' => 'CHF', 'name' => 'Swiss Franc'], |
| 29 |
'CNY' => ['symbol' => '¥', 'name' => 'Chinese Yuan'], |
| 30 |
'INR' => ['symbol' => '₹', 'name' => 'Indian Rupee'], |
| 31 |
'BRL' => ['symbol' => 'R$', 'name' => 'Brazilian Real'], |
| 32 |
'RUB' => ['symbol' => '₽', 'name' => 'Russian Ruble'], |
| 33 |
'KRW' => ['symbol' => '₩', 'name' => 'South Korean Won'], |
| 34 |
'MXN' => ['symbol' => '$', 'name' => 'Mexican Peso'], |
| 35 |
'SGD' => ['symbol' => 'S$', 'name' => 'Singapore Dollar'], |
| 36 |
'HKD' => ['symbol' => 'HK$', 'name' => 'Hong Kong Dollar'], |
| 37 |
'NOK' => ['symbol' => 'kr', 'name' => 'Norwegian Krone'], |
| 38 |
'SEK' => ['symbol' => 'kr', 'name' => 'Swedish Krona'], |
| 39 |
'DKK' => ['symbol' => 'kr', 'name' => 'Danish Krone'], |
| 40 |
'PLN' => ['symbol' => 'zł', 'name' => 'Polish Złoty'], |
| 41 |
'TRY' => ['symbol' => '₺', 'name' => 'Turkish Lira'], |
| 42 |
'ZAR' => ['symbol' => 'R', 'name' => 'South African Rand'], |
| 43 |
'NZD' => ['symbol' => 'NZ$', 'name' => 'New Zealand Dollar'], |
| 44 |
'THB' => ['symbol' => '฿', 'name' => 'Thai Baht'], |
| 45 |
'MYR' => ['symbol' => 'RM', 'name' => 'Malaysian Ringgit'], |
| 46 |
'IDR' => ['symbol' => 'Rp', 'name' => 'Indonesian Rupiah'], |
| 47 |
'PHP' => ['symbol' => '₱', 'name' => 'Philippine Peso'], |
| 48 |
'ILS' => ['symbol' => '₪', 'name' => 'Israeli Shekel'], |
| 49 |
'AED' => ['symbol' => 'د.إ', 'name' => 'UAE Dirham'], |
| 50 |
'SAR' => ['symbol' => 'ر.س', 'name' => 'Saudi Riyal'], |
| 51 |
'QAR' => ['symbol' => 'ر.ق', 'name' => 'Qatari Riyal'], |
| 52 |
'KWD' => ['symbol' => 'د.ك', 'name' => 'Kuwaiti Dinar'], |
| 53 |
'BHD' => ['symbol' => 'د.ب', 'name' => 'Bahraini Dinar'], |
| 54 |
'OMR' => ['symbol' => 'ر.ع.', 'name' => 'Omani Rial'], |
| 55 |
'JOD' => ['symbol' => 'د.ا', 'name' => 'Jordanian Dinar'], |
| 56 |
'EGP' => ['symbol' => 'E£', 'name' => 'Egyptian Pound'], |
| 57 |
'NGN' => ['symbol' => '₦', 'name' => 'Nigerian Naira'], |
| 58 |
'KES' => ['symbol' => 'KSh', 'name' => 'Kenyan Shilling'], |
| 59 |
'GHS' => ['symbol' => 'GH₵', 'name' => 'Ghanaian Cedi'], |
| 60 |
'UGX' => ['symbol' => 'USh', 'name' => 'Ugandan Shilling'], |
| 61 |
'TZS' => ['symbol' => 'TSh', 'name' => 'Tanzanian Shilling'], |
| 62 |
'MAD' => ['symbol' => 'د.� |
| 63 |
.', 'name' => 'Moroccan Dirham'], |
| 64 |
'TND' => ['symbol' => 'د.ت', 'name' => 'Tunisian Dinar'], |
| 65 |
'DZD' => ['symbol' => 'د.ج', 'name' => 'Algerian Dinar'], |
| 66 |
'LYD' => ['symbol' => 'ل.د', 'name' => 'Libyan Dinar'], |
| 67 |
'SDG' => ['symbol' => 'ج.س.', 'name' => 'Sudanese Pound'], |
| 68 |
'ETB' => ['symbol' => 'Br', 'name' => 'Ethiopian Birr'], |
| 69 |
'SOS' => ['symbol' => 'S', 'name' => 'Somali Shilling'], |
| 70 |
'DJF' => ['symbol' => 'Fdj', 'name' => 'Djiboutian Franc'], |
| 71 |
'KMF' => ['symbol' => 'CF', 'name' => 'Comorian Franc'], |
| 72 |
'MUR' => ['symbol' => '₨', 'name' => 'Mauritian Rupee'], |
| 73 |
'SCR' => ['symbol' => '₨', 'name' => 'Seychellois Rupee'], |
| 74 |
'MVR' => ['symbol' => 'MVR', 'name' => 'Maldivian Rufiyaa'], |
| 75 |
'LKR' => ['symbol' => 'Rs', 'name' => 'Sri Lankan Rupee'], |
| 76 |
'BDT' => ['symbol' => '৳', 'name' => 'Bangladeshi Taka'], |
| 77 |
'NPR' => ['symbol' => '₨', 'name' => 'Nepalese Rupee'], |
| 78 |
'PKR' => ['symbol' => '₨', 'name' => 'Pakistani Rupee'], |
| 79 |
'AFN' => ['symbol' => '؋', 'name' => 'Afghan Afghani'], |
| 80 |
'IRR' => ['symbol' => '﷼', 'name' => 'Iranian Rial'], |
| 81 |
'IQD' => ['symbol' => 'ع.د', 'name' => 'Iraqi Dinar'], |
| 82 |
'SYP' => ['symbol' => 'ل.س', 'name' => 'Syrian Pound'], |
| 83 |
'LBP' => ['symbol' => 'ل.ل', 'name' => 'Lebanese Pound'], |
| 84 |
'JMD' => ['symbol' => 'J$', 'name' => 'Jamaican Dollar'], |
| 85 |
'TTD' => ['symbol' => 'TT$', 'name' => 'Trinidad and Tobago Dollar'], |
| 86 |
'BBD' => ['symbol' => 'Bds$', 'name' => 'Barbadian Dollar'], |
| 87 |
'XCD' => ['symbol' => 'EC$', 'name' => 'East Caribbean Dollar'], |
| 88 |
'BZD' => ['symbol' => 'BZ$', 'name' => 'Belize Dollar'], |
| 89 |
'GTQ' => ['symbol' => 'Q', 'name' => 'Guatemalan Quetzal'], |
| 90 |
'HNL' => ['symbol' => 'L', 'name' => 'Honduran Lempira'], |
| 91 |
'NIO' => ['symbol' => 'C$', 'name' => 'Nicaraguan Córdoba'], |
| 92 |
'CRC' => ['symbol' => '₡', 'name' => 'Costa Rican Colón'], |
| 93 |
'PAB' => ['symbol' => 'B/.', 'name' => 'Panamanian Balboa'], |
| 94 |
'DOP' => ['symbol' => 'RD$', 'name' => 'Dominican Peso'], |
| 95 |
'HTG' => ['symbol' => 'G', 'name' => 'Haitian Gourde'], |
| 96 |
'CUP' => ['symbol' => '$', 'name' => 'Cuban Peso'], |
| 97 |
'ARS' => ['symbol' => '$', 'name' => 'Argentine Peso'], |
| 98 |
'CLP' => ['symbol' => '$', 'name' => 'Chilean Peso'], |
| 99 |
'COP' => ['symbol' => '$', 'name' => 'Colombian Peso'], |
| 100 |
'PEN' => ['symbol' => 'S/', 'name' => 'Peruvian Sol'], |
| 101 |
'BOB' => ['symbol' => 'Bs', 'name' => 'Bolivian Boliviano'], |
| 102 |
'PYG' => ['symbol' => '₲', 'name' => 'Paraguayan Guaraní'], |
| 103 |
'UYU' => ['symbol' => '$', 'name' => 'Uruguayan Peso'], |
| 104 |
'VEF' => ['symbol' => 'Bs', 'name' => 'Venezuelan Bolívar'], |
| 105 |
'GYD' => ['symbol' => 'G$', 'name' => 'Guyanese Dollar'], |
| 106 |
'SRD' => ['symbol' => '$', 'name' => 'Surinamese Dollar'], |
| 107 |
'FJD' => ['symbol' => 'FJ$', 'name' => 'Fijian Dollar'], |
| 108 |
'WST' => ['symbol' => 'T', 'name' => 'Samoan Tālā'], |
| 109 |
'TOP' => ['symbol' => 'T$', 'name' => 'Tongan Paʻanga'], |
| 110 |
'VUV' => ['symbol' => 'VT', 'name' => 'Vanuatu Vatu'], |
| 111 |
'PGK' => ['symbol' => 'K', 'name' => 'Papua New Guinean Kina'], |
| 112 |
'SBD' => ['symbol' => 'SI$', 'name' => 'Solomon Islands Dollar'], |
| 113 |
'KID' => ['symbol' => '$', 'name' => 'Kiribati Dollar'], |
| 114 |
'TVD' => ['symbol' => '$', 'name' => 'Tuvaluan Dollar'], |
| 115 |
'XPF' => ['symbol' => '₣', 'name' => 'CFP Franc'], |
| 116 |
'NOK' => ['symbol' => 'kr', 'name' => 'Norwegian Krone'], |
| 117 |
'SEK' => ['symbol' => 'kr', 'name' => 'Swedish Krona'], |
| 118 |
'DKK' => ['symbol' => 'kr', 'name' => 'Danish Krone'], |
| 119 |
'ISK' => ['symbol' => 'kr', 'name' => 'Icelandic Króna'], |
| 120 |
'CZK' => ['symbol' => 'Kč', 'name' => 'Czech Koruna'], |
| 121 |
'HUF' => ['symbol' => 'Ft', 'name' => 'Hungarian Forint'], |
| 122 |
'RON' => ['symbol' => 'lei', 'name' => 'Romanian Leu'], |
| 123 |
'BGN' => ['symbol' => 'лв', 'name' => 'Bulgarian Lev'], |
| 124 |
'HRK' => ['symbol' => 'kn', 'name' => 'Croatian Kuna'], |
| 125 |
'RSD' => ['symbol' => 'дин', 'name' => 'Serbian Dinar'], |
| 126 |
'ALL' => ['symbol' => 'L', 'name' => 'Albanian Lek'], |
| 127 |
'MKD' => ['symbol' => 'ден', 'name' => 'Macedonian Denar'], |
| 128 |
'MDL' => ['symbol' => 'L', 'name' => 'Moldovan Leu'], |
| 129 |
'UAH' => ['symbol' => '₴', 'name' => 'Ukrainian Hryvnia'], |
| 130 |
'BYN' => ['symbol' => 'Br', 'name' => 'Belarusian Ruble'], |
| 131 |
'GEL' => ['symbol' => '₾', 'name' => 'Georgian Lari'], |
| 132 |
'AMD' => ['symbol' => '֏', 'name' => 'Armenian Dram'], |
| 133 |
'AZN' => ['symbol' => '₼', 'name' => 'Azerbaijani Manat'], |
| 134 |
'KZT' => ['symbol' => '₸', 'name' => 'Kazakhstani Tenge'], |
| 135 |
'KGS' => ['symbol' => 'с', 'name' => 'Kyrgyzstani Som'], |
| 136 |
'TJS' => ['symbol' => '� |
| 137 |
М', 'name' => 'Tajikistani Somoni'], |
| 138 |
'TMT' => ['symbol' => 'T', 'name' => 'Turkmenistani Manat'], |
| 139 |
'UZS' => ['symbol' => 'so\'m', 'name' => 'Uzbekistani Som'], |
| 140 |
'MNT' => ['symbol' => '₮', 'name' => 'Mongolian Tögrög'], |
| 141 |
'LAK' => ['symbol' => '₭', 'name' => 'Lao Kip'], |
| 142 |
'KHR' => ['symbol' => '៛', 'name' => 'Cambodian Riel'], |
| 143 |
'MMK' => ['symbol' => 'K', 'name' => 'Myanmar Kyat'], |
| 144 |
'VND' => ['symbol' => '₫', 'name' => 'Vietnamese Đồng'], |
| 145 |
'BTN' => ['symbol' => 'Nu.', 'name' => 'Bhutanese Ngultrum'], |
| 146 |
'MOP' => ['symbol' => 'MOP$', 'name' => 'Macanese Pataca'], |
| 147 |
'TWD' => ['symbol' => 'NT$', 'name' => 'New Taiwan Dollar'], |
| 148 |
'HKD' => ['symbol' => 'HK$', 'name' => 'Hong Kong Dollar'], |
| 149 |
'KRW' => ['symbol' => '₩', 'name' => 'South Korean Won'], |
| 150 |
'JPY' => ['symbol' => '¥', 'name' => 'Japanese Yen'], |
| 151 |
'CNY' => ['symbol' => '¥', 'name' => 'Chinese Yuan'], |
| 152 |
'MOP' => ['symbol' => 'MOP$', 'name' => 'Macanese Pataca'], |
| 153 |
'TWD' => ['symbol' => 'NT$', 'name' => 'New Taiwan Dollar'], |
| 154 |
'HKD' => ['symbol' => 'HK$', 'name' => 'Hong Kong Dollar'], |
| 155 |
'KRW' => ['symbol' => '₩', 'name' => 'South Korean Won'], |
| 156 |
'JPY' => ['symbol' => '¥', 'name' => 'Japanese Yen'], |
| 157 |
'CNY' => ['symbol' => '¥', 'name' => 'Chinese Yuan'], |
| 158 |
]; |
| 159 |
} |
| 160 |
|
| 161 |
/** |
| 162 |
* Get currency options for select dropdown |
| 163 |
* |
| 164 |
* @return array Array of currency options formatted for select dropdown |
| 165 |
*/ |
| 166 |
public static function getCurrencyOptions(): array { |
| 167 |
$currencies = self::getCurrencies(); |
| 168 |
$options = []; |
| 169 |
|
| 170 |
foreach ($currencies as $code => $currency) { |
| 171 |
$options[$code] = sprintf('%s (%s) - %s', $code, $currency['symbol'], $currency['name']); |
| 172 |
} |
| 173 |
|
| 174 |
return $options; |
| 175 |
} |
| 176 |
|
| 177 |
/** |
| 178 |
* Get currency symbol by code |
| 179 |
* |
| 180 |
* @param string $code Currency code |
| 181 |
* @return string Currency symbol |
| 182 |
*/ |
| 183 |
public static function getCurrencySymbol(string $code): string { |
| 184 |
$currencies = self::getCurrencies(); |
| 185 |
return $currencies[$code]['symbol'] ?? '$'; |
| 186 |
} |
| 187 |
|
| 188 |
/** |
| 189 |
* Get currency name by code |
| 190 |
* |
| 191 |
* @param string $code Currency code |
| 192 |
* @return string Currency name |
| 193 |
*/ |
| 194 |
public static function getCurrencyName(string $code): string { |
| 195 |
$currencies = self::getCurrencies(); |
| 196 |
return $currencies[$code]['name'] ?? 'Unknown Currency'; |
| 197 |
} |
| 198 |
|
| 199 |
/** |
| 200 |
* Check if currency code is valid |
| 201 |
* |
| 202 |
* @param string $code Currency code |
| 203 |
* @return bool True if valid, false otherwise |
| 204 |
*/ |
| 205 |
public static function isValidCurrency(string $code): bool { |
| 206 |
$currencies = self::getCurrencies(); |
| 207 |
return isset($currencies[$code]); |
| 208 |
} |
| 209 |
} |