diff --git a/actions/profilesettings.php b/actions/profilesettings.php index 04526a2122..cfa4db0d77 100644 --- a/actions/profilesettings.php +++ b/actions/profilesettings.php @@ -88,6 +88,9 @@ class ProfilesettingsAction extends SettingsAction { } else if (!is_null($location) && strlen($location) > 255) { $this->show_form(_('Location is too long (max 255 chars).')); return; + } else if (is_null($timezone) || !in_array($timezone, DateTimeZone::listIdentifiers())) { + $this->show_form(_('Timezone not selected.')); + return; } else if ($this->nickname_exists($nickname)) { $this->show_form(_('Nickname already in use. Try another one.')); return; @@ -99,31 +102,22 @@ class ProfilesettingsAction extends SettingsAction { $user->query('BEGIN'); - if ($user->nickname != $nickname) { + if ($user->nickname != $nickname || + $user->language != $language || + $user->timezone != $timezone) { common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname, __FILE__); + common_debug('Updating user language from ' . $user->language . ' to ' . $language, + __FILE__); + common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone, + __FILE__); $original = clone($user); $user->nickname = $nickname; - - $result = $user->updateKeys($original); - - if ($result === FALSE) { - common_log_db_error($user, 'UPDATE', __FILE__); - common_server_error(_('Couldn\'t update user.')); - return; - } - } - if ($user->language != $language) { - - common_debug('Updating user language from ' . $user->language . ' to ' . $language, - __FILE__); - - $original = clone($user); - $user->language = $language; + $user->timezone = $timezone; $result = $user->updateKeys($original); diff --git a/lib/common.php b/lib/common.php index 04242432c6..b4c16660fa 100644 --- a/lib/common.php +++ b/lib/common.php @@ -51,7 +51,7 @@ $config = 'locale_path' => './locale', 'language' => 'en_US', 'languages' => get_all_languages(), - 'email' => + 'email' => array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : NULL, 'broughtby' => NULL, 'timezone' => 'UTC', @@ -101,8 +101,9 @@ $config['db'] = require_once(INSTALLDIR.'/config.php'); -if (function_exists('date_default_timezone_set') && $config['site']['timezone']) { - date_default_timezone_set($config['site']['timezone']); +if (function_exists('date_default_timezone_set')) { + /* Work internally in UTC */ + date_default_timezone_set('UTC'); } require_once(INSTALLDIR.'/lib/util.php'); diff --git a/lib/util.php b/lib/util.php index 1ec68863e7..c095fe768e 100644 --- a/lib/util.php +++ b/lib/util.php @@ -435,6 +435,18 @@ function common_textarea($id, $label, $content=NULL, $instructions=NULL) { common_element_end('p'); } +function common_timezone() { + if (common_logged_in()) { + $user = common_current_user(); + if ($user->timezone) { + return $user->timezone; + } + } + + global $config; + return $config['site']['timezone']; +} + function common_language() { $httplang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : NULL; $language = array(); @@ -920,23 +932,31 @@ function common_date_string($dt) { } function common_exact_date($dt) { - $t = strtotime($dt); - return date(DATE_RFC850, $t); + $dateStr = date('d F Y H:i:s', strtotime($dt)); + $d = new DateTime($dateStr, new DateTimeZone('UTC')); + $d->setTimezone(new DateTimeZone(common_timezone())); + return $d->format(DATE_RFC850); } function common_date_w3dtf($dt) { - $t = strtotime($dt); - return date(DATE_W3C, $t); + $dateStr = date('d F Y H:i:s', strtotime($dt)); + $d = new DateTime($dateStr, new DateTimeZone('UTC')); + $d->setTimezone(new DateTimeZone(common_timezone())); + return $d->format(DATE_W3C); } function common_date_rfc2822($dt) { - $t = strtotime($dt); - return date("r", $t); + $dateStr = date('d F Y H:i:s', strtotime($dt)); + $d = new DateTime($dateStr, new DateTimeZone('UTC')); + $d->setTimezone(new DateTimeZone(common_timezone())); + return $d->format('r'); } function common_date_iso8601($dt) { - $t = strtotime($dt); - return date("c", $t); + $dateStr = date('d F Y H:i:s', strtotime($dt)); + $d = new DateTime($dateStr, new DateTimeZone('UTC')); + $d->setTimezone(new DateTimeZone(common_timezone())); + return $d->format('c'); } function common_redirect($url, $code=307) {