From 3c6272ff0475dc19cc67553f370ce227214d0613 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 23:28:48 +0200 Subject: [feature/new-tz-handling] Remove appearances of board_dst and user_dst PHPBB3-9558 --- phpBB/includes/user.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 4c62dd93d7..a36d837fbd 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -126,7 +126,7 @@ class phpbb_user extends phpbb_session if (is_numeric($this->tz)) { // Might still be numeric by chance - $this->tz = sprintf('Etc/GMT%+d', ($this->tz + ($this->data['user_id'] != ANONYMOUS ? $this->data['user_dst'] : $config['board_dst']))); + $this->tz = sprintf('Etc/GMT%+d', $this->tz); } $this->tz = new DateTimeZone($this->tz); -- cgit v1.2.1 From 3e3489195fb4d804e65a7a5438c33ac2fe0564b6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 18 Jun 2012 14:32:09 +0200 Subject: [feature/new-tz-handling] Add a function to get the timestamp of a date The function uses the given timezone and returns the correct UNIX timestamp of it. PHPBB3-9558 --- phpBB/includes/user.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index a36d837fbd..0990cc601a 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -647,6 +647,21 @@ class phpbb_user extends phpbb_session return new phpbb_datetime($time, $timezone, $this); } + /** + * Get the UNIX timestamp for a datetime in the users timezone, so we can store it in the database. + * + * @param string $format Format of the entered date/time + * @param string $time Date/time with the timezone applied + * @param DateTimeZone $timezone Timezone of the date/time, falls back to timezone of current user + * @return int Returns the unix timestamp + */ + public function get_timestamp_from_format($format, $time, DateTimeZone $timezone = null) + { + $timezone = $timezone ?: $this->tz; + $date = DateTime::createFromFormat($format, $time, $timezone); + return ($date !== false) ? $date->format('U') : false; + } + /** * Get language id currently used by the user */ -- cgit v1.2.1 From a5628cbdc85a197f32bd14890938dabd23bb6ef6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 00:29:31 +0200 Subject: [feature/new-tz-handling] Fix docs in phpbb_user class PHPBB3-9558 --- phpBB/includes/user.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 0990cc601a..df8f048c89 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -29,6 +29,10 @@ class phpbb_user extends phpbb_session var $help = array(); var $theme = array(); var $date_format; + + /** + * DateTimeZone object holding the timezone of the user + */ public $tz; var $lang_name = false; @@ -125,7 +129,7 @@ class phpbb_user extends phpbb_session if (is_numeric($this->tz)) { - // Might still be numeric by chance + // Might still be numeric $this->tz = sprintf('Etc/GMT%+d', $this->tz); } -- cgit v1.2.1 From f5bb145040a483a76fd734bb9d4025c54e7917a0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 16 Jul 2012 18:29:31 +0200 Subject: [feature/new-tz-handling] Require user argument on phpbb_datetime PHPBB3-9558 --- phpBB/includes/user.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index df8f048c89..cc50d2b98e 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -631,7 +631,7 @@ class phpbb_user extends phpbb_session $utc = new DateTimeZone('UTC'); } - $time = new phpbb_datetime("@$gmepoch", $utc, $this); + $time = new phpbb_datetime($this, "@$gmepoch", $utc); $time->setTimezone($this->tz); return $time->format($format, $forcedate); @@ -648,7 +648,7 @@ class phpbb_user extends phpbb_session public function create_datetime($time = 'now', DateTimeZone $timezone = null) { $timezone = $timezone ?: $this->tz; - return new phpbb_datetime($time, $timezone, $this); + return new phpbb_datetime($this, $time, $timezone); } /** -- cgit v1.2.1 From 48d3c68290b96c7d2a0e875ec3338f067a529b22 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 16 Jul 2012 18:44:13 +0200 Subject: [feature/new-tz-handling] Use tmp variable for user timezone PHPBB3-9558 --- phpBB/includes/user.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index cc50d2b98e..7dfb375a9b 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -82,13 +82,13 @@ class phpbb_user extends phpbb_session $this->lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); $this->date_format = $this->data['user_dateformat']; - $this->tz = $this->data['user_timezone']; + $user_timezone = $this->data['user_timezone']; } else { $this->lang_name = basename($config['default_lang']); $this->date_format = $config['default_dateformat']; - $this->tz = $config['board_timezone']; + $user_timezone = $config['board_timezone']; /** * If a guest user is surfing, we try to guess his/her language first by obtaining the browser language @@ -127,13 +127,13 @@ class phpbb_user extends phpbb_session */ } - if (is_numeric($this->tz)) + if (is_numeric($user_timezone)) { // Might still be numeric - $this->tz = sprintf('Etc/GMT%+d', $this->tz); + $user_timezone = sprintf('Etc/GMT%+d', $user_timezone); } - $this->tz = new DateTimeZone($this->tz); + $this->tz = new DateTimeZone($user_timezone); // We include common language file here to not load it every time a custom language file is included $lang = &$this->lang; -- cgit v1.2.1 From 515e1662a900526342b595692d73372f4fb7bbf9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Jul 2012 14:56:42 +0200 Subject: [feature/new-tz-handling] Remove "timezone might be numeric" As we updated all of the used values, there really shouldn't be one anymore. PHPBB3-9558 --- phpBB/includes/user.php | 6 ------ 1 file changed, 6 deletions(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index fb6c1552e8..c3bdc71774 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -127,12 +127,6 @@ class phpbb_user extends phpbb_session */ } - if (is_numeric($user_timezone)) - { - // Might still be numeric - $user_timezone = sprintf('Etc/GMT%+d', $user_timezone); - } - $this->tz = new DateTimeZone($user_timezone); // We include common language file here to not load it every time a custom language file is included -- cgit v1.2.1 From a71e60cdbd3e47c62a565dd777a28aec6832fb88 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Jul 2012 16:52:52 +0200 Subject: [feature/new-tz-handling] Rename $user->tz back to $user->timezone PHPBB3-9558 --- phpBB/includes/user.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index c3bdc71774..48c328214d 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -33,7 +33,7 @@ class phpbb_user extends phpbb_session /** * DateTimeZone object holding the timezone of the user */ - public $tz; + public $timezone; var $lang_name = false; var $lang_id = false; @@ -127,7 +127,7 @@ class phpbb_user extends phpbb_session */ } - $this->tz = new DateTimeZone($user_timezone); + $this->timezone = new DateTimeZone($user_timezone); // We include common language file here to not load it every time a custom language file is included $lang = &$this->lang; @@ -623,7 +623,7 @@ class phpbb_user extends phpbb_session } $time = new phpbb_datetime($this, "@$gmepoch", $utc); - $time->setTimezone($this->tz); + $time->setTimezone($this->timezone); return $time->format($format, $forcedate); } @@ -638,7 +638,7 @@ class phpbb_user extends phpbb_session */ public function create_datetime($time = 'now', DateTimeZone $timezone = null) { - $timezone = $timezone ?: $this->tz; + $timezone = $timezone ?: $this->timezone; return new phpbb_datetime($this, $time, $timezone); } @@ -652,7 +652,7 @@ class phpbb_user extends phpbb_session */ public function get_timestamp_from_format($format, $time, DateTimeZone $timezone = null) { - $timezone = $timezone ?: $this->tz; + $timezone = $timezone ?: $this->timezone; $date = DateTime::createFromFormat($format, $time, $timezone); return ($date !== false) ? $date->format('U') : false; } -- cgit v1.2.1 From 196e6343702e7d769d1b1668fd29682ad3bade4c Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 19 Jul 2012 15:46:12 +0200 Subject: [feature/new-tz-handling] Fall back to UTC, if the timezone is invalid This should avoid problems, when the board files are updated but database isn't. PHPBB3-9558 --- phpBB/includes/user.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 48c328214d..fcbfaaddfa 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -127,7 +127,15 @@ class phpbb_user extends phpbb_session */ } - $this->timezone = new DateTimeZone($user_timezone); + try + { + $this->timezone = new DateTimeZone($user_timezone); + } + catch (Exception $e) + { + // If the timezone the user has selected is invalid, we fall back to UTC. + $this->timezone = new DateTimeZone('UTC'); + } // We include common language file here to not load it every time a custom language file is included $lang = &$this->lang; -- cgit v1.2.1 From d152c20e4b53f26bfcf9425f1efed9d9d4ccef9f Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 1 Aug 2012 11:07:34 +0200 Subject: [feature/php-events] Add core.user_setup event This event can be used to load language files globally so it fixes PHPBB3-8270 PHPBB3-8270 PHPBB3-9550 --- phpBB/includes/user.php | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index fcbfaaddfa..93557f3558 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -76,18 +76,18 @@ class phpbb_user extends phpbb_session function setup($lang_set = false, $style_id = false) { global $db, $phpbb_style, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache; + global $phpbb_dispatcher; if ($this->data['user_id'] != ANONYMOUS) { - $this->lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); - - $this->date_format = $this->data['user_dateformat']; + $user_lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); + $user_date_format = $this->data['user_dateformat']; $user_timezone = $this->data['user_timezone']; } else { - $this->lang_name = basename($config['default_lang']); - $this->date_format = $config['default_dateformat']; + $user_lang_name = basename($config['default_lang']); + $user_date_format = $config['default_dateformat']; $user_timezone = $config['board_timezone']; /** @@ -107,7 +107,7 @@ class phpbb_user extends phpbb_session if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx")) { - $this->lang_name = $config['default_lang'] = $accept_lang; + $user_lang_name = $config['default_lang'] = $accept_lang; break; } else @@ -118,7 +118,7 @@ class phpbb_user extends phpbb_session if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx")) { - $this->lang_name = $config['default_lang'] = $accept_lang; + $user_lang_name = $config['default_lang'] = $accept_lang; break; } } @@ -127,6 +127,28 @@ class phpbb_user extends phpbb_session */ } + $user_data = $this->data; + + /** + * Event to load language files and modify user data on every page + * + * @event core.user_setup + * @var array user_data Array with user's data row + * @var string user_lang_name Basename of the user's langauge + * @var string user_date_format User's date/time format + * @var string user_timezone User's timezone, should be one of + * http://www.php.net/manual/en/timezones.php + * @var mixed lang_set String or array of language files + * @var mixed style_id Style we are going to display + * @since 3.1-A1 + */ + $vars = array('user_data', 'user_lang_name', 'user_date_format', 'user_timezone', 'lang_set', 'style_id'); + extract($phpbb_dispatcher->trigger_event('core.user_setup', compact($vars))); + + $this->data = $user_data; + $this->lang_name = $user_lang_name; + $this->date_format = $user_date_format; + try { $this->timezone = new DateTimeZone($user_timezone); -- cgit v1.2.1 From bd37f7f6c04780819dfa8f81b2d761b91859fd67 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Sat, 10 Nov 2012 10:45:02 -0600 Subject: [ticket/11189] Replace DEBUG_EXTRA with DEBUG PHPBB3-11189 --- phpBB/includes/user.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB/includes/user.php') diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 93557f3558..9ddd806b27 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -162,8 +162,8 @@ class phpbb_user extends phpbb_session // We include common language file here to not load it every time a custom language file is included $lang = &$this->lang; - // Do not suppress error if in DEBUG_EXTRA mode - $include_result = (defined('DEBUG_EXTRA')) ? (include $this->lang_path . $this->lang_name . "/common.$phpEx") : (@include $this->lang_path . $this->lang_name . "/common.$phpEx"); + // Do not suppress error if in DEBUG mode + $include_result = (defined('DEBUG')) ? (include $this->lang_path . $this->lang_name . "/common.$phpEx") : (@include $this->lang_path . $this->lang_name . "/common.$phpEx"); if ($include_result === false) { @@ -252,7 +252,7 @@ class phpbb_user extends phpbb_session // Disable board if the install/ directory is still present // For the brave development army we do not care about this, else we need to comment out this everytime we develop locally - if (!defined('DEBUG_EXTRA') && !defined('ADMIN_START') && !defined('IN_INSTALL') && !defined('IN_LOGIN') && file_exists($phpbb_root_path . 'install') && !is_file($phpbb_root_path . 'install')) + if (!defined('DEBUG') && !defined('ADMIN_START') && !defined('IN_INSTALL') && !defined('IN_LOGIN') && file_exists($phpbb_root_path . 'install') && !is_file($phpbb_root_path . 'install')) { // Adjust the message slightly according to the permissions if ($auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_')) @@ -618,8 +618,8 @@ class phpbb_user extends phpbb_session return; } - // Do not suppress error if in DEBUG_EXTRA mode - $include_result = (defined('DEBUG_EXTRA')) ? (include $language_filename) : (@include $language_filename); + // Do not suppress error if in DEBUG mode + $include_result = (defined('DEBUG')) ? (include $language_filename) : (@include $language_filename); if ($include_result === false) { -- cgit v1.2.1