diff --git a/src/Framework/MoneyFormatter.php b/src/Framework/MoneyFormatter.php index b0271aa..7e8c7d5 100644 --- a/src/Framework/MoneyFormatter.php +++ b/src/Framework/MoneyFormatter.php @@ -11,6 +11,7 @@ declare(strict_types=1); namespace IOcornerstone\Framework; use NumberFormatter; +use IOcornerstone\Framework\MoneyHelper; /** * Description of MoneyFormatter @@ -21,61 +22,7 @@ use NumberFormatter; */ class MoneyFormatter { - private const CURRENCIES = [ - 'USD' => ['symbol' => '$', 'locale' => 'en_US', 'name' => 'US Dollar'], - 'CAD' => ['symbol' => '$', 'locale' => 'en_CA', 'name' => 'Canadian Dollar'], - 'EUR' => ['symbol' => '€', 'locale' => 'de_DE', 'name' => 'Euro'], - 'GBP' => ['symbol' => '£', 'locale' => 'en_GB', 'name' => 'British Pound'], - 'JPY' => ['symbol' => '¥', 'locale' => 'ja_JP', 'name' => 'Japanese Yen'], - 'CNY' => ['symbol' => '¥', 'locale' => 'zh_CN', 'name' => 'Chinese Yuan'], - 'AUD' => ['symbol' => '$', 'locale' => 'en_AU', 'name' => 'Australian Dollar'], - 'NZD' => ['symbol' => '$', 'locale' => 'en_NZ', 'name' => 'New Zealand Dollar'], - 'CHF' => ['symbol' => 'CHF','locale' => 'de_CH', 'name' => 'Swiss Franc'], - 'SEK' => ['symbol' => 'kr', 'locale' => 'sv_SE', 'name' => 'Swedish Krona'], - 'NOK' => ['symbol' => 'kr', 'locale' => 'nb_NO', 'name' => 'Norwegian Krone'], - 'DKK' => ['symbol' => 'kr', 'locale' => 'da_DK', 'name' => 'Danish Krone'], - 'PLN' => ['symbol' => 'zł', 'locale' => 'pl_PL', 'name' => 'Polish Zloty'], - 'CZK' => ['symbol' => 'Kč', 'locale' => 'cs_CZ', 'name' => 'Czech Koruna'], - 'HUF' => ['symbol' => 'Ft', 'locale' => 'hu_HU', 'name' => 'Hungarian Forint'], - 'RON' => ['symbol' => 'lei','locale' => 'ro_RO', 'name' => 'Romanian Leu'], - 'BGN' => ['symbol' => 'лв', 'locale' => 'bg_BG', 'name' => 'Bulgarian Lev'], - 'TRY' => ['symbol' => '₺', 'locale' => 'tr_TR', 'name' => 'Turkish Lira'], - 'RUB' => ['symbol' => '₽', 'locale' => 'ru_RU', 'name' => 'Russian Ruble'], - 'UAH' => ['symbol' => '₴', 'locale' => 'uk_UA', 'name' => 'Ukrainian Hryvnia'], - 'INR' => ['symbol' => '₹', 'locale' => 'hi_IN', 'name' => 'Indian Rupee'], - 'PKR' => ['symbol' => '₨', 'locale' => 'ur_PK', 'name' => 'Pakistani Rupee'], - 'BDT' => ['symbol' => '৳', 'locale' => 'bn_BD', 'name' => 'Bangladeshi Taka'], - 'LKR' => ['symbol' => 'Rs', 'locale' => 'si_LK', 'name' => 'Sri Lankan Rupee'], - 'NPR' => ['symbol' => '₨', 'locale' => 'ne_NP', 'name' => 'Nepalese Rupee'], - 'THB' => ['symbol' => '฿', 'locale' => 'th_TH', 'name' => 'Thai Baht'], - 'VND' => ['symbol' => '₫', 'locale' => 'vi_VN', 'name' => 'Vietnamese Dong'], - 'MYR' => ['symbol' => 'RM', 'locale' => 'ms_MY', 'name' => 'Malaysian Ringgit'], - 'SGD' => ['symbol' => '$', 'locale' => 'en_SG', 'name' => 'Singapore Dollar'], - 'IDR' => ['symbol' => 'Rp', 'locale' => 'id_ID', 'name' => 'Indonesian Rupiah'], - 'PHP' => ['symbol' => '₱', 'locale' => 'en_PH', 'name' => 'Philippine Peso'], - 'KRW' => ['symbol' => '₩', 'locale' => 'ko_KR', 'name' => 'South Korean Won'], - 'HKD' => ['symbol' => '$', 'locale' => 'zh_HK', 'name' => 'Hong Kong Dollar'], - 'TWD' => ['symbol' => 'NT$','locale' => 'zh_TW', 'name' => 'New Taiwan Dollar'], - 'AED' => ['symbol' => 'د.إ','locale' => 'ar_AE', 'name' => 'UAE Dirham'], - 'SAR' => ['symbol' => '﷼', 'locale' => 'ar_SA', 'name' => 'Saudi Riyal'], - 'QAR' => ['symbol' => '﷼', 'locale' => 'ar_QA', 'name' => 'Qatari Riyal'], - 'KWD' => ['symbol' => 'د.ك','locale' => 'ar_KW', 'name' => 'Kuwaiti Dinar'], - 'BHD' => ['symbol' => '.د.ب','locale' => 'ar_BH', 'name' => 'Bahraini Dinar'], - 'OMR' => ['symbol' => '﷼', 'locale' => 'ar_OM', 'name' => 'Omani Rial'], - 'ILS' => ['symbol' => '₪', 'locale' => 'he_IL', 'name' => 'Israeli New Shekel'], - 'ZAR' => ['symbol' => 'R', 'locale' => 'en_ZA', 'name' => 'South African Rand'], - 'NGN' => ['symbol' => '₦', 'locale' => 'en_NG', 'name' => 'Nigerian Naira'], - 'EGP' => ['symbol' => 'E£', 'locale' => 'ar_EG', 'name' => 'Egyptian Pound'], - 'KES' => ['symbol' => 'KSh','locale' => 'sw_KE', 'name' => 'Kenyan Shilling'], - 'GHS' => ['symbol' => '₵', 'locale' => 'en_GH', 'name' => 'Ghanaian Cedi'], - 'BRL' => ['symbol' => 'R$', 'locale' => 'pt_BR', 'name' => 'Brazilian Real'], - 'ARS' => ['symbol' => '$', 'locale' => 'es_AR', 'name' => 'Argentine Peso'], - 'CLP' => ['symbol' => '$', 'locale' => 'es_CL', 'name' => 'Chilean Peso'], - 'COP' => ['symbol' => '$', 'locale' => 'es_CO', 'name' => 'Colombian Peso'], - 'MXN' => ['symbol' => '$', 'locale' => 'es_MX', 'name' => 'Mexican Peso'], - 'PEN' => ['symbol' => 'S/', 'locale' => 'es_PE', 'name' => 'Peruvian Sol'], - 'UYU' => ['symbol' => '$U', 'locale' => 'es_UY', 'name' => 'Uruguayan Peso'], -]; + /** * SQL for money: @@ -203,21 +150,6 @@ class MoneyFormatter return (int) round($minorUnits * $exchangeRate); } - public static function getCurrencyCodes(string $unit = "USD"): string - { - $ret = ""; - foreach (self::CURRENCIES as $code => $currency) { - $ret .= sprintf( - '', - $code, - ($code === $unit) ? "selected" : "", - htmlspecialchars($currency['name']), - $code - ); - } - return $ret; - } - public static function isInputDecimalMoney($value) { $matches = preg_match('/^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$/', $value); $decimal = found_string($value, '.'); @@ -232,11 +164,6 @@ class MoneyFormatter if ($currencyCode !== "USD" && ! empty($locale) && $locale !== "en_US") { return $locale; } - foreach (self::CURRENCIES as $code => $currency) { - if ($code === $currencyCode) { - return $currency['locale'] ?? null; - } - } - return null; + return MoneyHelper::getLocaleFromCode($currencyCode); } } diff --git a/src/Framework/MoneyHelper.php b/src/Framework/MoneyHelper.php new file mode 100644 index 0000000..b173442 --- /dev/null +++ b/src/Framework/MoneyHelper.php @@ -0,0 +1,104 @@ + ['symbol' => '$', 'locale' => 'en_US', 'name' => 'US Dollar'], + 'CAD' => ['symbol' => '$', 'locale' => 'en_CA', 'name' => 'Canadian Dollar'], + 'EUR' => ['symbol' => '€', 'locale' => 'de_DE', 'name' => 'Euro'], + 'GBP' => ['symbol' => '£', 'locale' => 'en_GB', 'name' => 'British Pound'], + 'JPY' => ['symbol' => '¥', 'locale' => 'ja_JP', 'name' => 'Japanese Yen'], + 'CNY' => ['symbol' => '¥', 'locale' => 'zh_CN', 'name' => 'Chinese Yuan'], + 'AUD' => ['symbol' => '$', 'locale' => 'en_AU', 'name' => 'Australian Dollar'], + 'NZD' => ['symbol' => '$', 'locale' => 'en_NZ', 'name' => 'New Zealand Dollar'], + 'CHF' => ['symbol' => 'CHF', 'locale' => 'de_CH', 'name' => 'Swiss Franc'], + 'SEK' => ['symbol' => 'kr', 'locale' => 'sv_SE', 'name' => 'Swedish Krona'], + 'NOK' => ['symbol' => 'kr', 'locale' => 'nb_NO', 'name' => 'Norwegian Krone'], + 'DKK' => ['symbol' => 'kr', 'locale' => 'da_DK', 'name' => 'Danish Krone'], + 'PLN' => ['symbol' => 'zł', 'locale' => 'pl_PL', 'name' => 'Polish Zloty'], + 'CZK' => ['symbol' => 'Kč', 'locale' => 'cs_CZ', 'name' => 'Czech Koruna'], + 'HUF' => ['symbol' => 'Ft', 'locale' => 'hu_HU', 'name' => 'Hungarian Forint'], + 'RON' => ['symbol' => 'lei', 'locale' => 'ro_RO', 'name' => 'Romanian Leu'], + 'BGN' => ['symbol' => 'лв', 'locale' => 'bg_BG', 'name' => 'Bulgarian Lev'], + 'TRY' => ['symbol' => '₺', 'locale' => 'tr_TR', 'name' => 'Turkish Lira'], + 'RUB' => ['symbol' => '₽', 'locale' => 'ru_RU', 'name' => 'Russian Ruble'], + 'UAH' => ['symbol' => '₴', 'locale' => 'uk_UA', 'name' => 'Ukrainian Hryvnia'], + 'INR' => ['symbol' => '₹', 'locale' => 'hi_IN', 'name' => 'Indian Rupee'], + 'PKR' => ['symbol' => '₨', 'locale' => 'ur_PK', 'name' => 'Pakistani Rupee'], + 'BDT' => ['symbol' => '৳', 'locale' => 'bn_BD', 'name' => 'Bangladeshi Taka'], + 'LKR' => ['symbol' => 'Rs', 'locale' => 'si_LK', 'name' => 'Sri Lankan Rupee'], + 'NPR' => ['symbol' => '₨', 'locale' => 'ne_NP', 'name' => 'Nepalese Rupee'], + 'THB' => ['symbol' => '฿', 'locale' => 'th_TH', 'name' => 'Thai Baht'], + 'VND' => ['symbol' => '₫', 'locale' => 'vi_VN', 'name' => 'Vietnamese Dong'], + 'MYR' => ['symbol' => 'RM', 'locale' => 'ms_MY', 'name' => 'Malaysian Ringgit'], + 'SGD' => ['symbol' => '$', 'locale' => 'en_SG', 'name' => 'Singapore Dollar'], + 'IDR' => ['symbol' => 'Rp', 'locale' => 'id_ID', 'name' => 'Indonesian Rupiah'], + 'PHP' => ['symbol' => '₱', 'locale' => 'en_PH', 'name' => 'Philippine Peso'], + 'KRW' => ['symbol' => '₩', 'locale' => 'ko_KR', 'name' => 'South Korean Won'], + 'HKD' => ['symbol' => '$', 'locale' => 'zh_HK', 'name' => 'Hong Kong Dollar'], + 'TWD' => ['symbol' => 'NT$', 'locale' => 'zh_TW', 'name' => 'New Taiwan Dollar'], + 'AED' => ['symbol' => 'د.إ', 'locale' => 'ar_AE', 'name' => 'UAE Dirham'], + 'SAR' => ['symbol' => '﷼', 'locale' => 'ar_SA', 'name' => 'Saudi Riyal'], + 'QAR' => ['symbol' => '﷼', 'locale' => 'ar_QA', 'name' => 'Qatari Riyal'], + 'KWD' => ['symbol' => 'د.ك', 'locale' => 'ar_KW', 'name' => 'Kuwaiti Dinar'], + 'BHD' => ['symbol' => '.د.ب', 'locale' => 'ar_BH', 'name' => 'Bahraini Dinar'], + 'OMR' => ['symbol' => '﷼', 'locale' => 'ar_OM', 'name' => 'Omani Rial'], + 'ILS' => ['symbol' => '₪', 'locale' => 'he_IL', 'name' => 'Israeli New Shekel'], + 'ZAR' => ['symbol' => 'R', 'locale' => 'en_ZA', 'name' => 'South African Rand'], + 'NGN' => ['symbol' => '₦', 'locale' => 'en_NG', 'name' => 'Nigerian Naira'], + 'EGP' => ['symbol' => 'E£', 'locale' => 'ar_EG', 'name' => 'Egyptian Pound'], + 'KES' => ['symbol' => 'KSh', 'locale' => 'sw_KE', 'name' => 'Kenyan Shilling'], + 'GHS' => ['symbol' => '₵', 'locale' => 'en_GH', 'name' => 'Ghanaian Cedi'], + 'BRL' => ['symbol' => 'R$', 'locale' => 'pt_BR', 'name' => 'Brazilian Real'], + 'ARS' => ['symbol' => '$', 'locale' => 'es_AR', 'name' => 'Argentine Peso'], + 'CLP' => ['symbol' => '$', 'locale' => 'es_CL', 'name' => 'Chilean Peso'], + 'COP' => ['symbol' => '$', 'locale' => 'es_CO', 'name' => 'Colombian Peso'], + 'MXN' => ['symbol' => '$', 'locale' => 'es_MX', 'name' => 'Mexican Peso'], + 'PEN' => ['symbol' => 'S/', 'locale' => 'es_PE', 'name' => 'Peruvian Sol'], + 'UYU' => ['symbol' => '$U', 'locale' => 'es_UY', 'name' => 'Uruguayan Peso'], + ]; + + public static function getCurrencyCodes(string $unit = "USD"): string + { + $ret = ""; + foreach (self::CURRENCIES as $code => $currency) { + $ret .= sprintf( + '', + $code, + ($code === $unit) ? "selected" : "", + htmlspecialchars($currency['name']), + $code + ); + } + return $ret; + } + + public static function getLocaleFromCode(string $currencyCode = "USD"): ?string + { + foreach (self::CURRENCIES as $code => $currency) { + if ($code === $currencyCode) { + return $currency['locale'] ?? null; + } + } + return null; + } + +} diff --git a/src/Framework/ParameterBag.php b/src/Framework/ParameterBag.php index 23226ee..854b845 100644 --- a/src/Framework/ParameterBag.php +++ b/src/Framework/ParameterBag.php @@ -16,11 +16,11 @@ namespace IOcornerstone\Framework; class ParameterBag { public function __construct(readonly private array $parameters = []) { } - public function get($key, $default = null) { + public function get($key, $default = null): mixed { return $this->parameters[$key] ?? $default; } - public function has($key) { + public function has($key): bool { return array_key_exists($key, $this->parameters); } }