ModuleStream
Package | application.modules.stream |
---|---|
Inheritance | class ModuleStream » Module » LsObject |
Since | 1.0 |
Source Code | /application/classes/modules/stream/Stream.class.php |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aEventDefaultTypes | array | Список дефолтных типов событий, они добавляются каждому пользователю при регистрации | ModuleStream |
aEventTypes | array | Типы событий | ModuleStream |
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oMapper | ModuleStream_MapperStream | Объект маппера | ModuleStream |
Public Methods
Method | Description | Defined 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
Method | Description | Defined By |
---|---|---|
PrepareBehaviors() | Инициализация поведений | LsObject |
getUsersList() | Получение списка id пользователей, на которых подписан пользователь | ModuleStream |
loadRelatedBlog() | Получает список блогов | ModuleStream |
loadRelatedComment() | Получает список комментариев | ModuleStream |
loadRelatedTopic() | Получает список топиков | ModuleStream |
loadRelatedUser() | Получает список пользователей | ModuleStream |
loadRelatedWall() | Получает список записей на стене | ModuleStream |
Property Details
Список дефолтных типов событий, они добавляются каждому пользователю при регистрации
Типы событий
Объект маппера
Method Details
public ModuleStream_EntityEvent|bool AddEvent(ModuleStream_EntityEvent $oObject)
| ||
$oObject | ModuleStream_EntityEvent | Объект события |
{return} | ModuleStream_EntityEvent|bool |
public function AddEvent($oObject)
{
if ($iId = $this->oMapper->AddEvent($oObject)) {
$oObject->setId($iId);
return $oObject;
}
return false;
}
Добавление события в БД
public bool AddEventType(string $sName, array $aParams)
| ||
$sName | string | Название типа |
$aParams | array | Параметры |
{return} | bool |
public function AddEventType($sName, $aParams)
{
if (!array_key_exists($sName, $this->aEventTypes)) {
$this->aEventTypes[$sName] = $aParams;
return true;
}
return false;
}
Добавляет новый тип события, метод для расширения списка событий плагинами
public int GetCount(array $aEventTypes, array|null $aUserId=NULL)
| ||
$aEventTypes | array | Список типов событий |
$aUserId | array|null | ID пользователя |
{return} | int |
public function GetCount($aEventTypes, $aUserId = null)
{
return $this->oMapper->GetCount($aEventTypes, $aUserId);
}
Количество событий для пользователя
public int GetCountAll()
| ||
{return} | int |
public function GetCountAll()
{
/**
* Получаем типы событий
*/
$aEventTypes = $this->getEventTypesFilter();
if (!count($aEventTypes)) {
return 0;
}
return $this->oMapper->GetCount($aEventTypes, null);
}
Количество событий на всем сайте
public int GetCountByReaderId(int $iUserId)
| ||
$iUserId | int | ID пользователя |
{return} | int |
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);
}
Количество событий на которые подписан пользователь
public int GetCountByUserId(int $iUserId)
| ||
$iUserId | int | ID пользователя |
{return} | int |
public function GetCountByUserId($iUserId)
{
/**
* Получаем типы событий
*/
$aEventTypes = $this->getEventTypesFilter();
if (!count($aEventTypes)) {
return 0;
}
return $this->oMapper->GetCount($aEventTypes, $iUserId);
}
Количество событий конкретного пользователя
public ModuleStream_EntityEvent GetEventByTarget(string $sEventType, int $iTargetId, int|null $iUserId=NULL)
| ||
$sEventType | string | Тип |
$iTargetId | int | ID владельца события |
$iUserId | int|null | ID пользователя |
{return} | ModuleStream_EntityEvent |
public function GetEventByTarget($sEventType, $iTargetId, $iUserId = null)
{
return $this->oMapper->GetEventByTarget($sEventType, $iTargetId, $iUserId);
}
Получает событие по типу и его ID
public void Init()
|
public function Init()
{
$this->oMapper = Engine::GetMapper(__CLASS__);
}
Инициализация модуля
public bool IsAllowEventType(string $sType)
| ||
$sType | string | Тип |
{return} | bool |
public function IsAllowEventType($sType)
{
if (!is_string($sType)) {
return false;
}
return array_key_exists($sType, $this->aEventTypes);
}
Проверка допустимого типа событий
public bool IsSubscribe($iUserId $iUserId, $iTargetUserId $iTargetUserId)
| ||
$iUserId | $iUserId | ID пользователя |
$iTargetUserId | $iTargetUserId | ID пользователя на которого подписан |
{return} | bool |
public function IsSubscribe($iUserId, $iTargetUserId)
{
return $this->oMapper->IsSubscribe($iUserId, $iTargetUserId);
}
Проверяет подписан ли пользователь на конкретного пользователя
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 |
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);
}
Чтение потока пользователя
public array ReadAll(int|null $iCount=NULL, int|null $iFromId=NULL)
| ||
$iCount | int|null | Количество |
$iFromId | int|null | ID события с которого начинать выборку |
{return} | array |
public function ReadAll($iCount = null, $iFromId = null)
{
/**
* Получаем типы событий
*/
$aEventTypes = array_keys($this->getEventTypes());
return $this->ReadEvents($aEventTypes, null, $iCount, $iFromId);
}
Чтение всей активности на сайте
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 |
public function ReadByUserId($iUserId, $iCount = null, $iFromId = null)
{
/**
* Получаем типы событий
*/
$aEventTypes = array_keys($this->getEventTypes());
/**
* Получаем список тех на кого подписан
*/
$aUsersList = array($iUserId);
return $this->ReadEvents($aEventTypes, $aUsersList, $iCount, $iFromId);
}
Чтение активности конкретного пользователя
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 |
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;
}
Чтение событий
public int UpdateEvent(ModuleStream_EntityEvent $oObject)
| ||
$oObject | ModuleStream_EntityEvent | Объект события |
{return} | int |
public function UpdateEvent($oObject)
{
return $this->oMapper->UpdateEvent($oObject);
}
Обновление события
public bool Write(int $iUserId, string $sEventType, int $iTargetId, int $iPublish=1)
| ||
$iUserId | int | ID пользователя |
$sEventType | string | Тип события |
$iTargetId | int | ID владельца |
$iPublish | int | Статус |
{return} | bool |
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;
}
Запись события в ленту
public array getEventTypes()
| ||
{return} | array |
public function getEventTypes()
{
return $this->aEventTypes;
}
Возвращает все типы событий
public array getEventTypesFilter(array|null $aTypes=NULL)
| ||
$aTypes | array|null | Список типов |
{return} | array |
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($sType, 0, 4) == 'vote') {
unset ($aTypes[$i]);
}
}
}
return $aTypes;
}
Возвращает типы событий с учетом фильтра(доступности)
public array getTypesList(int $iUserId)
| ||
$iUserId | int | ID пользователя |
{return} | array |
public function getTypesList($iUserId)
{
return $this->oMapper->getTypesList($iUserId);
}
Получение типов событий, на которые подписан пользователь
public array getUserSubscribes(int $iUserId)
| ||
$iUserId | int | ID пользователя |
{return} | array |
public function getUserSubscribes($iUserId)
{
$aIds = $this->oMapper->getUserSubscribes($iUserId);
return $this->User_GetUsersAdditionalData($aIds);
}
Получение списка пользователей, на которых подписан пользователь
protected array getUsersList(int $iUserId)
| ||
$iUserId | int | ID пользователя |
{return} | array |
protected function getUsersList($iUserId)
{
return $this->oMapper->getUserSubscribes($iUserId);
}
Получение списка id пользователей, на которых подписан пользователь
protected array loadRelatedBlog(array $aIds)
| ||
$aIds | array | Список ID блогов |
{return} | array |
protected function loadRelatedBlog($aIds)
{
return $this->Blog_GetBlogsAdditionalData($aIds);
}
Получает список блогов
protected array loadRelatedComment(array $aIds)
| ||
$aIds | array | Список ID комментариев |
{return} | array |
protected function loadRelatedComment($aIds)
{
return $this->Comment_GetCommentsAdditionalData($aIds);
}
Получает список комментариев
protected array loadRelatedTopic(array $aIds)
| ||
$aIds | array | Список ID топиков |
{return} | array |
protected function loadRelatedTopic($aIds)
{
return $this->Topic_GetTopicsAdditionalData($aIds);
}
Получает список топиков
protected array loadRelatedUser(array $aIds)
| ||
$aIds | array | Список ID пользователей |
{return} | array |
protected function loadRelatedUser($aIds)
{
return $this->User_GetUsersAdditionalData($aIds);
}
Получает список пользователей
protected array loadRelatedWall(array $aIds)
| ||
$aIds | array | Список ID записей на стене |
{return} | array |
protected function loadRelatedWall($aIds)
{
return $this->Wall_GetWallAdditionalData($aIds);
}
Получает список записей на стене
public void subscribeUser(int $iUserId, int $iTargetUserId)
| ||
$iUserId | int | ID пользователя |
$iTargetUserId | int | ID пользователя на которого подписываем |
public function subscribeUser($iUserId, $iTargetUserId)
{
$this->oMapper->subscribeUser($iUserId, $iTargetUserId);
}
Подписать пользователя
public void switchUserEventDefaultTypes(int $iUserId)
| ||
$iUserId | int | ID пользователя |
public function switchUserEventDefaultTypes($iUserId)
{
foreach ($this->aEventDefaultTypes as $sType) {
$this->switchUserEventType($iUserId, $sType);
}
}
Переключает дефолтный список типов событий у пользователя
public bool switchUserEventType(int $iUserId, string $sType)
| ||
$iUserId | int | ID пользователя |
$sType | string | Тип |
{return} | bool |
public function switchUserEventType($iUserId, $sType)
{
if ($this->IsAllowEventType($sType)) {
return $this->oMapper->switchUserEventType($iUserId, $sType);
}
return false;
}
Редактирование списка событий, на которые подписан юзер
public void unsubscribeUser(int $iUserId, int $iTargetUserId)
| ||
$iUserId | int | ID пользователя |
$iTargetUserId | int | ID пользователя на которого подписываем |
public function unsubscribeUser($iUserId, $iTargetUserId)
{
$this->oMapper->unsubscribeUser($iUserId, $iTargetUserId);
}
Отписать пользователя