Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Cache/RefinableCacheableDependencyTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Cache/RefinableCacheableDependencyTrait.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,96 @@ +<?php + +namespace Drupal\Core\Cache; + +/** + * Trait for \Drupal\Core\Cache\RefinableCacheableDependencyInterface. + */ +trait RefinableCacheableDependencyTrait { + + /** + * Cache contexts. + * + * @var string[] + */ + protected $cacheContexts = []; + + /** + * Cache tags. + * + * @var string[] + */ + protected $cacheTags = []; + + /** + * Cache max-age. + * + * @var int + */ + protected $cacheMaxAge = Cache::PERMANENT; + + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return $this->cacheTags; + } + + /** + * {@inheritdoc} + */ + public function getCacheContexts() { + return $this->cacheContexts; + } + + /** + * {@inheritdoc} + */ + public function getCacheMaxAge() { + return $this->cacheMaxAge; + } + + /** + * {@inheritdoc} + */ + public function addCacheableDependency($other_object) { + if ($other_object instanceof CacheableDependencyInterface) { + $this->addCacheContexts($other_object->getCacheContexts()); + $this->addCacheTags($other_object->getCacheTags()); + $this->mergeCacheMaxAge($other_object->getCacheMaxAge()); + } + else { + // Not a cacheable dependency, this can not be cached. + $this->cacheMaxAge = 0; + } + return $this; + } + + /** + * {@inheritdoc} + */ + public function addCacheContexts(array $cache_contexts) { + if ($cache_contexts) { + $this->cacheContexts = Cache::mergeContexts($this->cacheContexts, $cache_contexts); + } + return $this; + } + + /** + * {@inheritdoc} + */ + public function addCacheTags(array $cache_tags) { + if ($cache_tags) { + $this->cacheTags = Cache::mergeTags($this->cacheTags, $cache_tags); + } + return $this; + } + + /** + * {@inheritdoc} + */ + public function mergeCacheMaxAge($max_age) { + $this->cacheMaxAge = Cache::mergeMaxAges($this->cacheMaxAge, $max_age); + return $this; + } + +}