Mercurial > hg > isophonics-drupal-site
view core/modules/layout_builder/src/Cache/LayoutBuilderIsActiveCacheContext.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 1fec387a4317 |
children | af1871eacc83 |
line wrap: on
line source
<?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(); } } } }