1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-26 03:30:48 +03:00

Документация классов

This commit is contained in:
Mzhelskiy Maxim 2012-06-12 20:11:35 +04:00
parent bf7cadd727
commit 7c3afec126
5 changed files with 959 additions and 598 deletions

View file

@ -19,13 +19,15 @@
* ACL(Access Control List)
* Модуль для разруливания ограничений по карме/рейтингу юзера
*
* @package modules.acl
* @since 1.0
*/
class ModuleACL extends Module {
/**
* Коды ответов на запрос о возможности
* Коды ответов на запрос о возможности
* пользователя голосовать за блог
*/
const CAN_VOTE_BLOG_FALSE = 0;
const CAN_VOTE_BLOG_FALSE = 0;
const CAN_VOTE_BLOG_TRUE = 1;
const CAN_VOTE_BLOG_ERROR_CLOSE = 2;
/**
@ -33,19 +35,18 @@ class ModuleACL extends Module {
*/
const CAN_DELETE_BLOG_EMPTY_ONLY = 1;
const CAN_DELETE_BLOG_WITH_TOPICS = 2;
/**
* Инициализация модуля
*
*/
public function Init() {
public function Init() {
}
/**
* Проверяет может ли пользователь создавать блоги
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanCreateBlog(ModuleUser_EntityUser $oUser) {
@ -54,12 +55,11 @@ class ModuleACL extends Module {
}
return false;
}
/**
* Проверяет может ли пользователь создавать топики в определенном блоге
*
* @param Entity_User $oUser
* @param Entity_Blog $oBlog
* @param ModuleUser_EntityUser $oUser Пользователь
* @param ModuleBlog_EntityBlog $oBlog Блог
* @return bool
*/
public function CanAddTopic(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog) {
@ -77,11 +77,10 @@ class ModuleACL extends Module {
}
return false;
}
/**
* Проверяет может ли пользователь создавать комментарии
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanPostComment(ModuleUser_EntityUser $oUser) {
@ -90,11 +89,10 @@ class ModuleACL extends Module {
}
return false;
}
/**
* Проверяет может ли пользователь создавать комментарии по времени(например ограничение максимум 1 коммент в 5 минут)
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanPostCommentTime(ModuleUser_EntityUser $oUser) {
@ -106,67 +104,64 @@ class ModuleACL extends Module {
}
return true;
}
/**
* Проверяет может ли пользователь создавать топик по времени
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanPostTopicTime(ModuleUser_EntityUser $oUser) {
// Для администраторов ограничение по времени не действует
if($oUser->isAdministrator()
or Config::Get('acl.create.topic.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.topic.limit_time_rating'))
return true;
if($oUser->isAdministrator()
or Config::Get('acl.create.topic.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.topic.limit_time_rating'))
return true;
/**
* Проверяем, если топик опубликованный меньше чем acl.create.topic.limit_time секунд назад
*/
$aTopics=$this->Topic_GetLastTopicsByUserId($oUser->getId(),Config::Get('acl.create.topic.limit_time'));
if(isset($aTopics['count']) and $aTopics['count']>0){
if(isset($aTopics['count']) and $aTopics['count']>0){
return false;
}
return true;
}
/**
* Проверяет может ли пользователь отправить инбокс по времени
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanSendTalkTime(ModuleUser_EntityUser $oUser) {
// Для администраторов ограничение по времени не действует
if($oUser->isAdministrator()
or Config::Get('acl.create.talk.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.talk.limit_time_rating'))
return true;
if($oUser->isAdministrator()
or Config::Get('acl.create.talk.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.talk.limit_time_rating'))
return true;
/**
* Проверяем, если топик опубликованный меньше чем acl.create.topic.limit_time секунд назад
*/
$aTalks=$this->Talk_GetLastTalksByUserId($oUser->getId(),Config::Get('acl.create.talk.limit_time'));
if(isset($aTalks['count']) and $aTalks['count']>0){
if(isset($aTalks['count']) and $aTalks['count']>0){
return false;
}
return true;
}
}
/**
* Проверяет может ли пользователь создавать комментарии к инбоксу по времени
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanPostTalkCommentTime(ModuleUser_EntityUser $oUser) {
// Для администраторов ограничение по времени не действует
if($oUser->isAdministrator()
or Config::Get('acl.create.talk_comment.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.talk_comment.limit_time_rating'))
return true;
/**
* Для администраторов ограничение по времени не действует
*/
if($oUser->isAdministrator()
or Config::Get('acl.create.talk_comment.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.talk_comment.limit_time_rating'))
return true;
/**
* Проверяем, если топик опубликованный меньше чем acl.create.topic.limit_time секунд назад
*/
@ -174,34 +169,34 @@ class ModuleACL extends Module {
/**
* Если комментариев не было
*/
if(!is_array($aTalkComments) or $aTalkComments['count']==0){
if(!is_array($aTalkComments) or $aTalkComments['count']==0){
return true;
}
/**
* Достаем последний комментарий
*/
$oComment = array_shift($aTalkComments['collection']);
$sDate = strtotime($oComment->getDate());
if($sDate and ((time()-$sDate)<Config::Get('acl.create.talk_comment.limit_time'))) {
return false;
}
return true;
}
/**
* Проверяет может ли пользователь создавать комментарии используя HTML
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanUseHtmlInComment(ModuleUser_EntityUser $oUser) {
return true;
}
/**
* Проверяет может ли пользователь голосовать за конкретный комментарий
*
* @param Entity_User $oUser
* @param Entity_TopicComment $oComment
* @param ModuleUser_EntityUser $oUser Пользователь
* @param ModuleComment_EntityComment $oComment Комментарий
* @return bool
*/
public function CanVoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment) {
@ -210,12 +205,11 @@ class ModuleACL extends Module {
}
return false;
}
/**
* Проверяет может ли пользователь голосовать за конкретный блог
*
* @param Entity_User $oUser
* @param Entity_Blog $oBlog
* @param ModuleUser_EntityUser $oUser Пользователь
* @param ModuleBlog_EntityBlog $oBlog Блог
* @return bool
*/
public function CanVoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog) {
@ -228,18 +222,16 @@ class ModuleACL extends Module {
return self::CAN_VOTE_BLOG_ERROR_CLOSE;
}
}
if ($oUser->getRating()>=Config::Get('acl.vote.blog.rating')) {
return self::CAN_VOTE_BLOG_TRUE;
}
return self::CAN_VOTE_BLOG_FALSE;
}
/**
* Проверяет может ли пользователь голосовать за конкретный топик
*
* @param Entity_User $oUser
* @param Entity_Topic $oTopic
* @param ModuleUser_EntityUser $oUser Пользователь
* @param ModuleTopic_EntityTopic $oTopic Топик
* @return bool
*/
public function CanVoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic) {
@ -248,12 +240,11 @@ class ModuleACL extends Module {
}
return false;
}
/**
* Проверяет может ли пользователь голосовать за конкретного пользователя
*
* @param Entity_User $oUser
* @param Entity_User $oUserTarget
* @param ModuleUser_EntityUser $oUser Пользователь
* @param ModuleUser_EntityUser $oUserTarget Пользователь за которого голосуем
* @return bool
*/
public function CanVoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget) {
@ -265,8 +256,8 @@ class ModuleACL extends Module {
/**
* Проверяет можно ли юзеру слать инвайты
*
* @param ModuleUser_EntityUser $oUser
* @return unknown
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanSendInvite(ModuleUser_EntityUser $oUser) {
if ($this->User_GetCountInviteAvailable($oUser)==0) {
@ -274,14 +265,13 @@ class ModuleACL extends Module {
}
return true;
}
/**
* Проверяет можно или нет юзеру постить в данный блог
*
* @param object $oBlog
* @param object $oUser
* @param ModuleBlog_EntityBlog $oBlog Блог
* @param ModuleUser_EntityUser $oUser Пользователь
*/
public function IsAllowBlog($oBlog,$oUser) {
public function IsAllowBlog($oBlog,$oUser) {
if ($oUser->isAdministrator()) {
return true;
}
@ -297,13 +287,12 @@ class ModuleACL extends Module {
}
}
return false;
}
}
/**
* Проверяет можно или нет пользователю редактировать данный топик
*
* @param object $oTopic
* @param object $oUser
* @param ModuleTopic_EntityTopic $oTopic Топик
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function IsAllowEditTopic($oTopic,$oUser) {
@ -327,19 +316,19 @@ class ModuleACL extends Module {
return true;
}
return false;
}
}
/**
* Проверяет можно или нет пользователю удалять данный топик
*
* @param object $oTopic
* @param object $oUser
* @param ModuleTopic_EntityTopic $oTopic Топик
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function IsAllowDeleteTopic($oTopic,$oUser) {
public function IsAllowDeleteTopic($oTopic,$oUser) {
/**
* Разрешаем если это админ сайта или автор топика
*/
if ($oTopic->getUserId()==$oUser->getId() or $oUser->isAdministrator()) {
if ($oTopic->getUserId()==$oUser->getId() or $oUser->isAdministrator()) {
return true;
}
/**
@ -357,14 +346,14 @@ class ModuleACL extends Module {
}
return false;
}
/**
* Проверяет можно или нет пользователю удалять данный блог
*
* @param object $oBlog
* @param object $oUser
* @param ModuleBlog_EntityBlog $oBlog Блог
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function IsAllowDeleteBlog($oBlog,$oUser) {
public function IsAllowDeleteBlog($oBlog,$oUser) {
/**
* Разрешаем если это админ сайта или автор блога
*/
@ -377,118 +366,101 @@ class ModuleACL extends Module {
if($oBlog->getOwnerId()==$oUser->getId()) {
return self::CAN_DELETE_BLOG_EMPTY_ONLY;
}
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
if($oBlogUser and $oBlogUser->getIsAdministrator()) {
return self::CAN_DELETE_BLOG_EMPTY_ONLY;
return self::CAN_DELETE_BLOG_EMPTY_ONLY;
}
return false;
}
/**
/**
* Проверяет может ли пользователь удалить комментарий
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function CanDeleteComment($oUser) {
if (!$oUser || !$oUser->isAdministrator()) {
return false;
}
return true;
return true;
}
/**
/**
* Проверяет может ли пользователь публиковать на главной
*
* @param Entity_User $oUser
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function IsAllowPublishIndex(ModuleUser_EntityUser $oUser) {
if ($oUser->isAdministrator()) {
return true;
}
return false;
return false;
}
/**
/**
* Проверяет можно или нет пользователю редактировать данный блог
*
* @param object $oBlog
* @param object $oUser
* @param ModuleBlog_EntityBlog $oBlog Блог
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function IsAllowEditBlog($oBlog,$oUser) {
if ($oUser->isAdministrator()) {
return true;
}
if ($oUser->isAdministrator()) {
return true;
}
/**
* Разрешаем если это создатель блога
*/
if ($oBlog->getOwnerId() == $oUser->getId()) {
return true;
}
/**
* Явлется ли авторизованный пользователь администратором блога
*/
$oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
/**
* Разрешаем если это создатель блога
*/
if ($oBlog->getOwnerId() == $oUser->getId()) {
return true;
}
/**
* Явлется ли авторизованный пользователь администратором блога
*/
$oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
if ($oBlogUser && $oBlogUser->getIsAdministrator()) {
return true;
}
return false;
}
/**
if ($oBlogUser && $oBlogUser->getIsAdministrator()) {
return true;
}
return false;
}
/**
* Проверяет можно или нет пользователю управлять пользователями блога
*
* @param object $oBlog
* @param object $oUser
* @param ModuleBlog_EntityBlog $oBlog Блог
* @param ModuleUser_EntityUser $oUser Пользователь
* @return bool
*/
public function IsAllowAdminBlog($oBlog,$oUser) {
if ($oUser->isAdministrator()) {
return true;
}
/**
* Разрешаем если это создатель блога
*/
if ($oBlog->getOwnerId() == $oUser->getId()) {
return true;
}
/**
* Явлется ли авторизованный пользователь администратором блога
*/
$oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
if ($oBlogUser && $oBlogUser->getIsAdministrator()) {
return true;
}
return false;
if ($oUser->isAdministrator()) {
return true;
}
/**
* Разрешаем если это создатель блога
*/
if ($oBlog->getOwnerId() == $oUser->getId()) {
return true;
}
/**
* Явлется ли авторизованный пользователь администратором блога
*/
$oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
if ($oBlogUser && $oBlogUser->getIsAdministrator()) {
return true;
}
return false;
}
/**
* Проверка на ограничение по времени на постинг на стене
*
* @param $oUser
* @param $oWall
* @param ModuleUser_EntityUser $oUser Пользователь
* @param ModuleWall_EntityWall $oWall Объект сообщения на стене
* @return bool
*/
public function CanAddWallTime($oUser,$oWall) {
// Для администраторов ограничение по времени не действует
/**
* Для администраторов ограничение по времени не действует
*/
if($oUser->isAdministrator()
or Config::Get('acl.create.wall.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.wall.limit_time_rating')) {
@ -515,6 +487,5 @@ class ModuleACL extends Module {
}
return true;
}
}
?>

View file

@ -18,6 +18,8 @@
/**
* Модуль для работы с блогами
*
* @package modules.blog
* @since 1.0
*/
class ModuleBlog extends Module {
/**
@ -39,22 +41,35 @@ class ModuleBlog extends Module {
* Забаненный в блоге пользователь
*/
const BLOG_USER_ROLE_BAN = -4;
protected $oMapperBlog;
/**
* Объект маппера
*
* @var ModuleBlog_MapperBlog
*/
protected $oMapperBlog;
/**
* Объект текущего пользователя
*
* @var ModuleUser_EntityUser|null
*/
protected $oUserCurrent=null;
/**
* Инициализация
*
*/
public function Init() {
$this->oMapperBlog=Engine::GetMapper(__CLASS__);
$this->oMapperBlog->SetUserCurrent($this->User_GetUserCurrent());
$this->oUserCurrent=$this->User_GetUserCurrent();
$this->oUserCurrent=$this->User_GetUserCurrent();
}
/**
* Получает дополнительные данные(объекты) для блогов по их ID
*
* @param array $aBlogId Список ID блогов
* @param array $aAllowData Список типов дополнительных данных, которые нужно получить для блогов
* @param array $aOrder Порядок сортировки
* @return array
*/
public function GetBlogsAdditionalData($aBlogId,$aAllowData=null,$aOrder=null) {
if (is_null($aAllowData)) {
@ -71,22 +86,22 @@ class ModuleBlog extends Module {
/**
* Формируем ID дополнительных данных, которые нужно получить
*/
$aUserId=array();
$aUserId=array();
foreach ($aBlogs as $oBlog) {
if (isset($aAllowData['owner'])) {
$aUserId[]=$oBlog->getOwnerId();
}
}
}
/**
* Получаем дополнительные данные
*/
$aBlogUsers=array();
$aBlogsVote=array();
$aUsers=isset($aAllowData['owner']) && is_array($aAllowData['owner']) ? $this->User_GetUsersAdditionalData($aUserId,$aAllowData['owner']) : $this->User_GetUsersAdditionalData($aUserId);
$aUsers=isset($aAllowData['owner']) && is_array($aAllowData['owner']) ? $this->User_GetUsersAdditionalData($aUserId,$aAllowData['owner']) : $this->User_GetUsersAdditionalData($aUserId);
if (isset($aAllowData['relation_user']) and $this->oUserCurrent) {
$aBlogUsers=$this->GetBlogUsersByArrayBlog($aBlogId,$this->oUserCurrent->getId());
$aBlogUsers=$this->GetBlogUsersByArrayBlog($aBlogId,$this->oUserCurrent->getId());
}
if (isset($aAllowData['vote']) and $this->oUserCurrent) {
if (isset($aAllowData['vote']) and $this->oUserCurrent) {
$aBlogsVote=$this->Vote_GetVoteByArray($aBlogId,'blog',$this->oUserCurrent->getId());
}
/**
@ -108,18 +123,19 @@ class ModuleBlog extends Module {
$oBlog->setUserIsModerator(false);
}
if (isset($aBlogsVote[$oBlog->getId()])) {
$oBlog->setVote($aBlogsVote[$oBlog->getId()]);
$oBlog->setVote($aBlogsVote[$oBlog->getId()]);
} else {
$oBlog->setVote(null);
}
}
return $aBlogs;
}
/**
* Список блогов по ID
* Возвращает список блогов по ID
*
* @param array $aUserId
* @param array $aBlogId Список ID блогов
* @param array|null $aOrder Порядок сортировки
* @return array
*/
public function GetBlogsByArrayId($aBlogId,$aOrder=null) {
if (!$aBlogId) {
@ -138,25 +154,25 @@ class ModuleBlog extends Module {
* Делаем мульти-запрос к кешу
*/
$aCacheKeys=func_build_cache_keys($aBlogId,'blog_');
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
/**
* проверяем что досталось из кеша
*/
foreach ($aCacheKeys as $sValue => $sKey ) {
if (array_key_exists($sKey,$data)) {
if (array_key_exists($sKey,$data)) {
if ($data[$sKey]) {
$aBlogs[$data[$sKey]->getId()]=$data[$sKey];
} else {
$aBlogIdNotNeedQuery[]=$sValue;
}
}
}
}
}
/**
* Смотрим каких блогов не было в кеше и делаем запрос в БД
*/
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogs));
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
*/
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogs));
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
$aBlogIdNeedStore=$aBlogIdNeedQuery;
if ($data = $this->oMapperBlog->GetBlogsByArrayId($aBlogIdNeedQuery)) {
foreach ($data as $oBlog) {
@ -173,41 +189,42 @@ class ModuleBlog extends Module {
*/
foreach ($aBlogIdNeedStore as $sId) {
$this->Cache_Set(null, "blog_{$sId}", array(), 60*60*24*4);
}
}
/**
* Сортируем результат согласно входящему массиву
*/
$aBlogs=func_array_sort_by_keys($aBlogs,$aBlogId);
return $aBlogs;
return $aBlogs;
}
/**
* Список блогов по ID, но используя единый кеш
* Возвращает список блогов по ID, но используя единый кеш
*
* @param unknown_type $aBlogId
* @return unknown
* @param array $aBlogId Список ID блогов
* @param array|null $aOrder Сортировка блогов
* @return array
*/
public function GetBlogsByArrayIdSolid($aBlogId,$aOrder=null) {
if (!is_array($aBlogId)) {
$aBlogId=array($aBlogId);
}
$aBlogId=array_unique($aBlogId);
$aBlogs=array();
$aBlogId=array_unique($aBlogId);
$aBlogs=array();
$s=join(',',$aBlogId);
if (false === ($data = $this->Cache_Get("blog_id_{$s}"))) {
if (false === ($data = $this->Cache_Get("blog_id_{$s}"))) {
$data = $this->oMapperBlog->GetBlogsByArrayId($aBlogId,$aOrder);
foreach ($data as $oBlog) {
$aBlogs[$oBlog->getId()]=$oBlog;
}
$this->Cache_Set($aBlogs, "blog_id_{$s}", array("blog_update"), 60*60*24*1);
return $aBlogs;
}
}
return $data;
}
/**
* Получить персональный блог юзера
*
* @param Entity_User $oUser
* @return unknown
* @param int $sUserId ID пользователя
* @return ModuleBlog_EntityBlog
*/
public function GetPersonalBlogByUserId($sUserId) {
$id=$this->oMapperBlog->GetPersonalBlogByUserId($sUserId);
@ -216,53 +233,53 @@ class ModuleBlog extends Module {
/**
* Получить блог по айдишнику(номеру)
*
* @param unknown_type $sBlogId
* @return unknown
* @param int $sBlogId ID блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogById($sBlogId) {
$aBlogs=$this->GetBlogsAdditionalData($sBlogId);
if (isset($aBlogs[$sBlogId])) {
return $aBlogs[$sBlogId];
}
return null;
return null;
}
/**
* Получить блог по УРЛу
*
* @param unknown_type $sBlogUrl
* @return unknown
* @param string $sBlogUrl URL блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogByUrl($sBlogUrl) {
if (false === ($id = $this->Cache_Get("blog_url_{$sBlogUrl}"))) {
if ($id = $this->oMapperBlog->GetBlogByUrl($sBlogUrl)) {
$this->Cache_Set($id, "blog_url_{$sBlogUrl}", array("blog_update_{$id}"), 60*60*24*2);
public function GetBlogByUrl($sBlogUrl) {
if (false === ($id = $this->Cache_Get("blog_url_{$sBlogUrl}"))) {
if ($id = $this->oMapperBlog->GetBlogByUrl($sBlogUrl)) {
$this->Cache_Set($id, "blog_url_{$sBlogUrl}", array("blog_update_{$id}"), 60*60*24*2);
} else {
$this->Cache_Set(null, "blog_url_{$sBlogUrl}", array('blog_update','blog_new'), 60*60);
}
}
return $this->GetBlogById($id);
}
return $this->GetBlogById($id);
}
/**
* Получить блог по названию
*
* @param unknown_type $sTitle
* @return unknown
* @param string $sTitle Название блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogByTitle($sTitle) {
if (false === ($id = $this->Cache_Get("blog_title_{$sTitle}"))) {
if ($id = $this->oMapperBlog->GetBlogByTitle($sTitle)) {
$this->Cache_Set($id, "blog_title_{$sTitle}", array("blog_update_{$id}",'blog_new'), 60*60*24*2);
public function GetBlogByTitle($sTitle) {
if (false === ($id = $this->Cache_Get("blog_title_{$sTitle}"))) {
if ($id = $this->oMapperBlog->GetBlogByTitle($sTitle)) {
$this->Cache_Set($id, "blog_title_{$sTitle}", array("blog_update_{$id}",'blog_new'), 60*60*24*2);
} else {
$this->Cache_Set(null, "blog_title_{$sTitle}", array('blog_update','blog_new'), 60*60);
}
}
return $this->GetBlogById($id);
return $this->GetBlogById($id);
}
/**
* Создаёт персональный блог
*
* @param Entity_User $oUser
* @return unknown
* @param ModuleUser_EntityUser $oUser Пользователь
* @return ModuleBlog_EntityBlog|bool
*/
public function CreatePersonalBlog(ModuleUser_EntityUser $oUser) {
$oBlog=Engine::GetEntity('Blog');
@ -270,19 +287,19 @@ class ModuleBlog extends Module {
$oBlog->setTitle($this->Lang_Get('blogs_personal_title').' '.$oUser->getLogin());
$oBlog->setType('personal');
$oBlog->setDescription($this->Lang_Get('blogs_personal_description'));
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
$oBlog->setLimitRatingTopic(-1000);
$oBlog->setUrl(null);
$oBlog->setUrl(null);
$oBlog->setAvatar(null);
return $this->AddBlog($oBlog);
return $this->AddBlog($oBlog);
}
/**
* Добавляет блог
*
* @param ModuleBlog_EntityBlog $oBlog
* @return unknown
* @param ModuleBlog_EntityBlog $oBlog Блог
* @return ModuleBlog_EntityBlog|bool
*/
public function AddBlog(ModuleBlog_EntityBlog $oBlog) {
public function AddBlog(ModuleBlog_EntityBlog $oBlog) {
if ($sId=$this->oMapperBlog->AddBlog($oBlog)) {
$oBlog->setId($sId);
//чистим зависимые кеши
@ -294,30 +311,30 @@ class ModuleBlog extends Module {
/**
* Обновляет блог
*
* @param ModuleBlog_EntityBlog $oBlog
* @return unknown
* @param ModuleBlog_EntityBlog $oBlog Блог
* @return ModuleBlog_EntityBlog|bool
*/
public function UpdateBlog(ModuleBlog_EntityBlog $oBlog) {
$oBlog->setDateEdit(date("Y-m-d H:i:s"));
$res=$this->oMapperBlog->UpdateBlog($oBlog);
if ($res) {
$res=$this->oMapperBlog->UpdateBlog($oBlog);
if ($res) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update',"blog_update_{$oBlog->getId()}","topic_update"));
$this->Cache_Delete("blog_{$oBlog->getId()}");
return true;
}
return false;
}
}
/**
* Добавляет отношение юзера к блогу, по сути присоединяет к блогу
*
* @param ModuleBlog_EntityBlogUser $oBlogUser
* @return unknown
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект связи(отношения) блога с пользователем
* @return bool
*/
public function AddRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
if ($this->oMapperBlog->AddRelationBlogUser($oBlogUser)) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
if ($this->oMapperBlog->AddRelationBlogUser($oBlogUser)) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
return true;
}
return false;
@ -325,12 +342,12 @@ class ModuleBlog extends Module {
/**
* Удалет отношение юзера к блогу, по сути отключает от блога
*
* @param ModuleBlog_EntityBlogUser $oBlogUser
* @return unknown
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект связи(отношения) блога с пользователем
* @return bool
*/
public function DeleteRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
if ($this->oMapperBlog->DeleteRelationBlogUser($oBlogUser)) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
return true;
}
@ -339,8 +356,9 @@ class ModuleBlog extends Module {
/**
* Получает список блогов по хозяину
*
* @param unknown_type $sUserId
* @return unknown
* @param int $sUserId ID пользователя
* @param bool $bReturnIdOnly Возвращать только ID блогов или полные объекты
* @return array
*/
public function GetBlogsByOwnerId($sUserId,$bReturnIdOnly=false) {
$data=$this->oMapperBlog->GetBlogsByOwnerId($sUserId);
@ -348,14 +366,15 @@ class ModuleBlog extends Module {
* Возвращаем только иденитификаторы
*/
if($bReturnIdOnly) return $data;
$data=$this->GetBlogsAdditionalData($data);
return $data;
}
/**
* Получает список всех НЕ персональных блогов
*
* @return unknown
* @param bool $bReturnIdOnly Возвращать только ID блогов или полные объекты
* @return array
*/
public function GetBlogs($bReturnIdOnly=false) {
$data=$this->oMapperBlog->GetBlogs();
@ -363,30 +382,29 @@ class ModuleBlog extends Module {
* Возвращаем только иденитификаторы
*/
if($bReturnIdOnly) return $data;
$data=$this->GetBlogsAdditionalData($data);
return $data;
}
/**
* Получает список пользователей блога.
* Если роль не указана, то считаем что
* поиск производиться по положительным значениям
* (статусом выше GUEST).
* Если роль не указана, то считаем что поиск производиться по положительным значениям (статусом выше GUEST).
*
* @param string $sBlogId
* @param (null|int|array) $iRole
* @param int $sBlogId ID блога
* @param int|null $iRole Роль пользователей в блоге
* @param int $iPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogUsersByBlogId($sBlogId,$iRole=null,$iPage=1,$iPerPage=100) {
$aFilter=array(
'blog_id'=> $sBlogId,
'blog_id'=> $sBlogId,
);
if($iRole!==null) {
$aFilter['user_role']=$iRole;
$aFilter['user_role']=$iRole;
}
$s=serialize($aFilter);
if (false === ($data = $this->Cache_Get("blog_relation_user_by_filter_{$s}_{$iPage}_{$iPerPage}"))) {
if (false === ($data = $this->Cache_Get("blog_relation_user_by_filter_{$s}_{$iPage}_{$iPerPage}"))) {
$data = array('collection'=>$this->oMapperBlog->GetBlogUsers($aFilter,$iCount,$iPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, "blog_relation_user_by_filter_{$s}_{$iPage}_{$iPerPage}", array("blog_relation_change_blog_{$sBlogId}"), 60*60*24*3);
}
@ -400,7 +418,7 @@ class ModuleBlog extends Module {
}
$aUsers=$this->User_GetUsersAdditionalData($aUserId);
$aBlogs=$this->Blog_GetBlogsAdditionalData($sBlogId);
$aResults=array();
foreach ($data['collection'] as $oBlogUser) {
if (isset($aUsers[$oBlogUser->getUserId()])) {
@ -417,13 +435,15 @@ class ModuleBlog extends Module {
}
$data['collection']=$aResults;
}
return $data;
return $data;
}
/**
* Получает отношения юзера к блогам(состоит в блоге или нет)
*
* @param unknown_type $sUserId
* @return unknown
* @param int $sUserId ID пользователя
* @param int|null $iRole Роль пользователя в блоге
* @param bool $bReturnIdOnly Возвращать только ID блогов или полные объекты
* @return array
*/
public function GetBlogUsersByUserId($sUserId,$iRole=null,$bReturnIdOnly=false) {
$aFilter=array(
@ -433,19 +453,18 @@ class ModuleBlog extends Module {
$aFilter['user_role']=$iRole;
}
$s=serialize($aFilter);
if (false === ($data = $this->Cache_Get("blog_relation_user_by_filter_$s"))) {
if (false === ($data = $this->Cache_Get("blog_relation_user_by_filter_$s"))) {
$data = $this->oMapperBlog->GetBlogUsers($aFilter);
$this->Cache_Set($data, "blog_relation_user_by_filter_$s", array("blog_update", "blog_relation_change_{$sUserId}"), 60*60*24*3);
}
/**
* Достаем дополнительные данные, для этого формируем список блогов и делаем мульти-запрос
*/
$aBlogId=array();
$aBlogId=array();
if ($data) {
foreach ($data as $oBlogUser) {
$aBlogId[]=$oBlogUser->getBlogId();
}
/**
* Если указано возвращать полные объекты
*/
@ -463,7 +482,7 @@ class ModuleBlog extends Module {
} else {
$oBlogUser->setBlog(null);
}
}
}
}
}
return ($bReturnIdOnly) ? $aBlogId : $data;
@ -471,11 +490,11 @@ class ModuleBlog extends Module {
/**
* Состоит ли юзер в конкретном блоге
*
* @param unknown_type $sBlogId
* @param unknown_type $sUserId
* @return unknown
* @param int $sBlogId ID блога
* @param int $sUserId ID пользователя
* @return ModuleBlog_EntityBlogUser|null
*/
public function GetBlogUserByBlogIdAndUserId($sBlogId,$sUserId) {
public function GetBlogUserByBlogIdAndUserId($sBlogId,$sUserId) {
if ($aBlogUser=$this->GetBlogUsersByArrayBlog($sBlogId,$sUserId)) {
if (isset($aBlogUser[$sBlogId])) {
return $aBlogUser[$sBlogId];
@ -486,7 +505,9 @@ class ModuleBlog extends Module {
/**
* Получить список отношений блог-юзер по списку айдишников
*
* @param unknown_type $aTopicId
* @param array $aBlogId Список ID блогов
* @param int $sUserId ID пользователя
* @return array
*/
public function GetBlogUsersByArrayBlog($aBlogId,$sUserId) {
if (!$aBlogId) {
@ -505,25 +526,25 @@ class ModuleBlog extends Module {
* Делаем мульти-запрос к кешу
*/
$aCacheKeys=func_build_cache_keys($aBlogId,'blog_relation_user_','_'.$sUserId);
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
/**
* проверяем что досталось из кеша
*/
foreach ($aCacheKeys as $sValue => $sKey ) {
if (array_key_exists($sKey,$data)) {
if (array_key_exists($sKey,$data)) {
if ($data[$sKey]) {
$aBlogUsers[$data[$sKey]->getBlogId()]=$data[$sKey];
} else {
$aBlogIdNotNeedQuery[]=$sValue;
}
}
}
}
}
/**
* Смотрим каких блогов не было в кеше и делаем запрос в БД
*/
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogUsers));
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
*/
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogUsers));
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
$aBlogIdNeedStore=$aBlogIdNeedQuery;
if ($data = $this->oMapperBlog->GetBlogUsersByArrayBlog($aBlogIdNeedQuery,$sUserId)) {
foreach ($data as $oBlogUser) {
@ -540,44 +561,56 @@ class ModuleBlog extends Module {
*/
foreach ($aBlogIdNeedStore as $sId) {
$this->Cache_Set(null, "blog_relation_user_{$sId}_{$sUserId}", array(), 60*60*24*4);
}
}
/**
* Сортируем результат согласно входящему массиву
*/
$aBlogUsers=func_array_sort_by_keys($aBlogUsers,$aBlogId);
return $aBlogUsers;
}
return $aBlogUsers;
}
/**
* Получить список отношений блог-юзер по списку айдишников используя общий кеш
*
* @param array $aBlogId Список ID блогов
* @param int $sUserId ID пользователя
* @return array
*/
public function GetBlogUsersByArrayBlogSolid($aBlogId,$sUserId) {
if (!is_array($aBlogId)) {
$aBlogId=array($aBlogId);
}
$aBlogId=array_unique($aBlogId);
$aBlogUsers=array();
$aBlogId=array_unique($aBlogId);
$aBlogUsers=array();
$s=join(',',$aBlogId);
if (false === ($data = $this->Cache_Get("blog_relation_user_{$sUserId}_id_{$s}"))) {
if (false === ($data = $this->Cache_Get("blog_relation_user_{$sUserId}_id_{$s}"))) {
$data = $this->oMapperBlog->GetBlogUsersByArrayBlog($aBlogId,$sUserId);
foreach ($data as $oBlogUser) {
$aBlogUsers[$oBlogUser->getBlogId()]=$oBlogUser;
}
$this->Cache_Set($aBlogUsers, "blog_relation_user_{$sUserId}_id_{$s}", array("blog_update", "blog_relation_change_{$sUserId}"), 60*60*24*1);
return $aBlogUsers;
}
}
return $data;
}
/**
* Обновляет отношения пользователя с блогом
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отновшения
* @return bool
*/
public function UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
return $this->oMapperBlog->UpdateRelationBlogUser($oBlogUser);
}
/**
* Возвращает список блогов по фильтру
*
* @param $aFilter
* @param $aOrder
* @param $iCurrPage
* @param $iPerPage
* @param array $aAllowData
* @param array $aFilter Фильтр выборки блогов
* @param array $aOrder Сортировка блогов
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @param array $aAllowData Список типов данных, которые нужно подтянуть к списку блогов
* @return array('collection'=>array,'count'=>int)
*/
public function GetBlogsByFilter($aFilter,$aOrder,$iCurrPage,$iPerPage,$aAllowData=array('owner'=>array(),'relation_user')) {
@ -592,8 +625,8 @@ class ModuleBlog extends Module {
/**
* Получает список блогов по рейтингу
*
* @param $iCurrPage
* @param $iPerPage
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array('collection'=>array,'count'=>int)
*/
public function GetBlogsRating($iCurrPage,$iPerPage) {
@ -602,40 +635,40 @@ class ModuleBlog extends Module {
/**
* Список подключенных блогов по рейтингу
*
* @param unknown_type $sUserId
* @param unknown_type $iLimit
* @return unknown
* @param int $sUserId ID пользователя
* @param int $iLimit Ограничение на количество в ответе
* @return array
*/
public function GetBlogsRatingJoin($sUserId,$iLimit) {
if (false === ($data = $this->Cache_Get("blog_rating_join_{$sUserId}_{$iLimit}"))) {
$data = $this->oMapperBlog->GetBlogsRatingJoin($sUserId,$iLimit);
public function GetBlogsRatingJoin($sUserId,$iLimit) {
if (false === ($data = $this->Cache_Get("blog_rating_join_{$sUserId}_{$iLimit}"))) {
$data = $this->oMapperBlog->GetBlogsRatingJoin($sUserId,$iLimit);
$this->Cache_Set($data, "blog_rating_join_{$sUserId}_{$iLimit}", array('blog_update',"blog_relation_change_{$sUserId}"), 60*60*24);
}
return $data;
return $data;
}
/**
* Список своих блогов по рейтингу
*
* @param unknown_type $sUserId
* @param unknown_type $iLimit
* @return unknown
* @param int $sUserId ID пользователя
* @param int $iLimit Ограничение на количество в ответе
* @return array
*/
public function GetBlogsRatingSelf($sUserId,$iLimit) {
$aResult=$this->GetBlogsByFilter(array('exclude_type'=>'personal','user_owner_id'=>$sUserId),array('blog_rating'=>'desc'),1,$iLimit);
return $aResult['collection'];
}
}
/**
* Получает список блогов в которые может постить юзер
*
* @param unknown_type $oUser
* @return unknown
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @return array
*/
public function GetBlogsAllowByUser($oUser) {
public function GetBlogsAllowByUser($oUser) {
if ($oUser->isAdministrator()) {
return $this->GetBlogs();
} else {
} else {
$aAllowBlogsUser=$this->GetBlogsByOwnerId($oUser->getId());
$aBlogUsers=$this->GetBlogUsersByUserId($oUser->getId());
$aBlogUsers=$this->GetBlogUsersByUserId($oUser->getId());
foreach ($aBlogUsers as $oBlogUser) {
$oBlog=$oBlogUser->getBlog();
if ($this->ACL_CanAddTopic($oUser,$oBlog) or $oBlogUser->getIsAdministrator() or $oBlogUser->getIsModerator()) {
@ -643,79 +676,69 @@ class ModuleBlog extends Module {
}
}
return $aAllowBlogsUser;
}
}
}
}
/**
* Получаем массив блогов,
* которые являются открытыми для пользователя
* Получаем массив блогов, которые являются открытыми для пользователя
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @return array
*/
public function GetAccessibleBlogsByUser($oUser) {
if ($oUser->isAdministrator()) {
return $this->GetBlogs(true);
}
if (false === ($aOpenBlogsUser = $this->Cache_Get("blog_accessible_user_{$oUser->getId()}"))) {
/**
* Заносим блоги, созданные пользователем
*/
$aOpenBlogsUser=array();
* Заносим блоги, созданные пользователем
*/
$aOpenBlogsUser=$this->GetBlogsByOwnerId($oUser->getId(),true);
/**
* Добавляем блоги, в которых состоит пользователь
* (читателем, модератором, или администратором)
*/
* Добавляем блоги, в которых состоит пользователь
* (читателем, модератором, или администратором)
*/
$aOpenBlogsUser=array_merge($aOpenBlogsUser,$this->GetBlogUsersByUserId($oUser->getId(),null,true));
$this->Cache_Set($aOpenBlogsUser, "blog_accessible_user_{$oUser->getId()}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
}
return $aOpenBlogsUser;
}
/**
* Получаем массив идентификаторов блогов,
* которые являются закрытыми для пользователя
* Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleUser_EntityUser|null $oUser Пользователь
* @return array
*/
*/
public function GetInaccessibleBlogsByUser($oUser=null) {
if ($oUser&&$oUser->isAdministrator()) {
return array();
}
$sUserId=$oUser ? $oUser->getId() : 'quest';
$sUserId=$oUser ? $oUser->getId() : 'quest';
if (false === ($aCloseBlogs = $this->Cache_Get("blog_inaccessible_user_{$sUserId}"))) {
$aCloseBlogs=array();
$aCloseBlogs = $this->oMapperBlog->GetCloseBlogs();
if($oUser) {
/**
* Получаем массив идентификаторов блогов,
* которые являются откытыми для данного пользователя
*/
$aOpenBlogs = array();
* Получаем массив идентификаторов блогов,
* которые являются откытыми для данного пользователя
*/
$aOpenBlogs=$this->GetBlogUsersByUserId($oUser->getId(),null,true);
$aCloseBlogs=array_diff($aCloseBlogs,$aOpenBlogs);
}
// Сохраняем в кеш
/**
* Сохраняем в кеш
*/
if ($oUser) {
$this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
$this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
} else {
$this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update'), 60*60*24*3);
}
}
return $aCloseBlogs;
}
/**
* Удаляет блог
*
* @param int $iBlogId
* @param int $iBlogId ID блога
* @return bool
*/
public function DeleteBlog($iBlogId) {
@ -723,10 +746,10 @@ class ModuleBlog extends Module {
$iBlogId = $iBlogId->getId();
}
/**
* Получаем идентификаторы топиков блога. Удаляем топики блога.
* Получаем идентификаторы топиков блога. Удаляем топики блога.
* При удалении топиков удаляются комментарии к ним и голоса.
*/
$aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId);
$aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId);
/**
* Если блог не удален, возвращаем false
*/
@ -742,7 +765,7 @@ class ModuleBlog extends Module {
)
);
$this->Cache_Delete("blog_{$iBlogId}");
if(is_array($aTopicIds) and count($aTopicIds)) {
/**
* Удаляем топики
@ -757,47 +780,41 @@ class ModuleBlog extends Module {
}
}
/**
* Удаляем связи пользователей блога.
*/
if(Config::Get('db.tables.engine')!="InnoDB"){
if(Config::Get('db.tables.engine')!="InnoDB"){
$this->oMapperBlog->DeleteBlogUsersByBlogId($iBlogId);
}
/**
* Удаляем голосование за блог
*/
$this->Vote_DeleteVoteByTarget($iBlogId, 'blog');
/**
* Удаляем комментарии к записям из блога и метки прямого эфира
*/
return true;
}
/**
* Upload blog avatar on server
* Make resized images
* Загружает аватар в блог
*
* @param array $aFile
* @param ModuleBlog_EntityBlog $oUser
* @return (string|bool)
* @param array $aFile Массив $_FILES при загрузке аватара
* @param ModuleBlog_EntityBlog $oBlog Блог
* @return bool
*/
public function UploadBlogAvatar($aFile,$oBlog) {
if(!is_array($aFile) || !isset($aFile['tmp_name'])) {
return false;
}
$sFileTmp=Config::Get('sys.cache.dir').func_generator();
$sFileTmp=Config::Get('sys.cache.dir').func_generator();
if (!move_uploaded_file($aFile['tmp_name'],$sFileTmp)) {
return false;
}
$sPath=$this->Image_GetIdDir($oBlog->getOwnerId());
$aParams=$this->Image_BuildParams('avatar');
$oImage=$this->Image_CreateImageObject($sFileTmp);
/**
* Если объект изображения не создан,
* Если объект изображения не создан,
* возвращаем ошибку
*/
if($sError=$oImage->get_last_error()) {
@ -805,12 +822,12 @@ class ModuleBlog extends Module {
// $this->Message_AddError($sError,$this->Lang_Get('error'));
@unlink($sFileTmp);
return false;
}
}
/**
* Срезаем квадрат
*/
$oImage = $this->Image_CropSquare($oImage);
$aSize=Config::Get('module.blog.avatar_size');
rsort($aSize,SORT_NUMERIC);
$sSizeBig=array_shift($aSize);
@ -835,36 +852,34 @@ class ModuleBlog extends Module {
return false;
}
/**
* Delete blog avatar from server
* Удаляет аватар блога с сервера
*
* @param ModuleBlog_EntityBlog $oUser
* @param ModuleBlog_EntityBlog $oBlog Блог
*/
public function DeleteBlogAvatar($oBlog) {
/**
* Если аватар есть, удаляем его и его рейсайзы
*/
if($oBlog->getAvatar()) {
if($oBlog->getAvatar()) {
$aSize=array_merge(Config::Get('module.blog.avatar_size'),array(48));
foreach ($aSize as $iSize) {
$this->Image_RemoveFile($this->Image_GetServerPath($oBlog->getAvatarPath($iSize)));
}
}
}
}
/**
* Пересчет количества топиков в блогах
*
* @return mixed
* @return bool
*/
public function RecalculateCountTopic() {
return $this->oMapperBlog->RecalculateCountTopic();
}
/**
* Пересчет количества топиков в конкретном блоге
*
* @param $iBlogId
* @return mixed
* @param int $iBlogId ID блога
* @return bool
*/
public function RecalculateCountTopicByBlogId($iBlogId) {
return $this->oMapperBlog->RecalculateCountTopic($iBlogId);

View file

@ -15,144 +15,352 @@
---------------------------------------------------------
*/
class ModuleBlog_EntityBlog extends Entity
{
public function getId() {
return $this->_getDataOne('blog_id');
}
public function getOwnerId() {
return $this->_getDataOne('user_owner_id');
}
public function getTitle() {
return $this->_getDataOne('blog_title');
}
public function getDescription() {
return $this->_getDataOne('blog_description');
}
public function getType() {
return $this->_getDataOne('blog_type');
}
public function getDateAdd() {
return $this->_getDataOne('blog_date_add');
}
public function getDateEdit() {
return $this->_getDataOne('blog_date_edit');
}
public function getRating() {
return number_format(round($this->_getDataOne('blog_rating'),2), 2, '.', '');
}
public function getCountVote() {
return $this->_getDataOne('blog_count_vote');
}
public function getCountUser() {
return $this->_getDataOne('blog_count_user');
}
/**
* Сущность блога
*
* @package modules.blog
* @since 1.0
*/
class ModuleBlog_EntityBlog extends Entity {
/**
* Возвращает ID блога
*
* @return int|null
*/
public function getId() {
return $this->_getDataOne('blog_id');
}
/**
* Возвращает ID хозяина блога
*
* @return int|null
*/
public function getOwnerId() {
return $this->_getDataOne('user_owner_id');
}
/**
* Возвращает название блога
*
* @return string|null
*/
public function getTitle() {
return $this->_getDataOne('blog_title');
}
/**
* Возвращает описание блога
*
* @return string|null
*/
public function getDescription() {
return $this->_getDataOne('blog_description');
}
/**
* Возвращает тип блога
*
* @return string|null
*/
public function getType() {
return $this->_getDataOne('blog_type');
}
/**
* Возвращает дату создания блога
*
* @return string|null
*/
public function getDateAdd() {
return $this->_getDataOne('blog_date_add');
}
/**
* Возвращает дату редактирования блога
*
* @return string|null
*/
public function getDateEdit() {
return $this->_getDataOne('blog_date_edit');
}
/**
* Возвращает рейтинг блога
*
* @return string
*/
public function getRating() {
return number_format(round($this->_getDataOne('blog_rating'),2), 2, '.', '');
}
/**
* Возврщает количество проголосовавших за блог
*
* @return int|null
*/
public function getCountVote() {
return $this->_getDataOne('blog_count_vote');
}
/**
* Возвращает количество пользователей в блоге
*
* @return int|null
*/
public function getCountUser() {
return $this->_getDataOne('blog_count_user');
}
/**
* Возвращает количество топиков в блоге
*
* @return int|null
*/
public function getCountTopic() {
return $this->_getDataOne('blog_count_topic');
}
public function getLimitRatingTopic() {
return $this->_getDataOne('blog_limit_rating_topic');
}
/**
* Возвращает ограничение по рейтингу для постинга в блог
*
* @return int|null
*/
public function getLimitRatingTopic() {
return $this->_getDataOne('blog_limit_rating_topic');
}
/**
* Возвращает URL блога
*
* @return string|null
*/
public function getUrl() {
return $this->_getDataOne('blog_url');
}
public function getAvatar() {
return $this->_getDataOne('blog_avatar');
}
public function getAvatarType() {
return ($sPath=$this->getAvatarPath()) ? pathinfo($sPath,PATHINFO_EXTENSION) : null;
}
public function getOwner() {
return $this->_getDataOne('owner');
}
public function getVote() {
return $this->_getDataOne('vote');
}
public function getAvatarPath($iSize=48) {
if ($sPath=$this->getAvatar()) {
return preg_replace("#_\d{1,3}x\d{1,3}(\.\w{3,4})$#", ((($iSize==0)?"":"_{$iSize}x{$iSize}") . "\\1"),$sPath);
} else {
return Config::Get('path.static.skin').'/images/avatar_blog_'.$iSize.'x'.$iSize.'.jpg';
}
}
public function getUserIsJoin() {
return $this->_getDataOne('user_is_join');
}
public function getUserIsAdministrator() {
return $this->_getDataOne('user_is_administrator');
}
public function getUserIsModerator() {
return $this->_getDataOne('user_is_moderator');
}
public function getUrlFull() {
if ($this->getType()=='personal') {
return $this->getOwner()->getUserWebPath().'created/topics/';
} else {
return Router::GetPath('blog').$this->getUrl().'/';
}
}
return $this->_getDataOne('blog_url');
}
/**
* Возвращает полный серверный путь до аватара блога
*
* @return string|null
*/
public function getAvatar() {
return $this->_getDataOne('blog_avatar');
}
/**
* Возвращает расширения аватра блога
*
* @return string|null
*/
public function getAvatarType() {
return ($sPath=$this->getAvatarPath()) ? pathinfo($sPath,PATHINFO_EXTENSION) : null;
}
/**
* Возвращает объект пользователя хозяина блога
*
* @return ModuleUser_EntityUser|null
*/
public function getOwner() {
return $this->_getDataOne('owner');
}
/**
* Возвращает объект голосования за блог
*
* @return ModuleVote_EntityVote|null
*/
public function getVote() {
return $this->_getDataOne('vote');
}
/**
* Возвращает полный серверный путь до аватара блога определенного размера
*
* @param int $iSize Размер аватара
* @return string
*/
public function getAvatarPath($iSize=48) {
if ($sPath=$this->getAvatar()) {
return preg_replace("#_\d{1,3}x\d{1,3}(\.\w{3,4})$#", ((($iSize==0)?"":"_{$iSize}x{$iSize}") . "\\1"),$sPath);
} else {
return Config::Get('path.static.skin').'/images/avatar_blog_'.$iSize.'x'.$iSize.'.jpg';
}
}
/**
* Возвращает факт присоединения пользователя к блогу
*
* @return bool|null
*/
public function getUserIsJoin() {
return $this->_getDataOne('user_is_join');
}
/**
* Проверяет является ли пользователь администратором блога
*
* @return bool|null
*/
public function getUserIsAdministrator() {
return $this->_getDataOne('user_is_administrator');
}
/**
* Проверяет является ли пользователь модератором блога
*
* @return bool|null
*/
public function getUserIsModerator() {
return $this->_getDataOne('user_is_moderator');
}
/**
* Возвращает полный URL блога
*
* @return string
*/
public function getUrlFull() {
if ($this->getType()=='personal') {
return $this->getOwner()->getUserWebPath().'created/topics/';
} else {
return Router::GetPath('blog').$this->getUrl().'/';
}
}
/**
* Устанавливает ID блога
*
* @param int $data
*/
public function setId($data) {
$this->_aData['blog_id']=$data;
}
public function setOwnerId($data) {
$this->_aData['user_owner_id']=$data;
}
public function setTitle($data) {
$this->_aData['blog_title']=$data;
}
public function setDescription($data) {
$this->_aData['blog_description']=$data;
}
public function setType($data) {
$this->_aData['blog_type']=$data;
}
public function setDateAdd($data) {
$this->_aData['blog_date_add']=$data;
}
public function setDateEdit($data) {
$this->_aData['blog_date_edit']=$data;
}
public function setRating($data) {
$this->_aData['blog_rating']=$data;
}
public function setCountVote($data) {
$this->_aData['blog_count_vote']=$data;
}
public function setCountUser($data) {
$this->_aData['blog_count_user']=$data;
}
$this->_aData['blog_id']=$data;
}
/**
* Устанавливает ID хозяина блога
*
* @param int $data
*/
public function setOwnerId($data) {
$this->_aData['user_owner_id']=$data;
}
/**
* Устанавливает заголовок блога
*
* @param string $data
*/
public function setTitle($data) {
$this->_aData['blog_title']=$data;
}
/**
* Устанавливает описание блога
*
* @param string $data
*/
public function setDescription($data) {
$this->_aData['blog_description']=$data;
}
/**
* Устанавливает тип блога
*
* @param string $data
*/
public function setType($data) {
$this->_aData['blog_type']=$data;
}
/**
* Устанавливает дату создания блога
*
* @param string $data
*/
public function setDateAdd($data) {
$this->_aData['blog_date_add']=$data;
}
/**
* Устанавливает дату редактирования топика
*
* @param string $data
*/
public function setDateEdit($data) {
$this->_aData['blog_date_edit']=$data;
}
/**
* Устанавливает рейтинг блога
*
* @param float $data
*/
public function setRating($data) {
$this->_aData['blog_rating']=$data;
}
/**
* Устаналивает количество проголосовавших
*
* @param int $data
*/
public function setCountVote($data) {
$this->_aData['blog_count_vote']=$data;
}
/**
* Устанавливает количество пользователей блога
*
* @param int $data
*/
public function setCountUser($data) {
$this->_aData['blog_count_user']=$data;
}
/**
* Устанавливает количество топиков в блоге
*
* @param int $data
*/
public function setCountTopic($data) {
$this->_aData['blog_count_topic']=$data;
}
public function setLimitRatingTopic($data) {
$this->_aData['blog_limit_rating_topic']=$data;
}
public function setUrl($data) {
$this->_aData['blog_url']=$data;
}
public function setAvatar($data) {
$this->_aData['blog_avatar']=$data;
}
public function setOwner($data) {
$this->_aData['owner']=$data;
}
public function setUserIsAdministrator($data) {
$this->_aData['user_is_administrator']=$data;
}
public function setUserIsModerator($data) {
$this->_aData['user_is_moderator']=$data;
}
public function setUserIsJoin($data) {
$this->_aData['user_is_join']=$data;
}
public function setVote($data) {
$this->_aData['vote']=$data;
}
/**
* Устанавливает ограничение на постинг в блог
*
* @param float $data
*/
public function setLimitRatingTopic($data) {
$this->_aData['blog_limit_rating_topic']=$data;
}
/**
* Устанавливает URL блога
*
* @param string $data
*/
public function setUrl($data) {
$this->_aData['blog_url']=$data;
}
/**
* Устанавливает полный серверный путь до аватара блога
*
* @param string $data
*/
public function setAvatar($data) {
$this->_aData['blog_avatar']=$data;
}
/**
* Устанавливает автора блога
*
* @param ModuleUser_EntityUser $data
*/
public function setOwner($data) {
$this->_aData['owner']=$data;
}
/**
* Устанавливает статус администратора блога для текущего пользователя
*
* @param bool $data
*/
public function setUserIsAdministrator($data) {
$this->_aData['user_is_administrator']=$data;
}
/**
* Устанавливает статус модератора блога для текущего пользователя
*
* @param bool $data
*/
public function setUserIsModerator($data) {
$this->_aData['user_is_moderator']=$data;
}
/**
* Устаналивает статус присоединения польователя к блогу
*
* @param bool $data
*/
public function setUserIsJoin($data) {
$this->_aData['user_is_join']=$data;
}
/**
* Устанавливает объект голосования за блог
*
* @param ModuleVote_EntityVote $data
*/
public function setVote($data) {
$this->_aData['vote']=$data;
}
}
?>

View file

@ -15,64 +15,136 @@
---------------------------------------------------------
*/
class ModuleBlog_EntityBlogUser extends Entity
{
public function getBlogId() {
return $this->_getDataOne('blog_id');
}
public function getUserId() {
return $this->_getDataOne('user_id');
}
public function getIsModerator() {
return ($this->getUserRole()==ModuleBlog::BLOG_USER_ROLE_MODERATOR);
}
public function getIsAdministrator() {
return ($this->getUserRole()==ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
}
/**
* Сущность связи пользователя и блога
*
* @package modules.blog
* @since 1.0
*/
class ModuleBlog_EntityBlogUser extends Entity {
/**
* Возвращает ID блога
*
* @return int|null
*/
public function getBlogId() {
return $this->_getDataOne('blog_id');
}
/**
* Возвращает ID пользователя
*
* @return int|null
*/
public function getUserId() {
return $this->_getDataOne('user_id');
}
/**
* Возвращает статус модератор пользователь или нет
*
* @return bool
*/
public function getIsModerator() {
return ($this->getUserRole()==ModuleBlog::BLOG_USER_ROLE_MODERATOR);
}
/**
* Возвращает статус администратор пользователь или нет
*
* @return bool
*/
public function getIsAdministrator() {
return ($this->getUserRole()==ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
}
/**
* Возвращает текущую роль пользователя в блоге
*
* @return int|null
*/
public function getUserRole() {
return $this->_getDataOne('user_role');
}
public function getBlog() {
return $this->_getDataOne('blog');
}
public function getUser() {
return $this->_getDataOne('user');
}
/**
* Возвращает объект блога
*
* @return ModuleBlog_EntityBlog|null
*/
public function getBlog() {
return $this->_getDataOne('blog');
}
/**
* Возвращает объект пользователя
*
* @return ModuleUser_EntityUser|null
*/
public function getUser() {
return $this->_getDataOne('user');
}
/**
* Устанавливает ID блога
*
* @param int $data
*/
public function setBlogId($data) {
$this->_aData['blog_id']=$data;
}
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
public function setIsModerator($data) {
if($data && !$this->getIsModerator()) {
/**
* Повышаем статус до модератора
*/
$this->setUserRole(ModuleBlog::BLOG_USER_ROLE_MODERATOR);
}
}
public function setIsAdministrator($data) {
if($data && !$this->getIsAdministrator()) {
/**
* Повышаем статус до администратора
*/
$this->setUserRole(ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
}
}
public function setUserRole($data) {
$this->_aData['user_role']=$data;
}
$this->_aData['blog_id']=$data;
}
/**
* Устанавливает ID пользователя
*
* @param int $data
*/
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
/**
* Устанавливает статус модератора блога
*
* @param bool $data
*/
public function setIsModerator($data) {
if($data && !$this->getIsModerator()) {
/**
* Повышаем статус до модератора
*/
$this->setUserRole(ModuleBlog::BLOG_USER_ROLE_MODERATOR);
}
}
/**
* Устанавливает статус администратора блога
*
* @param bool $data
*/
public function setIsAdministrator($data) {
if($data && !$this->getIsAdministrator()) {
/**
* Повышаем статус до администратора
*/
$this->setUserRole(ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
}
}
/**
* Устанавливает роль пользователя
*
* @param int $data
*/
public function setUserRole($data) {
$this->_aData['user_role']=$data;
}
/**
* Устанавливает блог
*
* @param ModuleBlog_EntityBlog $data
*/
public function setBlog($data) {
$this->_aData['blog']=$data;
}
public function setUser($data) {
$this->_aData['user']=$data;
}
$this->_aData['blog']=$data;
}
/**
* Устанавливаем пользователя
*
* @param ModuleUser_EntityUser $data
*/
public function setUser($data) {
$this->_aData['user']=$data;
}
}
?>

View file

@ -15,13 +15,19 @@
---------------------------------------------------------
*/
class ModuleBlog_MapperBlog extends Mapper {
protected $oUserCurrent=null;
public function SetUserCurrent($oUserCurrent) {
$this->oUserCurrent=$oUserCurrent;
}
/**
* Маппер для работы с БД по части блогов
*
* @package modules.blog
* @since 1.0
*/
class ModuleBlog_MapperBlog extends Mapper {
/**
* Добавляет блог в БД
*
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @return int|bool
*/
public function AddBlog(ModuleBlog_EntityBlog $oBlog) {
$sql = "INSERT INTO ".Config::Get('db.table.blog')."
(user_owner_id,
@ -34,14 +40,19 @@ class ModuleBlog_MapperBlog extends Mapper {
blog_avatar
)
VALUES(?d, ?, ?, ?, ?, ?, ?, ?)
";
";
if ($iId=$this->oDb->query($sql,$oBlog->getOwnerId(),$oBlog->getTitle(),$oBlog->getDescription(),$oBlog->getType(),$oBlog->getDateAdd(),$oBlog->getLimitRatingTopic(),$oBlog->getUrl(),$oBlog->getAvatar())) {
return $iId;
}
}
return false;
}
public function UpdateBlog(ModuleBlog_EntityBlog $oBlog) {
/**
* Обновляет блог в БД
*
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @return bool
*/
public function UpdateBlog(ModuleBlog_EntityBlog $oBlog) {
$sql = "UPDATE ".Config::Get('db.table.blog')."
SET
blog_title= ?,
@ -57,18 +68,24 @@ class ModuleBlog_MapperBlog extends Mapper {
blog_avatar= ?
WHERE
blog_id = ?d
";
";
if ($this->oDb->query($sql,$oBlog->getTitle(),$oBlog->getDescription(),$oBlog->getType(),$oBlog->getDateEdit(),$oBlog->getRating(),$oBlog->getCountVote(),$oBlog->getCountUser(),$oBlog->getCountTopic(),$oBlog->getLimitRatingTopic(),$oBlog->getUrl(),$oBlog->getAvatar(),$oBlog->getId())) {
return true;
}
}
return false;
}
/**
* Получает список блогов по ID
*
* @param array $aArrayId Список ID блогов
* @param array|null $aOrder Сортировка блогов
* @return array
*/
public function GetBlogsByArrayId($aArrayId,$aOrder=null) {
if (!is_array($aArrayId) or count($aArrayId)==0) {
return array();
}
if (!is_array($aOrder)) $aOrder=array($aOrder);
$sOrder='';
foreach ($aOrder as $key=>$value) {
@ -90,7 +107,7 @@ class ModuleBlog_MapperBlog extends Mapper {
ORDER BY
{ FIELD(blog_id,?a) } ";
if ($sOrder!='') $sql.=$sOrder;
$aBlogs=array();
if ($aRows=$this->oDb->select($sql,$aArrayId,$sOrder=='' ? $aArrayId : DBSIMPLE_SKIP)) {
foreach ($aRows as $aBlog) {
@ -98,8 +115,13 @@ class ModuleBlog_MapperBlog extends Mapper {
}
}
return $aBlogs;
}
}
/**
* Добавляет свзяь пользователя с блогом в БД
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отношения пользователя с блогом
* @return bool
*/
public function AddRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
$sql = "INSERT INTO ".Config::Get('db.table.blog_user')."
(blog_id,
@ -107,27 +129,37 @@ class ModuleBlog_MapperBlog extends Mapper {
user_role
)
VALUES(?d, ?d, ?d)
";
";
if ($this->oDb->query($sql,$oBlogUser->getBlogId(),$oBlogUser->getUserId(),$oBlogUser->getUserRole())===0) {
return true;
}
}
return false;
}
/**
* Удаляет отношение пользователя с блогом
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отношения пользователя с блогом
* @return bool
*/
public function DeleteRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
$sql = "DELETE FROM ".Config::Get('db.table.blog_user')."
WHERE
blog_id = ?d
AND
user_id = ?d
";
";
if ($this->oDb->query($sql,$oBlogUser->getBlogId(),$oBlogUser->getUserId())) {
return true;
}
}
return false;
}
public function UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
/**
* Обновляет отношение пользователя с блогом
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отношения пользователя с блогом
* @return bool
*/
public function UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
$sql = "UPDATE ".Config::Get('db.table.blog_user')."
SET
user_role = ?d
@ -135,13 +167,21 @@ class ModuleBlog_MapperBlog extends Mapper {
blog_id = ?d
AND
user_id = ?d
";
";
if ($this->oDb->query($sql,$oBlogUser->getUserRole(),$oBlogUser->getBlogId(),$oBlogUser->getUserId())) {
return true;
}
}
return false;
}
/**
* Получает список отношений пользователей с блогами
*
* @param array $aFilter Фильтр поиска отношений
* @param int $iCount Возвращает общее количество элементов
* @param int $iCurrPage Номер текущейс страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogUsers($aFilter,&$iCount=null,$iCurrPage=null,$iPerPage=null) {
$sWhere=' 1=1 ';
if (isset($aFilter['blog_id'])) {
@ -154,25 +194,25 @@ class ModuleBlog_MapperBlog extends Mapper {
if(!is_array($aFilter['user_role'])) {
$aFilter['user_role']=array($aFilter['user_role']);
}
$sWhere.=" AND bu.user_role IN ('".join("', '",$aFilter['user_role'])."')";
$sWhere.=" AND bu.user_role IN ('".join("', '",$aFilter['user_role'])."')";
} else {
$sWhere.=" AND bu.user_role>".ModuleBlog::BLOG_USER_ROLE_GUEST;
}
$sql = "SELECT
bu.*
FROM
".Config::Get('db.table.blog_user')." as bu
WHERE
".$sWhere." ";
".$sWhere." ";
if (is_null($iCurrPage)) {
$aRows=$this->oDb->select($sql);
} else {
$sql.=" LIMIT ?d, ?d ";
$aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage);
}
$aBlogUsers=array();
if ($aRows) {
foreach ($aRows as $aUser) {
@ -181,12 +221,18 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aBlogUsers;
}
public function GetBlogUsersByArrayBlog($aArrayId,$sUserId) {
/**
* Получает список отношений пользователя к блогам
*
* @param array $aArrayId Список ID блогов
* @param int $sUserId ID блогов
* @return array
*/
public function GetBlogUsersByArrayBlog($aArrayId,$sUserId) {
if (!is_array($aArrayId) or count($aArrayId)==0) {
return array();
}
$sql = "SELECT
bu.*
FROM
@ -194,7 +240,7 @@ class ModuleBlog_MapperBlog extends Mapper {
WHERE
bu.blog_id IN(?a)
AND
bu.user_id = ?d ";
bu.user_id = ?d ";
$aBlogUsers=array();
if ($aRows=$this->oDb->select($sql,$aArrayId,$sUserId)) {
foreach ($aRows as $aUser) {
@ -203,8 +249,12 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aBlogUsers;
}
/**
* Получает ID персонального блога пользователя
*
* @param int $sUserId ID пользователя
* @return int|null
*/
public function GetPersonalBlogByUserId($sUserId) {
$sql = "SELECT blog_id FROM ".Config::Get('db.table.blog')." WHERE user_owner_id = ?d and blog_type='personal'";
if ($aRow=$this->oDb->selectRow($sql,$sUserId)) {
@ -212,8 +262,12 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return null;
}
/**
* Получает блог по названию
*
* @param string $sTitle Нащвание блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogByTitle($sTitle) {
$sql = "SELECT blog_id FROM ".Config::Get('db.table.blog')." WHERE blog_title = ? ";
if ($aRow=$this->oDb->selectRow($sql,$sTitle)) {
@ -221,11 +275,13 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return null;
}
public function GetBlogByUrl($sUrl) {
/**
* Получает блог по URL
*
* @param string $sUrl URL блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogByUrl($sUrl) {
$sql = "SELECT
b.blog_id
FROM
@ -238,7 +294,12 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return null;
}
/**
* Получить список блогов по хозяину
*
* @param int $sUserId ID пользователя
* @return array
*/
public function GetBlogsByOwnerId($sUserId) {
$sql = "SELECT
b.blog_id
@ -248,7 +309,7 @@ class ModuleBlog_MapperBlog extends Mapper {
b.user_owner_id = ?
AND
b.blog_type<>'personal'
";
";
$aBlogs=array();
if ($aRows=$this->oDb->select($sql,$sUserId)) {
foreach ($aRows as $aBlog) {
@ -257,7 +318,11 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aBlogs;
}
/**
* Возвращает список всех не персональных блогов
*
* @return array
*/
public function GetBlogs() {
$sql = "SELECT
b.blog_id
@ -265,7 +330,7 @@ class ModuleBlog_MapperBlog extends Mapper {
".Config::Get('db.table.blog')." as b
WHERE
b.blog_type<>'personal'
";
";
$aBlogs=array();
if ($aRows=$this->oDb->select($sql)) {
foreach ($aRows as $aBlog) {
@ -274,8 +339,15 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aBlogs;
}
public function GetBlogsRating(&$iCount,$iCurrPage,$iPerPage) {
/**
* Возвращает список не персональных блогов с сортировкой по рейтингу
*
* @param int $iCount Возвращает общее количество элементов
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogsRating(&$iCount,$iCurrPage,$iPerPage) {
$sql = "SELECT
b.blog_id
FROM
@ -283,7 +355,7 @@ class ModuleBlog_MapperBlog extends Mapper {
WHERE
b.blog_type<>'personal'
ORDER by b.blog_rating desc
LIMIT ?d, ?d ";
LIMIT ?d, ?d ";
$aReturn=array();
if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
foreach ($aRows as $aRow) {
@ -292,8 +364,14 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aReturn;
}
public function GetBlogsRatingJoin($sUserId,$iLimit) {
/**
* Получает список блогов в которых состоит пользователь
*
* @param int $sUserId ID пользователя
* @param int $iLimit Ограничение на выборку элементов
* @return array
*/
public function GetBlogsRatingJoin($sUserId,$iLimit) {
$sql = "SELECT
b.*
FROM
@ -308,7 +386,7 @@ class ModuleBlog_MapperBlog extends Mapper {
ORDER by b.blog_rating desc
LIMIT 0, ?d
;
";
";
$aReturn=array();
if ($aRows=$this->oDb->select($sql,$sUserId,$iLimit)) {
foreach ($aRows as $aRow) {
@ -317,8 +395,14 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aReturn;
}
public function GetBlogsRatingSelf($sUserId,$iLimit) {
/**
* Получает список блогов, которые создал пользователь
*
* @param int $sUserId ID пользователя
* @param int $iLimit Ограничение на выборку элементов
* @return array
*/
public function GetBlogsRatingSelf($sUserId,$iLimit) {
$sql = "SELECT
b.*
FROM
@ -329,7 +413,7 @@ class ModuleBlog_MapperBlog extends Mapper {
b.blog_type<>'personal'
ORDER by b.blog_rating desc
LIMIT 0, ?d
;";
;";
$aReturn=array();
if ($aRows=$this->oDb->select($sql,$sUserId,$iLimit)) {
foreach ($aRows as $aRow) {
@ -338,7 +422,11 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aReturn;
}
/**
* Возвращает полный список закрытых блогов
*
* @return array
*/
public function GetCloseBlogs() {
$sql = "SELECT b.blog_id
FROM ".Config::Get('db.table.blog')." as b
@ -352,28 +440,26 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return $aReturn;
}
/**
* Удаление блога из базы данных
*
* @param int $iBlogId
* @return bool
* @param int $iBlogId ID блога
* @return bool
*/
public function DeleteBlog($iBlogId) {
$sql = "
DELETE FROM ".Config::Get('db.table.blog')."
WHERE blog_id = ?d
";
";
if ($this->oDb->query($sql,$iBlogId)) {
return true;
}
return false;
}
/**
* Удалить пользователей блога по идентификатору блога
*
* @param int $iBlogId
* @param int $iBlogId ID блога
* @return bool
*/
public function DeleteBlogUsersByBlogId($iBlogId) {
@ -386,10 +472,10 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return false;
}
/**
* Пересчитывает число топиков в блогах
*
* @param int|null $iBlogId ID блога
* @return bool
*/
public function RecalculateCountTopic($iBlogId=null) {
@ -411,7 +497,16 @@ class ModuleBlog_MapperBlog extends Mapper {
}
return false;
}
/**
* Получает список блогов по фильтру
*
* @param array $aFilter Фильтр выборки
* @param array $aOrder Сортировка
* @param int $iCount Возвращает общее количество элментов
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogsByFilter($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
$aOrderAllow=array('blog_id','blog_title','blog_rating','blog_count_user','blog_count_topic');
$sOrder='';