%PDF- %PDF-
Direktori : /var/www/pjc/vendor/cknow/laravel-money/src/ |
Current File : /var/www/pjc/vendor/cknow/laravel-money/src/MoneyParserTrait.php |
<?php namespace Cknow\Money; use InvalidArgumentException; use Money\Currencies; use Money\Exception\ParserException; use Money\MoneyParser; use Money\Parser\AggregateMoneyParser; use Money\Parser\BitcoinMoneyParser; use Money\Parser\DecimalMoneyParser; use Money\Parser\IntlLocalizedDecimalParser; use Money\Parser\IntlMoneyParser; use NumberFormatter; trait MoneyParserTrait { /** * Convert the given value into an instance of Money. * * @param mixed $value * @param \Money\Currency|string|null $currency * @param iny $bitCointDigits * @return \Cknow\Money\Money|null * * @throws \InvalidArgumentException */ public static function parse($value, $currency = null, $bitCointDigits = 2) { if ($value instanceof Money) { return $value; } if ($value instanceof \Money\Money) { return static::fromMoney($value); } if (! is_scalar($value)) { throw new InvalidArgumentException(sprintf('Invalid value %s', json_encode($value))); } $currency = static::parseCurrency($currency); if (is_int($value) || (filter_var($value, FILTER_VALIDATE_INT) !== false && ! is_float($value))) { return new Money($value, $currency); } if (is_float($value) || filter_var($value, FILTER_VALIDATE_FLOAT)) { return static::parseByDecimal($value, $currency); } $locale = static::getLocale(); $currencies = static::getCurrencies(); try { return static::parseByAggregate($value, null, [ new IntlMoneyParser(new NumberFormatter($locale, NumberFormatter::CURRENCY), $currencies), new IntlLocalizedDecimalParser(new NumberFormatter($locale, NumberFormatter::DECIMAL), $currencies), new DecimalMoneyParser($currencies), new BitcoinMoneyParser($bitCointDigits), ]); } catch (ParserException $e) { return static::parseByAggregate($value, $currency, [ new IntlMoneyParser(new NumberFormatter($locale, NumberFormatter::CURRENCY), $currencies), new IntlLocalizedDecimalParser(new NumberFormatter($locale, NumberFormatter::DECIMAL), $currencies), new DecimalMoneyParser($currencies), new BitcoinMoneyParser($bitCointDigits), ]); } } /** * Parse by aggregate. * * @param string $money * @param \Money\Currency|string|null $fallbackCurrency * @param MoneyParser[] $parsers * @return \Cknow\Money\Money */ public static function parseByAggregate($money, $fallbackCurrency = null, array $parsers = []) { $parser = new AggregateMoneyParser($parsers); return static::parseByParser($parser, $money, $fallbackCurrency); } /** * Parse by bitcoin. * * @param string $money * @param \Money\Currency|string|null $fallbackCurrency * @param int $fractionDigits * @return \Cknow\Money\Money */ public static function parseByBitcoin($money, $fallbackCurrency = null, $fractionDigits = 2) { $parser = new BitcoinMoneyParser($fractionDigits); return static::parseByParser($parser, $money, $fallbackCurrency); } /** * Parse by decimal. * * @param string $money * @param \Money\Currency|string|null $fallbackCurrency * @param \Money\Currencies|null $currencies * @return \Cknow\Money\Money */ public static function parseByDecimal($money, $fallbackCurrency = null, Currencies $currencies = null) { $parser = new DecimalMoneyParser($currencies ?: static::getCurrencies()); return static::parseByParser($parser, $money, $fallbackCurrency); } /** * Parse by intl. * * @param string $money * @param \Money\Currency|string|null $fallbackCurrency * @param string|null $locale * @param \Money\Currencies|null $currencies * @param int $style * @return \Cknow\Money\Money */ public static function parseByIntl( $money, $fallbackCurrency = null, $locale = null, Currencies $currencies = null, $style = NumberFormatter::CURRENCY ) { $numberFormatter = new NumberFormatter($locale ?: static::getLocale(), $style); $parser = new IntlMoneyParser($numberFormatter, $currencies ?: static::getCurrencies()); return static::parseByParser($parser, $money, $fallbackCurrency); } /** * Parse by intl localized decimal. * * @param string $money * @param \Money\Currency|string|null $fallbackCurrency * @param string|null $locale * @param \Money\Currencies|null $currencies * @param int $style * @return \Cknow\Money\Money */ public static function parseByIntlLocalizedDecimal( $money, $fallbackCurrency = null, $locale = null, Currencies $currencies = null, $style = NumberFormatter::DECIMAL ) { $numberFormatter = new NumberFormatter($locale ?: static::getLocale(), $style); $parser = new IntlLocalizedDecimalParser($numberFormatter, $currencies ?: static::getCurrencies()); return static::parseByParser($parser, $money, $fallbackCurrency); } /** * Parse by parser. * * @param \Money\MoneyParser $parser * @param string $money * @param \Money\Currency|string|null $fallbackCurrency * @return \Cknow\Money\Money */ public static function parseByParser(MoneyParser $parser, $money, $fallbackCurrency = null) { $fallbackCurrency = static::parseCurrency($fallbackCurrency); return static::convert($parser->parse((string) $money, $fallbackCurrency)); } }