Connectix Boards

Bienvenue, vous n'êtes pas connecté. ( Se connecter - S'enregistrer )

Dernière version sortie: 0.8.4!
Venez tester la version 1.0 beta :)

Connectix Boards > Zone développement > Programmation > [MOD - BETA] Timezone Fix

RSS >  [MOD - BETA] Timezone Fix, Aide pour régler un dernier bug qui persiste
Ishimaru Chiaki #1 04/05/2009 - 07h44

Groupe : Doc-rédacteur
Messages : 692
Enregistré le : 12/03/2008

Hors ligne Site Web

Je relance ce dont il était question dans ce sujet.

J'ai donc commencé à travailler sur un MOD, il y a quelques temps déjà, afin de permettre de configurer depuis le panneau d'admin, le fuseau horaire et l'activation de l'heure d'été pour les invités et ceux qui n'ont pas sélectionné de fuseau horaire dans le profil.

Mais il restait encore une chose à régler, puisque la gestion du Hier/Aujourd'hui se base sur l'heure du serveur, ce qui fait que si le forum est sur un serveur français, les Hier/Aujourd'hui se baseront sur ce fuseau horaire, quel que soit celui sélectionné dans le panneau d'admin ou dans le profil.

Sur mon forum que j'ai en local sous Ubuntu, je n'ai pas de décalage sous mon fuseau horaire, puisque l'heure de ma machine est la même que dans mon profil.  Par contre, sur le forum hébergé sur Servhome, dont le serveur est à l'heure française, j'ai ce décalage.

J'ai pu réduire cet écart, mais je n'ai pas encore réussi à l'éliminer, puisque j'ai encore un décalage de 2 heures qui persiste.

Voici les infos.
Forum de test : http://ishimaru-design.servhome.org/tests/cb
Lien de l'archive : http://ishimaru-design.servhome.org/divers/cb_system_timezone_fix_0.8_v0.1beta.zip

Détails des modifications
SpoilerFichiers modifiés :
- include/lib/lib.cb.php
- admin/admin.config.php
- admin/templates/admin_config.php
- lang/fr/paneladmin.lang
- lang/en/paneladmin.lang

SQL

INSERT INTO `connectix_boards`.`cb_config` (`cf_field` ,`cf_value`) VALUES ('defaulttimezone', '0');
INSERT INTO `connectix_boards`.`cb_config` (`cf_field` ,`cf_value`) VALUES ('defaultctsummer', '0');


OUVRIR

include/lib/lib.cb.php

TROUVER

    if ($_SESSION['cb_user']->logged) {
        $timestamp = $timestamp
            - ((int)date('Z',$timestamp)) // On réaligne avec GMT
            + $_SESSION['cb_user']->usr_pref_timezone*3600 // Décalage à cause du fuseau horaire
            + $_SESSION['cb_user']->usr_pref_ctsummer*((int)date('I',$timestamp))*3600; // Décalage à cause du changement d'heure été/hiver
    }


APRÈS, AJOUTER

//BEGIN Timezone Fix MOD
    else {
        $timestamp = $timestamp
            - ((int)date('Z',$timestamp))
            + $GLOBALS['cb_cfg']->config['defaulttimezone']*3600 //Décalage à cause du fuseau horaire
            + $GLOBALS['cb_cfg']->config['defaultctsummer']*((int)date('I',$timestamp))*3600; //Décalage à cause du changement d'heure
    }
//END Timezone Fix MOD


TROUVER

    if ($display_full_day) {
        if (date('d/m/Y',time()) == $day_orig) $day = lang('today');
        elseif (date('d/m/Y',time() - 86400) == $day_orig) $day = lang('yesterday');
    }


REMPLACER PAR

    if ($display_full_day) {
        if($_SESSION['cb_user']->logged) {
            $current_decalage = ((int)date('Z',time()));
            $current_timezone = $_SESSION['cb_user']->usr_pref_timezone*3600;
            $current_ctsummer = $_SESSION['cb_user']->usr_pref_ctsummer*((int)date('I',time()))*3600;
        }
        else {
            $current_decalage = ((int)date('Z',time()));
            $current_timezone = $GLOBALS['cb_cfg']->config['defaulttimezone']*3600;
            $current_ctsummer = $GLOBALS['cb_cfg']->config['defaultctsummer']*((int)date('I',time()))*3600;
        }
        if (date('d/m/Y',time() - $current_decalage + $current_timezone + $current_ctsummer) == $day_orig) $day = lang('today');
        elseif (date('d/m/Y',time() - $current_decalage + $current_timezone + $current_ctsummer - 86400) == $day_orig) $day = lang('yesterday');
    }


OUVRIR

admin/admin.config.php

TROUVER

$GLOBALS['cb_tpl']->assign('pa_c_deflanguage',langMenu('defaultlanguage',$GLOBALS['cb_cfg']->config['defaultlanguage']));

APRÈS, AJOUTER

//BEGIN Timezine Fix MOD
        $GLOBALS['cb_tpl']->assign('pa_c_timezone',$timezones);
        $GLOBALS['cb_tpl']->assign('pa_c_deftimezone',$GLOBALS['cb_cfg']->config['defaulttimezone']);
        $GLOBALS['cb_tpl']->assign('pa_c_defctsummer',$GLOBALS['cb_cfg']->config['defaultctsummer']);
//END Timezone Fix MOD


OUVRIR

admin/templates/admin_config.php

TROUVER

            <tr>
               <td class="cfg_name">
                   <?php echo lang('pa_defaultlanguage'); ?>
               </td>
               <td class="cfg_explane">
                   <?php echo lang('pa_defaultlanguage_info'); ?>
               </td>
               <td class="cfg_param">
                   <?php echo $pa_c_deflanguage; ?>
               </td>
           </tr>


APRÈS, AJOUTER

            <!-- BEGIN Timezone Fix MOD -->
            <tr>
                <td class="cfg_name">
                    <?php echo lang('pa_defaulttimezone'); ?>
                </td>
                <td class="cfg_explane">
                    <?php echo lang('pa_defaulttimezone_info'); ?>
                </td>
                <td class="cfg_param">
                    <select name='defaulttimezone'>
                        <?php foreach ($pa_c_timezone as $key => $value): ?>
                        <option value="<?php echo $key; ?>"<?php if ($key == $pa_c_deftimezone): ?> selected="selected"<?php endif;?>><?php echo $value; ?></option>
                        <?php endforeach; ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td class="cfg_name">
                    <?php echo lang('pa_defaultctsummer'); ?>
                </td>
                <td class="cfg_explane">
                    <?php echo lang('pa_defaultctsummer_info'); ?>
                </td>
                <td class="cfg_param">
                    <input type="radio" name="defaultctsummer" <?php if ($pa_c_defctsummer==1): ?>checked="checked"<?php endif; ?> value="1" /> <?php echo lang('yes'); ?> <input type="radio" name="defaultctsummer" <?php if($pa_c_defctsummer==0): ?>checked="checked"<?php endif; ?> value="0" /> <?php echo lang('no'); ?>
                </td>
            </tr>
            <!-- END Timezone Fix MOD -->


OUVRIR

lang/fr/paneladmin.lang

TROUVER

    'pa_defaultlanguage_info' => 'Cette langue sera utilisée pour les invités et les membres n\'ayant pas choisi de langue dans leurs données personnelles.',

APRÈS, AJOUTER

//BEGIN Timezone Fix MOD
    'pa_defaulttimezone' => 'Fuseau horaire par défaut',
    'pa_defaulttimezone_info' => 'Les messages du forum seront affichés sous ce fuseau horaire pour les invités et les membres n\'ayant pas choisi de fuseau horaire dans leurs données personnelles.',
    'pa_defaultctsummer' => 'Activer l\'heure d\'été',
    'pa_defaultctsummer_info' => 'Si vous observez l\'heure d\'été, l\'activation de l\'heure d\'heure d\'été ajoutera une heure au fuseau horaire par défaut du forum.',
//END Timezone Fix MOD


OUVRIR

lang/en/paneladmin.lang

TROUVER

  'pa_defaultlanguage_info' => 'This is the language that will be used for guests or members that have not specified a language in their personal options.',

APRÈS, AJOUTER

//BEGIN Timezone Fix MOD
    'pa_defaulttimezone' => 'Default timezone',
    'pa_defaulttimezone_info' => 'The board\'s messages will be displayed under this timezone for guests or members who have not specified a timezone in their personal options.',
    'pa_defaultctsummer' => 'Activate Daylight Saving Time',
    'pa_defaultctsummer_info' => 'If you observe Daylight Saving time, activating it will add one hour to the board\'s default timezone.',
//END Timezone Fix MOD


SAUVEGARDER & FERMER LES FICHIERS


Merci d'avance à quiconque arrivera à régler ce problème de décalage persistant.
Pour les testeurs : Dans le profil et l'ACP, utiliser un fuseau horaire différent de celui du serveur où le forum est hébergé.  Par exemple, si le forum est sur un serveur français (GMT+2), utiliser un fuseau horaire autre que GMT+2, comme par exemple, GMT-4 qui est le fuseau horaire québécois.
120forever #2 04/05/2009 - 08h03

Groupe : Habitué
Messages : 127
Enregistré le : 19/05/2007

Hors ligne

En effet ce problème est plutôt gênant.

Question à Martin :
Je me trompe peut être, mais la gestion des fuseaux horaires n'est-elle pas prévu pour la prochaine version ?
Ce message a été édité par 120forever le 04/05/2009 à 08h04.
Ishimaru Chiaki #3 04/05/2009 - 09h58

Groupe : Doc-rédacteur
Messages : 692
Enregistré le : 12/03/2008

Hors ligne Site Web

Car j'aurais aimé pouvoir donner le lien de mon MOD à Rio, qui avait posté ici

Comme je ne savais pas quand est-ce que la beta de cette nouvelle version allait sortir, je voulais faire un fix pour la 0.8.4 en attendant.
Martin #4 04/05/2009 - 17h56

Groupe : Administrateur
Messages : 3628
Enregistré le : 01/02/2005

Hors ligne Site Web

J'examine ça dès que j'ai le temps.
Posted Image
« Entre une mauvaise cuisinière et une empoisonneuse il n'y a qu'une différence d'intention. » - P. Desproges
Martin #5 20/06/2009 - 03h17

Groupe : Administrateur
Messages : 3628
Enregistré le : 01/02/2005

Hors ligne Site Web

J'ai intégré un truc sensiblement similaire dans la version de dev.  ^^
Posted Image
« Entre une mauvaise cuisinière et une empoisonneuse il n'y a qu'une différence d'intention. » - P. Desproges
Ishimaru Chiaki #6 20/06/2009 - 10h23

Groupe : Doc-rédacteur
Messages : 692
Enregistré le : 12/03/2008

Hors ligne Site Web

Ok, merci beaucoup :)

J'ai hâââte de bêta-tester !

 >  Réponse rapide

Composez votre message

Connectix Boards > Zone développement > Programmation > [MOD - BETA] Timezone Fix

 >  Informations du forum

1 personne(s) présente(s) durant une période de 15 minutes (0 membre(s) et 1 invité(s)).