Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 15  | 
      CRAP |         | 
      0.00%  | 
      0 / 85  | 
     
| LanguageConfigFactoryOverride |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 15  | 
      812 |         | 
      0.00%  | 
      0 / 85  | 
     
| __construct |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| loadOverrides |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 6  | 
     |||
| getOverride |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 13  | 
     |||
| getStorage |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| getCacheSuffix |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| getLanguage |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| setLanguage |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| setLanguageFromDefault |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| installLanguageOverrides |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| createConfigObject |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| addCollections |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| onConfigSave |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 9  | 
     |||
| onConfigRename |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 13  | 
     |||
| onConfigDelete |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 9  | 
     |||
| getCacheableMetadata |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 6  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\language\Config\LanguageConfigFactoryOverride. | |
| */ | |
| namespace Drupal\language\Config; | |
| use Drupal\Core\Cache\CacheableMetadata; | |
| use Drupal\Core\Config\ConfigCollectionInfo; | |
| use Drupal\Core\Config\ConfigCrudEvent; | |
| use Drupal\Core\Config\ConfigFactoryOverrideBase; | |
| use Drupal\Core\Config\ConfigRenameEvent; | |
| use Drupal\Core\Config\StorageInterface; | |
| use Drupal\Core\Config\TypedConfigManagerInterface; | |
| use Drupal\Core\Language\LanguageDefault; | |
| use Drupal\Core\Language\LanguageInterface; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
| /** | |
| * Provides language overrides for the configuration factory. | |
| */ | |
| class LanguageConfigFactoryOverride extends ConfigFactoryOverrideBase implements LanguageConfigFactoryOverrideInterface, EventSubscriberInterface { | |
| use LanguageConfigCollectionNameTrait; | |
| /** | |
| * The configuration storage. | |
| * | |
| * Do not access this directly. Should be accessed through self::getStorage() | |
| * so that the cache of storages per langcode is used. | |
| * | |
| * @var \Drupal\Core\Config\StorageInterface | |
| */ | |
| protected $baseStorage; | |
| /** | |
| * An array of configuration storages keyed by langcode. | |
| * | |
| * @var \Drupal\Core\Config\StorageInterface[] | |
| */ | |
| protected $storages; | |
| /** | |
| * The typed config manager. | |
| * | |
| * @var \Drupal\Core\Config\TypedConfigManagerInterface | |
| */ | |
| protected $typedConfigManager; | |
| /** | |
| * An event dispatcher instance to use for configuration events. | |
| * | |
| * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface | |
| */ | |
| protected $eventDispatcher; | |
| /** | |
| * The language object used to override configuration data. | |
| * | |
| * @var \Drupal\Core\Language\LanguageInterface | |
| */ | |
| protected $language; | |
| /** | |
| * Constructs the LanguageConfigFactoryOverride object. | |
| * | |
| * @param \Drupal\Core\Config\StorageInterface $storage | |
| * The configuration storage engine. | |
| * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher | |
| * An event dispatcher instance to use for configuration events. | |
| * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config | |
| * The typed configuration manager. | |
| */ | |
| public function __construct(StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config) { | |
| $this->baseStorage = $storage; | |
| $this->eventDispatcher = $event_dispatcher; | |
| $this->typedConfigManager = $typed_config; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function loadOverrides($names) { | |
| if ($this->language) { | |
| $storage = $this->getStorage($this->language->getId()); | |
| return $storage->readMultiple($names); | |
| } | |
| return array(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOverride($langcode, $name) { | |
| $storage = $this->getStorage($langcode); | |
| $data = $storage->read($name); | |
| $override = new LanguageConfigOverride( | |
| $name, | |
| $storage, | |
| $this->typedConfigManager, | |
| $this->eventDispatcher | |
| ); | |
| if (!empty($data)) { | |
| $override->initWithData($data); | |
| } | |
| return $override; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getStorage($langcode) { | |
| if (!isset($this->storages[$langcode])) { | |
| $this->storages[$langcode] = $this->baseStorage->createCollection($this->createConfigCollectionName($langcode)); | |
| } | |
| return $this->storages[$langcode]; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCacheSuffix() { | |
| return $this->language ? $this->language->getId() : NULL; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getLanguage() { | |
| return $this->language; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setLanguage(LanguageInterface $language = NULL) { | |
| $this->language = $language; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setLanguageFromDefault(LanguageDefault $language_default = NULL) { | |
| $this->language = $language_default ? $language_default->get() : NULL; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function installLanguageOverrides($langcode) { | |
| /** @var \Drupal\Core\Config\ConfigInstallerInterface $config_installer */ | |
| $config_installer = \Drupal::service('config.installer'); | |
| $config_installer->installCollectionDefaultConfig($this->createConfigCollectionName($langcode)); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) { | |
| $langcode = $this->getLangcodeFromCollectionName($collection); | |
| return $this->getOverride($langcode, $name); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addCollections(ConfigCollectionInfo $collection_info) { | |
| foreach (\Drupal::languageManager()->getLanguages() as $language) { | |
| $collection_info->addCollection($this->createConfigCollectionName($language->getId()), $this); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function onConfigSave(ConfigCrudEvent $event) { | |
| $config = $event->getConfig(); | |
| $name = $config->getName(); | |
| foreach (\Drupal::languageManager()->getLanguages() as $language) { | |
| $config_translation = $this->getOverride($language->getId(), $name); | |
| if (!$config_translation->isNew()) { | |
| $this->filterOverride($config, $config_translation); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function onConfigRename(ConfigRenameEvent $event) { | |
| $config = $event->getConfig(); | |
| $name = $config->getName(); | |
| $old_name = $event->getOldName(); | |
| foreach (\Drupal::languageManager()->getLanguages() as $language) { | |
| $config_translation = $this->getOverride($language->getId(), $old_name); | |
| if (!$config_translation->isNew()) { | |
| $saved_config = $config_translation->get(); | |
| $storage = $this->getStorage($language->getId()); | |
| $storage->write($name, $saved_config); | |
| $config_translation->delete(); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function onConfigDelete(ConfigCrudEvent $event) { | |
| $config = $event->getConfig(); | |
| $name = $config->getName(); | |
| foreach (\Drupal::languageManager()->getLanguages() as $language) { | |
| $config_translation = $this->getOverride($language->getId(), $name); | |
| if (!$config_translation->isNew()) { | |
| $config_translation->delete(); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCacheableMetadata($name) { | |
| $metadata = new CacheableMetadata(); | |
| if ($this->language) { | |
| $metadata->setCacheContexts(['languages:language_interface']); | |
| } | |
| return $metadata; | |
| } | |
| } |