/** * Возвращает родительскую запись * * @return ModuleWall_EntityWall|null */ public function GetPidWall() { if ($this->getPid()) { return E::ModuleWall()->GetWallById($this->getPid()); } return null; }
/** * Вывод RSS последних комментариев */ protected function RssWall() { $aResult = E::ModuleWall()->GetWall(array(), array('date_add' => 'DESC'), 1, Config::Get('module.wall.per_page')); /** @var ModuleWall_EntityWall[] $aWall */ $aWall = $aResult['collection']; $aRssChannelData = array('title' => C::Get('view.name'), 'description' => C::Get('path.root.url') . ' / Wall RSS channel', 'link' => C::Get('path.root.url'), 'language' => C::Get('lang.current'), 'managing_editor' => C::Get('general.rss_editor_mail'), 'web_master' => C::Get('general.rss_editor_mail'), 'generator' => 'Alto CMS v.' . ALTO_VERSION); /** @var ModuleRss_EntityRssChannel $oRssChannel */ $oRssChannel = E::GetEntity('ModuleRss_EntityRssChannel', $aRssChannelData); /** @var ModuleRss_EntityRss $oRss */ $oRss = E::GetEntity('Rss'); if ($aWall) { // Adds items into RSS channel foreach ($aWall as $oItem) { if ($oItem) { $oRssChannel->AddItem($oItem->CreateRssItem()); } } } $oRss->AddChannel($oRssChannel); $this->_displayRss($oRss); }
/** * Returns stats of user publications and favourites * * @param int|object $xUser * * @return int[] */ public function GetUserProfileStats($xUser) { if (is_object($xUser)) { $iUserId = $xUser->getId(); } else { $iUserId = intval($xUser); } $iCountTopicFavourite = E::ModuleTopic()->GetCountTopicsFavouriteByUserId($iUserId); $iCountCommentFavourite = E::ModuleComment()->GetCountCommentsFavouriteByUserId($iUserId); $iCountTopics = E::ModuleTopic()->GetCountTopicsPersonalByUser($iUserId, 1); $iCountComments = E::ModuleComment()->GetCountCommentsByUserId($iUserId, 'topic'); $iCountWallRecords = E::ModuleWall()->GetCountWall(array('wall_user_id' => $iUserId, 'pid' => null)); $iImageCount = E::ModuleMresource()->GetCountImagesByUserId($iUserId); $iCountUserNotes = $this->GetCountUserNotesByUserId($iUserId); $iCountUserFriends = $this->GetCountUsersFriend($iUserId); $aUserPublicationStats = array('favourite_topics' => $iCountTopicFavourite, 'favourite_comments' => $iCountCommentFavourite, 'count_topics' => $iCountTopics, 'count_comments' => $iCountComments, 'count_usernotes' => $iCountUserNotes, 'count_wallrecords' => $iCountWallRecords, 'count_images' => $iImageCount, 'count_friends' => $iCountUserFriends); $aUserPublicationStats['count_created'] = $aUserPublicationStats['count_topics'] + $aUserPublicationStats['count_comments'] + $aUserPublicationStats['count_images']; if ($iUserId == E::UserId()) { $aUserPublicationStats['count_created'] += $aUserPublicationStats['count_usernotes']; } $aUserPublicationStats['count_favourites'] = $aUserPublicationStats['favourite_topics'] + $aUserPublicationStats['favourite_comments']; return $aUserPublicationStats; }
/** * Выполняется при завершении работы экшена * */ public function EventShutdown() { $iCountTopicFavourite = E::ModuleTopic()->GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId()); $iCountTopicUser = E::ModuleTopic()->GetCountTopicsPersonalByUser($this->oUserCurrent->getId(), 1); $iCountCommentUser = E::ModuleComment()->GetCountCommentsByUserId($this->oUserCurrent->getId(), 'topic'); $iCountCommentFavourite = E::ModuleComment()->GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId()); $iCountNoteUser = E::ModuleUser()->GetCountUserNotesByUserId($this->oUserCurrent->getId()); E::ModuleViewer()->Assign('oUserProfile', $this->oUserCurrent); E::ModuleViewer()->Assign('iCountWallUser', E::ModuleWall()->GetCountWall(array('wall_user_id' => $this->oUserCurrent->getId(), 'pid' => null))); // * Общее число публикация и избранного E::ModuleViewer()->Assign('iCountTopicUser', $iCountTopicUser); E::ModuleViewer()->Assign('iCountCommentUser', $iCountCommentUser); E::ModuleViewer()->Assign('iCountTopicFavourite', $iCountTopicFavourite); E::ModuleViewer()->Assign('iCountCommentFavourite', $iCountCommentFavourite); E::ModuleViewer()->Assign('iCountNoteUser', $iCountNoteUser); E::ModuleViewer()->Assign('iCountCreated', $iCountNoteUser + $iCountTopicUser + $iCountCommentUser); E::ModuleViewer()->Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite); E::ModuleViewer()->Assign('iCountFriendsUser', E::ModuleUser()->GetCountUsersFriend($this->oUserCurrent->getId())); // * Загружаем в шаблон необходимые переменные E::ModuleViewer()->Assign('sMenuItemSelect', $this->sMenuItemSelect); E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect); E::ModuleHook()->Run('action_shutdown_settings'); }
/** * Получает список записей на стене * * @param array $aIds Список ID записей на стене * * @return array */ protected function loadRelatedWall($aIds) { return E::ModuleWall()->GetWallAdditionalData($aIds); }
/** * Обработка завершения работу экшена */ public function EventShutdown() { if (!$this->oUserCurrent) { return; } $iCountTalkFavourite = E::ModuleTalk()->GetCountTalksFavouriteByUserId($this->oUserCurrent->getId()); E::ModuleViewer()->Assign('iCountTalkFavourite', $iCountTalkFavourite); $iCountTopicFavourite = E::ModuleTopic()->GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId()); $iCountTopicUser = E::ModuleTopic()->GetCountTopicsPersonalByUser($this->oUserCurrent->getId(), 1); $iCountCommentUser = E::ModuleComment()->GetCountCommentsByUserId($this->oUserCurrent->getId(), 'topic'); $iCountCommentFavourite = E::ModuleComment()->GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId()); $iCountNoteUser = E::ModuleUser()->GetCountUserNotesByUserId($this->oUserCurrent->getId()); E::ModuleViewer()->Assign('oUserProfile', $this->oUserCurrent); E::ModuleViewer()->Assign('iCountWallUser', E::ModuleWall()->GetCountWall(array('wall_user_id' => $this->oUserCurrent->getId(), 'pid' => null))); // * Общее число публикация и избранного E::ModuleViewer()->Assign('iCountCreated', $iCountNoteUser + $iCountTopicUser + $iCountCommentUser); E::ModuleViewer()->Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite); E::ModuleViewer()->Assign('iCountFriendsUser', E::ModuleUser()->GetCountUsersFriend($this->oUserCurrent->getId())); E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect); // * Передаем во вьевер константы состояний участников разговора E::ModuleViewer()->Assign('TALK_USER_ACTIVE', ModuleTalk::TALK_USER_ACTIVE); E::ModuleViewer()->Assign('TALK_USER_DELETE_BY_SELF', ModuleTalk::TALK_USER_DELETE_BY_SELF); E::ModuleViewer()->Assign('TALK_USER_DELETE_BY_AUTHOR', ModuleTalk::TALK_USER_DELETE_BY_AUTHOR); }
/** * Проверка на ограничение по времени на постинг на стене * * @param ModuleUser_EntityUser $oUser Пользователь * @param ModuleWall_EntityWall $oWall Объект сообщения на стене * * @return bool */ public function CanAddWallTime($oUser, $oWall) { // * Для администраторов ограничение по времени не действует if ($oUser->isAdministrator() || $oUser->isModerator() || Config::Get('acl.create.wall.limit_time') == 0 || $oUser->getRating() >= Config::Get('acl.create.wall.limit_time_rating')) { return true; } if ($oWall->getUserId() == $oWall->getWallUserId()) { return true; } // * Получаем последнее сообщение $aWall = E::ModuleWall()->GetWall(array('user_id' => $oWall->getUserId()), array('id' => 'desc'), 1, 1, array()); // * Если сообщений нет if ($aWall['count'] == 0) { return true; } $oWallLast = array_shift($aWall['collection']); $sDate = strtotime($oWallLast->getDateAdd()); if ($sDate && time() - $sDate < Config::Get('acl.create.wall.limit_time')) { return false; } return true; }
/** * Обработка получения последних записей стены * Используется в блоке "Прямой эфир" * */ protected function EventStreamWall() { $aVars = array(); $aResult = E::ModuleWall()->GetWall(array(), array('date_add' => 'DESC'), 1, Config::Get('widgets.stream.params.limit')); if ($aResult['count'] != 0) { $aVars['aWall'] = $aResult['collection']; } $sTextResult = E::ModuleViewer()->FetchWidget('stream_wall.tpl', $aVars); E::ModuleViewer()->AssignAjax('sText', $sTextResult); }
/** * @param $sType * @param ModuleUser_EntityUser $oUser * @return bool|string */ public function CheckRuleCreateAction($sType, $oUser) { if ($oUser->isAdministrator()) { return true; } $aRules = C::Get('plugin.magicrules.rule_block_create'); if (!is_array($aRules) || empty($aRules)) { return TRUE; } if (!in_array($sType, array('content', 'comment', 'wall'))) { return TRUE; } // Получим настрйоки блокировок для создания топика конкретным пользователем foreach ($aRules as $aRule) { if (!in_array($sType, $aRule['target'])) { continue; } if (empty($aRule['block_time'])) { continue; } $aRule['block_time'] = (int) $aRule['block_time']; if (!$aRule['block_time']) { continue; } if (empty($aRule['count'])) { continue; } $aRule['count'] = (int) $aRule['count']; if (!$aRule['count']) { continue; } if (empty($aRule['period'])) { continue; } $aRule['period'] = (int) $aRule['period']; if (!$aRule['period']) { continue; } $aRule['rating'] = (int) $aRule['rating']; if ($aRule['rating'] && $oUser && $oUser->getRating() >= $aRule['rating']) { continue; } if ($sType == 'content') { // Получим количество топиков за прошедший период $aRule['real_count'] = E::ModuleTopic()->GetCountUsersTopicByTimeLast($oUser, $aRule['period']); if ($aRule['real_count'] >= $aRule['count']) { // Количество топиков за прошедший период достигло предела // Проверим истёк ли период блокировки $xResult = E::ModuleTopic()->CheckLastTopicTime($oUser, $aRule['block_time']); if ($xResult !== TRUE) { // Срок блокировки ещё не истёк $sError = E::ModuleLang()->Get("plugin.magicrules." . str_replace(array('{{', '}}'), array('', ''), $aRule['block_msg']), array('h' => $xResult['h'], 'm' => $xResult['m'], 's' => $xResult['s'])); $oBlock = Engine::GetEntity('PluginMagicrules_ModuleRule_EntityBlock'); $oBlock->setUserId($oUser->getId()); $oBlock->setType(self::BLOCK_TYPE_CREATE); $oBlock->setName(isset($aRule['name']) ? $aRule['name'] : ''); $oBlock->setTarget('topic'); $oBlock->setMsg($sError); $oBlock->setDateBlock(date('Y-m-d H:i:s', time() + $aRule['block_time'])); $oBlock->setData('***'); $oBlock->Add(); return $sError; } } } if ($sType == 'comment') { // Получим количество топиков за прошедший период $aRule['real_count'] = E::ModuleComment()->GetCountUsersCommentByTimeLast($oUser, $aRule['period']); if ($aRule['real_count'] >= $aRule['count']) { // Количество комментариев за прошедший период достигло предела // Проверим истёк ли период блокировки $xResult = E::ModuleComment()->CheckLastCommentTime($oUser, $aRule['block_time']); if ($xResult !== TRUE) { // Срок блокировки ещё не истёк $sError = E::ModuleLang()->Get("plugin.magicrules." . str_replace(array('{{', '}}'), array('', ''), $aRule['block_msg']), array('h' => $xResult['h'], 'm' => $xResult['m'], 's' => $xResult['s'])); $oBlock = Engine::GetEntity('PluginMagicrules_ModuleRule_EntityBlock'); $oBlock->setUserId($oUser->getId()); $oBlock->setType(self::BLOCK_TYPE_CREATE); $oBlock->setName(isset($aRule['name']) ? $aRule['name'] : ''); $oBlock->setTarget('comment'); $oBlock->setMsg($sError); $oBlock->setDateBlock(date('Y-m-d H:i:s', time() + $aRule['block_time'])); $oBlock->setData('***'); $oBlock->Add(); return $sError; } } } if ($sType == 'wall') { // Получим количество топиков за прошедший период $aRule['real_count'] = E::ModuleWall()->GetCountUsersWallByTimeLast($oUser, $aRule['period']); if ($aRule['real_count'] >= $aRule['count']) { // Количество комментариев за прошедший период достигло предела // Проверим истёк ли период блокировки $xResult = E::ModuleWall()->CheckLastWallTime($oUser, $aRule['block_time']); if ($xResult !== TRUE) { // Срок блокировки ещё не истёк $sError = E::ModuleLang()->Get("plugin.magicrules." . str_replace(array('{{', '}}'), array('', ''), $aRule['block_msg']), array('h' => $xResult['h'], 'm' => $xResult['m'], 's' => $xResult['s'])); $oBlock = Engine::GetEntity('PluginMagicrules_ModuleRule_EntityBlock'); $oBlock->setUserId($oUser->getId()); $oBlock->setType(self::BLOCK_TYPE_CREATE); $oBlock->setName(isset($aRule['name']) ? $aRule['name'] : ''); $oBlock->setTarget('wall'); $oBlock->setMsg($sError); $oBlock->setDateBlock(date('Y-m-d H:i:s', time() + $aRule['block_time'])); $oBlock->setData('***'); $oBlock->Add(); return $sError; } } } } return TRUE; }
/** * Подгрузка ответов на стене к сообщению */ public function EventWallLoadReply() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); if (!$this->CheckUserProfile()) { return parent::EventNotFound(); } // пока оставлю здесь, логику не понял //if (!($oWall = E::ModuleWall()->GetWallById($this->GetPost('iPid'))) || $oWall->getPid()) { if (!($oWall = E::ModuleWall()->GetWallById($this->GetPost('iPid')))) { return parent::EventNotFound(); } // * Формируем фильтр для запроса к БД $aFilter = array('wall_user_id' => $this->oUserProfile->getId(), 'pid' => $oWall->getId()); if (is_numeric(F::GetRequest('iIdLess'))) { $aFilter['id_less'] = F::GetRequest('iIdLess'); } elseif (is_numeric(F::GetRequest('iIdMore'))) { $aFilter['id_more'] = F::GetRequest('iIdMore'); } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('error')); return; } // * Получаем сообщения и формируем ответ. Необходимо вернуть все ответы, но ставим "разумное" ограничение $aWall = E::ModuleWall()->GetWall($aFilter, array('id' => 'asc'), 1, 300); E::ModuleViewer()->Assign('aLang', E::ModuleLang()->GetLangMsg()); E::ModuleViewer()->Assign('aReplyWall', $aWall['collection']); E::ModuleViewer()->AssignAjax('sText', E::ModuleViewer()->Fetch('actions/profile/action.profile.wall_items_reply.tpl')); E::ModuleViewer()->AssignAjax('iCountWall', $aWall['count']); E::ModuleViewer()->AssignAjax('iCountWallReturn', count($aWall['collection'])); }
/** * Выполняется при завершении работы экшена */ public function EventShutdown() { if (!$this->oUserProfile) { return; } /** * Загружаем в шаблон необходимые переменные */ $iCountTopicFavourite = E::ModuleTopic()->GetCountTopicsFavouriteByUserId($this->oUserProfile->getId()); $iCountTopicUser = E::ModuleTopic()->GetCountTopicsPersonalByUser($this->oUserProfile->getId(), 1); $iCountCommentUser = E::ModuleComment()->GetCountCommentsByUserId($this->oUserProfile->getId(), 'topic'); $iCountCommentFavourite = E::ModuleComment()->GetCountCommentsFavouriteByUserId($this->oUserProfile->getId()); $iCountNoteUser = E::ModuleUser()->GetCountUserNotesByUserId($this->oUserProfile->getId()); // Получим информацию об изображениях пользовтеля // И посчитаем общее количество картинок /** @var ModuleMresource_EntityMresourceCategory[] $aUserImagesInfo */ $aUserImagesInfo = E::ModuleMresource()->GetAllImageCategoriesByUserId($this->oUserProfile->getId()); $iPhotoCount = E::ModuleMresource()->GetCountImagesByUserId($this->oUserProfile->getId()); E::ModuleViewer()->Assign('oUserProfile', $this->oUserProfile); E::ModuleViewer()->Assign('iCountTopicUser', $iCountTopicUser); E::ModuleViewer()->Assign('iCountCommentUser', $iCountCommentUser); E::ModuleViewer()->Assign('iCountTopicFavourite', $iCountTopicFavourite); E::ModuleViewer()->Assign('iCountCommentFavourite', $iCountCommentFavourite); E::ModuleViewer()->Assign('iCountNoteUser', $iCountNoteUser); E::ModuleViewer()->Assign('iCountWallUser', E::ModuleWall()->GetCountWall(array('wall_user_id' => $this->oUserProfile->getId(), 'pid' => null))); E::ModuleViewer()->Assign('oUserImagesInfo', $aUserImagesInfo); E::ModuleViewer()->Assign('iPhotoCount', $iPhotoCount); /** * Общее число публикаций и избранного */ E::ModuleViewer()->Assign('iCountCreated', ($this->oUserCurrent && $this->oUserCurrent->getId() == $this->oUserProfile->getId() ? $iCountNoteUser : 0) + $iCountTopicUser + $iCountCommentUser + $iPhotoCount); E::ModuleViewer()->Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite); /** * Заметка текущего пользователя о юзере */ if ($this->oUserCurrent) { E::ModuleViewer()->Assign('oUserNote', $this->oUserProfile->getUserNote()); } E::ModuleViewer()->Assign('iCountFriendsUser', E::ModuleUser()->GetCountUsersFriend($this->oUserProfile->getId())); E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect); E::ModuleViewer()->Assign('sMenuHeadItemSelect', $this->sMenuHeadItemSelect); E::ModuleViewer()->Assign('USER_FRIEND_NULL', ModuleUser::USER_FRIEND_NULL); E::ModuleViewer()->Assign('USER_FRIEND_OFFER', ModuleUser::USER_FRIEND_OFFER); E::ModuleViewer()->Assign('USER_FRIEND_ACCEPT', ModuleUser::USER_FRIEND_ACCEPT); E::ModuleViewer()->Assign('USER_FRIEND_REJECT', ModuleUser::USER_FRIEND_REJECT); E::ModuleViewer()->Assign('USER_FRIEND_DELETE', ModuleUser::USER_FRIEND_DELETE); }