Version 1
[yaffs-website] / web / core / lib / Drupal / Core / Cache / Context / MenuActiveTrailsCacheContext.php
diff --git a/web/core/lib/Drupal/Core/Cache/Context/MenuActiveTrailsCacheContext.php b/web/core/lib/Drupal/Core/Cache/Context/MenuActiveTrailsCacheContext.php
new file mode 100644 (file)
index 0000000..db31384
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+namespace Drupal\Core\Cache\Context;
+
+use Drupal\Core\Cache\CacheableMetadata;
+use Symfony\Component\DependencyInjection\ContainerAwareInterface;
+use Symfony\Component\DependencyInjection\ContainerAwareTrait;
+
+/**
+ * Defines the MenuActiveTrailsCacheContext service.
+ *
+ * This class is container-aware to avoid initializing the 'menu.active_trails'
+ * service (and its dependencies) when it is not necessary.
+ */
+class MenuActiveTrailsCacheContext implements CalculatedCacheContextInterface, ContainerAwareInterface {
+
+  use ContainerAwareTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getLabel() {
+    return t("Active menu trail");
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContext($menu_name = NULL) {
+    if (!$menu_name) {
+      throw new \LogicException('No menu name provided for menu.active_trails cache context.');
+    }
+
+    $active_trail = $this->container->get('menu.active_trail')
+      ->getActiveTrailIds($menu_name);
+    return 'menu_trail.' . $menu_name . '|' . implode('|', $active_trail);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheableMetadata($menu_name = NULL) {
+    if (!$menu_name) {
+      throw new \LogicException('No menu name provided for menu.active_trails cache context.');
+    }
+    $cacheable_metadata = new CacheableMetadata();
+    return $cacheable_metadata->setCacheTags(["config:system.menu.$menu_name"]);
+  }
+
+}