2011-05-23 16:55:40 +03:00
|
|
|
|
<?php
|
2011-08-28 19:52:30 +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
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
2011-05-23 16:55:40 +03:00
|
|
|
|
|
2011-08-28 19:52:30 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обрабатывает пользовательские ленты контента
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* @package actions
|
|
|
|
|
* @since 1.0
|
2011-08-28 19:52:30 +03:00
|
|
|
|
*/
|
|
|
|
|
class ActionUserfeed extends Action {
|
|
|
|
|
/**
|
|
|
|
|
* Текущий пользователь
|
|
|
|
|
*
|
2012-05-04 13:12:21 +03:00
|
|
|
|
* @var ModuleUser_EntityUser|null
|
2011-08-28 19:52:30 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $oUserCurrent;
|
2011-05-23 16:55:40 +03:00
|
|
|
|
|
2011-08-28 19:52:30 +03:00
|
|
|
|
/**
|
|
|
|
|
* Инициализация
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function Init() {
|
|
|
|
|
/**
|
|
|
|
|
* Доступ только у авторизованных пользователей
|
|
|
|
|
*/
|
|
|
|
|
$this->oUserCurrent = $this->User_getUserCurrent();
|
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->SetDefaultEvent('index');
|
2011-05-23 16:55:40 +03:00
|
|
|
|
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_Assign('sMenuItemSelect', 'feed');
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Регистрация евентов
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function RegisterEvent() {
|
|
|
|
|
$this->AddEvent('index', 'EventIndex');
|
|
|
|
|
$this->AddEvent('subscribe', 'EventSubscribe');
|
|
|
|
|
$this->AddEvent('subscribeByLogin', 'EventSubscribeByLogin');
|
|
|
|
|
$this->AddEvent('unsubscribe', 'EventUnSubscribe');
|
|
|
|
|
$this->AddEvent('get_more', 'EventGetMore');
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Выводит ленту контента(топики) для пользователя
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventIndex() {
|
|
|
|
|
/**
|
|
|
|
|
* Получаем топики
|
|
|
|
|
*/
|
|
|
|
|
$aTopics = $this->Userfeed_read($this->oUserCurrent->getId());
|
2012-06-10 11:33:03 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topics_list_show',array('aTopics'=>$aTopics));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_Assign('aTopics', $aTopics);
|
|
|
|
|
if (count($aTopics)) {
|
|
|
|
|
$this->Viewer_Assign('iUserfeedLastId', end($aTopics)->getId());
|
|
|
|
|
}
|
|
|
|
|
if (count($aTopics) < Config::Get('module.userfeed.count_default')) {
|
|
|
|
|
$this->Viewer_Assign('bDisableGetMoreButton', true);
|
|
|
|
|
} else {
|
|
|
|
|
$this->Viewer_Assign('bDisableGetMoreButton', false);
|
|
|
|
|
}
|
|
|
|
|
$this->SetTemplateAction('list');
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Подгрузка ленты топиков (замена постраничности)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventGetMore() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем последний просмотренный ID топика
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$iFromId = getRequestStr('last_id');
|
2011-08-28 19:52:30 +03:00
|
|
|
|
if (!$iFromId) {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем топики
|
|
|
|
|
*/
|
|
|
|
|
$aTopics = $this->Userfeed_read($this->oUserCurrent->getId(), null, $iFromId);
|
2012-06-10 11:33:03 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topics_list_show',array('aTopics'=>$aTopics));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем данные в ajax ответ
|
|
|
|
|
*/
|
|
|
|
|
$oViewer=$this->Viewer_GetLocalViewer();
|
2011-05-30 17:14:56 +03:00
|
|
|
|
$oViewer->Assign('aTopics', $aTopics);
|
2013-06-20 14:28:58 +03:00
|
|
|
|
$this->Viewer_AssignAjax('result', $oViewer->Fetch('topics/topic_list.tpl'));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_AssignAjax('topics_count', count($aTopics));
|
2011-05-30 17:14:56 +03:00
|
|
|
|
|
2011-08-28 19:52:30 +03:00
|
|
|
|
if (count($aTopics)) {
|
|
|
|
|
$this->Viewer_AssignAjax('iUserfeedLastId', end($aTopics)->getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Подписка на контент блога или пользователя
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventSubscribe() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем наличие ID блога или пользователя
|
|
|
|
|
*/
|
|
|
|
|
if (!getRequest('id')) {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
}
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sType = getRequestStr('type');
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$iType = null;
|
|
|
|
|
/**
|
|
|
|
|
* Определяем тип подписки
|
|
|
|
|
*/
|
|
|
|
|
switch($sType) {
|
|
|
|
|
case 'blogs':
|
|
|
|
|
$iType = ModuleUserfeed::SUBSCRIBE_TYPE_BLOG;
|
2011-08-30 09:12:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем существование блога
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!$this->Blog_GetBlogById(getRequestStr('id'))) {
|
2011-08-30 09:12:19 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-08-28 19:52:30 +03:00
|
|
|
|
break;
|
|
|
|
|
case 'users':
|
|
|
|
|
$iType = ModuleUserfeed::SUBSCRIBE_TYPE_USER;
|
2011-08-30 09:12:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем существование пользователя
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!$this->User_GetUserById(getRequestStr('id'))) {
|
2011-08-30 09:12:19 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if ($this->oUserCurrent->getId() == getRequestStr('id')) {
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('userfeed_error_subscribe_to_yourself'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Подписываем
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$this->Userfeed_subscribeUser($this->oUserCurrent->getId(), $iType, getRequestStr('id'));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention'));
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Подписка на пользвователя по логину
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventSubscribeByLogin() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли логин
|
|
|
|
|
*/
|
2012-07-08 11:50:36 +03:00
|
|
|
|
if (!getRequest('login') or !is_string(getRequest('login'))) {
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем существование прользователя
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oUser = $this->User_getUserByLogin(getRequestStr('login'));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
if (!$oUser) {
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('user_not_found',array('login'=>htmlspecialchars(getRequestStr('login')))),$this->Lang_Get('error'));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Не даем подписаться на самого себя
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent->getId() == $oUser->getId()) {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('userfeed_error_subscribe_to_yourself'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Подписываем
|
|
|
|
|
*/
|
|
|
|
|
$this->Userfeed_subscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_USER, $oUser->getId());
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем данные ajax ответ
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_AssignAjax('uid', $oUser->getId());
|
|
|
|
|
$this->Viewer_AssignAjax('user_login', $oUser->getLogin());
|
2012-04-20 13:52:17 +03:00
|
|
|
|
$this->Viewer_AssignAjax('user_web_path', $oUser->getUserWebPath());
|
|
|
|
|
$this->Viewer_AssignAjax('user_avatar_48', $oUser->getProfileAvatarPath(48));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_AssignAjax('lang_error_msg', $this->Lang_Get('userfeed_subscribes_already_subscribed'));
|
|
|
|
|
$this->Viewer_AssignAjax('lang_error_title', $this->Lang_Get('error'));
|
|
|
|
|
$this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention'));
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Отписка от блога или пользователя
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventUnsubscribe() {
|
2012-05-04 13:12:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
if (!getRequest('id')) {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sType = getRequestStr('type');
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$iType = null;
|
|
|
|
|
/**
|
|
|
|
|
* Определяем от чего отписываемся
|
|
|
|
|
*/
|
|
|
|
|
switch($sType) {
|
|
|
|
|
case 'blogs':
|
|
|
|
|
$iType = ModuleUserfeed::SUBSCRIBE_TYPE_BLOG;
|
|
|
|
|
break;
|
|
|
|
|
case 'users':
|
|
|
|
|
$iType = ModuleUserfeed::SUBSCRIBE_TYPE_USER;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Отписываем пользователя
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$this->Userfeed_unsubscribeUser($this->oUserCurrent->getId(), $iType, getRequestStr('id'));
|
2011-08-28 19:52:30 +03:00
|
|
|
|
$this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention'));
|
|
|
|
|
}
|
2012-06-19 12:17:33 +03:00
|
|
|
|
/**
|
|
|
|
|
* При завершении экшена загружаем в шаблон необходимые переменные
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function EventShutdown() {
|
|
|
|
|
/**
|
|
|
|
|
* Подсчитываем новые топики
|
|
|
|
|
*/
|
|
|
|
|
$iCountTopicsCollectiveNew=$this->Topic_GetCountTopicsCollectiveNew();
|
|
|
|
|
$iCountTopicsPersonalNew=$this->Topic_GetCountTopicsPersonalNew();
|
|
|
|
|
$iCountTopicsNew=$iCountTopicsCollectiveNew+$iCountTopicsPersonalNew;
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsCollectiveNew',$iCountTopicsCollectiveNew);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsPersonalNew',$iCountTopicsPersonalNew);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsNew',$iCountTopicsNew);
|
|
|
|
|
}
|
2011-05-23 16:55:40 +03:00
|
|
|
|
}
|