Skip to content
Snippets Groups Projects
Commit 1ae11d4a authored by Hardik Patel's avatar Hardik Patel Committed by Jakob P
Browse files

Issue #3101732: After logout due to inactivity , login redirection is not right

parent 4d14dbb9
Branches
Tags
No related merge requests found
<?php
/**
* @file
* Perform updates once other modules have made their own updates.
*/
/**
* Clear Caches to reload services container, issue #3101732.
*/
function autologout_post_update_fix_login_redirection_path() {
drupal_flush_all_caches();
}
......@@ -3,7 +3,7 @@ services:
class: Drupal\autologout\EventSubscriber\AutologoutSubscriber
tags:
- {name: event_subscriber}
arguments: ['@autologout.manager', '@current_user', '@config.factory','@theme.manager','@datetime.time', '@request_stack']
arguments: ['@autologout.manager', '@current_user', '@config.factory','@theme.manager','@datetime.time', '@request_stack', '@language_manager']
autologout.manager:
class: Drupal\autologout\AutologoutManager
......
......@@ -11,6 +11,9 @@ use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\RedirectResponse;
/**
* Defines autologout Subscriber.
......@@ -59,6 +62,13 @@ class AutologoutSubscriber implements EventSubscriberInterface {
*/
protected $requestStack;
/**
* The language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* Constructs an AutologoutSubscriber object.
*
......@@ -74,14 +84,17 @@ class AutologoutSubscriber implements EventSubscriberInterface {
* The time service.
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
* The request stack service.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager.
*/
public function __construct(AutologoutManagerInterface $autologout, AccountInterface $account, ConfigFactory $config, ThemeManager $theme, TimeInterface $time, RequestStack $requestStack) {
public function __construct(AutologoutManagerInterface $autologout, AccountInterface $account, ConfigFactory $config, ThemeManager $theme, TimeInterface $time, RequestStack $requestStack, LanguageManagerInterface $language_manager) {
$this->autoLogoutManager = $autologout;
$this->currentUser = $account;
$this->config = $config;
$this->theme = $theme;
$this->time = $time;
$this->requestStack = $requestStack;
$this->languageManager = $language_manager;
}
/**
......@@ -104,6 +117,46 @@ class AutologoutSubscriber implements EventSubscriberInterface {
return;
}
// If user is not anonymous.
if ($uid != 0) {
$session = $this->requestStack->getCurrentRequest()->getSession();
$auto_redirect = $session->get('auto_redirect');
// Get http referer.
$referer = "";
$request = $this->requestStack->getCurrentRequest();
if ($request->server->get('HTTP_REFERER')) {
$referer = $request->server->get('HTTP_REFERER');
}
// Get query string from http referer url.
$parse_url = parse_url($referer, PHP_URL_QUERY);
// If http referer url has 'destination' and session is not set,
// then only redirect to user page if uid dosen't match.
if ((strpos($parse_url, 'destination') !== FALSE) && empty($auto_redirect)) {
parse_str($parse_url, $output);
$destination_uid = explode("/", $output['destination']);
// If array contains language code, remove it.
$languagecode = $this->languageManager->getCurrentLanguage()->getId();
if ($destination_uid[1] === $languagecode) {
unset($destination_uid[1]);
$destination_uid = array_values($destination_uid);
}
// If destination uid and actual uid does not match then,
// redirect to loggedin user page.
if (($destination_uid[1] == "user") && ($destination_uid[2] != $uid)) {
$auto_redirect = $session->set('auto_redirect', 1);
$login_url = Url::fromRoute('user.page', [], ['absolute' => TRUE])->toString();
// Redirect user to user page.
$response = new RedirectResponse($login_url);
$event->setResponse($response);
$event->stopPropagation();
}
}
}
if ($this->autoLogoutManager->preventJs()) {
return;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment