Location: PHPKode > projects > Energine > energine-2.2/core2a/modules/share/components/LanguageEditor.class.php
<?php

/**
 * Содержит класс TranslationEditor
 *
 * @package energine
 * @author dr.Pavka
 * @copyright ColoCall 2006
 * @version $Id: LanguageEditor.class.php,v 1.7 2007/12/17 14:16:14 pavka Exp $
 */

//require_once('core/modules/share/components/Grid.class.php');

/**
 * Редактор переводов
 *
 * @package energine
 * @subpackage share
 */
class LanguageEditor extends Grid {
    /**
     * Конструктор класса
     *
     * @return void
     */
    public function __construct($name, $module, Document $document,  array $params = null) {
        parent::__construct($name, $module, $document,  $params);
        $this->setTableName('share_languages');
        $this->setTitle($this->translate('TXT_LANGUAGE_EDITOR'));
        $this->setOrderColumn('lang_order_num');
        $this->setOrder(array('lang_order_num'=>QAL::ASC));
    }

    /**
     * Переопределенный метод
     * Для формы редактирования, если чекбокс языка по умолчания отмечен делает его неактивным
     *
     * @return void
     * @access public
     */

    public function build() {
        if ($this->getType() == self::COMPONENT_TYPE_FORM_ALTER ) {
            //Если это язык по умолчанию - делаем неактивным
            if ($this->getData()->getFieldByName('lang_default')->getRowData(0) === true) {
                $this->getDataDescription()->getFieldDescriptionByName('lang_default')->setMode(FieldDescription::FIELD_MODE_READ);
            }
        }

        return parent::build();
    }

    /**
      * Переопределенный метод сохранения
      *
      * @param array
      * @return void
      * @access public
      */

    public function loadData() {
        $result = parent::loadData();
        if ($this->getAction() == 'save' && isset($result[0]['lang_default']) && $result[0]['lang_default'] !== '0') {
            $this->dbh->modify(QAL::UPDATE, $this->getTableName(), array('lang_default'=>null));
        }

        return $result;
    }
    /**
	 * Переопределенный родительский метод
	 *
	 *
	 * @return boolean
	 * @access public
	 */

    public function deleteData($id) {
        //если мы пытаемся удалить текущий язык
        //генерим ошибку
        if ($this->document->getLang() == $id || $id == Language::getInstance()->getDefault()) {
            throw new SystemException('ERR_CANT_DELETE', SystemException::ERR_CRITICAL);
        }
        parent::deleteData($id);
    }

    /**
     * При добавлении нового языка создаем задизейбленые разделы
     *
     * @return mixed
     * @access protected
     */

    protected function saveData() {
        $result = parent::saveData();
        if ($this->saver->getMode() == QAL::INSERT) {
            $ids = inverseDBResult($this->dbh->select('share_sitemap', 'smap_id'));
            foreach ($ids['smap_id'] as $smapID) {
            	$this->dbh->modify(QAL::INSERT, 'share_sitemap_translation',array('smap_id'=>$smapID, 'lang_id'=>$result, 'smap_is_disabled'=>1));
            }
        }
        return $result;
    }
}
Return current item: Energine