Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / layout_builder / src / Cache / LayoutBuilderIsActiveCacheContext.php
diff --git a/web/core/modules/layout_builder/src/Cache/LayoutBuilderIsActiveCacheContext.php b/web/core/modules/layout_builder/src/Cache/LayoutBuilderIsActiveCacheContext.php
new file mode 100644 (file)
index 0000000..3c3bc25
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+namespace Drupal\layout_builder\Cache;
+
+use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Cache\Context\CalculatedCacheContextInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\layout_builder\OverridesSectionStorageInterface;
+
+/**
+ * Determines whether Layout Builder is active for a given entity type or not.
+ *
+ * Cache context ID: 'layout_builder_is_active:%entity_type_id', e.g.
+ * 'layout_builder_is_active:node' (to vary by whether the Node entity type has
+ * Layout Builder enabled).
+ */
+class LayoutBuilderIsActiveCacheContext implements CalculatedCacheContextInterface {
+
+  /**
+   * The current route match.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
+  /**
+   * LayoutBuilderCacheContext constructor.
+   *
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   *   The current route match.
+   */
+  public function __construct(RouteMatchInterface $route_match) {
+    $this->routeMatch = $route_match;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getLabel() {
+    return t('Layout Builder');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContext($entity_type_id = NULL) {
+    if (!$entity_type_id) {
+      throw new \LogicException('Missing entity type ID');
+    }
+
+    $display = $this->getDisplay($entity_type_id);
+    return ($display && $display->isOverridable()) ? '1' : '0';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheableMetadata($entity_type_id = NULL) {
+    if (!$entity_type_id) {
+      throw new \LogicException('Missing entity type ID');
+    }
+
+    $cacheable_metadata = new CacheableMetadata();
+    if ($display = $this->getDisplay($entity_type_id)) {
+      $cacheable_metadata->addCacheableDependency($display);
+    }
+    return $cacheable_metadata;
+  }
+
+  /**
+   * Returns the entity view display for a given entity type and view mode.
+   *
+   * @param string $entity_type_id
+   *   The entity type ID.
+   *
+   * @return \Drupal\layout_builder\Entity\LayoutEntityDisplayInterface|null
+   *   The entity view display, if it exists.
+   */
+  protected function getDisplay($entity_type_id) {
+    if ($entity = $this->routeMatch->getParameter($entity_type_id)) {
+      if ($entity instanceof OverridesSectionStorageInterface) {
+        return $entity->getDefaultSectionStorage();
+      }
+    }
+  }
+
+}