energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file CurrencyConverter.class.php

Documentation is available at CurrencyConverter.class.php

  1. <?php
  2. /**
  3.  * Содержит класс CurrencyConverter
  4.  *
  5.  * @package energine
  6.  * @subpackage shop
  7.  * @author dr.Pavka
  8.  * @copyright ColoCall 2006
  9.  * @version $Id$
  10.  */
  11.  
  12. //require_once('core/framework/DBWorker.class.php');
  13.  
  14. /**
  15.  * Конвертер валют
  16.  *
  17.  * @package energine
  18.  * @subpackage shop
  19.  * @author dr.Pavka
  20.  */
  21. class CurrencyConverter extends DBWorker {
  22.     /**
  23.      * Инстанс класса
  24.      *
  25.      * @var CurrencyConverter 
  26.      * @access private
  27.      * @static
  28.      */
  29.     static private $instance;
  30.  
  31.     /**
  32.      * Имя таблицы
  33.      *
  34.      * @var string 
  35.      * @access private
  36.      */
  37.     private $tableName;
  38.  
  39.     /**
  40.      * Имя таблицы переводов
  41.      *
  42.      * @var string 
  43.      * @access private
  44.      */
  45.     private $transTableName;
  46.  
  47.     /**
  48.      * Кэш валют
  49.      *
  50.      * @var array 
  51.      * @access private
  52.      */
  53.     private $currencies;
  54.  
  55.     /**
  56.      * Конструктор класса
  57.      *
  58.      * @return void 
  59.      */
  60.     public function __construct({
  61.         parent::__construct();
  62.         $this->tableName = 'shop_currency';
  63.         $this->transTableName = 'shop_currency_translation';
  64.         $this->currencies = $this->dbh->selectRequest(
  65.         'SELECT * FROM '.$this->tableName.' main '.
  66.         'LEFT JOIN '.$this->transTableName.' trans ON trans.curr_id = main.curr_id '.
  67.         'WHERE trans.lang_id = %s',
  68.         Language::getInstance()->getCurrent()
  69.         );
  70.         if(!is_array($this->currencies)){
  71.             throw new SystemException('ERR_NO_CURRENCIES'SystemException::ERR_DEVELOPER);
  72.         }
  73.         $this->currencies = convertDBResult($this->currencies'curr_id'true);
  74.         $this->currencies = array_map(create_function('$currInfo''return convertFieldNames($currInfo, "curr");'),$this->currencies);
  75.         
  76.         if (isset($_POST['current_currency'])) {
  77.             $this->setCurrent($_POST['current_currency']);
  78.         }
  79.     }
  80.  
  81.     /**
  82.      * Возвращает Instance объекта
  83.      *
  84.      * @access public
  85.      * @return CurrencyConverter 
  86.      * @static
  87.      */
  88.     public static function getInstance({
  89.         if (!isset(self::$instance)) {
  90.             self::$instance new CurrencyConverter();
  91.         }
  92.         return self::$instance;
  93.     }
  94.  
  95.     /**
  96.      * Возвращает идентификатор валюты по умолчанию
  97.      *
  98.      * @return int 
  99.      * @access public
  100.      */
  101.  
  102.     public function getDefault({
  103.         foreach ($this->currencies as $currID => $currencyInfo{
  104.             if ($currencyInfo['Rate'== 1{
  105.                 return $currID;
  106.             }
  107.         }
  108.     }
  109.     
  110.     public function getMain(){
  111.         foreach ($this->currencies as $currID => $currencyInfo{
  112.             if ($currencyInfo['IsMain'== 1{
  113.                 return $currID;
  114.             }
  115.         }
  116.     }
  117.  
  118.     /**
  119.      * Возвращает курс для переданного идентификатора валюты
  120.      *
  121.      * @return int 
  122.      * @access public
  123.      */
  124.  
  125.     public function getRate($currID{
  126.         return $this->currencies[$currID]['Rate'];
  127.     }
  128.  
  129.     /**
  130.      * Конвертирует из одной валюты в другую
  131.      *
  132.      * @param currencyValue float
  133.      * @param currencyID int идентификатор валюты в которую нужно произвести конвертацию
  134.      * @param currIDFrom int идентифкатор валюты которую нужно конвертировать
  135.      * @return float 
  136.      * @access public
  137.      */
  138.  
  139.     public function convert($value$currID$currIDFrom false{
  140.         if (!$currIDFrom{
  141.             $currIDFrom $this->getDefault();
  142.         }
  143.  
  144.         if (!isset($this->currencies[$currID]|| !isset($this->currencies[$currIDFrom])) {
  145.             throw new SystemException('ERR_DEV_BAD_CURR_ID'SystemException::ERR_CRITICAL);
  146.         }
  147.         if ($currID != $currIDFrom{
  148.             $rate $this->currencies[$currIDFrom]['Rate']/$this->currencies[$currID]['Rate'];
  149.             $result $value/$rate;
  150.         }
  151.         else {
  152.             $result $value;
  153.         }
  154.  
  155.  
  156.         return round($result2);
  157.     }
  158.  
  159.     /**
  160.      * Форматирует переданное в параметре значение в формат валюты
  161.      *
  162.      * @param float 
  163.      * @param int currID
  164.      * @return string 
  165.      * @access public
  166.      */
  167.  
  168.     public function format($value$currID{
  169.         return sprintf($this->currencies[$currID]['Format']round($value2));
  170.     }
  171.  
  172.     /**
  173.      * Возвращает идентификатор валюты по переданной аббревиатуре
  174.      *
  175.      * @param string 
  176.      * @return int 
  177.      * @access public
  178.      */
  179.  
  180.     public function getIDByAbbr($abbr{
  181.         foreach ($this->currencies as $id => $info{
  182.             if ($info['Abbr'== $abbr{
  183.                 return $id;
  184.             }
  185.         }
  186.         return $this->getDefault();
  187.     }
  188.  
  189.     /**
  190.      * Устанавливает идентификатор текущей валюты
  191.      *
  192.      * @return void 
  193.      * @access public
  194.      */
  195.  
  196.     public function setCurrent($currencyID{
  197.         if (!isset($this->currencies[$currencyID])) {
  198.             throw new SystemException('ERR_NO_CURRENCY'SystemException::ERR_CRITICAL$currencyID);
  199.         }
  200.         $_SESSION['current_currency'$currencyID;
  201.     }
  202.  
  203.     /**
  204.      * Возвращает идентификатор текущей используемой валюты
  205.      *
  206.      * @return int 
  207.      * @access public
  208.      */
  209.  
  210.     public function getCurrent({
  211.         if (isset($_SESSION['current_currency'])) {
  212.             $result $_SESSION['current_currency'];
  213.         }
  214.         else {
  215.             $result $this->getDefault();
  216.             $this->setCurrent($result);
  217.         }
  218.  
  219.         return $result;
  220.     }
  221.  
  222.     /**
  223.      * Возвращает список идентификаторов валют
  224.      *
  225.      * @return array 
  226.      * @access public
  227.      */
  228.  
  229.     public function getCurrencies({
  230.         return $this->currencies;
  231.     }
  232. }
В создании документации нам помог: phpDocumentor