mirror of
https://github.com/Mibew/mibew.git
synced 2025-03-03 18:38:31 +03:00
Beautify user chat URLs
This commit is contained in:
parent
44ca9e2a2e
commit
6c9734648a
@ -523,8 +523,6 @@ function setup_chatview_for_user(Thread $thread)
|
|||||||
'isAgent' => false,
|
'isAgent' => false,
|
||||||
);
|
);
|
||||||
|
|
||||||
$params = "thread=" . $thread->id . "&token=" . $thread->lastToken;
|
|
||||||
|
|
||||||
// Set link to send mail page
|
// Set link to send mail page
|
||||||
$data['chat']['links']['mail'] = MIBEW_WEB_ROOT . "/chat"
|
$data['chat']['links']['mail'] = MIBEW_WEB_ROOT . "/chat"
|
||||||
. '/' . $thread->id . '/' . $thread->lastToken . '/mail';
|
. '/' . $thread->id . '/' . $thread->lastToken . '/mail';
|
||||||
@ -532,8 +530,7 @@ function setup_chatview_for_user(Thread $thread)
|
|||||||
// Set SSL link
|
// Set SSL link
|
||||||
if (Settings::get('enablessl') == "1" && !is_secure_request()) {
|
if (Settings::get('enablessl') == "1" && !is_secure_request()) {
|
||||||
$data['chat']['links']['ssl'] = get_app_location(true, true)
|
$data['chat']['links']['ssl'] = get_app_location(true, true)
|
||||||
. "/chat?"
|
. '/chat/' . $thread->id . '/' . $thread->lastToken;
|
||||||
. $params;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
namespace Mibew\Controller\Chat\User;
|
namespace Mibew\Controller\Chat\User;
|
||||||
|
|
||||||
use Mibew\Controller\Chat\AbstractController;
|
use Mibew\Controller\Chat\AbstractController;
|
||||||
use Mibew\Http\Exception\BadRequestException;
|
use Mibew\Http\Exception\NotFoundException;
|
||||||
use Mibew\Settings;
|
use Mibew\Settings;
|
||||||
use Mibew\Thread;
|
use Mibew\Thread;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
@ -32,12 +32,38 @@ class ChatController extends AbstractController
|
|||||||
* Process chat pages.
|
* Process chat pages.
|
||||||
*
|
*
|
||||||
* @param Request $request Incoming request.
|
* @param Request $request Incoming request.
|
||||||
* @return string|\Symfony\Component\HttpFoundation\RedirectResponse Rendered
|
* @return string Rendered page content or a redirect response.
|
||||||
* page content or a redirect response.
|
* @throws NotFoundException If the thread with specified ID and token is
|
||||||
* @throws BadRequestException If the thread cannot be loaded by some
|
* not found.
|
||||||
* reasons.
|
|
||||||
*/
|
*/
|
||||||
public function indexAction(Request $request)
|
public function indexAction(Request $request)
|
||||||
|
{
|
||||||
|
$thread_id = $request->attributes->getInt('thread_id');
|
||||||
|
$token = $request->attributes->get('token');
|
||||||
|
|
||||||
|
$thread = Thread::load($thread_id, $token);
|
||||||
|
if (!$thread) {
|
||||||
|
throw new NotFoundException('The thread is not found.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$page = setup_chatview_for_user($thread);
|
||||||
|
|
||||||
|
// Build js application options
|
||||||
|
$page['chatOptions'] = json_encode($page['chat']);
|
||||||
|
|
||||||
|
// Expand page
|
||||||
|
return $this->render('chat', $page);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the chat.
|
||||||
|
*
|
||||||
|
* @param Request $request Incoming request.
|
||||||
|
* @return string|\Symfony\Component\HttpFoundation\RedirectResponse
|
||||||
|
* Rendered page content or a redirect response.
|
||||||
|
* @todo Split the action into pieces.
|
||||||
|
*/
|
||||||
|
public function startAction(Request $request)
|
||||||
{
|
{
|
||||||
// Check if we should force the user to use SSL
|
// Check if we should force the user to use SSL
|
||||||
$ssl_redirect = $this->sslRedirect($request);
|
$ssl_redirect = $this->sslRedirect($request);
|
||||||
@ -55,66 +81,13 @@ class ChatController extends AbstractController
|
|||||||
return $this->render('nochat', $page);
|
return $this->render('nochat', $page);
|
||||||
}
|
}
|
||||||
|
|
||||||
$action = $request->query->get('act');
|
|
||||||
if ($action != 'invitation') {
|
|
||||||
$action = 'default';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($action == 'invitation' && Settings::get('enabletracking')) {
|
|
||||||
// Check if user invited to chat
|
|
||||||
$invitation_state = invitation_state($_SESSION['visitorid']);
|
|
||||||
|
|
||||||
if ($invitation_state['invited'] && $invitation_state['threadid']) {
|
|
||||||
$thread = Thread::load($invitation_state['threadid']);
|
|
||||||
|
|
||||||
// Prepare page
|
|
||||||
$page = setup_invitation_view($thread);
|
|
||||||
|
|
||||||
// Build js application options
|
|
||||||
$page['invitationOptions'] = json_encode($page['invitation']);
|
|
||||||
|
|
||||||
// Expand page
|
|
||||||
return $this->render('chat', $page);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$request->query->has('token') || !$request->query->has('thread')) {
|
|
||||||
return $this->startChat($request);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get and validate thread id
|
|
||||||
$thread_id = $request->query->get('thread');
|
|
||||||
if (!preg_match("/^\d{1,10}$/", $thread_id)) {
|
|
||||||
throw new BadRequestException('Wrong value of "thread" argument.');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get token and verify it
|
|
||||||
$token = $request->query->get('token');
|
|
||||||
if (!preg_match("/^\d{1,10}$/", $token)) {
|
|
||||||
throw new BadRequestException('Wrong value of "token" argument.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$thread = Thread::load($thread_id, $token);
|
|
||||||
if (!$thread) {
|
|
||||||
throw new BadRequestException('Wrong thread.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$page = setup_chatview_for_user($thread);
|
|
||||||
|
|
||||||
// Build js application options
|
|
||||||
$page['chatOptions'] = json_encode($page['chat']);
|
|
||||||
|
|
||||||
// Expand page
|
|
||||||
return $this->render('chat', $page);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function startChat(Request $request)
|
|
||||||
{
|
|
||||||
$thread = null;
|
$thread = null;
|
||||||
|
// Try to get thread from the session
|
||||||
if (isset($_SESSION['threadid'])) {
|
if (isset($_SESSION['threadid'])) {
|
||||||
$thread = Thread::reopen($_SESSION['threadid']);
|
$thread = Thread::reopen($_SESSION['threadid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create new thread
|
||||||
if (!$thread) {
|
if (!$thread) {
|
||||||
// Load group info
|
// Load group info
|
||||||
$group_id = '';
|
$group_id = '';
|
||||||
@ -214,7 +187,7 @@ class ChatController extends AbstractController
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
$path_args = array(
|
$path_args = array(
|
||||||
'thread' => intval($thread->id),
|
'thread_id' => intval($thread->id),
|
||||||
'token' => urlencode($thread->lastToken),
|
'token' => urlencode($thread->lastToken),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -225,4 +198,44 @@ class ChatController extends AbstractController
|
|||||||
|
|
||||||
return $this->redirect($this->generateUrl('chat_user', $path_args));
|
return $this->redirect($this->generateUrl('chat_user', $path_args));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process chat in an invitation block.
|
||||||
|
*
|
||||||
|
* @param Request $request Incoming request.
|
||||||
|
* @return string|\Symfony\Component\HttpFoundation\RedirectResponse Rendered
|
||||||
|
* page content or a redirect response.
|
||||||
|
*/
|
||||||
|
public function invitationAction(Request $request)
|
||||||
|
{
|
||||||
|
// Check if an user tries to use invitation functionality when it's
|
||||||
|
// disabled.
|
||||||
|
if (!Settings::get('enabletracking')) {
|
||||||
|
return $this->redirect($this->generateUrl('chat_user_start'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we should force the user to use SSL.
|
||||||
|
$ssl_redirect = $this->sslRedirect($request);
|
||||||
|
if ($ssl_redirect !== false) {
|
||||||
|
return $ssl_redirect;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user invited to chat.
|
||||||
|
$invitation_state = invitation_state($_SESSION['visitorid']);
|
||||||
|
|
||||||
|
if (!$invitation_state['invited'] || !$invitation_state['threadid']) {
|
||||||
|
return $this->redirect($this->generateUrl('chat_user_start'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$thread = Thread::load($invitation_state['threadid']);
|
||||||
|
|
||||||
|
// Prepare page
|
||||||
|
$page = setup_invitation_view($thread);
|
||||||
|
|
||||||
|
// Build js application options
|
||||||
|
$page['invitationOptions'] = json_encode($page['invitation']);
|
||||||
|
|
||||||
|
// Expand page
|
||||||
|
return $this->render('chat', $page);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@ class WidgetController extends AbstractController
|
|||||||
$response_data['data']['invitation'] = array(
|
$response_data['data']['invitation'] = array(
|
||||||
'operatorName' => htmlspecialchars($operator_name),
|
'operatorName' => htmlspecialchars($operator_name),
|
||||||
'avatarUrl' => htmlspecialchars($operator['vcavatar']),
|
'avatarUrl' => htmlspecialchars($operator['vcavatar']),
|
||||||
'threadUrl' => $this->generateUrl('chat_user', array('act' => 'invitation')),
|
'threadUrl' => $this->generateUrl('chat_user_invitation'),
|
||||||
'acceptCaption' => getlocal('invitation.accept.caption'),
|
'acceptCaption' => getlocal('invitation.accept.caption'),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -38,9 +38,17 @@ chat_operator_redirection_links:
|
|||||||
|
|
||||||
## User's chat
|
## User's chat
|
||||||
chat_user:
|
chat_user:
|
||||||
path: /chat
|
path: /chat/{thread_id}/{token}
|
||||||
defaults:
|
defaults:
|
||||||
_controller: Mibew\Controller\Chat\User\ChatController::indexAction
|
_controller: Mibew\Controller\Chat\User\ChatController::indexAction
|
||||||
|
requirements:
|
||||||
|
thread_id: \d{1,10}
|
||||||
|
token: \d{1,10}
|
||||||
|
|
||||||
|
chat_user_invitation:
|
||||||
|
path: /chat/invitation
|
||||||
|
defaults:
|
||||||
|
_controller: Mibew\Controller\Chat\User\ChatController::invitationAction
|
||||||
|
|
||||||
chat_user_mail:
|
chat_user_mail:
|
||||||
path: /chat/{thread_id}/{token}/mail
|
path: /chat/{thread_id}/{token}/mail
|
||||||
@ -60,6 +68,11 @@ chat_user_mail_send:
|
|||||||
token: \d{1,10}
|
token: \d{1,10}
|
||||||
methods: [POST]
|
methods: [POST]
|
||||||
|
|
||||||
|
chat_user_start:
|
||||||
|
path: /chat
|
||||||
|
defaults:
|
||||||
|
_controller: Mibew\Controller\Chat\User\ChatController::startAction
|
||||||
|
|
||||||
# Pages that are available for all users
|
# Pages that are available for all users
|
||||||
button:
|
button:
|
||||||
path: /b
|
path: /b
|
||||||
|
Loading…
Reference in New Issue
Block a user