Esempio n. 1
0
 /**
  * Возвращает родительскую запись
  *
  * @return ModuleWall_EntityWall|null
  */
 public function GetPidWall()
 {
     if ($this->getPid()) {
         return E::ModuleWall()->GetWallById($this->getPid());
     }
     return null;
 }
Esempio n. 2
0
 /**
  * Вывод 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);
 }
Esempio n. 3
0
 /**
  * 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;
 }
Esempio n. 4
0
 /**
  * Выполняется при завершении работы экшена
  *
  */
 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');
 }
Esempio n. 5
0
 /**
  * Получает список записей на стене
  *
  * @param array $aIds    Список  ID записей на стене
  *
  * @return array
  */
 protected function loadRelatedWall($aIds)
 {
     return E::ModuleWall()->GetWallAdditionalData($aIds);
 }
Esempio n. 6
0
 /**
  * Обработка завершения работу экшена
  */
 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);
 }
Esempio n. 7
0
 /**
  * Проверка на ограничение по времени на постинг на стене
  *
  * @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;
 }
Esempio n. 8
0
 /**
  * Обработка получения последних записей стены
  * Используется в блоке "Прямой эфир"
  *
  */
 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;
 }
Esempio n. 10
0
 /**
  * Подгрузка ответов на стене к сообщению
  */
 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']));
 }
Esempio n. 11
0
 /**
  * Выполняется при завершении работы экшена
  */
 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);
 }