_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(); } }