Esempio n. 1
0
 /**
  * @param int $iPageNum
  * @param int $iPageSize
  *
  * @return array
  */
 public function getList($iPageNum, $iPageSize)
 {
     $aFilter = array('user_id' => E::UserId());
     $aTalks = E::ModuleTalk()->GetTalksByFilter($aFilter, $iPageNum, $iPageSize);
     $aResult = array('total' => $aTalks['count'], 'list' => array());
     /** @var PluginAltoApi_ModuleApiTalks_EntityTalk $oTalk */
     foreach ($aTalks['collection'] as $oTalk) {
         $aResult['list'][] = $oTalk->getApiData();
     }
     return $aResult;
 }
Esempio n. 2
0
 /**
  * Вызывается по строке "new_talk"
  * @param bool $sTemplate
  * @return bool
  */
 public function NewTalk($sTemplate = false)
 {
     $sKeyString = 'menu_new_talk_' . E::UserId() . '_' . (string) $sTemplate;
     if (FALSE === ($sData = E::ModuleCache()->GetTmp($sKeyString))) {
         $iValue = (int) E::ModuleTalk()->GetCountTalkNew(E::UserId());
         if ($sTemplate && $iValue) {
             $sData = str_replace('{{new_talk_count}}', $iValue, $sTemplate);
         } else {
             $sData = $iValue ? $iValue : '';
         }
         E::ModuleCache()->SetTmp($sData, $sKeyString);
     }
     return $sData;
 }
Esempio n. 3
0
 /**
  * При завершенни модуля загружаем в шалон объект текущего юзера
  *
  */
 public function Shutdown()
 {
     if ($this->oUserCurrent) {
         E::ModuleViewer()->Assign('iUserCurrentCountTrack', E::ModuleUserfeed()->GetCountTrackNew($this->oUserCurrent->getId()));
         E::ModuleViewer()->Assign('iUserCurrentCountTalkNew', E::ModuleTalk()->GetCountTalkNew($this->oUserCurrent->getId()));
         E::ModuleViewer()->Assign('iUserCurrentCountTopicDraft', E::ModuleTopic()->GetCountDraftTopicsByUserId($this->oUserCurrent->getId()));
     }
     E::ModuleViewer()->Assign('oUserCurrent', $this->oUserCurrent);
     E::ModuleViewer()->Assign('aContentTypes', E::ModuleTopic()->GetContentTypes(array('content_active' => 1)));
     if ($this->oUserCurrent) {
         E::ModuleViewer()->Assign('aAllowedContentTypes', E::ModuleTopic()->GetAllowContentTypeByUserId($this->oUserCurrent));
     }
 }
Esempio n. 4
0
 protected function _eventUsersCmdMessageSeparate()
 {
     $bOk = true;
     $sTitle = F::GetRequest('talk_title');
     $sText = E::ModuleText()->Parser(F::GetRequest('talk_text'));
     $sDate = date(F::Now());
     $sIp = F::GetUserIp();
     if ($sUsers = $this->GetPost('users_list')) {
         $aUsers = explode(',', str_replace(' ', '', $sUsers));
     } else {
         $aUsers = array();
     }
     if ($aUsers) {
         // Если указано, то шлем самому себе со списком получателей
         if (F::GetRequest('send_copy_self')) {
             $oSelfTalk = E::GetEntity('Talk_Talk');
             $oSelfTalk->setUserId($this->oUserCurrent->getId());
             $oSelfTalk->setUserIdLast($this->oUserCurrent->getId());
             $oSelfTalk->setTitle($sTitle);
             $oSelfTalk->setText(E::ModuleText()->Parser('To: <i>' . $sUsers . '</i>' . "\n\n" . 'Msg: ' . $this->GetPost('talk_text')));
             $oSelfTalk->setDate($sDate);
             $oSelfTalk->setDateLast($sDate);
             $oSelfTalk->setUserIp($sIp);
             if ($oSelfTalk = E::ModuleTalk()->AddTalk($oSelfTalk)) {
                 $oTalkUser = E::GetEntity('Talk_TalkUser');
                 $oTalkUser->setTalkId($oSelfTalk->getId());
                 $oTalkUser->setUserId($this->oUserCurrent->getId());
                 $oTalkUser->setDateLast($sDate);
                 E::ModuleTalk()->AddTalkUser($oTalkUser);
                 // уведомление по e-mail
                 $oUserToMail = $this->oUserCurrent;
                 E::ModuleNotify()->SendTalkNew($oUserToMail, $this->oUserCurrent, $oSelfTalk);
             } else {
                 $bOk = false;
             }
         }
         if ($bOk) {
             // теперь рассылаем остальным - каждому отдельное сообщение
             foreach ($aUsers as $sUserLogin) {
                 if ($sUserLogin && $sUserLogin != $this->oUserCurrent->getLogin() && ($oUserRecipient = E::ModuleUser()->GetUserByLogin($sUserLogin))) {
                     $oTalk = E::GetEntity('Talk_Talk');
                     $oTalk->setUserId($this->oUserCurrent->getId());
                     $oTalk->setUserIdLast($this->oUserCurrent->getId());
                     $oTalk->setTitle($sTitle);
                     $oTalk->setText($sText);
                     $oTalk->setDate($sDate);
                     $oTalk->setDateLast($sDate);
                     $oTalk->setUserIp($sIp);
                     if ($oTalk = E::ModuleTalk()->AddTalk($oTalk)) {
                         $oTalkUser = E::GetEntity('Talk_TalkUser');
                         $oTalkUser->setTalkId($oTalk->getId());
                         $oTalkUser->setUserId($oUserRecipient->GetId());
                         $oTalkUser->setDateLast(null);
                         E::ModuleTalk()->AddTalkUser($oTalkUser);
                         // Отправка самому себе, чтобы можно было читать ответ
                         $oTalkUser = E::GetEntity('Talk_TalkUser');
                         $oTalkUser->setTalkId($oTalk->getId());
                         $oTalkUser->setUserId($this->oUserCurrent->getId());
                         $oTalkUser->setDateLast($sDate);
                         E::ModuleTalk()->AddTalkUser($oTalkUser);
                         // Отправляем уведомления
                         $oUserToMail = E::ModuleUser()->GetUserById($oUserRecipient->GetId());
                         E::ModuleNotify()->SendTalkNew($oUserToMail, $this->oUserCurrent, $oTalk);
                     } else {
                         $bOk = false;
                         break;
                     }
                 }
             }
         }
     }
     if ($bOk) {
         E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.msg_sent_ok'), null, true);
     } else {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), null, true);
     }
 }
Esempio n. 5
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. 6
0
 /**
  * Получает топики пользователя с картинками
  *
  * @param int $iUserId
  * @param int $iPage
  * @param int $iPerPage
  *
  * @return array
  */
 public function GetTalksPage($iUserId, $iPage, $iPerPage)
 {
     $iCount = 0;
     $aResult = array('collection' => array(), 'count' => 0);
     $aTalkInfo = $this->oMapper->GetTalkInfo($iUserId, $iCount, $iPage, $iPerPage);
     if ($aTalkInfo) {
         $aTalks = E::ModuleTalk()->GetTalksAdditionalData(array_keys($aTalkInfo));
         if ($aTalks) {
             foreach ($aTalks as $sTopicId => $oTopic) {
                 $oTopic->setImagesCount($aTalkInfo[$sTopicId]);
                 $aTalks[$sTopicId] = $oTopic;
             }
         }
         $aResult['collection'] = $aTalks;
         $aResult['count'] = $iCount;
     }
     return $aResult;
 }
Esempio n. 7
0
 /**
  * Проверяет может ли пользователь отправить инбокс по времени
  *
  * @param  ModuleUser_EntityUser $oUser    Пользователь
  *
  * @return bool
  */
 public function CanSendTalkTime(ModuleUser_EntityUser $oUser)
 {
     if (!$oUser) {
         return false;
     }
     // Для администраторов ограничение по времени не действует
     if ($oUser->isAdministrator() || $oUser->isModerator() || Config::Get('acl.create.talk.limit_time') == 0 || $oUser->getRating() >= Config::Get('acl.create.talk.limit_time_rating')) {
         return true;
     }
     // * Проверяем, если топик опубликованный меньше чем acl.create.topic.limit_time секунд назад
     $aTalks = E::ModuleTalk()->GetLastTalksByUserId($oUser->getId(), Config::Get('acl.create.talk.limit_time'));
     if (isset($aTalks['count']) && $aTalks['count'] > 0) {
         return false;
     }
     return true;
 }
Esempio n. 8
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. 9
0
 /**
  * Обработка избранного - личное сообщение
  *
  */
 protected function EventFavouriteTalk()
 {
     // * Пользователь авторизован?
     if (!$this->oUserCurrent) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Можно только добавить или удалить из избранного
     $iType = F::GetRequestStr('type', null, 'post');
     if (!in_array($iType, array('1', '0'))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     // *    Сообщение существует?
     if (!($oTalk = E::ModuleTalk()->GetTalkById(F::GetRequestStr('idTalk', null, 'post')))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Сообщение уже в избранном?
     $oFavouriteTalk = E::ModuleTalk()->GetFavouriteTalk($oTalk->getId(), $this->oUserCurrent->getId());
     if (!$oFavouriteTalk && $iType) {
         $oFavouriteTalkNew = E::GetEntity('Favourite', array('target_id' => $oTalk->getId(), 'target_type' => 'talk', 'user_id' => $this->oUserCurrent->getId(), 'target_publish' => '1'));
         if (E::ModuleTalk()->AddFavouriteTalk($oFavouriteTalkNew)) {
             E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('talk_favourite_add_ok'), E::ModuleLang()->Get('attention'));
             E::ModuleViewer()->AssignAjax('bState', true);
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             return;
         }
     }
     if (!$oFavouriteTalk && !$iType) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('talk_favourite_add_no'), E::ModuleLang()->Get('error'));
         return;
     }
     if ($oFavouriteTalk && $iType) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('talk_favourite_add_already'), E::ModuleLang()->Get('error'));
         return;
     }
     if ($oFavouriteTalk && !$iType) {
         if (E::ModuleTalk()->DeleteFavouriteTalk($oFavouriteTalk)) {
             E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('talk_favourite_del_ok'), E::ModuleLang()->Get('attention'));
             E::ModuleViewer()->AssignAjax('bState', false);
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             return;
         }
     }
 }
Esempio n. 10
0
 /**
  * Проверяет доступность того или иного целевого объекта, переопределяется
  * плагинами. По умолчанию всё грузить запрещено.
  * Если всё нормально и пользователю разрешено сюда загружать картинки,
  * то метод возвращает целевой объект, иначе значение FALSE.
  *
  * @param string $sTarget
  * @param int    $iTargetId
  *
  * @return bool
  */
 public function CheckAccessAndGetTarget($sTarget, $iTargetId = null)
 {
     // Проверяем право пользователя на прикрепление картинок к топику
     if (mb_strpos($sTarget, 'single-image-uploader') === 0 || $sTarget == 'photoset') {
         // Проверям, авторизован ли пользователь
         if (!E::IsUser()) {
             return FALSE;
         }
         // Топик редактируется
         if ($oTopic = E::ModuleTopic()->GetTopicById($iTargetId)) {
             if (!E::ModuleACL()->IsAllowEditTopic($oTopic, E::User())) {
                 return FALSE;
             }
             return $oTopic;
         }
         return TRUE;
     }
     // Загружать аватарки можно только в свой профиль
     if ($sTarget == 'profile_avatar') {
         if ($iTargetId && E::IsUser() && $iTargetId == E::UserId()) {
             return E::User();
         }
         return FALSE;
     }
     // Загружать аватарки можно только в свой профиль
     if ($sTarget == 'profile_photo') {
         if ($iTargetId && E::IsUser() && $iTargetId == E::UserId()) {
             return E::User();
         }
         return FALSE;
     }
     if ($sTarget == 'blog_avatar') {
         /** @var ModuleBlog_EntityBlog $oBlog */
         $oBlog = E::ModuleBlog()->GetBlogById($iTargetId);
         if (!E::IsUser()) {
             return false;
         }
         if (!$oBlog) {
             // Блог еще не создан
             return E::ModuleACL()->CanCreateBlog(E::User()) || E::IsAdminOrModerator();
         }
         if ($oBlog && (E::ModuleACL()->CheckBlogEditBlog($oBlog, E::User()) || E::IsAdminOrModerator())) {
             return $oBlog;
         }
         return '';
     }
     if ($sTarget == 'topic') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleTopic_EntityTopic $oTopic */
         $oTopic = E::ModuleTopic()->GetTopicById($iTargetId);
         if (!$oTopic) {
             // Топик еще не создан
             return TRUE;
         }
         if ($oTopic && (E::ModuleACL()->IsAllowEditTopic($oTopic, E::User()) || E::IsAdminOrModerator())) {
             return $oTopic;
         }
         return '';
     }
     if ($sTarget == 'topic_comment') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleComment_EntityComment $oComment */
         $oComment = E::ModuleComment()->GetCommentById($iTargetId);
         if (!$oComment) {
             // Комментарий еще не создан
             return TRUE;
         }
         if ($oComment && (E::ModuleACL()->CanPostComment(E::User(), $oComment->getTarget()) && E::ModuleAcl()->CanPostCommentTime(E::User()) || E::IsAdminOrModerator())) {
             return $oComment;
         }
         return '';
     }
     if ($sTarget == 'talk_comment') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleComment_EntityComment $oComment */
         $oComment = E::ModuleComment()->GetCommentById($iTargetId);
         if (!$oComment) {
             // Комментарий еще не создан
             return TRUE;
         }
         if ($oComment && (E::ModuleAcl()->CanPostTalkCommentTime(E::User()) || E::IsAdminOrModerator())) {
             return $oComment;
         }
         return '';
     }
     if ($sTarget == 'talk') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleComment_EntityComment $oTalk */
         $oTalk = E::ModuleTalk()->GetTalkById($iTargetId);
         if (!$oTalk) {
             // Комментарий еще не создан
             return TRUE;
         }
         if ($oTalk && (E::ModuleAcl()->CanSendTalkTime(E::User()) || E::IsAdminOrModerator())) {
             return $oTalk;
         }
         return '';
     }
     return FALSE;
 }
Esempio n. 11
0
 /**
  * Выполняет отправку приглашения в блог
  * (по внутренней почте и на email)
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  */
 protected function SendBlogInvite($oBlog, $oUser)
 {
     $sTitle = E::ModuleLang()->Get('blog_user_invite_title', array('blog_title' => $oBlog->getTitle()));
     F::IncludeLib('XXTEA/encrypt.php');
     //  Формируем код подтверждения в URL
     $sCode = $oBlog->getId() . '_' . $oUser->getId();
     $sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.blog.encrypt'))));
     $aPath = array('accept' => R::GetPath('blog') . 'invite/accept/?code=' . $sCode, 'reject' => R::GetPath('blog') . 'invite/reject/?code=' . $sCode);
     // Сформируем название типа блога на языке приложения.
     // Это может быть либо название, либо текстовка.
     $sBlogType = mb_strtolower(preg_match('~^\\{\\{(.*)\\}\\}$~', $sBlogType = $oBlog->getBlogType()->getTypeName(), $aMatches) ? E::ModuleLang()->Get($aMatches[1]) : $sBlogType, 'UTF-8');
     $sText = E::ModuleLang()->Get('blog_user_invite_text', array('login' => $this->oUserCurrent->getLogin(), 'accept_path' => $aPath['accept'], 'reject_path' => $aPath['reject'], 'blog_title' => $oBlog->getTitle(), 'blog_type' => $sBlogType));
     $oTalk = E::ModuleTalk()->SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
     //  Отправляем пользователю заявку
     E::ModuleNotify()->SendBlogUserInvite($oUser, $this->oUserCurrent, $oBlog, R::GetPath('talk') . 'read/' . $oTalk->getId() . '/');
     //  Удаляем отправляющего юзера из переписки
     E::ModuleTalk()->DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
 }
Esempio n. 12
0
 /**
  * Обработка завершения работу экшена
  */
 public function EventShutdown()
 {
     if (!E::User()) {
         return;
     }
     $iCountTalkFavourite = E::ModuleTalk()->GetCountTalksFavouriteByUserId($this->oUserCurrent->getId());
     E::ModuleViewer()->Assign('iCountTalkFavourite', $iCountTalkFavourite);
     $iUserId = E::UserId();
     // Get stats of various user publications topics, comments, images, etc. and stats of favourites
     $aProfileStats = E::ModuleUser()->GetUserProfileStats($iUserId);
     // Получим информацию об изображениях пользователя
     /** @var ModuleMresource_EntityMresourceCategory[] $aUserImagesInfo */
     $aUserImagesInfo = E::ModuleMresource()->GetAllImageCategoriesByUserId($iUserId);
     E::ModuleViewer()->Assign('oUserProfile', E::User());
     E::ModuleViewer()->Assign('aProfileStats', $aProfileStats);
     E::ModuleViewer()->Assign('aUserImagesInfo', $aUserImagesInfo);
     // Old style skin compatibility
     E::ModuleViewer()->Assign('iCountTopicUser', $aProfileStats['count_topics']);
     E::ModuleViewer()->Assign('iCountCommentUser', $aProfileStats['count_comments']);
     E::ModuleViewer()->Assign('iCountTopicFavourite', $aProfileStats['favourite_topics']);
     E::ModuleViewer()->Assign('iCountCommentFavourite', $aProfileStats['favourite_comments']);
     E::ModuleViewer()->Assign('iCountNoteUser', $aProfileStats['count_usernotes']);
     E::ModuleViewer()->Assign('iCountWallUser', $aProfileStats['count_wallrecords']);
     E::ModuleViewer()->Assign('iPhotoCount', $aProfileStats['count_images']);
     E::ModuleViewer()->Assign('iCountCreated', $aProfileStats['count_created']);
     E::ModuleViewer()->Assign('iCountFavourite', $aProfileStats['count_favourites']);
     E::ModuleViewer()->Assign('iCountFriendsUser', $aProfileStats['count_friends']);
     E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     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. 13
0
 /**
  * Удаление пользователя из друзей
  */
 public function EventAjaxFriendDelete()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     E::ModuleViewer()->SetResponseAjax('json');
     $sUserId = F::GetRequestStr('idUser', null, 'post');
     /**
      * Если пользователь не авторизирован, возвращаем ошибку
      */
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oUserCurrent = E::ModuleUser()->GetUserCurrent();
     /**
      * При попытке добавить в друзья себя, возвращаем ошибку
      */
     if ($this->oUserCurrent->getId() == $sUserId) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_add_self'), E::ModuleLang()->Get('error'));
         return;
     }
     /**
      * Если пользователь не найден, возвращаем ошибку
      */
     if (!($oUser = E::ModuleUser()->GetUserById($sUserId))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_del_no'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oUserProfile = $oUser;
     /**
      * Получаем статус дружбы между пользователями.
      * Если статус не определен, или отличается от принятой заявки,
      * возвращаем ошибку
      */
     $oFriend = E::ModuleUser()->GetFriend($oUser->getId(), $this->oUserCurrent->getId());
     $aAllowedFriendStatus = array(ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_OFFER, ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_ACCEPT);
     if (!$oFriend || !in_array($oFriend->getFriendStatus(), $aAllowedFriendStatus)) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_del_no'), E::ModuleLang()->Get('error'));
         return;
     }
     /**
      * Удаляем из друзей
      */
     if (E::ModuleUser()->DeleteFriend($oFriend)) {
         E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('user_friend_del_ok'), E::ModuleLang()->Get('attention'));
         $oViewerLocal = $this->GetViewerLocal();
         $oViewerLocal->Assign('oUserFriend', $oFriend);
         E::ModuleViewer()->AssignAjax('sToggleText', $oViewerLocal->Fetch('actions/profile/action.profile.friend_item.tpl'));
         /**
          * Отправляем пользователю сообщение об удалении дружеской связи
          */
         if (Config::Get('module.user.friend_notice.delete')) {
             $sText = E::ModuleLang()->Get('user_friend_del_notice_text', array('login' => $this->oUserCurrent->getLogin()));
             $oTalk = E::ModuleTalk()->SendTalk(E::ModuleLang()->Get('user_friend_del_notice_title'), $sText, $this->oUserCurrent, array($oUser), false, false);
             E::ModuleTalk()->DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
         }
         return;
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
 }