ActionStream
Package | application.actions |
---|---|
Inheritance | class ActionStream » Action » LsObject |
Since | 1.0 |
Source Code | /application/classes/actions/ActionStream.class.php |
Экшен обработки ленты активности
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aParams | array | Список параметров из URL | Action |
aParamsEventMatch | array | Список совпадений по регулярному выражению для евента | Action |
aRegisterEvent | array | Список зарегистрированных евентов | Action |
aRegisterEventExternal | array | Список евентов, которые нужно обрабатывать внешним обработчиком | 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
Method | Description | Defined By |
---|---|---|
ActionCall() | Позволяет запускать не публичные методы экшена через объект | Action |
ActionCallExists() | Проверяет метод экшена на существование | Action |
ActionGet() | Возвращает свойство объекта экшена | Action |
ActionSet() | Устанавливает свойство объекта экшена | Action |
AddBehaviorHook() | Добавляет хук поведения | LsObject |
AttachBehavior() | Присоединяет поведение к объекту | LsObject |
DetachBehavior() | Отсоединяет поведение от объекта | LsObject |
EventShutdown() | Выполняется при завершении работы экшена | ActionStream |
ExecEvent() | Запускает евент на выполнение | Action |
GetActionClass() | Получить каталог с шаблонами экшена(совпадает с именем класса) | Action |
GetBehavior() | Возвращает объект поведения по его имени | LsObject |
GetBehaviors() | Возвращает все объекты поведения | LsObject |
GetCurrentEventName() | Возвращает имя евента | Action |
GetDefaultEvent() | Получает евент по умолчанию | Action |
GetParam() | Получает параметр из URL по его номеру, если его нет то null | Action |
GetParams() | Получает список параметров из УРЛ | Action |
GetTemplate() | Получить шаблон | Action |
Init() | Инициализация | ActionStream |
RemoveBehaviorHook() | Удаляет хук поведения | LsObject |
RunBehaviorHook() | Запускает хук поведения на выполнение | LsObject |
SetDefaultEvent() | Устанавливает евент по умолчанию | Action |
SetParam() | Установить значение параметра(эмуляция параметра в URL). | Action |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | LsObject |
__clone() | При клонировании сбрасываем поведения | LsObject |
__construct() | Конструктор | Action |
__get() | Обработка доступа к объекты поведения | LsObject |
Protected Methods
Method | Description | Defined By |
---|---|---|
AddEvent() | Добавляет евент в экшен | Action |
AddEventPreg() | Добавляет евент в экшен, используя регулярное выражение для евента и параметров | Action |
EventAjaxAddUser() | Подписка на пользователя по логину | ActionStream |
EventAjaxRemoveUser() | Отписка от пользователя | ActionStream |
EventAll() | Общая активность | ActionStream |
EventErrorDebug() | Выводит отладочную информацию в стандартном сообщении | Action |
EventGetMore() | Подгрузка событий (замена постраничности) | ActionStream |
EventGetMoreAll() | Подгрузка событий для всего сайта | ActionStream |
EventGetMoreUser() | Подгрузка событий для пользователя | ActionStream |
EventNotFound() | Вызывается в том случаи если не найден евент который запросили через URL | Action |
EventPersonal() | Персональная активность | ActionStream |
EventSubscribe() | Подписка на пользователя по ID | ActionStream |
EventSwitchEventType() | Активаци/деактивация типа события | ActionStream |
GetEventMatch() | Возвращает элементы совпадения по регулярному выражению для евента | Action |
GetMore() | Общий метод подгрузки событий | ActionStream |
GetParamEventMatch() | Возвращает элементы совпадения по регулярному выражению для параметров евента | Action |
PrepareBehaviors() | Инициализация поведений | LsObject |
RegisterEvent() | Регистрация евентов | ActionStream |
RegisterEventExternal() | Регистрируем внешние обработчики для евентов | Action |
SetTemplate() | Устанавливает какой шаблон выводить | Action |
SetTemplateAction() | Устанавливает какой шаблон выводить | Action |
Property Details
oUserCurrent
property
protected ModuleUser_EntityUser|null $oUserCurrent;
Текущий пользователь
sMenuItemSelect
property
protected string $sMenuItemSelect;
Какое меню активно
Method Details
EventAjaxAddUser()
method
protected void EventAjaxAddUser()
|
Source Code: /application/classes/actions/ActionStream.class.php#247 (show)
protected function EventAjaxAddUser()
{
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
$aUsers = getRequest('aUserList', null, 'post');
/**
* Валидация
*/
if (!is_array($aUsers)) {
return $this->EventErrorDebug();
}
/**
* Если пользователь не авторизирован, возвращаем ошибку
*/
if (!$this->User_IsAuthorization()) {
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'), $this->Lang_Get('error'));
return;
}
$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),
'sHtml' => $oViewer->Fetch("components/user_list_small/user_list_small_item.tpl")
);
} else {
$aResult[] = array(
'bStateError' => true,
'sMsgTitle' => $this->Lang_Get('error'),
'sMsg' => $this->Lang_Get('user.notices.not_found',
array('login' => htmlspecialchars($sUser))),
'sUserLogin' => htmlspecialchars($sUser)
);
}
}
/**
* Передаем во вьевер массив с результатами обработки по каждому пользователю
*/
$this->Viewer_AssignAjax('aUserList', $aResult);
}
Подписка на пользователя по логину
EventAjaxRemoveUser()
method
protected void EventAjaxRemoveUser()
|
Source Code: /application/classes/actions/ActionStream.class.php#318 (show)
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'));
}
Отписка от пользователя
EventAll()
method
protected void EventAll()
|
Source Code: /application/classes/actions/ActionStream.class.php#106 (show)
protected function EventAll()
{
$this->sMenuItemSelect = 'all';
$this->Viewer_Assign('activityEvents', $this->Stream_ReadAll());
$this->Viewer_Assign('activityEventsAllCount', $this->Stream_GetCountAll());
}
Общая активность
EventGetMore()
method
protected void EventGetMore()
|
Source Code: /application/classes/actions/ActionStream.class.php#139 (show)
protected function EventGetMore()
{
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
$this->GetMore(function ($lastId) {
return $this->Stream_Read(null, $lastId);
});
}
Подгрузка событий (замена постраничности)
EventGetMoreAll()
method
protected void EventGetMoreAll()
|
Source Code: /application/classes/actions/ActionStream.class.php#153 (show)
protected function EventGetMoreAll()
{
$this->GetMore(function ($lastId) {
return $this->Stream_ReadAll(null, $lastId);
});
}
Подгрузка событий для всего сайта
EventGetMoreUser()
method
protected void EventGetMoreUser()
|
Source Code: /application/classes/actions/ActionStream.class.php#163 (show)
protected function EventGetMoreUser()
{
$this->GetMore(function ($lastId) {
if (!($oUser = $this->User_GetUserById(getRequestStr('target_id')))) {
return false;
}
return $this->Stream_ReadByUserId($oUser->getId(), null, $lastId);
});
}
Подгрузка событий для пользователя
EventPersonal()
method
protected void EventPersonal()
|
Source Code: /application/classes/actions/ActionStream.class.php#90 (show)
protected function EventPersonal()
{
if (!$this->oUserCurrent) {
return parent::EventNotFound();
}
$this->Viewer_AddBlock('right', 'activitySettings');
$this->Viewer_AddBlock('right', 'activityUsers');
$this->Viewer_Assign('activityEvents', $this->Stream_Read());
$this->Viewer_Assign('activityEventsAllCount', $this->Stream_GetCountByReaderId($this->oUserCurrent->getId()));
}
Персональная активность
EventShutdown()
method
public void EventShutdown()
|
Source Code: /application/classes/actions/ActionStream.class.php#346 (show)
public function EventShutdown()
{
/**
* Загружаем в шаблон необходимые переменные
*/
$this->Viewer_Assign('sMenuItemSelect', $this->sMenuItemSelect);
}
Выполняется при завершении работы экшена
EventSubscribe()
method
protected void EventSubscribe()
|
Source Code: /application/classes/actions/ActionStream.class.php#215 (show)
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('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'));
}
Подписка на пользователя по ID
EventSwitchEventType()
method
protected void EventSwitchEventType()
|
Source Code: /application/classes/actions/ActionStream.class.php#117 (show)
protected function EventSwitchEventType()
{
$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('common.success.save'), $this->Lang_Get('attention'));
}
Активаци/деактивация типа события
GetMore()
method
protected void GetMore(callback $getEvents)
| ||
$getEvents | callback | Метод возвращающий список событий |
Source Code: /application/classes/actions/ActionStream.class.php#179 (show)
protected function GetMore($getEvents)
{
$this->Viewer_SetResponseAjax('json');
// Необходимо передать последний просмотренный ID событий
$iLastId = getRequestStr('last_id');
if (!$iLastId) {
$this->Message_AddError($this->Lang_Get('system_error'), $this->Lang_Get('error'));
return;
}
// Получаем события
$aEvents = $getEvents($iLastId);
if ($aEvents === false) {
return $this->EventErrorDebug();
}
$oViewer = $this->Viewer_GetLocalViewer();
$oViewer->Assign('events', $aEvents, true);
$oViewer->Assign('dateLast', getRequestStr('date_last'), true);
if (count($aEvents)) {
$this->Viewer_AssignAjax('last_id', end($aEvents)->getId(), true);
}
$this->Viewer_AssignAjax('count_loaded', count($aEvents));
$this->Viewer_AssignAjax('html', $oViewer->Fetch('components/activity/event-list.tpl'));
}
Общий метод подгрузки событий
Init()
method
public void Init()
|
Source Code: /application/classes/actions/ActionStream.class.php#47 (show)
public function Init()
{
$this->oUserCurrent = $this->User_getUserCurrent();
// Личная лента доступна только для авторизованных, гостям показываем общую ленту
if ($this->oUserCurrent) {
$this->SetDefaultEvent('personal');
} else {
$this->SetDefaultEvent('all');
}
$this->Viewer_Assign('sMenuHeadItemSelect', 'stream');
/**
* Загружаем в шаблон JS текстовки
*/
$this->Lang_AddLangJs(array(
'activity.notices.error_already_subscribed',
'error'
));
}
Инициализация
RegisterEvent()
method
protected void RegisterEvent()
|
Source Code: /application/classes/actions/ActionStream.class.php#72 (show)
protected function RegisterEvent()
{
$this->AddEvent('personal', 'EventPersonal');
$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_all', 'EventGetMoreAll');
$this->AddEvent('get_more_personal', 'EventGetMore');
$this->AddEvent('get_more_user', 'EventGetMoreUser');
}
Регистрация евентов