<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ CurrencyConverter
*
* @package energine
* @subpackage shop
* @author dr.Pavka
* @copyright ColoCall 2006
* @version $Id: CurrencyConverter.class.php,v 1.5 2007/12/17 14:24:29 pavka Exp $
*/
//require_once('core/framework/DBWorker.class.php');
/**
* ÐонвеÑÑÐµÑ Ð²Ð°Ð»ÑÑ
*
* @package energine
* @subpackage shop
*/
class CurrencyConverter extends DBWorker {
/**
* ÐнÑÑÐ°Ð½Ñ ÐºÐ»Ð°ÑÑа
*
* @var CurrencyConverter
* @access private
* @static
*/
static private $instance;
/**
* ÐÐ¼Ñ ÑаблиÑÑ
*
* @var string
* @access private
*/
private $tableName;
/**
* ÐÐ¼Ñ ÑаблиÑÑ Ð¿ÐµÑеводов
*
* @var string
* @access private
*/
private $transTableName;
/**
* ÐÑÑ Ð²Ð°Ð»ÑÑ
*
* @var array
* @access private
*/
private $currencies;
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @return void
*/
public function __construct() {
parent::__construct();
$this->tableName = 'shop_currency';
$this->transTableName = 'shop_currency_translation';
$this->currencies = $this->dbh->selectRequest(
'SELECT * FROM '.$this->tableName.' main '.
'LEFT JOIN '.$this->transTableName.' trans ON trans.curr_id = main.curr_id '.
'WHERE trans.lang_id = %s',
Language::getInstance()->getCurrent()
);
$this->currencies = convertDBResult($this->currencies, 'curr_id', true);
$this->currencies = array_map(create_function('$currInfo', 'return convertFieldNames($currInfo, "curr");'),$this->currencies);
}
/**
* ÐозвÑаÑÐ°ÐµÑ Instance обÑекÑа
*
* @access public
* @return CurrencyConverter
* @static
*/
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new CurrencyConverter();
}
return self::$instance;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð²Ð°Ð»ÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ
*
* @return int
* @access public
*/
public function getDefault() {
foreach ($this->currencies as $currID => $currencyInfo) {
if ($currencyInfo['Rate'] == 1) {
return $currID;
}
}
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÐºÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑеданного иденÑиÑикаÑоÑа валÑÑÑ
*
* @return int
* @access public
*/
public function getRate($currID) {
return $this->currencies[$currID]['Rate'];
}
/**
* ÐонвеÑÑиÑÑÐµÑ Ð¸Ð· одной валÑÑÑ Ð² дÑÑгÑÑ
*
* @param currencyValue float
* @param currencyID int иденÑиÑикаÑÐ¾Ñ Ð²Ð°Ð»ÑÑÑ Ð² коÑоÑÑÑ Ð½Ñжно пÑоизвеÑÑи конвеÑÑаÑиÑ
* @param currIDFrom int иденÑиÑкаÑÐ¾Ñ Ð²Ð°Ð»ÑÑÑ ÐºÐ¾ÑоÑÑÑ Ð½Ñжно конвеÑÑиÑоваÑÑ
* @return float
* @access public
*/
public function convert($value, $currID, $currIDFrom = false) {
if (!$currIDFrom) {
$currIDFrom = $this->getDefault();
}
if (!isset($this->currencies[$currID]) || !isset($this->currencies[$currIDFrom])) {
throw new SystemException('ERR_DEV_BAD_CURR_ID', SystemException::ERR_CRITICAL);
}
if ($currID != $currIDFrom) {
$rate = $this->currencies[$currIDFrom]['Rate']/$this->currencies[$currID]['Rate'];
$result = $value/$rate;
}
else {
$result = $value;
}
return round($result, 2);
}
/**
* ФоÑмаÑиÑÑÐµÑ Ð¿ÐµÑеданное в паÑамеÑÑе знаÑение в ÑоÑÐ¼Ð°Ñ Ð²Ð°Ð»ÑÑÑ
*
* @param float
* @param int currID
* @return string
* @access public
*/
public function format($value, $currID) {
return sprintf($this->currencies[$currID]['Format'], round($value, 2));
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð²Ð°Ð»ÑÑÑ Ð¿Ð¾ пеÑеданной аббÑевиаÑÑÑе
*
* @param string
* @return int
* @access public
*/
public function getIDByAbbr($abbr) {
foreach ($this->currencies as $id => $info) {
if ($info['Abbr'] == $abbr) {
return $id;
}
}
return $this->getDefault();
}
/**
* УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑей валÑÑÑ
*
* @return void
* @access public
*/
public function setCurrent($currencyID) {
if (!isset($this->currencies[$currencyID])) {
throw new SystemException('ERR_NO_CURRENCY', SystemException::ERR_CRITICAL, $currencyID);
}
$_SESSION['current_currency'] = $currencyID;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑей иÑполÑзÑемой валÑÑÑ
*
* @return int
* @access public
*/
public function getCurrent() {
if (isset($_SESSION['current_currency'])) {
$result = $_SESSION['current_currency'];
}
else {
$result = $this->getDefault();
$this->setCurrent($result);
}
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÑпиÑок иденÑиÑикаÑоÑов валÑÑ
*
* @return array
* @access public
*/
public function getCurrencies() {
return array_keys($this->currencies);
}
}