/** * Получает отношения юзера к блогам(состоит в блоге или нет) * * @param int $sUserId ID пользователя * @param int|null $iRole Роль пользователя в блоге * @param bool $bReturnIdOnly Возвращать только ID блогов или полные объекты * @return array */ public function GetBlogUsersByUserId($sUserId, $iRole = null, $bReturnIdOnly = false) { $aFilter = array('user_id' => $sUserId); if ($iRole !== null) { $aFilter['user_role'] = $iRole; } $s = serialize($aFilter); 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(); if ($data) { foreach ($data as $oBlogUser) { $aBlogId[] = $oBlogUser->getBlogId(); } /** * Если указано возвращать полные объекты */ if (!$bReturnIdOnly) { $aUsers = $this->User_GetUsersAdditionalData($sUserId); $aBlogs = $this->Blog_GetBlogsAdditionalData($aBlogId); foreach ($data as $oBlogUser) { if (isset($aUsers[$oBlogUser->getUserId()])) { $oBlogUser->setUser($aUsers[$oBlogUser->getUserId()]); } else { $oBlogUser->setUser(null); } if (isset($aBlogs[$oBlogUser->getBlogId()])) { $oBlogUser->setBlog($aBlogs[$oBlogUser->getBlogId()]); } else { $oBlogUser->setBlog(null); } } } } return $bReturnIdOnly ? $aBlogId : $data; }
/** * Получает отношения юзера к блогам (подписан на блог или нет) * * @param int $iUserId ID пользователя * @param int|int[] $xRole Роль пользователя в блоге * @param bool $bReturnIdOnly Возвращать только ID блогов или полные объекты * * @return int[]|ModuleBlog_EntityBlogUser[] */ public function GetBlogUsersByUserId($iUserId, $xRole = null, $bReturnIdOnly = false) { $aFilter = array('user_id' => $iUserId); if ($xRole !== null) { $aFilter['user_role'] = $xRole; } $sCacheKey = 'blog_relation_user_by_filter_' . serialize($aFilter); if (false === ($aBlogUserRels = E::ModuleCache()->Get($sCacheKey))) { $aBlogUserRels = $this->oMapper->GetBlogUsers($aFilter); E::ModuleCache()->Set($aBlogUserRels, $sCacheKey, array('blog_update', "blog_relation_change_{$iUserId}"), 60 * 60 * 24 * 3); } // Достаем дополнительные данные, для этого формируем список блогов и делаем мульти-запрос $aBlogId = array(); $aResult = array(); if ($aBlogUserRels) { foreach ($aBlogUserRels as $oBlogUser) { $aBlogId[] = $oBlogUser->getBlogId(); } // Если указано возвращать полные объекты if (!$bReturnIdOnly) { $aUsers = E::ModuleUser()->GetUsersAdditionalData($iUserId); $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aBlogId); foreach ($aBlogUserRels as $oBlogUser) { if (isset($aUsers[$oBlogUser->getUserId()])) { $oBlogUser->setUser($aUsers[$oBlogUser->getUserId()]); } else { $oBlogUser->setUser(null); } if (isset($aBlogs[$oBlogUser->getBlogId()])) { $oBlogUser->setBlog($aBlogs[$oBlogUser->getBlogId()]); } else { $oBlogUser->setBlog(null); } $aResult[$oBlogUser->getBlogId()] = $oBlogUser; } } } return $bReturnIdOnly ? $aBlogId : $aResult; }