2009-05-10 10:50:39 +03:00
|
|
|
|
<?php
|
2014-10-08 08:20:29 +03:00
|
|
|
|
/*
|
|
|
|
|
* LiveStreet CMS
|
|
|
|
|
* Copyright © 2013 OOO "ЛС-СОФТ"
|
|
|
|
|
*
|
|
|
|
|
* ------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreetcms.com
|
|
|
|
|
* Contact e-mail: office@livestreetcms.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
* ------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* @link http://www.livestreetcms.com
|
|
|
|
|
* @copyright 2013 OOO "ЛС-СОФТ"
|
|
|
|
|
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
|
|
|
|
*
|
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
|
|
|
|
/**
|
2012-04-29 20:11:53 +03:00
|
|
|
|
* Экшен обработки профайла юзера, т.е. УРЛ вида /profile/login/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
2014-10-08 08:20:29 +03:00
|
|
|
|
* @package application.actions
|
2012-04-29 20:11:53 +03:00
|
|
|
|
* @since 1.0
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2014-10-08 11:49:34 +03:00
|
|
|
|
class ActionProfile extends Action
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Объект юзера чей профиль мы смотрим
|
|
|
|
|
*
|
|
|
|
|
* @var ModuleUser_EntityUser|null
|
|
|
|
|
*/
|
|
|
|
|
protected $oUserProfile;
|
|
|
|
|
/**
|
|
|
|
|
* Главное меню
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
|
|
|
|
protected $sMenuHeadItemSelect = 'people';
|
|
|
|
|
/**
|
|
|
|
|
* Субменю
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
|
|
|
|
protected $sMenuSubItemSelect = '';
|
|
|
|
|
/**
|
|
|
|
|
* Текущий пользователь
|
|
|
|
|
*
|
|
|
|
|
* @var ModuleUser_EntityUser|null
|
|
|
|
|
*/
|
|
|
|
|
protected $oUserCurrent;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализация
|
|
|
|
|
*/
|
|
|
|
|
public function Init()
|
|
|
|
|
{
|
|
|
|
|
$this->oUserCurrent = $this->User_GetUserCurrent();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Регистрация евентов
|
|
|
|
|
*/
|
|
|
|
|
protected function RegisterEvent()
|
|
|
|
|
{
|
|
|
|
|
$this->AddEvent('friendoffer', 'EventFriendOffer');
|
|
|
|
|
|
|
|
|
|
$this->AddEvent('ajaxfriendadd', 'EventAjaxFriendAdd');
|
|
|
|
|
$this->AddEvent('ajaxfrienddelete', 'EventAjaxFriendDelete');
|
|
|
|
|
$this->AddEvent('ajaxfriendaccept', 'EventAjaxFriendAccept');
|
|
|
|
|
$this->AddEvent('ajax-modal-add-friend', 'EventAjaxModalAddFriend');
|
|
|
|
|
|
|
|
|
|
$this->AddEvent('ajax-note-save', 'EventAjaxNoteSave');
|
|
|
|
|
$this->AddEvent('ajax-note-remove', 'EventAjaxNoteRemove');
|
|
|
|
|
|
|
|
|
|
$this->AddEvent('ajax-modal-complaint', 'EventAjaxModalComplaint');
|
|
|
|
|
$this->AddEvent('ajax-complaint-add', 'EventAjaxComplaintAdd');
|
|
|
|
|
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^(whois)?$/i', 'EventWhois');
|
|
|
|
|
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^wall$/i', '/^$/i', 'EventWall');
|
|
|
|
|
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^favourites$/i', '/^comments$/i', '/^(page([1-9]\d{0,5}))?$/i',
|
|
|
|
|
'EventFavouriteComments');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^favourites$/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventFavourite');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^favourites$/i', '/^topics/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventFavourite');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^favourites$/i', '/^topics/i', '/^tag/i', '/^.+/i',
|
|
|
|
|
'/^(page([1-9]\d{0,5}))?$/i', 'EventFavouriteTopicsTag');
|
|
|
|
|
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^created/i', '/^notes/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventCreatedNotes');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^created/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventCreatedTopics');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^created/i', '/^topics/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventCreatedTopics');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^created/i', '/^comments$/i', '/^(page([1-9]\d{0,5}))?$/i',
|
|
|
|
|
'EventCreatedComments');
|
|
|
|
|
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^friends/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventFriends');
|
|
|
|
|
$this->AddEventPreg('/^.+$/i', '/^stream/i', '/^$/i', 'EventStream');
|
|
|
|
|
|
|
|
|
|
$this->AddEventPreg('/^changemail$/i', '/^confirm-from/i', '/^\w{32}$/i', 'EventChangemailConfirmFrom');
|
|
|
|
|
$this->AddEventPreg('/^changemail$/i', '/^confirm-to/i', '/^\w{32}$/i', 'EventChangemailConfirmTo');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**********************************************************************************
|
|
|
|
|
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
|
|
|
|
**********************************************************************************
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Проверка корректности профиля
|
|
|
|
|
*/
|
|
|
|
|
protected function CheckUserProfile()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли такой юзер
|
|
|
|
|
*/
|
|
|
|
|
if (!($this->oUserProfile = $this->User_GetUserByLogin($this->sCurrentEvent))) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Показывает модальное окно для жалобы
|
|
|
|
|
*/
|
|
|
|
|
protected function EventAjaxModalComplaint()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$oViewer = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$this->Viewer_AssignAjax('sText', $oViewer->Fetch("modals/modal.complaint_user.tpl"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Показывает модальное окно для жалобы
|
|
|
|
|
*/
|
|
|
|
|
protected function EventAjaxComplaintAdd()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Создаем жалобу и проводим валидацию
|
|
|
|
|
*/
|
|
|
|
|
$oComplaint = Engine::GetEntity('ModuleUser_EntityComplaint');
|
|
|
|
|
$oComplaint->setTargetUserId(getRequestStr('user_id'));
|
|
|
|
|
$oComplaint->setUserId($this->oUserCurrent->getId());
|
|
|
|
|
$oComplaint->setText(getRequestStr('text'));
|
|
|
|
|
$oComplaint->setType(getRequestStr('type'));
|
|
|
|
|
$oComplaint->setCaptcha(getRequestStr('captcha'));
|
|
|
|
|
$oComplaint->setState(ModuleUser::COMPLAINT_STATE_NEW);
|
|
|
|
|
|
|
|
|
|
if ($oComplaint->_Validate()) {
|
|
|
|
|
/**
|
|
|
|
|
* Экранируем текст и добавляем запись в БД
|
|
|
|
|
*/
|
|
|
|
|
$oComplaint->setText(htmlspecialchars($oComplaint->getText()));
|
|
|
|
|
if ($this->User_AddComplaint($oComplaint)) {
|
|
|
|
|
$this->Message_AddNotice($this->Lang_Get('report.notices.success'), $this->Lang_Get('attention'));
|
|
|
|
|
/**
|
|
|
|
|
* Убиваем каптчу
|
|
|
|
|
*/
|
|
|
|
|
unset($_SESSION['captcha_keystring_complaint_user']);
|
|
|
|
|
/**
|
|
|
|
|
* Отправляем уведомление админу
|
|
|
|
|
*/
|
|
|
|
|
if (Config::Get('module.user.complaint_notify_by_mail')) {
|
|
|
|
|
$this->Notify_SendUserComplaint($oComplaint);
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('common.error.save'), $this->Lang_Get('error'));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError($oComplaint->_getValidateError(), $this->Lang_Get('error'));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Чтение активности пользователя (stream)
|
|
|
|
|
*/
|
|
|
|
|
protected function EventStream()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('activityEvents', $this->Stream_ReadByUserId($this->oUserProfile->getId()));
|
|
|
|
|
$this->Viewer_Assign('activityEventsAllCount', $this->Stream_GetCountByUserId($this->oUserProfile->getId()));
|
|
|
|
|
|
|
|
|
|
$this->SetTemplateAction('activity');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Список друзей пользователей
|
|
|
|
|
*/
|
|
|
|
|
protected function EventFriends()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
$iPage = $this->GetParamEventMatch(1, 2) ? $this->GetParamEventMatch(1, 2) : 1;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список комментов
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->User_GetUsersFriend($this->oUserProfile->getId(), $iPage,
|
|
|
|
|
Config::Get('module.user.per_page'));
|
|
|
|
|
$aFriends = $aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.user.per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'friends');
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aFriends', $aFriends);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.friends.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
|
|
|
|
|
$this->SetTemplateAction('friends');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Список топиков пользователя
|
|
|
|
|
*/
|
|
|
|
|
protected function EventCreatedTopics()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'topics';
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
if ($this->GetParamEventMatch(1, 0) == 'topics') {
|
|
|
|
|
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
|
|
|
|
|
} else {
|
|
|
|
|
$iPage = $this->GetParamEventMatch(1, 2) ? $this->GetParamEventMatch(1, 2) : 1;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список топиков
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->Topic_GetTopicsPersonalByUser($this->oUserProfile->getId(), 1, $iPage,
|
|
|
|
|
Config::Get('module.topic.per_page'));
|
|
|
|
|
$aTopics = $aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topics_list_show', array('aTopics' => $aTopics));
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'created/topics');
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aTopics', $aTopics);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.publications.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.publications.nav.topics'));
|
|
|
|
|
$this->Viewer_SetHtmlRssAlternate(Router::GetPath('rss') . 'personal_blog/' . $this->oUserProfile->getLogin() . '/',
|
|
|
|
|
$this->oUserProfile->getLogin());
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('created.topics');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Вывод комментариев пользователя
|
|
|
|
|
*/
|
|
|
|
|
protected function EventCreatedComments()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'comments';
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список комментов
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->Comment_GetCommentsByUserId($this->oUserProfile->getId(), 'topic', $iPage,
|
|
|
|
|
Config::Get('module.comment.per_page'));
|
|
|
|
|
$aComments = $aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.comment.per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'created/comments');
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aComments', $aComments);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.publications.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.publications.nav.comments'));
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('created.comments');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Выводит список избранноего юзера
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventFavourite()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'topics';
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
if ($this->GetParamEventMatch(1, 0) == 'topics') {
|
|
|
|
|
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
|
|
|
|
|
} else {
|
|
|
|
|
$iPage = $this->GetParamEventMatch(1, 2) ? $this->GetParamEventMatch(1, 2) : 1;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список избранных топиков
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->Topic_GetTopicsFavouriteByUserId($this->oUserProfile->getId(), $iPage,
|
|
|
|
|
Config::Get('module.topic.per_page'));
|
|
|
|
|
$aTopics = $aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topics_list_show', array('aTopics' => $aTopics));
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'favourites/topics');
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aTopics', $aTopics);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.profile.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.favourites.title'));
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.favourites.nav.topics'));
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('favourite.topics');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Список топиков из избранного по тегу
|
|
|
|
|
*/
|
|
|
|
|
protected function EventFavouriteTopicsTag()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Пользователь авторизован и просматривает свой профиль?
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->oUserCurrent or $this->oUserProfile->getId() != $this->oUserCurrent->getId()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'topics';
|
|
|
|
|
$sTag = $this->GetParamEventMatch(3, 0);
|
|
|
|
|
/*
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
$iPage = $this->GetParamEventMatch(4, 2) ? $this->GetParamEventMatch(4, 2) : 1;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список избранных топиков
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->Favourite_GetTags(array(
|
|
|
|
|
'target_type' => 'topic',
|
|
|
|
|
'user_id' => $this->oUserProfile->getId(),
|
|
|
|
|
'text' => $sTag
|
|
|
|
|
), array('target_id' => 'desc'), $iPage, Config::Get('module.topic.per_page'));
|
|
|
|
|
$aTopicId = array();
|
|
|
|
|
foreach ($aResult['collection'] as $oTag) {
|
|
|
|
|
$aTopicId[] = $oTag->getTargetId();
|
|
|
|
|
}
|
|
|
|
|
$aTopics = $this->Topic_GetTopicsAdditionalData($aTopicId);
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'),
|
|
|
|
|
$this->oUserProfile->getUserWebPath() . 'favourites/topics/tag/' . htmlspecialchars($sTag));
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aTopics', $aTopics);
|
|
|
|
|
$this->Viewer_Assign('sFavouriteTag', htmlspecialchars($sTag));
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.profile.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.favourites.title'));
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('favourite.topics');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Выводит список избранноего юзера
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventFavouriteComments()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'comments';
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список избранных комментариев
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->Comment_GetCommentsFavouriteByUserId($this->oUserProfile->getId(), $iPage,
|
|
|
|
|
Config::Get('module.comment.per_page'));
|
|
|
|
|
$aComments = $aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.comment.per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'favourites/comments');
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aComments', $aComments);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.profile.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.favourites.title'));
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.favourites.nav.comments'));
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('favourite.comments');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Показывает инфу профиля
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventWhois()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'main';
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список друзей
|
|
|
|
|
*/
|
|
|
|
|
$aUsersFriend = $this->User_GetUsersFriend($this->oUserProfile->getId(), 1,
|
|
|
|
|
Config::Get('module.user.friend_on_profile'));
|
|
|
|
|
/**
|
|
|
|
|
* Если активен режим инвайтов, то прогружаем дополнительную информацию
|
|
|
|
|
*/
|
|
|
|
|
if (Config::Get('general.reg.invite')) {
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список тех кого пригласил юзер
|
|
|
|
|
*/
|
|
|
|
|
$aUsersInvite = $this->User_GetUsersInvite($this->oUserProfile->getId());
|
|
|
|
|
$this->Viewer_Assign('aUsersInvite', $aUsersInvite);
|
|
|
|
|
/**
|
|
|
|
|
* Получаем того юзера, кто пригласил текущего
|
|
|
|
|
*/
|
|
|
|
|
$oUserInviteFrom = $this->User_GetUserInviteFrom($this->oUserProfile->getId());
|
|
|
|
|
$this->Viewer_Assign('oUserInviteFrom', $oUserInviteFrom);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список юзеров блога
|
|
|
|
|
*/
|
|
|
|
|
$aBlogUsers = $this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(), ModuleBlog::BLOG_USER_ROLE_USER);
|
|
|
|
|
$aBlogModerators = $this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_MODERATOR);
|
|
|
|
|
$aBlogAdministrators = $this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список блогов которые создал юзер
|
|
|
|
|
*/
|
|
|
|
|
$aBlogsOwner = $this->Blog_GetBlogsByOwnerId($this->oUserProfile->getId());
|
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('profile_whois_show', array("oUserProfile" => $this->oUserProfile));
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aBlogUsers', $aBlogUsers);
|
|
|
|
|
$this->Viewer_Assign('aBlogModerators', $aBlogModerators);
|
|
|
|
|
$this->Viewer_Assign('aBlogAdministrators', $aBlogAdministrators);
|
|
|
|
|
$this->Viewer_Assign('aBlogsOwner', $aBlogsOwner);
|
|
|
|
|
$this->Viewer_Assign('aUsersFriend', $aUsersFriend['collection']);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.profile.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.profile.title')); // TODO: i18n
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('info');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Отображение стены пользователя
|
|
|
|
|
*/
|
|
|
|
|
public function EventWall()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем записи стены
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
$aWall = $this->Wall_GetWall(array('wall_user_id' => $this->oUserProfile->getId(), 'pid' => null),
|
|
|
|
|
array('id' => 'desc'), 1, Config::Get('module.wall.per_page'));
|
|
|
|
|
$aPosts = $aWall['collection'];
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('aWall', $aPosts);
|
|
|
|
|
$this->Viewer_Assign('iCountWall', $aWall['count']);
|
|
|
|
|
|
|
|
|
|
if (count($aPosts)) {
|
|
|
|
|
$oPostLast = end($aPosts);
|
|
|
|
|
$this->Viewer_Assign('iWallLastId', $oPostLast->getId());
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('wall');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Сохраняет заметку о пользователе
|
|
|
|
|
*/
|
|
|
|
|
public function EventAjaxNoteSave()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
/**
|
|
|
|
|
* Пользователь авторизован?
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Создаем заметку и проводим валидацию
|
|
|
|
|
*/
|
|
|
|
|
$oNote = Engine::GetEntity('ModuleUser_EntityNote');
|
|
|
|
|
$oNote->setTargetUserId(getRequestStr('iUserId'));
|
|
|
|
|
$oNote->setUserId($this->oUserCurrent->getId());
|
|
|
|
|
$oNote->setText(getRequestStr('text'));
|
|
|
|
|
|
|
|
|
|
if ($oNote->_Validate()) {
|
|
|
|
|
/**
|
|
|
|
|
* Экранируем текст и добавляем запись в БД
|
|
|
|
|
*/
|
|
|
|
|
$oNote->setText(htmlspecialchars(strip_tags($oNote->getText())));
|
|
|
|
|
if ($this->User_SaveNote($oNote)) {
|
|
|
|
|
$this->Viewer_AssignAjax('sText', $oNote->getText());
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('common.error.save'), $this->Lang_Get('error'));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddError($oNote->_getValidateError(), $this->Lang_Get('error'));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет заметку о пользователе
|
|
|
|
|
*/
|
|
|
|
|
public function EventAjaxNoteRemove()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!($oUserTarget = $this->User_GetUserById(getRequestStr('iUserId')))) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
if (!($oNote = $this->User_GetUserNote($oUserTarget->getId(), $this->oUserCurrent->getId()))) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
$this->User_DeleteUserNoteById($oNote->getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Список созданных заметок
|
|
|
|
|
*/
|
|
|
|
|
public function EventCreatedNotes()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->CheckUserProfile()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->sMenuSubItemSelect = 'notes';
|
|
|
|
|
/**
|
|
|
|
|
* Заметки может читать только сам пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->oUserCurrent or $this->oUserCurrent->getId() != $this->oUserProfile->getId()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
|
|
|
|
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем список заметок
|
|
|
|
|
*/
|
|
|
|
|
$aResult = $this->User_GetUsersByNoteAndUserId($this->oUserProfile->getId(), $iPage,
|
|
|
|
|
Config::Get('module.user.usernote_per_page'));
|
|
|
|
|
$aNotes = $aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
|
|
|
|
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.user.usernote_per_page'),
|
|
|
|
|
Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'created/notes');
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aPaging', $aPaging);
|
|
|
|
|
$this->Viewer_Assign('aUsersList', $aNotes);
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.publications.title') . ' ' . $this->oUserProfile->getLogin());
|
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('user.publications.nav.notes'));
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('created.notes');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Добавление пользователя в друзья, по отправленной заявке
|
|
|
|
|
*/
|
|
|
|
|
public function EventFriendOffer()
|
|
|
|
|
{
|
|
|
|
|
require_once Config::Get('path.framework.libs_vendor.server') . '/XXTEA/encrypt.php';
|
|
|
|
|
/**
|
|
|
|
|
* Из реквеста дешефруем ID польователя
|
|
|
|
|
*/
|
|
|
|
|
$sUserId = xxtea_decrypt(base64_decode(rawurldecode(getRequestStr('code'))),
|
|
|
|
|
Config::Get('module.talk.encrypt'));
|
|
|
|
|
if (!$sUserId) {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
list($sUserId,) = explode('_', $sUserId, 2);
|
|
|
|
|
|
|
|
|
|
$sAction = $this->GetParam(0);
|
|
|
|
|
/**
|
|
|
|
|
* Получаем текущего пользователя
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent = $this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* Получаем объект пользователя приславшего заявку,
|
|
|
|
|
* если пользователь не найден, переводим в раздел сообщений (Talk) -
|
|
|
|
|
* так как пользователь мог перейти сюда либо из talk-сообщений,
|
|
|
|
|
* либо из e-mail письма-уведомления
|
|
|
|
|
*/
|
|
|
|
|
if (!$oUser = $this->User_GetUserById($sUserId)) {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('user.notices.not_found'), $this->Lang_Get('error'), true);
|
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем связь дружбы из базы данных.
|
|
|
|
|
* Если связь не найдена либо статус отличен от OFFER,
|
|
|
|
|
* переходим в раздел Talk и возвращаем сообщение об ошибке
|
|
|
|
|
*/
|
|
|
|
|
$oFriend = $this->User_GetFriend($this->oUserCurrent->getId(), $oUser->getId(), 0);
|
|
|
|
|
if (!$oFriend
|
|
|
|
|
|| !in_array(
|
|
|
|
|
$oFriend->getFriendStatus(),
|
|
|
|
|
array(
|
|
|
|
|
ModuleUser::USER_FRIEND_OFFER + ModuleUser::USER_FRIEND_NULL,
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
$sMessage = ($oFriend)
|
|
|
|
|
? $this->Lang_Get('user.friends.notices.offer_already_done')
|
|
|
|
|
: $this->Lang_Get('user.friends.notices.offer_not_found');
|
|
|
|
|
$this->Message_AddError($sMessage, $this->Lang_Get('error'), true);
|
|
|
|
|
|
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем новый статус связи
|
|
|
|
|
*/
|
|
|
|
|
$oFriend->setStatusTo(
|
|
|
|
|
($sAction == 'accept')
|
|
|
|
|
? ModuleUser::USER_FRIEND_ACCEPT
|
|
|
|
|
: ModuleUser::USER_FRIEND_REJECT
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if ($this->User_UpdateFriend($oFriend)) {
|
|
|
|
|
$sMessage = ($sAction == 'accept')
|
|
|
|
|
? $this->Lang_Get('user.friends.notices.add_success')
|
|
|
|
|
: $this->Lang_Get('user.friends.rejected');
|
|
|
|
|
|
|
|
|
|
$this->Message_AddNoticeSingle($sMessage, $this->Lang_Get('attention'), true);
|
|
|
|
|
$this->NoticeFriendOffer($oUser, $sAction);
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('system_error'),
|
|
|
|
|
$this->Lang_Get('error'),
|
|
|
|
|
true
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Подтверждение заявки на добавления в друзья
|
|
|
|
|
*/
|
|
|
|
|
public function EventAjaxFriendAccept()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
$sUserId = getRequestStr('idUser', null, 'post');
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('need_authorization'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent = $this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* При попытке добавить в друзья себя, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent->getId() == $sUserId) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не найден, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$oUser = $this->User_GetUserById($sUserId)) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.notices.not_found'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserProfile = $oUser;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем статус дружбы между пользователями
|
|
|
|
|
*/
|
|
|
|
|
$oFriend = $this->User_GetFriend($oUser->getId(), $this->oUserCurrent->getId());
|
|
|
|
|
/**
|
|
|
|
|
* При попытке потдвердить ранее отклоненную заявку,
|
|
|
|
|
* проверяем, чтобы изменяющий был принимающей стороной
|
|
|
|
|
*/
|
|
|
|
|
if ($oFriend
|
|
|
|
|
&& ($oFriend->getStatusFrom() == ModuleUser::USER_FRIEND_OFFER || $oFriend->getStatusFrom() == ModuleUser::USER_FRIEND_ACCEPT)
|
|
|
|
|
&& ($oFriend->getStatusTo() == ModuleUser::USER_FRIEND_REJECT || $oFriend->getStatusTo() == ModuleUser::USER_FRIEND_NULL)
|
|
|
|
|
&& $oFriend->getUserTo() == $this->oUserCurrent->getId()
|
|
|
|
|
) {
|
|
|
|
|
/**
|
|
|
|
|
* Меняем статус с отвергнутое, на акцептованное
|
|
|
|
|
*/
|
|
|
|
|
$oFriend->setStatusByUserId(ModuleUser::USER_FRIEND_ACCEPT, $this->oUserCurrent->getId());
|
|
|
|
|
if ($this->User_UpdateFriend($oFriend)) {
|
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('user.friends.notices.add_success'),
|
|
|
|
|
$this->Lang_Get('attention'));
|
|
|
|
|
$this->NoticeFriendOffer($oUser, 'accept');
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем событие в ленту
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_write($oFriend->getUserFrom(), 'add_friend', $oFriend->getUserTo());
|
|
|
|
|
$this->Stream_write($oFriend->getUserTo(), 'add_friend', $oFriend->getUserFrom());
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем пользователей к друг другу в ленту активности
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_subscribeUser($oFriend->getUserFrom(), $oFriend->getUserTo());
|
|
|
|
|
$this->Stream_subscribeUser($oFriend->getUserTo(), $oFriend->getUserFrom());
|
|
|
|
|
} else {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Отправляет пользователю Talk уведомление о принятии или отклонении его заявки
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleUser_EntityUser $oUser
|
|
|
|
|
* @param string $sAction
|
|
|
|
|
*/
|
|
|
|
|
protected function NoticeFriendOffer($oUser, $sAction)
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем допустимость действия
|
|
|
|
|
*/
|
|
|
|
|
if (!in_array($sAction, array('accept', 'reject'))) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем настройки (нужно ли отправлять уведомление)
|
|
|
|
|
*/
|
|
|
|
|
if (!Config::Get("module.user.friend_notice.{$sAction}")) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sTitle = $this->Lang_Get("user.friends.messages.{$sAction}.title");
|
|
|
|
|
$sText = $this->Lang_Get(
|
|
|
|
|
"user.friends.messages.{$sAction}.text",
|
|
|
|
|
array(
|
|
|
|
|
'login' => $this->oUserCurrent->getLogin(),
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
$oTalk = $this->Talk_SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
|
|
|
|
|
$this->Talk_DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обработка Ajax добавления в друзья
|
|
|
|
|
*/
|
|
|
|
|
public function EventAjaxFriendAdd()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
$sUserId = getRequestStr('idUser');
|
|
|
|
|
$sUserText = getRequestStr('userText', '');
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('need_authorization'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent = $this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* При попытке добавить в друзья себя, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent->getId() == $sUserId) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не найден, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$oUser = $this->User_GetUserById($sUserId)) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.notices.not_found'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserProfile = $oUser;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем статус дружбы между пользователями
|
|
|
|
|
*/
|
|
|
|
|
$oFriend = $this->User_GetFriend($oUser->getId(), $this->oUserCurrent->getId());
|
|
|
|
|
/**
|
|
|
|
|
* Если связи ранее не было в базе данных, добавляем новую
|
|
|
|
|
*/
|
|
|
|
|
if (!$oFriend) {
|
|
|
|
|
$this->SubmitAddFriend($oUser, $sUserText, $oFriend);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если статус связи соответствует статусам отправленной и акцептованной заявки,
|
|
|
|
|
* то предупреждаем что этот пользователь уже является нашим другом
|
|
|
|
|
*/
|
|
|
|
|
if ($oFriend->getFriendStatus() == ModuleUser::USER_FRIEND_OFFER + ModuleUser::USER_FRIEND_ACCEPT) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.friends.notices.already_exist'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь ранее отклонил нашу заявку,
|
|
|
|
|
* возвращаем сообщение об ошибке
|
|
|
|
|
*/
|
|
|
|
|
if ($oFriend->getUserFrom() == $this->oUserCurrent->getId()
|
|
|
|
|
&& $oFriend->getStatusTo() == ModuleUser::USER_FRIEND_REJECT
|
|
|
|
|
) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.friends.rejected'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если дружба была удалена, то проверяем кто ее удалил
|
|
|
|
|
* и разрешаем восстановить только удалившему
|
|
|
|
|
*/
|
|
|
|
|
if ($oFriend->getFriendStatus() > ModuleUser::USER_FRIEND_DELETE
|
|
|
|
|
&& $oFriend->getFriendStatus() < ModuleUser::USER_FRIEND_REJECT
|
|
|
|
|
) {
|
|
|
|
|
/**
|
|
|
|
|
* Определяем статус связи текущего пользователя
|
|
|
|
|
*/
|
|
|
|
|
$iStatusCurrent = $oFriend->getStatusByUserId($this->oUserCurrent->getId());
|
|
|
|
|
|
|
|
|
|
if ($iStatusCurrent == ModuleUser::USER_FRIEND_DELETE) {
|
|
|
|
|
/**
|
|
|
|
|
* Меняем статус с удаленного, на акцептованное
|
|
|
|
|
*/
|
|
|
|
|
$oFriend->setStatusByUserId(ModuleUser::USER_FRIEND_ACCEPT, $this->oUserCurrent->getId());
|
|
|
|
|
if ($this->User_UpdateFriend($oFriend)) {
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем событие в ленту
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_write($oFriend->getUserFrom(), 'add_friend', $oFriend->getUserTo());
|
|
|
|
|
$this->Stream_write($oFriend->getUserTo(), 'add_friend', $oFriend->getUserFrom());
|
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('user.friends.notices.add_success'),
|
|
|
|
|
$this->Lang_Get('attention'));
|
|
|
|
|
} else {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.friends.notices.rejected'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Функция создает локальный объект вьювера для рендеринга html-объектов в ajax запросах
|
|
|
|
|
*
|
|
|
|
|
* @return ModuleViewer
|
|
|
|
|
*/
|
|
|
|
|
protected function GetViewerLocal()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Получаем HTML код inject-объекта
|
|
|
|
|
*/
|
|
|
|
|
$oViewerLocal = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$oViewerLocal->Assign('oUserCurrent', $this->oUserCurrent);
|
|
|
|
|
$oViewerLocal->Assign('oUserProfile', $this->oUserProfile);
|
|
|
|
|
|
|
|
|
|
$oViewerLocal->Assign('USER_FRIEND_NULL', ModuleUser::USER_FRIEND_NULL);
|
|
|
|
|
$oViewerLocal->Assign('USER_FRIEND_OFFER', ModuleUser::USER_FRIEND_OFFER);
|
|
|
|
|
$oViewerLocal->Assign('USER_FRIEND_ACCEPT', ModuleUser::USER_FRIEND_ACCEPT);
|
|
|
|
|
$oViewerLocal->Assign('USER_FRIEND_REJECT', ModuleUser::USER_FRIEND_REJECT);
|
|
|
|
|
$oViewerLocal->Assign('USER_FRIEND_DELETE', ModuleUser::USER_FRIEND_DELETE);
|
|
|
|
|
|
|
|
|
|
return $oViewerLocal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обработка добавления в друзья
|
|
|
|
|
*
|
|
|
|
|
* @param $oUser
|
|
|
|
|
* @param $sUserText
|
|
|
|
|
* @param null $oFriend
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
protected function SubmitAddFriend($oUser, $sUserText, $oFriend = null)
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Ограничения на добавления в друзья, т.к. приглашение отправляется в личку, то и ограничиваем по ней
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->ACL_CanSendTalkTime($this->oUserCurrent)) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('user.friends.notices.time_limit'), $this->Lang_Get('error'));
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем текст заявки
|
|
|
|
|
*/
|
|
|
|
|
$sUserText = $this->Text_Parser($sUserText);
|
|
|
|
|
/**
|
|
|
|
|
* Создаем связь с другом
|
|
|
|
|
*/
|
|
|
|
|
$oFriendNew = Engine::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)
|
|
|
|
|
? !$this->User_UpdateFriend($oFriendNew)
|
|
|
|
|
: !$this->User_AddFriend($oFriendNew);
|
|
|
|
|
|
|
|
|
|
if (!$bStateError) {
|
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('user.friends.sent'), $this->Lang_Get('attention'));
|
|
|
|
|
|
|
|
|
|
$sTitle = $this->Lang_Get(
|
|
|
|
|
'user.friends.messages.offer.title',
|
|
|
|
|
array(
|
|
|
|
|
'login' => $this->oUserCurrent->getLogin(),
|
|
|
|
|
'friend' => $oUser->getLogin()
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
require_once Config::Get('path.framework.libs_vendor.server') . '/XXTEA/encrypt.php';
|
|
|
|
|
$sCode = $this->oUserCurrent->getId() . '_' . $oUser->getId();
|
|
|
|
|
$sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.talk.encrypt'))));
|
|
|
|
|
|
|
|
|
|
$aPath = array(
|
|
|
|
|
'accept' => Router::GetPath('profile') . 'friendoffer/accept/?code=' . $sCode,
|
|
|
|
|
'reject' => Router::GetPath('profile') . 'friendoffer/reject/?code=' . $sCode
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$sText = $this->Lang_Get(
|
|
|
|
|
'user.friends.messages.offer.text',
|
|
|
|
|
array(
|
|
|
|
|
'login' => $this->oUserCurrent->getLogin(),
|
|
|
|
|
'accept_path' => $aPath['accept'],
|
|
|
|
|
'reject_path' => $aPath['reject'],
|
|
|
|
|
'user_text' => $sUserText
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
$oTalk = $this->Talk_SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
|
|
|
|
|
/**
|
|
|
|
|
* Отправляем пользователю заявку
|
|
|
|
|
*/
|
|
|
|
|
$this->Notify_SendUserFriendNew(
|
|
|
|
|
$oUser, $this->oUserCurrent, $sUserText,
|
|
|
|
|
Router::GetPath('talk') . 'read/' . $oTalk->getId() . '/'
|
|
|
|
|
);
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем отправляющего юзера из переписки
|
|
|
|
|
*/
|
|
|
|
|
$this->Talk_DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
|
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаление пользователя из друзей
|
|
|
|
|
*/
|
|
|
|
|
public function EventAjaxFriendDelete()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
$sUserId = getRequestStr('idUser', null, 'post');
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('need_authorization'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent = $this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* При попытке добавить в друзья себя, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent->getId() == $sUserId) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не найден, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$oUser = $this->User_GetUserById($sUserId)) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.friends.notices.not_found'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserProfile = $oUser;
|
|
|
|
|
/**
|
|
|
|
|
* Получаем статус дружбы между пользователями.
|
|
|
|
|
* Если статус не определен, или отличается от принятой заявки,
|
|
|
|
|
* возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
$oFriend = $this->User_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)) {
|
|
|
|
|
$this->Message_AddErrorSingle(
|
|
|
|
|
$this->Lang_Get('user.friends.notices.not_found'),
|
|
|
|
|
$this->Lang_Get('error')
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем из друзей
|
|
|
|
|
*/
|
|
|
|
|
if ($this->User_DeleteFriend($oFriend)) {
|
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('user.friends.notices.remove_success'),
|
|
|
|
|
$this->Lang_Get('attention'));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Отправляем пользователю сообщение об удалении дружеской связи
|
|
|
|
|
*/
|
|
|
|
|
if (Config::Get('module.user.friend_notice.delete')) {
|
|
|
|
|
$sText = $this->Lang_Get(
|
|
|
|
|
'user.friends.messages.deleted.text',
|
|
|
|
|
array(
|
|
|
|
|
'login' => $this->oUserCurrent->getLogin(),
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
$oTalk = $this->Talk_SendTalk(
|
|
|
|
|
$this->Lang_Get('user.friends.messages.deleted.title'),
|
|
|
|
|
$sText, $this->oUserCurrent,
|
|
|
|
|
array($oUser), false, false
|
|
|
|
|
);
|
|
|
|
|
$this->Talk_DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Показывает модальное окно
|
|
|
|
|
*/
|
|
|
|
|
protected function EventAjaxModalAddFriend()
|
|
|
|
|
{
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
|
|
|
|
|
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$iTarget = (int)getRequest('target');
|
|
|
|
|
|
|
|
|
|
$oViewer = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$oViewer->Assign('target', $iTarget, true);
|
|
|
|
|
$this->Viewer_AssignAjax('sText', $oViewer->Fetch("modals/modal.add_friend.tpl"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обработка подтверждения старого емайла при его смене
|
|
|
|
|
* TODO: Перенести в экшн Settings
|
|
|
|
|
*/
|
|
|
|
|
public function EventChangemailConfirmFrom()
|
|
|
|
|
{
|
|
|
|
|
if (!($oChangemail = $this->User_GetUserChangemailByCodeFrom($this->GetParamEventMatch(1, 0)))) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($oChangemail->getConfirmFrom() or strtotime($oChangemail->getDateExpired()) < time()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$oChangemail->setConfirmFrom(1);
|
|
|
|
|
$this->User_UpdateUserChangemail($oChangemail);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Отправляем уведомление
|
|
|
|
|
*/
|
|
|
|
|
$oUser = $this->User_GetUserById($oChangemail->getUserId());
|
|
|
|
|
$this->Notify_Send($oChangemail->getMailTo(),
|
|
|
|
|
Config::Get('module.notify.prefix') . '.user_changemail_to.tpl',
|
|
|
|
|
$this->Lang_Get('emails.user_changemail.subject'),
|
|
|
|
|
array(
|
|
|
|
|
'oUser' => $oUser,
|
|
|
|
|
'oChangemail' => $oChangemail,
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('sText', $this->Lang_Get('user.settings.account.fields.email.notices.change_to_notice'));
|
|
|
|
|
$this->SetTemplate('actions/ActionSettings/account.change_email_confirm.tpl');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обработка подтверждения нового емайла при смене старого
|
|
|
|
|
*/
|
|
|
|
|
public function EventChangemailConfirmTo()
|
|
|
|
|
{
|
|
|
|
|
if (!($oChangemail = $this->User_GetUserChangemailByCodeTo($this->GetParamEventMatch(1, 0)))) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$oChangemail->getConfirmFrom() or $oChangemail->getConfirmTo() or strtotime($oChangemail->getDateExpired()) < time()) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$oChangemail->setConfirmTo(1);
|
|
|
|
|
$oChangemail->setDateUsed(date("Y-m-d H:i:s"));
|
|
|
|
|
$this->User_UpdateUserChangemail($oChangemail);
|
|
|
|
|
|
|
|
|
|
$oUser = $this->User_GetUserById($oChangemail->getUserId());
|
|
|
|
|
$oUser->setMail($oChangemail->getMailTo());
|
|
|
|
|
$this->User_Update($oUser);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Меняем емайл в подписках
|
|
|
|
|
*/
|
|
|
|
|
if ($oChangemail->getMailFrom()) {
|
|
|
|
|
$this->Subscribe_ChangeSubscribeMail($oChangemail->getMailFrom(), $oChangemail->getMailTo(),
|
|
|
|
|
$oUser->getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('sText', $this->Lang_Get('user.settings.account.fields.email.notices.change_ok',
|
|
|
|
|
array('mail' => htmlspecialchars($oChangemail->getMailTo()))));
|
|
|
|
|
$this->SetTemplate('actions/ActionSettings/account.change_email_confirm.tpl');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Выполняется при завершении работы экшена
|
|
|
|
|
*/
|
|
|
|
|
public function EventShutdown()
|
|
|
|
|
{
|
|
|
|
|
if (!$this->oUserProfile) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем в шаблон необходимые переменные
|
|
|
|
|
*/
|
|
|
|
|
$iCountTopicFavourite = $this->Topic_GetCountTopicsFavouriteByUserId($this->oUserProfile->getId());
|
|
|
|
|
$iCountTopicUser = $this->Topic_GetCountTopicsPersonalByUser($this->oUserProfile->getId(), 1);
|
|
|
|
|
$iCountCommentUser = $this->Comment_GetCountCommentsByUserId($this->oUserProfile->getId(), 'topic');
|
|
|
|
|
$iCountCommentFavourite = $this->Comment_GetCountCommentsFavouriteByUserId($this->oUserProfile->getId());
|
|
|
|
|
$iCountNoteUser = $this->User_GetCountUserNotesByUserId($this->oUserProfile->getId());
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('oUserProfile', $this->oUserProfile);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicUser', $iCountTopicUser);
|
|
|
|
|
$this->Viewer_Assign('iCountCommentUser', $iCountCommentUser);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicFavourite', $iCountTopicFavourite);
|
|
|
|
|
$this->Viewer_Assign('iCountCommentFavourite', $iCountCommentFavourite);
|
|
|
|
|
$this->Viewer_Assign('iCountNoteUser', $iCountNoteUser);
|
|
|
|
|
$this->Viewer_Assign('iCountWallUser',
|
|
|
|
|
$this->Wall_GetCountWall(array('wall_user_id' => $this->oUserProfile->getId(), 'pid' => null)));
|
|
|
|
|
/**
|
|
|
|
|
* Общее число публикация и избранного
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('iCountCreated',
|
|
|
|
|
(($this->oUserCurrent and $this->oUserCurrent->getId() == $this->oUserProfile->getId()) ? $iCountNoteUser : 0) + $iCountTopicUser + $iCountCommentUser);
|
|
|
|
|
$this->Viewer_Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite);
|
|
|
|
|
/**
|
|
|
|
|
* Заметка текущего пользователя о юзере
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent) {
|
|
|
|
|
$this->Viewer_Assign('oUserNote', $this->oUserProfile->getUserNote());
|
|
|
|
|
}
|
|
|
|
|
$this->Viewer_Assign('iCountFriendsUser', $this->User_GetCountUsersFriend($this->oUserProfile->getId()));
|
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
|
|
|
|
|
$this->Viewer_Assign('sMenuHeadItemSelect', $this->sMenuHeadItemSelect);
|
|
|
|
|
$this->Viewer_Assign('USER_FRIEND_NULL', ModuleUser::USER_FRIEND_NULL);
|
|
|
|
|
$this->Viewer_Assign('USER_FRIEND_OFFER', ModuleUser::USER_FRIEND_OFFER);
|
|
|
|
|
$this->Viewer_Assign('USER_FRIEND_ACCEPT', ModuleUser::USER_FRIEND_ACCEPT);
|
|
|
|
|
$this->Viewer_Assign('USER_FRIEND_REJECT', ModuleUser::USER_FRIEND_REJECT);
|
|
|
|
|
$this->Viewer_Assign('USER_FRIEND_DELETE', ModuleUser::USER_FRIEND_DELETE);
|
|
|
|
|
}
|
2014-01-28 09:47:36 +02:00
|
|
|
|
}
|