Project

General

Profile

Anomalie #6122

Corrections post création de sondage

Added by Anonymous about 1 year ago. Updated about 1 year ago.

Status:
Fermé
Priority:
Élevée
Assignee:
Target version:
Start date:
03/24/2023
Due date:
% Done:

0%

Estimated time:

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.

History

#1

Updated by pitchum . about 1 year ago

  • Status changed from Nouveau to Confirmé
  • Assignee set to pitchum .
  • Priority changed from Normale to É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

Updated by pitchum . about 1 year ago

  • Status changed from Confirmé to 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

Updated by Quentin Gibeaux about 1 year ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF