Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / language / src / EventSubscriber / LanguageRequestSubscriber.php
index 37a6048a6645d084cefa80f3019d3d8099fe44c7..b1effda1db7fe1ae0e10f934baf3c1c0606564cc 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace Drupal\language\EventSubscriber;
 
+use Drupal\Core\DrupalKernelInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\StringTranslation\Translator\TranslatorInterface;
 use Drupal\language\ConfigurableLanguageManagerInterface;
@@ -40,7 +41,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface {
   /**
    * The current active user.
    *
-   * @return \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Session\AccountInterface
    */
   protected $currentUser;
 
@@ -51,7 +52,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface {
    *   The language manager service.
    * @param \Drupal\language\LanguageNegotiatorInterface $negotiator
    *   The language negotiator.
-   * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation;
+   * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation
    *   The translation service.
    * @param \Drupal\Core\Session\AccountInterface $current_user
    *   The current active user.
@@ -64,25 +65,39 @@ class LanguageRequestSubscriber implements EventSubscriberInterface {
   }
 
   /**
-   * Sets the default language and initializes configuration overrides.
+   * Initializes the language manager at the beginning of the request.
    *
    * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
    *   The Event to process.
    */
   public function onKernelRequestLanguage(GetResponseEvent $event) {
     if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) {
-      $this->negotiator->setCurrentUser($this->currentUser);
-      if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) {
-        $this->languageManager->setNegotiator($this->negotiator);
-        $this->languageManager->setConfigOverrideLanguage($this->languageManager->getCurrentLanguage());
-      }
-      // After the language manager has initialized, set the default langcode
-      // for the string translations.
-      $langcode = $this->languageManager->getCurrentLanguage()->getId();
-      $this->translation->setDefaultLangcode($langcode);
+      $this->setLanguageOverrides();
     }
   }
 
+  /**
+   * Initializes config overrides whenever the service container is rebuilt.
+   */
+  public function onContainerInitializeSubrequestFinished() {
+    $this->setLanguageOverrides();
+  }
+
+  /**
+   * Sets the language for config overrides on the language manager.
+   */
+  private function setLanguageOverrides() {
+    $this->negotiator->setCurrentUser($this->currentUser);
+    if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) {
+      $this->languageManager->setNegotiator($this->negotiator);
+      $this->languageManager->setConfigOverrideLanguage($this->languageManager->getCurrentLanguage());
+    }
+    // After the language manager has initialized, set the default langcode for
+    // the string translations.
+    $langcode = $this->languageManager->getCurrentLanguage()->getId();
+    $this->translation->setDefaultLangcode($langcode);
+  }
+
   /**
    * Registers the methods in this class that should be listeners.
    *
@@ -91,6 +106,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface {
    */
   public static function getSubscribedEvents() {
     $events[KernelEvents::REQUEST][] = ['onKernelRequestLanguage', 255];
+    $events[DrupalKernelInterface::CONTAINER_INITIALIZE_SUBREQUEST_FINISHED][] = ['onContainerInitializeSubrequestFinished', 255];
 
     return $events;
   }