UserTimezone¶
Ticket #1219
But
Le but est d'afficher les dates pour le fuseau horaire de l'utilisateur connecté.¶
Dates dans la DB¶
Toutes les dates de la DB sont au format GMT
Question¶
Doit-on ajouter un champs dans la config pour régler le GMT réel par rapport à l'heure du serveur. Sous windows, si on est en GMT+2, le GMT de PHP ne va pas être le vrai GMT (sous Linux pas de soucis, il prend bien le GMT).
Celui oblige a faire des calculs en plus, au choix :
- Conversion au moment d'enregistrer la date dans la DB
- Conversion à l'affichage de la date (donc timezone utilisateur + ce décalage)
David : j'ai une préférence pour la 2ème solution
Sélection des timezones¶
La sélection de la timezone :
- dans la config générale
- dans l'entité
- dans les préférences utilisateur
Liste html des timezones : http://fr2.php.net/timezones
Pour récupérer la liste des timezone :
DateTimeZone::listIdentifiers()
Pour avoir les décalages :
$tz = new DateTimeZone(date_default_timezone_get()); var_dump($tz->getTransitions());
LDAP¶
Si attribut de timezone dans le LDAP, l'importer dans les préférences de l'utilisateur
Possibilité de définir une timezone dans les règles (sur un attribut ou une OU)
Fonctionnement¶
Uniquement l'affichage utilisera le timezone.
On travaille tout en GMT.
Un utilisateur ouvre un ticket, il l'ouvre sur son fuseau (GMT +4h), au moment de l'enregistrement, une conversion est faite : heure -4 => heure GMT
Le choix de la conversion GMT => timezone de l'utilisateur est via la fonction DateTimeZone de PHP. L'autre solution était d'utiliser la fonction pour MySQL mais celà peut poser problème si on utilise d'autres bases de données dans le futur.
S'il veut consulter une date, la DB sort une date GMT et on ajoute 4h pour l'affichage.
Exemple de code :
$UTC = new DateTimeZone("UTC"); $newTZ = new DateTimeZone("America/New_York"); $date = new DateTime( "2011-01-01 15:00:00", $UTC ); $date->setTimezone( $newTZ ); echo $date->format('Y-m-d H:i:s');
Migration¶
On considère que GLPI était en GMT
MoYo : est si ce n'est pas le cas ? comment redresser les données ?
David: Je peux faire un script qui moifie tous les champs date avec des requêtes SQL (à mettre dans le dossier tools de GLPI (donc c'est une opération que seul l'admin pourra faire).
heures d'été et hiver¶
depuis php 5.2 les timezone ont ces informations et calcule automatiquement suivant les fuseau les décalages (hivers / été) et la 0.85 requiert PHP 5.3 mini. Donc pas besoin de s'en préoccuper
Calendriers¶
- Un calendrier des jours ouvrés doit utiliser la timezone de l'entité (exemple 8h=>18h)
Question¶
Comment gérer les calendriers des utilisateurs ayant une timezone différent de celui de l'entité?
David : Pour simplifier, on utilise la timezone de l'utilisateur connecté
Autre question : les heures de lancement des actions automatiques ? on considère les heures du serveur ?
David: oui on considère les heures du serveur. Après si GLPI est utilisé par des gens de toutes les timezone (enfin de beaucoup), il faudra élargir la plage d'exécution ou la réduire (genre l'optimize de la base)