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
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Экшен обработки личной почты (сообщения /talk/)
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* @package actions
|
|
|
|
|
* @since 1.0
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
class ActionTalk extends Action {
|
|
|
|
|
/**
|
|
|
|
|
* Текущий юзер
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* @var ModuleUser_EntityUser|null
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $oUserCurrent=null;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Подменю
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
2012-04-20 13:36:07 +03:00
|
|
|
|
protected $sMenuSubItemSelect='';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Массив ID юзеров адресатов
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* @var array
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $aUsersId=array();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Инициализация
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
|
|
|
|
*/
|
2010-02-06 11:04:36 +02:00
|
|
|
|
public function Init() {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем авторизован ли юзер
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2009-04-11 14:50:42 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('not_access'));
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return Router::Action('error');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем текущего юзера
|
|
|
|
|
*/
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->SetDefaultEvent('inbox');
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk.nav.inbox'));
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2011-08-23 17:19:32 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем в шаблон JS текстовки
|
|
|
|
|
*/
|
|
|
|
|
$this->Lang_AddLangJs(array(
|
2012-05-04 13:12:21 +03:00
|
|
|
|
'delete'
|
|
|
|
|
));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +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');
|
2012-04-08 18:16:52 +03:00
|
|
|
|
$this->AddEvent('favourites','EventFavourites');
|
|
|
|
|
$this->AddEvent('blacklist','EventBlacklist');
|
2014-07-22 19:16:27 +03:00
|
|
|
|
|
|
|
|
|
$this->AddEvent('ajaxaddcomment','AjaxAddComment');
|
|
|
|
|
$this->AddEvent('ajaxresponsecomment','AjaxResponseComment');
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$this->AddEvent('ajaxaddtoblacklist', 'AjaxAddToBlacklist');
|
2009-11-04 12:36:08 +02:00
|
|
|
|
$this->AddEvent('ajaxdeletefromblacklist', 'AjaxDeleteFromBlacklist');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->AddEvent('ajaxdeletetalkuser', 'AjaxDeleteTalkUser');
|
|
|
|
|
$this->AddEvent('ajaxaddtalkuser', 'AjaxAddTalkUser');
|
2010-10-02 17:33:51 +03:00
|
|
|
|
$this->AddEvent('ajaxnewmessages', 'AjaxNewMessages');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**********************************************************************************
|
|
|
|
|
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
|
|
|
|
**********************************************************************************
|
|
|
|
|
*/
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаление письма
|
|
|
|
|
*/
|
2009-05-21 17:50:55 +03:00
|
|
|
|
protected function EventDelete() {
|
|
|
|
|
$this->Security_ValidateSendForm();
|
2009-02-01 19:40:06 +02:00
|
|
|
|
/**
|
|
|
|
|
* Получаем номер сообщения из УРЛ и проверяем существует ли оно
|
2012-05-04 13:12:21 +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();
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь входит в переписку?
|
|
|
|
|
*/
|
2009-07-05 14:30:55 +03:00
|
|
|
|
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
|
2009-02-01 19:40:06 +02:00
|
|
|
|
return parent::EventNotFound();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-02-01 19:40:06 +02:00
|
|
|
|
/**
|
|
|
|
|
* Обработка удаления сообщения
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
|
|
|
|
$this->Talk_DeleteTalkUserByArray($sTalkId,$this->oUserCurrent->getId());
|
2009-12-30 16:54:56 +02:00
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
2009-02-01 19:40:06 +02:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отображение списка сообщений
|
|
|
|
|
*/
|
|
|
|
|
protected function EventInbox() {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обработка удаления сообщений
|
|
|
|
|
*/
|
2014-04-03 13:48:18 +03:00
|
|
|
|
if (getRequestStr('form_action') == 'remove') {
|
2009-10-20 02:42:23 +03:00
|
|
|
|
$this->Security_ValidateSendForm();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2012-04-09 12:39:40 +03:00
|
|
|
|
$aTalksIdDel=getRequest('talk_select');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if (is_array($aTalksIdDel)) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Talk_DeleteTalkUserByArray(array_keys($aTalksIdDel),$this->oUserCurrent->getId());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2012-04-09 12:39:40 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обработка отметки о прочтении
|
|
|
|
|
*/
|
2014-04-03 13:48:18 +03:00
|
|
|
|
if (getRequestStr('form_action') == 'mark_as_read') {
|
2012-04-09 12:39:40 +03:00
|
|
|
|
$this->Security_ValidateSendForm();
|
|
|
|
|
|
|
|
|
|
$aTalksIdDel=getRequest('talk_select');
|
|
|
|
|
if (is_array($aTalksIdDel)) {
|
|
|
|
|
$this->Talk_MarkReadTalkUserByArray(array_keys($aTalksIdDel),$this->oUserCurrent->getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-04-20 13:36:07 +03:00
|
|
|
|
$this->sMenuSubItemSelect='inbox';
|
2012-04-09 12:39:40 +03:00
|
|
|
|
/**
|
|
|
|
|
* Количество сообщений на страницу
|
|
|
|
|
*/
|
|
|
|
|
$iPerPage=Config::Get('module.talk.per_page');
|
|
|
|
|
/**
|
|
|
|
|
* Формируем фильтр для поиска сообщений
|
|
|
|
|
*/
|
2009-08-26 01:15:58 +03:00
|
|
|
|
$aFilter=$this->BuildFilter();
|
2012-04-09 12:39:40 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если только новые, то добавляем условие в фильтр
|
|
|
|
|
*/
|
|
|
|
|
if ($this->GetParam(0)=='new') {
|
2012-04-20 13:36:07 +03:00
|
|
|
|
$this->sMenuSubItemSelect='new';
|
2012-04-09 12:39:40 +03:00
|
|
|
|
$aFilter['only_new']=true;
|
|
|
|
|
$iPerPage=50; // новых отображаем только последние 50 писем, без постраничности
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-08-24 12:30:25 +03:00
|
|
|
|
* Передан ли номер страницы
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$iPage=preg_match("/^page([1-9]\d{0,5})$/i",$this->getParam(0),$aMatch) ? $aMatch[1] : 1;
|
2009-08-24 12:30:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список писем
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-26 01:15:58 +03:00
|
|
|
|
$aResult=$this->Talk_GetTalksByFilter(
|
2012-04-09 12:39:40 +03:00
|
|
|
|
$aFilter,$iPage,$iPerPage
|
2009-09-26 04:36:28 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
|
|
|
|
$aTalks=$aResult['collection'];
|
2009-08-24 12:30:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-24 12:30:25 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging(
|
2012-04-25 17:47:47 +03:00
|
|
|
|
$aResult['count'],$iPage,$iPerPage,Config::Get('pagination.pages.count'),
|
2009-08-26 01:15:58 +03:00
|
|
|
|
Router::GetPath('talk').$this->sCurrentEvent,
|
|
|
|
|
array_intersect_key(
|
|
|
|
|
$_REQUEST,
|
|
|
|
|
array_fill_keys(
|
2012-04-03 06:52:27 +03:00
|
|
|
|
array('start','end','keyword','sender','keyword_text','favourite'),
|
2009-08-26 01:15:58 +03:00
|
|
|
|
''
|
|
|
|
|
)
|
|
|
|
|
)
|
2009-08-24 12:30:25 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Показываем сообщение, если происходит поиск по фильтру
|
|
|
|
|
*/
|
2012-04-09 12:39:40 +03:00
|
|
|
|
if(getRequest('submit_talk_filter')) {
|
2009-08-27 04:05:34 +03:00
|
|
|
|
$this->Message_AddNotice(
|
|
|
|
|
($aResult['count'])
|
2014-07-22 19:16:27 +03:00
|
|
|
|
? $this->Lang_Get('talk.search.notices.result_count',array('count'=>$aResult['count']))
|
|
|
|
|
: $this->Lang_Get('talk.search.notices.result_empty')
|
2009-08-27 04:05:34 +03:00
|
|
|
|
);
|
|
|
|
|
}
|
2009-08-24 12:30:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
2009-08-27 22:54:31 +03:00
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Viewer_Assign('aTalks',$aTalks);
|
2009-11-23 16:01:48 +02:00
|
|
|
|
}
|
2009-09-26 04:36:28 +03:00
|
|
|
|
/**
|
|
|
|
|
* Формирует из REQUEST массива фильтр для отбора писем
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2009-08-26 01:15:58 +03:00
|
|
|
|
protected function BuildFilter() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Текущий пользователь
|
|
|
|
|
*/
|
2009-08-26 01:15:58 +03:00
|
|
|
|
$aFilter = array(
|
|
|
|
|
'user_id'=>$this->oUserCurrent->getId(),
|
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Дата старта поиска
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if($start=getRequestStr('start')) {
|
2009-08-27 04:05:34 +03:00
|
|
|
|
if(func_check($start,'text',6,10) && substr_count($start,'.')==2) {
|
2009-08-26 15:46:44 +03:00
|
|
|
|
list($d,$m,$y)=explode('.',$start);
|
|
|
|
|
if(@checkdate($m,$d,$y)) {
|
|
|
|
|
$aFilter['date_min']="{$y}-{$m}-{$d}";
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.search.notices.error_date_format'),
|
|
|
|
|
$this->Lang_Get('talk.search.notices.error')
|
2009-08-26 15:46:44 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
unset($_REQUEST['start']);
|
2009-08-26 15:46:44 +03:00
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.search.notices.error_date_format'),
|
|
|
|
|
$this->Lang_Get('talk.search.notices.error')
|
2009-08-26 15:46:44 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
unset($_REQUEST['start']);
|
|
|
|
|
}
|
2009-08-26 01:15:58 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Дата окончания поиска
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if($end=getRequestStr('end')) {
|
2009-08-27 04:05:34 +03:00
|
|
|
|
if(func_check($end,'text',6,10) && substr_count($end,'.')==2) {
|
2009-08-26 15:46:44 +03:00
|
|
|
|
list($d,$m,$y)=explode('.',$end);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if(@checkdate($m,$d,$y)) {
|
2009-09-26 04:36:28 +03:00
|
|
|
|
$aFilter['date_max']="{$y}-{$m}-{$d} 23:59:59";
|
2009-08-26 15:46:44 +03:00
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.search.notices.error_date_format'),
|
|
|
|
|
$this->Lang_Get('talk.search.notices.error')
|
2009-08-26 15:46:44 +03:00
|
|
|
|
);
|
|
|
|
|
unset($_REQUEST['end']);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.search.notices.error_date_format'),
|
|
|
|
|
$this->Lang_Get('talk.search.notices.error')
|
2009-08-26 15:46:44 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
unset($_REQUEST['end']);
|
2009-08-26 15:46:44 +03:00
|
|
|
|
}
|
2009-08-26 01:15:58 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Ключевые слова в теме сообщения
|
|
|
|
|
*/
|
2012-07-08 11:50:36 +03:00
|
|
|
|
if($sKeyRequest=getRequest('keyword') and is_string($sKeyRequest)){
|
2009-08-26 15:46:44 +03:00
|
|
|
|
$sKeyRequest=urldecode($sKeyRequest);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
preg_match_all('~(\S+)~u',$sKeyRequest,$aWords);
|
|
|
|
|
|
|
|
|
|
if(is_array($aWords[1])&&isset($aWords[1])&&count($aWords[1])) {
|
2010-02-20 01:04:27 +02:00
|
|
|
|
$aFilter['keyword']='%'.implode('%',$aWords[1]).'%';
|
2009-09-26 04:36:28 +03:00
|
|
|
|
} else {
|
|
|
|
|
unset($_REQUEST['keyword']);
|
|
|
|
|
}
|
2009-08-26 01:15:58 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Ключевые слова в тексте сообщения
|
|
|
|
|
*/
|
2012-07-08 11:50:36 +03:00
|
|
|
|
if($sKeyRequest=getRequest('keyword_text') and is_string($sKeyRequest)){
|
2012-04-03 06:52:27 +03:00
|
|
|
|
$sKeyRequest=urldecode($sKeyRequest);
|
|
|
|
|
preg_match_all('~(\S+)~u',$sKeyRequest,$aWords);
|
|
|
|
|
|
|
|
|
|
if(is_array($aWords[1])&&isset($aWords[1])&&count($aWords[1])) {
|
|
|
|
|
$aFilter['text_like']='%'.implode('%',$aWords[1]).'%';
|
|
|
|
|
} else {
|
|
|
|
|
unset($_REQUEST['keyword_text']);
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отправитель
|
|
|
|
|
*/
|
2012-07-08 11:50:36 +03:00
|
|
|
|
if($sender=getRequest('sender') and is_string($sender)){
|
2009-08-26 15:46:44 +03:00
|
|
|
|
$aFilter['user_login']=urldecode($sender);
|
|
|
|
|
}
|
2014-06-13 06:55:03 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отправитель
|
|
|
|
|
*/
|
|
|
|
|
if($sReceiver=urldecode(getRequestStr('receiver')) and $oUserReceiver=$this->User_GetUserByLogin($sReceiver)){
|
|
|
|
|
$aFilter['receiver_user_id']=$oUserReceiver->getId();
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Искать только в избранных письмах
|
|
|
|
|
*/
|
2012-04-03 06:52:27 +03:00
|
|
|
|
if (getRequest('favourite')) {
|
|
|
|
|
$aTalkIdResult=$this->Favourite_GetFavouritesByUserId($this->oUserCurrent->getId(),'talk',1,500); // ограничиваем
|
|
|
|
|
$aFilter['id']=$aTalkIdResult['collection'];
|
|
|
|
|
$_REQUEST['favourite']=1;
|
|
|
|
|
} else {
|
|
|
|
|
unset($_REQUEST['favourite']);
|
|
|
|
|
}
|
2009-08-26 01:15:58 +03:00
|
|
|
|
return $aFilter;
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отображение списка блэк-листа
|
|
|
|
|
*/
|
2012-04-08 18:16:52 +03:00
|
|
|
|
protected function EventBlacklist() {
|
2012-04-20 13:36:07 +03:00
|
|
|
|
$this->sMenuSubItemSelect='blacklist';
|
2012-04-08 18:16:52 +03:00
|
|
|
|
$aUsersBlacklist=$this->Talk_GetBlacklistByUserId($this->oUserCurrent->getId());
|
|
|
|
|
$this->Viewer_Assign('aUsersBlacklist',$aUsersBlacklist);
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отображение списка избранных писем
|
|
|
|
|
*/
|
2012-04-20 13:36:07 +03:00
|
|
|
|
protected function EventFavourites() {
|
|
|
|
|
$this->sMenuSubItemSelect='favourites';
|
2009-08-24 15:23:52 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$iPage=preg_match("/^page([1-9]\d{0,5})$/i",$this->getParam(0),$aMatch) ? $aMatch[1] : 1;
|
2009-08-24 15:23:52 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список писем
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-24 15:23:52 +03:00
|
|
|
|
$aResult=$this->Talk_GetTalksFavouriteByUserId(
|
|
|
|
|
$this->oUserCurrent->getId(),
|
|
|
|
|
$iPage,Config::Get('module.talk.per_page')
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
|
|
|
|
$aTalks=$aResult['collection'];
|
2009-08-24 15:23:52 +03:00
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-24 15:23:52 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging(
|
2012-04-25 17:47:47 +03:00
|
|
|
|
$aResult['count'],$iPage,Config::Get('module.talk.per_page'),Config::Get('pagination.pages.count'),
|
2009-08-24 15:23:52 +03:00
|
|
|
|
Router::GetPath('talk').$this->sCurrentEvent
|
|
|
|
|
);
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
|
|
|
|
$this->Viewer_Assign('aTalks',$aTalks);
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk.nav.favourites'));
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Страница создания письма
|
|
|
|
|
*/
|
2012-04-20 13:36:07 +03:00
|
|
|
|
protected function EventAdd() {
|
|
|
|
|
$this->sMenuSubItemSelect='add';
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk.nav.add'));
|
2009-08-24 15:37:55 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список друзей
|
|
|
|
|
*/
|
2012-03-19 22:37:40 +02:00
|
|
|
|
$aUsersFriend=$this->User_GetUsersFriend($this->oUserCurrent->getId());
|
|
|
|
|
if($aUsersFriend['collection']) {
|
|
|
|
|
$this->Viewer_Assign('aUsersFriend',$aUsersFriend['collection']);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем отправлена ли форма с данными
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!isPost('submit_talk_add')) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверка корректности полей формы
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->checkTalkFields()) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-11-04 12:36:08 +02:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем разрешено ли отправлять инбокс по времени
|
|
|
|
|
*/
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if (!$this->ACL_CanSendTalkTime($this->oUserCurrent)) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('talk.notices.time_limit'),$this->Lang_Get('error'));
|
2009-11-04 12:36:08 +02:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отправляем письмо
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if ($oTalk=$this->Talk_SendTalk($this->Text_Parser(strip_tags(getRequestStr('talk_title'))),$this->Text_Parser(getRequestStr('talk_text')),$this->oUserCurrent,$this->aUsersId)) {
|
2014-02-21 09:45:17 +02:00
|
|
|
|
/**
|
|
|
|
|
* Фиксируем ID у media файлов
|
|
|
|
|
*/
|
|
|
|
|
$this->Media_ReplaceTargetTmpById('talk',$oTalk->getId());
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::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');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Чтение письма
|
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
protected function EventRead() {
|
2012-04-20 13:36:07 +03:00
|
|
|
|
$this->sMenuSubItemSelect='read';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем номер сообщения из УРЛ и проверяем существует ли оно
|
|
|
|
|
*/
|
|
|
|
|
$sTalkId=$this->GetParam(0);
|
2009-07-05 00:41:42 +03:00
|
|
|
|
if (!($oTalk=$this->Talk_GetTalkById($sTalkId))) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь есть в переписке?
|
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь активен в переписке?
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
if($oTalkUser->getUserActive()!=ModuleTalk::TALK_USER_ACTIVE){
|
2009-08-25 21:05:59 +03:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Достаём комменты к сообщению
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$aReturn=$this->Comment_GetCommentsByTargetId($oTalk->getId(),'talk');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$iMaxIdComment=$aReturn['iMaxIdComment'];
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$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-08-27 17:10:50 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oTalk->getTitle());
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Viewer_Assign('oTalk',$oTalk);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_Assign('aComments',$aComments);
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$this->Viewer_Assign('iMaxIdComment',$iMaxIdComment);
|
2009-09-04 17:57:34 +03:00
|
|
|
|
/**
|
|
|
|
|
* Подсчитываем нужно ли отображать комментарии.
|
|
|
|
|
* Комментарии не отображаются, если у вестки только один читатель
|
|
|
|
|
* и ранее созданных комментариев нет.
|
|
|
|
|
*/
|
|
|
|
|
if(count($aComments)==0) {
|
|
|
|
|
$iActiveSpeakers=0;
|
|
|
|
|
foreach((array)$oTalk->getTalkUsers() as $oTalkUser) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if( ($oTalkUser->getUserId()!=$this->oUserCurrent->getId())
|
2010-05-27 17:02:43 +03:00
|
|
|
|
&& $oTalkUser->getUserActive()==ModuleTalk::TALK_USER_ACTIVE ){
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$iActiveSpeakers++;
|
|
|
|
|
break;
|
2009-09-04 17:57:34 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if($iActiveSpeakers==0) {
|
|
|
|
|
$this->Viewer_Assign('bNoComments',true);
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-06-30 06:02:51 +03:00
|
|
|
|
|
2014-06-11 12:17:16 +03:00
|
|
|
|
$this->SetTemplateAction('talk');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверка полей при создании письма
|
|
|
|
|
*
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
protected function checkTalkFields() {
|
2009-10-20 02:42:23 +03:00
|
|
|
|
$this->Security_ValidateSendForm();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
|
|
|
|
$bOk=true;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли заголовок
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!func_check(getRequestStr('talk_title'),'text',2,200)) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('talk.add.notices.title_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли содержание топика
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!func_check(getRequestStr('talk_text'),'text',2,3000)) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('talk.add.notices.text_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Проверяем адресатов
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
$sUsers=getRequest('talk_users');
|
2012-07-08 11:50:36 +03:00
|
|
|
|
$aUsers=explode(',',(string)$sUsers);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$aUsersNew=array();
|
2009-08-27 04:05:34 +03:00
|
|
|
|
$aUserInBlacklist = $this->Talk_GetBlacklistByTargetId($this->oUserCurrent->getId());
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->aUsersId=array();
|
|
|
|
|
foreach ($aUsers as $sUser) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$sUser=trim($sUser);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if ($sUser=='' or strtolower($sUser)==strtolower($this->oUserCurrent->getLogin())) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if ($oUser=$this->User_GetUserByLogin($sUser) and $oUser->getActivate()==1) {
|
2009-08-27 04:05:34 +03:00
|
|
|
|
// Проверяем, попал ли отправиль в блек лист
|
|
|
|
|
if(!in_array($oUser->getId(),$aUserInBlacklist)) {
|
|
|
|
|
$this->aUsersId[]=$oUser->getId();
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError(
|
|
|
|
|
str_replace(
|
2009-08-27 22:54:31 +03:00
|
|
|
|
'login',
|
2009-08-27 04:05:34 +03:00
|
|
|
|
$oUser->getLogin(),
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.blacklist.notices.blocked',array('login'=>htmlspecialchars($oUser->getLogin())))
|
2009-08-27 04:05:34 +03:00
|
|
|
|
),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
$bOk=false;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_not_found').' «'.htmlspecialchars($sUser).'»',$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
|
|
|
|
$aUsersNew[]=$sUser;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
if (!count($aUsersNew)) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$_REQUEST['talk_users']='';
|
|
|
|
|
$bOk=false;
|
|
|
|
|
} else {
|
2012-01-08 17:25:59 +02:00
|
|
|
|
if (count($aUsersNew)>Config::Get('module.talk.max_users') and !$this->oUserCurrent->isAdministrator()) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_many'),$this->Lang_Get('error'));
|
2012-01-08 17:25:59 +02:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$_REQUEST['talk_users']=join(',',$aUsersNew);
|
|
|
|
|
}
|
2010-02-06 14:47:19 +02:00
|
|
|
|
/**
|
|
|
|
|
* Выполнение хуков
|
|
|
|
|
*/
|
2010-02-06 19:47:12 +02:00
|
|
|
|
$this->Hook_Run('check_talk_fields', array('bOk'=>&$bOk));
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
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() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$idCommentLast=getRequestStr('idCommentLast');
|
2009-07-05 00:41:42 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверям авторизован ли пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем разговор
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!($oTalk=$this->Talk_GetTalkById(getRequestStr('idTarget')))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
|
|
|
|
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем комментарии
|
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$aReturn=$this->Comment_GetCommentsNewByTargetId($oTalk->getId(),'talk',$idCommentLast);
|
|
|
|
|
$iMaxIdComment=$aReturn['iMaxIdComment'];
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отмечаем дату прочтения письма
|
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$oTalkUser->setDateLast(date("Y-m-d H:i:s"));
|
|
|
|
|
if ($iMaxIdComment!=0) {
|
|
|
|
|
$oTalkUser->setCommentIdLast($iMaxIdComment);
|
|
|
|
|
}
|
|
|
|
|
$oTalkUser->setCommentCountNew(0);
|
|
|
|
|
$this->Talk_UpdateTalkUser($oTalkUser);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$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(),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-09-20 21:47:25 +03:00
|
|
|
|
$this->Viewer_AssignAjax('aComments',$aComments);
|
|
|
|
|
$this->Viewer_AssignAjax('iMaxIdComment',$iMaxIdComment);
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Обработка добавление комментария к письму через ajax
|
2009-07-05 00:41:42 +03:00
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxAddComment() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$this->SubmitComment();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-07-05 00:41:42 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Обработка добавление комментария к письму
|
|
|
|
|
*
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
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'));
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем разговор
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!($oTalk=$this->Talk_GetTalkById(getRequestStr('cmt_target_id')))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
|
|
|
|
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-11-04 20:24:21 +02:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем разрешено ли отправлять инбокс по времени
|
|
|
|
|
*/
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if (!$this->ACL_CanPostTalkCommentTime($this->oUserCurrent)) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('talk.add.notices.time_limit'),$this->Lang_Get('error'));
|
2009-11-04 20:24:21 +02:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-07-05 00:41:42 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Проверяем текст комментария
|
|
|
|
|
*/
|
2014-04-25 08:24:15 +03:00
|
|
|
|
$sText=getRequestStr('comment_text');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if (!func_check($sText,'text',2,3000)) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('talk.message.notices.error_text'),$this->Lang_Get('error'));
|
2009-07-05 00:41:42 +03:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Проверям на какой коммент отвечаем
|
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$sParentId=(int)getRequest('reply');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if (!func_check($sParentId,'id')) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2009-07-05 00:41:42 +03:00
|
|
|
|
}
|
|
|
|
|
$oCommentParent=null;
|
|
|
|
|
if ($sParentId!=0) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Проверяем существует ли комментарий на который отвечаем
|
|
|
|
|
*/
|
|
|
|
|
if (!($oCommentParent=$this->Comment_GetCommentById($sParentId))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Проверяем из одного топика ли новый коммент и тот на который отвечаем
|
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
if ($oCommentParent->getTargetId()!=$oTalk->getId()) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
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
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Корневой комментарий
|
|
|
|
|
*/
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$sParentId=null;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Проверка на дублирующий коммент
|
|
|
|
|
*/
|
|
|
|
|
if ($this->Comment_GetCommentUnique($oTalk->getId(),'talk',$this->oUserCurrent->getId(),$sParentId,md5($sText))) {
|
2014-07-28 19:55:18 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic.comments.notices.spam'),$this->Lang_Get('error'));
|
2009-07-05 00:41:42 +03:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Создаём коммент
|
|
|
|
|
*/
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$oCommentNew=Engine::GetEntity('Comment');
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$oCommentNew->setTargetId($oTalk->getId());
|
|
|
|
|
$oCommentNew->setTargetType('talk');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$oCommentNew->setUserId($this->oUserCurrent->getId());
|
2014-04-25 08:24:15 +03:00
|
|
|
|
$oCommentNew->setText($this->Text_Parser($sText));
|
|
|
|
|
$oCommentNew->setTextSource($sText);
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$oCommentNew->setDate(date("Y-m-d H:i:s"));
|
|
|
|
|
$oCommentNew->setUserIp(func_getIp());
|
|
|
|
|
$oCommentNew->setPid($sParentId);
|
|
|
|
|
$oCommentNew->setTextHash(md5($sText));
|
2012-01-08 08:40:18 +02:00
|
|
|
|
$oCommentNew->setPublish(1);
|
2009-07-05 00:41:42 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Добавляем коммент
|
|
|
|
|
*/
|
2012-07-26 13:51:31 +03:00
|
|
|
|
$this->Hook_Run('talk_comment_add_before', array('oCommentNew'=>$oCommentNew,'oCommentParent'=>$oCommentParent,'oTalk'=>$oTalk));
|
2009-07-05 00:41:42 +03:00
|
|
|
|
if ($this->Comment_AddComment($oCommentNew)) {
|
2012-07-26 13:51:31 +03:00
|
|
|
|
$this->Hook_Run('talk_comment_add_after', array('oCommentNew'=>$oCommentNew,'oCommentParent'=>$oCommentParent,'oTalk'=>$oTalk));
|
|
|
|
|
|
2009-09-20 21:47:25 +03:00
|
|
|
|
$this->Viewer_AssignAjax('sCommentId',$oCommentNew->getId());
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$oTalk->setDateLast(date("Y-m-d H:i:s"));
|
2012-04-03 07:19:39 +03:00
|
|
|
|
$oTalk->setUserIdLast($oCommentNew->getUserId());
|
2012-04-09 12:39:40 +03:00
|
|
|
|
$oTalk->setCommentIdLast($oCommentNew->getId());
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$oTalk->setCountComment($oTalk->getCountComment()+1);
|
|
|
|
|
$this->Talk_UpdateTalk($oTalk);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* Отсылаем уведомления всем адресатам
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$aUsersTalk=$this->Talk_GetUsersTalk($oTalk->getId(), ModuleTalk::TALK_USER_ACTIVE);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2009-07-05 00:41:42 +03:00
|
|
|
|
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
|
|
|
|
/**
|
|
|
|
|
* Увеличиваем число новых комментов
|
|
|
|
|
*/
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Talk_increaseCountCommentNew($oTalk->getId(),$oCommentNew->getUserId());
|
2009-07-05 00:41:42 +03:00
|
|
|
|
} else {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-08-29 15:36:20 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавление нового пользователя(-лей) в блек лист (ajax)
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
public function AjaxAddToBlacklist() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$aUsers=getRequest('aUserList',null,'post');
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Валидация
|
|
|
|
|
*/
|
|
|
|
|
if ( ! is_array($aUsers) ) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем блекслист пользователя
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$aUserBlacklist = $this->Talk_GetBlacklistByUserId($this->oUserCurrent->getId());
|
|
|
|
|
|
|
|
|
|
$aResult=array();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем добавление по каждому из переданных логинов
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
foreach ($aUsers as $sUser) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$sUser=trim($sUser);
|
2009-08-28 21:24:07 +03:00
|
|
|
|
if ($sUser=='') {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь пытается добавить в блеклист самого себя,
|
|
|
|
|
* возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
if(strtolower($sUser)==strtolower($this->oUserCurrent->getLogin())) {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_list_add.notices.error_self')
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
|
|
|
|
continue;
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не найден или неактивен, возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
if ($oUser=$this->User_GetUserByLogin($sUser) and $oUser->getActivate()==1) {
|
|
|
|
|
if(!isset($aUserBlacklist[$oUser->getId()])) {
|
|
|
|
|
if($this->Talk_AddUserToBlackList($oUser->getId(),$this->oUserCurrent->getId())) {
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$oViewer = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$oViewer->Assign('oUser', $oUser);
|
2014-02-06 12:11:35 +02:00
|
|
|
|
$oViewer->Assign('bUserListSmallShowActions', true);
|
2014-02-06 11:43:12 +02:00
|
|
|
|
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>false,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('attention'),
|
2014-02-06 11:43:12 +02:00
|
|
|
|
'sMsg'=>$this->Lang_Get('common.success.add',array('login'=>htmlspecialchars($sUser))),
|
2009-08-28 21:24:07 +03:00
|
|
|
|
'sUserId'=>$oUser->getId(),
|
2012-04-20 13:52:17 +03:00
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser),
|
|
|
|
|
'sUserWebPath'=>$oUser->getUserWebPath(),
|
2014-02-06 11:43:12 +02:00
|
|
|
|
'sUserAvatar48'=>$oUser->getProfileAvatarPath(48),
|
2014-04-28 13:32:22 +03:00
|
|
|
|
'sHtml'=>$oViewer->Fetch("components/user_list_small/user_list_small_item.tpl")
|
2009-08-28 21:24:07 +03:00
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
|
|
|
|
'sMsg'=>$this->Lang_Get('system_error'),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser)
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
|
|
|
|
} else {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Попытка добавить уже существующего в блеклисте пользователя, возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_list_add.notices.error_already_added',array('login'=>htmlspecialchars($sUser))),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser)
|
2009-08-28 21:24:07 +03:00
|
|
|
|
);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_not_found',array('login'=>htmlspecialchars($sUser))),
|
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser)
|
2009-08-28 21:24:07 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передаем во вьевер массив с результатами обработки по каждому пользователю
|
|
|
|
|
*/
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$this->Viewer_AssignAjax('aUserList',$aResult);
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
2009-08-29 15:36:20 +03:00
|
|
|
|
/**
|
|
|
|
|
* Удаление пользователя из блек листа (ajax)
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
public function AjaxDeleteFromBlacklist() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$iUserId=getRequestStr('iUserId',null,'post');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('need_authorization'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не существуем, возращаем ошибку
|
|
|
|
|
*/
|
2014-02-06 11:43:12 +02:00
|
|
|
|
if (!$oUserTarget=$this->User_GetUserById($iUserId)) {
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$this->Message_AddErrorSingle(
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$this->Lang_Get('user_not_found_by_id',array('id'=>htmlspecialchars($iUserId))),
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Lang_Get('error')
|
2009-08-28 21:24:07 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем блеклист пользователя
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$aBlacklist=$this->Talk_GetBlacklistByUserId($this->oUserCurrent->getId());
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если указанный пользователь не найден в блекслисте, возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-28 21:24:07 +03:00
|
|
|
|
if (!isset($aBlacklist[$oUserTarget->getId()])) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
'talk.blacklist.notices.user_not_found',
|
2009-08-28 21:24:07 +03:00
|
|
|
|
array('login'=>$oUserTarget->getLogin())
|
|
|
|
|
),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-08-28 21:24:07 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Производим удаление пользователя из блекслиста
|
|
|
|
|
*/
|
2014-02-06 11:43:12 +02:00
|
|
|
|
if(!$this->Talk_DeleteUserFromBlacklist($iUserId,$this->oUserCurrent->getId())) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-08-28 21:24:07 +03:00
|
|
|
|
$this->Message_AddNoticeSingle(
|
|
|
|
|
$this->Lang_Get(
|
2014-02-06 11:43:12 +02:00
|
|
|
|
'common.success.remove',
|
2009-08-28 21:24:07 +03:00
|
|
|
|
array('login'=>$oUserTarget->getLogin())
|
|
|
|
|
),
|
|
|
|
|
$this->Lang_Get('attention')
|
|
|
|
|
);
|
2009-08-29 15:36:20 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удаление участника разговора (ajax)
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
public function AjaxDeleteTalkUser() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$iUserId=getRequestStr('iUserId',null,'post');
|
|
|
|
|
$iTalkId=getRequestStr('iTargetId',null,'post');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('need_authorization'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
2009-10-11 00:36:03 +03:00
|
|
|
|
return;
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если удаляемый участник не существует в базе данных, возвращаем ошибку
|
|
|
|
|
*/
|
2014-02-06 11:43:12 +02:00
|
|
|
|
if (!$oUserTarget=$this->User_GetUserById($iUserId)) {
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$this->Message_AddErrorSingle(
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$this->Lang_Get('user_not_found_by_id',array('id'=>htmlspecialchars($iUserId))),
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Lang_Get('error')
|
2009-08-29 00:32:10 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если разговор не найден, или пользователь не является его автором (либо админом), возвращаем ошибку
|
|
|
|
|
*/
|
2014-02-06 11:43:12 +02:00
|
|
|
|
if((!$oTalk=$this->Talk_GetTalkById($iTalkId))
|
2009-10-11 00:36:03 +03:00
|
|
|
|
|| ( ($oTalk->getUserId()!=$this->oUserCurrent->getId()) && !$this->oUserCurrent->isAdministrator() ) ) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Message_AddErrorSingle(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.notices.not_found'),
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список всех участников разговора
|
|
|
|
|
*/
|
|
|
|
|
$aTalkUsers=$oTalk->getTalkUsers();
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не является участником разговора или удалил себя самостоятельно возвращаем ошибку
|
|
|
|
|
*/
|
2014-02-06 11:43:12 +02:00
|
|
|
|
if(!isset($aTalkUsers[$iUserId])
|
|
|
|
|
|| $aTalkUsers[$iUserId]->getUserActive()==ModuleTalk::TALK_USER_DELETE_BY_SELF) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
'talk.users.notices.user_not_found',
|
2012-05-04 13:12:21 +03:00
|
|
|
|
array('login'=>$oUserTarget->getLogin())
|
|
|
|
|
),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Удаляем пользователя из разговора, если удаление прошло неудачно - возвращаем системную ошибку
|
|
|
|
|
*/
|
2014-02-06 11:43:12 +02:00
|
|
|
|
if(!$this->Talk_DeleteTalkUserByArray($iTalkId,$iUserId,ModuleTalk::TALK_USER_DELETE_BY_AUTHOR)) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
|
|
|
|
$this->Message_AddNoticeSingle(
|
|
|
|
|
$this->Lang_Get(
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'common.success.remove',
|
2009-08-29 00:32:10 +03:00
|
|
|
|
array('login'=>$oUserTarget->getLogin())
|
|
|
|
|
),
|
|
|
|
|
$this->Lang_Get('attention')
|
|
|
|
|
);
|
|
|
|
|
}
|
2009-08-29 15:36:20 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавление нового участника разговора (ajax)
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
public function AjaxAddTalkUser() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$aUsers=getRequest('aUserList',null,'post');
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$idTalk=getRequestStr('iTargetId',null,'post');
|
2014-04-03 10:36:30 +03:00
|
|
|
|
/**
|
|
|
|
|
* Валидация
|
|
|
|
|
*/
|
|
|
|
|
if ( ! is_array($aUsers) ) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('need_authorization'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
return;
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если разговор не найден, или пользователь не является его автором (или админом), возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if((!$oTalk=$this->Talk_GetTalkById($idTalk))
|
2009-10-11 00:36:03 +03:00
|
|
|
|
|| ( ($oTalk->getUserId()!=$this->oUserCurrent->getId()) && !$this->oUserCurrent->isAdministrator() ) ) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Message_AddErrorSingle(
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Lang_Get('talk.notices.not_found'),
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список всех участников разговора
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$aTalkUsers=$oTalk->getTalkUsers();
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список пользователей, которые не принимают письма
|
|
|
|
|
*/
|
2012-01-14 16:36:46 +02:00
|
|
|
|
$aUserInBlacklist = $this->Talk_GetBlacklistByTargetId($this->oUserCurrent->getId());
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Ограничения на максимальное число участников разговора
|
|
|
|
|
*/
|
2012-01-14 16:36:46 +02:00
|
|
|
|
if (count($aTalkUsers)>=Config::Get('module.talk.max_users') and !$this->oUserCurrent->isAdministrator()) {
|
2014-07-22 19:16:27 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_many'),$this->Lang_Get('error'));
|
2012-01-14 16:36:46 +02:00
|
|
|
|
return;
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем добавление по каждому переданному логину пользователя
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
foreach ($aUsers as $sUser) {
|
|
|
|
|
$sUser=trim($sUser);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
if($sUser=='') {
|
|
|
|
|
continue;
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Попытка добавить себя
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
if (strtolower($sUser)==strtolower($this->oUserCurrent->getLogin())) {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_list_add.notices.error_self')
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
2009-08-29 00:32:10 +03:00
|
|
|
|
continue;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
|
|
|
|
if ( ($oUser=$this->User_GetUserByLogin($sUser))
|
|
|
|
|
&& ($oUser->getActivate()==1) ) {
|
2009-08-29 00:32:10 +03:00
|
|
|
|
if(!in_array($oUser->getId(),$aUserInBlacklist)) {
|
|
|
|
|
if(array_key_exists($oUser->getId(),$aTalkUsers)) {
|
|
|
|
|
switch($aTalkUsers[$oUser->getId()]->getUserActive()) {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь ранее был удален админом разговора, то добавляем его снова
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ModuleTalk::TALK_USER_DELETE_BY_AUTHOR:
|
2009-08-29 00:32:10 +03:00
|
|
|
|
if (
|
|
|
|
|
$this->Talk_AddTalkUser(
|
2009-09-08 15:02:51 +03:00
|
|
|
|
Engine::GetEntity('Talk_TalkUser',
|
2012-05-04 13:12:21 +03:00
|
|
|
|
array(
|
|
|
|
|
'talk_id'=>$idTalk,
|
|
|
|
|
'user_id'=>$oUser->getId(),
|
|
|
|
|
'date_last'=>null,
|
|
|
|
|
'talk_user_active'=>ModuleTalk::TALK_USER_ACTIVE
|
|
|
|
|
)
|
2009-08-29 00:32:10 +03:00
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
$this->Notify_SendTalkNew($oUser,$this->oUserCurrent,$oTalk);
|
2014-02-06 11:43:12 +02:00
|
|
|
|
|
|
|
|
|
$oViewer = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$oViewer->Assign('oUser', $oUser);
|
2014-02-06 12:11:35 +02:00
|
|
|
|
$oViewer->Assign('bUserListSmallShowActions', true);
|
2014-02-06 11:43:12 +02:00
|
|
|
|
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>false,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('attention'),
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_list_add.notices.success_add',array('login',htmlspecialchars($sUser))),
|
2014-04-03 10:36:30 +03:00
|
|
|
|
'iUserId'=>$oUser->getId(),
|
2009-08-29 00:32:10 +03:00
|
|
|
|
'sUserLogin'=>$oUser->getLogin(),
|
2012-04-20 13:52:17 +03:00
|
|
|
|
'sUserLink'=>$oUser->getUserWebPath(),
|
|
|
|
|
'sUserWebPath'=>$oUser->getUserWebPath(),
|
2014-02-06 11:43:12 +02:00
|
|
|
|
'sUserAvatar48'=>$oUser->getProfileAvatarPath(48),
|
2014-07-23 19:36:13 +03:00
|
|
|
|
'sHtml'=>$oViewer->Fetch("components/talk/talk-users-item.tpl")
|
2009-08-29 00:32:10 +03:00
|
|
|
|
);
|
|
|
|
|
$bState=true;
|
|
|
|
|
} else {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
|
|
|
|
'sMsg'=>$this->Lang_Get('system_error')
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь является активным участником разговора, возвращаем ошибку
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ModuleTalk::TALK_USER_ACTIVE:
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_list_add.notices.error_already_added',array('login'=>htmlspecialchars($sUser)))
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
2009-08-29 00:32:10 +03:00
|
|
|
|
break;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ModuleTalk::TALK_USER_DELETE_BY_SELF:
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-07-22 19:16:27 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('talk.users.notices.deleted',array('login'=>htmlspecialchars($sUser)))
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
2009-08-29 00:32:10 +03:00
|
|
|
|
break;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2009-08-29 00:32:10 +03:00
|
|
|
|
default:
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
|
|
|
|
'sMsg'=>$this->Lang_Get('system_error')
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
|
|
|
|
} elseif (
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$this->Talk_AddTalkUser(
|
|
|
|
|
Engine::GetEntity('Talk_TalkUser',
|
|
|
|
|
array(
|
|
|
|
|
'talk_id'=>$idTalk,
|
|
|
|
|
'user_id'=>$oUser->getId(),
|
|
|
|
|
'date_last'=>null,
|
|
|
|
|
'talk_user_active'=>ModuleTalk::TALK_USER_ACTIVE
|
|
|
|
|
)
|
2009-08-29 00:32:10 +03:00
|
|
|
|
)
|
2012-05-04 13:12:21 +03:00
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
$this->Notify_SendTalkNew($oUser,$this->oUserCurrent,$oTalk);
|
2014-04-03 10:36:30 +03:00
|
|
|
|
|
|
|
|
|
$oViewer = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$oViewer->Assign('oUser', $oUser);
|
|
|
|
|
$oViewer->Assign('bUserListSmallShowActions', true);
|
|
|
|
|
|
2012-05-04 13:12:21 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>false,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('attention'),
|
2014-04-08 14:44:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_list_add.notices.success_add',array('login',htmlspecialchars($sUser))),
|
2014-04-03 10:36:30 +03:00
|
|
|
|
'iUserId'=>$oUser->getId(),
|
2014-07-23 19:36:13 +03:00
|
|
|
|
'sHtml'=>$oViewer->Fetch("components/talk/talk-users-item.tpl")
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
|
|
|
|
$bState=true;
|
2009-08-29 00:32:10 +03:00
|
|
|
|
} else {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
|
|
|
|
'sMsg'=>$this->Lang_Get('system_error')
|
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-08-29 00:32:10 +03:00
|
|
|
|
} else {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем пользователь не принимает сообщения
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-07-22 19:16:27 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('talk.blacklist.notices.blocked',array('login'=>htmlspecialchars($sUser)))
|
2012-05-04 13:12:21 +03:00
|
|
|
|
);
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
|
|
|
|
} else {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь не найден в базе данных или не активен
|
|
|
|
|
*/
|
2009-08-29 00:32:10 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_not_found',array('login'=>htmlspecialchars($sUser)))
|
2009-08-29 00:32:10 +03:00
|
|
|
|
);
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передаем во вьевер массив результатов обработки по каждому пользователю
|
|
|
|
|
*/
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$this->Viewer_AssignAjax('aUserList',$aResult);
|
2009-08-29 00:32:10 +03:00
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Возвращает количество новых сообщений
|
|
|
|
|
*/
|
2010-10-02 17:33:51 +03:00
|
|
|
|
public function AjaxNewMessages() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-10-02 17:33:51 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2012-05-04 13:12:21 +03:00
|
|
|
|
|
2010-10-02 17:33:51 +03:00
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$iCountTalkNew=$this->Talk_GetCountTalkNew($this->oUserCurrent->getId());
|
|
|
|
|
$this->Viewer_AssignAjax('iCountTalkNew',$iCountTalkNew);
|
|
|
|
|
}
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обработка завершения работу экшена
|
|
|
|
|
*/
|
2010-02-06 02:09:44 +02:00
|
|
|
|
public function EventShutdown() {
|
2009-08-24 15:23:52 +03:00
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
return ;
|
2012-05-04 13:12:21 +03:00
|
|
|
|
}
|
2009-08-24 15:23:52 +03:00
|
|
|
|
$iCountTalkFavourite=$this->Talk_GetCountTalksFavouriteByUserId($this->oUserCurrent->getId());
|
|
|
|
|
$this->Viewer_Assign('iCountTalkFavourite',$iCountTalkFavourite);
|
2012-04-05 16:29:10 +03:00
|
|
|
|
|
|
|
|
|
$iCountTopicFavourite=$this->Topic_GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId());
|
|
|
|
|
$iCountTopicUser=$this->Topic_GetCountTopicsPersonalByUser($this->oUserCurrent->getId(),1);
|
|
|
|
|
$iCountCommentUser=$this->Comment_GetCountCommentsByUserId($this->oUserCurrent->getId(),'topic');
|
|
|
|
|
$iCountCommentFavourite=$this->Comment_GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId());
|
|
|
|
|
$iCountNoteUser=$this->User_GetCountUserNotesByUserId($this->oUserCurrent->getId());
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('oUserProfile',$this->oUserCurrent);
|
|
|
|
|
$this->Viewer_Assign('iCountWallUser',$this->Wall_GetCountWall(array('wall_user_id'=>$this->oUserCurrent->getId(),'pid'=>null)));
|
|
|
|
|
/**
|
|
|
|
|
* Общее число публикация и избранного
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('iCountCreated',$iCountNoteUser+$iCountTopicUser+$iCountCommentUser);
|
|
|
|
|
$this->Viewer_Assign('iCountFavourite',$iCountCommentFavourite+$iCountTopicFavourite);
|
|
|
|
|
$this->Viewer_Assign('iCountFriendsUser',$this->User_GetCountUsersFriend($this->oUserCurrent->getId()));
|
|
|
|
|
|
2012-04-20 13:36:07 +03:00
|
|
|
|
$this->Viewer_Assign('sMenuSubItemSelect',$this->sMenuSubItemSelect);
|
2009-08-29 15:36:20 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передаем во вьевер константы состояний участников разговора
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$this->Viewer_Assign('TALK_USER_ACTIVE',ModuleTalk::TALK_USER_ACTIVE);
|
|
|
|
|
$this->Viewer_Assign('TALK_USER_DELETE_BY_SELF',ModuleTalk::TALK_USER_DELETE_BY_SELF);
|
|
|
|
|
$this->Viewer_Assign('TALK_USER_DELETE_BY_AUTHOR',ModuleTalk::TALK_USER_DELETE_BY_AUTHOR);
|
2009-08-24 15:23:52 +03:00
|
|
|
|
}
|
2014-01-28 09:47:36 +02:00
|
|
|
|
}
|