Файл: system/controllers/users/actions/friend_add.php
Строк: 131
<?php
class actionUsersFriendAdd extends cmsAction {
public function run($friend_id){
if (!cmsUser::isLogged()) { cmsCore::error404(); }
$user = cmsUser::getInstance();
if (!$friend_id) { cmsCore::error404(); }
if ($user->isFriend($friend_id)){ return false; }
$friend = $this->model->getUser($friend_id);
if (!$friend){ cmsCore::error404(); }
//
// Запрос по ссылке из профиля
//
if ($this->request->isStandard()){
//
// Если запрос от друга уже существует
//
if ($this->model->isFriendshipRequested($friend_id, $user->id)){
$this->model->addFriendship($user->id, $friend_id);
cmsUser::addSessionMessage(sprintf(LANG_USERS_FRIENDS_DONE, $friend['nickname']), 'success');
$this->sendNoticeAccepted($friend);
$this->redirectToAction($friend_id);
}
//
// Если запроса от друга не было
//
if ($this->request->has('submit')){
// подтвержение получено
$csrf_token = $this->request->get('csrf_token');
if (!cmsForm::validateCSRFToken($csrf_token)){ cmsCore::error404(); }
$this->model->addFriendship($user->id, $friend_id);
cmsUser::addSessionMessage(LANG_USERS_FRIENDS_SENT);
$this->sendNoticeRequest($friend);
$this->redirectToAction($friend_id);
} else {
// спрашиваем подтверждение
return cmsTemplate::getInstance()->render('friend_add', array(
'user' => $user,
'friend' => $friend,
));
}
}
//
// Запрос из уведомления (внутренний)
//
if ($this->request->isInternal()){
$this->model->addFriendship($user->id, $friend_id);
$this->sendNoticeAccepted($friend);
return true;
}
}
public function sendNoticeRequest($friend){
$user = cmsUser::getInstance();
$messenger = cmsCore::getController('messages');
$messenger->addRecipient($friend['id']);
//
// Личное сообщение
//
$sender_link = '<a href="'.href_to($this->name, $user->id).'">'.$user->nickname.'</a>';
$notice = array(
'content' => sprintf(LANG_USERS_FRIENDS_NOTICE, $sender_link),
'options' => array(
'is_closeable' => false
),
'actions' => array(
'accept' => array(
'title' => LANG_ACCEPT,
'controller' => $this->name,
'action' => 'friend_add',
'params' => array($user->id),
),
'decline' => array(
'title' => LANG_DECLINE,
'controller' => $this->name,
'action' => 'friend_delete',
'params' => array($user->id),
)
)
);
// личное сообщение посылаем всегда, независимо от настроек уведомлений пользователя
$messenger->ignoreNotifyOptions()->sendNoticePM($notice, 'users_friend_add');
//
// E-mail
//
$messenger->sendNoticeEmail('users_friend_add', array(
'friend_nickname' => $user->nickname,
'friend_url' => href_to_abs('users', $user->id),
));
}
public function sendNoticeAccepted($friend){
$user = cmsUser::getInstance();
$messenger = cmsCore::getController('messages');
$messenger->addRecipient($friend['id']);
$sender_link = '<a href="'.href_to($this->name, $user->id).'">'.$user->nickname.'</a>';
$notice = array(
'content' => sprintf(LANG_USERS_FRIENDS_DONE, $sender_link),
);
$messenger->sendNoticePM($notice, 'users_friend_aссept');
}
}