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

Source for file LanguageEditor.class.php

Documentation is available at LanguageEditor.class.php

  1. <?php
  2.  
  3. /**
  4.  * Содержит класс TranslationEditor
  5.  *
  6.  * @package energine
  7.  * @subpackage share
  8.  * @author dr.Pavka
  9.  * @copyright Energine 2006
  10.  * @version $Id$
  11.  */
  12.  
  13. //require_once('core/modules/share/components/Grid.class.php');
  14.  
  15. /**
  16.  * Редактор переводов
  17.  *
  18.  * @package energine
  19.  * @subpackage share
  20.  * @author dr.Pavka
  21.  */
  22. class LanguageEditor extends Grid {
  23.     /**
  24.      * Конструктор класса
  25.      *
  26.      * @return void 
  27.      */
  28.     public function __construct($name$moduleDocument $document,  array $params null{
  29.         parent::__construct($name$module$document,  $params);
  30.         $this->setTableName('share_languages');
  31.         $this->setTitle($this->translate('TXT_LANGUAGE_EDITOR'));
  32.         $this->setOrderColumn('lang_order_num');
  33.         $this->setOrder(array('lang_order_num'=>QAL::ASC));
  34.     }
  35.  
  36.     /**
  37.      * Добавляем паттерн и сообщение об ошибке для описания поля lang_abbr. Поле должно содержать две маленькие латинские буквы
  38.      *
  39.      * @return DataDescription 
  40.      * @access protected
  41.      */
  42.  
  43.      protected function createDataDescription({
  44.         $dataDescription parent::createDataDescription();
  45.  
  46.         if ($this->getType(!== self::COMPONENT_TYPE_LIST{
  47.             $langAbbr $dataDescription->getFieldDescriptionByName('lang_abbr');
  48.             $langAbbr->setProperty('pattern''/^[a-z]{2}$/');
  49.             $langAbbr->setProperty('message''MSG_BAD_LANG_ABBR');
  50.         }
  51.  
  52.         return $dataDescription;
  53.      }
  54.  
  55.     /**
  56.      * При создании нового языка не даем возможности сделать его дефолтным
  57.      *
  58.      * @return void 
  59.      * @access protected
  60.      */
  61.  
  62.     protected function add({
  63.         parent::add();
  64.         if($fd $this->getDataDescription()->getFieldDescriptionByName('lang_default')){
  65.             $fd->setMode(FieldDescription::FIELD_MODE_READ);
  66.         }
  67.         $field new Field('lang_default');
  68.         $field->setData(0);
  69.         $this->getData()->addField($field);
  70.     }
  71.  
  72.     /**
  73.      * Переопределенный метод
  74.      * Для формы редактирования, если чекбокс языка по умолчания отмечен делает его неактивным
  75.      *
  76.      * @return void 
  77.      * @access public
  78.      */
  79.  
  80.     public function build({
  81.         if ($this->getType(== self::COMPONENT_TYPE_FORM_ALTER {
  82.             //Если это язык по умолчанию - делаем неактивным
  83.             if ($this->getData()->getFieldByName('lang_default')->getRowData(0=== true{
  84.                 $this->getDataDescription()->getFieldDescriptionByName('lang_default')->setMode(FieldDescription::FIELD_MODE_READ);
  85.             }
  86.         }
  87.  
  88.         return parent::build();
  89.     }
  90.  
  91.     /**
  92.       * Переопределенный метод сохранения
  93.       *
  94.       * @param array 
  95.       * @return void 
  96.       * @access public
  97.       */
  98.  
  99.     public function loadData({
  100.         $result parent::loadData();
  101.         if ($this->getAction(== 'save' && isset($result[0]['lang_default']&& $result[0]['lang_default'!== '0'{
  102.             $this->dbh->modify(QAL::UPDATE$this->getTableName()array('lang_default'=>null));
  103.         }
  104.  
  105.         return $result;
  106.     }
  107.     /**
  108.      * Переопределенный родительский метод
  109.      *
  110.      *
  111.      * @return boolean 
  112.      * @access public
  113.      */
  114.  
  115.     public function deleteData($id{
  116.         //если мы пытаемся удалить текущий язык
  117.         //генерим ошибку
  118.         if ($this->document->getLang(== $id || $id == Language::getInstance()->getDefault()) {
  119.             throw new SystemException('ERR_CANT_DELETE'SystemException::ERR_CRITICAL);
  120.         }
  121.         parent::deleteData($id);
  122.     }
  123.  
  124.     /**
  125.      * При добавлении нового языка создаем задизейбленые разделы
  126.      *
  127.      * @return mixed 
  128.      * @access protected
  129.      */
  130.  
  131.     protected function saveData({
  132.         $langID parent::saveData();
  133.         if ($this->saver->getMode(== QAL::INSERT{
  134.             $this->dbh->modifyRequest('INSERT INTO share_sitemap_translation(smap_id, lang_id, smap_name) SELECT smap_id, %s, concat(\'--\',smap_name, \'--\') as smap_name from share_sitemap_translation WHERE lang_id = (select lang_id from share_languages where lang_default=1)'$langID);
  135.             $this->dbh->modifyRequest('INSERT INTO share_lang_tags_translation(ltag_id, lang_id, ltag_value_rtf) SELECT ltag_id, %s, ltag_name from share_lang_tags'$langID);
  136.  
  137.             /**
  138.              * @todo По хорошему, при добавлении нового языка нужно вносить данные во все _translation таблицы
  139.              */
  140.  
  141.         }
  142.         return $langID;
  143.     }
  144. }
В создании документации нам помог: phpDocumentor