Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function user_update_7002

Convert user time zones from time zone offsets to time zone names.

Related topics

Updates from 6.x to 7.x
Update functions from 6.x to 7.x.

File

modules/user/user.install, line 488

Code

function user_update_7002 (&$sandbox) {
 $sandbox['#finished'] = 0;
 // Multi-part update.
 if (!isset($sandbox['user_from'])) {
 db_change_field ('users', 'timezone', 'timezone', array(
 'type' => 'varchar',
 'length' => 32,
 'not null' => FALSE,
 ));
 $sandbox['user_from'] = 0;
 $sandbox['user_count'] = db_query ("SELECT COUNT(uid) FROM {users}")->fetchField ();
 $sandbox['user_not_migrated'] = 0;
 }
 else {
 $timezones = system_time_zones ();
 // Update this many per page load.
 $count = 10000;
 $contributed_date_module = db_field_exists ('users', 'timezone_name');
 $contributed_event_module = db_field_exists ('users', 'timezone_id');
 $results = db_query_range ("SELECT uid FROM {users} ORDER BY uid", $sandbox['user_from'], $count);
 foreach ($results as $account) {
 $timezone = NULL;
 // If the contributed Date module has created a users.timezone_name
 // column, use this data to set each user's time zone.
 if ($contributed_date_module) {
 $date_timezone = db_query ("SELECT timezone_name FROM {users} WHERE uid = :uid", array(
 ':uid' => $account->uid,
 ))
 ->fetchField ();
 if (isset($timezones[$date_timezone])) {
 $timezone = $date_timezone;
 }
 }
 // If the contributed Event module has stored user time zone information
 // use that information to update the user accounts.
 if (!$timezone && $contributed_event_module) {
 try {
 $event_timezone = db_query ("SELECT t.name FROM {users} u LEFT JOIN {event_timezones} t ON u.timezone_id = t.timezone WHERE u.uid = :uid", array(
 ':uid' => $account->uid,
 ))
 ->fetchField ();
 $event_timezone = str_replace (' ', '_', $event_timezone);
 if (isset($timezones[$event_timezone])) {
 $timezone = $event_timezone;
 }
 } catch (PDOException $e) {
 // Ignore error if event_timezones table does not exist or unexpected
 // schema found.
 }
 }
 if ($timezone) {
 db_update ('users')->fields (array(
 'timezone' => $timezone,
 ))
 ->condition ('uid', $account->uid)
 ->execute ();
 }
 else {
 $sandbox['user_not_migrated']++;
 db_update ('users')->fields (array(
 'timezone' => NULL,
 ))
 ->condition ('uid', $account->uid)
 ->execute ();
 }
 $sandbox['user_from']++;
 }
 $sandbox['#finished'] = $sandbox['user_from'] / $sandbox['user_count'];
 if ($sandbox['user_from'] == $sandbox['user_count']) {
 if ($sandbox['user_not_migrated'] > 0) {
 variable_set ('empty_timezone_message', 1);
 drupal_set_message (format_string ('Some user time zones have been emptied and need to be set to the correct values. Use the new <a href="@config-url">time zone options</a> to choose whether to remind users at login to set the correct time zone.', array(
 '@config-url' => url ('admin/config/regional/settings'),
 )), 'warning');
 }
 return t ('Migrated user time zones');
 }
 }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.