Management of timezones at user level (see CT#599)

skala
Guillaume Viguier 15 years ago
parent 435618bd19
commit 0af043d319
  1. 10
      main/admin/settings.lib.php
  2. 1
      main/admin/user_fields.php
  3. 3
      main/admin/user_fields_add.php
  4. 6
      main/auth/profile.php
  5. 24
      main/inc/lib/main_api.lib.php
  6. 1
      main/inc/lib/usermanager.lib.php
  7. 1
      main/install/dokeos_main.sql
  8. 2
      main/install/migrate-db-1.8.6.2-1.8.7-pre.sql
  9. 22
      main/mySpace/myStudents.php

@ -859,15 +859,9 @@ function delete_template($id)
*
* @return array List of timezone identifiers
*
* @author Guillaume Viguier <guillaume@viguierjust.com>
* @author Guillaume Viguier <guillaume.viguier@beeznest.com>
* @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();
}

@ -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];
}

@ -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 '</div>';
// footer
Display::display_footer();
?>
?>

@ -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();
Display :: display_footer();

@ -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 <guillaume.viguier@beeznest.com>
*/
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 <guillaume.viguier@beeznest.com>
*/
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) {

@ -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);

@ -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);

@ -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

@ -418,7 +418,27 @@ if (!empty ($_GET['student'])) {
?>
</td>
</tr>
</table>
<?php
// Display timezone if the user selected one
$timezone = null;
$timezone_user = UserManager::get_extra_user_data_by_field($info_user['user_id'],'timezone');
if ($timezone_user['timezone'] != null) {
$timezone = $timezone_user['timezone'];
}
if ($timezone !== null) {
?>
<tr>
<td>
<?php
echo get_lang('Timezone') . ' : ';
echo $timezone;
?>
</td>
</tr>
<?php
}
?>
</table>
</td>
<td class="borderLeft" width="35%" valign="top">

Loading…
Cancel
Save