public function RedirectHomepageSubscriber::checkForHomepageRedirect in Open Social 10.3.x
Same name and namespace in other branches
- 8.9 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.2 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.3 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.4 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.5 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.6 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.7 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 8.8 modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 10.0.x modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 10.1.x modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
- 10.2.x modules/custom/alternative_frontpage/src/EventSubscriber/RedirectHomepageSubscriber.php \Drupal\alternative_frontpage\EventSubscriber\RedirectHomepageSubscriber::checkForHomepageRedirect()
This method is called whenever the request event is dispatched.
Parameters
\Symfony\Component\EventDispatcher\Event $event: Triggering event.
File
- modules/custom/ alternative_frontpage/ src/ EventSubscriber/ RedirectHomepageSubscriber.php, line 117 
Class
- RedirectHomepageSubscriber
- Class RedirectHomepageSubscriber.
Namespace
Drupal\alternative_frontpage\EventSubscriberCode
public function checkForHomepageRedirect(Event $event) {
  // Make sure front page module is not run when using cli or doing install.
  if (PHP_SAPI === 'cli' || InstallerKernel::installationAttempted()) {
    return;
  }
  // Don't run when site is in maintenance mode.
  if ($this->state
    ->get('system.maintenance_mode')) {
    return;
  }
  // Ignore non index.php requests (like cron).
  if (!empty($_SERVER['SCRIPT_FILENAME']) && realpath(DRUPAL_ROOT . '/index.php') != realpath($_SERVER['SCRIPT_FILENAME'])) {
    return;
  }
  /** @var \Symfony\Component\HttpFoundation\Request $request */
  $request = $event
    ->getRequest();
  $request_path = $request
    ->getPathInfo();
  $frontpage_an = $this->siteSettings
    ->get('page.front');
  if ($request_path === $frontpage_an || $request_path === '/') {
    $frontpage_lu = $this->alternativeFrontpageSettings
      ->get('frontpage_for_authenticated_user');
    if ($frontpage_an === $frontpage_lu) {
      return;
    }
    if ($frontpage_lu && $this->currentUser
      ->isAuthenticated()) {
      // Check if sitemanager, or content manager are
      // previewing the anonymous page.
      // This is needed because the redirect happens twice, so we
      // need to know if we did the redirect.
      $isPreview = $request->query
        ->get('preview');
      if ($isPreview) {
        return;
      }
      // Don't redirect site managers,content managers so they
      // can preview the anonymous page.
      $roles = [
        'sitemanager',
        'contentmananger',
      ];
      if ($this->currentUser
        ->id() == "1" || array_intersect($roles, $this->currentUser
        ->getRoles()) && $request_path == $frontpage_an) {
        $this->messenger
          ->addWarning($this
          ->t("This page is redirected to @url_link, but we deferred the redirect to give you an opportunity to edit the content.", [
          '@url_link' => $frontpage_lu,
        ]));
        $cacheContext = [
          'user.roles:sitemanager',
          'user.roles:contentmanager',
        ];
        /** @var string $frontpage_an */
        $redirectUrl = $frontpage_an . '?preview=true';
        $event
          ->setResponse($this
          ->createRedirectResponse($cacheContext, $redirectUrl));
        return;
      }
      $cacheContext = [
        'user.roles:anonymous',
      ];
      /** @var string $frontpage_lu */
      $event
        ->setResponse($this
        ->createRedirectResponse($cacheContext, $frontpage_lu));
    }
  }
}