ModuleWall

Package application.modules.wall
Inheritance class ModuleWall » Module » LsObject
Since 1.0
Source Code /application/classes/modules/wall/Wall.class.php
Модуль Wall - записи на стене профиля пользователя

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oMapper ModuleWall_MapperWall Объект маппера ModuleWall
oUserCurrent ModuleUser_EntityUser|null Объект текущего пользователя ModuleWall

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AddWall() Добавление записи на стену ModuleWall
AttachBehavior() Присоединяет поведение к объекту LsObject
DeleteWall() Удаление сообщения ModuleWall
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetCountWall() Возвращает число сообщений на стене по фильтру ModuleWall
GetWall() Получение списка записей по фильтру ModuleWall
GetWallAdditionalData() Получение записей по ID с дополнительные связаными данными ModuleWall
GetWallById() Получение записи по ID ModuleWall
GetWallsByArrayId() Получение записей по ID, без дополнительных данных ModuleWall
Init() Инициализация ModuleWall
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdatePidWall() Обновляет родительские данные у записи - количество ответов и ID последних ответов ModuleWall
UpdateWall() Обновление записи ModuleWall
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject

Property Details

oMapper property
protected ModuleWall_MapperWall $oMapper;

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

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

Объект текущего пользователя

Method Details

AddWall() method
public bool|ModuleWall_EntityWall AddWall(ModuleWall_EntityWall $oWall)
$oWall ModuleWall_EntityWall Объект записи на стене
{return} bool|ModuleWall_EntityWall
Source Code: /application/classes/modules/wall/Wall.class.php#59 (show)
public function AddWall($oWall)
{
    if (!
$oWall->getDateAdd()) {
        
$oWall->setDateAdd(date("Y-m-d H:i:s"));
    }
    if (!
$oWall->getIp()) {
        
$oWall->setIp(func_getIp());
    }
    if (
$iId $this->oMapper->AddWall($oWall)) {
        
$oWall->setId($iId);
        
/**
         * Обновляем данные у родительской записи
         */
        
if ($oPidWall $oWall->GetPidWall()) {
            
$this->UpdatePidWall($oPidWall);
        }
        return 
$oWall;
    }
    return 
false;
}

Добавление записи на стену

DeleteWall() method
public void DeleteWall(ModuleWall_EntityWall $oWall)
$oWall ModuleWall_EntityWall Объект записи на стене
Source Code: /application/classes/modules/wall/Wall.class.php#268 (show)
public function DeleteWall($oWall)
{
    
$this->oMapper->DeleteWallsByPid($oWall->getId());
    
$this->oMapper->DeleteWallById($oWall->getId());
    if (
$oWallParent $oWall->GetPidWall()) {
        
$this->UpdatePidWall($oWallParent);
    }
}

Удаление сообщения

GetCountWall() method
public int GetCountWall(array $aFilter)
$aFilter array Фильтр
{return} int
Source Code: /application/classes/modules/wall/Wall.class.php#117 (show)
public function GetCountWall($aFilter)
{
    return 
$this->oMapper->GetCountWall($aFilter);
}

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

GetWall() method
public array('collection'=>array,'count'=>int) GetWall(array $aFilter, array $aOrder, int $iCurrPage=1, int $iPerPage=10, array $aAllowData=NULL)
$aFilter array Фильтр
$aOrder array Сортировка
$iCurrPage int Номер страницы
$iPerPage int Количество элементов на страницу
$aAllowData array Список типов дополнительных данных для подгрузки в сообщения стены
{return} array('collection'=>array,'count'=>int)
Source Code: /application/classes/modules/wall/Wall.class.php#101 (show)
public function GetWall($aFilter$aOrder$iCurrPage 1$iPerPage 10$aAllowData null)
{
    
$aResult = array(
        
'collection' => $this->oMapper->GetWall($aFilter$aOrder$iCount$iCurrPage$iPerPage),
        
'count'      => $iCount
    
);
    
$aResult['collection'] = $this->GetWallAdditionalData($aResult['collection'], $aAllowData);
    return 
$aResult;
}

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

GetWallAdditionalData() method
public array GetWallAdditionalData(array $aWallId, array $aAllowData=NULL)
$aWallId array Список ID сообщений
$aAllowData array Список типов дополнительных данных для подгрузки в сообщения стены
{return} array
Source Code: /application/classes/modules/wall/Wall.class.php#149 (show)
public function GetWallAdditionalData($aWallId$aAllowData null)
{
    if (
is_null($aAllowData)) {
        
$aAllowData = array('user' => array(), 'wall_user' => array(), 'reply');
    }
    
func_array_simpleflip($aAllowData);
    if (!
is_array($aWallId)) {
        
$aWallId = array($aWallId);
    }

    
$aWalls $this->GetWallsByArrayId($aWallId);
    
/**
     * Формируем ID дополнительных данных, которые нужно получить
     */
    
$aUserId = array();
    
$aWallUserId = array();
    
$aWallReplyId = array();
    foreach (
$aWalls as $oWall) {
        if (isset(
$aAllowData['user'])) {
            
$aUserId[] = $oWall->getUserId();
        }
        if (isset(
$aAllowData['wall_user'])) {
            
$aWallUserId[] = $oWall->getWallUserId();
        }
        
/**
         * Список последних записей хранится в строке через запятую
         */
        
if (isset($aAllowData['reply']) and is_null($oWall->getPid()) and $oWall->getLastReply()) {
            
$aReply explode(','trim($oWall->getLastReply()));
            
$aWallReplyId array_merge($aWallReplyId$aReply);
        }
    }
    
/**
     * Получаем дополнительные данные
     */
    
$aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId,
        
$aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId);
    
$aWallUsers = isset($aAllowData['wall_user']) && is_array($aAllowData['wall_user']) ? $this->User_GetUsersAdditionalData($aWallUserId,
        
$aAllowData['wall_user']) : $this->User_GetUsersAdditionalData($aWallUserId);
    
$aWallReply = array();
    if (isset(
$aAllowData['reply']) and count($aWallReplyId)) {
        
$aWallReply $this->GetWallAdditionalData($aWallReplyId, array('user' => array()));
    }
    
/**
     * Добавляем данные к результату
     */
    
foreach ($aWalls as $oWall) {
        if (isset(
$aUsers[$oWall->getUserId()])) {
            
$oWall->setUser($aUsers[$oWall->getUserId()]);
        } else {
            
$oWall->setUser(null); // или $oWall->setUser(new ModuleUser_EntityUser());
        
}
        if (isset(
$aWallUsers[$oWall->getWallUserId()])) {
            
$oWall->setWallUser($aWallUsers[$oWall->getWallUserId()]);
        } else {
            
$oWall->setWallUser(null);
        }
        
$aReply = array();
        if (
$oWall->getLastReply()) {
            
$aReplyId explode(','trim($oWall->getLastReply()));
            foreach (
$aReplyId as $iReplyId) {
                if (isset(
$aWallReply[$iReplyId])) {
                    
$aReply[] = $aWallReply[$iReplyId];
                }
            }
        }
        
$oWall->setLastReplyWall($aReply);
    }
    return 
$aWalls;
}

Получение записей по ID с дополнительные связаными данными

GetWallById() method
public ModuleWall_EntityWall GetWallById(int $iId)
$iId int ID сообщения/записи
{return} ModuleWall_EntityWall
Source Code: /application/classes/modules/wall/Wall.class.php#226 (show)
public function GetWallById($iId)
{
    if (!
is_numeric($iId)) {
        return 
null;
    }
    
$aResult $this->GetWallAdditionalData($iId);
    if (isset(
$aResult[$iId])) {
        return 
$aResult[$iId];
    }
    return 
null;
}

Получение записи по ID

GetWallsByArrayId() method
public array GetWallsByArrayId(array $aWallId)
$aWallId array Список ID сообщений
{return} array
Source Code: /application/classes/modules/wall/Wall.class.php#128 (show)
public function GetWallsByArrayId($aWallId)
{
    if (!
is_array($aWallId)) {
        
$aWallId = array($aWallId);
    }
    
$aWallId array_unique($aWallId);
    
$aWalls = array();
    
$aResult $this->oMapper->GetWallsByArrayId($aWallId);
    foreach (
$aResult as $oWall) {
        
$aWalls[$oWall->getId()] = $oWall;
    }
    return 
$aWalls;
}

Получение записей по ID, без дополнительных данных

Init() method
public void Init()
Source Code: /application/classes/modules/wall/Wall.class.php#47 (show)
public function Init()
{
    
$this->oMapper Engine::GetMapper(__CLASS__);
    
$this->oUserCurrent $this->User_GetUserCurrent();
}

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

UpdatePidWall() method
public void UpdatePidWall(ModuleWall_EntityWall $oWall, null|int $iLimit=NULL)
$oWall ModuleWall_EntityWall Объект записи на стене
$iLimit null|int
Source Code: /application/classes/modules/wall/Wall.class.php#244 (show)
public function UpdatePidWall($oWall$iLimit null)
{
    if (
is_null($iLimit)) {
        
$iLimit Config::Get('module.wall.count_last_reply');
    }

    
$aResult $this->GetWall(array('pid' => $oWall->getId()), array('id' => 'desc'), 1$iLimit, array());
    if (
$aResult['count']) {
        
$oWall->setCountReply($aResult['count']);
        
$aKeys array_keys($aResult['collection']);
        
sort($aKeysSORT_NUMERIC);
        
$oWall->setLastReply(join(','$aKeys));
    } else {
        
$oWall->setCountReply(0);
        
$oWall->setLastReply('');
    }
    
$this->UpdateWall($oWall);
}

Обновляет родительские данные у записи - количество ответов и ID последних ответов

UpdateWall() method
public bool UpdateWall(ModuleWall_EntityWall $oWall)
$oWall ModuleWall_EntityWall Объект записи на стене
{return} bool
Source Code: /application/classes/modules/wall/Wall.class.php#86 (show)
public function UpdateWall($oWall)
{
    return 
$this->oMapper->UpdateWall($oWall);
}

Обновление записи