Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 4  | 
      CRAP |         | 
      0.00%  | 
      0 / 34  | 
     
| ConfigSubscriber |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 4  | 
      182 |         | 
      0.00%  | 
      0 / 34  | 
     
| __construct |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| onConfigSave |         | 
      0.00%  | 
      0 / 1  | 
      110 |         | 
      0.00%  | 
      0 / 25  | 
     |||
| setPathProcessorLanguage |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| getSubscribedEvents |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\language\EventSubscriber\ConfigSubscriber. | |
| */ | |
| namespace Drupal\language\EventSubscriber; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| use Drupal\Core\Language\Language; | |
| use Drupal\Core\Language\LanguageDefault; | |
| use Drupal\Core\Language\LanguageManagerInterface; | |
| use Drupal\Core\Config\ConfigCrudEvent; | |
| use Drupal\Core\Config\ConfigEvents; | |
| use Drupal\language\ConfigurableLanguageManager; | |
| use Drupal\language\HttpKernel\PathProcessorLanguage; | |
| use Drupal\language\LanguageNegotiatorInterface; | |
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
| /** | |
| * Deletes the container if default language has changed. | |
| */ | |
| class ConfigSubscriber implements EventSubscriberInterface { | |
| /** | |
| * The language manager. | |
| * | |
| * @var \Drupal\Core\Language\LanguageManagerInterface | |
| */ | |
| protected $languageManager; | |
| /** | |
| * The default language. | |
| * | |
| * @var \Drupal\Core\Language\LanguageDefault | |
| */ | |
| protected $languageDefault; | |
| /** | |
| * The configuration factory. | |
| * | |
| * @var \Drupal\Core\Config\ConfigFactoryInterface | |
| */ | |
| protected $configFactory; | |
| /** | |
| * The language negotiator. | |
| * | |
| * @var \Drupal\language\LanguageNegotiatorInterface | |
| */ | |
| protected $languageNegotiator; | |
| /** | |
| * The language path processor. | |
| * | |
| * @var \Drupal\language\HttpKernel\PathProcessorLanguage | |
| */ | |
| protected $pathProcessorLanguage; | |
| /** | |
| * Constructs a new class object. | |
| * | |
| * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
| * The language manager. | |
| * @param \Drupal\Core\Language\LanguageDefault $language_default | |
| * The default language. | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The configuration factory. | |
| * @param \Drupal\language\LanguageNegotiatorInterface $language_negotiator | |
| * The language negotiator. | |
| */ | |
| public function __construct(LanguageManagerInterface $language_manager, LanguageDefault $language_default, ConfigFactoryInterface $config_factory, LanguageNegotiatorInterface $language_negotiator) { | |
| $this->languageManager = $language_manager; | |
| $this->languageDefault = $language_default; | |
| $this->configFactory = $config_factory; | |
| $this->languageNegotiator = $language_negotiator; | |
| } | |
| /** | |
| * Causes the container to be rebuilt on the next request. | |
| * | |
| * This event subscriber assumes that the new default langcode and old default | |
| * langcode are valid langcodes. If the schema definition of either | |
| * system.site:default_langcode or language.negotiation::url.prefixes changes | |
| * then this event must be changed to work with both the old and new schema | |
| * definition so this event is update safe. | |
| * | |
| * @param ConfigCrudEvent $event | |
| * The configuration event. | |
| */ | |
| public function onConfigSave(ConfigCrudEvent $event) { | |
| $saved_config = $event->getConfig(); | |
| if ($saved_config->getName() == 'system.site' && $event->isChanged('default_langcode')) { | |
| $new_default_langcode = $saved_config->get('default_langcode'); | |
| $default_language = $this->configFactory->get('language.entity.' . $new_default_langcode); | |
| // During an import the language might not exist yet. | |
| if (!$default_language->isNew()) { | |
| $this->languageDefault->set(new Language($default_language->get())); | |
| $this->languageManager->reset(); | |
| // Directly update language negotiation settings instead of calling | |
| // language_negotiation_url_prefixes_update() to ensure that the code | |
| // obeys the hook_update_N() restrictions. | |
| $negotiation_config = $this->configFactory->getEditable('language.negotiation'); | |
| $negotiation_changed = FALSE; | |
| $url_prefixes = $negotiation_config->get('url.prefixes'); | |
| $old_default_langcode = $saved_config->getOriginal('default_langcode'); | |
| if (empty($url_prefixes[$old_default_langcode])) { | |
| $negotiation_config->set('url.prefixes.' . $old_default_langcode, $old_default_langcode); | |
| $negotiation_changed = TRUE; | |
| } | |
| if (empty($url_prefixes[$new_default_langcode])) { | |
| $negotiation_config->set('url.prefixes.' . $new_default_langcode, ''); | |
| $negotiation_changed = TRUE; | |
| } | |
| if ($negotiation_changed) { | |
| $negotiation_config->save(TRUE); | |
| } | |
| } | |
| // Trigger a container rebuild on the next request by invalidating it. | |
| ConfigurableLanguageManager::rebuildServices(); | |
| } | |
| elseif ($saved_config->getName() == 'language.types' && $event->isChanged('negotiation')) { | |
| // If the negotiation configuration changed the language negotiator and | |
| // the language path processor have to be reset so that they regenerate | |
| // the method instances and also sort them accordingly to the new config. | |
| $this->languageNegotiator->reset(); | |
| if (isset($this->pathProcessorLanguage)) { | |
| $this->pathProcessorLanguage->reset(); | |
| } | |
| } | |
| } | |
| /** | |
| * Injects the language path processors on multilingual site configuration. | |
| * | |
| * @param \Drupal\language\HttpKernel\PathProcessorLanguage $path_processor_language | |
| * The language path processor. | |
| */ | |
| public function setPathProcessorLanguage(PathProcessorLanguage $path_processor_language) { | |
| $this->pathProcessorLanguage = $path_processor_language; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| static function getSubscribedEvents() { | |
| $events[ConfigEvents::SAVE][] = array('onConfigSave', 0); | |
| return $events; | |
| } | |
| } |