123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Currency dropdown block
- */
- namespace Magento\Directory\Block;
- use Magento\Framework\Locale\Bundle\CurrencyBundle as CurrencyBundle;
- /**
- * @api
- * @since 100.0.2
- */
- class Currency extends \Magento\Framework\View\Element\Template
- {
- /**
- * @var \Magento\Directory\Model\CurrencyFactory
- */
- protected $_currencyFactory;
- /**
- * @var \Magento\Framework\Data\Helper\PostHelper
- */
- protected $_postDataHelper;
- /**
- * @var \Magento\Framework\Locale\ResolverInterface
- */
- protected $localeResolver;
- /**
- * @param \Magento\Framework\View\Element\Template\Context $context
- * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
- * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper
- * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
- * @param array $data
- */
- public function __construct(
- \Magento\Framework\View\Element\Template\Context $context,
- \Magento\Directory\Model\CurrencyFactory $currencyFactory,
- \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
- \Magento\Framework\Locale\ResolverInterface $localeResolver,
- array $data = []
- ) {
- $this->_currencyFactory = $currencyFactory;
- $this->_postDataHelper = $postDataHelper;
- parent::__construct($context, $data);
- $this->localeResolver = $localeResolver;
- }
- /**
- * Retrieve count of currencies
- * Return 0 if only one currency
- *
- * @return int
- */
- public function getCurrencyCount()
- {
- return count($this->getCurrencies());
- }
- /**
- * Retrieve currencies array
- * Return array: code => currency name
- * Return empty array if only one currency
- *
- * @return array
- */
- public function getCurrencies()
- {
- $currencies = $this->getData('currencies');
- if ($currencies === null) {
- $currencies = [];
- $codes = $this->_storeManager->getStore()->getAvailableCurrencyCodes(true);
- if (is_array($codes) && count($codes) > 1) {
- $rates = $this->_currencyFactory->create()->getCurrencyRates(
- $this->_storeManager->getStore()->getBaseCurrency(),
- $codes
- );
- foreach ($codes as $code) {
- if (isset($rates[$code])) {
- $allCurrencies = (new CurrencyBundle())->get(
- $this->localeResolver->getLocale()
- )['Currencies'];
- $currencies[$code] = $allCurrencies[$code][1] ?: $code;
- }
- }
- }
- $this->setData('currencies', $currencies);
- }
- return $currencies;
- }
- /**
- * Retrieve Currency Switch URL
- *
- * @return string
- */
- public function getSwitchUrl()
- {
- return $this->getUrl('directory/currency/switch');
- }
- /**
- * Return POST data for currency to switch
- *
- * @param string $code
- * @return string
- */
- public function getSwitchCurrencyPostData($code)
- {
- return $this->_postDataHelper->getPostData($this->escapeUrl($this->getSwitchUrl()), ['currency' => $code]);
- }
- /**
- * Retrieve Current Currency code
- *
- * @return string
- */
- public function getCurrentCurrencyCode()
- {
- if ($this->_getData('current_currency_code') === null) {
- // do not use $this->_storeManager->getStore()->getCurrentCurrencyCode() because of probability
- // to get an invalid (without base rate) currency from code saved in session
- $this->setData('current_currency_code', $this->_storeManager->getStore()->getCurrentCurrency()->getCode());
- }
- return $this->_getData('current_currency_code');
- }
- /**
- * @return string
- */
- public function getStoreCode()
- {
- return $this->_storeManager->getStore()->getCode();
- }
- }
|