summaryrefslogtreecommitdiff
path: root/modules/locale/locale.admin.inc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/locale/locale.admin.inc')
-rw-r--r--modules/locale/locale.admin.inc32
1 files changed, 10 insertions, 22 deletions
diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index de16133fb..d8201dbf2 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -541,6 +541,12 @@ function _locale_languages_configure_form_language_table(&$form, $type) {
asort($providers_weight);
foreach ($providers_weight as $id => $weight) {
+ // A language provider might be no more available if the defining module has
+ // been disabled after the last configuration saving.
+ if (!isset($language_providers[$id])) {
+ continue;
+ }
+
$enabled = isset($enabled_providers[$id]);
$provider = $language_providers[$id];
@@ -658,7 +664,6 @@ function theme_locale_languages_configure_form($variables) {
* Submit handler for language negotiation settings.
*/
function locale_languages_configure_form_submit($form, &$form_state) {
- $language_types = array();
$configurable_types = $form['#language_types'];
foreach ($configurable_types as $type) {
@@ -666,7 +671,6 @@ function locale_languages_configure_form_submit($form, &$form_state) {
$enabled_providers = $form_state['values'][$type]['enabled'];
$enabled_providers[LANGUAGE_NEGOTIATION_DEFAULT] = TRUE;
$providers_weight = $form_state['values'][$type]['weight'];
- $language_types[$type] = TRUE;
foreach ($providers_weight as $id => $weight) {
if ($enabled_providers[$id]) {
@@ -680,27 +684,11 @@ function locale_languages_configure_form_submit($form, &$form_state) {
variable_set("locale_language_providers_weight_$type", $providers_weight);
}
- // Save non-configurable language types negotiation.
- $language_types_info = language_types_info();
- $defined_providers = $form['#language_providers'];
- foreach ($language_types_info as $type => $info) {
- if (isset($info['fixed'])) {
- $language_types[$type] = FALSE;
- $negotiation = array();
- foreach ($info['fixed'] as $weight => $id) {
- if (isset($defined_providers[$id])) {
- $negotiation[$id] = $defined_providers[$id];
- $negotiation[$id]['weight'] = $weight;
- }
- }
- language_negotiation_set($type, $negotiation);
- }
- }
-
- // Save language types.
- variable_set('language_types', $language_types);
+ // Update non-configurable language types and the related language negotiation
+ // configuration.
+ language_types_set();
- $form_state['redirect'] = 'admin/config/regional/language';
+ $form_state['redirect'] = 'admin/config/regional/language/configure';
drupal_set_message(t('Language negotiation configuration saved.'));
}