/** * Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя * * @param ModuleUser_EntityUser|null $oUser Пользователь * * @return array */ public function GetInaccessibleBlogsByUser($oUser = null) { if ($oUser && ($oUser->isAdministrator() || $oUser->isModerator())) { return array(); } $nUserId = $oUser ? $oUser->getId() : 0; $sCacheKey = 'blog_inaccessible_user_' . $nUserId; if (false === ($aCloseBlogsId = E::ModuleCache()->Get($sCacheKey))) { $aCloseBlogsId = $this->oMapper->GetCloseBlogsId($oUser); if ($oUser) { // * Получаем массив идентификаторов блогов, которые являются откытыми для данного пользователя $aOpenBlogsId = $this->GetBlogUsersByUserId($nUserId, null, true); // * Получаем закрытые блоги, где пользователь является автором $aCloseBlogTypes = $this->GetCloseBlogTypes($oUser); if ($aCloseBlogTypes) { $aOwnerBlogs = $this->GetBlogsByFilter(array('type' => $aCloseBlogTypes, 'user_owner_id' => $nUserId), array(), 1, 1000, array()); $aOwnerBlogsId = array_keys($aOwnerBlogs['collection']); $aCloseBlogsId = array_diff($aCloseBlogsId, $aOpenBlogsId, $aOwnerBlogsId); } } // * Сохраняем в кеш if ($oUser) { E::ModuleCache()->Set($aCloseBlogsId, $sCacheKey, array('blog_new', 'blog_update', "blog_relation_change_{$nUserId}"), 'P1D'); } else { E::ModuleCache()->Set($aCloseBlogsId, $sCacheKey, array('blog_new', 'blog_update'), 'P3D'); } } return $aCloseBlogsId; }