Esempio n. 1
0
 /**
  * @param int $iBlogId
  * @param int $iPageNum
  * @param int $iPageSize
  *
  * @return array
  */
 public function getPosts($iBlogId, $iPageNum, $iPageSize)
 {
     $sCacheKey = 'api_blog_' . $iBlogId;
     $oBlog = E::ModuleCache()->GetTmp($sCacheKey);
     if (!$oBlog) {
         $oBlog = E::ModuleBlog()->GetBlogById($iBlogId);
     }
     $oBlogType = $oBlog->GetBlogType();
     if ($oBlogType) {
         $bCloseBlog = !$oBlog->CanReadBy(E::User());
     } else {
         // if blog type not defined then it' open blog
         $bCloseBlog = false;
     }
     if ($bCloseBlog) {
         return array();
     }
     $aTopics = E::ModuleTopic()->GetTopicsByBlog($oBlog, $iPageNum, $iPageSize, 'newall', null);
     $aResult = array('total' => $aTopics['count'], 'list' => array());
     /** @var PluginAltoApi_ModuleApiPosts_EntityPost $oTopic */
     foreach ($aTopics['collection'] as $oTopic) {
         $aResult['list'][] = $oTopic->getApiData();
     }
     return $aResult;
 }
Esempio n. 2
0
 /**
  * Возвращает сущность типа блога
  *
  * @return ModuleBlog_EntityBlogType|null
  */
 public function getBlogType()
 {
     $oBlogType = $this->getProp('blog_type_obj');
     if (!$oBlogType && ($sType = $this->getType())) {
         $oBlogType = E::ModuleBlog()->GetBlogTypeByCode($sType);
     }
     return $oBlogType;
 }
Esempio n. 3
0
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     // * Получаем список блогов
     if ($aResult = E::ModuleBlog()->GetBlogsRating(1, Config::Get('widgets.blogs.params.limit'))) {
         $aVars = array('aBlogs' => $aResult['collection']);
         // * Формируем результат в виде шаблона и возвращаем
         $sTextResult = E::ModuleViewer()->FetchWidget('blogs_top.tpl', $aVars);
         E::ModuleViewer()->Assign('sBlogsTop', $sTextResult);
     }
 }
Esempio n. 4
0
 /**
  * Фильтр для выборки опубликованых топиков в открытых блогах
  *
  * @param string $sFilterName
  * @param array  $aParams
  *
  * @return array
  */
 public function GetNamedFilter($sFilterName, $aParams = array())
 {
     if ($sFilterName == 'sitemap') {
         $aFilter = array('blog_type' => E::ModuleBlog()->GetOpenBlogTypes(), 'topic_publish' => 1, 'topic_index_ignore' => 0);
         $aFilter['order'][] = 't.topic_date_show DESC';
         $aFilter['order'][] = 't.topic_id DESC';
     } else {
         $aFilter = parent::GetNamedFilter($sFilterName, $aParams);
     }
     return $aFilter;
 }
 public function Exec()
 {
     // For authorized users only
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         $aUserSubscribes = E::ModuleUserfeed()->GetUserSubscribes($oUserCurrent->getId());
         // Get ID list of blogs to which you subscribe
         $aBlogsId = E::ModuleBlog()->GetBlogUsersByUserId($oUserCurrent->getId(), array(ModuleBlog::BLOG_USER_ROLE_USER, ModuleBlog::BLOG_USER_ROLE_MODERATOR, ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR), true);
         // Get ID list of blogs where the user is the owner
         $aBlogsOwnerId = E::ModuleBlog()->GetBlogsByOwnerId($oUserCurrent->getId(), true);
         $aBlogsId = array_merge($aBlogsId, $aBlogsOwnerId);
         $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aBlogsId, array('owner' => array()), array('blog_title' => 'asc'));
         /**
          * Выводим в шаблон
          */
         E::ModuleViewer()->Assign('aUserfeedSubscribedBlogs', $aUserSubscribes['blogs']);
         E::ModuleViewer()->Assign('aUserfeedBlogs', $aBlogs);
     }
 }
Esempio n. 6
0
 /**
  * Список коллективных блогов (с кешированием)
  *
  * @param integer $iPage
  *
  * @return array
  */
 public function GetBlogsForSitemap($iPage = 1)
 {
     $sCacheKey = "sitemap_blogs_{$iPage}_" . C::Get('plugin.sitemap.items_per_page');
     if (false === ($aData = E::ModuleCache()->Get($sCacheKey))) {
         $aFilter = array('include_type' => $this->GetOpenBlogTypes());
         $aBlogs = E::ModuleBlog()->GetBlogsByFilter($aFilter, $iPage, C::Get('plugin.sitemap.items_per_page'), array('owner' => array()));
         $aData = array();
         /** @var ModuleBlog_EntityBlog $oBlog */
         foreach ($aBlogs['collection'] as $oBlog) {
             // TODO временем последнего изменения блога должно быть время его обновления (публикация последнего топика),
             $aData[] = E::ModuleSitemap()->GetDataForSitemapRow($oBlog->getLink(), null, C::Get('plugin.sitemap.type.blogs.changefreq'), C::Get('plugin.sitemap.type.blogs.priority'));
             // @todo страницы блога разбиты на подстраницы. значит нужно генерировать
             // ссылки на каждую из подстраниц
             // т.е. тянуть количество топиков блога
         }
         E::ModuleCache()->Set($aData, $sCacheKey, array('blog_new'), C::Get('plugin.sitemap.type.blogs.cache_lifetime'));
     }
     return $aData;
 }
Esempio n. 7
0
 /**
  * Выводим список комментариев
  *
  */
 protected function EventComments()
 {
     // * Передан ли номер страницы
     $iPage = $this->GetEventMatch(2) ? $this->GetEventMatch(2) : 1;
     // * Исключаем из выборки идентификаторы закрытых блогов (target_parent_id)
     $aCloseBlogs = $this->oUserCurrent ? E::ModuleBlog()->GetInaccessibleBlogsByUser($this->oUserCurrent) : E::ModuleBlog()->GetInaccessibleBlogsByUser();
     // * Получаем список комментов
     $aResult = E::ModuleComment()->GetCommentsAll('topic', $iPage, Config::Get('module.comment.per_page'), array(), $aCloseBlogs);
     $aComments = $aResult['collection'];
     // * Формируем постраничность
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.comment.per_page'), Config::Get('pagination.pages.count'), R::GetPath('comments'));
     // * Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('aPaging', $aPaging);
     E::ModuleViewer()->Assign('aComments', $aComments);
     // * Устанавливаем title страницы
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('comments_all'));
     E::ModuleViewer()->SetHtmlRssAlternate(R::GetPath('rss') . 'allcomments/', E::ModuleLang()->Get('comments_all'));
     // * Устанавливаем шаблон вывода
     $this->SetTemplateAction('index');
 }
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     /**
      * Пользователь авторизован?
      */
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         $aUserSubscribes = E::ModuleUserfeed()->GetUserSubscribes($oUserCurrent->getId());
         /**
          * Получаем список ID блогов, в которых состоит пользователь
          */
         $aBlogsId = E::ModuleBlog()->GetBlogUsersByUserId($oUserCurrent->getId(), array(ModuleBlog::BLOG_USER_ROLE_USER, ModuleBlog::BLOG_USER_ROLE_MODERATOR, ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR), true);
         /**
          * Получаем список ID блогов, которые создал пользователь
          */
         $aBlogsOwnerId = E::ModuleBlog()->GetBlogsByOwnerId($oUserCurrent->getId(), true);
         $aBlogsId = array_merge($aBlogsId, $aBlogsOwnerId);
         $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aBlogsId, array('owner' => array()), array('blog_title' => 'asc'));
         /**
          * Выводим в шаблон
          */
         E::ModuleViewer()->Assign('aUserfeedSubscribedBlogs', $aUserSubscribes['blogs']);
         E::ModuleViewer()->Assign('aUserfeedBlogs', $aBlogs);
     }
 }
Esempio n. 9
0
 /**
  * Return total number of pages of the sitemap type
  *
  * @param string $sType
  *
  * @return int
  */
 protected function _getSitemapCount($sType)
 {
     $iPerPage = C::Get('plugin.sitemap.items_per_page');
     switch ($sType) {
         case 'general':
             $iCount = 1;
             break;
         case 'topics':
             $iCount = (int) ceil(E::ModuleTopic()->GetTopicsCountForSitemap() / $iPerPage);
             break;
         case 'blogs':
             $iCount = (int) ceil(E::ModuleBlog()->GetBlogsCountForSitemap() / $iPerPage);
             break;
         case 'users':
             $iCount = (int) ceil(E::ModuleUser()->GetUsersCountForSitemap() / C::Get('plugin.sitemap.users_per_page'));
             break;
         default:
             $iCount = 1;
     }
     return $iCount;
 }
Esempio n. 10
0
 /**
  * Get sitemap data for the sitemap data and page
  *
  * @param string $sType
  * @param int    $iPage
  *
  * @return array
  */
 public function GetDataFor($sType, $iPage)
 {
     if ($iPage < 1) {
         $iPage = 1;
     }
     switch ($sType) {
         case 'general':
             $aData = $this->getDataForGeneral();
             break;
         case 'topics':
             $aData = E::ModuleTopic()->GetTopicsForSitemap($iPage);
             break;
         case 'blogs':
             $aData = E::ModuleBlog()->GetBlogsForSitemap($iPage);
             break;
         case 'users':
             $aData = $this->PluginSitemap_User_GetUsersForSitemap($iPage);
             break;
         default:
             $aData = array();
     }
     return $aData;
 }
Esempio n. 11
0
 /**
  * Получение сведений о блоге
  * @param string $aParams Идентификатор пользователя
  * @return bool|array
  */
 public function ApiBlogIdInfo($aParams)
 {
     /** @var ModuleBlog_EntityBlog $oBlog */
     if (!($oBlog = E::ModuleBlog()->GetBlogById($aParams['uid']))) {
         return FALSE;
     }
     return $this->_PrepareResult(array('oBlog' => $oBlog), array('id' => $oBlog->getId(), 'title' => $oBlog->getTitle(), 'description' => $oBlog->getDescription(), 'logo' => $oBlog->getAvatarUrl(), 'date' => $oBlog->getDateAdd(), 'users' => $oBlog->getCountUser(), 'topics' => $oBlog->getCountTopic(), 'rating' => $oBlog->getRating(), 'votes' => $oBlog->getCountVote(), 'link' => $oBlog->getUrl(), 'rss' => C::Get('path.root.web') . "rss/blog/{$oBlog->getUrl()}/"));
 }
Esempio n. 12
0
 /**
  * Поиск блогов
  */
 public function EventBlogs()
 {
     $this->aReq = $this->_prepareRequest('blogs');
     $this->OutLog();
     if ($this->aReq['regexp']) {
         $aResult = E::ModuleSearch()->GetBlogsIdByRegexp($this->aReq['regexp'], $this->aReq['iPage'], $this->nItemsPerPage, $this->aReq['params']);
         $aBlogs = array();
         if ($aResult['count'] > 0) {
             // * Получаем объекты по списку идентификаторов
             $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aResult['collection']);
             //подсветка поисковой фразы
             foreach ($aBlogs as $oBlog) {
                 if ($this->nModeOutList != 'snippet') {
                     $oBlog->setDescription($this->_textHighlite($oBlog->getDescription()));
                 } else {
                     $oBlog->setDescription($this->_makeSnippet($oBlog->getDescription()));
                 }
             }
         }
     } else {
         $aResult['count'] = 0;
         $aBlogs = array();
     }
     // * Логгируем результаты, если требуется
     if ($this->bLogEnable) {
         $this->oLogs->RecordAdd('search', array('q' => $this->aReq['q'], 'result' => 'blogs:' . $aResult['count']));
         $this->oLogs->RecordEnd('search', true);
     }
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $this->aReq['iPage'], $this->nItemsPerPage, 4, Config::Get('path.root.url') . '/search/blogs', array('q' => $this->aReq['q']));
     $this->SetTemplateAction('results');
     // *  Отправляем данные в шаблон
     E::ModuleViewer()->AddHtmlTitle($this->aReq['q']);
     E::ModuleViewer()->Assign('bIsResults', $aResult['count']);
     E::ModuleViewer()->Assign('aRes', $aResult);
     E::ModuleViewer()->Assign('aBlogs', $aBlogs);
     E::ModuleViewer()->Assign('aPaging', $aPaging);
 }
Esempio n. 13
0
 /**
  * Возвращает личный блог пользователя
  *
  * @return ModuleBlog_EntityBlog|null
  */
 public function getBlog()
 {
     if (!$this->getProp('blog')) {
         $this->_aData['blog'] = E::ModuleBlog()->GetPersonalBlogByUserId($this->getId());
     }
     return $this->getProp('blog');
 }
Esempio n. 14
0
 /**
  * Удаление пользователей
  *
  * @param $aUsersId
  */
 public function DeleteUsers($aUsersId)
 {
     if (!is_array($aUsersId)) {
         $aUsersId = array(intval($aUsersId));
     }
     E::ModuleBlog()->DeleteBlogsByUsers($aUsersId);
     E::ModuleTopic()->DeleteTopicsByUsersId($aUsersId);
     if ($bResult = $this->oMapper->DeleteUser($aUsersId)) {
         $this->DeleteUserFieldValues($aUsersId, $aType = null);
         $aUsers = $this->GetUsersByArrayId($aUsersId);
         foreach ($aUsers as $oUser) {
             $this->DeleteAvatar($oUser);
             $this->DeletePhoto($oUser);
         }
     }
     foreach ($aUsersId as $nUserId) {
         E::ModuleCache()->CleanByTags(array("topic_update_user_{$nUserId}"));
         E::ModuleCache()->Delete("user_{$nUserId}");
     }
     return $bResult;
 }
Esempio n. 15
0
 /**
  * Перемещает топики в другой блог
  *
  * @param $nBlogIdNew
  * @param $aFilter
  *
  * @return bool
  */
 public function MoveTopicsByFilter($nBlogIdNew, $aFilter)
 {
     if (!isset($aFilter['blog_id']) && !isset($aFilter['topic_id'])) {
         return false;
     }
     if (isset($aFilter['blog_id']) && !is_array($aFilter['blog_id'])) {
         $aFilter['blog_id'] = array($aFilter['blog_id']);
     }
     if (isset($aFilter['topic_id']) && !is_array($aFilter['topic_id'])) {
         $aFilter['topic_id'] = array($aFilter['topic_id']);
     }
     $oBlogType = E::ModuleBlog()->GetBlogTypeById($nBlogIdNew);
     if ($oBlogType) {
         $nIndexIgnore = $oBlogType->getIndexIgnore();
     } else {
         $nIndexIgnore = 0;
     }
     $sql = "UPDATE ?_topic\n                SET\n                    blog_id = ?d,\n                    topic_index_ignore = CASE WHEN topic_index_ignore = ?d THEN topic_index_ignore ELSE ?d END\n                WHERE\n                    1 = 1\n                    { AND (blog_id IN (?a)) }\n                    { AND (topic_id IN(?a)) }\n                ";
     $bResult = $this->oDb->query($sql, $nBlogIdNew, ModuleTopic_EntityTopic::INDEX_IGNORE_LOCK, $nIndexIgnore, isset($aFilter['blog_id']) ? $aFilter['blog_id'] : DBSIMPLE_SKIP, isset($aFilter['topic_id']) ? $aFilter['topic_id'] : DBSIMPLE_SKIP);
     return $bResult !== false;
 }
Esempio n. 16
0
 /**
  * Подключение/отключение к блогу
  *
  */
 protected function AjaxBlogJoin()
 {
     //  Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     //  Пользователь авторизован?
     if (!$this->oUserCurrent) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     //  Блог существует?
     $nBlogId = intval(F::GetRequestStr('idBlog', null, 'post'));
     if (!$nBlogId || !($oBlog = E::ModuleBlog()->GetBlogById($nBlogId))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oCurrentBlog = $oBlog;
     // Type of the blog
     $oBlogType = $oBlog->getBlogType();
     // Current status of user in the blog
     /** @var ModuleBlog_EntityBlogUser $oBlogUser */
     $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $this->oUserCurrent->getId());
     if (!$oBlogUser || $oBlogUser->getUserRole() < ModuleBlog::BLOG_USER_ROLE_GUEST && (!$oBlogType || $oBlogType->IsPrivate())) {
         // * Проверяем тип блога на возможность свободного вступления или вступления по запросу
         if ($oBlogType && !$oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_FREE) && !$oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_REQUEST)) {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_join_error_invite'), E::ModuleLang()->Get('error'));
             return;
         }
         if ($oBlog->getOwnerId() != $this->oUserCurrent->getId()) {
             // Subscribe user to the blog
             if ($oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_FREE)) {
                 $bResult = false;
                 if ($oBlogUser) {
                     $oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER);
                     $bResult = E::ModuleBlog()->UpdateRelationBlogUser($oBlogUser);
                 } elseif ($oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_FREE)) {
                     // User can free subscribe to blog
                     /** @var ModuleBlog_EntityBlogUser $oBlogUserNew */
                     $oBlogUserNew = E::GetEntity('Blog_BlogUser');
                     $oBlogUserNew->setBlogId($oBlog->getId());
                     $oBlogUserNew->setUserId($this->oUserCurrent->getId());
                     $oBlogUserNew->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER);
                     $bResult = E::ModuleBlog()->AddRelationBlogUser($oBlogUserNew);
                 }
                 if ($bResult) {
                     E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_ok'), E::ModuleLang()->Get('attention'));
                     E::ModuleViewer()->AssignAjax('bState', true);
                     //  Увеличиваем число читателей блога
                     $oBlog->setCountUser($oBlog->getCountUser() + 1);
                     E::ModuleBlog()->UpdateBlog($oBlog);
                     E::ModuleViewer()->AssignAjax('iCountUser', $oBlog->getCountUser());
                     //  Добавляем событие в ленту
                     E::ModuleStream()->Write($this->oUserCurrent->getId(), 'join_blog', $oBlog->getId());
                     //  Добавляем подписку на этот блог в ленту пользователя
                     E::ModuleUserfeed()->SubscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_BLOG, $oBlog->getId());
                 } else {
                     $sMsg = $oBlogType->IsPrivate() ? E::ModuleLang()->Get('blog_join_error_invite') : E::ModuleLang()->Get('system_error');
                     E::ModuleMessage()->AddErrorSingle($sMsg, E::ModuleLang()->Get('error'));
                     return;
                 }
             }
             // Подписываем по запросу
             if ($oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_REQUEST)) {
                 // Подписка уже была запрошена, но результатов пока нет
                 if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_WISHES) {
                     E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_request_already'), E::ModuleLang()->Get('attention'));
                     E::ModuleViewer()->AssignAjax('bState', true);
                     return;
                 }
                 if ($oBlogUser) {
                     if (!in_array($oBlogUser->getUserRole(), array(ModuleBlog::BLOG_USER_ROLE_REJECT, ModuleBlog::BLOG_USER_ROLE_WISHES))) {
                         $sMessage = E::ModuleLang()->Get('blog_user_status_is') . ' "' . E::ModuleBlog()->GetBlogUserRoleName($oBlogUser->getUserRole()) . '"';
                         E::ModuleMessage()->AddNoticeSingle($sMessage, E::ModuleLang()->Get('attention'));
                         E::ModuleViewer()->AssignAjax('bState', true);
                         return;
                     } else {
                         $oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_WISHES);
                         $bResult = E::ModuleBlog()->UpdateRelationBlogUser($oBlogUser);
                     }
                 } else {
                     // Подписки ещё не было - оформим ее
                     /** @var ModuleBlog_EntityBlogUser $oBlogUserNew */
                     $oBlogUserNew = E::GetEntity('Blog_BlogUser');
                     $oBlogUserNew->setBlogId($oBlog->getId());
                     $oBlogUserNew->setUserId($this->oUserCurrent->getId());
                     $oBlogUserNew->setUserRole(ModuleBlog::BLOG_USER_ROLE_WISHES);
                     $bResult = E::ModuleBlog()->AddRelationBlogUser($oBlogUserNew);
                 }
                 if ($bResult) {
                     // Отправим сообщение модераторам и администраторам блога о том, что
                     // этот пользоватлеь захотел присоединиться к нашему блогу
                     $aBlogUsersResult = E::ModuleBlog()->GetBlogUsersByBlogId($oBlog->getId(), array(ModuleBlog::BLOG_USER_ROLE_MODERATOR, ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR), null);
                     if ($aBlogUsersResult) {
                         /** @var ModuleUser_EntityUser[] $aBlogModerators */
                         $aBlogModerators = array();
                         /** @var ModuleBlog_EntityBlogUser $oCurrentBlogUser */
                         foreach ($aBlogUsersResult['collection'] as $oCurrentBlogUser) {
                             $aBlogModerators[] = $oCurrentBlogUser->getUser();
                         }
                         // Добавим владельца блога к списку
                         $aBlogModerators = array_merge($aBlogModerators, array($oBlog->getOwner()));
                         $this->SendBlogRequest($oBlog, $aBlogModerators, $this->oUserCurrent);
                     }
                     E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_request_send'), E::ModuleLang()->Get('attention'));
                     E::ModuleViewer()->AssignAjax('bState', true);
                     return;
                 }
             }
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_join_error_self'), E::ModuleLang()->Get('attention'));
             return;
         }
     }
     if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_MEMBER) {
         // Unsubscribe user from the blog
         if (E::ModuleBlog()->DeleteRelationBlogUser($oBlogUser)) {
             E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_leave_ok'), E::ModuleLang()->Get('attention'));
             E::ModuleViewer()->AssignAjax('bState', false);
             //  Уменьшаем число читателей блога
             $oBlog->setCountUser($oBlog->getCountUser() - 1);
             E::ModuleBlog()->UpdateBlog($oBlog);
             E::ModuleViewer()->AssignAjax('iCountUser', $oBlog->getCountUser());
             //  Удаляем подписку на этот блог в ленте пользователя
             E::ModuleUserfeed()->UnsubscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_BLOG, $oBlog->getId());
             return;
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             return;
         }
     }
     if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_NOTMEMBER) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_user_request_no_accept'), E::ModuleLang()->Get('error'));
         return;
     }
     if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_BAN) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_leave_error_banned'), E::ModuleLang()->Get('error'));
         return;
     }
     if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_BAN_FOR_COMMENT) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_leave_error_banned'), E::ModuleLang()->Get('error'));
         return;
     }
     if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_WISHES) {
         E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_request_leave'), E::ModuleLang()->Get('attention'));
         E::ModuleViewer()->AssignAjax('bState', true);
         return;
     }
 }
Esempio n. 17
0
 /**
  * Returns blog object of the topic
  *
  * @return ModuleBlog_EntityBlog|null
  */
 public function getBlog()
 {
     $oBlog = $this->getProp('blog');
     if (!$oBlog) {
         $iBlogId = $this->getBlogId();
         if ($iBlogId) {
             $oBlog = E::ModuleBlog()->GetBlogById($iBlogId);
         } elseif ($iBlogId === 0 || $iBlogId === '0') {
             $oUser = $this->getUser();
             $oBlog = $oUser->getBlog();
         }
         $this->setProp('blog', $oBlog);
     }
     return $oBlog;
 }
Esempio n. 18
0
 /**
  * Получает топики пользователя с картинками
  *
  * @param int    $iUserId
  * @param string $sType
  * @param int    $iPage
  * @param int    $iPerPage
  *
  * @return array
  */
 public function GetTopicsPageByType($iUserId, $sType, $iPage, $iPerPage)
 {
     $iCount = 0;
     $aFilter = array('user_id' => $iUserId, 'mresource_type' => ModuleMresource::TYPE_IMAGE | ModuleMresource::TYPE_PHOTO | ModuleMresource::TYPE_PHOTO_PRIMARY, 'target_type' => array('photoset', 'topic'));
     if (E::IsUser() && E::User() !== $iUserId) {
         // Если текущий юзер не совпадает с запрашиваемым, то получаем список доступных блогов
         $aFilter['blogs_id'] = E::ModuleBlog()->GetAccessibleBlogsByUser(E::User());
         // И топики должны быть опубликованы
         $aFilter['topic_publish'] = 1;
     }
     if (!E::IsUser()) {
         // Если юзер не авторизован, то считаем все доступные для индексации топики
         $aFilter['topic_index_ignore'] = 0;
     }
     $aFilter['topic_type'] = $sType;
     $aTopicInfo = $this->oMapper->GetTopicInfo($aFilter, $iCount, $iPage, $iPerPage);
     if ($aTopicInfo) {
         $aFilter = array('topic_id' => array_keys($aTopicInfo), 'topic_type' => $sType);
         // Результат в формате array('collection'=>..., 'count'=>...)
         $aResult = E::ModuleTopic()->GetTopicsByFilter($aFilter, 1, count($aTopicInfo));
         if ($aResult) {
             /** @var ModuleTopic_EntityTopic $oTopic */
             foreach ($aResult['collection'] as $sTopicId => $oTopic) {
                 $oTopic->setImagesCount($aTopicInfo[$sTopicId]);
                 $aResult['collection'][$sTopicId] = $oTopic;
             }
             $aResult['count'] = $iCount;
             // total number of topics with images
         }
         return $aResult;
     }
     return array('collection' => array(), 'count' => 0);
 }
Esempio n. 19
0
 /**
  * Обработчик формирования меню в режиме blogs
  *
  * @param string[] $aFillSet Набор элементов меню
  * @param array $aMenu Само меню
  * @return array
  */
 public function ProcessBlogsMode($aFillSet, $aMenu = NULL)
 {
     /** @var ModuleMenu_EntityItem[] $aItems */
     $aItems = array();
     /** @var ModuleBlog_EntityBlog[] $aBlogs */
     $aBlogs = array();
     if ($aFillSet) {
         $aBlogs = E::ModuleBlog()->GetBlogsByUrl($aFillSet['items']);
     } else {
         if ($aResult = E::ModuleBlog()->GetBlogsRating(1, $aFillSet['limit'])) {
             $aBlogs = $aResult['collection'];
         }
     }
     if ($aBlogs) {
         foreach ($aBlogs as $oBlog) {
             $aItems[$oBlog->getUrl()] = $this->CreateMenuItem($oBlog->getUrl(), array('title' => $oBlog->getTitle(), 'link' => $oBlog->getUrlFull(), 'active' => (Config::Get('router.rewrite.blog') ? Config::Get('router.rewrite.blog') : 'blog') . '.' . $oBlog->getUrl(), 'submenu' => array(), 'on' => array('{*}'), 'off' => NULL, 'display' => TRUE, 'options' => array('image_url' => $oBlog->getAvatarUrl(Config::Get('module.menu.blog_logo_size')))));
         }
     }
     return $aItems;
 }
Esempio n. 20
0
 /**
  * Вспомогательный метод проверки прав пользователя блога
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  * @param string                $sRights
  *
  * @return bool
  */
 protected function _checkBlogUserRights($oBlog, $oUser, $sRights)
 {
     $sUserRole = '';
     $bCurrentUser = false;
     $bResult = false;
     if (!$oBlog) {
         return false;
     }
     // Если пользователь не передан, то берется текущий
     if (!$oUser) {
         if ($oUser = E::ModuleUser()->GetUserCurrent()) {
             $bCurrentUser = true;
         } else {
             return false;
         }
     } elseif (E::ModuleUser()->GetUserCurrent() && E::ModuleUser()->GetUserCurrent()->getId() == $oUser->getId()) {
         $bCurrentUser = true;
     }
     $sCacheKey = 'acl_blog_user_rights' . serialize(array($oBlog->GetId(), $oUser ? $oUser->GetId() : 0, $bCurrentUser, $sRights));
     // Сначала проверяем кеш
     if (is_int($xCacheResult = E::ModuleCache()->Get($sCacheKey, 'tmp'))) {
         return $xCacheResult;
     }
     if ($bCurrentUser) {
         // Blog owner has any rights
         if ($oBlog->getUserOwnerId() == $oUser->getId()) {
             return true;
         }
         // * Для авторизованного пользователя данный код будет работать быстрее
         if ($oBlog->getUserIsAdministrator()) {
             $sUserRole = 'administrator';
         } elseif ($oBlog->getUserIsModerator()) {
             $sUserRole = 'moderator';
         }
     } else {
         $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
         if ($oBlogUser) {
             if ($oBlogUser->IsBlogAdministrator()) {
                 $sUserRole = 'administrator';
             } elseif ($oBlogUser->IsBlogModerator()) {
                 $sUserRole = 'moderator';
             }
         }
     }
     if ($sUserRole) {
         $aUserRights = $this->GetUserRights('blogs', $sUserRole);
         $bResult = isset($aUserRights[$sRights]) && (bool) $aUserRights[$sRights];
     }
     E::ModuleCache()->Set($sCacheKey, $bResult ? 1 : 0, array('blog_update', 'user_update'), 0, 'tmp');
     return $bResult;
 }
Esempio n. 21
0
 /**
  * @param   int|object $oUserId
  *
  * @return  bool
  */
 public function DelUser($oUserId)
 {
     if (is_object($oUserId)) {
         $nUserId = $oUserId->getId();
     } else {
         $nUserId = intval($oUserId);
     }
     // Удаляем блоги
     $aBlogsId = E::ModuleBlog()->GetBlogsByOwnerId($nUserId, true);
     if ($aBlogsId) {
         E::ModuleBlog()->DeleteBlog($aBlogsId);
     }
     $oBlog = E::ModuleBlog()->GetPersonalBlogByUserId($nUserId);
     if ($oBlog) {
         E::ModuleBlog()->DeleteBlog($oBlog->getId());
     }
     // Удаляем переписку
     $iPerPage = 10000;
     do {
         $aTalks = E::ModuleTalk()->GetTalksByFilter(array('user_id' => $nUserId), 1, $iPerPage);
         if ($aTalks['count']) {
             $aTalksId = array();
             foreach ($aTalks['collection'] as $oTalk) {
                 $aTalksId[] = $oTalk->getId();
             }
             if ($aTalksId) {
                 E::ModuleTalk()->DeleteTalkUserByArray($aTalksId, $nUserId);
             }
         }
     } while ($aTalks['count'] > $iPerPage);
     $bOk = $this->oMapper->DelUser($nUserId);
     // Слишком много взаимосвязей, поэтому просто сбрасываем кеш
     E::ModuleCache()->Clean();
     return $bOk;
 }
Esempio n. 22
0
 /**
  * Обработка получения подключенных блогов
  * Используется в блоке "TOP блогов"
  *
  */
 protected function EventBlogsJoin()
 {
     // * Пользователь авторизован?
     if (!$this->oUserCurrent) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Получаем список блогов и формируем ответ
     if ($aBlogs = E::ModuleBlog()->GetBlogsRatingJoin($this->oUserCurrent->getId(), Config::Get('widgets.blogs.params.limit'))) {
         $aVars = array('aBlogs' => $aBlogs);
         // Рендерим шаблон виджета
         $sTextResult = E::ModuleViewer()->FetchWidget('blogs_top.tpl', $aVars);
         E::ModuleViewer()->AssignAjax('sText', $sTextResult);
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('widget_blogs_join_error'), E::ModuleLang()->Get('attention'));
         return;
     }
 }
Esempio n. 23
0
 /**
  * Проверка полей блога
  *
  * @param ModuleBlog_EntityBlog|null $oBlog
  *
  * @return bool
  */
 protected function checkBlogFields($oBlog = null)
 {
     $bOk = true;
     // * Проверяем есть ли название блога
     if (!F::CheckVal(F::GetRequestStr('blog_title'), 'text', 2, 200)) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('blog_create_title_error'), E::ModuleLang()->Get('error'));
         $bOk = false;
     } else {
         // * Проверяем есть ли уже блог с таким названием
         if ($oBlogExists = E::ModuleBlog()->GetBlogByTitle(F::GetRequestStr('blog_title'))) {
             if (!$oBlog || $oBlog->getId() != $oBlogExists->getId()) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('blog_create_title_error_unique'), E::ModuleLang()->Get('error'));
                 $bOk = false;
             }
         }
     }
     return $bOk;
 }
Esempio n. 24
0
 /**
  * @param $nVal
  */
 protected function _eventBlogTypeSetActive($nVal)
 {
     $aBlogTypes = $this->GetPost('blogtype_sel');
     if (is_array($aBlogTypes) && count($aBlogTypes)) {
         $aBlogTypes = array_keys($aBlogTypes);
         foreach ($aBlogTypes as $nBlogTypeId) {
             $oBlogType = E::ModuleBlog()->GetBlogTypeById($nBlogTypeId);
             if ($oBlogType) {
                 $oBlogType->SetActive($nVal);
                 E::ModuleBlog()->UpdateBlogType($oBlogType);
             }
         }
     }
     R::Location('admin/settings-blogtypes');
 }
Esempio n. 25
0
 /**
  * Отображение списка персональных блогов
  */
 protected function EventShowBlogsPersonal()
 {
     // * По какому полю сортировать
     $sOrder = F::GetRequestStr('order', 'blog_title');
     // * В каком направлении сортировать
     $sOrderWay = F::GetRequestStr('order_way', 'desc');
     // * Фильтр поиска блогов
     $aFilter = array('include_type' => 'personal');
     // * Передан ли номер страницы
     $iPage = preg_match('/^\\d+$/i', $this->GetParamEventMatch(0, 2)) ? $this->GetParamEventMatch(0, 2) : 1;
     // * Получаем список блогов
     $aResult = E::ModuleBlog()->GetBlogsByFilter($aFilter, array($sOrder => $sOrderWay), $iPage, Config::Get('module.blog.per_page'));
     $aBlogs = $aResult['collection'];
     // * Формируем постраничность
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.blog.per_page'), Config::Get('pagination.pages.count'), R::GetPath('blogs') . 'personal/', array('order' => $sOrder, 'order_way' => $sOrderWay));
     // * Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('aPaging', $aPaging);
     E::ModuleViewer()->Assign('aBlogs', $aBlogs);
     E::ModuleViewer()->Assign('sBlogOrder', htmlspecialchars($sOrder));
     E::ModuleViewer()->Assign('sBlogOrderWay', htmlspecialchars($sOrderWay));
     E::ModuleViewer()->Assign('sBlogOrderWayNext', $sOrderWay == 'desc' ? 'asc' : 'desc');
     E::ModuleViewer()->Assign('sShow', 'personal');
     E::ModuleViewer()->Assign('sBlogsRootPage', R::GetPath('blogs') . 'personal/');
     // * Устанавливаем title страницы
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('blog_menu_all_list'));
     // * Устанавливаем шаблон вывода
     $this->SetTemplateAction('index');
 }
Esempio n. 26
0
 /**
  * Получает список блогов
  *
  * @param array $aIds    Список  ID блогов
  *
  * @return array
  */
 protected function loadRelatedBlog($aIds)
 {
     return E::ModuleBlog()->GetBlogsAdditionalData($aIds);
 }
Esempio n. 27
0
 /**
  * @return null|string
  */
 protected function RssPersonalBlog()
 {
     $sUserLogin = $this->GetParam(0);
     $aParams = $this->GetParams();
     array_shift($aParams);
     if ($iMaxItems = intval(C::Get('module.topic.max_rss_count'))) {
         C::Set('module.topic.per_page', $iMaxItems);
     }
     $oUser = E::ModuleUser()->GetUserByLogin($sUserLogin);
     if ($oUser && ($oBlog = E::ModuleBlog()->GetPersonalBlogByUserId($oUser->getId()))) {
         E::ModuleHook()->AddHandler('action_after', array($this, 'ShowRssBlog'));
         return R::Action('blog', $oBlog->getId(), $aParams);
     } else {
         $this->_displayEmptyRss();
     }
     return null;
 }
Esempio n. 28
0
 /**
  * Получает URL цели
  *
  * @param string $sTargetType
  * @param int    $iTargetId
  *
  * @return string
  */
 public function GetTargetUrl($sTargetType, $iTargetId)
 {
     if (mb_strpos($sTargetType, 'single-image-uploader') === 0 || $sTargetType == 'photoset' || $sTargetType == 'topic') {
         /** @var ModuleTopic_EntityTopic $oTopic */
         if (!($oTopic = E::ModuleTopic()->GetTopicById($iTargetId))) {
             return '';
         }
         return $oTopic->getUrl();
     }
     if ($sTargetType == 'profile_avatar') {
         return R::GetPath('settings');
     }
     if ($sTargetType == 'profile_photo') {
         return R::GetPath('settings');
     }
     if ($sTargetType == 'blog_avatar') {
         /** @var ModuleBlog_EntityBlog $oBlog */
         $oBlog = E::ModuleBlog()->GetBlogById($iTargetId);
         if ($oBlog) {
             return $oBlog->getUrlFull();
         }
         return '';
     }
     return '';
 }
Esempio n. 29
0
 /**
  * Рассылает уведомления о новом топике подписчикам блога
  *
  * @param ModuleBlog_EntityBlog   $oBlog         Объект блога
  * @param ModuleTopic_EntityTopic $oTopic        Объект топика
  * @param ModuleUser_EntityUser   $oUserTopic    Объект пользователя
  */
 public function SendNotifyTopicNew($oBlog, $oTopic, $oUserTopic)
 {
     $aBlogUsersResult = E::ModuleBlog()->GetBlogUsersByBlogId($oBlog->getId(), null, null);
     // нужно постранично пробегаться по всем
     /** @var ModuleBlog_EntityBlogUser[] $aBlogUsers */
     $aBlogUsers = $aBlogUsersResult['collection'];
     foreach ($aBlogUsers as $oBlogUser) {
         if ($oBlogUser->getUserId() == $oUserTopic->getId()) {
             continue;
         }
         E::ModuleNotify()->SendTopicNewToSubscribeBlog($oBlogUser->getUser(), $oTopic, $oBlog, $oUserTopic);
     }
     //отправляем создателю блога
     if ($oBlog->getOwnerId() != $oUserTopic->getId()) {
         E::ModuleNotify()->SendTopicNewToSubscribeBlog($oBlog->getOwner(), $oTopic, $oBlog, $oUserTopic);
     }
 }
Esempio n. 30
0
 /**
  * Возвращает число топиков в открытых блогах из избранного по ID пользователя
  *
  * @param  string $iUserId    ID пользователя
  *
  * @return array
  */
 public function GetCountFavouriteOpenTopicsByUserId($iUserId)
 {
     $aOpenBlogTypes = E::ModuleBlog()->GetOpenBlogTypes();
     $sql = "SELECT\n\t\t\t\t\tCOUNT(f.target_id) as cnt\n\t\t\t\tFROM \n\t\t\t\t\t?_favourite AS f,\n\t\t\t\t\t?_topic AS t,\n\t\t\t\t\t?_blog AS b\n\t\t\t\tWHERE \n\t\t\t\t\t\tf.user_id = ?d\n\t\t\t\t\tAND\n\t\t\t\t\t\tf.target_publish = 1\n\t\t\t\t\tAND\n\t\t\t\t\t\tf.target_type = 'topic'\n\t\t\t\t\tAND\n\t\t\t\t\t\tf.target_id = t.topic_id\n\t\t\t\t\tAND \n\t\t\t\t\t\tt.blog_id = b.blog_id\n\t\t\t\t\tAND \n\t\t\t\t\t\tb.blog_type IN (?a)\n\t\t\t\t\t;";
     $aRow = $this->oDb->selectRow($sql, $iUserId, $aOpenBlogTypes);
     return $aRow ? $aRow['cnt'] : false;
 }