ActionStream

Package actions
Inheritance class ActionStream » Action » LsObject
Since 1.0
Source Code /classes/actions/ActionStream.class.php
Экшен обработки ленты активности

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
aParams array Список параметров из URL Action
aParamsEventMatch array Список совпадений по регулярному выражению для евента Action
aRegisterEvent array Список зарегистрированных евентов Action
oEngine Engine|null Объект ядра Action
oUserCurrent ModuleUser_EntityUser|null Текущий пользователь ActionStream
sActionTemplate string|null Шаблон экшена Action
sCurrentAction null|string Текущий экшен Action
sCurrentEvent string|null Текущий евент Action
sCurrentEventName string|null Имя текущий евента Action
sDefaultEvent string|null Дефолтный евент Action
sMenuItemSelect string Какое меню активно ActionStream

Public Methods

Hide inherited methods

MethodDescriptionDefined By
EventShutdown() Выполняется при завершении работы экшена ActionStream
ExecEvent() Запускает евент на выполнение Action
GetActionClass() Получить каталог с шаблонами экшена(совпадает с именем класса) Action
GetCurrentEventName() Возвращает имя евента Action
GetDefaultEvent() Получает евент по умолчанию Action
GetParam() Получает параметр из URL по его номеру, если его нет то null Action
GetParams() Получает список параметров из УРЛ Action
GetTemplate() Получить шаблон Action
Init() Инициализация ActionStream
SetDefaultEvent() Устанавливает евент по умолчанию Action
SetParam() Установить значение параметра(эмуляция параметра в URL). Action
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Action
__construct() Конструктор Action

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
AddEvent() Добавляет евент в экшен Action
AddEventPreg() Добавляет евент в экшен, используя регулярное вырожение для евента и параметров Action
EventAll() Список событий в общей ленте активности сайта ActionStream
EventGetMore() Погрузка событий (замена постраничности) ActionStream
EventGetMoreAll() Погрузка событий для всего сайта ActionStream
EventGetMoreUser() Подгрузка событий для пользователя ActionStream
EventNotFound() Вызывается в том случаи если не найден евент который запросили через URL Action
EventSubscribe() Подписка на пользователя по ID ActionStream
EventSubscribeByLogin() Подписка на пользователя по логину ActionStream
EventSwitchEventType() Активаци/деактивация типа события ActionStream
EventUnsubscribe() Отписка от пользователя ActionStream
EventUser() Список событий в ленте активности пользователя ActionStream
GetEventMatch() Возвращает элементы совпадения по регулярному выражению для евента Action
GetParamEventMatch() Возвращает элементы совпадения по регулярному выражению для параметров евента Action
RegisterEvent() Регистрация евентов ActionStream
SetTemplate() Устанавливает какой шаблон выводить Action
SetTemplateAction() Устанавливает какой шаблон выводить Action

Property Details

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

Текущий пользователь

sMenuItemSelect property
protected string $sMenuItemSelect;

Какое меню активно

Method Details

EventAll() method
protected void EventAll()
Source Code: /classes/actions/ActionStream.class.php#105 (show)
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());
    }
}

Список событий в общей ленте активности сайта

EventGetMore() method
protected void EventGetMore()
Source Code: /classes/actions/ActionStream.class.php#146 (show)
protected function EventGetMore() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    
/**
     * Необходимо передать последний просмотренный ID событий
     */
    
$iFromId getRequest('last_id');
    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'getRequest('date_last'));
    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));
}

Погрузка событий (замена постраничности)

EventGetMoreAll() method
protected void EventGetMoreAll()
Source Code: /classes/actions/ActionStream.class.php#187 (show)
protected function EventGetMoreAll() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    
/**
     * Необходимо передать последний просмотренный ID событий
     */
    
$iFromId getRequest('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'getRequest('date_last'));
    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));
}

Погрузка событий для всего сайта

EventGetMoreUser() method
protected void EventGetMoreUser()
Source Code: /classes/actions/ActionStream.class.php#228 (show)
protected function EventGetMoreUser() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    
/**
     * Необходимо передать последний просмотренный ID событий
     */
    
$iFromId getRequest('last_id');
    if (!
$iFromId)  {
        
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
        return;
    }
    if (!(
$oUser=$this->User_GetUserById(getRequest('user_id')))) {
        
$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'getRequest('date_last'));
    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));
}

Подгрузка событий для пользователя

EventShutdown() method
public void EventShutdown()
Source Code: /classes/actions/ActionStream.class.php#372 (show)
public function EventShutdown() {
    
/**
     * Загружаем в шаблон необходимые переменные
     */
    
$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
}

Выполняется при завершении работы экшена

EventSubscribe() method
protected void EventSubscribe()
Source Code: /classes/actions/ActionStream.class.php#273 (show)
protected function EventSubscribe() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    
/**
     * Проверяем существование пользователя
     */
    
if (!$this->User_getUserById(getRequest('id'))) {
        
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
    }
    if (
$this->oUserCurrent->getId() == getRequest('id')) {
        
$this->Message_AddError($this->Lang_Get('stream_error_subscribe_to_yourself'),$this->Lang_Get('error'));
        return;
    }
    
/**
     * Подписываем на пользователя
     */
    
$this->Stream_subscribeUser($this->oUserCurrent->getId(), getRequest('id'));
    
$this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention'));
}

Подписка на пользователя по ID

EventSubscribeByLogin() method
protected void EventSubscribeByLogin()
Source Code: /classes/actions/ActionStream.class.php#304 (show)
protected function EventSubscribeByLogin() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    if (!
getRequest('login') or !is_string(getRequest('login'))) {
        
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
        return;
    }
    
/**
     * Проверяем существование пользователя
     */
    
$oUser $this->User_getUserByLogin(getRequest('login'));
    if (!
$oUser) {
        
$this->Message_AddError($this->Lang_Get('user_not_found',array('login'=>htmlspecialchars(getRequest('login')))),$this->Lang_Get('error'));
        return;
    }
    if (
$this->oUserCurrent->getId() == $oUser->getId()) {
        
$this->Message_AddError($this->Lang_Get('stream_error_subscribe_to_yourself'),$this->Lang_Get('error'));
        return;
    }
    
/**
     * Подписываем на пользователя
     */
    
$this->Stream_subscribeUser($this->oUserCurrent->getId(),  $oUser->getId());
    
$this->Viewer_AssignAjax('uid'$oUser->getId());
    
$this->Viewer_AssignAjax('user_login'$oUser->getLogin());
    
$this->Viewer_AssignAjax('user_web_path'$oUser->getUserWebPath());
    
$this->Viewer_AssignAjax('user_avatar_48'$oUser->getProfileAvatarPath(48));
    
$this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention'));
}

Подписка на пользователя по логину

EventSwitchEventType() method
protected void EventSwitchEventType()
Source Code: /classes/actions/ActionStream.class.php#122 (show)
protected function EventSwitchEventType() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    if (!
getRequest('type')) {
        
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
    }
    
/**
     * Активируем/деактивируем тип
     */
    
$this->Stream_switchUserEventType($this->oUserCurrent->getId(), getRequest('type'));
    
$this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention'));
}

Активаци/деактивация типа события

EventUnsubscribe() method
protected void EventUnsubscribe()
Source Code: /classes/actions/ActionStream.class.php#345 (show)
protected function EventUnsubscribe() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    
/**
     * Пользователь с таким ID существует?
     */
    
if (!$this->User_getUserById(getRequest('id'))) {
        
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
    }
    
/**
     * Отписываем
     */
    
$this->Stream_unsubscribeUser($this->oUserCurrent->getId(), getRequest('id'));
    
$this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention'));
}

Отписка от пользователя

EventUser() method
protected void EventUser()
Source Code: /classes/actions/ActionStream.class.php#82 (show)
protected function EventUser() {
    
/**
     * Пользователь авторизован?
     */
    
if (!$this->oUserCurrent) {
        
parent::EventNotFound();
    }
    
$this->Viewer_AddBlock('right','streamConfig');
    
/**
     * Читаем события
     */
    
$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());
    }
}

Список событий в ленте активности пользователя

Init() method
public void Init()
Source Code: /classes/actions/ActionStream.class.php#42 (show)
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'
                          
));
}

Инициализация

RegisterEvent() method
protected void RegisterEvent()
Source Code: /classes/actions/ActionStream.class.php#66 (show)
protected function RegisterEvent() {
    
$this->AddEvent('user''EventUser');
    
$this->AddEvent('all''EventAll');
    
$this->AddEvent('subscribe''EventSubscribe');
    
$this->AddEvent('subscribeByLogin''EventSubscribeByLogin');
    
$this->AddEvent('unsubscribe''EventUnSubscribe');
    
$this->AddEvent('switchEventType''EventSwitchEventType');
    
$this->AddEvent('get_more''EventGetMore');
    
$this->AddEvent('get_more_user''EventGetMoreUser');
    
$this->AddEvent('get_more_all''EventGetMoreAll');
}

Регистрация евентов