From 0af043d319164a325beac351d0e24391ac6b9a63 Mon Sep 17 00:00:00 2001 From: Guillaume Viguier Date: Wed, 17 Feb 2010 10:50:42 -0500 Subject: [PATCH] Management of timezones at user level (see CT#599) --- main/admin/settings.lib.php | 10 ++------ main/admin/user_fields.php | 1 + main/admin/user_fields_add.php | 3 ++- main/auth/profile.php | 6 ++++- main/inc/lib/main_api.lib.php | 24 ++++++++++++++++++- main/inc/lib/usermanager.lib.php | 1 + main/install/dokeos_main.sql | 1 + main/install/migrate-db-1.8.6.2-1.8.7-pre.sql | 2 ++ main/mySpace/myStudents.php | 22 ++++++++++++++++- 9 files changed, 58 insertions(+), 12 deletions(-) diff --git a/main/admin/settings.lib.php b/main/admin/settings.lib.php index 034fc1a787..da8ef4f08d 100644 --- a/main/admin/settings.lib.php +++ b/main/admin/settings.lib.php @@ -859,15 +859,9 @@ function delete_template($id) * * @return array List of timezone identifiers * - * @author Guillaume Viguier + * @author Guillaume Viguier * @since Chamilo 1.8.7 */ function select_timezone_value() { - $timezone_identifiers = DateTimeZone::listIdentifiers(); - sort($timezone_identifiers); - $out = array(); - foreach($timezone_identifiers as $tz) { - $out[$tz] = $tz; - } - return $out; + return api_get_timezones(); } diff --git a/main/admin/user_fields.php b/main/admin/user_fields.php index e32d74e1e6..539fe8c5b8 100755 --- a/main/admin/user_fields.php +++ b/main/admin/user_fields.php @@ -212,6 +212,7 @@ function type_filter($type) $types[USER_FIELD_TYPE_DOUBLE_SELECT] = get_lang('FieldTypeDoubleSelect'); $types[USER_FIELD_TYPE_DIVIDER] = get_lang('FieldTypeDivider'); $types[USER_FIELD_TYPE_TAG] = get_lang('FieldTypeTag'); + $types[USER_FIELD_TYPE_TIMEZONE] = get_lang('FieldTypeTimezone'); return $types[$type]; } diff --git a/main/admin/user_fields_add.php b/main/admin/user_fields_add.php index 0fbbee2dff..6af1653151 100755 --- a/main/admin/user_fields_add.php +++ b/main/admin/user_fields_add.php @@ -138,6 +138,7 @@ $types[USER_FIELD_TYPE_DATETIME] = get_lang('FieldTypeDatetime'); $types[USER_FIELD_TYPE_DOUBLE_SELECT] = get_lang('FieldTypeDoubleSelect'); $types[USER_FIELD_TYPE_DIVIDER] = get_lang('FieldTypeDivider'); $types[USER_FIELD_TYPE_TAG] = get_lang('FieldTypeTag'); +$types[USER_FIELD_TYPE_TIMEZONE] = get_lang('FieldTypeTimezone'); $form->addElement('select','fieldtype',get_lang('FieldType'),$types,array('onchange'=>'change_image_user_field(this.value)')); $form->addRule('fieldtype', get_lang('ThisFieldIsRequired'), 'required'); @@ -295,4 +296,4 @@ echo ''; // footer Display::display_footer(); -?> \ No newline at end of file +?> diff --git a/main/auth/profile.php b/main/auth/profile.php index 2ec70b0c0a..ac830070da 100755 --- a/main/auth/profile.php +++ b/main/auth/profile.php @@ -430,6 +430,10 @@ foreach ($extra as $id => $field_details) { }); EOF; break; + case USER_FIELD_TYPE_TIMEZONE: + $form->addElement('select', 'extra_'.$field_details[1], $field_details[3], api_get_timezones(), ''); + if ($field_details[7] == 0) $form->freeze('extra_'.$field_details[1]); + break; } } @@ -848,4 +852,4 @@ if (api_get_setting('allow_social_tool') == 'true') { } -Display :: display_footer(); \ No newline at end of file +Display :: display_footer(); diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index 8e54d6692b..9350c70361 100755 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -4468,6 +4468,23 @@ function api_send_mail($to, $subject, $message, $additional_headers = null, $add return 1; } +/** + * Returns an alphabetized list of timezones in an associative array that can be used to populate a select + * + * @return array List of timezone identifiers + * + * @author Guillaume Viguier + */ +function api_get_timezones() { + $timezone_identifiers = DateTimeZone::listIdentifiers(); + sort($timezone_identifiers); + $out = array(); + foreach($timezone_identifiers as $tz) { + $out[$tz] = $tz; + } + return $out; +} + /** * Returns the local time in a format given as an argument * @param string The time to be converted @@ -4479,6 +4496,7 @@ function api_send_mail($to, $subject, $message, $additional_headers = null, $add * @author Guillaume Viguier */ function api_get_local_time($time, $format=null, $to_timezone=null, $from_timezone=null) { + global $_user; // Determining the timezone to be converted from if ($from_timezone === null) { $from_timezone = 'UTC'; @@ -4492,7 +4510,11 @@ function api_get_local_time($time, $format=null, $to_timezone=null, $from_timezo if ($timezone_value !== null) { $to_timezone = $timezone_value; } - // TODO: Get the timezone based on user preference + // Third, get the timezone based on user preference, if it exists + $timezone_user = UserManager::get_extra_user_data_by_field($_user['user_id'],'timezone'); + if ($timezone_user['timezone'] != null) { + $to_timezone = $timezone_user['timezone']; + } } // Determine the format if ($format === null) { diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index 18f15c6a53..d2e7611ea9 100644 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -21,6 +21,7 @@ define('USER_FIELD_TYPE_DATETIME', 7); define('USER_FIELD_TYPE_DOUBLE_SELECT', 8); define('USER_FIELD_TYPE_DIVIDER', 9); define('USER_FIELD_TYPE_TAG', 10); +define('USER_FIELD_TYPE_TIMEZONE', 11); //User image sizes define('USER_IMAGE_SIZE_ORIGINAL', 1); diff --git a/main/install/dokeos_main.sql b/main/install/dokeos_main.sql index 703b026f6f..0e5c0d47c1 100755 --- a/main/install/dokeos_main.sql +++ b/main/install/dokeos_main.sql @@ -2394,3 +2394,4 @@ PRIMARY KEY(id) ALTER TABLE block ADD UNIQUE(path); INSERT INTO user_field(field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES(1, 'dashboard', 'dashboard', 0, 0); +INSERT INTO user_field(field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES(11, 'timezone', 'Timezone', 0, 0); diff --git a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql index fcf3f3c98f..fc05fa1703 100755 --- a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql +++ b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql @@ -40,6 +40,8 @@ ALTER TABLE session_field_values CHANGE tms tms DATETIME NOT NULL default '0000- ALTER TABLE user_field_options CHANGE tms tms DATETIME NOT NULL default '0000-00-00 00:00:00'; ALTER TABLE user_field_values CHANGE tms tms DATETIME NOT NULL default '0000-00-00 00:00:00'; ALTER TABLE access_url CHANGE tms tms DATETIME NOT NULL default '0000-00-00 00:00:00'; + +INSERT INTO user_field(field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES(11, 'timezone', 'Timezone', 0, 0); UPDATE settings_current SET selected_value = '1.8.7.10365' WHERE variable = 'dokeos_database_version'; -- xxSTATSxx diff --git a/main/mySpace/myStudents.php b/main/mySpace/myStudents.php index da3e2e8c2e..dba3c23f4e 100755 --- a/main/mySpace/myStudents.php +++ b/main/mySpace/myStudents.php @@ -418,7 +418,27 @@ if (!empty ($_GET['student'])) { ?> - + + + + + + + +