You are here

public function HiddenLanguageSubscriber::onKernelRequestCheckLanguageAccess in Hidden Language 2.x

Same name and namespace in other branches
  1. 8 src/EventSubscriber/HiddenLanguageSubscriber.php \Drupal\hidden_language\EventSubscriber\HiddenLanguageSubscriber::onKernelRequestCheckLanguageAccess()

Disallow access to hidden language.

Parameters

\Symfony\Component\HttpKernel\Event\GetResponseEvent $event:

File

src/EventSubscriber/HiddenLanguageSubscriber.php, line 39

Class

HiddenLanguageSubscriber

Namespace

Drupal\hidden_language\EventSubscriber

Code

public function onKernelRequestCheckLanguageAccess(GetResponseEvent $event) {
  if ($event
    ->getRequestType() === HttpKernelInterface::MASTER_REQUEST) {
    $route_name = RouteMatch::createFromRequest($event
      ->getRequest())
      ->getRouteName();
    $path = $event
      ->getRequest()
      ->getPathInfo();
    $arrayRoute = array(
      'user.login',
      'user.pass',
      'user.register',
    );
    $arrayPath = array();
    $settingsLanguage = \Drupal::config('hidden_language.settings');

    // Check if the route exists and do merge to login routs
    if ($settingsLanguage
      ->get('route_name')) {
      $arrayRoute = array_merge(json_decode($settingsLanguage
        ->get('route_name')), $arrayRoute);
    }

    // Check if the path exists
    if ($settingsLanguage
      ->get('path')) {
      $arrayPath = json_decode($settingsLanguage
        ->get('path'));
    }

    // Don't check access if user is trying to log in, register or reset password.
    if ($this->account
      ->isAuthenticated() || !in_array($route_name, $arrayRoute) && !in_array($path, $arrayPath)) {
      $currentLanguage = \Drupal::languageManager()
        ->getCurrentLanguage()
        ->getId();

      // Check if user has access to hidden languages.
      if (!$this->account
        ->hasPermission('access all hidden languages') && !$this->account
        ->hasPermission("access hidden language {$currentLanguage}")) {

        /** @var ConfigurableLanguage $language */
        $language = ConfigurableLanguage::load($currentLanguage);
        if ($language
          ->getThirdPartySetting('hidden_language', 'hidden', FALSE)) {
          throw new NotFoundHttpException();
        }
      }
    }
  }
}