Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / Theme / ThemeNegotiatorWrapper.php
index 7b427f180448d49e3d7a69325a0c524afb1e1375..8a96b08df1ad1c684eeef02202cc191d879df2e2 100644 (file)
@@ -19,7 +19,25 @@ class ThemeNegotiatorWrapper extends ThemeNegotiator {
    * {@inheritdoc}
    */
   public function determineActiveTheme(RouteMatchInterface $route_match) {
-    foreach ($this->getSortedNegotiators() as $negotiator) {
+    // This method has changed in Drupal 8.4.x, to maintain compatibility with
+    // Drupal 8.3.x we check the existence or not of the classResolver
+    // property.
+    // TODO: remove this logic when we decide to drop Drupal 8.3.x support.
+    if (property_exists($this, 'classResolver')) {
+      $classResolver = $this->classResolver;
+      $negotiators = $this->negotiators;
+    } else {
+      $classResolver = \Drupal::classResolver();
+      $negotiators = $this->getSortedNegotiators();
+    }
+
+    foreach ($negotiators as $negotiator_id) {
+      if (property_exists($this, 'classResolver')) {
+        $negotiator = $classResolver->getInstanceFromDefinition($negotiator_id);
+      } else {
+        $negotiator = $negotiator_id;
+      }
+
       if ($negotiator->applies($route_match)) {
         $theme = $negotiator->determineActiveTheme($route_match);
         if ($theme !== NULL && $this->themeAccess->checkAccess($theme)) {
@@ -36,4 +54,27 @@ class ThemeNegotiatorWrapper extends ThemeNegotiator {
   public function getNegotiator() {
     return $this->negotiator;
   }
+
+  /**
+   * Returns the sorted array of theme negotiators.
+   *
+   * @return array|\Drupal\Core\Theme\ThemeNegotiatorInterface[]
+   *   An array of theme negotiator objects.
+   *
+   * TODO: remove this method when we decide to drop Drupal 8.3.x support.
+   */
+  protected function getSortedNegotiators() {
+    if (!isset($this->sortedNegotiators)) {
+      // Sort the negotiators according to priority.
+      krsort($this->negotiators);
+      // Merge nested negotiators from $this->negotiators into
+      // $this->sortedNegotiators.
+      $this->sortedNegotiators = [];
+      foreach ($this->negotiators as $builders) {
+        $this->sortedNegotiators = array_merge($this->sortedNegotiators, $builders);
+      }
+    }
+    return $this->sortedNegotiators;
+  }
+
 }