/** * Запуск обработки */ public function Exec() { /** * пользователь авторизован? */ if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) { // * Получаем и прогружаем необходимые переменные в шаблон $aTypesList = E::ModuleStream()->GetTypesList($oUserCurrent->getId()); E::ModuleViewer()->Assign('aStreamTypesList', $aTypesList ? $aTypesList : array()); } }
/** * Запуск обработки */ public function Exec() { // * пользователь авторизован? if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) { // * Получаем и прогружаем необходимые переменные в шаблон $aUserSubscribes = E::ModuleStream()->GetUserSubscribes($oUserCurrent->getId()); E::ModuleViewer()->Assign('aStreamSubscribedUsers', $aUserSubscribes ? $aUserSubscribes : array()); // issue#449, список друзей пользователя не передавался в шаблон $aStreamFriends = E::ModuleUser()->GetUsersFriend($oUserCurrent->getId()); E::ModuleViewer()->Assign('aStreamFriends', $aStreamFriends['collection']); } }
/** * Запуск обработки */ public function Exec() { // * пользователь авторизован? if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) { // * Получаем и прогружаем необходимые переменные в шаблон $aTypesList = E::ModuleStream()->GetTypesList($oUserCurrent->getId()); $aUserSubscribes = E::ModuleStream()->GetUserSubscribes($oUserCurrent->getId()); $aFriends = E::ModuleUser()->GetUsersFriend($oUserCurrent->getId()); E::ModuleViewer()->Assign('aStreamTypesList', $aTypesList); E::ModuleViewer()->Assign('aStreamSubscribedUsers', $aUserSubscribes); E::ModuleViewer()->Assign('aStreamFriends', $aFriends['collection']); } }
/** * Проверяет подписан ли текущий пользователь на этого * * @return bool */ public function isFollow() { if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) { return E::ModuleStream()->IsSubscribe($oUserCurrent->getId(), $this->getId()); } return false; }
public function EventAjaxUserAdd() { E::ModuleViewer()->SetResponseAjax('json'); if ($this->IsPost()) { Config::Set('module.user.captcha_use_registration', false); $oUser = E::GetEntity('ModuleUser_EntityUser'); $oUser->_setValidateScenario('registration'); // * Заполняем поля (данные) $oUser->setLogin($this->GetPost('user_login')); $oUser->setMail($this->GetPost('user_mail')); $oUser->setPassword($this->GetPost('user_password')); $oUser->setPasswordConfirm($this->GetPost('user_password')); $oUser->setDateRegister(F::Now()); $oUser->setIpRegister(''); $oUser->setActivate(1); if ($oUser->_Validate()) { E::ModuleHook()->Run('registration_validate_after', array('oUser' => $oUser)); $oUser->setPassword($oUser->getPassword(), true); if (E::ModuleUser()->Add($oUser)) { E::ModuleHook()->Run('registration_after', array('oUser' => $oUser)); // Подписываем пользователя на дефолтные события в ленте активности E::ModuleStream()->SwitchUserEventDefaultTypes($oUser->getId()); if ($this->IsPost('user_setadmin')) { E::ModuleAdmin()->SetAdministrator($oUser->GetId()); } } E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('registration_ok')); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('error')); E::ModuleViewer()->AssignAjax('aErrors', $oUser->_getValidateErrors()); } } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); } }
/** * Удаление/восстановление комментария * */ protected function EventCommentDelete() { // * Комментарий существует? $idComment = F::GetRequestStr('idComment', null, 'post'); if (!($oComment = E::ModuleComment()->GetCommentById($idComment))) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } // * Есть права на удаление комментария? if (!$oComment->isDeletable()) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error')); return; } // * Устанавливаем пометку о том, что комментарий удален $oComment->setDelete(($oComment->getDelete() + 1) % 2); E::ModuleHook()->Run('comment_delete_before', array('oComment' => $oComment)); if (!E::ModuleComment()->UpdateCommentStatus($oComment)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } E::ModuleHook()->Run('comment_delete_after', array('oComment' => $oComment)); // * Формируем текст ответа if ($bState = (bool) $oComment->getDelete()) { $sMsg = E::ModuleLang()->Get('comment_delete_ok'); $sTextToggle = E::ModuleLang()->Get('comment_repair'); } else { $sMsg = E::ModuleLang()->Get('comment_repair_ok'); $sTextToggle = E::ModuleLang()->Get('comment_delete'); } // * Обновление события в ленте активности E::ModuleStream()->Write($oComment->getUserId(), 'add_comment', $oComment->getId(), !$oComment->getDelete()); // * Показываем сообщение и передаем переменные в ajax ответ E::ModuleMessage()->AddNoticeSingle($sMsg, E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', $bState); E::ModuleViewer()->AssignAjax('sTextToggle', $sTextToggle); }
/** * Обработка Ajax регистрации */ protected function EventAjaxRegistration() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); E::ModuleSecurity()->ValidateSendForm(); // * Создаем объект пользователя и устанавливаем сценарий валидации /** @var ModuleUser_EntityUser $oUser */ $oUser = E::GetEntity('ModuleUser_EntityUser'); $oUser->_setValidateScenario('registration'); // * Заполняем поля (данные) $oUser->setLogin($this->GetPost('login')); $oUser->setMail($this->GetPost('mail')); $oUser->setPassword($this->GetPost('password')); $oUser->setPasswordConfirm($this->GetPost('password_confirm')); $oUser->setCaptcha($this->GetPost('captcha')); $oUser->setDateRegister(F::Now()); $oUser->setIpRegister(F::GetUserIp()); // * Если используется активация, то генерим код активации if (Config::Get('general.reg.activation')) { $oUser->setActivate(0); $oUser->setActivationKey(F::RandomStr()); } else { $oUser->setActivate(1); $oUser->setActivationKey(null); } E::ModuleHook()->Run('registration_validate_before', array('oUser' => $oUser)); // * Запускаем валидацию if ($oUser->_Validate()) { // Сбросим капчу // issue#342. E::ModuleSession()->Drop(E::ModuleCaptcha()->GetKeyName()); E::ModuleHook()->Run('registration_validate_after', array('oUser' => $oUser)); $oUser->setPassword($oUser->getPassword(), true); if ($this->_addUser($oUser)) { E::ModuleHook()->Run('registration_after', array('oUser' => $oUser)); // * Подписываем пользователя на дефолтные события в ленте активности E::ModuleStream()->SwitchUserEventDefaultTypes($oUser->getId()); // * Если юзер зарегистрировался по приглашению то обновляем инвайт if (Config::Get('general.reg.invite') && ($oInvite = E::ModuleUser()->GetInviteByCode($this->GetInviteRegister()))) { $oInvite->setUserToId($oUser->getId()); $oInvite->setDateUsed(F::Now()); $oInvite->setUsed(1); E::ModuleUser()->UpdateInvite($oInvite); } // * Если стоит регистрация с активацией то проводим её if (Config::Get('general.reg.activation')) { // * Отправляем на мыло письмо о подтверждении регистрации E::ModuleNotify()->SendRegistrationActivate($oUser, F::GetRequestStr('password')); E::ModuleViewer()->AssignAjax('sUrlRedirect', R::GetPath('registration') . 'confirm/'); } else { E::ModuleNotify()->SendRegistration($oUser, F::GetRequestStr('password')); $oUser = E::ModuleUser()->GetUserById($oUser->getId()); // * Сразу авторизуем E::ModuleUser()->Authorization($oUser, false); $this->DropInviteRegister(); // * Определяем URL для редиректа после авторизации $sUrl = Config::Get('module.user.redirect_after_registration'); if (F::GetRequestStr('return-path')) { $sUrl = F::GetRequestStr('return-path'); } E::ModuleViewer()->AssignAjax('sUrlRedirect', $sUrl ? $sUrl : Config::Get('path.root.url')); E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('registration_ok')); } } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); return; } } else { // * Получаем ошибки E::ModuleViewer()->AssignAjax('aErrors', $oUser->_getValidateErrors()); } }
/** * Подключение/отключение к блогу * */ 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; } }
/** * Обработка редактирования топика * * @param ModuleTopic_EntityTopic $oTopic * * @return mixed */ protected function SubmitEdit($oTopic) { $oTopic->_setValidateScenario('topic'); // * Сохраняем старое значение идентификатора блога $iBlogIdOld = $oTopic->getBlogId(); // * Заполняем поля для валидации $iBlogId = F::GetRequestStr('blog_id'); // if blog_id is empty then save blog not changed if (is_numeric($iBlogId)) { $oTopic->setBlogId($iBlogId); } // issue 151 (https://github.com/altocms/altocms/issues/151) // Некорректная обработка названия блога // $oTopic->setTitle(strip_tags(F::GetRequestStr('topic_title'))); $oTopic->setTitle(E::ModuleTools()->RemoveAllTags(F::GetRequestStr('topic_title'))); $oTopic->setTextSource(F::GetRequestStr('topic_text')); if ($this->oContentType->isAllow('link')) { $oTopic->setSourceLink(F::GetRequestStr('topic_field_link')); } $oTopic->setTags(F::GetRequestStr('topic_field_tags')); $oTopic->setUserIp(F::GetUserIp()); if ($this->oUserCurrent && ($this->oUserCurrent->isAdministrator() || $this->oUserCurrent->isModerator())) { if (F::GetRequestStr('topic_url') && $oTopic->getTopicUrl() != F::GetRequestStr('topic_url')) { $sTopicUrl = E::ModuleTopic()->CorrectTopicUrl(F::TranslitUrl(F::GetRequestStr('topic_url'))); $oTopic->setTopicUrl($sTopicUrl); } } // * Проверка корректности полей формы if (!$this->checkTopicFields($oTopic)) { return false; } // * Определяем в какой блог делаем запись $nBlogId = $oTopic->getBlogId(); if ($nBlogId == 0) { $oBlog = E::ModuleBlog()->GetPersonalBlogByUserId($oTopic->getUserId()); } else { $oBlog = E::ModuleBlog()->GetBlogById($nBlogId); } // * Если блог не определен выдаем предупреждение if (!$oBlog) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_create_blog_error_unknown'), E::ModuleLang()->Get('error')); return false; } // * Проверяем права на постинг в блог if (!E::ModuleACL()->IsAllowBlog($oBlog, $this->oUserCurrent)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_create_blog_error_noallow'), E::ModuleLang()->Get('error')); return false; } // * Проверяем разрешено ли постить топик по времени if (isPost('submit_topic_publish') && !$oTopic->getPublishDraft() && !E::ModuleACL()->CanPostTopicTime($this->oUserCurrent)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_time_limit'), E::ModuleLang()->Get('error')); return; } $oTopic->setBlogId($oBlog->getId()); // * Получаемый и устанавливаем разрезанный текст по тегу <cut> list($sTextShort, $sTextNew, $sTextCut) = E::ModuleText()->Cut($oTopic->getTextSource()); $oTopic->setCutText($sTextCut); $oTopic->setText(E::ModuleText()->Parser($sTextNew)); // Получаем ссылки, полученные при парсинге текста $oTopic->setTextLinks(E::ModuleText()->GetLinks()); $oTopic->setTextShort(E::ModuleText()->Parser($sTextShort)); // * Изменяем вопрос/ответы, только если еще никто не голосовал if ($this->oContentType->isAllow('poll') && F::GetRequestStr('topic_field_question') && F::GetRequest('topic_field_answers', array()) && $oTopic->getQuestionCountVote() == 0) { $oTopic->setQuestionTitle(strip_tags(F::GetRequestStr('topic_field_question'))); $oTopic->clearQuestionAnswer(); $aAnswers = F::GetRequest('topic_field_answers', array()); foreach ($aAnswers as $sAnswer) { $sAnswer = trim((string) $sAnswer); if ($sAnswer) { $oTopic->addQuestionAnswer($sAnswer); } } } $aPhotoSetData = E::ModuleMresource()->GetPhotosetData('photoset', $oTopic->getId()); $oTopic->setPhotosetCount($aPhotoSetData['count']); $oTopic->setPhotosetMainPhotoId($aPhotoSetData['cover']); // * Publish or save as a draft $bSendNotify = false; if (isset($_REQUEST['submit_topic_publish'])) { // If the topic has not been published then sets date of show (publication date) if (!$oTopic->getPublish() && !$oTopic->getDateShow()) { $oTopic->setDateShow(F::Now()); } $oTopic->setPublish(1); if ($oTopic->getPublishDraft() == 0) { $oTopic->setPublishDraft(1); $oTopic->setDateAdd(F::Now()); $bSendNotify = true; } } else { $oTopic->setPublish(0); } // * Принудительный вывод на главную if (E::ModuleACL()->IsAllowPublishIndex($this->oUserCurrent)) { if (F::GetRequest('topic_publish_index')) { $oTopic->setPublishIndex(1); } else { $oTopic->setPublishIndex(0); } } // * Запрет на комментарии к топику $oTopic->setForbidComment(F::GetRequest('topic_forbid_comment', 0)); // Если запрет на индексацию не устанавливался вручную, то задаем, как у блога $oBlogType = $oBlog->GetBlogType(); if ($oBlogType && !$oTopic->getIndexIgnoreLock()) { $oTopic->setTopicIndexIgnore($oBlogType->GetIndexIgnore()); } else { $oTopic->setTopicIndexIgnore(false); } $oTopic->setShowPhotoset(F::GetRequest('topic_show_photoset', 0)); E::ModuleHook()->Run('topic_edit_before', array('oTopic' => $oTopic, 'oBlog' => $oBlog)); // * Сохраняем топик if ($this->_updateTopic($oTopic)) { E::ModuleHook()->Run('topic_edit_after', array('oTopic' => $oTopic, 'oBlog' => $oBlog, 'bSendNotify' => &$bSendNotify)); // * Обновляем данные в комментариях, если топик был перенесен в новый блог if ($iBlogIdOld != $oTopic->getBlogId()) { E::ModuleComment()->UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId()); E::ModuleComment()->UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId()); } // * Обновляем количество топиков в блоге if ($iBlogIdOld != $oTopic->getBlogId()) { E::ModuleBlog()->RecalculateCountTopicByBlogId($iBlogIdOld); } E::ModuleBlog()->RecalculateCountTopicByBlogId($oTopic->getBlogId()); // * Добавляем событие в ленту E::ModuleStream()->Write($oTopic->getUserId(), 'add_topic', $oTopic->getId(), $oTopic->getPublish() && (!$oBlogType || !$oBlog->getBlogType()->IsPrivate())); // * Рассылаем о новом топике подписчикам блога if ($bSendNotify) { E::ModuleTopic()->SendNotifyTopicNew($oBlog, $oTopic, $oTopic->getUser()); } if (!$oTopic->getPublish() && !$this->oUserCurrent->isAdministrator() && !$this->oUserCurrent->isModerator() && $this->oUserCurrent->getId() != $oTopic->getUserId()) { R::Location($oBlog->getUrlFull()); } R::Location($oTopic->getUrl()); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); F::SysWarning('System Error'); return R::Action('error'); } }
/** * Отписка от пользователя * */ protected function EventUnsubscribe() { /** * Устанавливаем формат Ajax ответа */ E::ModuleViewer()->SetResponseAjax('json'); /** * Пользователь авторизован? */ if (!$this->oUserCurrent) { parent::EventNotFound(); } /** * Пользователь с таким ID существует? */ if (!E::ModuleUser()->GetUserById(F::GetRequestStr('id'))) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); } /** * Отписываем */ E::ModuleStream()->UnsubscribeUser($this->oUserCurrent->getId(), F::GetRequestStr('id')); E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('stream_subscribes_updated'), E::ModuleLang()->Get('attention')); }
/** * Обработка добавления в друзья * * @param ModuleUser_EntityUser $oUser * @param string $sUserText * @param ModuleUser_EntityUser $oFriend * * @return bool */ protected function SubmitAddFriend($oUser, $sUserText, $oFriend = null) { /** * Ограничения на добавления в друзья, т.к. приглашение отправляется в личку, то и ограничиваем по ней */ if (!E::ModuleACL()->CanSendTalkTime($this->oUserCurrent)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_add_time_limit'), E::ModuleLang()->Get('error')); return false; } /** * Обрабатываем текст заявки */ $sUserText = E::ModuleText()->Parse($sUserText); /** * Создаем связь с другом */ /** @var ModuleUser_EntityFriend $oFriendNew */ $oFriendNew = E::GetEntity('User_Friend'); $oFriendNew->setUserTo($oUser->getId()); $oFriendNew->setUserFrom($this->oUserCurrent->getId()); // Добавляем заявку в друзья $oFriendNew->setStatusFrom(ModuleUser::USER_FRIEND_OFFER); $oFriendNew->setStatusTo(ModuleUser::USER_FRIEND_NULL); $bStateError = $oFriend ? !E::ModuleUser()->UpdateFriend($oFriendNew) : !E::ModuleUser()->AddFriend($oFriendNew); if (!$bStateError) { E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('user_friend_offer_send'), E::ModuleLang()->Get('attention')); $sTitle = E::ModuleLang()->Get('user_friend_offer_title', array('login' => $this->oUserCurrent->getLogin(), 'friend' => $oUser->getLogin())); F::IncludeLib('XXTEA/encrypt.php'); $sCode = $this->oUserCurrent->getId() . '_' . $oUser->getId(); $sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.talk.encrypt')))); $aPath = array('accept' => R::GetPath('profile') . 'friendoffer/accept/?code=' . $sCode, 'reject' => R::GetPath('profile') . 'friendoffer/reject/?code=' . $sCode); $sText = E::ModuleLang()->Get('user_friend_offer_text', array('login' => $this->oUserCurrent->getLogin(), 'accept_path' => $aPath['accept'], 'reject_path' => $aPath['reject'], 'user_text' => $sUserText)); $oTalk = E::ModuleTalk()->SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false); /** * Отправляем пользователю заявку */ E::ModuleNotify()->SendUserFriendNew($oUser, $this->oUserCurrent, $sUserText, R::GetPath('talk') . 'read/' . $oTalk->getId() . '/'); /** * Удаляем отправляющего юзера из переписки */ E::ModuleTalk()->DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId()); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); } /** * Подписываем запрашивающего дружбу на */ E::ModuleStream()->SubscribeUser($this->oUserCurrent->getId(), $oUser->getId()); $oViewerLocal = $this->GetViewerLocal(); $oViewerLocal->Assign('oUserFriend', $oFriendNew); E::ModuleViewer()->AssignAjax('sToggleText', $oViewerLocal->Fetch('actions/profile/action.profile.friend_item.tpl')); }