Anomalie #6122
ferméCorrections post création de sondage
0%
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.
Mis à jour par pitchum . il y a plus d'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.
Mis à jour par pitchum . il y a plus d'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.