%PDF- %PDF-
| Direktori : /var/www/pjc/vendor/cknow/laravel-money/src/ |
| Current File : /var/www/pjc/vendor/cknow/laravel-money/src/CurrenciesTrait.php |
<?php
namespace Cknow\Money;
use InvalidArgumentException;
use Money\Currencies;
use Money\Currencies\AggregateCurrencies;
use Money\Currencies\BitcoinCurrencies;
use Money\Currencies\CurrencyList;
use Money\Currencies\ISOCurrencies;
use Money\Currency;
trait CurrenciesTrait
{
/**
* @var string
*/
protected static $currency;
/**
* @var \Money\Currencies
*/
protected static $currencies;
/**
* Parse currency.
*
* @param \Money\Currency|string $currency
* @return \Money\Currency
*/
public static function parseCurrency($currency)
{
if (is_string($currency)) {
return new Currency($currency);
}
return $currency;
}
/**
* Validates currency.
*
* @param \Money\Currency|string $currency
* @return bool
*/
public static function isValidCurrency($currency)
{
return static::getCurrencies()->contains(static::parseCurrency($currency));
}
/**
* Get default currency.
*
* @return string
*/
public static function getDefaultCurrency()
{
if (! isset(static::$currency)) {
static::setDefaultCurrency(config('money.defaultCurrency', config('money.currency', 'USD')));
}
return static::$currency;
}
/**
* Set default currency.
*
* @param string $currency
*/
public static function setDefaultCurrency($currency)
{
static::$currency = $currency;
}
/**
* Get currencies.
*
* @return \Money\Currencies
*/
public static function getCurrencies()
{
if (! isset(static::$currencies)) {
static::setCurrencies(config('money.currencies', []));
}
return static::$currencies;
}
/**
* Set currencies.
*
* @param \Money\Currencies|array|null $currencies
*/
public static function setCurrencies($currencies)
{
static::$currencies = ($currencies instanceof Currencies)
? $currencies
: static::makeCurrencies($currencies);
}
/**
* Make currencies according to array derived from config or anywhere else.
*
* @param array|null $currenciesConfig
* @return \Money\Currencies
*/
private static function makeCurrencies($currenciesConfig)
{
if (! $currenciesConfig || ! is_array($currenciesConfig)) {
// for backward compatibility
return new ISOCurrencies();
}
$currenciesList = [];
if ($currenciesConfig['iso'] ?? false) {
$currenciesList[] = static::makeCurrenciesForSource(
$currenciesConfig['iso'],
new ISOCurrencies(),
'ISO'
);
}
if ($currenciesConfig['bitcoin'] ?? false) {
$currenciesList[] = static::makeCurrenciesForSource(
$currenciesConfig['bitcoin'],
new BitcoinCurrencies(),
'Bitcoin'
);
}
if ($currenciesConfig['custom'] ?? false) {
$currenciesList[] = new CurrencyList($currenciesConfig['custom']);
}
return new AggregateCurrencies($currenciesList);
}
/**
* Make currencies list according to array for specified source.
*
* @param array|string $config
* @param \Money\Currencies $currencies
* @param string $sourceName
* @return \Money\Currencies
*
* @throws \InvalidArgumentException
*/
private static function makeCurrenciesForSource($config, Currencies $currencies, $sourceName)
{
if ($config === 'all') {
return $currencies;
}
if (is_array($config)) {
$lisCurrencies = [];
foreach ($config as $index => $currencyCode) {
$currency = static::parseCurrency($currencyCode);
if (! $currencies->contains($currency)) {
throw new InvalidArgumentException(
sprintf('Unknown %s currency code: %s', $sourceName, $currencyCode)
);
}
$lisCurrencies[$currency->getCode()] = $currencies->subunitFor($currency);
}
return new CurrencyList($lisCurrencies);
}
throw new InvalidArgumentException(
sprintf('%s config must be an array or \'all\'', $sourceName)
);
}
}