<?php
/**
* ÐлаÑÑ Language.
*
* @package energine
* @subpackage core
* @author 1m.dm
* @copyright ColoCall 2006
* @version $Id: Language.class.php,v 1.6 2007/12/17 14:16:03 pavka Exp $
*/
//require_once('core/framework/DBWorker.class.php');
/**
* УпÑавлÑÐµÑ ÑзÑками ÑиÑÑемÑ.
*
* @package energine
* @subpackage core
* @final
*/
final class Language extends DBWorker{
/**
* @access public
* @var int ÑекÑÑий ÑзÑк ÑиÑÑемÑ
*/
private $current = false;
/**
* @access private
* @var array Ð½Ð°Ð±Ð¾Ñ ÑзÑков, опÑеделÑннÑÑ
в ÑиÑÑеме
*/
private $languages;
/**
* @access private
* @static
* @var Language единÑй Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа Language
*/
private static $instance;
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа.
*
* @access public
* @return void
*/
public function __construct() {
parent::__construct();
// полÑÑаем вÑе ÑзÑки, опÑеделÑннÑе в ÑиÑÑеме
$res = $this->dbh->select('share_languages', true, null, array('lang_order_num'=>QAL::ASC));
if (!is_array($res)) {
throw new SystemException('ERR_NO_LANG_INFO', SystemException::ERR_CRITICAL, $this->dbh->getLastRequest());
}
// ÑоÑмиÑÑем Ð½Ð°Ð±Ð¾Ñ ÑзÑков вида array(langID => langInfo)
foreach ($res as $langInfo) {
$this->languages[$langInfo['lang_id']] = $langInfo;
unset($this->languages[$langInfo['lang_id']]['lang_id']);
}
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÐµÐ´Ð¸Ð½Ñй Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа Language.
* См. паÑÑеÑн пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Singleton.
*
* @access public
* @static
* @return Language
*/
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new Language;
}
return self::$instance;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑего ÑзÑка.
*
* @access public
* @return int
*/
public function getCurrent() {
return $this->current;
}
/**
* УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑнго ÑзÑка.
*
* @access public
* @param int $currentLangID
* @return void
*/
public function setCurrent($currentLangID) {
$result = false;
foreach ($this->languages as $langID => $langInfo) {
if ($langID == $currentLangID) {
$result = true;
break;
}
}
if (!$result) {
throw new SystemException('ERR_404', SystemException::ERR_LANG, $currentLangID);
}
$this->current = $currentLangID;
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑзÑка по-ÑмолÑаниÑ.
*
* @access public
* @return int
*/
public function getDefault() {
$result = false;
foreach ($this->languages as $langID => $langInfo) {
if ($langInfo['lang_default'] == 1) {
$result = $langID;
break;
}
}
if ($result == false) {
throw new SystemException('ERR_NO_DEFAULT_LANG', SystemException::ERR_CRITICAL );
}
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑзÑка по аббÑевиаÑÑÑе азÑка.
*
* @access public
* @param string $abbr аббÑевиаÑÑÑа ÑзÑка
* @return int
*/
public function getIDByAbbr($abbr, $useDefaultIfEmpty = false) {
$result = false;
if (empty($abbr) && $useDefaultIfEmpty) {
return $this->getDefault();
}
foreach ($this->languages as $langID => $langInfo) {
if ($langInfo['lang_abbr'] == $abbr) {
$result = $langID;
break;
}
}
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð°Ð±Ð±ÑевиаÑÑÑÑ ÑзÑка по иденÑиÑикаÑоÑÑ ÑзÑка.
*
* @access public
* @param int $id иденÑиÑикаÑÐ¾Ñ ÑзÑка
* @return string
*/
public function getAbbrByID($id) {
$result = false;
foreach ($this->languages as $langID => $langInfo) {
if ($langID == $id) {
$result = $langInfo['lang_abbr'];
break;
}
}
if ($result == false) {
throw new SystemException('ERR_BAD_LANG_ID', SystemException::ERR_LANG, $abbr);
}
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ ÑзÑка по иденÑиÑикаÑоÑÑ ÑзÑка.
*
* @access public
* @param int $id
* @return string
*/
public function getNameByID($id) {
$result = false;
foreach ($this->languages as $langID => $langInfo) {
if ($langID == $id) {
$result = $langInfo['lang_name'];
break;
}
}
if ($result == false) {
throw new SystemException('ERR_BAD_LANG_ID', SystemException::ERR_LANG, $abbr);
}
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð²Ñе ÑзÑки, опÑеделÑннÑе в ÑиÑÑеме.
*
* @access public
* @return array
*/
public function getLanguages() {
return $this->languages;
}
/**
* ÐÑовеÑÑеÑ, ÑÑÑеÑÑвÑÐµÑ Ð»Ð¸ ÑзÑк Ñ ÑказаннÑм иденÑиÑикаÑоÑом.
*
* @access public
* @param int $id
* @return bool
*/
public function isValidLangID($id) {
return in_array($id, array_keys($this->languages));
}
public function isValidLangAbbr($abbr) {
$result = false;
foreach ($this->languages as $langID => $langInfo) {
if ($langInfo['lang_abbr'] == $abbr) {
$result = true;
break;
}
}
return $result;
}
}