ModuleStream

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

Protected Properties

Hide inherited properties

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

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddEvent() Добавление события в БД ModuleStream
AddEventType() Добавляет новый тип события, метод для расширения списка событий плагинами ModuleStream
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
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateEvent() Обновление события ModuleStream
Write() Запись события в ленту ModuleStream
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
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
__clone() Блокируем копирование/клонирование объекта Module
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: /classes/modules/stream/Stream.class.php#122 (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: /classes/modules/stream/Stream.class.php#97 (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: /classes/modules/stream/Stream.class.php#326 (show)
public function GetCount($aEventTypes$aUserId=null) {
    return 
$this->oMapper->GetCount($aEventTypes$aUserId);
}

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

GetCountAll() method
public int GetCountAll()
{return} int
Source Code: /classes/modules/stream/Stream.class.php#310 (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: /classes/modules/stream/Stream.class.php#292 (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: /classes/modules/stream/Stream.class.php#277 (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: /classes/modules/stream/Stream.class.php#146 (show)
public function GetEventByTarget($sEventType$iTargetId$iUserId=null) {
    return 
$this->oMapper->GetEventByTarget($sEventType$iTargetId$iUserId);
}

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

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

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

IsAllowEventType() method
public bool IsAllowEventType(string $sType)
$sType string Тип
{return} bool
Source Code: /classes/modules/stream/Stream.class.php#110 (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: /classes/modules/stream/Stream.class.php#440 (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: /classes/modules/stream/Stream.class.php#217 (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: /classes/modules/stream/Stream.class.php#243 (show)
public function ReadAll($iCount=null,$iFromId=null) {
    
/**
     * Получаем типы событий
     */
    
$aEventTypes=array_keys($this->getEventTypes());

    return 
$this->ReadEvents($aEventTypes,null,$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: /classes/modules/stream/Stream.class.php#259 (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: /classes/modules/stream/Stream.class.php#338 (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: /classes/modules/stream/Stream.class.php#135 (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: /classes/modules/stream/Stream.class.php#158 (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 
true;
        }
    }
    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 
true;
        }
    }

    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 
true;
}

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

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

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

getEventTypesFilter() method
public array getEventTypesFilter(array|null $aTypes=NULL)
$aTypes array|null Список типов
{return} array
Source Code: /classes/modules/stream/Stream.class.php#77 (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: /classes/modules/stream/Stream.class.php#411 (show)
public function getTypesList($iUserId) {
    return 
$this->oMapper->getTypesList($iUserId);
}

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

getUserSubscribes() method
public array getUserSubscribes(int $iUserId)
$iUserId int ID пользователя
{return} array
Source Code: /classes/modules/stream/Stream.class.php#429 (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: /classes/modules/stream/Stream.class.php#420 (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: /classes/modules/stream/Stream.class.php#508 (show)
protected function loadRelatedBlog($aIds) {
    return 
$this->Blog_GetBlogsAdditionalData($aIds);
}

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

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

}

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

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

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

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

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

loadRelatedWall() method
protected array loadRelatedWall(array $aIds)
$aIds array Список ID записей на стене
{return} array
Source Code: /classes/modules/stream/Stream.class.php#490 (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: /classes/modules/stream/Stream.class.php#472 (show)
public function subscribeUser($iUserId$iTargetUserId) {
    
$this->oMapper->subscribeUser($iUserId$iTargetUserId);
}

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

switchUserEventDefaultTypes() method
public void switchUserEventDefaultTypes(int $iUserId)
$iUserId int ID пользователя
Source Code: /classes/modules/stream/Stream.class.php#461 (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: /classes/modules/stream/Stream.class.php#450 (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: /classes/modules/stream/Stream.class.php#481 (show)
public function unsubscribeUser($iUserId$iTargetUserId) {
    
$this->oMapper->unsubscribeUser($iUserId$iTargetUserId);
}

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