Пример #1
0
 /**
  * Подготовка запроса на поиск
  *
  * @return array
  */
 protected function PrepareRequest()
 {
     $aReq['q'] = F::GetRequestStr('q');
     if (!F::CheckVal($aReq['q'], 'text', 2, 255)) {
         /*
          * Если запрос слишком короткий перенаправляем на начальную страницу поиска
          * Хотя тут лучше показывать юзеру в чем он виноват
          */
         Router::Location(Router::GetPath('search'));
     }
     $aReq['sType'] = strtolower(Router::GetActionEvent());
     // * Определяем текущую страницу вывода результата
     $aReq['iPage'] = intval(preg_replace('#^page([1-9]\\d{0,5})$#', '\\1', $this->getParam(0)));
     if (!$aReq['iPage']) {
         $aReq['iPage'] = 1;
     }
     // *  Передача данных в шаблонизатор
     E::ModuleViewer()->Assign('aReq', $aReq);
     return $aReq;
 }
Пример #2
0
 /**
  * Обработка кода приглашения при включеном режиме инвайтов
  *
  */
 protected function EventInvite()
 {
     if (!Config::Get('general.reg.invite')) {
         return parent::EventNotFound();
     }
     //  Обработка отправки формы с кодом приглашения
     if (F::isPost('submit_invite')) {
         //  проверяем код приглашения на валидность
         if ($this->CheckInviteRegister()) {
             $sInviteCode = $this->GetInviteRegister();
         } else {
             $sInviteCode = trim(F::GetRequestStr('invite_code'));
         }
         $oInvite = E::ModuleUser()->GetInviteByCode($sInviteCode);
         if ($oInvite) {
             if (!$this->CheckInviteRegister()) {
                 E::ModuleSession()->Set('invite_code', $oInvite->getCode());
             }
             return R::Action('registration');
         } else {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('registration_invite_code_error'), E::ModuleLang()->Get('error'));
         }
     }
 }
Пример #3
0
 /**
  * Удаление/восстановление комментария
  *
  */
 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);
 }
Пример #4
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');
 }
Пример #5
0
 /**
  * Отписка от пользователя
  *
  */
 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'));
 }
Пример #6
0
 /**
  * Проверка поля пользователя на корректность из реквеста
  *
  * @return bool
  */
 public function checkUserField()
 {
     if (!F::GetRequestStr('title')) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('user_field_error_add_no_title'), E::ModuleLang()->Get('error'));
         return false;
     }
     if (!F::GetRequestStr('name')) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('user_field_error_add_no_name'), E::ModuleLang()->Get('error'));
         return false;
     }
     /**
      * Не допускаем дубликатов по имени
      */
     if (E::ModuleUser()->UserFieldExistsByName(F::GetRequestStr('name'), F::GetRequestStr('id'))) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('user_field_error_name_exists'), E::ModuleLang()->Get('error'));
         return false;
     }
     return true;
 }
Пример #7
0
 /**
  * Обработка основного события
  *
  */
 public function EventIndex()
 {
     $sEvent = R::GetActionEvent();
     if ((!$sEvent || $sEvent == 'index') && F::GetRequestStr('q', null, 'get')) {
         $sEvent = 'topics';
     }
     if ($sEvent == 'comments') {
         return $this->EventComments();
     } elseif ($sEvent == 'blogs') {
         return $this->EventBlogs();
     } elseif ($sEvent == 'topics') {
         return $this->EventTopics();
     } else {
         $this->SetTemplateAction('index');
     }
 }
Пример #8
0
function getRequestPostStr($sName, $default = null)
{
    return F::GetRequestStr($sName, $default, 'post');
}
Пример #9
0
 /**
  * Verifies security key from argument or from request
  *
  * @param   string|null $sKey  - Security key for verifying. If it is ommited then it extracts from request
  *
  * @return  bool
  */
 public function ValidateSecurityKey($sKey = null)
 {
     if (!$sKey) {
         if (isset($_SERVER['HTTP_X_ALTO_AJAX_KEY'])) {
             $sKey = (string) $_SERVER['HTTP_X_ALTO_AJAX_KEY'];
         } else {
             if (!($sKey = F::GetRequestStr('security_key'))) {
                 // LS-compatibility
                 $sKey = F::GetRequestStr('security_ls_key');
             }
         }
     }
     return $sKey == $this->GetSecurityKey();
 }
Пример #10
0
 /**
  * Старт сессии
  *
  */
 protected function Start()
 {
     if ($this->bUseStandartSession) {
         $sSysSessionName = Config::Get('sys.session.name');
         session_name($sSysSessionName);
         session_set_cookie_params(Config::Get('sys.session.timeout'), Config::Get('sys.session.path'), Config::Get('sys.session.host'));
         if (!session_id()) {
             // * Попытка подменить идентификатор имени сессии через куку
             if (isset($_COOKIE[$sSysSessionName])) {
                 if (!is_string($_COOKIE[$sSysSessionName])) {
                     $this->DelCookie($sSysSessionName . '[]');
                     $this->DelCookie($sSysSessionName);
                 } elseif (!preg_match('/^[\\-\\,a-zA-Z0-9]{1,128}$/', $_COOKIE[$sSysSessionName])) {
                     $this->DelCookie($sSysSessionName);
                 }
             }
             // * Попытка подменить идентификатор имени сессии в реквесте
             $aRequest = array_merge($_GET, $_POST);
             // Исключаем попадаение $_COOKIE в реквест
             if (@ini_get('session.use_only_cookies') === '0' && isset($aRequest[$sSysSessionName]) && !is_string($aRequest[$sSysSessionName])) {
                 session_name($this->GenerateId());
             }
             // * Даем возможность флешу задавать id сессии
             $sSSID = F::GetRequestStr('SSID');
             if ($sSSID && $this->_validFlashAgent() && preg_match('/^[\\w]{5,40}$/', $sSSID)) {
                 session_id($sSSID);
                 session_start();
             } else {
                 // wrong session ID, regenerates it
                 session_regenerate_id();
                 session_start();
             }
         }
     } else {
         $this->SetId();
         $this->ReadData();
     }
 }
Пример #11
0
 /**
  * Изменение состояния подписки
  */
 protected function EventAjaxTrackToggle()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     E::ModuleViewer()->SetResponseAjax('json');
     if (!$this->oUserCurrent) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     /**
      * Получаем тип объекта подписки
      */
     $sTargetType = F::GetRequestStr('target_type');
     if (!E::ModuleSubscribe()->IsAllowTargetType($sTargetType)) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     $sTargetId = F::GetRequestStr('target_id') ? F::GetRequestStr('target_id') : null;
     $iValue = F::GetRequest('value') ? 1 : 0;
     $oTrack = null;
     /**
      * Проверка объекта подписки
      */
     if (!E::ModuleSubscribe()->CheckTarget($sTargetType, $sTargetId, $iValue)) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     /**
      * Если подписка еще не существовала, то создаем её
      */
     if ($oTrack = E::ModuleSubscribe()->AddTrackSimple($sTargetType, $sTargetId, $this->oUserCurrent->getId())) {
         $oTrack->setStatus($iValue);
         E::ModuleSubscribe()->UpdateTrack($oTrack);
         E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('subscribe_change_ok'), E::ModuleLang()->Get('attention'));
         return;
     }
     E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
     return;
 }
Пример #12
0
 /**
  * Отписка от блога или пользователя
  *
  */
 protected function EventUnsubscribe()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     if (!F::GetRequest('id')) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     $sType = F::GetRequestStr('type');
     $iType = null;
     // * Определяем от чего отписываемся
     switch ($sType) {
         case 'blogs':
         case 'blog':
             $iType = ModuleUserfeed::SUBSCRIBE_TYPE_BLOG;
             break;
         case 'users':
         case 'user':
             $iType = ModuleUserfeed::SUBSCRIBE_TYPE_USER;
             break;
         default:
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             return;
     }
     // * Отписываем пользователя
     E::ModuleUserfeed()->UnsubscribeUser($this->oUserCurrent->getId(), $iType, F::GetRequestStr('id'));
     E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('userfeed_subscribes_updated'), E::ModuleLang()->Get('attention'));
 }
Пример #13
0
 /**
  * Возвращает html-код фотосета
  *
  * @param array $aData
  *
  * @return bool|string
  */
 public function SnippetPhotoset($aData)
 {
     // Попытаемся определить откуда вызывается сниппет фотосета
     // поскольку нужно точно определить целевой объект и его ид
     // Редактируется топик.
     // Получим его ид. и по нему поднимем необходимый фотосет
     $aAdminMatches = array();
     $sControllerPath = R::GetControllerPath();
     if ($sControllerPath === 'ajax/preview/topic/' && F::isPost('topic_id')) {
         $iTopicId = (int) F::GetRequestStr('topic_id');
     } elseif (preg_match('~content\\/edit\\/(\\d+)\\/~', $sControllerPath, $aMatches) || preg_match('~admin\\/content-pages\\/edit\\/(\\d+)\\/~', $sControllerPath, $aAdminMatches)) {
         // Найдем топик, из которого будем брать фотосет
         $iTopicId = !empty($aData['params']['topic']) ? (int) $aData['params']['topic'] : ($aAdminMatches ? false : $aMatches[1]);
     } else {
         $iTopicId = 0;
     }
     if ($iTopicId) {
         // Странно, но топик не нашли - завернём сниппет
         if (!($oTopic = E::ModuleTopic()->GetTopicById($iTopicId))) {
             return FALSE;
         }
         // Проверим, можно ли пользователю читать этот топик, а то вдруг
         // он запросил картинки из топика закрытого блога - а так нельзя
         if (!E::ModuleACL()->IsAllowShowBlog($oTopic->getBlog(), E::User())) {
             return FALSE;
         }
         // Попытаемся найти фотосет
         /** @var ModuleMresource_EntityMresource[] $aPhotoset */
         $aPhotoset = E::ModuleMresource()->GetMresourcesRelByTarget('photoset', $oTopic->getId());
         if (empty($aPhotoset)) {
             return FALSE;
         }
         // Фотосет нашли, теперь из него нужно выбрать только те фото,
         // которые выбрал пользователь в параметрах from и to
         $iFrom = isset($aData['params']['from']) ? $aData['params']['from'] : 0;
         $iFrom = (int) str_replace(array('last', 'first'), array(count($aPhotoset), 0), $iFrom);
         // Пользователи считают картинки с первой, а не с нулевой
         if ($iFrom) {
             $iFrom -= 1;
         }
         // Если указано количество, то правый предел игнорируем
         if ($iCount = (int) isset($aData['params']['count']) ? $aData['params']['count'] : FALSE) {
             $iTo = $iFrom + $iCount - 1;
         } else {
             $iTo = isset($aData['params']['to']) ? $aData['params']['to'] : count($aPhotoset);
             $iTo = (int) str_replace(array('last', 'first'), array(count($aPhotoset), 0), $iTo);
             if ($iTo) {
                 $iTo -= 1;
             }
         }
         // Пользователь ошибочно указал диапазон. выдумывать ничего не будем,
         // просто не выведем фотосет
         if ($iTo - $iFrom < 0) {
             return FALSE;
         }
         // Сбросим ключи набора фото, так лучше считать диапазон
         $aPhotoset = array_values($aPhotoset);
         $aPhotos = array();
         for ($i = $iFrom; $i <= $iTo; $i++) {
             if (isset($aPhotoset[$i])) {
                 $oPhoto = $aPhotoset[$i];
                 $aPhotos[$oPhoto->getMresourceId()] = $oPhoto;
             }
         }
         if (!$aPhotos) {
             return FALSE;
         }
         $sPosition = isset($aData['params']['position']) ? $aData['params']['position'] : 'center';
         if (!in_array($sPosition, array('left', 'right'))) {
             $sPosition = 'center';
         }
         // Получим html-код сниппета
         $aVars = array('oTopic' => $oTopic, 'aPhotos' => $aPhotos, 'sPosition' => $sPosition, 'sPhotosetHash' => md5(serialize($aData['params'])));
         $aData['result'] = trim(E::ModuleViewer()->Fetch('tpls/snippets/snippet.photoset.tpl', $aVars));
         return $aData['result'];
     }
     return FALSE;
 }
 protected function _updateBlog($oBlog)
 {
     $sSubtitle = E::ModuleText()->Parser(F::GetRequestStr('blog_subtitle'));
     $oBlog->setSubtitle($sSubtitle);
     return parent::_updateBlog($oBlog);
 }
Пример #15
0
 /**
  * Вывод обсуждаемых топиков
  */
 protected function EventDiscussed()
 {
     $this->sTopicFilterPeriod = 1;
     // по дефолту 1 день
     if (in_array(F::GetRequestStr('period'), array(1, 7, 30, 'all'))) {
         $this->sTopicFilterPeriod = F::GetRequestStr('period');
     }
     /**
      * Меню
      */
     $this->sTopicFilter = $this->sMenuSubItemSelect = 'discussed';
     /**
      * Передан ли номер страницы
      */
     $iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
     if ($iPage == 1 && !F::GetRequest('period')) {
         E::ModuleViewer()->SetHtmlCanonical(R::GetPath('index') . 'discussed/');
     }
     /**
      * Получаем список топиков
      */
     $aResult = E::ModuleTopic()->GetTopicsDiscussed($iPage, Config::Get('module.topic.per_page'), $this->sTopicFilterPeriod == 'all' ? null : $this->sTopicFilterPeriod * 60 * 60 * 24);
     /**
      * Если нет топиков за 1 день, то показываем за неделю (7)
      */
     if (!$aResult['count'] && $iPage == 1 && !F::GetRequest('period')) {
         $this->sTopicFilterPeriod = 7;
         $aResult = E::ModuleTopic()->GetTopicsDiscussed($iPage, Config::Get('module.topic.per_page'), $this->sTopicFilterPeriod == 'all' ? null : $this->sTopicFilterPeriod * 60 * 60 * 24);
     }
     $aTopics = $aResult['collection'];
     /**
      * Вызов хуков
      */
     E::ModuleHook()->Run('topics_list_show', array('aTopics' => $aTopics));
     /**
      * Формируем постраничность
      */
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), R::GetPath('index') . 'discussed', array('period' => $this->sTopicFilterPeriod));
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('blog_menu_collective_discussed') . ($iPage > 1 ? ' (' . $iPage . ')' : ''));
     /**
      * Загружаем переменные в шаблон
      */
     E::ModuleViewer()->Assign('aTopics', $aTopics);
     E::ModuleViewer()->Assign('aPaging', $aPaging);
     E::ModuleViewer()->Assign('sPeriodSelectCurrent', $this->sTopicFilterPeriod);
     E::ModuleViewer()->Assign('sPeriodSelectRoot', R::GetPath('index') . 'discussed/');
     /**
      * Устанавливаем шаблон вывода
      */
     $this->SetTemplateAction('index');
 }
Пример #16
0
 /**
  * Парсим URL
  * Пример: http://site.ru/action/event/param1/param2/  на выходе получим:
  *    static::$sAction='action';
  *    static::$sActionEvent='event';
  *    static::$aParams=array('param1','param2');
  *
  */
 protected function ParseUrl()
 {
     $sReq = $this->GetRequestUri();
     $aRequestUrl = $this->GetRequestArray($sReq);
     // Список доступных языков, которые могут быть указаны в URL
     $aLangs = array();
     // Только для мультиязычных сайтов
     if (Config::Get('lang.multilang')) {
         // Получаем список доступных языков
         $aLangs = (array) Config::Get('lang.allow');
         // Проверка языка в URL
         if ($aRequestUrl && $aLangs && Config::Get('lang.in_url')) {
             if (sizeof($aLangs) && sizeof($aRequestUrl) && in_array($aRequestUrl[0], $aLangs)) {
                 static::$sLang = array_shift($aRequestUrl);
             }
         }
     }
     static::$aRequestURI = $aRequestUrl = $this->RewriteRequest($aRequestUrl);
     static::$sAction = array_shift($aRequestUrl);
     static::$sActionEvent = array_shift($aRequestUrl);
     static::$aParams = $aRequestUrl;
     // Только для мультиязычных сайтов
     if (Config::Get('lang.multilang')) {
         // Проверка языка в GET-параметрах
         if ($aLangs && Config::Get('lang.in_get')) {
             $sLangParam = is_string(Config::Get('lang.in_get')) ? Config::Get('lang.in_get') : 'lang';
             $sLang = F::GetRequestStr($sLangParam, null, 'get');
             if ($sLang) {
                 static::$sLang = $sLang;
             }
         }
     }
     $this->aCurrentUrl = parse_url(static::$sCurrentFullUrl);
     $this->aCurrentUrl['protocol'] = F::UrlScheme();
     if (!isset($this->aCurrentUrl['scheme']) && $this->aCurrentUrl['protocol']) {
         $this->aCurrentUrl['scheme'] = $this->aCurrentUrl['protocol'];
     }
     $iPathOffset = intval(C::Get('path.offset_request_url'));
     $aUrlParts = F::ParseUrl();
     $sBase = !empty($aUrlParts['base']) ? $aUrlParts['base'] : null;
     if ($sBase && $iPathOffset) {
         $aPath = explode('/', trim($aUrlParts['path'], '/'));
         $iPathOffset = min($iPathOffset, sizeof($aPath));
         for ($i = 0; $i < $iPathOffset; $i++) {
             $sBase .= '/' . $aPath[$i];
         }
     }
     $this->aCurrentUrl['root'] = F::File_RootUrl();
     $this->aCurrentUrl['base'] = $sBase . '/';
     $this->aCurrentUrl['lang'] = static::$sLang;
     $this->aCurrentUrl['action'] = static::$sAction;
     $this->aCurrentUrl['event'] = static::$sActionEvent;
     $this->aCurrentUrl['params'] = implode('/', static::$aParams);
 }
Пример #17
0
 /**
  * Добавление нового участника разговора (ajax)
  *
  */
 public function AjaxAddTalkUser()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     $sUsers = F::GetRequestStr('users', null, 'post');
     $idTalk = F::GetRequestStr('idTalk', null, 'post');
     // * Если пользователь не авторизирован, возвращаем ошибку
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Если разговор не найден, или пользователь не является его автором (или админом), возвращаем ошибку
     if (!($oTalk = E::ModuleTalk()->GetTalkById($idTalk)) || $oTalk->getUserId() != $this->oUserCurrent->getId() && !$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('talk_not_found'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Получаем список всех участников разговора
     $aTalkUsers = $oTalk->getTalkUsers();
     $aUsers = explode(',', $sUsers);
     // * Получаем список пользователей, которые не принимают письма
     $aUserInBlacklist = E::ModuleTalk()->GetBlacklistByTargetId($this->oUserCurrent->getId());
     // * Ограничения на максимальное число участников разговора
     if (count($aTalkUsers) >= Config::Get('module.talk.max_users') && !$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_create_users_error_many'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Обрабатываем добавление по каждому переданному логину пользователя
     foreach ($aUsers as $sUser) {
         $sUser = trim($sUser);
         if ($sUser == '') {
             continue;
         }
         // * Попытка добавить себя
         if (strtolower($sUser) == strtolower($this->oUserCurrent->getLogin())) {
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_self'));
             continue;
         }
         if (($oUser = E::ModuleUser()->GetUserByLogin($sUser)) && $oUser->getActivate() == 1) {
             if (!in_array($oUser->getId(), $aUserInBlacklist)) {
                 if (array_key_exists($oUser->getId(), $aTalkUsers)) {
                     switch ($aTalkUsers[$oUser->getId()]->getUserActive()) {
                         // * Если пользователь ранее был удален админом разговора, то добавляем его снова
                         case ModuleTalk::TALK_USER_DELETE_BY_AUTHOR:
                             if (E::ModuleTalk()->AddTalkUser(E::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                                 E::ModuleNotify()->SendTalkNew($oUser, $this->oUserCurrent, $oTalk);
                                 $aResult[] = array('bStateError' => false, 'sMsgTitle' => E::ModuleLang()->Get('attention'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_ok', array('login', htmlspecialchars($sUser))), 'sUserId' => $oUser->getId(), 'sUserLogin' => $oUser->getLogin(), 'sUserLink' => $oUser->getUserWebPath(), 'sUserWebPath' => $oUser->getUserWebPath(), 'sUserAvatar48' => $oUser->getAvatarUrl(48));
                                 $bState = true;
                             } else {
                                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                             }
                             break;
                             // * Если пользователь является активным участником разговора, возвращаем ошибку
                         // * Если пользователь является активным участником разговора, возвращаем ошибку
                         case ModuleTalk::TALK_USER_ACTIVE:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_user_already_exist', array('login' => htmlspecialchars($sUser))));
                             break;
                             // * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                         // * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                         case ModuleTalk::TALK_USER_DELETE_BY_SELF:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_delete_by_self', array('login' => htmlspecialchars($sUser))));
                             break;
                         default:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                     }
                 } elseif (E::ModuleTalk()->AddTalkUser(E::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                     E::ModuleNotify()->SendTalkNew($oUser, $this->oUserCurrent, $oTalk);
                     $aResult[] = array('bStateError' => false, 'sMsgTitle' => E::ModuleLang()->Get('attention'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_ok', array('login', htmlspecialchars($sUser))), 'sUserId' => $oUser->getId(), 'sUserLogin' => $oUser->getLogin(), 'sUserLink' => $oUser->getUserWebPath(), 'sUserWebPath' => $oUser->getUserWebPath(), 'sUserAvatar48' => $oUser->getAvatarUrl(48));
                     $bState = true;
                 } else {
                     $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                 }
             } else {
                 // * Добавляем пользователь не принимает сообщения
                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_user_in_blacklist', array('login' => htmlspecialchars($sUser))));
             }
         } else {
             // * Пользователь не найден в базе данных или не активен
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('user_not_found', array('login' => htmlspecialchars($sUser))));
         }
     }
     // * Передаем во вьевер массив результатов обработки по каждому пользователю
     E::ModuleViewer()->AssignAjax('aUsers', $aResult);
 }
Пример #18
0
 /**
  * Показываем юзеров
  *
  */
 protected function EventIndex()
 {
     // Получаем статистику
     $this->GetStats();
     // По какому полю сортировать
     $sOrder = 'user_rating';
     if (F::GetRequest('order')) {
         $sOrder = F::GetRequestStr('order');
     }
     // В каком направлении сортировать
     $sOrderWay = 'desc';
     if (F::GetRequest('order_way')) {
         $sOrderWay = F::GetRequestStr('order_way');
     }
     $aFilter = array('activate' => 1);
     // Передан ли номер страницы
     $iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
     // Получаем список юзеров
     $aResult = E::ModuleUser()->GetUsersByFilter($aFilter, array($sOrder => $sOrderWay), $iPage, Config::Get('module.user.per_page'));
     $aUsers = $aResult['collection'];
     // Формируем постраничность
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.user.per_page'), Config::Get('pagination.pages.count'), R::GetPath('people') . 'index', array('order' => $sOrder, 'order_way' => $sOrderWay));
     // Получаем алфавитный указатель на список пользователей
     $aPrefixUser = E::ModuleUser()->GetGroupPrefixUser(1);
     // Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('aPaging', $aPaging);
     E::ModuleViewer()->Assign('aUsersRating', $aUsers);
     E::ModuleViewer()->Assign('aPrefixUser', $aPrefixUser);
     E::ModuleViewer()->Assign("sUsersOrder", htmlspecialchars($sOrder));
     E::ModuleViewer()->Assign("sUsersOrderWay", htmlspecialchars($sOrderWay));
     E::ModuleViewer()->Assign("sUsersOrderWayNext", htmlspecialchars($sOrderWay == 'desc' ? 'asc' : 'desc'));
     // Устанавливаем шаблон вывода
     $this->SetTemplateAction('index');
 }
Пример #19
0
 /**
  * Удаление картинки
  */
 public function EventDescription()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     // Проверяем, целевой объект и права на его редактирование
     if (!($oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTargetType = F::GetRequest('target', FALSE), $sTargetId = F::GetRequest('target_id', FALSE)))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
         return;
     }
     if (!($sResourceId = F::GetRequest('resource_id', FALSE))) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
         return;
     }
     /** @var ModuleMresource_EntityMresource $oResource */
     if (!($oResource = E::ModuleMresource()->GetMresourceById($sResourceId))) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
         return;
     }
     $oResource->setDescription(F::GetRequestStr('description', ''));
     E::ModuleMresource()->UpdateParams($oResource);
     E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('topic_photoset_description_done'));
 }
Пример #20
0
 /**
  * AJAX подгрузка следующих фото
  *
  */
 protected function EventAjaxPhotoGetMore()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     // * Существует ли топик
     $iTopicId = F::GetRequestStr('topic_id');
     $iLastId = F::GetRequest('last_id');
     $sThumbSize = F::GetRequest('thumb_size');
     if (!$sThumbSize) {
         $sThumbSize = '50crop';
     }
     if (!$iTopicId || !($oTopic = E::ModuleTopic()->GetTopicById($iTopicId)) || !$iLastId) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         F::SysWarning('System Error');
         return;
     }
     // * Получаем список фото
     $aPhotos = $oTopic->getPhotosetPhotos($iLastId, Config::Get('module.topic.photoset.per_page'));
     $aResult = array();
     if (count($aPhotos)) {
         // * Формируем данные для ajax ответа
         foreach ($aPhotos as $oPhoto) {
             $aResult[] = array('id' => $oPhoto->getMresourceId(), 'path_thumb' => $oPhoto->getLink($sThumbSize), 'path' => $oPhoto->getLink(), 'description' => $oPhoto->getDescription());
         }
         E::ModuleViewer()->AssignAjax('photos', $aResult);
     }
     E::ModuleViewer()->AssignAjax('bHaveNext', count($aPhotos) == Config::Get('module.topic.photoset.per_page'));
 }
Пример #21
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;
 }
Пример #22
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;
     }
 }
Пример #23
0
 protected function _eventRecovery($bAjax = false)
 {
     if ($this->IsPost()) {
         // Was POST request
         $sEmail = F::GetRequestStr('mail');
         // Пользователь с таким емайлом существует?
         if ($sEmail && F::CheckVal($sEmail, 'mail')) {
             if ($this->_eventRecoveryRequest($sEmail)) {
                 if (!$bAjax) {
                     E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('password_reminder_send_link'));
                 }
                 return;
             }
         }
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('password_reminder_bad_email'), E::ModuleLang()->Get('error'));
     } elseif ($sRecoveryCode = $this->GetParam(0)) {
         // Was recovery code in GET
         if (F::CheckVal($sRecoveryCode, 'md5')) {
             // Проверка кода подтверждения
             if ($this->_eventRecoverySend($sRecoveryCode)) {
                 return null;
             }
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('password_reminder_bad_code_txt'), E::ModuleLang()->Get('password_reminder_bad_code'));
             if (!$bAjax) {
                 return R::Action('error');
             }
             return;
         }
     }
 }
Пример #24
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;
     }
 }