class AnonymousRedirectSubscriber in Anonymous Redirect 8.2
Subscribes to kernel events and does the actual redirect.
@package Drupal\anonymous_redirect\EventSubscriber
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\anonymous_redirect\EventSubscriber\AnonymousRedirectSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
Expanded class hierarchy of AnonymousRedirectSubscriber
1 string reference to 'AnonymousRedirectSubscriber'
1 service uses AnonymousRedirectSubscriber
File
- src/
EventSubscriber/ AnonymousRedirectSubscriber.php, line 22
Namespace
Drupal\anonymous_redirect\EventSubscriberView source
class AnonymousRedirectSubscriber extends ControllerBase implements EventSubscriberInterface {
/**
* Current user account.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $account;
/**
* Path matcher service.
*
* @var \Drupal\Core\Path\PathMatcher
*/
protected $pathMatcher;
/**
* Language manager service.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* AnonymousRedirect constructor.
*
* @param \Drupal\Core\Session\AccountInterface $account
* The current user account.
* @param \Drupal\Core\Path\PathMatcher $pathMatcher
* The patch matcher service.
*/
public function __construct(AccountInterface $account, PathMatcher $pathMatcher, LanguageManagerInterface $languageManager) {
$this->account = $account;
$this->pathMatcher = $pathMatcher;
$this->languageManager = $languageManager;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = [
'redirectAnonymous',
100,
];
return $events;
}
/**
* Redirects anonymous users to the /user route.
*
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
* The response event.
*/
public function redirectAnonymous(GetResponseEvent $event) {
// Initialize the minimum amount of values since this runs on every request.
$config = $this
->config('anonymous_redirect.settings');
$redirectEnabled = $config
->get('enable_redirect');
// Fail as early as possible.
if (!$redirectEnabled || $this->account
->isAuthenticated() || $this
->state()
->get('system.maintenance_mode')) {
return;
}
// Now we know we need to redirect -- build all other needed variables.
$redirectUrl = $config
->get('redirect_url');
$redirectUrlOverridesText = $config
->get('redirect_url_overrides');
$redirectUrlOverrides = $redirectUrlOverridesText ? explode("\r\n", $redirectUrlOverridesText) : [];
$currentPath = $event
->getRequest()
->getPathInfo();
// Handle language prefix if present.
$currentLanguagePrefix = $this
->languageManager()
->getCurrentLanguage()
->getId();
// Check if the language prefix is present after the leading slash.
if (substr($currentPath, 1, strlen($currentLanguagePrefix)) == $currentLanguagePrefix) {
$currentPath = substr($currentPath, strlen($currentLanguagePrefix) + 1);
}
// Do nothing if the url is in the list of overrides.
if (in_array($currentPath, $redirectUrlOverrides) || $this->pathMatcher
->matchPath($currentPath, $redirectUrlOverridesText)) {
return;
}
// External URL must use TrustedRedirectResponse class.
if (UrlHelper::isExternal($redirectUrl)) {
$event
->setResponse(new TrustedRedirectResponse($redirectUrl));
return;
}
// Redirect the user to the front page.
if ($this
->isFrontPage($redirectUrl) && $currentPath !== Url::fromRoute("<front>")
->toString()) {
$event
->setResponse(new RedirectResponse(Url::fromRoute("<front>")
->toString()));
}
// Redirect the user the configured route.
if ($this
->isFrontPage($redirectUrl) == FALSE && strpos($currentPath, $redirectUrl) === FALSE) {
// If redirecting to the login page, redirect the visitor back to the
// requested path after a successful login.
if ($redirectUrl === Url::fromRoute('user.login')
->toString() && $currentPath !== '/') {
$options = [
'query' => [
'destination' => $currentPath,
],
];
$redirectUrl = Url::fromUserInput($redirectUrl, $options)
->toString();
}
$event
->setResponse(new RedirectResponse(Url::fromUri('internal:' . $redirectUrl)
->toString()));
}
}
/**
* Returns true if the entered string matches the configured front page route.
*
* @param string $urlString
* The URL to test.
*
* @return bool
* Whether the entered string matches.
*/
public function isFrontPage($urlString) {
if ($urlString == "<front>") {
return TRUE;
}
return FALSE;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AnonymousRedirectSubscriber:: |
protected | property | Current user account. | |
AnonymousRedirectSubscriber:: |
protected | property |
Language manager service. Overrides ControllerBase:: |
|
AnonymousRedirectSubscriber:: |
protected | property | Path matcher service. | |
AnonymousRedirectSubscriber:: |
public static | function | ||
AnonymousRedirectSubscriber:: |
public | function | Returns true if the entered string matches the configured front page route. | |
AnonymousRedirectSubscriber:: |
public | function | Redirects anonymous users to the /user route. | |
AnonymousRedirectSubscriber:: |
public | function | AnonymousRedirect constructor. | |
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
public static | function |
Instantiates a new instance of this class. Overrides ContainerInjectionInterface:: |
40 |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |