*/ abstract class Mage_Directory_Model_Currency_Import_Abstract { /** * Retrieve currency codes * * @return array */ protected function _getCurrencyCodes() { return Mage::getModel('directory/currency')->getConfigAllowCurrencies(); } /** * Retrieve default currency codes * * @return array */ protected function _getDefaultCurrencyCodes() { return Mage::getModel('directory/currency')->getConfigBaseCurrencies(); } /** * Retrieve rate * * @param string $currencyFrom * @param string $currencyTo * @return float */ abstract protected function _convert($currencyFrom, $currencyTo); /** * Saving currency rates * * @param array $rates * @return Mage_Directory_Model_Currency_Import_Abstract */ protected function _saveRates($rates) { foreach ($rates as $currencyCode => $currencyRates) { Mage::getModel('directory/currency') ->setId($currencyCode) ->setRates($currencyRates) ->save(); } return $this; } /** * Import rates * * @return Mage_Directory_Model_Currency_Import_Abstract */ public function importRates() { $data = $this->fetchRates(); $this->_saveRates($data); return $this; } public function fetchRates() { $data = array(); $currencies = $this->_getCurrencyCodes(); $defaultCurrencies = $this->_getDefaultCurrencyCodes(); @set_time_limit(0); foreach ($defaultCurrencies as $currencyFrom) { if (!isset($data[$currencyFrom])) { $data[$currencyFrom] = array(); } foreach ($currencies as $currencyTo) { if ($currencyFrom == $currencyTo) { $data[$currencyFrom][$currencyTo] = $this->_numberFormat(1); } else { $data[$currencyFrom][$currencyTo] = $this->_numberFormat($this->_convert($currencyFrom, $currencyTo)); } } ksort($data[$currencyFrom]); } return $data; } protected function _numberFormat($number) { return $number; } public function getMessages() { return $this->_messages; } }