Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / language / src / EventSubscriber / LanguageRequestSubscriber.php
1 <?php
2
3 namespace Drupal\language\EventSubscriber;
4
5 use Drupal\Core\DrupalKernelInterface;
6 use Drupal\Core\Session\AccountInterface;
7 use Drupal\Core\StringTranslation\Translator\TranslatorInterface;
8 use Drupal\language\ConfigurableLanguageManagerInterface;
9 use Drupal\language\LanguageNegotiatorInterface;
10 use Symfony\Component\HttpKernel\HttpKernelInterface;
11 use Symfony\Component\HttpKernel\KernelEvents;
12 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
13 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
14
15 /**
16  * Sets the $request property on the language manager.
17  */
18 class LanguageRequestSubscriber implements EventSubscriberInterface {
19
20   /**
21    * The language manager service.
22    *
23    * @var \Drupal\language\ConfigurableLanguageManagerInterface
24    */
25   protected $languageManager;
26
27   /**
28    * The language negotiator.
29    *
30    * @var \Drupal\language\LanguageNegotiatorInterface
31    */
32   protected $negotiator;
33
34   /**
35    * The translation service.
36    *
37    * @var \Drupal\Core\StringTranslation\Translator\TranslatorInterface;
38    */
39   protected $translation;
40
41   /**
42    * The current active user.
43    *
44    * @var \Drupal\Core\Session\AccountInterface
45    */
46   protected $currentUser;
47
48   /**
49    * Constructs a LanguageRequestSubscriber object.
50    *
51    * @param \Drupal\language\ConfigurableLanguageManagerInterface $language_manager
52    *   The language manager service.
53    * @param \Drupal\language\LanguageNegotiatorInterface $negotiator
54    *   The language negotiator.
55    * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation
56    *   The translation service.
57    * @param \Drupal\Core\Session\AccountInterface $current_user
58    *   The current active user.
59    */
60   public function __construct(ConfigurableLanguageManagerInterface $language_manager, LanguageNegotiatorInterface $negotiator, TranslatorInterface $translation, AccountInterface $current_user) {
61     $this->languageManager = $language_manager;
62     $this->negotiator = $negotiator;
63     $this->translation = $translation;
64     $this->currentUser = $current_user;
65   }
66
67   /**
68    * Initializes the language manager at the beginning of the request.
69    *
70    * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
71    *   The Event to process.
72    */
73   public function onKernelRequestLanguage(GetResponseEvent $event) {
74     if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) {
75       $this->setLanguageOverrides();
76     }
77   }
78
79   /**
80    * Initializes config overrides whenever the service container is rebuilt.
81    */
82   public function onContainerInitializeSubrequestFinished() {
83     $this->setLanguageOverrides();
84   }
85
86   /**
87    * Sets the language for config overrides on the language manager.
88    */
89   private function setLanguageOverrides() {
90     $this->negotiator->setCurrentUser($this->currentUser);
91     if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) {
92       $this->languageManager->setNegotiator($this->negotiator);
93       $this->languageManager->setConfigOverrideLanguage($this->languageManager->getCurrentLanguage());
94     }
95     // After the language manager has initialized, set the default langcode for
96     // the string translations.
97     $langcode = $this->languageManager->getCurrentLanguage()->getId();
98     $this->translation->setDefaultLangcode($langcode);
99   }
100
101   /**
102    * Registers the methods in this class that should be listeners.
103    *
104    * @return array
105    *   An array of event listener definitions.
106    */
107   public static function getSubscribedEvents() {
108     $events[KernelEvents::REQUEST][] = ['onKernelRequestLanguage', 255];
109     $events[DrupalKernelInterface::CONTAINER_INITIALIZE_SUBREQUEST_FINISHED][] = ['onContainerInitializeSubrequestFinished', 255];
110
111     return $events;
112   }
113
114 }