Source for file TextBlock.class.php

Documentation is available at TextBlock.class.php

  1. /**
  2.  * Содержит класс TextBlock.
  3.  *
  4.  * @package energine
  5.  * @author 1m.dm
  6.  * @copyright ColoCall 2006
  7.  * @version $Id: fsource_energine__modulessharecomponentsTextBlock.class.php.html,v 1.1 2007/09/17 14:32:32 pavka Exp $
  8.  */
  9.  
  10. require_once('core/modules/share/components/DataSet.class.php');
  11.  
  12.  
  13. /**
  14.  * Текстовый блок.
  15.  *
  16.  * @package energine
  17.  * @subpackage share
  18.  * @final
  19.  */
  20. final class TextBlock extends DataSet {
  21.     /**
  22.      * Компонент менеджера изображений
  23.      *
  24.      * @var ImageManager 
  25.      * @access private
  26.      */
  27.     private $imageManager;
  28.  
  29.     /**
  30.      * Компонент библиотеки изображений
  31.      *
  32.      * @var ImageLibrary 
  33.      * @access private
  34.      */
  35.     private $imageLibrary;
  36.  
  37.     /**
  38.      * Компонент библиотеки файлов
  39.      *
  40.      * @var FileLibrary 
  41.      * @access private
  42.      */
  43.     private $fileLibrary;
  44.  
  45.     /**
  46.      * Имя основной таблицы
  47.      *
  48.      * @var string 
  49.      * @access private
  50.      */
  51.     private $tableName;
  52.  
  53.     /**
  54.      * Флаг указывающий на то является ли данный блок первым на странице
  55.      * Если да - то для него формируется jsPageEditor
  56.      *
  57.      * @var boolean 
  58.      * @access private
  59.      * @static
  60.      */
  61.  
  62.     private static $isFirstBlockOnPage null;
  63.  
  64.     /**
  65.      * Идентификатор текстового блока
  66.      *
  67.      * @var int 
  68.      * @access private
  69.      */
  70.     private $id = false;
  71.  
  72.     /**
  73.      * Содержимое текстового блока
  74.      *
  75.      * @var string 
  76.      * @access private
  77.      */
  78.     private $content = '';
  79.  
  80.     /**
  81.      * Находится ли страница в режиме редактирования содержимого
  82.      *
  83.      * @var boolean 
  84.      * @access private
  85.      */
  86.     private $isEditable;
  87.  
  88.     /**
  89.      * Конструктор класса
  90.      *
  91.      * @param string 
  92.      * @param string 
  93.      * @return void 
  94.      * @access public
  95.      */
  96.     public function __construct($name$moduleDocument $document,  array $params null{
  97.         parent::__construct($name$module$document,  $params);
  98.         /**
  99.          * @todo Не забыть убрать $_REQUEST или переделать чтобы для режима отладки  -_REQUEST а так  - _POST
  100.          *
  101.          */
  102.         $this->isEditable = isset($_REQUEST['editMode']);
  103.         $this->tableName = 'share_Textblocks';
  104.     }
  105.  
  106.     /**
  107.      * Добавлен параметр num
  108.      *
  109.      * @return array 
  110.      * @access protected
  111.      */
  112.  
  113.     protected function defineParams({
  114.         return array_merge(
  115.         parent::defineParams(),
  116.         array(
  117.             'num' => 1,
  118.             'active' => true,
  119.         )
  120.         );
  121.     }
  122.  
  123.     /**
  124.      * Возвращает идентификатор текстового блока по переданному идентификатору документа и порядковому номеру
  125.      *
  126.      * @param int идентификатор документа
  127.      * @param string идентификатор текстового блока
  128.      * @return int 
  129.      * @access protected
  130.      */
  131.  
  132.     protected function getTextBlockID($smapID $num{
  133.         $smapID (empty($smapID))?null:$smapID;
  134.         $result false;
  135.         $res $this->dbh->select($this->tableNamearray('tb_id')array('smap_id'=>$smapID'tb_num'=>$num));
  136.         if (is_array($res)) {
  137.             $result simplifyDBResult($res'tb_id'true);
  138.         }
  139.         return $result;
  140.     }
  141.  
  142.     /**
  143.      * Загрузка данных
  144.      *
  145.      * @return void 
  146.      * @access protected
  147.      */
  148.     protected function main({
  149.         /**
  150.          * @todo Тут вообще получается ограничение, что num лейаутного текстового блока не должен быть цифрой
  151.          */
  152.  
  153.         if (intval($this->getParam('num'))!==0{
  154.             $docID $this->document->getID();
  155.         }
  156.         else {
  157.             $docID '';
  158.         }
  159.  
  160.         $langID $this->document->getLang();
  161.         $this->id $this->getTextBlockID($docID$this->getParam('num'));
  162.         $res false;
  163.         if ($this->id{
  164.             $res $this->dbh->select($this->tableName.'_translation'array('tb_content')array('tb_id'=>$this->id'lang_id'=>$langID));
  165.         }
  166.  
  167.         if (is_array($res)) {
  168.             $this->content simplifyDBResult($res'tb_content'true);
  169.         }
  170.  
  171.  
  172.         //Если мы находимся в режиме редактирования содержимого
  173.         if ($this->isEditable{
  174.             //Отключаем тулбар страницы если есть
  175.             if ($component $this->document->componentManager->getComponentByName('pageToolBar')) {
  176.                 $component->disable();
  177.             }
  178.  
  179.             if (is_null(self::$isFirstBlockOnPage)) {
  180.                 self::$isFirstBlockOnPage true;
  181.             }
  182.             else {
  183.                 self::$isFirstBlockOnPage false;
  184.             }
  185.  
  186.             //выставляем свойство указывающее на то что блок находится в режиме редактирования
  187.             $this->setProperty('editable''editable');
  188.         }
  189.  
  190.         $this->setProperty('num'$this->getParam('num'));
  191.         $this->prepare();
  192.     }
  193.  
  194.     /**
  195.      * Переопределен метод создания объекта мета данных
  196.      *
  197.      * @return DataDescription 
  198.      * @access protected
  199.      */
  200.  
  201.     protected function createDataDescription({
  202.         $dataDescr new DataDescription();
  203.         $fieldDescr new FieldDescription($this->getName());
  204.         $fieldDescr->setType(FieldDescription::FIELD_TYPE_HTML_BLOCK);
  205.         $dataDescr->addFieldDescription($fieldDescr);
  206.  
  207.         return $dataDescr;
  208.     }
  209.  
  210.     /**
  211.      * Создаем свои данные
  212.      *
  213.      * @return Data 
  214.      * @access protected
  215.      */
  216.  
  217.     protected function createData({
  218.         $data new Data();
  219.         $field new Field($this->getName());
  220.         $field->setData($this->getContent());
  221.         $data->addField($field);
  222.  
  223.         return $data;
  224.     }
  225.  
  226.     /**
  227.      * Возвращает содержимое текстового блока
  228.      *
  229.      * @return string 
  230.      * @access protected
  231.      */
  232.  
  233.     protected function getContent({
  234.         return $this->content;
  235.     }
  236.  
  237.     /**
  238.      * Возвращает идентификатор текстового блока
  239.      *
  240.      * @return int 
  241.      * @access protected
  242.      */
  243.  
  244.     protected function getID({
  245.         return $this->id;
  246.     }
  247.  
  248.     /**
  249.      * Создание панели инструментов
  250.      *
  251.      * @return void 
  252.      * @access protected
  253.      */
  254.  
  255.     protected function createToolbar({
  256.         return ($this->isEditable && self::$isFirstBlockOnPage)?parent::createToolbar():false;
  257.     }
  258.  
  259.     /**
  260.      * Строит JS описание
  261.      *
  262.      * @return DOMNode 
  263.      * @access protected
  264.      */
  265.  
  266.     protected function buildJS({
  267.         $result false;
  268.         if ($this->isEditable && self::$isFirstBlockOnPage{
  269.             $result parent::buildJS();
  270.         }
  271.  
  272.         return $result;
  273.     }
  274.  
  275.     /**
  276.      * Сохранение данных
  277.      *
  278.      * @return void 
  279.      * @access protected
  280.      */
  281.  
  282.     protected function save({
  283.         $this->dbh->beginTransaction();
  284.         try {
  285.             if (!isset($_POST['data']&& !isset($_POST['num'])) {
  286.                 throw new SystemException('ERR_DEV_NO_DATA'SystemException::ERR_DEVELOPER );
  287.             }
  288.             $langID $this->document->getLang();
  289.             $docID (isset($_POST['docID']))?$_POST['docID']:'';
  290.             //пытаемся определить есть ли у нас запись о содержимом блока в основной таблице
  291.  
  292.             $tbID $this->getTextBlockID($docID$_POST['num']);
  293.             $result DataSet::cleanupHTML($_POST['data']);
  294.             //$result = $_POST['data'];
  295.  
  296.             if (!$tbID{
  297.                 $tbID $this->dbh->modify(QAL::INSERT'share_Textblocks'array('smap_id'=>$docID'tb_num'=>$_POST['num']));
  298.             }
  299.             $tableName $this->tableName.'_translation';
  300.  
  301.             $res $this->dbh->select($tableNamearray('tb_id')array('tb_id'=>$tbID'lang_id'=>$langID));
  302.             //если есть запись в таблице переводов - апдейтим
  303.             if (is_array($res)) {
  304.  
  305.                 $res $this->dbh->modify(QAL::UPDATE$tableNamearray('tb_content'=>$result)array('tb_id'=>$tbID'lang_id'=>$langID));
  306.             }
  307.             elseif ($res === true{
  308.                 //если нет - вставляем
  309.                 $res $this->dbh->modify(QAL::INSERT$tableNamearray('tb_content'=>$result'tb_id'=>$tbID'lang_id'=>$langID));
  310.             }
  311.  
  312.             $this->dbh->commit();
  313.         }
  314.         catch (Exception $e{
  315.             $this->dbh->rollback();
  316.             $result $e->getMessage();
  317.         }
  318.  
  319.         $this->response->setHeader('Content-Type''text/html; charset=utf-8');
  320.         $this->response->write($result);
  321.         $this->response->commit();
  322.     }
  323.  
  324.     protected function source({
  325.         $this->source = $this->document->componentManager->createComponent('textblocksource''share''TextBlockSource'null);
  326.         //$this->source->getAction();
  327.         $this->source->run();
  328.     }
  329.  
  330.     /**
  331.      * Выводит компонент менеджер изображений
  332.      *
  333.      * @return void 
  334.      * @access protected
  335.      */
  336.     protected function imageManager({
  337.         $this->imageManager  = $this->document->componentManager->createComponent('imagemanager''image''ImageManager'null);
  338.         //$this->imageManager->getAction();
  339.         $this->imageManager->run();
  340.     }
  341.  
  342.     /**
  343.      * Выводит компонент библиотека изображений
  344.      *
  345.      * @return void 
  346.      * @access protected
  347.      */
  348.     protected function imageLibrary({
  349.         $this->request->setPathOffset($this->request->getPathOffset(1);
  350.         $this->imageLibrary = $this->document->componentManager->createComponent('imagelibrary''image''ImageLibrary'null);
  351.         //$this->imageLibrary->getAction();
  352.         $this->imageLibrary->run();
  353.     }
  354.  
  355.     /**
  356.      * Выводит компонент библиотеки файлов
  357.      *
  358.      * @return void 
  359.      * @access protected
  360.      */
  361.      protected function fileLibrary({
  362.         $this->request->setPathOffset($this->request->getPathOffset(1);
  363.         $this->fileLibrary = $this->document->componentManager->createComponent('filelibrary''share''FileLibrary'nullfalse);
  364.         //$this->fileLibrary->getAction();
  365.         $this->fileLibrary->run();
  366.      }
  367.  
  368.     /**
  369.      * Для метода вывода редактора изображений вызывает построитель редактора изоборажений во всех других случаях - свой
  370.      *
  371.      * @return DOMNode 
  372.      * @access public
  373.      */
  374.  
  375.     public function build({
  376.         switch ($this->getAction()) {
  377.             case 'imageManager':
  378.                 $result $this->imageManager->build();
  379.                 break;
  380.             case 'imageLibrary':
  381.                 $result $this->imageLibrary->build();
  382.                 break;
  383.             case 'fileLibrary':
  384.                 $result $this->fileLibrary->build();
  385.                 break;
  386.             case 'source':
  387.                 $result $this->source->build();
  388.                 break;
  389.             default:
  390.                 $result parent::build();
  391.                 break;
  392.         }
  393.         return $result;
  394.     }
  395.  
  396. }

Documentation generated on Mon, 17 Sep 2007 13:32:37 +0300 by phpDocumentor 1.4.0a2