ModuleWall

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

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module
oMapper ModuleWall_MapperWall Объект маппера ModuleWall
oUserCurrent ModuleUser_EntityUser|null Объект текущего пользователя ModuleWall

Public Methods

Hide inherited methods

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

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module

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: /classes/modules/wall/Wall.class.php#52 (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: /classes/modules/wall/Wall.class.php#243 (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: /classes/modules/wall/Wall.class.php#104 (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: /classes/modules/wall/Wall.class.php#90 (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: /classes/modules/wall/Wall.class.php#132 (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: /classes/modules/wall/Wall.class.php#205 (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: /classes/modules/wall/Wall.class.php#113 (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: /classes/modules/wall/Wall.class.php#42 (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: /classes/modules/wall/Wall.class.php#221 (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($aKeys,SORT_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: /classes/modules/wall/Wall.class.php#77 (show)
public function UpdateWall($oWall) {
    return 
$this->oMapper->UpdateWall($oWall);
}

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