You are here

function locale_update_7001 in Drupal 7

Upgrade language negotiation settings.

Related topics

File

modules/locale/locale.install, line 58
Install, update and uninstall functions for the locale module.

Code

function locale_update_7001() {
  require_once DRUPAL_ROOT . '/includes/language.inc';
  require_once DRUPAL_ROOT . '/includes/locale.inc';
  require_once DRUPAL_ROOT . '/modules/locale/locale.module';
  switch (variable_get('language_negotiation', 0)) {

    // LANGUAGE_NEGOTIATION_NONE.
    case 0:
      $negotiation = array();
      break;

    // LANGUAGE_NEGOTIATION_PATH_DEFAULT.
    case 1:
      $negotiation = array(
        LOCALE_LANGUAGE_NEGOTIATION_URL,
      );

      // In Drupal 6 path prefixes are shown for the default language only when
      // language negotiation is set to LANGUAGE_NEGOTIATION_PATH, while in
      // Drupal 7 path prefixes are always shown if not empty. Hence we need to
      // ensure that the default language has an empty prefix to avoid breaking
      // the site URLs with a prefix that previously was missing.
      $default = language_default();
      $default->prefix = '';
      variable_set('language_default', $default);
      db_update('languages')
        ->fields(array(
        'prefix' => $default->prefix,
      ))
        ->condition('language', $default->language)
        ->execute();
      break;

    // LANGUAGE_NEGOTIATION_PATH.
    case 2:
      $negotiation = array(
        LOCALE_LANGUAGE_NEGOTIATION_URL,
        LOCALE_LANGUAGE_NEGOTIATION_USER,
        LOCALE_LANGUAGE_NEGOTIATION_BROWSER,
      );
      break;

    // LANGUAGE_NEGOTIATION_DOMAIN.
    case 3:
      variable_set('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_DOMAIN);
      $negotiation = array(
        LOCALE_LANGUAGE_NEGOTIATION_URL,
      );
      break;
  }

  // Save the new language negotiation options.
  language_negotiation_set(LANGUAGE_TYPE_INTERFACE, array_flip($negotiation));
  language_negotiation_set(LANGUAGE_TYPE_CONTENT, array(
    LOCALE_LANGUAGE_NEGOTIATION_INTERFACE => 0,
  ));
  language_negotiation_set(LANGUAGE_TYPE_URL, array(
    LOCALE_LANGUAGE_NEGOTIATION_URL => 0,
  ));

  // Save admininstration UI settings.
  $type = LANGUAGE_TYPE_INTERFACE;
  $provider_weights = array_flip(array_keys(locale_language_negotiation_info()));
  variable_set("locale_language_providers_weight_{$type}", $provider_weights);

  // Unset the old language negotiation system variable.
  variable_del('language_negotiation');
  return array();
}