diff --git a/base/formidable_tables.php b/base/formidable_tables.php index d88710ae7ec5973b8872935cb1d28967b86032c6..c0d4c44c3ee6ebd087a38129c636a3c5f2ae1eec 100644 --- a/base/formidable_tables.php +++ b/base/formidable_tables.php @@ -132,7 +132,7 @@ function formidable_declarer_tables_objets_sql($tables) { 'ip' => "varchar(255) NOT NULL default ''", 'id_auteur' => 'bigint(21) NOT NULL default 0', 'cookie' => "varchar(255) NOT NULL default ''", - 'variable_php' => 'bigint(21) NOT NULL default 0', + 'variable_php' => "varchar(255) NOT NULL default ''", 'statut' => "varchar(10) NOT NULL default ''", 'maj' => 'timestamp' ), diff --git a/formidable_administrations.php b/formidable_administrations.php index 796f380f1a39e6e988c1a0337e14293740690d85..c13ffe877a9a3de99d1fb7569d4391d4a372b39a 100644 --- a/formidable_administrations.php +++ b/formidable_administrations.php @@ -101,6 +101,9 @@ function formidable_upgrade($nom_meta_base_version, $version_cible) { $maj['0.15.0'] = array( array('formidable_effacer_traitement_enregistrer_sans_option') ); + $maj['0.17.1'] = array( + array('sql_alter','TABLE spip_formulaires_reponses CHANGE variable_php variable_php VARCHAR(255) NOT NULL default ""') + ); include_spip('base/upgrade'); maj_plugin($nom_meta_base_version, $version_cible, $maj); } diff --git a/formidable_autorisations.php b/formidable_autorisations.php index bbadf759fcc651adbc59584f9a43baa5f7c39406..cdb81a7f70faf4a37a73315ffd1a52097f31378f 100644 --- a/formidable_autorisations.php +++ b/formidable_autorisations.php @@ -172,7 +172,7 @@ function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) { } else { include_spip('inc/formidable'); // Si la personne n'a jamais répondu, c'est bon - if (!formidable_verifier_reponse_formulaire($id, $traitements['enregistrement']['identification'], $traitements['enregistrement']['variable_php'])) { + if (!formidable_verifier_reponse_formulaire($id, $traitements['enregistrement']['identification'], $traitements['enregistrement']['variable_php'], $traitements['enregistrement']['anonymiser'])) { return true; } else { return false; diff --git a/inc/formidable.php b/inc/formidable.php index 24cf143d8ba886e1778d03f035e3dbef1afc5b58..a3c2f46dedf453024942ec5ae6a3026393a6fb33 100644 --- a/inc/formidable.php +++ b/inc/formidable.php @@ -149,9 +149,10 @@ function formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_rep * @param int $id_formulaire L'identifiant du formulaire * @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur' * @param string $variable_php_identification : la variable php servant à identifier une réponse + * @param string $anonymiser : si 'on', le formulaire doit-être anonymisé * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false */ -function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification = 'cookie', $variable_php_identification = '') { +function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification = 'cookie', $variable_php_identification = '', $anonymiser='') { global $auteur_session; $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0; $nom_cookie = formidable_generer_nom_cookie($id_formulaire); @@ -163,13 +164,17 @@ function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identific return false; } - // Determiner les différentes clauses $WHERE possible en fonction de ce qu'on a $where_id_auteur = ''; $where_cookie = ''; $where_variable_php = ''; if ($id_auteur) { - $where_id_auteur = 'id_auteur='.$id_auteur; + if ($anonymiser == 'on') { + $id_auteur = formidable_crypter_id_auteur($id_auteur); + $where_id_auteur = 'variable_php="'.$id_auteur.'"'; + } else { + $where_id_auteur = 'id_auteur='.$id_auteur; + } } if ($cookie) { $where_cookie = 'cookie='.sql_quote($cookie); @@ -189,7 +194,7 @@ function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identific if ($id_auteur) { $where = array($where_id_auteur); } else { - $where = array($where_cookie, $where_variable_php); + $where = array($where_cookie); } } elseif ($choix_identification == 'variable_php') { if ($variable_php_identification) { @@ -596,3 +601,14 @@ function formidable_variable_php_identification($nom_variable, $id_formulaire) { } return $valeur_variable; } + +/** + * Retourne une valeur crypté de l'id_auteur. + * @param string $id_auteur + * @return string + */ +function formidable_crypter_id_auteur($id_auteur="") { + include_spip('inc/securiser_action'); + $pass = secret_du_site(); + return md5($pass.$id_auteur); +} diff --git a/paquet.xml b/paquet.xml index 7ebfa2b95a76703bb49fbdf48a276c4b69b60741..8bf0b31e836b228a0a55989cf238b46eaf561ecb 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,11 +1,11 @@ <paquet prefix="formidable" categorie="communication" - version="3.46.8" + version="3.47.1" etat="stable" compatibilite="[3.0.0;3.2.*]" logo="images/formidable-64.png" - schema="0.15.0" + schema="0.17.1" documentation="https://contrib.spip.net/Formidable-le-generateur-de-formulaires" > <nom>Formidable</nom> diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php index f70917f42d0bb7697957375efeaeccef598427fb..c516d5725da182be87ec5fec963fb8e8b28e5cf6 100644 --- a/traiter/enregistrement.php +++ b/traiter/enregistrement.php @@ -19,8 +19,11 @@ function traiter_enregistrement_dist($args, $retours) { $id_auteur = isset($GLOBALS['visiteur_session']) ? (isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['id_auteur'] : 0) : 0; - // traitement de l'anonymisation + // traitement de l'anonymisation de l'auteur lorsque la méthode d'identification se fait par l'identifiant if ($options['anonymiser'] == 'on' and $id_auteur) { + if ($options['identification'] == 'id_auteur' ) { + $variable_php = formidable_crypter_id_auteur($id_auteur); + } $id_auteur = 0; } @@ -32,8 +35,11 @@ function traiter_enregistrement_dist($args, $retours) { include_spip('inc/acces'); $cookie = creer_uniqid(); } + // On crée un identifiant depuis l'éventuelle variable php d'identification - $variable_php = formidable_variable_php_identification($options['variable_php'], $id_formulaire); + if ($options['identification'] == 'variable_php' ) { + $variable_php = formidable_variable_php_identification($options['variable_php'], $id_formulaire); + } // On regarde si c'est une modif d'une réponse existante $id_formulaires_reponse = $args['id_formulaires_reponse']; diff --git a/traiter/enregistrement.yaml b/traiter/enregistrement.yaml index d9472fb54a4868f891826ce6adec07082dec6471..280eb3ea7199981d4f4f5896fa688614dc7dd82d 100644 --- a/traiter/enregistrement.yaml +++ b/traiter/enregistrement.yaml @@ -111,7 +111,6 @@ options: label_case: '<:formidable:traiter_enregistrement_option_anonymiser_label:>' defaut: '' li_class: 'pleine_largeur' - afficher_si: '!(@traitements[enregistrement][identification]@ == "id_auteur" && @traitements[enregistrement][multiple]@!="on" || @traitements[enregistrement][modifiable]@=="on")' - saisie: 'case' options: