update_101

Versions
4.6
update_101()

Code

database/updates.inc, line 1642

<?php
function update_101() {
  /**
   * Works for both PostgreSQL and MySQL
   */
  include_once 'includes/locale.inc';
  // get the language columns
  $result = db_query('SELECT * FROM {locales} LIMIT 1');
  $fields = array();
  if (db_num_rows($result)) {
    $columns = array_keys(db_fetch_array($result));
    foreach ($columns as $field) {
      $fields[$field] = 1;
    }

    // but not the fixed fields
    unset($fields['lid'], $fields['location'], $fields['string']);

    // insert locales
    $list = _locale_get_iso639_list();
    foreach ($fields as $key => $value) {
      if (db_result(db_query("SELECT COUNT(lid) FROM {locales} WHERE $key != ''"))) {
        if (isset($list[$key])) {
          $name = $list[$key][0];
          if ($key == 'en') {
            $key = 'en-local';
          }
          db_query("INSERT INTO {locales_meta} (locale, name) VALUES ('%s', '%s')", $key, $name);
        }
        else {
          db_query("INSERT INTO {locales_meta} (locale, name) VALUES ('%s', '%s')", $key, $key);
        }
      }
    }

    // get all strings
    $result = db_query('SELECT * FROM {locales}');
    while ($entry = db_fetch_object($result)) {
      // insert string if at least one translation exists
      $test = 'return $entry->'. implode(' == "" && $entry->', array_keys($fields)) .' == "";';
      if (!eval($test)) {
        db_query("INSERT INTO {locales_source} (location, source) VALUES ('%s', '%s')", $entry->location, $entry->string);
        $lid = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE location = '%s' AND source = '%s'", $entry->location, $entry->string));
        foreach ($fields as $key => $value) {
          // insert translation if non-empty
          if ($key == 'en') {
            $keynew = 'en-local';
          }
          else {
            $keynew = $key;
          }
          db_query("INSERT INTO {locales_target} (lid, translation, locale) VALUES (%d, '%s', '%s')", $lid->lid, $entry->$key, $keynew);
        }
      }
    }
  }

  $ret = array();
  $ret[] = update_sql("DROP TABLE {locales}");
  return $ret;
}
?>
Login or register to post comments
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.