1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-08 01:14:24 +03:00
ifhub.club/application/classes/actions/ActionStream.class.php

399 lines
12 KiB
PHP
Raw Normal View History

2011-06-06 14:58:19 +03:00
<?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
*
---------------------------------------------------------
*/
2011-06-06 14:58:19 +03:00
/**
* Экшен обработки ленты активности
*
* @package actions
* @since 1.0
*/
class ActionStream extends Action {
/**
* Текущий пользователь
*
* @var ModuleUser_EntityUser|null
*/
protected $oUserCurrent;
/**
* Какое меню активно
*
* @var string
*/
protected $sMenuItemSelect='user';
2011-06-06 14:58:19 +03:00
/**
* Инициализация
*
*/
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());
2011-06-06 14:58:19 +03:00
$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');
2014-02-07 12:26:28 +02:00
$this->AddEvent('subscribe', 'EventSubscribe'); // TODO: возможно нужно удалить
$this->AddEvent('ajaxadduser', 'EventAjaxAddUser');
$this->AddEvent('ajaxremoveuser', 'EventAjaxRemoveUser');
$this->AddEvent('switchEventType', 'EventSwitchEventType');
$this->AddEvent('get_more_custom', 'EventGetMore');
$this->AddEvent('get_more_user', 'EventGetMoreUser');
$this->AddEvent('get_more_all', 'EventGetMoreAll');
}
2011-06-06 14:58:19 +03:00
/**
* Список событий в ленте активности пользователя
*
*/
protected function EventUser() {
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
2013-05-04 17:10:22 +03:00
$this->Viewer_AddBlock('right','activitySettings');
$this->Viewer_AddBlock('right','activityUsers');
/**
* Читаем события
*/
$aEvents = $this->Stream_Read();
2012-04-14 20:48:18 +03:00
$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());
$this->Viewer_Assign('sDateLast', $oEvenLast->getDateAdded());
}
}
/**
* Список событий в общей ленте активности сайта
*
*/
protected function EventAll() {
$this->sMenuItemSelect='all';
/**
* Читаем события
*/
$aEvents = $this->Stream_ReadAll();
2012-04-14 20:48:18 +03:00
$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());
$this->Viewer_Assign('sDateLast', $oEvenLast->getDateAdded());
}
}
/**
* Активаци/деактивация типа события
*
*/
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('last_id');
if (!$iFromId) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
/**
* Получаем события
*/
$aEvents = $this->Stream_Read(null, $iFromId);
2011-06-06 14:58:19 +03:00
$oViewer=$this->Viewer_GetLocalViewer();
$oViewer->Assign('aStreamEvents', $aEvents);
$oViewer->Assign('sDateLast', getRequestStr('sDateLast'));
$this->Viewer_AssignAjax('count_loaded', count($aEvents));
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_AssignAjax('last_id', $oEvenLast->getId());
}
/**
* Возвращаем данные в ajax ответе
*/
$this->Viewer_AssignAjax('html', $oViewer->Fetch('actions/ActionStream/events.tpl'));
}
/**
* Погрузка событий для всего сайта
*
*/
protected function EventGetMoreAll() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Необходимо передать последний просмотренный ID событий
*/
$iFromId = getRequestStr('last_id');
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'));
$this->Viewer_AssignAjax('count_loaded', count($aEvents));
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_AssignAjax('last_id', $oEvenLast->getId());
}
/**
* Возвращаем данные в ajax ответе
*/
$this->Viewer_AssignAjax('html', $oViewer->Fetch('actions/ActionStream/events.tpl'));
}
/**
* Подгрузка событий для пользователя
*
*/
protected function EventGetMoreUser() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Необходимо передать последний просмотренный ID событий
*/
$iFromId = getRequestStr('last_id');
if (!$iFromId) {
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return;
}
if (!($oUser=$this->User_GetUserById(getRequestStr('iTargetId')))) {
$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'));
$this->Viewer_AssignAjax('count_loaded', count($aEvents));
if (count($aEvents)) {
$oEvenLast=end($aEvents);
$this->Viewer_AssignAjax('last_id', $oEvenLast->getId());
}
/**
* Возвращаем данные в ajax ответе
*/
$this->Viewer_AssignAjax('html', $oViewer->Fetch('actions/ActionStream/events.tpl'));
}
/**
* Подписка на пользователя по 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')) {
2014-04-08 14:44:28 +03:00
$this->Message_AddError($this->Lang_Get('user_list_add.notices.error_self'),$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'));
}
/**
* Подписка на пользователя по логину
*
*/
2014-02-07 12:26:28 +02:00
protected function EventAjaxAddUser() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
$aUsers=getRequest('aUserList',null,'post');
/**
* Валидация
*/
if ( ! is_array($aUsers) ) {
return $this->EventErrorDebug();
}
/**
2014-02-07 12:26:28 +02:00
* Если пользователь не авторизирован, возвращаем ошибку
*/
2014-02-07 12:26:28 +02:00
if (!$this->User_IsAuthorization()) {
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
return;
}
2014-02-07 12:26:28 +02:00
$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),
2014-04-28 13:32:22 +03:00
'sHtml'=>$oViewer->Fetch("components/user_list_small/user_list_small_item.tpl")
2014-02-07 12:26:28 +02:00
);
} else {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$this->Lang_Get('error'),
'sMsg'=>$this->Lang_Get('user_not_found',array('login'=>htmlspecialchars($sUser))),
'sUserLogin'=>htmlspecialchars($sUser)
);
}
}
/**
2014-02-07 12:26:28 +02:00
* Передаем во вьевер массив с результатами обработки по каждому пользователю
*/
$this->Viewer_AssignAjax('aUserList',$aResult);
}
/**
* Отписка от пользователя
*
*/
2014-02-07 12:26:28 +02:00
protected function EventAjaxRemoveUser() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
2014-02-07 12:26:28 +02:00
return $this->EventErrorDebug();
}
/**
* Пользователь с таким ID существует?
*/
2014-02-07 12:26:28 +02:00
if (!$this->User_GetUserById(getRequestStr('iUserId'))) {
return $this->EventErrorDebug();
}
/**
* Отписываем
*/
2014-02-07 12:46:33 +02:00
$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);
}
}