From 3fa8097a8aff621ba4723ed7005de4c2239b7549 Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Mon, 1 Dec 2014 14:09:09 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=9B=D0=B5=D0=BD=D1=82=D1=8B=20-=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D1=8B=D1=85=20=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/actions/ActionBlog.class.php | 47 ++++++------------- .../classes/actions/ActionUserfeed.class.php | 2 +- .../modules/userfeed/Userfeed.class.php | 19 +++++++- .../userfeed/mapper/Userfeed.mapper.class.php | 22 +++++---- 4 files changed, 48 insertions(+), 42 deletions(-) diff --git a/application/classes/actions/ActionBlog.class.php b/application/classes/actions/ActionBlog.class.php index 41f48794..ac7e8f14 100644 --- a/application/classes/actions/ActionBlog.class.php +++ b/application/classes/actions/ActionBlog.class.php @@ -1405,22 +1405,6 @@ class ActionBlog extends Action if ($oBlog->getOwnerId() != $this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) { return $this->EventErrorDebug(); } - /** - * Получаем список пользователей блога (любого статуса) - * todo: Это полный АХТУНГ - исправить! - */ - $aBlogUsersResult = $this->Blog_GetBlogUsersByBlogId( - $oBlog->getId(), - array( - ModuleBlog::BLOG_USER_ROLE_BAN, - ModuleBlog::BLOG_USER_ROLE_REJECT, - ModuleBlog::BLOG_USER_ROLE_INVITE, - ModuleBlog::BLOG_USER_ROLE_USER, - ModuleBlog::BLOG_USER_ROLE_MODERATOR, - ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR - ), null // пока костылем - ); - $aBlogUsers = $aBlogUsersResult['collection']; $aResult = array(); /** @@ -1431,18 +1415,6 @@ class ActionBlog extends Action if ($sUser == '') { continue; } - /** - * Если пользователь пытается добавить инвайт - * самому себе, возвращаем ошибку - */ - if (strtolower($sUser) == strtolower($this->oUserCurrent->getLogin())) { - $aResult[] = array( - 'bStateError' => true, - 'sMsgTitle' => $this->Lang_Get('error'), - 'sMsg' => $this->Lang_Get('blog.invite.notices.add_self') - ); - continue; - } /** * Если пользователь не найден или неактивен, * возвращаем ошибку @@ -1457,8 +1429,19 @@ class ActionBlog extends Action ); continue; } + /** + * Запрещаем отправлять инвайт создателю блога + */ + if ($oUser->getId() == $oBlog->getOwnerId()) { + $aResult[] = array( + 'bStateError' => true, + 'sMsgTitle' => $this->Lang_Get('error'), + 'sMsg' => $this->Lang_Get('blog.invite.notices.add_self') + ); + continue; + } - if (!isset($aBlogUsers[$oUser->getId()])) { + if (!($oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId()))) { /** * Создаем нового блог-пользователя со статусом INVITED */ @@ -1498,15 +1481,15 @@ class ActionBlog extends Action * возвращаем ошибку (сначала определяя ее точный текст) */ switch (true) { - case ($aBlogUsers[$oUser->getId()]->getUserRole() == ModuleBlog::BLOG_USER_ROLE_INVITE): + case ($oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_INVITE): $sErrorMessage = $this->Lang_Get('blog.invite.notices.already_invited', array('login' => htmlspecialchars($sUser))); break; - case ($aBlogUsers[$oUser->getId()]->getUserRole() > ModuleBlog::BLOG_USER_ROLE_GUEST): + case ($oBlogUser->getUserRole() > ModuleBlog::BLOG_USER_ROLE_GUEST): $sErrorMessage = $this->Lang_Get('blog.invite.notices.already_joined', array('login' => htmlspecialchars($sUser))); break; - case ($aBlogUsers[$oUser->getId()]->getUserRole() == ModuleBlog::BLOG_USER_ROLE_REJECT): + case ($oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_REJECT): $sErrorMessage = $this->Lang_Get('blog.invite.notices.reject', array('login' => htmlspecialchars($sUser))); break; diff --git a/application/classes/actions/ActionUserfeed.class.php b/application/classes/actions/ActionUserfeed.class.php index 0a8cf7fe..49c5f7b1 100644 --- a/application/classes/actions/ActionUserfeed.class.php +++ b/application/classes/actions/ActionUserfeed.class.php @@ -119,7 +119,7 @@ class ActionUserfeed extends Action /** * Проверяем существование блога */ - if (!$this->Blog_GetBlogById(getRequestStr('id'))) { + if (!($oBlog=$this->Blog_GetBlogById(getRequestStr('id'))) or !$this->ACL_IsAllowShowBlog($oBlog,$this->oUserCurrent)) { $this->Message_AddError($this->Lang_Get('system_error'), $this->Lang_Get('error')); return; } diff --git a/application/classes/modules/userfeed/Userfeed.class.php b/application/classes/modules/userfeed/Userfeed.class.php index 385d8d32..6f2d0ced 100644 --- a/application/classes/modules/userfeed/Userfeed.class.php +++ b/application/classes/modules/userfeed/Userfeed.class.php @@ -41,6 +41,12 @@ class ModuleUserfeed extends Module * @var ModuleUserfeed_MapperUserfeed|null */ protected $oMapper = null; + /** + * Объект текущего пользователя + * + * @var ModuleUser_EntityUser|null + */ + protected $oUserCurrent = null; /** * Инициализация модуля @@ -48,6 +54,7 @@ class ModuleUserfeed extends Module public function Init() { $this->oMapper = Engine::GetMapper(__CLASS__); + $this->oUserCurrent = $this->User_GetUserCurrent(); } /** @@ -90,7 +97,17 @@ class ModuleUserfeed extends Module $iPerPage = Config::Get('module.userfeed.count_default'); } $aSubscribes = $this->oMapper->getUserSubscribes($iUserId); - $aTopicsIds = $this->oMapper->ReadFeed($aSubscribes['users'], $aSubscribes['blogs'], $iCount, $iCurrPage, + /** + * Добавляем в выдачу закрытые блоги + */ + $aOpenBlogs = array(); + if ($this->oUserCurrent) { + if ($aOpenBlogs = $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent)) { + $aOpenBlogs = array_intersect($aOpenBlogs, $aSubscribes['blogs']); + } + } + $aTopicsIds = $this->oMapper->ReadFeed($aSubscribes['users'], $aSubscribes['blogs'], $aOpenBlogs, $iCount, + $iCurrPage, $iPerPage); return array( 'collection' => $this->Topic_GetTopicsAdditionalData($aTopicsIds), diff --git a/application/classes/modules/userfeed/mapper/Userfeed.mapper.class.php b/application/classes/modules/userfeed/mapper/Userfeed.mapper.class.php index 664a6c7e..f561329a 100644 --- a/application/classes/modules/userfeed/mapper/Userfeed.mapper.class.php +++ b/application/classes/modules/userfeed/mapper/Userfeed.mapper.class.php @@ -93,20 +93,24 @@ class ModuleUserfeed_MapperUserfeed extends Mapper /** * Получить ленту топиков по подписке * - * @param $aUserId Список ID юзеров - * @param $aBlogId Список ID блогов + * @param $aUserId array Список ID юзеров + * @param $aBlogId array Список ID блогов + * @param $aBlogIdClose array Список ID закрытых блогов пользователя блогов * @param $iCount * @param $iCurrPage * @param $iPerPage * @return array */ - public function ReadFeed($aUserId, $aBlogId, &$iCount, $iCurrPage, $iPerPage) + public function ReadFeed($aUserId, $aBlogId, $aBlogIdClose, &$iCount, $iCurrPage, $iPerPage) { if (!is_array($aUserId)) { - $aUserId=array($aUserId); + $aUserId = array($aUserId); } if (!is_array($aBlogId)) { - $aBlogId=array($aBlogId); + $aBlogId = array($aBlogId); + } + if (!is_array($aBlogIdClose)) { + $aBlogIdClose = array($aBlogIdClose); } $sql = " SELECT @@ -117,16 +121,18 @@ class ModuleUserfeed_MapperUserfeed extends Mapper WHERE t.topic_publish = 1 AND t.blog_id=b.blog_id - AND b.blog_type!='close' - AND ( 1=0 { OR t.blog_id IN (?a) } { OR t.user_id IN (?a) } ) + AND ( b.blog_type!='close' { OR t.blog_id IN (?a) } ) + AND ( 1=0 { OR t.blog_id IN (?a) } { OR t.user_id IN (?a) } ) ORDER BY t.topic_id DESC LIMIT ?d, ?d "; $aTopics = array(); if ($aRows = $this->oDb->selectPage($iCount, $sql, + count($aBlogIdClose) ? $aBlogIdClose : DBSIMPLE_SKIP, count($aBlogId) ? $aBlogId : DBSIMPLE_SKIP, count($aUserId) ? $aUserId : DBSIMPLE_SKIP, - ($iCurrPage - 1) * $iPerPage, $iPerPage)) { + ($iCurrPage - 1) * $iPerPage, $iPerPage) + ) { foreach ($aRows as $aTopic) { $aTopics[] = $aTopic['topic_id']; }