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

Source for file Language.class.php

Documentation is available at Language.class.php

  1. <?php
  2. /**
  3.  * Класс Language.
  4.  *
  5.  * @package energine
  6.  * @subpackage core
  7.  * @author 1m.dm
  8.  * @copyright Energine 2006
  9.  * @version $Id$
  10.  */
  11.  
  12. //require_once('core/framework/DBWorker.class.php');
  13.  
  14. /**
  15.  * Управляет языками системы.
  16.  *
  17.  * @package energine
  18.  * @subpackage core
  19.  * @author 1m.dm
  20.  * @final
  21.  */
  22. final class Language extends DBWorker{
  23.  
  24.     /**
  25.      * @access public
  26.      * @var int текущий язык системы
  27.      */
  28.     private $current = false;
  29.  
  30.     /**
  31.      * @access private
  32.      * @var array набор языков, определённых в системе
  33.      */
  34.     private $languages;
  35.  
  36.     /**
  37.      * @access private
  38.      * @static
  39.      * @var Language единый для всей системы экземпляр класса Language
  40.      */
  41.     private static $instance;
  42.  
  43.     /**
  44.      * Конструктор класса.
  45.      *
  46.      * @access public
  47.      * @return void 
  48.      */
  49.     public function __construct({
  50.         parent::__construct();
  51.  
  52.         // получаем все языки, определённые в системе
  53.         $res $this->dbh->select('share_languages'truenullarray('lang_order_num'=>QAL::ASC));
  54.         if (!is_array($res)) {
  55.             throw new SystemException('ERR_NO_LANG_INFO'SystemException::ERR_CRITICAL$this->dbh->getLastRequest());
  56.         }
  57.         // формируем набор языков вида array(langID => langInfo)
  58.         foreach ($res as $langInfo{
  59.             $this->languages[$langInfo['lang_id']] $langInfo;
  60.             unset($this->languages[$langInfo['lang_id']]['lang_id']);
  61.         }
  62.     }
  63.  
  64.     /**
  65.      * Возвращает единый для всей системы экземпляр класса Language.
  66.      * См. паттерн проектирования Singleton.
  67.      *
  68.      * @access public
  69.      * @static
  70.      * @return Language 
  71.      */
  72.     public static function getInstance({
  73.         if (!isset(self::$instance)) {
  74.             self::$instance new Language;
  75.         }
  76.         return self::$instance;
  77.     }
  78.  
  79.     /**
  80.      * Возвращает идентификатор текущего языка.
  81.      *
  82.      * @access public
  83.      * @return int 
  84.      */
  85.     public function getCurrent({
  86.         return $this->current;
  87.     }
  88.  
  89.     /**
  90.      * Устанавливает идентификатор текущнго языка.
  91.      *
  92.      * @access public
  93.      * @param int $currentLangID 
  94.      * @return void 
  95.      */
  96.     public function setCurrent($currentLangID{
  97.         $result false;
  98.  
  99.         foreach ($this->languages as $langID => $langInfo{
  100.             if ($langID == $currentLangID{
  101.                 $result true;
  102.                 break;
  103.             }
  104.         }
  105.  
  106.         if (!$result{
  107.             throw new SystemException('ERR_404'SystemException::ERR_LANG$currentLangID);
  108.         }
  109.  
  110.         $this->current = $currentLangID;
  111.  
  112.         return $result;
  113.     }
  114.  
  115.     /**
  116.      * Возвращает идентификатор языка по-умолчанию.
  117.      *
  118.      * @access public
  119.      * @return int 
  120.      */
  121.     public function getDefault({
  122.         $result false;
  123.         foreach ($this->languages as $langID => $langInfo{
  124.             if ($langInfo['lang_default'== 1{
  125.                 $result $langID;
  126.                 break;
  127.             }
  128.         }
  129.         if ($result == false{
  130.             throw new SystemException('ERR_NO_DEFAULT_LANG'SystemException::ERR_CRITICAL );
  131.         }
  132.         return $result;
  133.     }
  134.  
  135.     /**
  136.      * Возвращает идентификатор языка по аббревиатуре азыка.
  137.      *
  138.      * @access public
  139.      * @param string $abbr аббревиатура языка
  140.      * @return int 
  141.      */
  142.     public function getIDByAbbr($abbr$useDefaultIfEmpty false{
  143.         $result false;
  144.         if (empty($abbr&& $useDefaultIfEmpty{
  145.             return $this->getDefault();
  146.         }
  147.         foreach ($this->languages as $langID => $langInfo{
  148.             if ($langInfo['lang_abbr'== $abbr{
  149.                 $result $langID;
  150.                 break;
  151.             }
  152.         }
  153.         return $result;
  154.  
  155.     }
  156.  
  157.     /**
  158.      * Возвращает аббревиатуру языка по идентификатору языка.
  159.      *
  160.      * @access public
  161.      * @param int $id идентификатор языка
  162.      * @return string 
  163.      */
  164.     public function getAbbrByID($id{
  165.         $result false;
  166.         foreach ($this->languages as $langID => $langInfo{
  167.             if ($langID == $id{
  168.                 $result $langInfo['lang_abbr'];
  169.                 break;
  170.             }
  171.         }
  172.         if ($result == false{
  173.             throw new SystemException('ERR_BAD_LANG_ID'SystemException::ERR_LANG$abbr);
  174.         }
  175.         return $result;
  176.     }
  177.  
  178.     /**
  179.      * Возвращает название языка по идентификатору языка.
  180.      *
  181.      * @access public
  182.      * @param int $id 
  183.      * @return string 
  184.      */
  185.     public function getNameByID($id{
  186.         $result false;
  187.         foreach ($this->languages as $langID => $langInfo{
  188.             if ($langID == $id{
  189.                 $result $langInfo['lang_name'];
  190.                 break;
  191.             }
  192.         }
  193.         if ($result == false{
  194.             throw new SystemException('ERR_BAD_LANG_ID'SystemException::ERR_LANG$abbr);
  195.         }
  196.         return $result;
  197.     }
  198.  
  199.     /**
  200.      * Возвращает все языки, определённые в системе.
  201.      *
  202.      * @access public
  203.      * @return array 
  204.      */
  205.     public function getLanguages({
  206.         return $this->languages;
  207.     }
  208.  
  209.     /**
  210.      * Проверяет, существует ли язык с указанным идентификатором.
  211.      *
  212.      * @access public
  213.      * @param int $id 
  214.      * @return bool 
  215.      */
  216.     public function isValidLangID($id{
  217.         return in_array($idarray_keys($this->languages));
  218.     }
  219.  
  220.     public function isValidLangAbbr($abbr{
  221.         $result false;
  222.         foreach ($this->languages as $langID => $langInfo{
  223.             if ($langInfo['lang_abbr'== $abbr{
  224.                 $result true;
  225.                 break;
  226.             }
  227.         }
  228.         return $result;
  229.     }
  230. }
В создании документации нам помог: phpDocumentor