ModuleStream

Package application.modules.stream
Inheritance class ModuleStream » Module » LsObject
Since 1.0
Source Code /application/classes/modules/stream/Stream.class.php
Модуль потока событий на сайте

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
aEventDefaultTypes array Список дефолтных типов событий, они добавляются каждому пользователю при регистрации ModuleStream
aEventTypes array Типы событий ModuleStream
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oMapper ModuleStream_MapperStream Объект маппера ModuleStream

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AddEvent() Добавление события в БД ModuleStream
AddEventType() Добавляет новый тип события, метод для расширения списка событий плагинами ModuleStream
AttachBehavior() Присоединяет поведение к объекту LsObject
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetCount() Количество событий для пользователя ModuleStream
GetCountAll() Количество событий на всем сайте ModuleStream
GetCountByReaderId() Количество событий на которые подписан пользователь ModuleStream
GetCountByUserId() Количество событий конкретного пользователя ModuleStream
GetEventByTarget() Получает событие по типу и его ID ModuleStream
Init() Инициализация модуля ModuleStream
IsAllowEventType() Проверка допустимого типа событий ModuleStream
IsSubscribe() Проверяет подписан ли пользователь на конкретного пользователя ModuleStream
Read() Чтение потока пользователя ModuleStream
ReadAll() Чтение всей активности на сайте ModuleStream
ReadByUserId() Чтение активности конкретного пользователя ModuleStream
ReadEvents() Чтение событий ModuleStream
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateEvent() Обновление события ModuleStream
Write() Запись события в ленту ModuleStream
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
getEventTypes() Возвращает все типы событий ModuleStream
getEventTypesFilter() Возвращает типы событий с учетом фильтра(доступности) ModuleStream
getTypesList() Получение типов событий, на которые подписан пользователь ModuleStream
getUserSubscribes() Получение списка пользователей, на которых подписан пользователь ModuleStream
isInit() Возвращает значение флага инициализации модуля Module
subscribeUser() Подписать пользователя ModuleStream
switchUserEventDefaultTypes() Переключает дефолтный список типов событий у пользователя ModuleStream
switchUserEventType() Редактирование списка событий, на которые подписан юзер ModuleStream
unsubscribeUser() Отписать пользователя ModuleStream

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject
getUsersList() Получение списка id пользователей, на которых подписан пользователь ModuleStream
loadRelatedBlog() Получает список блогов ModuleStream
loadRelatedComment() Получает список комментариев ModuleStream
loadRelatedTopic() Получает список топиков ModuleStream
loadRelatedUser() Получает список пользователей ModuleStream
loadRelatedWall() Получает список записей на стене ModuleStream

Property Details

aEventDefaultTypes property
protected array $aEventDefaultTypes;

Список дефолтных типов событий, они добавляются каждому пользователю при регистрации

aEventTypes property
protected array $aEventTypes;

Типы событий

oMapper property
protected ModuleStream_MapperStream $oMapper;

Объект маппера

Method Details

AddEvent() method
public ModuleStream_EntityEvent|bool AddEvent(ModuleStream_EntityEvent $oObject)
$oObject ModuleStream_EntityEvent Объект события
{return} ModuleStream_EntityEvent|bool
Source Code: /application/classes/modules/stream/Stream.class.php#142 (show)
public function AddEvent($oObject)
{
    if (
$iId $this->oMapper->AddEvent($oObject)) {
        
$oObject->setId($iId);
        return 
$oObject;
    }
    return 
false;
}

Добавление события в БД

AddEventType() method
public bool AddEventType(string $sName, array $aParams)
$sName string Название типа
$aParams array Параметры
{return} bool
Source Code: /application/classes/modules/stream/Stream.class.php#113 (show)
public function AddEventType($sName$aParams)
{
    if (!
array_key_exists($sName$this->aEventTypes)) {
        
$this->aEventTypes[$sName] = $aParams;
        return 
true;
    }
    return 
false;
}

Добавляет новый тип события, метод для расширения списка событий плагинами

GetCount() method
public int GetCount(array $aEventTypes, array|null $aUserId=NULL)
$aEventTypes array Список типов событий
$aUserId array|null ID пользователя
{return} int
Source Code: /application/classes/modules/stream/Stream.class.php#372 (show)
public function GetCount($aEventTypes$aUserId null)
{
    return 
$this->oMapper->GetCount($aEventTypes$aUserId);
}

Количество событий для пользователя

GetCountAll() method
public int GetCountAll()
{return} int
Source Code: /application/classes/modules/stream/Stream.class.php#352 (show)
public function GetCountAll()
{
    
/**
     * Получаем типы событий
     */
    
$aEventTypes $this->getEventTypesFilter();
    if (!
count($aEventTypes)) {
        return 
0;
    }

    return 
$this->oMapper->GetCount($aEventTypesnull);
}

Количество событий на всем сайте

GetCountByReaderId() method
public int GetCountByReaderId(int $iUserId)
$iUserId int ID пользователя
{return} int
Source Code: /application/classes/modules/stream/Stream.class.php#330 (show)
public function GetCountByReaderId($iUserId)
{
    
/**
     * Получаем типы событий
     */
    
$aEventTypes $this->getEventTypesFilter($this->getTypesList($iUserId));
    
/**
     * Получаем список тех на кого подписан
     */
    
$aUsersList $this->getUsersList($iUserId);
    if (!
count($aEventTypes)) {
        return 
0;
    }

    return 
$this->oMapper->GetCount($aEventTypes$aUsersList);
}

Количество событий на которые подписан пользователь

GetCountByUserId() method
public int GetCountByUserId(int $iUserId)
$iUserId int ID пользователя
{return} int
Source Code: /application/classes/modules/stream/Stream.class.php#311 (show)
public function GetCountByUserId($iUserId)
{
    
/**
     * Получаем типы событий
     */
    
$aEventTypes $this->getEventTypesFilter();
    if (!
count($aEventTypes)) {
        return 
0;
    }

    return 
$this->oMapper->GetCount($aEventTypes$iUserId);
}

Количество событий конкретного пользователя

GetEventByTarget() method
public ModuleStream_EntityEvent GetEventByTarget(string $sEventType, int $iTargetId, int|null $iUserId=NULL)
$sEventType string Тип
$iTargetId int ID владельца события
$iUserId int|null ID пользователя
{return} ModuleStream_EntityEvent
Source Code: /application/classes/modules/stream/Stream.class.php#170 (show)
public function GetEventByTarget($sEventType$iTargetId$iUserId null)
{
    return 
$this->oMapper->GetEventByTarget($sEventType$iTargetId$iUserId);
}

Получает событие по типу и его ID

Init() method
public void Init()
Source Code: /application/classes/modules/stream/Stream.class.php#70 (show)
public function Init()
{
    
$this->oMapper Engine::GetMapper(__CLASS__);
}

Инициализация модуля

IsAllowEventType() method
public bool IsAllowEventType(string $sType)
$sType string Тип
{return} bool
Source Code: /application/classes/modules/stream/Stream.class.php#128 (show)
public function IsAllowEventType($sType)
{
    if (!
is_string($sType)) {
        return 
false;
    }
    return 
array_key_exists($sType$this->aEventTypes);
}

Проверка допустимого типа событий

IsSubscribe() method
public bool IsSubscribe($iUserId $iUserId, $iTargetUserId $iTargetUserId)
$iUserId $iUserId ID пользователя
$iTargetUserId $iTargetUserId ID пользователя на которого подписан
{return} bool
Source Code: /application/classes/modules/stream/Stream.class.php#500 (show)
public function IsSubscribe($iUserId$iTargetUserId)
{
    return 
$this->oMapper->IsSubscribe($iUserId$iTargetUserId);
}

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

Read() method
public array Read(int|null $iCount=NULL, int|null $iFromId=NULL, int|null $iUserId=NULL)
$iCount int|null Количество
$iFromId int|null ID события с которого начинать выборку
$iUserId int|null ID пользователя
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#245 (show)
public function Read($iCount null$iFromId null$iUserId null)
{
    if (!
$iUserId) {
        if (
$this->User_getUserCurrent()) {
            
$iUserId $this->User_getUserCurrent()->getId();
        } else {
            return array();
        }
    }
    
/**
     * Получаем типы событий
     */
    
$aEventTypes $this->getTypesList($iUserId);
    
/**
     * Получаем список тех на кого подписан
     */
    
$aUsersList $this->getUsersList($iUserId);

    return 
$this->ReadEvents($aEventTypes$aUsersList$iCount$iFromId);
}

Чтение потока пользователя

ReadAll() method
public array ReadAll(int|null $iCount=NULL, int|null $iFromId=NULL)
$iCount int|null Количество
$iFromId int|null ID события с которого начинать выборку
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#273 (show)
public function ReadAll($iCount null$iFromId null)
{
    
/**
     * Получаем типы событий
     */
    
$aEventTypes array_keys($this->getEventTypes());

    return 
$this->ReadEvents($aEventTypesnull$iCount$iFromId);
}

Чтение всей активности на сайте

ReadByUserId() method
public array ReadByUserId(int $iUserId, int|null $iCount=NULL, int|null $iFromId=NULL)
$iUserId int ID пользователя
$iCount int|null Количество
$iFromId int|null ID события с которого начинать выборку
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#291 (show)
public function ReadByUserId($iUserId$iCount null$iFromId null)
{
    
/**
     * Получаем типы событий
     */
    
$aEventTypes array_keys($this->getEventTypes());
    
/**
     * Получаем список тех на кого подписан
     */
    
$aUsersList = array($iUserId);

    return 
$this->ReadEvents($aEventTypes$aUsersList$iCount$iFromId);
}

Чтение активности конкретного пользователя

ReadEvents() method
public array ReadEvents(array $aEventTypes, array|null $aUsersList, int $iCount=NULL, int $iFromId=NULL)
$aEventTypes array Список типов событий
$aUsersList array|null Список пользователей, чьи события читать
$iCount int Количество
$iFromId int ID события с которого начинать выборку
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#386 (show)
public function ReadEvents($aEventTypes$aUsersList$iCount null$iFromId null)
{
    if (!
is_null($aUsersList) and !count($aUsersList)) {
        return array();
    }
    if (!
$iCount) {
        
$iCount Config::Get('module.stream.count_default');
    }

    
$aEventTypes $this->getEventTypesFilter($aEventTypes);
    if (!
count($aEventTypes)) {
        return array();
    }
    
/**
     * Получаем список событий
     */
    
$aEvents $this->oMapper->Read($aEventTypes$aUsersList$iCount$iFromId);
    
/**
     * Составляем список объектов для загрузки
     */
    
$aNeedObjects = array();
    foreach (
$aEvents as $oEvent) {
        if (isset(
$this->aEventTypes[$oEvent->getEventType()]['related'])) {
            
$aNeedObjects[$this->aEventTypes[$oEvent->getEventType()]['related']][] = $oEvent->getTargetId();
        }
        
$aNeedObjects['user'][] = $oEvent->getUserId();
    }
    
/**
     * Получаем объекты
     */
    
$aObjects = array();
    foreach (
$aNeedObjects as $sType => $aListId) {
        if (
count($aListId)) {
            
$aListId array_unique($aListId);
            
$sMethod 'loadRelated' ucfirst($sType);
            if (
method_exists($this$sMethod)) {
                if (
$aRes $this->$sMethod($aListId)) {
                    foreach (
$aRes as $oObject) {
                        
$aObjects[$sType][$oObject->getId()] = $oObject;
                    }
                }
            }
        }
    }
    
/**
     * Формируем результирующий поток
     */
    
foreach ($aEvents as $key => $oEvent) {
        
/**
         * Жестко вытаскиваем автора события
         */
        
if (isset($aObjects['user'][$oEvent->getUserId()])) {
            
$oEvent->setUser($aObjects['user'][$oEvent->getUserId()]);
            
/**
             * Аттачим объекты
             */
            
if (isset($this->aEventTypes[$oEvent->getEventType()]['related'])) {
                
$sTypeObject $this->aEventTypes[$oEvent->getEventType()]['related'];
                if (isset(
$aObjects[$sTypeObject][$oEvent->getTargetId()])) {
                    
$oEvent->setTarget($aObjects[$sTypeObject][$oEvent->getTargetId()]);
                } else {
                    unset(
$aEvents[$key]);
                }
            } else {
                unset(
$aEvents[$key]);
            }
        } else {
            unset(
$aEvents[$key]);
        }
    }
    return 
$aEvents;
}

Чтение событий

UpdateEvent() method
public int UpdateEvent(ModuleStream_EntityEvent $oObject)
$oObject ModuleStream_EntityEvent Объект события
{return} int
Source Code: /application/classes/modules/stream/Stream.class.php#157 (show)
public function UpdateEvent($oObject)
{
    return 
$this->oMapper->UpdateEvent($oObject);
}

Обновление события

Write() method
public bool Write(int $iUserId, string $sEventType, int $iTargetId, int $iPublish=1)
$iUserId int ID пользователя
$sEventType string Тип события
$iTargetId int ID владельца
$iPublish int Статус
{return} bool
Source Code: /application/classes/modules/stream/Stream.class.php#184 (show)
public function Write($iUserId$sEventType$iTargetId$iPublish 1)
{
    
$iPublish = (int)$iPublish;
    if (!
$this->IsAllowEventType($sEventType)) {
        return 
false;
    }
    
$aParams $this->aEventTypes[$sEventType];
    if (isset(
$aParams['unique']) and $aParams['unique']) {
        
/**
         * Проверяем на уникальность
         */
        
if ($oEvent $this->GetEventByTarget($sEventType$iTargetId)) {
            
/**
             * Событие уже было
             */
            
if ($oEvent->getPublish() != $iPublish) {
                
$oEvent->setPublish($iPublish);
                
$this->UpdateEvent($oEvent);
            }
            return 
$oEvent;
        }
    }
    if (isset(
$aParams['unique_user']) and $aParams['unique_user']) {
        
/**
         * Проверяем на уникальность для конкретного пользователя
         */
        
if ($oEvent $this->GetEventByTarget($sEventType$iTargetId$iUserId)) {
            
/**
             * Событие уже было
             */
            
if ($oEvent->getPublish() != $iPublish) {
                
$oEvent->setPublish($iPublish);
                
$this->UpdateEvent($oEvent);
            }
            return 
$oEvent;
        }
    }

    if (
$iPublish) {
        
/**
         * Создаем новое событие
         */
        
$oEvent Engine::GetEntity('Stream_Event');
        
$oEvent->setEventType($sEventType);
        
$oEvent->setUserId($iUserId);
        
$oEvent->setTargetId($iTargetId);
        
$oEvent->setDateAdded(date("Y-m-d H:i:s"));
        
$oEvent->setPublish($iPublish);
        
$this->AddEvent($oEvent);
    }
    return 
$oEvent;
}

Запись события в ленту

getEventTypes() method
public array getEventTypes()
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#80 (show)
public function getEventTypes()
{
    return 
$this->aEventTypes;
}

Возвращает все типы событий

getEventTypesFilter() method
public array getEventTypesFilter(array|null $aTypes=NULL)
$aTypes array|null Список типов
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#91 (show)
public function getEventTypesFilter($aTypes null)
{
    if (
is_null($aTypes)) {
        
$aTypes array_keys($this->getEventTypes());
    }
    if (
Config::Get('module.stream.disable_vote_events')) {
        foreach (
$aTypes as $i => $sType) {
            if (
substr($sType04) == 'vote') {
                unset (
$aTypes[$i]);
            }
        }
    }
    return 
$aTypes;
}

Возвращает типы событий с учетом фильтра(доступности)

getTypesList() method
public array getTypesList(int $iUserId)
$iUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#465 (show)
public function getTypesList($iUserId)
{
    return 
$this->oMapper->getTypesList($iUserId);
}

Получение типов событий, на которые подписан пользователь

getUserSubscribes() method
public array getUserSubscribes(int $iUserId)
$iUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#487 (show)
public function getUserSubscribes($iUserId)
{
    
$aIds $this->oMapper->getUserSubscribes($iUserId);
    return 
$this->User_GetUsersAdditionalData($aIds);
}

Получение списка пользователей, на которых подписан пользователь

getUsersList() method
protected array getUsersList(int $iUserId)
$iUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#476 (show)
protected function getUsersList($iUserId)
{
    return 
$this->oMapper->getUserSubscribes($iUserId);
}

Получение списка id пользователей, на которых подписан пользователь

loadRelatedBlog() method
protected array loadRelatedBlog(array $aIds)
$aIds array Список ID блогов
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#582 (show)
protected function loadRelatedBlog($aIds)
{
    return 
$this->Blog_GetBlogsAdditionalData($aIds);
}

Получает список блогов

loadRelatedComment() method
protected array loadRelatedComment(array $aIds)
$aIds array Список ID комментариев
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#593 (show)
protected function loadRelatedComment($aIds)
{
    return 
$this->Comment_GetCommentsAdditionalData($aIds);

}

Получает список комментариев

loadRelatedTopic() method
protected array loadRelatedTopic(array $aIds)
$aIds array Список ID топиков
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#571 (show)
protected function loadRelatedTopic($aIds)
{
    return 
$this->Topic_GetTopicsAdditionalData($aIds);
}

Получает список топиков

loadRelatedUser() method
protected array loadRelatedUser(array $aIds)
$aIds array Список ID пользователей
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#605 (show)
protected function loadRelatedUser($aIds)
{
    return 
$this->User_GetUsersAdditionalData($aIds);
}

Получает список пользователей

loadRelatedWall() method
protected array loadRelatedWall(array $aIds)
$aIds array Список ID записей на стене
{return} array
Source Code: /application/classes/modules/stream/Stream.class.php#560 (show)
protected function loadRelatedWall($aIds)
{
    return 
$this->Wall_GetWallAdditionalData($aIds);
}

Получает список записей на стене

subscribeUser() method
public void subscribeUser(int $iUserId, int $iTargetUserId)
$iUserId int ID пользователя
$iTargetUserId int ID пользователя на которого подписываем
Source Code: /application/classes/modules/stream/Stream.class.php#538 (show)
public function subscribeUser($iUserId$iTargetUserId)
{
    
$this->oMapper->subscribeUser($iUserId$iTargetUserId);
}

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

switchUserEventDefaultTypes() method
public void switchUserEventDefaultTypes(int $iUserId)
$iUserId int ID пользователя
Source Code: /application/classes/modules/stream/Stream.class.php#525 (show)
public function switchUserEventDefaultTypes($iUserId)
{
    foreach (
$this->aEventDefaultTypes as $sType) {
        
$this->switchUserEventType($iUserId$sType);
    }
}

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

switchUserEventType() method
public bool switchUserEventType(int $iUserId, string $sType)
$iUserId int ID пользователя
$sType string Тип
{return} bool
Source Code: /application/classes/modules/stream/Stream.class.php#512 (show)
public function switchUserEventType($iUserId$sType)
{
    if (
$this->IsAllowEventType($sType)) {
        return 
$this->oMapper->switchUserEventType($iUserId$sType);
    }
    return 
false;
}

Редактирование списка событий, на которые подписан юзер

unsubscribeUser() method
public void unsubscribeUser(int $iUserId, int $iTargetUserId)
$iUserId int ID пользователя
$iTargetUserId int ID пользователя на которого подписываем
Source Code: /application/classes/modules/stream/Stream.class.php#549 (show)
public function unsubscribeUser($iUserId$iTargetUserId)
{
    
$this->oMapper->unsubscribeUser($iUserId$iTargetUserId);
}

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