/app/code/core/Mage/CurrencySymbol/Model/System/Currencysymbol.php
PHP | 282 lines | 147 code | 30 blank | 105 comment | 22 complexity | f43af0d9441283cb3583dfb25c9c72c2 MD5 | raw file
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magento.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magento.com for more information.
- *
- * @category Mage
- * @package Mage_CurrencySymbol
- * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Custom currency symbol model
- *
- * @category Mage
- * @package Mage_CurrencySymbol
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_CurrencySymbol_Model_System_Currencysymbol
- {
- /**
- * Custom currency symbol properties
- *
- * @var array
- */
- protected $_symbolsData = array();
- /**
- * Store id
- *
- * @var string | null
- */
- protected $_storeId;
- /**
- * Website id
- *
- * @var string | null
- */
- protected $_websiteId;
- /**
- * Cache types which should be invalidated
- *
- * @var array
- */
- protected $_cacheTypes = array(
- 'config',
- 'block_html',
- 'layout'
- );
- /**
- * Config path to custom currency symbol value
- */
- const XML_PATH_CUSTOM_CURRENCY_SYMBOL = 'currency/options/customsymbol';
- const XML_PATH_ALLOWED_CURRENCIES = 'currency/options/allow';
- /*
- * Separator used in config in allowed currencies list
- */
- const ALLOWED_CURRENCIES_CONFIG_SEPARATOR = ',';
- /**
- * Config currency section
- */
- const CONFIG_SECTION = 'currency';
- /**
- * Sets store Id
- *
- * @param $storeId
- * @return Mage_CurrencySymbol_Model_System_Currencysymbol
- */
- public function setStoreId($storeId=null)
- {
- $this->_storeId = $storeId;
- $this->_symbolsData = array();
- return $this;
- }
- /**
- * Sets website Id
- *
- * @param $websiteId
- * @return Mage_CurrencySymbol_Model_System_Currencysymbol
- */
- public function setWebsiteId($websiteId=null)
- {
- $this->_websiteId = $websiteId;
- $this->_symbolsData = array();
- return $this;
- }
- /**
- * Returns currency symbol properties array based on config values
- *
- * @return array
- */
- public function getCurrencySymbolsData()
- {
- if ($this->_symbolsData) {
- return $this->_symbolsData;
- }
- $this->_symbolsData = array();
- $allowedCurrencies = explode(
- self::ALLOWED_CURRENCIES_CONFIG_SEPARATOR,
- Mage::getStoreConfig(self::XML_PATH_ALLOWED_CURRENCIES, null)
- );
- /* @var $storeModel Mage_Adminhtml_Model_System_Store */
- $storeModel = Mage::getSingleton('adminhtml/system_store');
- foreach ($storeModel->getWebsiteCollection() as $website) {
- $websiteShow = false;
- foreach ($storeModel->getGroupCollection() as $group) {
- if ($group->getWebsiteId() != $website->getId()) {
- continue;
- }
- foreach ($storeModel->getStoreCollection() as $store) {
- if ($store->getGroupId() != $group->getId()) {
- continue;
- }
- if (!$websiteShow) {
- $websiteShow = true;
- $websiteSymbols = $website->getConfig(self::XML_PATH_ALLOWED_CURRENCIES);
- $allowedCurrencies = array_merge($allowedCurrencies, explode(
- self::ALLOWED_CURRENCIES_CONFIG_SEPARATOR,
- $websiteSymbols
- ));
- }
- $storeSymbols = Mage::getStoreConfig(self::XML_PATH_ALLOWED_CURRENCIES, $store);
- $allowedCurrencies = array_merge($allowedCurrencies, explode(
- self::ALLOWED_CURRENCIES_CONFIG_SEPARATOR,
- $storeSymbols
- ));
- }
- }
- }
- ksort($allowedCurrencies);
- $currentSymbols = $this->_unserializeStoreConfig(self::XML_PATH_CUSTOM_CURRENCY_SYMBOL);
- /** @var $locale Mage_Core_Model_Locale */
- $locale = Mage::app()->getLocale();
- foreach ($allowedCurrencies as $code) {
- if (!$symbol = $locale->getTranslation($code, 'currencysymbol')) {
- $symbol = $code;
- }
- $name = $locale->getTranslation($code, 'nametocurrency');
- if (!$name) {
- $name = $code;
- }
- $this->_symbolsData[$code] = array(
- 'parentSymbol' => $symbol,
- 'displayName' => $name
- );
- if (isset($currentSymbols[$code]) && !empty($currentSymbols[$code])) {
- $this->_symbolsData[$code]['displaySymbol'] = $currentSymbols[$code];
- } else {
- $this->_symbolsData[$code]['displaySymbol'] = $this->_symbolsData[$code]['parentSymbol'];
- }
- if ($this->_symbolsData[$code]['parentSymbol'] == $this->_symbolsData[$code]['displaySymbol']) {
- $this->_symbolsData[$code]['inherited'] = true;
- } else {
- $this->_symbolsData[$code]['inherited'] = false;
- }
- }
- return $this->_symbolsData;
- }
- /**
- * Saves currency symbol to config
- *
- * @param $symbols array
- * @return Mage_CurrencySymbol_Model_System_Currencysymbol
- */
- public function setCurrencySymbolsData($symbols=array())
- {
- foreach ($this->getCurrencySymbolsData() as $code => $values) {
- if (isset($symbols[$code])) {
- if ($symbols[$code] == $values['parentSymbol'] || empty($symbols[$code]))
- unset($symbols[$code]);
- }
- }
- if ($symbols) {
- $value['options']['fields']['customsymbol']['value'] = serialize($symbols);
- } else {
- $value['options']['fields']['customsymbol']['inherit'] = 1;
- }
- Mage::getModel('adminhtml/config_data')
- ->setSection(self::CONFIG_SECTION)
- ->setWebsite(null)
- ->setStore(null)
- ->setGroups($value)
- ->save();
- Mage::dispatchEvent('admin_system_config_changed_section_currency_before_reinit',
- array('website' => $this->_websiteId, 'store' => $this->_storeId)
- );
- // reinit configuration
- Mage::getConfig()->reinit();
- Mage::app()->reinitStores();
- $this->clearCache();
- Mage::dispatchEvent('admin_system_config_changed_section_currency',
- array('website' => $this->_websiteId, 'store' => $this->_storeId)
- );
- return $this;
- }
- /**
- * Returns custom currency symbol by currency code
- *
- * @param $code
- * @return bool|string
- */
- public function getCurrencySymbol($code)
- {
- $customSymbols = $this->_unserializeStoreConfig(self::XML_PATH_CUSTOM_CURRENCY_SYMBOL);
- if (array_key_exists($code, $customSymbols)) {
- return $customSymbols[$code];
- }
- return false;
- }
- /**
- * Clear translate cache
- *
- * @return Saas_Translate_Helper_Data
- */
- public function clearCache()
- {
- // clear cache for frontend
- foreach ($this->_cacheTypes as $cacheType) {
- Mage::app()->getCacheInstance()->invalidateType($cacheType);
- }
- return $this;
- }
- /**
- * Unserialize data from Store Config.
- *
- * @param string $configPath
- * @param int $storeId
- * @return array
- */
- protected function _unserializeStoreConfig($configPath, $storeId = null)
- {
- $result = array();
- $configData = (string)Mage::getStoreConfig($configPath, $storeId);
- if ($configData) {
- $result = unserialize($configData);
- }
- return is_array($result) ? $result : array();
- }
- }