class HiddenLanguageSubscriber in Hidden Language 2.x
Same name and namespace in other branches
- 8 src/EventSubscriber/HiddenLanguageSubscriber.php \Drupal\hidden_language\EventSubscriber\HiddenLanguageSubscriber
Hierarchy
- class \Drupal\hidden_language\EventSubscriber\HiddenLanguageSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
Expanded class hierarchy of HiddenLanguageSubscriber
1 string reference to 'HiddenLanguageSubscriber'
1 service uses HiddenLanguageSubscriber
File
- src/EventSubscriber/ HiddenLanguageSubscriber.php, line 15 
Namespace
Drupal\hidden_language\EventSubscriberView source
class HiddenLanguageSubscriber implements EventSubscriberInterface {
  /**
   * The current user.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $account;
  /**
   * Constructs a new hidden language subscriber.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   The current user.
   */
  public function __construct(AccountInterface $account) {
    $this->account = $account;
  }
  /**
   * Disallow access to hidden language.
   *
   * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
   */
  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();
          }
        }
      }
    }
  }
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = [
      'onKernelRequestCheckLanguageAccess',
    ];
    return $events;
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| HiddenLanguageSubscriber:: | protected | property | The current user. | |
| HiddenLanguageSubscriber:: | public static | function | ||
| HiddenLanguageSubscriber:: | public | function | Disallow access to hidden language. | |
| HiddenLanguageSubscriber:: | public | function | Constructs a new hidden language subscriber. | 
