function LanguageNegotiator::updateConfiguration in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/language/src/LanguageNegotiator.php \Drupal\language\LanguageNegotiator::updateConfiguration()
Updates the configuration based on the given language types.
Stores the list of the language types along with information about their configurable state. Stores the default settings if the language type is not configurable.
Parameters
string[] $types: An array of configurable language types.
Overrides LanguageNegotiatorInterface::updateConfiguration
File
- core/
modules/ language/ src/ LanguageNegotiator.php, line 297 - Contains \Drupal\language\LanguageNegotiator.
Class
- LanguageNegotiator
- Class responsible for performing language negotiation.
Namespace
Drupal\languageCode
function updateConfiguration(array $types) {
// Ensure that we are getting the defined language negotiation information.
// An invocation of \Drupal\Core\Extension\ModuleHandler::install() or
// \Drupal\Core\Extension\ModuleHandler::uninstall() could invalidate the
// cached information.
$this->negotiatorManager
->clearCachedDefinitions();
$this->languageManager
->reset();
$language_types = array();
$language_types_info = $this->languageManager
->getDefinedLanguageTypesInfo();
$method_definitions = $this
->getNegotiationMethods();
foreach ($language_types_info as $type => $info) {
$configurable = in_array($type, $types);
// The default language negotiation settings, if available, are stored in
// $info['fixed'].
$has_default_settings = !empty($info['fixed']);
// Check whether the language type is unlocked. Only the status of
// unlocked language types can be toggled between configurable and
// non-configurable.
if (empty($info['locked'])) {
if (!$configurable && !$has_default_settings) {
// If we have an unlocked non-configurable language type without
// default language negotiation settings, we use the values
// negotiated for the interface language which, should always be
// available.
$method_weights = array(
LanguageNegotiationUI::METHOD_ID,
);
$method_weights = array_flip($method_weights);
$this
->saveConfiguration($type, $method_weights);
}
}
else {
// The language type is locked. Locked language types with default
// settings are always considered non-configurable. In turn if default
// settings are missing, the language type is always considered
// configurable.
// If the language type is locked we can just store its default language
// negotiation settings if it has some, since it is not configurable.
if ($has_default_settings) {
$method_weights = array();
// Default settings are in $info['fixed'].
foreach ($info['fixed'] as $weight => $method_id) {
if (isset($method_definitions[$method_id])) {
$method_weights[$method_id] = $weight;
}
}
$this
->saveConfiguration($type, $method_weights);
}
else {
// It was missing default settings, so force it to be configurable.
$configurable = TRUE;
}
}
// Accumulate information for each language type so it can be saved later.
$language_types[$type] = $configurable;
}
// Store the language type configuration.
$config = array(
'configurable' => array_keys(array_filter($language_types)),
'all' => array_keys($language_types),
);
$this->languageManager
->saveLanguageTypesConfiguration($config);
}