Projet

Général

Profil

Anomalie #6122

Corrections post création de sondage

Ajouté par Anonyme il y a environ un an. Mis à jour il y a 12 mois.

Statut:
Fermé
Priorité:
Élevée
Assigné à:
Version cible:
Début:
24/03/2023
Echéance:
% réalisé:

0%

Temps estimé:

Description

Il nous est impossible de faire une correction au titre ou ailleurs d'un sondage Date.Chapril.Org après publication.

Voir https://date.chapril.org/alKsB8zTU8EwjBMBKnw2CHg2/admin

Une fois la correction faite, le message suivant apparait:

Cette page n’est pas disponible pour le momentdate.chapril.org ne peut actuellement pas traiter cette requête.
HTTP ERROR 500

Merci de nous informer si vous pouvez corriger cette situation.

Historique

#1

Mis à jour par pitchum . il y a environ un an

  • Statut changé de Nouveau à Confirmé
  • Assigné à mis à pitchum .
  • Priorité changé de Normale à Élevée

J'ai créé un nouveau sondage de test pour reproduire le problème : https://date.chapril.org/egXUtKJIvasP9HlCZESYkzUw/admin

Le plantage est causé parce qu'on essaye d'enregistrer une chaine vide dans le champ end_date.

[Sun Mar 26 10:41:00.659797 2023] [php7:error] [pid 2414035] [client 109.190.213.58:0] PHP Fatal error:  Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1292
Incorrect datetime value: '' for column `date_chapril_org_db`.`fd_poll`.`end_date`
 at row 1 in /var/www/date.chapril.org/app/classes/Framadate/Repositories/PollRepository.php:60
Stack trace:
#0 /var/www/date.chapril.org/app/classes/Framadate/Repositories/PollRepository.php(60): PDOStatement->execute()
#1 /var/www/date.chapril.org/app/classes/Framadate/Services/AdminPollService.php(46): Framadate\\Repositories\\PollRepository->update()
#2 /var/www/date.chapril.org/adminstuds.php(200): Framadate\\Services\\AdminPollService->updatePoll()
#3 {main}\n  thrown in /var/www/date.chapril.org/app/classes/Framadate/Repositories/PollRepository.php on line 60,
 referer: https://date.chapril.org/egXUtKJIvasP9HlCZESYkzUw/admin

Dans l'immédiat, j'ai mis en commentaire le code fautif et ça débloque la situation.

diff --git a/app/classes/Framadate/Services/AdminPollService.php b/app/classes/Framadate/Services/AdminPollService.php
index f8482ae..4d45064 100644
--- a/app/classes/Framadate/Services/AdminPollService.php
+++ b/app/classes/Framadate/Services/AdminPollService.php
@@ -37,11 +37,11 @@ class AdminPollService {

        $end_date = strtotime($poll->end_date);

-       if ($end_date < strtotime($poll->creation_date)) {
-          $poll->end_date = $poll->creation_date;
-       } elseif ($end_date > $this->pollService->maxExpiryDate()) {
-          $poll->end_date = utf8_encode(strftime('%Y-%m-%d', $this->pollService->maxExpiryDate()));
-       }
+//     if ($end_date < strtotime($poll->creation_date)) {
+//        $poll->end_date = $poll->creation_date;
+//     } elseif ($end_date > $this->pollService->maxExpiryDate()) {
+//        $poll->end_date = utf8_encode(strftime('%Y-%m-%d', $this->pollService->maxExpiryDate()));
+//     }

        return $this->pollRepository->update($poll);
     }

Je cherche maintenant un correctif plus propre.

#2

Mis à jour par pitchum . il y a environ un an

  • Statut changé de Confirmé à Résolu

C'est corrigé.
Visiblement, la fonction PollService->maxExpiryDate() retournait auparavant un timestamp unix sous forme d'un int. Elle retourne désormais un objet DateTime.
Donc à priori, on n'est plus obligé de recourir a des conversions pour comparer la date de fin du sondage et la date max autorisée.

cf. https://forge.april.org/Chapril/date.chapril.org-framadate/commit/6d8c60c88b02c59c75386ec7044b64230fc6bfd6

#3

Mis à jour par Quentin Gibeaux il y a 12 mois

  • Statut changé de Résolu à Fermé

Formats disponibles : Atom PDF