2012-03-11 19:52:17 +02:00
|
|
|
|
<?php
|
2014-10-08 08:20:29 +03:00
|
|
|
|
/*
|
|
|
|
|
* LiveStreet CMS
|
|
|
|
|
* Copyright © 2013 OOO "ЛС-СОФТ"
|
|
|
|
|
*
|
|
|
|
|
* ------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreetcms.com
|
|
|
|
|
* Contact e-mail: office@livestreetcms.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
* ------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* @link http://www.livestreetcms.com
|
|
|
|
|
* @copyright 2013 OOO "ЛС-СОФТ"
|
|
|
|
|
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
|
|
|
|
*
|
|
|
|
|
*/
|
2012-03-11 19:52:17 +02:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Модуль Wall - записи на стене профиля пользователя
|
|
|
|
|
*
|
2014-10-08 08:20:29 +03:00
|
|
|
|
* @package application.modules.wall
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @since 1.0
|
2012-03-11 19:52:17 +02:00
|
|
|
|
*/
|
|
|
|
|
class ModuleWall extends Module {
|
2012-06-27 16:18:38 +03:00
|
|
|
|
/**
|
|
|
|
|
* Объект маппера
|
|
|
|
|
*
|
|
|
|
|
* @var ModuleWall_MapperWall
|
|
|
|
|
*/
|
2012-03-11 19:52:17 +02:00
|
|
|
|
protected $oMapper;
|
2012-06-27 16:18:38 +03:00
|
|
|
|
/**
|
|
|
|
|
* Объект текущего пользователя
|
|
|
|
|
*
|
|
|
|
|
* @var ModuleUser_EntityUser|null
|
|
|
|
|
*/
|
2012-03-11 19:52:17 +02:00
|
|
|
|
protected $oUserCurrent;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализация
|
|
|
|
|
*
|
|
|
|
|
*/
|
2012-06-27 16:18:38 +03:00
|
|
|
|
public function Init() {
|
2012-03-11 19:52:17 +02:00
|
|
|
|
$this->oMapper=Engine::GetMapper(__CLASS__);
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Добавление записи на стену
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
|
|
|
|
* @return bool|ModuleWall_EntityWall
|
2012-03-11 19:52:17 +02:00
|
|
|
|
*/
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обновление записи
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
2012-03-11 19:52:17 +02:00
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function UpdateWall($oWall) {
|
|
|
|
|
return $this->oMapper->UpdateWall($oWall);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получение списка записей по фильтру
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param array $aFilter Фильтр
|
|
|
|
|
* @param array $aOrder Сортировка
|
|
|
|
|
* @param int $iCurrPage Номер страницы
|
|
|
|
|
* @param int $iPerPage Количество элементов на страницу
|
|
|
|
|
* @param array $aAllowData Список типов дополнительных данных для подгрузки в сообщения стены
|
2012-03-11 19:52:17 +02:00
|
|
|
|
* @return array('collection'=>array,'count'=>int)
|
|
|
|
|
*/
|
2012-04-11 04:44:33 +03:00
|
|
|
|
public function GetWall($aFilter,$aOrder,$iCurrPage=1,$iPerPage=10,$aAllowData=null) {
|
2012-03-11 19:52:17 +02:00
|
|
|
|
$aResult=array(
|
|
|
|
|
'collection'=>$this->oMapper->GetWall($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),
|
|
|
|
|
'count'=>$iCount
|
|
|
|
|
);
|
|
|
|
|
$aResult['collection']=$this->GetWallAdditionalData($aResult['collection'],$aAllowData);
|
|
|
|
|
return $aResult;
|
|
|
|
|
}
|
2012-03-19 07:59:29 +02:00
|
|
|
|
/**
|
|
|
|
|
* Возвращает число сообщений на стене по фильтру
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param array $aFilter Фильтр
|
2012-03-19 07:59:29 +02:00
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function GetCountWall($aFilter) {
|
|
|
|
|
return $this->oMapper->GetCountWall($aFilter);
|
|
|
|
|
}
|
2012-03-11 19:52:17 +02:00
|
|
|
|
/**
|
|
|
|
|
* Получение записей по ID, без дополнительных данных
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param array $aWallId Список ID сообщений
|
2012-03-11 19:52:17 +02:00
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
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 с дополнительные связаными данными
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param array $aWallId Список ID сообщений
|
|
|
|
|
* @param array $aAllowData Список типов дополнительных данных для подгрузки в сообщения стены
|
2012-03-11 19:52:17 +02:00
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2012-04-11 04:44:33 +03:00
|
|
|
|
public function GetWallAdditionalData($aWallId,$aAllowData=null) {
|
|
|
|
|
if (is_null($aAllowData)) {
|
2012-04-14 08:05:46 +03:00
|
|
|
|
$aAllowData=array('user'=>array(),'wall_user'=>array(),'reply');
|
2012-04-11 04:44:33 +03:00
|
|
|
|
}
|
2012-03-11 19:52:17 +02:00
|
|
|
|
func_array_simpleflip($aAllowData);
|
|
|
|
|
if (!is_array($aWallId)) {
|
|
|
|
|
$aWallId=array($aWallId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$aWalls=$this->GetWallsByArrayId($aWallId);
|
|
|
|
|
/**
|
|
|
|
|
* Формируем ID дополнительных данных, которые нужно получить
|
|
|
|
|
*/
|
|
|
|
|
$aUserId=array();
|
2012-04-14 08:05:46 +03:00
|
|
|
|
$aWallUserId=array();
|
2012-03-11 19:52:17 +02:00
|
|
|
|
$aWallReplyId=array();
|
|
|
|
|
foreach ($aWalls as $oWall) {
|
|
|
|
|
if (isset($aAllowData['user'])) {
|
|
|
|
|
$aUserId[]=$oWall->getUserId();
|
|
|
|
|
}
|
2012-04-14 08:05:46 +03:00
|
|
|
|
if (isset($aAllowData['wall_user'])) {
|
2012-04-15 14:33:26 +03:00
|
|
|
|
$aWallUserId[]=$oWall->getWallUserId();
|
2012-04-14 08:05:46 +03:00
|
|
|
|
}
|
2012-03-11 19:52:17 +02:00
|
|
|
|
/**
|
|
|
|
|
* Список последних записей хранится в строке через запятую
|
|
|
|
|
*/
|
|
|
|
|
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);
|
2012-04-14 08:05:46 +03:00
|
|
|
|
$aWallUsers=isset($aAllowData['wall_user']) && is_array($aAllowData['wall_user']) ? $this->User_GetUsersAdditionalData($aWallUserId,$aAllowData['wall_user']) : $this->User_GetUsersAdditionalData($aWallUserId);
|
2012-03-11 19:52:17 +02:00
|
|
|
|
$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());
|
|
|
|
|
}
|
2012-04-15 14:33:26 +03:00
|
|
|
|
if (isset($aWallUsers[$oWall->getWallUserId()])) {
|
|
|
|
|
$oWall->setWallUser($aWallUsers[$oWall->getWallUserId()]);
|
2012-04-14 08:05:46 +03:00
|
|
|
|
} else {
|
|
|
|
|
$oWall->setWallUser(null);
|
|
|
|
|
}
|
2012-03-11 19:52:17 +02:00
|
|
|
|
$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
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param int $iId ID сообщения/записи
|
2012-03-11 19:52:17 +02:00
|
|
|
|
* @return ModuleWall_EntityWall
|
|
|
|
|
*/
|
|
|
|
|
public function GetWallById($iId) {
|
2012-07-08 11:50:36 +03:00
|
|
|
|
if (!is_numeric($iId)) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2012-03-11 19:52:17 +02:00
|
|
|
|
$aResult=$this->GetWallAdditionalData($iId);
|
|
|
|
|
if (isset($aResult[$iId])) {
|
|
|
|
|
return $aResult[$iId];
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обновляет родительские данные у записи - количество ответов и ID последних ответов
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
2012-03-11 19:52:17 +02:00
|
|
|
|
* @param null|int $iLimit
|
|
|
|
|
*/
|
|
|
|
|
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']);
|
2012-03-19 07:31:29 +02:00
|
|
|
|
$aKeys=array_keys($aResult['collection']);
|
|
|
|
|
sort($aKeys,SORT_NUMERIC);
|
|
|
|
|
$oWall->setLastReply(join(',',$aKeys));
|
2012-04-21 06:17:10 +03:00
|
|
|
|
} else {
|
|
|
|
|
$oWall->setCountReply(0);
|
|
|
|
|
$oWall->setLastReply('');
|
2012-03-11 19:52:17 +02:00
|
|
|
|
}
|
2012-04-21 06:17:10 +03:00
|
|
|
|
$this->UpdateWall($oWall);
|
2012-03-11 19:52:17 +02:00
|
|
|
|
}
|
2012-04-13 20:12:59 +03:00
|
|
|
|
/**
|
|
|
|
|
* Удаление сообщения
|
|
|
|
|
*
|
2012-06-27 16:18:38 +03:00
|
|
|
|
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
2012-04-13 20:12:59 +03:00
|
|
|
|
*/
|
|
|
|
|
public function DeleteWall($oWall) {
|
|
|
|
|
$this->oMapper->DeleteWallsByPid($oWall->getId());
|
|
|
|
|
$this->oMapper->DeleteWallById($oWall->getId());
|
2012-04-15 15:00:07 +03:00
|
|
|
|
if ($oWallParent=$oWall->GetPidWall()) {
|
|
|
|
|
$this->UpdatePidWall($oWallParent);
|
|
|
|
|
}
|
2012-04-13 20:12:59 +03:00
|
|
|
|
}
|
2014-05-28 08:37:30 +03:00
|
|
|
|
}
|