<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ TextBlock.
*
* @package energine
* @author 1m.dm
* @copyright ColoCall 2006
* @version $Id: TextBlock.class.php,v 1.24 2007/12/17 14:16:14 pavka Exp $
*/
//require_once('core/modules/share/components/DataSet.class.php');
/**
* ТекÑÑовÑй блок.
*
* @package energine
* @subpackage share
* @final
*/
final class TextBlock extends DataSet {
/**
* ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа изобÑажений
*
* @var ImageManager
* @access private
*/
private $imageManager;
/**
* ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки изобÑажений
*
* @var ImageLibrary
* @access private
*/
private $imageLibrary;
/**
* ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки Ñайлов
*
* @var FileLibrary
* @access private
*/
private $fileLibrary;
/**
* ÐÐ¼Ñ Ð¾Ñновной ÑаблиÑÑ
*
* @var string
* @access private
*/
private $tableName;
/**
* ÐденÑиÑикаÑÐ¾Ñ ÑекÑÑового блока
*
* @var int
* @access private
*/
private $id = false;
/**
* СодеÑжимое ÑекÑÑового блока
*
* @var string
* @access private
*/
private $content = '';
/**
* ÐаÑ
одиÑÑÑ Ð»Ð¸ ÑÑÑаниÑа в Ñежиме ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑодеÑжимого
*
* @var boolean
* @access private
*/
private $isEditable;
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @param string
* @param string
* @return void
* @access public
*/
public function __construct($name, $module, Document $document, array $params = null) {
parent::__construct($name, $module, $document, $params);
/**
* @todo Ðе забÑÑÑ ÑбÑаÑÑ $_REQUEST или пеÑеделаÑÑ ÑÑÐ¾Ð±Ñ Ð´Ð»Ñ Ñежима оÑладки -_REQUEST а Ñак - _POST
*
*/
$this->isEditable = isset($_REQUEST['editMode']);
$this->tableName = 'share_textblocks';
if ($this->isEditable) {
$this->document->addTranslation('TXT_PREVIEW');
$this->document->addTranslation('TXT_RESET');
$this->document->addTranslation('TXT_H4');
$this->document->addTranslation('TXT_H5');
$this->document->addTranslation('TXT_H6');
$this->document->addTranslation('TXT_ADDRESS');
}
}
/**
* Ðобавлен паÑамеÑÑ num
*
* @return array
* @access protected
*/
protected function defineParams() {
return array_merge(
parent::defineParams(),
array(
'num' => 1,
'active' => true,
)
);
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑового блока по пеÑÐµÐ´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ Ð´Ð¾ÐºÑменÑа и поÑÑÐ´ÐºÐ¾Ð²Ð¾Ð¼Ñ Ð½Ð¾Ð¼ÐµÑÑ
*
* @param int иденÑиÑикаÑÐ¾Ñ Ð´Ð¾ÐºÑменÑа
* @param string иденÑиÑикаÑÐ¾Ñ ÑекÑÑового блока
* @return int
* @access protected
*/
protected function getTextBlockID($smapID , $num) {
$smapID = (empty($smapID))?null:$smapID;
$result = false;
$res = $this->dbh->select($this->tableName, array('tb_id'), array('smap_id'=>$smapID, 'tb_num'=>$num));
if (is_array($res)) {
$result = simplifyDBResult($res, 'tb_id', true);
}
return $result;
}
/**
* ÐагÑÑзка даннÑÑ
*
* @return void
* @access protected
*/
protected function main() {
/**
* @todo ТÑÑ Ð²Ð¾Ð¾Ð±Ñе полÑÑаеÑÑÑ Ð¾Ð³ÑаниÑение, ÑÑо num лейаÑÑного ÑекÑÑового блока не должен бÑÑÑ ÑиÑÑой
*/
if (intval($this->getParam('num'))!==0) {
$docID = $this->document->getID();
}
else {
$docID = '';
}
$langID = $this->document->getLang();
$this->id = $this->getTextBlockID($docID, $this->getParam('num'));
$res = false;
if ($this->id) {
$res = $this->dbh->select($this->tableName.'_translation', array('tb_content'), array('tb_id'=>$this->id, 'lang_id'=>$langID));
}
if (is_array($res)) {
$this->content = simplifyDBResult($res, 'tb_content', true);
}
//ÐÑли Ð¼Ñ Ð½Ð°Ñ
одимÑÑ Ð² Ñежиме ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑодеÑжимого
if ($this->isEditable) {
//ÐÑклÑÑаем ÑÑÐ»Ð±Ð°Ñ ÑÑÑаниÑÑ ÐµÑли еÑÑÑ
if ($component = $this->document->componentManager->getComponentByName('pageToolBar')) {
$component->disable();
}
//вÑÑÑавлÑем ÑвойÑÑво ÑказÑваÑÑее на Ñо ÑÑо блок наÑ
одиÑÑÑ Ð² Ñежиме ÑедакÑиÑованиÑ
$this->setProperty('editable', 'editable');
}
$this->setProperty('num', $this->getParam('num'));
$this->prepare();
}
/**
* ÐеÑеопÑеделен меÑод ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа меÑа даннÑÑ
*
* @return DataDescription
* @access protected
*/
protected function createDataDescription() {
$dataDescr = new DataDescription();
$fieldDescr = new FieldDescription($this->getName());
$fieldDescr->setType(FieldDescription::FIELD_TYPE_HTML_BLOCK);
$dataDescr->addFieldDescription($fieldDescr);
return $dataDescr;
}
/**
* Создаем Ñвои даннÑе
*
* @return Data
* @access protected
*/
protected function createData() {
$data = new Data();
$field = new Field($this->getName());
$field->setData($this->getContent());
$data->addField($field);
return $data;
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÑодеÑжимое ÑекÑÑового блока
*
* @return string
* @access protected
*/
protected function getContent() {
return $this->content;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑекÑÑового блока
*
* @return int
* @access protected
*/
protected function getID() {
return $this->id;
}
/**
* Создание панели инÑÑÑÑменÑов
*
* @return void
* @access protected
*/
protected function createToolbar() {
return false;
}
/**
* СÑÑÐ¾Ð¸Ñ JS опиÑание
*
* @return DOMNode
* @access protected
*/
protected function buildJS() {
$result = false;
if ($this->isEditable) {
$result = parent::buildJS();
}
return $result;
}
/**
* СоÑ
Ñанение даннÑÑ
*
* @return void
* @access protected
*/
protected function save() {
$this->dbh->beginTransaction();
try {
if (!isset($_POST['data']) && !isset($_POST['num'])) {
throw new SystemException('ERR_DEV_NO_DATA', SystemException::ERR_DEVELOPER );
}
$langID = $this->document->getLang();
$docID = (isset($_POST['docID']))?$_POST['docID']:'';
//пÑÑаемÑÑ Ð¾Ð¿ÑеделиÑÑ ÐµÑÑÑ Ð»Ð¸ Ñ Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¾ ÑодеÑжимом блока в оÑновной ÑаблиÑе
$tbID = $this->getTextBlockID($docID, $_POST['num']);
$result = DataSet::cleanupHTML($_POST['data']);
//$result = $_POST['data'];
if (!$tbID) {
$tbID = $this->dbh->modify(QAL::INSERT, 'share_textblocks', array('smap_id'=>$docID, 'tb_num'=>$_POST['num']));
}
$tableName = $this->tableName.'_translation';
$res = $this->dbh->select($tableName, array('tb_id'), array('tb_id'=>$tbID, 'lang_id'=>$langID));
//еÑли еÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² ÑаблиÑе пеÑеводов - апдейÑим
if (is_array($res)) {
$res = $this->dbh->modify(QAL::UPDATE, $tableName, array('tb_content'=>$result), array('tb_id'=>$tbID, 'lang_id'=>$langID));
}
elseif ($res === true) {
//еÑли Ð½ÐµÑ - вÑÑавлÑем
$res = $this->dbh->modify(QAL::INSERT, $tableName, array('tb_content'=>$result, 'tb_id'=>$tbID, 'lang_id'=>$langID));
}
$this->dbh->commit();
}
catch (Exception $e) {
$this->dbh->rollback();
$result = $e->getMessage();
}
$this->response->setHeader('Content-Type', 'text/html; charset=utf-8');
$this->response->write($result);
$this->response->commit();
}
protected function source() {
$this->source = $this->document->componentManager->createComponent('textblocksource', 'share', 'TextBlockSource', null);
//$this->source->getAction();
$this->source->run();
}
/**
* ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¸Ð·Ð¾Ð±Ñажений
*
* @return void
* @access protected
*/
protected function imageManager() {
$this->imageManager = $this->document->componentManager->createComponent('imagemanager', 'image', 'ImageManager', null);
//$this->imageManager->getAction();
$this->imageManager->run();
}
/**
* ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека изобÑажений
*
* @return void
* @access protected
*/
protected function imageLibrary() {
$this->request->setPathOffset($this->request->getPathOffset() + 1);
$this->imageLibrary = $this->document->componentManager->createComponent('imagelibrary', 'image', 'ImageLibrary', null);
//$this->imageLibrary->getAction();
$this->imageLibrary->run();
}
/**
* ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки Ñайлов
*
* @return void
* @access protected
*/
protected function fileLibrary() {
$this->request->setPathOffset($this->request->getPathOffset() + 1);
$this->fileLibrary = $this->document->componentManager->createComponent('filelibrary', 'share', 'FileLibrary', null, false);
//$this->fileLibrary->getAction();
$this->fileLibrary->run();
}
/**
* ÐÐ»Ñ Ð¼ÐµÑода вÑвода ÑедакÑоÑа изобÑажений вÑзÑÐ²Ð°ÐµÑ Ð¿Ð¾ÑÑÑоиÑÐµÐ»Ñ ÑедакÑоÑа изобоÑажений во вÑеÑ
дÑÑгиÑ
ÑлÑÑаÑÑ
- Ñвой
*
* @return DOMNode
* @access public
*/
public function build() {
switch ($this->getAction()) {
case 'imageManager':
$result = $this->imageManager->build();
break;
case 'imageLibrary':
$result = $this->imageLibrary->build();
break;
case 'fileLibrary':
$result = $this->fileLibrary->build();
break;
case 'source':
$result = $this->source->build();
break;
default:
$result = parent::build();
break;
}
return $result;
}
}