1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-03 06:55:03 +03:00
ifhub.club/classes/actions/ActionTalk.class.php

389 lines
12 KiB
PHP
Raw Normal View History

<?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
*
---------------------------------------------------------
*/
/**
* Обрабатывает разговоры(почту)
*
*/
class ActionTalk extends Action {
/**
* Текущий юзер
*
* @var unknown_type
*/
protected $oUserCurrent=null;
/**
* Массив ID юзеров адресатов
*
* @var unknown_type
*/
protected $aUsersId=array();
/**
* Инициализация
*
* @return unknown
*/
public function Init() {
/**
* Проверяем авторизован ли юзер
*/
if (!$this->User_IsAuthorization()) {
2009-04-11 14:50:42 +03:00
$this->Message_AddErrorSingle($this->Lang_Get('not_access'));
2008-09-21 09:36:57 +03:00
return Router::Action('error');
}
/**
* Получаем текущего юзера
*/
$this->oUserCurrent=$this->User_GetUserCurrent();
$this->SetDefaultEvent('inbox');
2009-04-11 14:50:42 +03:00
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk_menu_inbox'));
2008-09-21 09:36:57 +03:00
}
protected function RegisterEvent() {
$this->AddEvent('inbox','EventInbox');
$this->AddEvent('add','EventAdd');
$this->AddEvent('read','EventRead');
2009-07-05 00:41:42 +03:00
$this->AddEvent('delete','EventDelete');
$this->AddEvent('ajaxaddcomment','AjaxAddComment');
$this->AddEvent('ajaxresponsecomment','AjaxResponseComment');
2008-09-21 09:36:57 +03:00
}
/**********************************************************************************
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
**********************************************************************************
*/
protected function EventDelete() {
$this->Security_ValidateSendForm();
2009-02-01 19:40:06 +02:00
/**
* Получаем номер сообщения из УРЛ и проверяем существует ли оно
2009-07-05 14:30:55 +03:00
*/
2009-02-01 19:40:06 +02:00
$sTalkId=$this->GetParam(0);
2009-07-05 14:30:55 +03:00
if (!($oTalk=$this->Talk_GetTalkById($sTalkId))) {
return parent::EventNotFound();
}
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
2009-02-01 19:40:06 +02:00
return parent::EventNotFound();
2009-07-05 14:30:55 +03:00
}
2009-02-01 19:40:06 +02:00
/**
* Обработка удаления сообщения
2009-07-05 14:30:55 +03:00
*/
$this->Talk_DeleteTalkUserByArray($sTalkId,$this->oUserCurrent->getId());
func_header_location(Router::GetPath('talk'));
2009-02-01 19:40:06 +02:00
}
2008-09-21 09:36:57 +03:00
protected function EventInbox() {
/**
* Обработка удаления сообщений
*/
if (isset($_REQUEST['submit_talk_del'])) {
$this->Security_ValidateSendForm();
2008-09-21 09:36:57 +03:00
$aTalksIdDel=getRequest('talk_del');
if (is_array($aTalksIdDel)) {
2009-07-05 14:30:55 +03:00
$this->Talk_DeleteTalkUserByArray(array_keys($aTalksIdDel),$this->oUserCurrent->getId());
2008-09-21 09:36:57 +03:00
}
}
/**
* Получаем список сообщений
*/
$aTalks=$this->Talk_GetTalksByUserId($this->oUserCurrent->getId());
$this->Viewer_Assign('aTalks',$aTalks);
}
protected function EventAdd() {
2009-04-11 14:50:42 +03:00
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk_menu_inbox_create'));
2008-09-21 09:36:57 +03:00
/**
* Проверяем отправлена ли форма с данными
*/
if (!isset($_REQUEST['submit_talk_add'])) {
return false;
}
$this->Security_ValidateSendForm();
2008-09-21 09:36:57 +03:00
/**
* Проверка корректности полей формы
*/
if (!$this->checkTalkFields()) {
return false;
}
2009-05-18 06:35:02 +03:00
if ($oTalk=$this->Talk_SendTalk($this->Text_Parser(getRequest('talk_title')),$this->Text_Parser(getRequest('talk_text')),$this->oUserCurrent,$this->aUsersId)) {
func_header_location(Router::GetPath('talk').'read/'.$oTalk->getId().'/');
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');
}
2008-09-21 09:36:57 +03:00
}
protected function EventRead() {
/**
* Получаем номер сообщения из УРЛ и проверяем существует ли оно
*/
$sTalkId=$this->GetParam(0);
2009-07-05 00:41:42 +03:00
if (!($oTalk=$this->Talk_GetTalkById($sTalkId))) {
return parent::EventNotFound();
}
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
2008-09-21 09:36:57 +03:00
return parent::EventNotFound();
}
/**
* Обрабатываем добавление коммента
*/
2009-07-05 00:41:42 +03:00
if (isset($_REQUEST['submit_comment'])) {
$this->SubmitComment();
}
2008-09-21 09:36:57 +03:00
/**
* Достаём комменты к сообщению
2009-07-05 00:41:42 +03:00
*/
$aReturn=$this->Comment_GetCommentsByTargetId($oTalk->getId(),'talk');
$iMaxIdComment=$aReturn['iMaxIdComment'];
$aComments=$aReturn['comments'];
/**
* Помечаем дату последнего просмотра
2008-09-21 09:36:57 +03:00
*/
2009-07-05 00:41:42 +03:00
$oTalkUser->setDateLast(date("Y-m-d H:i:s"));
$oTalkUser->setCommentIdLast($iMaxIdComment);
$oTalkUser->setCommentCountNew(0);
$this->Talk_UpdateTalkUser($oTalkUser);
2009-07-05 14:30:55 +03:00
2008-09-21 09:36:57 +03:00
$this->Viewer_AddHtmlTitle($oTalk->getTitle());
$this->Viewer_Assign('oTalk',$oTalk);
$this->Viewer_Assign('aComments',$aComments);
2009-07-05 00:41:42 +03:00
$this->Viewer_Assign('iMaxIdComment',$iMaxIdComment);
2008-09-21 09:36:57 +03:00
}
protected function checkTalkFields() {
$bOk=true;
/**
* Проверяем есть ли заголовок
*/
if (!func_check(getRequest('talk_title'),'text',2,200)) {
2009-04-11 14:50:42 +03:00
$this->Message_AddError($this->Lang_Get('talk_create_title_error'),$this->Lang_Get('error'));
2008-09-21 09:36:57 +03:00
$bOk=false;
}
/**
* Проверяем есть ли содержание топика
*/
if (!func_check(getRequest('talk_text'),'text',2,3000)) {
2009-04-11 14:50:42 +03:00
$this->Message_AddError($this->Lang_Get('talk_create_text_error'),$this->Lang_Get('error'));
2008-09-21 09:36:57 +03:00
$bOk=false;
}
/**
* проверяем адресатов
*/
$sUsers=getRequest('talk_users');
$aUsers=explode(',',$sUsers);
$aUsersNew=array();
$this->aUsersId=array();
foreach ($aUsers as $sUser) {
$sUser=trim($sUser);
if ($sUser=='' or strtolower($sUser)==strtolower($this->oUserCurrent->getLogin())) {
continue;
}
if ($oUser=$this->User_GetUserByLogin($sUser) and $oUser->getActivate()==1) {
$this->aUsersId[]=$oUser->getId();
} else {
2009-04-11 14:50:42 +03:00
$this->Message_AddError($this->Lang_Get('talk_create_users_error_not_found').' «'.htmlspecialchars($sUser).'»',$this->Lang_Get('error'));
2008-09-21 09:36:57 +03:00
$bOk=false;
}
$aUsersNew[]=$sUser;
}
if (!count($aUsersNew)) {
2009-04-11 14:50:42 +03:00
$this->Message_AddError($this->Lang_Get('talk_create_users_error'),$this->Lang_Get('error'));
2008-09-21 09:36:57 +03:00
$_REQUEST['talk_users']='';
$bOk=false;
} else {
$_REQUEST['talk_users']=join(',',$aUsersNew);
}
//$bOk=false;
return $bOk;
}
/**
2009-07-05 00:41:42 +03:00
* Получение новых комментариев
2008-09-21 09:36:57 +03:00
*
2009-07-05 00:41:42 +03:00
*/
protected function AjaxResponseComment() {
$this->Viewer_SetResponseAjax();
$idCommentLast=getRequest('idCommentLast');
/**
* Проверям авторизован ли пользователь
*/
if (!$this->User_IsAuthorization()) {
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
return;
}
/**
* Проверяем разговор
*/
if (!($oTalk=$this->Talk_GetTalkById(getRequest('idTarget')))) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
$aReturn=$this->Comment_GetCommentsNewByTargetId($oTalk->getId(),'talk',$idCommentLast);
$iMaxIdComment=$aReturn['iMaxIdComment'];
$oTalkUser->setDateLast(date("Y-m-d H:i:s"));
if ($iMaxIdComment!=0) {
$oTalkUser->setCommentIdLast($iMaxIdComment);
}
$oTalkUser->setCommentCountNew(0);
$this->Talk_UpdateTalkUser($oTalkUser);
$aComments=array();
$aCmts=$aReturn['comments'];
if ($aCmts and is_array($aCmts)) {
foreach ($aCmts as $aCmt) {
$aComments[]=array(
'html' => $aCmt['html'],
'idParent' => $aCmt['obj']->getPid(),
'id' => $aCmt['obj']->getId(),
);
}
}
$this->Viewer_AssingAjax('aComments',$aComments);
$this->Viewer_AssingAjax('iMaxIdComment',$iMaxIdComment);
}
/**
* Обработка добавление комментария к топику через ajax
*
*/
protected function AjaxAddComment() {
$this->Viewer_SetResponseAjax();
$this->SubmitComment();
}
/**
* Обработка добавление комментария к топику
*
2008-09-21 09:36:57 +03:00
* @return unknown
*/
2009-07-05 00:41:42 +03:00
protected function SubmitComment() {
2008-09-21 09:36:57 +03:00
/**
2009-07-05 00:41:42 +03:00
* Проверям авторизован ли пользователь
2008-09-21 09:36:57 +03:00
*/
2009-07-05 00:41:42 +03:00
if (!$this->User_IsAuthorization()) {
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
return;
}
/**
* Проверяем разговор
*/
if (!($oTalk=$this->Talk_GetTalkById(getRequest('cmt_target_id')))) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
/**
* Проверяем текст комментария
*/
$sText=$this->Text_Parser(getRequest('comment_text'));
if (!func_check($sText,'text',2,3000)) {
$this->Message_AddErrorSingle($this->Lang_Get('talk_comment_add_text_error'),$this->Lang_Get('error'));
return;
}
/**
* Проверям на какой коммент отвечаем
*/
$sParentId=(int)getRequest('reply');
if (!func_check($sParentId,'id')) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
$oCommentParent=null;
if ($sParentId!=0) {
2008-09-21 09:36:57 +03:00
/**
2009-07-05 00:41:42 +03:00
* Проверяем существует ли комментарий на который отвечаем
*/
if (!($oCommentParent=$this->Comment_GetCommentById($sParentId))) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
2008-09-21 09:36:57 +03:00
}
/**
2009-07-05 00:41:42 +03:00
* Проверяем из одного топика ли новый коммент и тот на который отвечаем
*/
if ($oCommentParent->getTargetId()!=$oTalk->getId()) {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
2008-09-21 09:36:57 +03:00
}
2009-07-05 00:41:42 +03:00
} else {
2008-09-21 09:36:57 +03:00
/**
2009-07-05 00:41:42 +03:00
* Корневой комментарий
*/
$sParentId=null;
}
/**
* Проверка на дублирующий коммент
*/
if ($this->Comment_GetCommentUnique($oTalk->getId(),'talk',$this->oUserCurrent->getId(),$sParentId,md5($sText))) {
$this->Message_AddErrorSingle($this->Lang_Get('topic_comment_spam'),$this->Lang_Get('error'));
return;
}
/**
* Создаём коммент
*/
$oCommentNew=new CommentEntity_Comment();
$oCommentNew->setTargetId($oTalk->getId());
$oCommentNew->setTargetType('talk');
$oCommentNew->setUserId($this->oUserCurrent->getId());
$oCommentNew->setText($sText);
$oCommentNew->setDate(date("Y-m-d H:i:s"));
$oCommentNew->setUserIp(func_getIp());
$oCommentNew->setPid($sParentId);
$oCommentNew->setTextHash(md5($sText));
/**
* Добавляем коммент
*/
if ($this->Comment_AddComment($oCommentNew)) {
$this->Viewer_AssingAjax('sCommentId',$oCommentNew->getId());
$oTalk->setDateLast(date("Y-m-d H:i:s"));
$oTalk->setCountComment($oTalk->getCountComment()+1);
$this->Talk_UpdateTalk($oTalk);
2008-09-21 09:36:57 +03:00
/**
2009-07-05 00:41:42 +03:00
* Отсылаем уведомления всем адресатам
*/
$aUsersTalk=$this->Talk_GetUsersTalk($oTalk->getId());
foreach ($aUsersTalk as $oUserTalk) {
if ($oUserTalk->getId()!=$oCommentNew->getUserId()) {
$this->Notify_SendTalkCommentNew($oUserTalk,$this->oUserCurrent,$oTalk,$oCommentNew);
2008-09-21 09:36:57 +03:00
}
}
2009-07-05 00:41:42 +03:00
/**
* Увеличиваем число новых комментов
*/
$this->Talk_increaseCountCommentNew($oTalk->getId(),$oCommentNew->getUserId());
} else {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
2008-09-21 09:36:57 +03:00
}
2009-07-05 00:41:42 +03:00
}
2008-09-21 09:36:57 +03:00
}
?>