Bug #9701
autosave: ne pas effectuer de store si le formulaire est déjà validé
0%
Description
Sur certains formulaires avec beaucoup de contraintes à calculer (et surtout des sources externes => contraintes depuis des webservice), la validation d'une page peut prendre du temps.
Dans ce cas, il est possible qu'un autosave() soit lancé, prenne du temps à faire la validation des données (4 ou 5 secondes, voire beaucoup plus).
Si entre temps l'utilisateur a cliqué sur "suivant", il est possible que le formdata soit mis à jour (store)... et que l'autosave précédent se finisse encore plus tard, déclenchant un second store qui pourrait contenir des données anciennes !
Il faut donc dans l'autosave avoir un système de protection, qui n'enregistre jamais un formdata s'il est plus agé que la date du début de la requête autosave.
Fichiers
Révisions associées
forms: don't let autosave() with errors modify user session (#9701)
Historique
Mis à jour par Frédéric Péters il y a plus de 8 ans
Et donc là-dessus, ce que j'écrivais : « ce que je verrais c'est un compteur, +1 lors du submit des pages du formulaire (que ça soit pour aller en avant ou en arrière), la valeur du compteur est passée dans l'autosave, elle est vérifiée juste avant son store(), si elle est différente, on passe. » (compteur associé au magictoken).
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Assigné à mis à Frédéric Péters
Même pas besoin de compteur, juste un token qui serait remplacé lors du submit; j'étudierai ça demain.
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Fichier 0001-forms-don-t-let-autosave-replace-values-that-were-su.patch 0001-forms-don-t-let-autosave-replace-values-that-were-su.patch ajouté
- Fichier 0002-forms-don-t-let-autosave-with-errors-modify-user-ses.patch 0002-forms-don-t-let-autosave-with-errors-modify-user-ses.patch ajouté
- Fichier 0003-forms-don-t-record-autosave-error-as-success.patch 0003-forms-don-t-record-autosave-error-as-success.patch ajouté
- Fichier 0004-forms-let-autosave-call-finish-before-starting-a-new.patch 0004-forms-let-autosave-call-finish-before-starting-a-new.patch ajouté
- 0001 : correspond au commentaire précédent, un jeton est ajouté, s'il n'est plus là quand l'autosave se termine, on n'enregistre pas la demande.
- 0002 : évolution du patch que j'avais en #9685, en cas d'erreur de autosave(), on n'enregistre pas la session. (cf #9685 pour le détail de ce qui se passait)
- 0003 : on notait toujours dans le js l'appel à autosave() comme un succès, boulet.
- 0004 : plutôt que toutes les cinq secondes, on attend que l'appel précédent ait terminé avant de relancer un autosave().
Mis à jour par Thomas Noël il y a plus de 8 ans
0004-forms-let-autosave-call-finish-before-starting-a-new.patch : je pense qu'il faut relancer le timer dans un "complete: function() { ... }" de ajax, et pas dans success
Mis à jour par Frédéric Péters il y a plus de 8 ans
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Statut changé de Nouveau à Résolu (à déployer)
- Patch proposed changé de Non à Oui
commit 63c850e1cb866077afde5b0170bfbd6a3abcf044 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Jan 20 14:28:50 2016 +0100 forms: let autosave() call finish before starting a new one commit 5fa59bdcc4c08863cde3539c9898df6900fdb419 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Jan 20 14:21:46 2016 +0100 forms: don't record autosave() error as success commit e910a6148e978e15d9893a47aac2c05e5e05f58f Author: Frédéric Péters <fpeters@entrouvert.com> Date: Mon Jan 18 22:20:06 2016 +0100 forms: don't let autosave() with errors modify user session (#9701) commit 92e51885221427abbcd2dbf3a4b0f25adb76e6e8 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Jan 20 14:06:42 2016 +0100 forms: don't let autosave() replace values that were submitted later on (#9701)
Mis à jour par Frédéric Péters il y a environ 8 ans
- Statut changé de Résolu (à déployer) à Fermé
forms: don't let autosave() replace values that were submitted later on (#9701)