Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposition de correction d'un bug d'affichage dans la version 3.5.1e #386

Open
Philippe34 opened this issue Sep 27, 2024 · 12 comments
Open
Assignees

Comments

@Philippe34
Copy link

Bonjour,

J'ai rencontré un bug d'affichage d'une ressource affichée par semaine

Une réservation pour le 8 octobre 2024 était affichée incorrectement dans le planning du 1 octobre. Elle s'affichait aussi correctement dans le planning du 8 octobre. Remarquez la 2è semaine ( 07 octobre - 11 octobre) s'affichant incorrectement sans ressources

image

image

J'ai corrigé ce problème en modifiant la ligne 134 de week.php

// BUG $week_end = mktime($eveningends, $eveningends_minutes, 0, $month_week, $day_week + 6, $year_week);
$week_end = mktime($eveningends, $eveningends_minutes, 0, $month_week, $day_week + 1, $year_week);

La réservation ne s'affiche plus incorrectement le 01 octobre et l'affichage est beaucoup plus propre
image

Et la réservation du 8 octobre est bien affichée
image

SI vous acceptiez de publier le correctif, cela pourrait être utile à ceux qui doivent encore rester comme moi en version 3.5.1

Cordialement

@Philippe34 Philippe34 added the bug label Sep 27, 2024
@ynaessens ynaessens self-assigned this Sep 28, 2024
@ynaessens
Copy link
Collaborator

Bonjour,
je ne reproduis pas le bug que vous avez décrit.
Cependant, la page comportait des erreurs d'arrondi implicite que php 8.2 rejette.
J'ai donc modifié le code en conséquence cf. 2f5faa2
Cordialement,
YN

@Philippe34
Copy link
Author

Bonjour @ynaessens
Je vous remercie pour vos correctifs, je vais tester dès que possible.
Désolé d'avoir oublié de vous indiquer la version de PHP. Notre GRR tourne sous PHP 8.1.29
Cordialement

@Philippe34
Copy link
Author

Je viens d'ajouter le correctif week.php et cela ne change pas la nature du défaut d'affichage que je constate.
Toutefois, ce correctif a solutionné l'issue "#359 Warnings et deprecated s'affichent lorsqu'on sélectionne une ressource".

En fait, je me demande si ce défaut ne provient pas du fait qu'il s'agit d'une migration de GRR 1.9.7e (PHP 5.3) vers 3.5.1 (PHP 8.1) sur une nouvelle machine (avec récupération de la base de données) et que quelque chose n'aurait pas été proprement upgradée.
Y aurait-t-il un utilitaire de vérification de la base de données que je pourrai lancer ?

Merci.

@ynaessens
Copy link
Collaborator

Bonjour,
à la réflexion, je soupçonne un décalage dans les heures système entre les deux serveurs.
Le bug décrit se produit-il avec toutes les réservations, ou uniquement les nouvelles, ou les anciennes ?
Cordialement,
YN

@Philippe34
Copy link
Author

Bonjour,
Nous avons 4 domaines dans notre GRR : salles, véhicules, matériels, divers. Et ce décalage ne se produit que pour le domaine salles et non les autres domaines. A noter que c'est essentiellement le domaine salles qui est utilisé pour les réservations.
Le problème d'affichage ne se produit que pour week.php et non pour week_all.php

Je montre une vue d'une ressource du domaine véhicules. Je n'ai pas noté de pb et il n'y a aucune décalage :

image

Si je reprends la vue d'une ressource du domaine salles, on voit ce décalage dans les jours et aussi, une répétition des heures (8h - 00h, 00h - 24h, 00h -24h, ....
Je peux constater que ce bug se produit pour toutes les réservations du domaine salles, les anciennes et les nouvelles et uniquement lorsqu'on affiche une ressource (une salle).
J'ai vérifié que les heures systèmes étaient les mêmes sur les 2 serveurs, mais cela semble lié à un problème d'heures comme vous le suggérez

image

La modification que j'avais proposée ne résoud que partiellement le problème pour le domaine salles : le décalage pour les salles disparait, mais pas la répétition des heures.

Malheureusement, il en induit de nouveaux sur les autres domaines, comme véhicules.
Sur cette image du domaine véhicules, les dates s'arrêtent au mardi

image

Je suis perplexe. Auriez-vous des suggestions ?
Encore merci

@ynaessens
Copy link
Collaborator

Je suis également perplexe.
Il faudrait pouvoir tester votre base de données, mais il semble que Github n'a pas de messagerie privée.
Je vous invite à rejoindre le groupe Discord.
Cordialement,
YN

@Philippe34
Copy link
Author

Merci @ynaessens pour votre invitation à Discord.
Cordialement

@Philippe34
Copy link
Author

Un retour pour vous signaler que je suis parvenu à régler la majorité des bugs et rendre l'application utilisable.

Il y avait ce problème que je n'avais pas encore signalé, mais lorsqu'on faisait apparaitre toutes les réservations en choisissant un jour du calendrier, cela mettait plusieurs dizaines de secondes à se charger car la page affichait les ressources sur une semaine, au lieu de seulement celles du jour.
Correctif qui a marché:
day.php: ligne 122

//$pm7 = mktime($eveningends, $eveningends_minutes, 0, $month, $day, $year);
$pm7 = $am7 + 43200 ;

Et pour corriger le problème de l'affichage des semaines:
week.php: ligne 137

//$week_end = mktime($eveningends, $eveningends_minutes, 0, $month_week, $day_week + 6, $year_week);
$week_end = $week_start + 86400 * 7;

Je n'ai pas réussi à corriger le problème de l'affichage des heures qui se répètent sur une semaine lorsqu'on choisit une ressource et qui fait appel à week.php

En conclusion, je ne crois pas que le problème vienne de la base de données puisque les réservations s'affichent sans erreur, mais plutôt dans le calcul du temps avec mktime(). Comme ces bugs n'apparaissaient pas sur les domaines avec peu de réservation, mais seulement avec le domaine des salles (plus de 40000 réservations), cela est peut-être lié à la volumétrie des réservations.

Cordialement

@ynaessens
Copy link
Collaborator

Bonjour,
votre message est énigmatique : quels sont les si nombreux bugs que vous avez eu à régler ?
Pour ce qui est de la taille de votre base de données, je doute un peu que ce soit la source des soucis, lorsque j'étais au lycée, nous avions l'emploi du temps reporté dans GRR, ce qui faisait de l'ordre de 2000 créneaux sur 36 semaines, et ça fonctionnait.
Pour ce qui est des correctifs que vous proposez :

  • sur day.php, implicitement la durée de vos journées fait 12 heures,
  • sur week.php, des soucis à craindre les semaines de changement d'heure.

Enfin, merci pour votre remarque relative à mktime(), certains calculs semblent pouvoir être évités. Je regarde cela de plus près dès que possible.
Cordialement,
YN

@Philippe34
Copy link
Author

Désolé si mes messages sont confus. Les bugs sont ceux que j'ai tenté de décrire dans ce fil.

Je vais illustrer avec le problème du calendrier avec des réservations très longues à s'afficher car s'affichant sur plusieurs jours au lieu de seulement le jour que j'ai sélectionné en cliquant sur la date.

Avec le day.php d'origine, la requête SQL est:

SELECT start_time, end_time, grr_entry.id, name, beneficiaire, grr_room.room_name,type, statut_entry, grr_entry.description, grr_entry.option_reservation, grr_room.delais_option_reservation, grr_entry.moderate, beneficiaire_ext, clef, grr_entry.courrier, grr_entry.overload_desc,grr_entry.room_id, grr_entry.create_by, grr_entry.nbparticipantmax
WHERE grr_room.area_id = 11  AND start_time < 1730223000 AND end_time > 1729749600

Si je traduis en langage humain, cela correspond à une recherche sur l'intervalle:
start_time < mardi 29 octobre 2024 18:30:00 [GMT+01:00] AND end_time > jeudi 24 octobre 2024 08:00:00 [GMT+02:00]

L'intervalle est sur 5 jours, ce qui explique les lenteurs et le bug d'affichage
Cela correspond à la requête:
$sql .= " AND start_time < ".($pm7+$resolution)." AND end_time > ".$am7."

Avec la modification que j'ai apportée: $pm7 = $am7 + 43200 ;
j'obtiens ceci:

SELECT start_time, end_time, grr_entry.id, name, beneficiaire, grr_room.room_name,type, statut_entry, grr_entry.description, grr_entry.option_reservation, grr_room.delais_option_reservation, grr_entry.moderate, beneficiaire_ext, clef, grr_entry.courrier, grr_entry.overload_desc,grr_entry.room_id, grr_entry.create_by, grr_entry.nbparticipantmax
WHERE grr_room.area_id = 11  AND start_time < 1729276200 AND end_time > 1729231200

Soit:
start_time < vendredi 18 octobre 2024 20:30:00 [GMT+02:00] AND end_time > vendredi 18 octobre 2024 08:00:00 [GMT+02:00]

J'ai bien une recherche sur la journée et l'affichage est quasi instantané.

Je ne m'explique pas comme vous pourquoi ajouter 43 200 (12h) fait quand même apparaitre la journée en entier.

Une piste ? : l'environnement de travail de mon serveur PHP 8.1.29 est sous Linux (Rocky Linux 8.10). Peut-il y avoir des différences avec d'autres environnements, comme PHP sous Windows ?

@ynaessens
Copy link
Collaborator

Bonjour,
merci pour votre réponse très détaillée.
Ce que je ne comprends pas, c'est que dans la page day.php, pour demain 18 octobre, j'ai la requête :
SELECT start_time, end_time, grr_entry.id, name, beneficiaire, grr_room.room_name,type, statut_entry, grr_entry.description, grr_entry.option_reservation, grr_room.delais_option_reservation, grr_entry.moderate, beneficiaire_ext, clef, grr_entry.courrier, grr_entry.overload_desc,grr_entry.room_id, grr_entry.create_by, grr_entry.nbparticipantmax FROM (grr_entry JOIN grr_room ON grr_entry.room_id=grr_room.id) WHERE grr_room.area_id = 2 AND start_time < 1729276200 AND end_time > 1729231200 ORDER BY start_time
c'est-à-dire
start_time < 18/10/2024 @ 20:30:00 et end_time > 18/10/2024 @ 08:00:00
ce qui valide le calcul de $am7 et $pm7.

Si vos journées font effectivement 12 heures, l'intervalle que vous avez choisi est convenable, et ça marche !
Je ne pense pas que votre installation soit en cause dans ce dysfonctionnement, à moins que mktime() soit défaillante ?

@Philippe34
Copy link
Author

Philippe34 commented Oct 17, 2024

Bonjour,
Je voudrais vous remercier pour votre intérêt aux problèmes que j'ai rencontrés et les échanges que nous avons eu pour tenter de comprendre.

Je vous souhaite une excellente journée.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants