diff --git a/core/modules/language/config/language.settings.yml b/core/modules/language/config/language.settings.yml new file mode 100644 index 0000000..2b4cdbe --- /dev/null +++ b/core/modules/language/config/language.settings.yml @@ -0,0 +1,3 @@ +negotiation: + session: + parameter: language diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc index a601d00..e981561 100644 --- a/core/modules/language/language.admin.inc +++ b/core/modules/language/language.admin.inc @@ -797,16 +797,27 @@ function language_negotiation_configure_url_form_submit($form, &$form_state) { /** * Builds the session language negotiation method configuration form. + * + * @see language_negotiation_configure_session_form_submit() */ function language_negotiation_configure_session_form($form, &$form_state) { $form['language_negotiation_session_param'] = array( '#title' => t('Request/session parameter'), '#type' => 'textfield', - '#default_value' => variable_get('language_negotiation_session_param', 'language'), + '#default_value' => config('language.settings')->get('negotiation.session_parameter'), '#description' => t('Name of the request/session parameter used to determine the desired language.'), ); $form_state['redirect'] = 'admin/config/regional/language/detection'; - return system_settings_form($form); + return system_config_form($form, $form_state); +} + +/** + * Form submission handler for language_negotiation_configure_session_form(). + */ +function language_negotiation_configure_session_form_submit($form, &$form_state) { + config('language.settings') + ->set('negotiation.session_parameter', $form_state['values']['language_negotiation_session_param']) + ->save(); } diff --git a/core/modules/language/language.install b/core/modules/language/language.install index 37f41d6..3c7c9cd 100644 --- a/core/modules/language/language.install +++ b/core/modules/language/language.install @@ -40,7 +40,6 @@ function language_uninstall() { variable_del('language_negotiation_url_part'); variable_del('language_negotiation_url_prefixes'); variable_del('language_negotiation_url_domains'); - variable_del('language_negotiation_session_param'); variable_del('language_content_type_default'); variable_del('language_content_type_negotiation'); @@ -102,3 +101,12 @@ function language_schema() { ); return $schema; } + +/** + * Moves language settings from variables to config. + */ +function language_update_8000() { + update_variables_to_config('language.settings', array( + 'language_negotiation_session_param' => 'negotiation.session_parameter', + )); +} diff --git a/core/modules/language/language.negotiation.inc b/core/modules/language/language.negotiation.inc index 01c39a8..f3f37c0 100644 --- a/core/modules/language/language.negotiation.inc +++ b/core/modules/language/language.negotiation.inc @@ -171,7 +171,7 @@ function language_from_user($languages) { * A valid language code on success, FALSE otherwise. */ function language_from_session($languages) { - $param = variable_get('language_negotiation_session_param', 'language'); + $param = config('language.settings')->get('negotiation.session_parameter'); // Request parameter: we need to update the session parameter only if we have // an authenticated user. @@ -320,7 +320,7 @@ function language_switcher_url($type, $path) { * Return the session language switcher block. */ function language_switcher_session($type, $path) { - $param = variable_get('language_negotiation_session_param', 'language'); + $param = config('language.settings')->get('negotiation.session_parameter'); $language_query = isset($_SESSION[$param]) ? $_SESSION[$param] : drupal_container()->get($type)->langcode; $languages = language_list(); @@ -453,7 +453,7 @@ function language_url_rewrite_session(&$path, &$options) { global $user; if (!$user->uid) { $languages = language_list(); - $query_param = check_plain(variable_get('language_negotiation_session_param', 'language')); + $query_param = check_plain(config('language.settings')->get('negotiation.session_parameter')); $query_value = isset($_GET[$query_param]) ? check_plain($_GET[$query_param]) : NULL; $query_rewrite = isset($languages[$query_value]) && language_negotiation_method_enabled(LANGUAGE_NEGOTIATION_SESSION); } diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install index 35106ae..9017241 100644 --- a/core/modules/locale/locale.install +++ b/core/modules/locale/locale.install @@ -558,7 +558,6 @@ function locale_update_8008() { 'locale_language_negotiation_url_part' => 'language_negotiation_url_part', 'locale_language_negotiation_url_domains' => 'language_negotiation_url_domains', 'locale_language_negotiation_url_prefixes' => 'language_negotiation_url_prefixes', - 'locale_language_negotiation_session_param' => 'language_negotiation_session_param', ); foreach ($variable_name_map as $deprecated_variable_name => $new_variable_name) { // Check if this variable is stored in the db and if so rename it. @@ -568,6 +567,21 @@ function locale_update_8008() { variable_del($deprecated_variable_name); } } + + // @todo Convert other variables to configuration system too. + $variable_name_map = array( + 'locale_language_negotiation_session_param' => 'negotiation.session_parameter', + ); + $language_config = config('language_settings'); + foreach ($variable_name_map as $deprecated_variable_name => $new_variable_name) { + // Check if this variable is stored in the db and if so rename it. + $value = variable_get($deprecated_variable_name); + if ($value !== NULL) { + $language_config->set($new_variable_name, $value); + variable_del($deprecated_variable_name); + } + } + $language_config->save(); } /**