620787b6bbdbed9c4903de8099362b652d000a39
[yaffs-website] / web / core / lib / Drupal / Core / Cache / Context / LanguagesCacheContext.php
1 <?php
2
3 namespace Drupal\Core\Cache\Context;
4
5 use Drupal\Core\Cache\CacheableMetadata;
6 use Drupal\Core\Language\LanguageManagerInterface;
7
8 /**
9  * Defines the LanguagesCacheContext service, for "per language" caching.
10  */
11 class LanguagesCacheContext implements CalculatedCacheContextInterface {
12
13   /**
14    * The language manager.
15    *
16    * @var \Drupal\Core\Language\LanguageManagerInterface
17    */
18   protected $languageManager;
19
20   /**
21    * Constructs a new LanguagesCacheContext service.
22    *
23    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
24    *   The language manager.
25    */
26   public function __construct(LanguageManagerInterface $language_manager) {
27     $this->languageManager = $language_manager;
28   }
29
30   /**
31    * {@inheritdoc}
32    */
33   public static function getLabel() {
34     return t('Language');
35   }
36
37   /**
38    * {@inheritdoc}
39    *
40    * $type can be NULL, or one of the language types supported by the language
41    * manager, typically:
42    * - LanguageInterface::TYPE_INTERFACE
43    * - LanguageInterface::TYPE_CONTENT
44    * - LanguageInterface::TYPE_URL
45    *
46    * @see \Drupal\Core\Language\LanguageManagerInterface::getLanguageTypes()
47    *
48    * @throws \RuntimeException
49    *   In case an invalid language type is specified.
50    */
51   public function getContext($type = NULL) {
52     if ($type === NULL) {
53       $context_parts = [];
54       if ($this->languageManager->isMultilingual()) {
55         foreach ($this->languageManager->getLanguageTypes() as $type) {
56           $context_parts[] = $this->languageManager->getCurrentLanguage($type)->getId();
57         }
58       }
59       else {
60         $context_parts[] = $this->languageManager->getCurrentLanguage()->getId();
61       }
62       return implode(',', $context_parts);
63     }
64     else {
65       $language_types = $this->languageManager->getDefinedLanguageTypesInfo();
66       if (!isset($language_types[$type])) {
67         throw new \RuntimeException(sprintf('The language type "%s" is invalid.', $type));
68       }
69       return $this->languageManager->getCurrentLanguage($type)->getId();
70     }
71   }
72
73   /**
74    * {@inheritdoc}
75    */
76   public function getCacheableMetadata($type = NULL) {
77     return new CacheableMetadata();
78   }
79
80 }