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; | |
| } | |
| } |