X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FMoney.php;h=ce15b9995bfa52a763035371e66cab358b3271e4;hb=701fd7a63eb4b10a6b91a91c0c05dba1bbaf8b69;hp=f8afa6cf5c9cde3b681c7fd8e4b3898a1913c9ad;hpb=8910a001428a2fe164c92b6be859e02289ba0e56;p=civicrm-core.git diff --git a/CRM/Utils/Money.php b/CRM/Utils/Money.php index f8afa6cf5c..ce15b9995b 100644 --- a/CRM/Utils/Money.php +++ b/CRM/Utils/Money.php @@ -35,7 +35,7 @@ * Money utilties */ class CRM_Utils_Money { - static $_currencySymbols = NULL; + public static $_currencySymbols = NULL; /** * Format a monetary string. @@ -86,15 +86,22 @@ class CRM_Utils_Money { } if (!self::$_currencySymbols) { - self::$_currencySymbols = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'currency', array( - 'keyColumn' => 'name', - 'labelColumn' => 'symbol', - )); + self::$_currencySymbols = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'currency', [ + 'keyColumn' => 'name', + 'labelColumn' => 'symbol', + ]); } if (!$currency) { $currency = $config->defaultCurrency; } + + // ensure $currency is a valid currency code + // for backwards-compatibility, also accept one space instead of a currency + if ($currency != ' ' && !array_key_exists($currency, self::$_currencySymbols)) { + throw new CRM_Core_Exception("Invalid currency \"{$currency}\""); + } + $amount = self::formatNumericByFormat($amount, $valueFormat); // If it contains tags, means that HTML was passed and the // amount is already converted properly, @@ -104,11 +111,11 @@ class CRM_Utils_Money { $amount = self::replaceCurrencySeparators($amount); } - $replacements = array( + $replacements = [ '%a' => $amount, '%C' => $currency, '%c' => CRM_Utils_Array::value($currency, self::$_currencySymbols, $currency), - ); + ]; return strtr($format, $replacements); } @@ -243,10 +250,10 @@ class CRM_Utils_Money { */ protected static function replaceCurrencySeparators($amount) { $config = CRM_Core_Config::singleton(); - $rep = array( + $rep = [ ',' => $config->monetaryThousandSeparator, '.' => $config->monetaryDecimalPoint, - ); + ]; return strtr($amount, $rep); }