Loading domain_language_negotiation.module +8 −10 Original line number Diff line number Diff line Loading @@ -12,7 +12,6 @@ use Drupal\domain\DomainInterface; * Implements hook_language_switch_links_alter(). */ function domain_language_negotiation_language_switch_links_alter(array &$links, $type) { if ($type === 'language_interface') { /** @var \Drupal\domain\DomainNegotiatorInterface $negotiator */ $negotiator = \Drupal::service('domain.negotiator'); Loading @@ -26,7 +25,6 @@ function domain_language_negotiation_language_switch_links_alter(array &$links, } } } } /** * Implements hook_domain_operations(). Loading src/DomainLanguageOverrider.php +4 −28 Original line number Diff line number Diff line Loading @@ -82,34 +82,10 @@ class DomainLanguageOverrider implements ConfigFactoryOverrideInterface { // Initialize site settings. $overrides[$name] = $configs[$name]; } } elseif ($name === 'language.negotiation') { $languages = \Drupal::config('domain.language.' . $this->domain->getOriginalId() . '.' . $name)->get( 'languages' ); // Setting array as null will reset keys. if (!empty($languages)) { // @todo use alter mechanism to properly remove array entries. // @see: https://www.drupal.org/node/2829242 $overrides[$name]['url']['prefixes'] = NULL; $overrides[$name]['url']['domains'] = NULL; // Set global config var to use second override mechanisms. if ($this->nestedLevel === 1) { $negotiations = \Drupal::config($name)->getRawData(); // @todo use 'Drupal\Core\Site\Settings' when available. // @see: https://www.drupal.org/node/2183591 $config[$name]['url']['prefixes'] = array_intersect_key( $negotiations['url']['prefixes'], $languages ); $config[$name]['url']['domains'] = array_intersect_key( $negotiations['url']['domains'], $languages ); } $languageConfigOverride = \Drupal::config('domain.language.' . $this->domain->getOriginalId() . '.language.negotiation')->getRawData(); if (!empty($languageConfigOverride['default_langcode'])) { $overrides[$name]['default_langcode'] = $languageConfigOverride['default_langcode']; } } } Loading src/Form/DomainLanguageForm.php +19 −38 Original line number Diff line number Diff line Loading @@ -80,7 +80,10 @@ class DomainLanguageForm extends FormBase { // Load the domain default language. $config = $this->config('domain.config.' . $domain->getOriginalId() . '.system.site')->getRawData(); $defaultLanguage = $config['default_langcode'] ?? self::DEFAULT_LANGUAGE_SITE; $defaultOldLanguage = $config['default_langcode'] ?? self::DEFAULT_LANGUAGE_SITE; $config = $this->config('domain.language.' . $domain->getOriginalId() . '.language.negotiation'); $data = $config->getRawData(); /** @var \Drupal\Core\Language\LanguageInterface $defaultLanguageRaw */ $defaultLanguageRaw = $this->languageManager->getLanguage($defaultRaw); Loading Loading @@ -108,7 +111,7 @@ class DomainLanguageForm extends FormBase { 'This will override the default language: %default.', ['%default' => $defaultLanguageRaw->getName()] ), '#default_value' => $defaultLanguage, '#default_value' => $data['default_langcode'] ?? $defaultOldLanguage, '#required' => TRUE, ]; Loading @@ -117,9 +120,6 @@ class DomainLanguageForm extends FormBase { $options[$language->getId()] = $language->getName(); } $config = $this->config('domain.language.' . $domain->getOriginalId() . '.language.negotiation'); $data = $config->getRawData(); $form['languages'] = [ '#type' => 'checkboxes', '#title' => $this->t('Languages allowed'), Loading Loading @@ -157,52 +157,33 @@ class DomainLanguageForm extends FormBase { $languages = array_filter($form_state->getValue('languages')); // Set default language into domain config file. $config = $this->configFactory()->getEditable('domain.config.' . $domain_id . '.system.site'); if ($default_language === self::DEFAULT_LANGUAGE_SITE) { $data = $config->getRawData(); unset($data['default_langcode']); $config->setData($data); if (empty($data)) { // Delete if config is now empty. $config->delete(); } else { $config->save(); } $config = $this->configFactory()->getEditable('domain.language.' . $domain_id . '.language.negotiation'); if ($default_language !== self::DEFAULT_LANGUAGE_SITE) { $config->set('default_langcode', $default_language); $languages[$default_language] = $default_language; } else { $config->set('default_langcode', $default_language); $config->save(); $config->clear('default_langcode'); } // Set default language into domain language file. $config = $this->configFactory()->getEditable('domain.language.' . $domain_id . '.language.negotiation'); if (empty($languages)) { $config->delete(); if (!empty($languages)) { $config->set('languages', $languages); } else { $languages[$default_language] = $default_language; $config->set('languages', $languages); $config->save(); $config->clear('languages'); } // Remove any prefixes and domains in negotiation settings from // domain.config file to avoid any unexpected override. $config = $this->configFactory()->getEditable('domain.config.' . $domain_id . '.language.negotiation'); $data = $config->getRawData(); unset($data['url']['prefixes'], $data['url']['domains']); if (empty($data['url'])) { unset($data['url']); } if (empty($data)) { if (empty($config->get('languages'))) { $config->delete(); } else { $config->setData($data); $config->save(); $this->routeBuilder->rebuild(); return; } $config->clear('url.prefixes'); $config->clear('url.domains'); $config->save(); $this->routeBuilder->rebuild(); } Loading src/LanguageDefault.php +52 −27 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Drupal\domain_language_negotiation; use Drupal\Console\Bootstrap\Drupal; use Drupal\Core\Language\Language; use Drupal\Core\Language\LanguageDefault as BaseLanguageDefault; use Drupal\Core\Language\LanguageInterface; Loading Loading @@ -37,19 +38,52 @@ class LanguageDefault extends BaseLanguageDefault { */ public function get() { // Try while domain is loaded. if (empty($this->languageDomain)) { if (!empty($this->languageDomain)) { return $this->languageDomain; } // Load default language. $language = parent::get(); $this->languageDomain = parent::get(); try { /** @var \Drupal\domain\DomainNegotiatorInterface $negotiator */ $negotiator = \Drupal::service('domain.negotiator'); $domain = $negotiator->getActiveDomain(); if (!$domain) { $language = $this->languageDomain; unset($this->languageDomain); return $language; } $name = 'domain.language.' . $domain->getOriginalId() . '.language.negotiation'; $default_langcode = \Drupal::configFactory()->get($name)->get('default_langcode'); if (!empty($default_langcode)) { return $this->setLanguage($default_langcode, $this->languageDomain); } // Try to load domain override. if ($domain = $negotiator->getActiveDomain()) { $default_langcode = \Drupal::config('system.site')->get('default_langcode'); return $this->setLanguage($default_langcode, $this->languageDomain); } catch (ServiceCircularReferenceException $e) { $language = $this->languageDomain; unset($this->languageDomain); return $language; } } /** * Set the default language. * * @param string $default_langcode * @param LanguageInterface $fallback_language * * @return \Drupal\Core\Language\LanguageInterface */ private function setLanguage(string $default_langcode, LanguageInterface $fallback_language) { if ($fallback_language->getId() === $default_langcode) { return $fallback_language; } if ($language->getId() !== $default_langcode) { $language = $this->getLanguage($default_langcode); // @todo check if necessary ? Loading @@ -59,21 +93,12 @@ class LanguageDefault extends BaseLanguageDefault { if ($translation = \Drupal::translation()) { $translation->setDefaultLangcode($language->getId()); } } $this->languageDomain = $language; } } catch (ServiceCircularReferenceException $e) { // @todo Seems to occur only in command line. } return $language; } return $this->languageDomain; } /** * Gets the language. * Loading @@ -83,7 +108,7 @@ class LanguageDefault extends BaseLanguageDefault { * @return \Drupal\Core\Language\Language * The language. */ protected function getLanguage($langcode): Language { protected function getLanguage(string $langcode): Language { $config = \Drupal::config('language.entity.' . $langcode); $data = $config->get(); $data['name'] = $data['label']; Loading Loading
domain_language_negotiation.module +8 −10 Original line number Diff line number Diff line Loading @@ -12,7 +12,6 @@ use Drupal\domain\DomainInterface; * Implements hook_language_switch_links_alter(). */ function domain_language_negotiation_language_switch_links_alter(array &$links, $type) { if ($type === 'language_interface') { /** @var \Drupal\domain\DomainNegotiatorInterface $negotiator */ $negotiator = \Drupal::service('domain.negotiator'); Loading @@ -26,7 +25,6 @@ function domain_language_negotiation_language_switch_links_alter(array &$links, } } } } /** * Implements hook_domain_operations(). Loading
src/DomainLanguageOverrider.php +4 −28 Original line number Diff line number Diff line Loading @@ -82,34 +82,10 @@ class DomainLanguageOverrider implements ConfigFactoryOverrideInterface { // Initialize site settings. $overrides[$name] = $configs[$name]; } } elseif ($name === 'language.negotiation') { $languages = \Drupal::config('domain.language.' . $this->domain->getOriginalId() . '.' . $name)->get( 'languages' ); // Setting array as null will reset keys. if (!empty($languages)) { // @todo use alter mechanism to properly remove array entries. // @see: https://www.drupal.org/node/2829242 $overrides[$name]['url']['prefixes'] = NULL; $overrides[$name]['url']['domains'] = NULL; // Set global config var to use second override mechanisms. if ($this->nestedLevel === 1) { $negotiations = \Drupal::config($name)->getRawData(); // @todo use 'Drupal\Core\Site\Settings' when available. // @see: https://www.drupal.org/node/2183591 $config[$name]['url']['prefixes'] = array_intersect_key( $negotiations['url']['prefixes'], $languages ); $config[$name]['url']['domains'] = array_intersect_key( $negotiations['url']['domains'], $languages ); } $languageConfigOverride = \Drupal::config('domain.language.' . $this->domain->getOriginalId() . '.language.negotiation')->getRawData(); if (!empty($languageConfigOverride['default_langcode'])) { $overrides[$name]['default_langcode'] = $languageConfigOverride['default_langcode']; } } } Loading
src/Form/DomainLanguageForm.php +19 −38 Original line number Diff line number Diff line Loading @@ -80,7 +80,10 @@ class DomainLanguageForm extends FormBase { // Load the domain default language. $config = $this->config('domain.config.' . $domain->getOriginalId() . '.system.site')->getRawData(); $defaultLanguage = $config['default_langcode'] ?? self::DEFAULT_LANGUAGE_SITE; $defaultOldLanguage = $config['default_langcode'] ?? self::DEFAULT_LANGUAGE_SITE; $config = $this->config('domain.language.' . $domain->getOriginalId() . '.language.negotiation'); $data = $config->getRawData(); /** @var \Drupal\Core\Language\LanguageInterface $defaultLanguageRaw */ $defaultLanguageRaw = $this->languageManager->getLanguage($defaultRaw); Loading Loading @@ -108,7 +111,7 @@ class DomainLanguageForm extends FormBase { 'This will override the default language: %default.', ['%default' => $defaultLanguageRaw->getName()] ), '#default_value' => $defaultLanguage, '#default_value' => $data['default_langcode'] ?? $defaultOldLanguage, '#required' => TRUE, ]; Loading @@ -117,9 +120,6 @@ class DomainLanguageForm extends FormBase { $options[$language->getId()] = $language->getName(); } $config = $this->config('domain.language.' . $domain->getOriginalId() . '.language.negotiation'); $data = $config->getRawData(); $form['languages'] = [ '#type' => 'checkboxes', '#title' => $this->t('Languages allowed'), Loading Loading @@ -157,52 +157,33 @@ class DomainLanguageForm extends FormBase { $languages = array_filter($form_state->getValue('languages')); // Set default language into domain config file. $config = $this->configFactory()->getEditable('domain.config.' . $domain_id . '.system.site'); if ($default_language === self::DEFAULT_LANGUAGE_SITE) { $data = $config->getRawData(); unset($data['default_langcode']); $config->setData($data); if (empty($data)) { // Delete if config is now empty. $config->delete(); } else { $config->save(); } $config = $this->configFactory()->getEditable('domain.language.' . $domain_id . '.language.negotiation'); if ($default_language !== self::DEFAULT_LANGUAGE_SITE) { $config->set('default_langcode', $default_language); $languages[$default_language] = $default_language; } else { $config->set('default_langcode', $default_language); $config->save(); $config->clear('default_langcode'); } // Set default language into domain language file. $config = $this->configFactory()->getEditable('domain.language.' . $domain_id . '.language.negotiation'); if (empty($languages)) { $config->delete(); if (!empty($languages)) { $config->set('languages', $languages); } else { $languages[$default_language] = $default_language; $config->set('languages', $languages); $config->save(); $config->clear('languages'); } // Remove any prefixes and domains in negotiation settings from // domain.config file to avoid any unexpected override. $config = $this->configFactory()->getEditable('domain.config.' . $domain_id . '.language.negotiation'); $data = $config->getRawData(); unset($data['url']['prefixes'], $data['url']['domains']); if (empty($data['url'])) { unset($data['url']); } if (empty($data)) { if (empty($config->get('languages'))) { $config->delete(); } else { $config->setData($data); $config->save(); $this->routeBuilder->rebuild(); return; } $config->clear('url.prefixes'); $config->clear('url.domains'); $config->save(); $this->routeBuilder->rebuild(); } Loading
src/LanguageDefault.php +52 −27 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Drupal\domain_language_negotiation; use Drupal\Console\Bootstrap\Drupal; use Drupal\Core\Language\Language; use Drupal\Core\Language\LanguageDefault as BaseLanguageDefault; use Drupal\Core\Language\LanguageInterface; Loading Loading @@ -37,19 +38,52 @@ class LanguageDefault extends BaseLanguageDefault { */ public function get() { // Try while domain is loaded. if (empty($this->languageDomain)) { if (!empty($this->languageDomain)) { return $this->languageDomain; } // Load default language. $language = parent::get(); $this->languageDomain = parent::get(); try { /** @var \Drupal\domain\DomainNegotiatorInterface $negotiator */ $negotiator = \Drupal::service('domain.negotiator'); $domain = $negotiator->getActiveDomain(); if (!$domain) { $language = $this->languageDomain; unset($this->languageDomain); return $language; } $name = 'domain.language.' . $domain->getOriginalId() . '.language.negotiation'; $default_langcode = \Drupal::configFactory()->get($name)->get('default_langcode'); if (!empty($default_langcode)) { return $this->setLanguage($default_langcode, $this->languageDomain); } // Try to load domain override. if ($domain = $negotiator->getActiveDomain()) { $default_langcode = \Drupal::config('system.site')->get('default_langcode'); return $this->setLanguage($default_langcode, $this->languageDomain); } catch (ServiceCircularReferenceException $e) { $language = $this->languageDomain; unset($this->languageDomain); return $language; } } /** * Set the default language. * * @param string $default_langcode * @param LanguageInterface $fallback_language * * @return \Drupal\Core\Language\LanguageInterface */ private function setLanguage(string $default_langcode, LanguageInterface $fallback_language) { if ($fallback_language->getId() === $default_langcode) { return $fallback_language; } if ($language->getId() !== $default_langcode) { $language = $this->getLanguage($default_langcode); // @todo check if necessary ? Loading @@ -59,21 +93,12 @@ class LanguageDefault extends BaseLanguageDefault { if ($translation = \Drupal::translation()) { $translation->setDefaultLangcode($language->getId()); } } $this->languageDomain = $language; } } catch (ServiceCircularReferenceException $e) { // @todo Seems to occur only in command line. } return $language; } return $this->languageDomain; } /** * Gets the language. * Loading @@ -83,7 +108,7 @@ class LanguageDefault extends BaseLanguageDefault { * @return \Drupal\Core\Language\Language * The language. */ protected function getLanguage($langcode): Language { protected function getLanguage(string $langcode): Language { $config = \Drupal::config('language.entity.' . $langcode); $data = $config->get(); $data['name'] = $data['label']; Loading