Chris@0: baseStorage = $storage; Chris@0: $this->eventDispatcher = $event_dispatcher; Chris@0: $this->typedConfigManager = $typed_config; Chris@17: // Prior to negotiation the override language should be the default Chris@0: // language. Chris@0: $this->language = $default_language->get(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function loadOverrides($names) { Chris@0: if ($this->language) { Chris@0: $storage = $this->getStorage($this->language->getId()); Chris@0: return $storage->readMultiple($names); Chris@0: } Chris@0: return []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getOverride($langcode, $name) { Chris@0: $storage = $this->getStorage($langcode); Chris@0: $data = $storage->read($name); Chris@0: Chris@0: $override = new LanguageConfigOverride( Chris@0: $name, Chris@0: $storage, Chris@0: $this->typedConfigManager, Chris@0: $this->eventDispatcher Chris@0: ); Chris@0: Chris@0: if (!empty($data)) { Chris@0: $override->initWithData($data); Chris@0: } Chris@0: return $override; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getStorage($langcode) { Chris@0: if (!isset($this->storages[$langcode])) { Chris@0: $this->storages[$langcode] = $this->baseStorage->createCollection($this->createConfigCollectionName($langcode)); Chris@0: } Chris@0: return $this->storages[$langcode]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getCacheSuffix() { Chris@0: return $this->language ? $this->language->getId() : NULL; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getLanguage() { Chris@0: return $this->language; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setLanguage(LanguageInterface $language = NULL) { Chris@0: $this->language = $language; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setLanguageFromDefault(LanguageDefault $language_default = NULL) { Chris@0: $this->language = $language_default ? $language_default->get() : NULL; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function installLanguageOverrides($langcode) { Chris@0: /** @var \Drupal\Core\Config\ConfigInstallerInterface $config_installer */ Chris@0: $config_installer = \Drupal::service('config.installer'); Chris@0: $config_installer->installCollectionDefaultConfig($this->createConfigCollectionName($langcode)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) { Chris@0: $langcode = $this->getLangcodeFromCollectionName($collection); Chris@0: return $this->getOverride($langcode, $name); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function addCollections(ConfigCollectionInfo $collection_info) { Chris@0: foreach (\Drupal::languageManager()->getLanguages() as $language) { Chris@0: $collection_info->addCollection($this->createConfigCollectionName($language->getId()), $this); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function onConfigSave(ConfigCrudEvent $event) { Chris@0: $config = $event->getConfig(); Chris@0: $name = $config->getName(); Chris@0: foreach (\Drupal::languageManager()->getLanguages() as $language) { Chris@0: $config_translation = $this->getOverride($language->getId(), $name); Chris@0: if (!$config_translation->isNew()) { Chris@0: $this->filterOverride($config, $config_translation); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function onConfigRename(ConfigRenameEvent $event) { Chris@0: $config = $event->getConfig(); Chris@0: $name = $config->getName(); Chris@0: $old_name = $event->getOldName(); Chris@0: foreach (\Drupal::languageManager()->getLanguages() as $language) { Chris@0: $config_translation = $this->getOverride($language->getId(), $old_name); Chris@0: if (!$config_translation->isNew()) { Chris@0: $saved_config = $config_translation->get(); Chris@0: $storage = $this->getStorage($language->getId()); Chris@0: $storage->write($name, $saved_config); Chris@0: $config_translation->delete(); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function onConfigDelete(ConfigCrudEvent $event) { Chris@0: $config = $event->getConfig(); Chris@0: $name = $config->getName(); Chris@0: foreach (\Drupal::languageManager()->getLanguages() as $language) { Chris@0: $config_translation = $this->getOverride($language->getId(), $name); Chris@0: if (!$config_translation->isNew()) { Chris@0: $config_translation->delete(); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getCacheableMetadata($name) { Chris@0: $metadata = new CacheableMetadata(); Chris@0: if ($this->language) { Chris@0: $metadata->setCacheContexts(['languages:language_interface']); Chris@0: } Chris@0: return $metadata; Chris@0: } Chris@0: Chris@0: }