2009-05-10 10:50:39 +03:00
|
|
|
|
<?php
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/*-------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* LiveStreet Engine Social Networking
|
|
|
|
|
* Copyright © 2008 Mzhelskiy Maxim
|
|
|
|
|
*
|
|
|
|
|
*--------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreet.ru
|
|
|
|
|
* Contact e-mail: rus.engine@gmail.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обработка УРЛа вида /topic/ - управление своими топиками
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
class ActionTopic extends Action {
|
2009-02-14 13:56:04 +02:00
|
|
|
|
/**
|
|
|
|
|
* Главное меню
|
|
|
|
|
*
|
|
|
|
|
* @var unknown_type
|
|
|
|
|
*/
|
|
|
|
|
protected $sMenuHeadItemSelect='blog';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*
|
|
|
|
|
* @var unknown_type
|
|
|
|
|
*/
|
|
|
|
|
protected $sMenuItemSelect='topic';
|
|
|
|
|
/**
|
|
|
|
|
* СубМеню
|
|
|
|
|
*
|
|
|
|
|
* @var unknown_type
|
|
|
|
|
*/
|
|
|
|
|
protected $sMenuSubItemSelect='add';
|
|
|
|
|
/**
|
|
|
|
|
* Текущий юзер
|
|
|
|
|
*
|
|
|
|
|
* @var unknown_type
|
|
|
|
|
*/
|
|
|
|
|
protected $oUserCurrent=null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализация
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
public function Init() {
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем авторизован ли юзер
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
return parent::EventNotFound();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
|
|
|
|
$this->SetDefaultEvent('add');
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('topic_title'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Регистрируем евенты
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function RegisterEvent() {
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$this->AddEvent('add','EventAdd');
|
|
|
|
|
$this->AddEventPreg('/^published$/i','/^(page(\d+))?$/i','EventShowTopics');
|
|
|
|
|
$this->AddEventPreg('/^saved$/i','/^(page(\d+))?$/i','EventShowTopics');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->AddEvent('edit','EventEdit');
|
2008-11-22 19:30:25 +02:00
|
|
|
|
$this->AddEvent('delete','EventDelete');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************************
|
|
|
|
|
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
|
|
|
|
**********************************************************************************
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Редактирование топика
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function EventEdit() {
|
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
2008-09-28 13:45:18 +03:00
|
|
|
|
$this->sMenuSubItemSelect='';
|
2008-09-30 07:31:24 +03:00
|
|
|
|
$this->sMenuItemSelect='topic';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем номер топика из УРЛ и проверяем существует ли он
|
|
|
|
|
*/
|
|
|
|
|
$sTopicId=$this->GetParam(0);
|
2009-07-03 23:48:44 +03:00
|
|
|
|
if (!($oTopic=$this->Topic_GetTopicById($sTopicId))) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
2009-06-15 00:15:11 +03:00
|
|
|
|
* Если права на редактирование
|
|
|
|
|
*/
|
2009-11-20 01:23:49 +02:00
|
|
|
|
if (!$this->ACL_IsAllowEditTopic($oTopic,$this->oUserCurrent)) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем блок вывода информации о блоге
|
|
|
|
|
*/
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$this->Viewer_AddBlocks('right',array('block.blogInfo.tpl'));
|
2009-05-09 20:53:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topic_edit_show',array('oTopic'=>$oTopic));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$this->Viewer_Assign('aBlogsAllow',$this->Blog_GetBlogsAllowByUser($this->oUserCurrent));
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('topic_topic_edit'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('add');
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем отправлена ли форма с данными(хотяб одна кнопка)
|
|
|
|
|
*/
|
|
|
|
|
if (isset($_REQUEST['submit_topic_publish']) or isset($_REQUEST['submit_topic_save'])) {
|
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем отправку формы
|
|
|
|
|
*/
|
|
|
|
|
return $this->SubmitEdit($oTopic);
|
|
|
|
|
} else {
|
|
|
|
|
/**
|
|
|
|
|
* Заполняем поля формы для редактирования
|
|
|
|
|
* Только перед отправкой формы!
|
|
|
|
|
*/
|
|
|
|
|
$_REQUEST['topic_title']=$oTopic->getTitle();
|
|
|
|
|
$_REQUEST['topic_text']=$oTopic->getTextSource();
|
|
|
|
|
$_REQUEST['topic_tags']=$oTopic->getTags();
|
|
|
|
|
$_REQUEST['blog_id']=$oTopic->getBlogId();
|
|
|
|
|
$_REQUEST['topic_id']=$oTopic->getId();
|
2008-10-11 00:02:31 +03:00
|
|
|
|
$_REQUEST['topic_publish_index']=$oTopic->getPublishIndex();
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$_REQUEST['topic_forbid_comment']=$oTopic->getForbidComment();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2008-11-22 19:30:25 +02:00
|
|
|
|
/**
|
|
|
|
|
* Удаление топика
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2009-05-21 17:50:55 +03:00
|
|
|
|
protected function EventDelete() {
|
|
|
|
|
$this->Security_ValidateSendForm();
|
2008-11-22 19:30:25 +02:00
|
|
|
|
/**
|
|
|
|
|
* Получаем номер топика из УРЛ и проверяем существует ли он
|
|
|
|
|
*/
|
|
|
|
|
$sTopicId=$this->GetParam(0);
|
2009-07-03 23:48:44 +03:00
|
|
|
|
if (!($oTopic=$this->Topic_GetTopicById($sTopicId))) {
|
2008-11-22 19:30:25 +02:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* проверяем есть ли право на удаление топика
|
2009-06-15 00:15:11 +03:00
|
|
|
|
*/
|
|
|
|
|
if (!$this->Topic_IsAllowDeleteTopic($oTopic,$this->oUserCurrent)) {
|
2008-11-22 19:30:25 +02:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем топик
|
|
|
|
|
*/
|
|
|
|
|
$this->Topic_DeleteTopic($oTopic->getId());
|
|
|
|
|
/**
|
|
|
|
|
* Перенаправляем на страницу со списком топиков из блога этого топика
|
|
|
|
|
*/
|
2009-10-10 02:33:17 +03:00
|
|
|
|
Router::Location($oTopic->getBlog()->getUrlFull());
|
2008-11-22 19:30:25 +02:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавление топика
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function EventAdd() {
|
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
|
|
|
|
$this->sMenuSubItemSelect='add';
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем блок вывода информации о блоге
|
|
|
|
|
*/
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$this->Viewer_AddBlocks('right',array('block.blogInfo.tpl'));
|
2009-05-09 20:53:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topic_add_show');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$this->Viewer_Assign('aBlogsAllow',$this->Blog_GetBlogsAllowByUser($this->oUserCurrent));
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('topic_topic_create'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем отправку формы
|
|
|
|
|
*/
|
|
|
|
|
return $this->SubmitAdd();
|
2009-06-15 00:15:11 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-06-15 00:15:11 +03:00
|
|
|
|
* Выводит список топиков
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-06-15 00:15:11 +03:00
|
|
|
|
protected function EventShowTopics() {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$this->sMenuSubItemSelect=$this->sCurrentEvent;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$iPage=$this->GetParamEventMatch(0,2) ? $this->GetParamEventMatch(0,2) : 1;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список топиков
|
2009-06-15 00:15:11 +03:00
|
|
|
|
*/
|
2009-08-20 10:43:06 +03:00
|
|
|
|
$aResult=$this->Topic_GetTopicsPersonalByUser($this->oUserCurrent->getId(),$this->sCurrentEvent=='published' ? 1 : 0,$iPage,Config::Get('module.topic.per_page'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$aTopics=$aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
2009-08-20 10:43:06 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.topic.per_page'),4,Router::GetPath('topic').$this->sCurrentEvent);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
|
|
|
|
$this->Viewer_Assign('aTopics',$aTopics);
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('topic_menu_'.$this->sCurrentEvent));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обработка добавлени топика
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function SubmitAdd() {
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем отправлена ли форма с данными(хотяб одна кнопка)
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!isPost('submit_topic_publish') and !isPost('submit_topic_save')) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
2009-05-21 17:50:55 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверка корректности полей формы
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->checkTopicFields()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Определяем в какой блог делаем запись
|
|
|
|
|
*/
|
|
|
|
|
$iBlogId=getRequest('blog_id');
|
|
|
|
|
if ($iBlogId==0) {
|
2008-10-04 00:07:32 +03:00
|
|
|
|
$oBlog=$this->Blog_GetPersonalBlogByUserId($this->oUserCurrent->getId());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
|
|
|
|
$oBlog=$this->Blog_GetBlogById($iBlogId);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если блог не определен выдаем предупреждение
|
|
|
|
|
*/
|
|
|
|
|
if (!$oBlog) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_unknown'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2009-06-20 16:54:24 +03:00
|
|
|
|
* Проверяем права на постинг в блог
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2009-11-20 01:23:49 +02:00
|
|
|
|
if (!$this->ACL_IsAllowBlog($oBlog,$this->oUserCurrent)) {
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_noallow'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
2009-03-01 12:19:06 +02:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем топик на уникальность
|
|
|
|
|
*/
|
|
|
|
|
if ($oTopicEquivalent=$this->Topic_GetTopicUnique($this->oUserCurrent->getId(),md5(getRequest('topic_text')))) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_create_text_error_unique'),$this->Lang_Get('error'));
|
2009-03-01 12:19:06 +02:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-11-03 23:53:55 +02:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем разрешено ли постить топик по времени
|
|
|
|
|
*/
|
|
|
|
|
if (isPost('submit_topic_publish') and !$this->ACL_CanPostTopicTime($this->oUserCurrent)) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_time_limit'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Теперь можно смело добавлять топик к блогу
|
|
|
|
|
*/
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$oTopic=Engine::GetEntity('Topic');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oTopic->setBlogId($oBlog->getId());
|
|
|
|
|
$oTopic->setUserId($this->oUserCurrent->getId());
|
|
|
|
|
$oTopic->setType('topic');
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$oTopic->setTitle(getRequest('topic_title'));
|
|
|
|
|
$oTopic->setCutText(null);
|
2009-03-01 12:19:06 +02:00
|
|
|
|
$oTopic->setTextHash(md5(getRequest('topic_text')));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Парсим на предмет ХТМЛ тегов
|
|
|
|
|
*/
|
|
|
|
|
$sText=$this->Text_Parser(getRequest('topic_text'));
|
2009-05-09 22:41:52 +03:00
|
|
|
|
$sTextShort=$sText;
|
|
|
|
|
$sTextNew=$sText;
|
|
|
|
|
$sTextTemp=str_replace("\r\n",'[<rn>]',getRequest('topic_text'));
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
|
|
|
|
|
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
|
2009-05-09 22:41:52 +03:00
|
|
|
|
$aMatch[1]=str_replace('[<rn>]',"\r\n",$aMatch[1]);
|
|
|
|
|
$aMatch[1]=str_replace('[<n>]',"\r\n",$aMatch[1]);
|
|
|
|
|
$aMatch[3]=str_replace('[<rn>]',"\r\n",$aMatch[3]);
|
|
|
|
|
$aMatch[3]=str_replace('[<n>]',"\r\n",$aMatch[3]);
|
|
|
|
|
$sTextShort=$this->Text_Parser($aMatch[1]);
|
|
|
|
|
$sTextNew=$this->Text_Parser($aMatch[1].' '.$aMatch[3]);
|
2009-04-26 18:49:01 +03:00
|
|
|
|
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui',$aMatch[2],$aMatchCut)) {
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$oTopic->setCutText(trim($aMatchCut[1]));
|
|
|
|
|
}
|
2009-04-11 10:02:48 +03:00
|
|
|
|
}
|
2009-05-09 22:41:52 +03:00
|
|
|
|
|
|
|
|
|
$oTopic->setText($sTextNew);
|
|
|
|
|
$oTopic->setTextShort($sTextShort);
|
2008-09-28 13:45:18 +03:00
|
|
|
|
$oTopic->setTextSource(getRequest('topic_text'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oTopic->setTags(getRequest('topic_tags'));
|
|
|
|
|
$oTopic->setDateAdd(date("Y-m-d H:i:s"));
|
|
|
|
|
$oTopic->setUserIp(func_getIp());
|
|
|
|
|
/**
|
|
|
|
|
* Публикуем или сохраняем
|
|
|
|
|
*/
|
|
|
|
|
if (isset($_REQUEST['submit_topic_publish'])) {
|
|
|
|
|
$oTopic->setPublish(1);
|
2009-02-15 10:10:07 +02:00
|
|
|
|
$oTopic->setPublishDraft(1);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
|
|
|
|
$oTopic->setPublish(0);
|
2009-02-15 10:10:07 +02:00
|
|
|
|
$oTopic->setPublishDraft(0);
|
2008-10-11 00:02:31 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Принудительный вывод на главную
|
|
|
|
|
*/
|
|
|
|
|
$oTopic->setPublishIndex(0);
|
|
|
|
|
if ($this->oUserCurrent->isAdministrator()) {
|
|
|
|
|
if (getRequest('topic_publish_index')) {
|
|
|
|
|
$oTopic->setPublishIndex(1);
|
|
|
|
|
}
|
2008-10-25 23:31:29 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Запрет на комментарии к топику
|
|
|
|
|
*/
|
|
|
|
|
$oTopic->setForbidComment(0);
|
|
|
|
|
if (getRequest('topic_forbid_comment')) {
|
|
|
|
|
$oTopic->setForbidComment(1);
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем топик
|
|
|
|
|
*/
|
|
|
|
|
if ($this->Topic_AddTopic($oTopic)) {
|
2009-05-03 22:50:26 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем топик, чтоб подцепить связанные данные
|
|
|
|
|
*/
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$oTopic=$this->Topic_GetTopicById($oTopic->getId());
|
2009-11-03 23:53:55 +02:00
|
|
|
|
/**
|
|
|
|
|
* Делаем рассылку спама всем, кто состоит в этом блоге
|
|
|
|
|
*/
|
2009-06-20 16:54:24 +03:00
|
|
|
|
if ($oTopic->getPublish()==1 and $oBlog->getType()!='personal') {
|
|
|
|
|
$this->Topic_SendNotifyTopicNew($oBlog,$oTopic,$this->oUserCurrent);
|
2009-09-09 20:39:26 +03:00
|
|
|
|
}
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oTopic->getUrl());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return Router::Action('error');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обработка редактирования топика
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $oTopic
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function SubmitEdit($oTopic) {
|
|
|
|
|
/**
|
|
|
|
|
* Проверка корректности полей формы
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->checkTopicFields()) {
|
|
|
|
|
return false;
|
2009-05-21 17:50:55 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Определяем в какой блог делаем запись
|
|
|
|
|
*/
|
|
|
|
|
$iBlogId=getRequest('blog_id');
|
|
|
|
|
if ($iBlogId==0) {
|
2008-10-04 00:07:32 +03:00
|
|
|
|
$oBlog=$this->Blog_GetPersonalBlogByUserId($oTopic->getUserId());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
|
|
|
|
$oBlog=$this->Blog_GetBlogById($iBlogId);
|
2009-09-26 05:04:47 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если блог не определен выдаем предупреждение
|
|
|
|
|
*/
|
|
|
|
|
if (!$oBlog) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_unknown'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
2009-09-26 05:04:47 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-06-20 16:54:24 +03:00
|
|
|
|
* Проверяем права на постинг в блог
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2009-11-20 01:23:49 +02:00
|
|
|
|
if (!$this->ACL_IsAllowBlog($oBlog,$this->oUserCurrent)) {
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_noallow'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
2009-09-26 05:04:47 +03:00
|
|
|
|
}
|
2009-03-01 12:19:06 +02:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем топик на уникальность
|
|
|
|
|
*/
|
2009-06-24 00:35:20 +03:00
|
|
|
|
if ($oTopicEquivalent=$this->Topic_GetTopicUnique($oTopic->getUserId(),md5(getRequest('topic_text')))) {
|
2009-03-01 12:19:06 +02:00
|
|
|
|
if ($oTopicEquivalent->getId()!=$oTopic->getId()) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_create_text_error_unique'),$this->Lang_Get('error'));
|
2009-03-01 12:19:06 +02:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-11-18 21:46:21 +02:00
|
|
|
|
/**
|
|
|
|
|
* Сохраняем старое значение идентификатора блога
|
|
|
|
|
*/
|
|
|
|
|
$sBlogIdOld = $oTopic->getBlogId();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Теперь можно смело редактировать топик
|
|
|
|
|
*/
|
2009-11-18 21:46:21 +02:00
|
|
|
|
$oTopic->setBlogId($oBlog->getId());
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$oTopic->setTitle(getRequest('topic_title'));
|
2009-03-01 12:19:06 +02:00
|
|
|
|
$oTopic->setCutText(null);
|
|
|
|
|
$oTopic->setTextHash(md5(getRequest('topic_text')));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Парсим на предмет ХТМЛ тегов
|
|
|
|
|
*/
|
|
|
|
|
$sText=$this->Text_Parser(getRequest('topic_text'));
|
2009-05-09 22:41:52 +03:00
|
|
|
|
$sTextShort=$sText;
|
|
|
|
|
$sTextNew=$sText;
|
|
|
|
|
$sTextTemp=str_replace("\r\n",'[<rn>]',getRequest('topic_text'));
|
2008-09-30 07:31:24 +03:00
|
|
|
|
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
|
2008-10-25 23:31:29 +03:00
|
|
|
|
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
|
2009-05-09 22:41:52 +03:00
|
|
|
|
$aMatch[1]=str_replace('[<rn>]',"\r\n",$aMatch[1]);
|
|
|
|
|
$aMatch[1]=str_replace('[<n>]',"\r\n",$aMatch[1]);
|
|
|
|
|
$aMatch[3]=str_replace('[<rn>]',"\r\n",$aMatch[3]);
|
|
|
|
|
$aMatch[3]=str_replace('[<n>]',"\r\n",$aMatch[3]);
|
|
|
|
|
$sTextShort=$this->Text_Parser($aMatch[1]);
|
|
|
|
|
$sTextNew=$this->Text_Parser($aMatch[1].' '.$aMatch[3]);
|
2009-04-26 18:49:01 +03:00
|
|
|
|
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui',$aMatch[2],$aMatchCut)) {
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$oTopic->setCutText(trim($aMatchCut[1]));
|
|
|
|
|
}
|
2009-04-11 10:02:48 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
2009-05-09 22:41:52 +03:00
|
|
|
|
$oTopic->setText($sTextNew);
|
|
|
|
|
$oTopic->setTextShort($sTextShort);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oTopic->setTextSource(getRequest('topic_text'));
|
|
|
|
|
$oTopic->setTags(getRequest('topic_tags'));
|
|
|
|
|
$oTopic->setUserIp(func_getIp());
|
|
|
|
|
/**
|
|
|
|
|
* Публикуем или сохраняем в черновиках
|
|
|
|
|
*/
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$bSendNotify=false;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if (isset($_REQUEST['submit_topic_publish'])) {
|
|
|
|
|
$oTopic->setPublish(1);
|
2009-02-15 10:10:07 +02:00
|
|
|
|
if ($oTopic->getPublishDraft()==0) {
|
|
|
|
|
$oTopic->setPublishDraft(1);
|
|
|
|
|
$oTopic->setDateAdd(date("Y-m-d H:i:s"));
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$bSendNotify=true;
|
2009-02-15 10:10:07 +02:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
|
|
|
|
$oTopic->setPublish(0);
|
2008-10-11 00:02:31 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Принудительный вывод на главную
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent->isAdministrator()) {
|
|
|
|
|
if (getRequest('topic_publish_index')) {
|
|
|
|
|
$oTopic->setPublishIndex(1);
|
|
|
|
|
} else {
|
|
|
|
|
$oTopic->setPublishIndex(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-10-25 23:31:29 +03:00
|
|
|
|
/**
|
|
|
|
|
* Запрет на комментарии к топику
|
|
|
|
|
*/
|
|
|
|
|
$oTopic->setForbidComment(0);
|
|
|
|
|
if (getRequest('topic_forbid_comment')) {
|
|
|
|
|
$oTopic->setForbidComment(1);
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сохраняем топик
|
|
|
|
|
*/
|
2009-06-20 16:54:24 +03:00
|
|
|
|
if ($this->Topic_UpdateTopic($oTopic)) {
|
2009-11-18 21:46:21 +02:00
|
|
|
|
/**
|
|
|
|
|
* Обновляем данные в комментариях, если топик был перенесен в новый блог
|
|
|
|
|
*/
|
|
|
|
|
if($sBlogIdOld!=$oTopic->getBlogId()) {
|
|
|
|
|
$this->Comment_UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
|
|
|
|
$this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
|
|
|
|
}
|
2009-06-20 16:54:24 +03:00
|
|
|
|
/**
|
|
|
|
|
* Рассылаем о новом топике подписчикам блога
|
|
|
|
|
*/
|
|
|
|
|
if ($bSendNotify) {
|
|
|
|
|
$this->Topic_SendNotifyTopicNew($oBlog,$oTopic,$this->oUserCurrent);
|
|
|
|
|
}
|
2008-11-04 23:46:28 +02:00
|
|
|
|
if (!$oTopic->getPublish() and !$this->oUserCurrent->isAdministrator() and $this->oUserCurrent->getId()!=$oTopic->getUserId()) {
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2008-11-04 23:46:28 +02:00
|
|
|
|
}
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oTopic->getUrl());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return Router::Action('error');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверка полей формы
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function checkTopicFields() {
|
2009-10-20 02:42:23 +03:00
|
|
|
|
$this->Security_ValidateSendForm();
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=true;
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли блог в кторый постим
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!func_check(getRequest('blog_id',null,'post'),'id')) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('topic_create_blog_error_unknown'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли заголовок топика
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!func_check(getRequest('topic_title',null,'post'),'text',2,200)) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('topic_create_title_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли содержание топика
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!func_check(getRequest('topic_text',null,'post'),'text',2,15000)) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('topic_create_text_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли теги(метки)
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!func_check(getRequest('topic_tags',null,'post'),'text',2,500)) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('topic_create_tags_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* проверяем ввод тегов
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
$sTags=getRequest('topic_tags',null,'post');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$aTags=explode(',',$sTags);
|
|
|
|
|
$aTagsNew=array();
|
2008-10-07 21:19:56 +03:00
|
|
|
|
$aTagsNewLow=array();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
foreach ($aTags as $sTag) {
|
|
|
|
|
$sTag=trim($sTag);
|
2008-10-07 21:19:56 +03:00
|
|
|
|
if (func_check($sTag,'text',2,50) and !in_array(mb_strtolower($sTag,'UTF-8'),$aTagsNewLow)) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$aTagsNew[]=$sTag;
|
2008-10-07 21:19:56 +03:00
|
|
|
|
$aTagsNewLow[]=mb_strtolower($sTag,'UTF-8');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!count($aTagsNew)) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('topic_create_tags_error_bad'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
} else {
|
|
|
|
|
$_REQUEST['topic_tags']=join(',',$aTagsNew);
|
|
|
|
|
}
|
|
|
|
|
return $bOk;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* При завершении экшена загружаем необходимые переменные
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function EventShutdown() {
|
2009-02-14 13:56:04 +02:00
|
|
|
|
$this->Viewer_Assign('sMenuHeadItemSelect',$this->sMenuHeadItemSelect);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
|
|
|
|
|
$this->Viewer_Assign('sMenuSubItemSelect',$this->sMenuSubItemSelect);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
?>
|