1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-28 20:45:00 +03:00
ifhub.club/application/classes/actions/ActionStream.class.php
2014-02-07 17:46:33 +07:00

389 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*-------------------------------------------------------
*
* 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
*
---------------------------------------------------------
*/
/**
* Экшен обработки ленты активности
*
* @package actions
* @since 1.0
*/
class ActionStream extends Action {
/**
* Текущий пользователь
*
* @var ModuleUser_EntityUser|null
*/
protected $oUserCurrent;
/**
* Какое меню активно
*
* @var string
*/
protected $sMenuItemSelect='user';
/**
* Инициализация
*
*/
public function Init() {
/**
* Личная лента доступна только для авторизованных, для гостей показываем общую ленту
*/
$this->oUserCurrent = $this->User_getUserCurrent();
if ($this->oUserCurrent) {
$this->SetDefaultEvent('user');
} else {
$this->SetDefaultEvent('all');
}
$this->Viewer_Assign('aStreamEventTypes', $this->Stream_getEventTypes());
$this->Viewer_Assign('sMenuHeadItemSelect', 'stream');
/**
* Загружаем в шаблон JS текстовки
*/
$this->Lang_AddLangJs(array(
'stream_subscribes_already_subscribed','error'
));
}
/**
* Регистрация евентов
*
*/
protected function RegisterEvent() {
$this->AddEvent('user', 'EventUser');
$this->AddEvent('all', 'EventAll');
$this->AddEvent('subscribe', 'EventSubscribe'); // TODO: возможно нужно удалить
$this->AddEvent('ajaxadduser', 'EventAjaxAddUser');
$this->AddEvent('ajaxremoveuser', 'EventAjaxRemoveUser');
$this->AddEvent('switchEventType', 'EventSwitchEventType');
$this->AddEvent('get_more', 'EventGetMore');
$this->AddEvent('get_more_user', 'EventGetMoreUser');
$this->AddEvent('get_more_all', 'EventGetMoreAll');
}
/**
* Список событий в ленте активности пользователя
*
*/
protected function EventUser() {
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
$this->Viewer_AddBlock('right','activitySettings');
$this->Viewer_AddBlock('right','activityUsers');
/**
* Читаем события
*/
$aEvents = $this->Stream_Read();
$this->Viewer_Assign('bDisableGetMoreButton', $this->Stream_GetCountByReaderId($this->oUserCurrent->getId()) < Config::Get('module.stream.count_default'));
$this->Viewer_Assign('aStreamEvents', $aEvents);
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_Assign('iStreamLastId', $oEvenLast->getId());
}
}
/**
* Список событий в общей ленте активности сайта
*
*/
protected function EventAll() {
$this->sMenuItemSelect='all';
/**
* Читаем события
*/
$aEvents = $this->Stream_ReadAll();
$this->Viewer_Assign('bDisableGetMoreButton', $this->Stream_GetCountAll() < Config::Get('module.stream.count_default'));
$this->Viewer_Assign('aStreamEvents', $aEvents);
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_Assign('iStreamLastId', $oEvenLast->getId());
}
}
/**
* Активаци/деактивация типа события
*
*/
protected function EventSwitchEventType() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
if (!getRequest('type')) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
}
/**
* Активируем/деактивируем тип
*/
$this->Stream_switchUserEventType($this->oUserCurrent->getId(), getRequestStr('type'));
$this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention'));
}
/**
* Погрузка событий (замена постраничности)
*
*/
protected function EventGetMore() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
/**
* Необходимо передать последний просмотренный ID событий
*/
$iFromId = getRequestStr('iLastId');
if (!$iFromId) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
/**
* Получаем события
*/
$aEvents = $this->Stream_Read(null, $iFromId);
$oViewer=$this->Viewer_GetLocalViewer();
$oViewer->Assign('aStreamEvents', $aEvents);
$oViewer->Assign('sDateLast', getRequestStr('sDateLast'));
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId());
}
/**
* Возвращаем данные в ajax ответе
*/
$this->Viewer_AssignAjax('result', $oViewer->Fetch('actions/ActionStream/events.tpl'));
$this->Viewer_AssignAjax('events_count', count($aEvents));
}
/**
* Погрузка событий для всего сайта
*
*/
protected function EventGetMoreAll() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Необходимо передать последний просмотренный ID событий
*/
$iFromId = getRequestStr('iLastId');
if (!$iFromId) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
/**
* Получаем события
*/
$aEvents = $this->Stream_ReadAll(null, $iFromId);
$oViewer=$this->Viewer_GetLocalViewer();
$oViewer->Assign('aStreamEvents', $aEvents);
$oViewer->Assign('sDateLast', getRequestStr('sDateLast'));
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId());
}
/**
* Возвращаем данные в ajax ответе
*/
$this->Viewer_AssignAjax('result', $oViewer->Fetch('actions/ActionStream/events.tpl'));
$this->Viewer_AssignAjax('events_count', count($aEvents));
}
/**
* Подгрузка событий для пользователя
*
*/
protected function EventGetMoreUser() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Необходимо передать последний просмотренный ID событий
*/
$iFromId = getRequestStr('iLastId');
if (!$iFromId) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
if (!($oUser=$this->User_GetUserById(getRequestStr('iUserId')))) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
/**
* Получаем события
*/
$aEvents = $this->Stream_ReadByUserId($oUser->getId(), null, $iFromId);
$oViewer=$this->Viewer_GetLocalViewer();
$oViewer->Assign('aStreamEvents', $aEvents);
$oViewer->Assign('sDateLast', getRequestStr('sDateLast'));
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId());
}
/**
* Возвращаем данные в ajax ответе
*/
$this->Viewer_AssignAjax('result', $oViewer->Fetch('actions/ActionStream/events.tpl'));
$this->Viewer_AssignAjax('events_count', count($aEvents));
}
/**
* Подписка на пользователя по ID
*
*/
protected function EventSubscribe() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
/**
* Проверяем существование пользователя
*/
if (!$this->User_getUserById(getRequestStr('id'))) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
}
if ($this->oUserCurrent->getId() == getRequestStr('id')) {
$this->Message_AddError($this->Lang_Get('stream_error_subscribe_to_yourself'),$this->Lang_Get('error'));
return;
}
/**
* Подписываем на пользователя
*/
$this->Stream_subscribeUser($this->oUserCurrent->getId(), getRequestStr('id'));
$this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention'));
}
/**
* Подписка на пользователя по логину
*
*/
protected function EventAjaxAddUser() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
$sUsers=getRequestStr('sUserList',null,'post');
/**
* Если пользователь не авторизирован, возвращаем ошибку
*/
if (!$this->User_IsAuthorization()) {
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
return;
}
$aUsers=explode(',',$sUsers);
$aResult=array();
/**
* Обрабатываем добавление по каждому из переданных логинов
*/
foreach ($aUsers as $sUser) {
$sUser=trim($sUser);
if ($sUser=='') {
continue;
}
/**
* Если пользователь не найден или неактивен, возвращаем ошибку
*/
if ($oUser=$this->User_GetUserByLogin($sUser) and $oUser->getActivate()==1) {
$this->Stream_subscribeUser($this->oUserCurrent->getId(),$oUser->getId());
$oViewer = $this->Viewer_GetLocalViewer();
$oViewer->Assign('oUser', $oUser);
$oViewer->Assign('bUserListSmallShowActions', true);
$aResult[]=array(
'bStateError'=>false,
'sMsgTitle'=>$this->Lang_Get('attention'),
'sMsg'=>$this->Lang_Get('common.success.add',array('login'=>htmlspecialchars($sUser))),
'sUserId'=>$oUser->getId(),
'sUserLogin'=>htmlspecialchars($sUser),
'sUserWebPath'=>$oUser->getUserWebPath(),
'sUserAvatar48'=>$oUser->getProfileAvatarPath(48),
'sUserHtml'=>$oViewer->Fetch("user_list_small_item.tpl")
);
} else {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$this->Lang_Get('error'),
'sMsg'=>$this->Lang_Get('user_not_found',array('login'=>htmlspecialchars($sUser))),
'sUserLogin'=>htmlspecialchars($sUser)
);
}
}
/**
* Передаем во вьевер массив с результатами обработки по каждому пользователю
*/
$this->Viewer_AssignAjax('aUsers',$aResult);
}
/**
* Отписка от пользователя
*
*/
protected function EventAjaxRemoveUser() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
return $this->EventErrorDebug();
}
/**
* Пользователь с таким ID существует?
*/
if (!$this->User_GetUserById(getRequestStr('iUserId'))) {
return $this->EventErrorDebug();
}
/**
* Отписываем
*/
$this->Stream_unsubscribeUser($this->oUserCurrent->getId(), getRequestStr('iUserId'));
$this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention'));
}
/**
* Выполняется при завершении работы экшена
*
*/
public function EventShutdown() {
/**
* Загружаем в шаблон необходимые переменные
*/
$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
}
}