Example #1
0
 /**
  * Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя
  *
  * @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;
 }