Bonjour,
Merci pour ta réponse.
J'ai modifier le code en fonction de tes remarques. Voici ce que ça donne :
J'ai du passer le champ /variable_php/ en varchar pour qu'il puisse prendre en compte les lettres.
(je préfère utiliser ce champ plutôt que de passer id_auteur en varchar)
Pour la documentation de synthèse, je propose de remplacer la partie inférieure de cet article :
avec le texte ci-dessous.
Pour le reste, vos remarques sont les bienvenues.
{{{Enregistrer les résultats du formulaire dans la base de données}}}
{{Une fois cette case cochée, un certain nombre d'options s’affichent. Il est notamment possible de rendre les réponses au formulaire :}}
- {{Multiples}} : une même personne peut répondre plusieurs fois.
- {{Modifiables}} : les visiteurs peuvent modifier leurs réponses après coup.
{{{**Méthode d’identification}}}
Dans le cas ou votre formulaire comprend des réponses modifiables ou uniques, un encart apparaîtra afin de définir une méthode d'identification des réponses :
- Soit {{par cookie}} (l'identification dépendra du navigateur sur lequel l'utilisateur rempli le formulaire. Si celui-ci n'autorise pas les cookies, l'identifiant de la personne authentifiée et la méthode d'identification par variable de connexion PHP seront utilisées à la place de cette méthode).
- Soit par {{identifiant de la personne identifiée}} (utile pour les formulaires nécessitant la création d'un compte à priori. Si l’utilisateur n'est pas connecté, la méthode d'identification par cookie sera utilisée à la place de cette méthode).
- Soit par {{identifiant de la réponse passée}} explicitement lors de l’appel au formulaire dans un squelette. ( Cette méthode permet de forcer l'affichage d'une réponse particulière. )
- Soit par{{ variable de connexion PHP}} (l'identification dépendra d'une variable d'environnement fournie par l'utilisateur. Si celle-ci n'existe pas, l'identifiant de la personne authentifiée et l'identification par cookies seront utilisées à la place de cette méthode).
{{{**protection des données personnelles}}}
Il est également possible de paramétrer la protection des données personnelles des utilisateurs :
- {{En ne conservant pas l’identifiant de la personne connectée}} (si la méthode d'identification est justement cet identifiant, celui-ci sera d'abord crypté avant d'être stocké en base).
- {{En demandant l’effacement des résultats les plus anciens de la table}} (une fois la case cochée, il sera possible de définir le nombre de jours pendant lesquels on garde l’enregistrement avant d’effacer).
- {{En choisissant d'enregistrer ou non les IPs des utilisateurs}} (ces résultats seront masqués après un délai de garde).
Enfin, quelques autres options sont disponibles. Elles concernent :
- La {{modération de l’enregistrement}} (à priori ou à posteriori).
- L'{{exclusion des champs de l'analyse des résultats proposée par formidable.}}
- Le {{rafraîchissement du cache}} à chaque enregistrement de réponses (utile si les réponses sont publiques ou si on veut afficher publiquement le nombre de réponses).
Le 19/12/2019 à 13:30, Maïeul a écrit :
Le 19/12/2019 à 13:04, Laurent a écrit :
Après vérification, je ne disposai pas de la dernière version de formidable (loi de là) et des modifications ont été effectuées sur le formulaire "Configurer les traitements".
Avec la dernière version, j'ai ajouté la possibilité d'utiliser une méthode d'identification par l'identifiant de la personne identifiée tout en anonymisant les réponses.
ça donne cela :
Connexion · GitLab
C'est utile pour rendre un vote fiable et anonyme. Donc j'imagine que ça peut être utile pour d'autre.
Dites-moi ce que vous en pensez.
Ces histoire d'anonymisation et d'identification sont une plaie. J'avais pas mal galeré à mettre un truc un peu près cohérent il y a un ans sur le sujet. Et j'avoue que j'ai un peu oublié ce qu'il en est (même si les messages de commits sont documentés). Est-ce que tu pourrais produire une documentation de synthèse la dessus ? (Par exemple sur contrib)
Sinon je viens de parcourir rapidement ton commit. J'ai trois remarques pour assurer une qualité du code
1. dans traiter/enregistrement.php. 24 tu duplique du code l. 190 de inc/formidable.php dans formidable_verifier_reponse_formulaire()
a. Dupliquer le code c'est mal
b. C'est d'autant plus mal que dans le cas présent, si jamais on fait une modif à un endroit, ca risque de casse
c. Par conséquent je t'invite à mettre tout cela dans une fonction à part
2. Tu fais un preg_replace en remplacant tout les caractères alphabétique dans le hash. Je comprend l'idée (rendre plus anonyme les choses), mais tu perd du coup en contrainte d'unicité, car tu risque d'avoir des collusions, en ayant deux "hash filtré" portant la même suite de chiffre (c'est d'ailleurs l'un des problèmes classiques du vote electronique : on ne ne peut pas vraiment assurer à la fois l'anonymat et l'unicité). En outre, les tests vont voir des suiotes des chiffre et vont tenter d'associer cela à un utilisateur. Bref, ce n'est pas une bonne solution.
a. Supprime le filtrage des lettres
b. Plutot que de hasher directement l'identifiant, hash sa concaténation avec secret_du_site()
c. Comme son nom l'indique, secret du site est une valeur secrete de site. Seule les webmestre peuvent y avoir accès. Avec ca, tu limite les possibilités d'authentifications (mais pas totalement, car cela repose sur le tiers de confiance : c'est d'ailleurs le problème du vote electronique....)
3. Dans formidable_verifier_reponse_formulaire() tu refais un appel à base sql pour optenir la configuration de l'enregistrement. C'est un peu idiot car on a deja ces infos dans les fonctions appellante. Je t'invite plutot à passser directement les options à formidable_verifier_reponse_formulaire() comme paramètre (et donc modifier le code)
Une fois cela fait, je t'inviterais à soumettre un pull request
Je met en copie Rastapopulos, pour avoir aussi son avis.
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net
Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html
Infos : https://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
Irc : de l'aide à toute heure : http://spip.net/irc