]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
User definable timezones. Work in UTC internally and display per user/site default...
authorMike Cochrane <mikec@mikenz.geek.nz>
Sun, 20 Jul 2008 14:13:25 +0000 (10:13 -0400)
committerMike Cochrane <mikec@mikenz.geek.nz>
Sun, 20 Jul 2008 14:13:25 +0000 (10:13 -0400)
darcs-hash:20080720141325-533db-87cb60501434c9dc0ac13716ba5d8b17754431f5.gz

actions/profilesettings.php
lib/common.php
lib/util.php

index 04526a212281dd226d1158c7034129bff3999ecd..cfa4db0d77a87a520ca1009e17f78007039f31e6 100644 (file)
@@ -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__);
-
-                       $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__);
+                       common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone,
+                                                __FILE__);
 
                        $original = clone($user);
 
+                       $user->nickname = $nickname;
                        $user->language = $language;
+                       $user->timezone = $timezone;
 
                        $result = $user->updateKeys($original);
 
index 04242432c6d30b8aa9d9d5c2e43c701f1d9e0cd4..b4c16660faa09c1eac805d13b8f2e7123dd0b594 100644 (file)
@@ -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');
index 1ec68863e7e2fd0e62f18bd590a960b01f5157ec..c095fe768ec775d7eab124097522568118c9543a 100644 (file)
@@ -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) {