diff options
Diffstat (limited to 'vendor/commerceguys/intl/src/Currency')
5 files changed, 451 insertions, 0 deletions
diff --git a/vendor/commerceguys/intl/src/Currency/Currency.php b/vendor/commerceguys/intl/src/Currency/Currency.php new file mode 100644 index 000000000..6f9256bf0 --- /dev/null +++ b/vendor/commerceguys/intl/src/Currency/Currency.php @@ -0,0 +1,168 @@ +<?php + +namespace CommerceGuys\Intl\Currency; + +class Currency implements CurrencyEntityInterface +{ + /** + * The alphanumeric currency code. + * + * @var string + */ + protected $currencyCode; + + /** + * The currency name. + * + * @var string + */ + protected $name; + + /** + * The numeric currency code. + * + * @var string + */ + protected $numericCode; + + /** + * The currency symbol. + * + * @var string + */ + protected $symbol; + + /** + * The number of fraction digits. + * + * @var int + */ + protected $fractionDigits; + + /** + * The currency locale (i.e. "en_US"). + * + * The currency name and symbol are locale specific. + * + * @var string + */ + protected $locale; + + /** + * Returns the string representation of the currency. + * + * @return string + */ + public function __toString() + { + return $this->getCurrencyCode(); + } + + /** + * {@inheritdoc} + */ + public function getCurrencyCode() + { + return $this->currencyCode; + } + + /** + * {@inheritdoc} + */ + public function setCurrencyCode($currencyCode) + { + $this->currencyCode = $currencyCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getNumericCode() + { + return $this->numericCode; + } + + /** + * {@inheritdoc} + */ + public function setNumericCode($numericCode) + { + $this->numericCode = $numericCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getSymbol() + { + return $this->symbol; + } + + /** + * {@inheritdoc} + */ + public function setSymbol($symbol) + { + $this->symbol = $symbol; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getFractionDigits() + { + return $this->fractionDigits; + } + + /** + * {@inheritdoc} + */ + public function setFractionDigits($fractionDigits) + { + $this->fractionDigits = $fractionDigits; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->locale; + } + + /** + * {@inheritdoc} + */ + public function setLocale($locale) + { + $this->locale = $locale; + + return $this; + } +} diff --git a/vendor/commerceguys/intl/src/Currency/CurrencyEntityInterface.php b/vendor/commerceguys/intl/src/Currency/CurrencyEntityInterface.php new file mode 100644 index 000000000..85d4ab83d --- /dev/null +++ b/vendor/commerceguys/intl/src/Currency/CurrencyEntityInterface.php @@ -0,0 +1,51 @@ +<?php + +namespace CommerceGuys\Intl\Currency; + +interface CurrencyEntityInterface extends CurrencyInterface +{ + /** + * Sets the alphabetic currency code. + * + * @param string $currencyCode The alphabetic currency code. + * + * @return self + */ + public function setCurrencyCode($currencyCode); + + /** + * Sets the currency name. + * + * @param string $name The currency name. + * + * @return self + */ + public function setName($name); + + /** + * Sets the numeric currency code. + * + * @param string $numericCode The numeric currency code. + * + * @return self + */ + public function setNumericCode($numericCode); + + /** + * Sets the currency symbol. + * + * @param string $symbol The currency symbol. + * + * @return self + */ + public function setSymbol($symbol); + + /** + * Sets the number of fraction digits. + * + * @param int $fractionDigits The number of fraction digits. + * + * @return self + */ + public function setFractionDigits($fractionDigits); +} diff --git a/vendor/commerceguys/intl/src/Currency/CurrencyInterface.php b/vendor/commerceguys/intl/src/Currency/CurrencyInterface.php new file mode 100644 index 000000000..8aa709ca0 --- /dev/null +++ b/vendor/commerceguys/intl/src/Currency/CurrencyInterface.php @@ -0,0 +1,47 @@ +<?php + +namespace CommerceGuys\Intl\Currency; + +interface CurrencyInterface +{ + /** + * Gets the alphabetic currency code. + * + * @return string + */ + public function getCurrencyCode(); + + /** + * Gets the currency name. + * + * @return string + */ + public function getName(); + + /** + * Gets the numeric currency code. + * + * The numeric code has three digits, and the first one can be a zero, + * hence the need to pass it around as a string. + * + * @return string + */ + public function getNumericCode(); + + /** + * Gets the currency symbol. + * + * @return string + */ + public function getSymbol(); + + /** + * Gets the number of fraction digits. + * + * Used when rounding or formatting an amount for display. + * Actual storage precision can be greater. + * + * @return int + */ + public function getFractionDigits(); +} diff --git a/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php b/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php new file mode 100644 index 000000000..5fdfce216 --- /dev/null +++ b/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php @@ -0,0 +1,144 @@ +<?php + +namespace CommerceGuys\Intl\Currency; + +use CommerceGuys\Intl\LocaleResolverTrait; +use CommerceGuys\Intl\Exception\UnknownCurrencyException; + +/** + * Manages currencies based on JSON definitions. + */ +class CurrencyRepository implements CurrencyRepositoryInterface +{ + use LocaleResolverTrait; + + /** + * Base currency definitions. + * + * Contains data common to all locales, such as the currency numeric + * code, number of fraction digits. + * + * @var array + */ + protected $baseDefinitions = []; + + /** + * Per-locale currency definitions. + * + * @var array + */ + protected $definitions = []; + + /** + * Creates a CurrencyRepository instance. + * + * @param string $definitionPath The path to the currency definitions. + * Defaults to 'resources/currency'. + */ + public function __construct($definitionPath = null) + { + $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/currency/'; + } + + /** + * {@inheritdoc} + */ + public function get($currencyCode, $locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + if (!isset($definitions[$currencyCode])) { + throw new UnknownCurrencyException($currencyCode); + } + + return $this->createCurrencyFromDefinition($currencyCode, $definitions[$currencyCode], $locale); + } + + /** + * {@inheritdoc} + */ + public function getAll($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $currencies = []; + foreach ($definitions as $currencyCode => $definition) { + $currencies[$currencyCode] = $this->createCurrencyFromDefinition($currencyCode, $definition, $locale); + } + + return $currencies; + } + + /** + * {@inheritdoc} + */ + public function getList($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $list = []; + foreach ($definitions as $currencyCode => $definition) { + $list[$currencyCode] = $definition['name']; + } + + return $list; + } + + /** + * Loads the currency definitions for the provided locale. + * + * @param string $locale The desired locale. + * + * @return array + */ + protected function loadDefinitions($locale) + { + if (!isset($this->definitions[$locale])) { + $filename = $this->definitionPath . $locale . '.json'; + $this->definitions[$locale] = json_decode(file_get_contents($filename), true); + + // Make sure the base definitions have been loaded. + if (empty($this->baseDefinitions)) { + $this->baseDefinitions = json_decode(file_get_contents($this->definitionPath . 'base.json'), true); + } + // Merge-in base definitions. + foreach ($this->definitions[$locale] as $currencyCode => $definition) { + $this->definitions[$locale][$currencyCode] += $this->baseDefinitions[$currencyCode]; + } + } + + return $this->definitions[$locale]; + } + + /** + * Creates a currency object from the provided definition. + * + * @param string $currencyCode The currency code. + * @param array $definition The currency definition. + * @param string $locale The locale of the currency definition. + * + * @return Currency + */ + protected function createCurrencyFromDefinition($currencyCode, array $definition, $locale) + { + if (!isset($definition['symbol'])) { + $definition['symbol'] = $currencyCode; + } + if (!isset($definition['fraction_digits'])) { + $definition['fraction_digits'] = 2; + } + + $currency = new Currency(); + $setValues = \Closure::bind(function ($currencyCode, $definition, $locale) { + $this->currencyCode = $currencyCode; + $this->name = $definition['name']; + $this->numericCode = $definition['numeric_code']; + $this->symbol = $definition['symbol']; + $this->fractionDigits = $definition['fraction_digits']; + $this->locale = $locale; + }, $currency, '\CommerceGuys\Intl\Currency\Currency'); + $setValues($currencyCode, $definition, $locale); + + return $currency; + } +} diff --git a/vendor/commerceguys/intl/src/Currency/CurrencyRepositoryInterface.php b/vendor/commerceguys/intl/src/Currency/CurrencyRepositoryInterface.php new file mode 100644 index 000000000..f0a091969 --- /dev/null +++ b/vendor/commerceguys/intl/src/Currency/CurrencyRepositoryInterface.php @@ -0,0 +1,41 @@ +<?php + +namespace CommerceGuys\Intl\Currency; + +/** + * Currency repository interface. + */ +interface CurrencyRepositoryInterface +{ + /** + * Returns a currency instance matching the provided currency code. + * + * @param string $currencyCode The currency code. + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return CurrencyInterface + */ + public function get($currencyCode, $locale = null, $fallbackLocale = null); + + /** + * Returns all currency instances. + * + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return array An array of currencies implementing the CurrencyInterface, + * keyed by currency code. + */ + public function getAll($locale = null, $fallbackLocale = null); + + /** + * Returns a list of currencies. + * + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return array An array of currency names, keyed by currency code. + */ + public function getList($locale = null, $fallbackLocale = null); +} |