Changeset 112914 in spip-zone


Ignore:
Timestamp:
Dec 18, 2018, 9:13:55 PM (3 months ago)
Author:
maieul@…
Message:

Etape 5 : avoir une fonction qui trouve la réponse d'une personne à un formulaire tenant compte du choix principal d'identification des réponses

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/inc/formidable.php

    r112912 r112914  
    111111        } else {
    112112                // calcul des paramètres d'anonymisation
    113                 $anonymisation = (isset($options['anonymiser']) && $options['anonymiser'] == 'on')
    114                         ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
    115                         : '';
    116113
    117114                $reponses = formidable_verifier_reponse_formulaire(
    118115                        $id_formulaire,
    119116                        $options['identification'],
    120                         $anonymisation
     117                        $options['variable_php']
    121118                );
    122119
     
    148145 * @param int $id_formulaire L'identifiant du formulaire
    149146 * @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur'
    150  * @param string $anonymisation : vaut '' si le formulaire n'est pas anonymisé, sinon c'est la variable d'anonymisation
     147 * @param string $variable_php_identification : la variable php servant à identifier une réponse
    151148 * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
    152149 */
    153 function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification = 'cookie', $anonymisation = '') {
     150function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification = 'cookie', $variable_php_identification = '') {
    154151        global $auteur_session;
    155152        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
    156153        $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
    157154        $cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
    158 
    159 
    160         // ni cookie ni id, on ne peut rien faire
    161         if (!$cookie and !$id_auteur) {
     155        $variable_php_identification = formidable_variable_php_identification($variable_php_identification, $id_formulaire);
     156
     157        // ni cookie ni id, ni variable_php,  on ne peut rien faire
     158        if (!$cookie and !$id_auteur and !$variable_php_identification) {
    162159                return false;
    163160        }
    164161
    165         // priorite sur le cookie
     162
     163        // Determiner les différentes clauses $WHERE possible en fonction de ce qu'on a
     164        $where_id_auteur = '';
     165        $where_cookie = '';
     166        $where_variable_php = '';
     167        if ($id_auteur) {
     168                $where_id_auteur = 'id_auteur='.$id_auteur;
     169        }
     170        if ($cookie) {
     171                $where_cookie = 'cookie='.sql_quote($cookie);
     172        }
     173        if ($variable_php_identification) {
     174                $where_variable_php = 'variable_php='.$variable_php_identification;
     175        }
     176
     177        // Comment identifie-t-on? Attention, le choix d'identification indique une PRIORITE, donc cela veut dire que les autres méthodes peuvent venir après
    166178        if ($choix_identification == 'cookie' or !$choix_identification) {
    167179                if ($cookie) {
    168                         $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
     180                        $where = array($where_cookie);
    169181                } else {
    170                         $where = 'id_auteur='.$id_auteur;
    171                 }
    172         } else {
    173                 // sinon sur l'id_auteur
     182                        $where = array($where_id_auteur, $where_variable_php);
     183                }
     184        } elseif ($choix_identification == 'id_auteur') {
    174185                if ($id_auteur) {
    175                         $where = 'id_auteur='.$id_auteur;
     186                        $where = array($where_id_auteur);
    176187                } else {
    177                         $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
    178                 }
    179         }
     188                        $where = array($where_cookie, $where_variable_php);
     189                }
     190        } elseif ($choix_identification = 'variable_php') {
     191                if ($variable_php_identification) {
     192                        $where = array($where_variable_php);
     193                } else {
     194                        $where = array($where_cookie, $where_id_auteur);
     195                }
     196        }
     197        $where = array_filter($where);//Supprimer les wheres null
     198        $where = implode($where, ' OR ');
    180199
    181200        $reponses = sql_allfetsel(
     
    433452 * @param string $login Login à transformer
    434453 * @param string $id_form ID du formulaire concerné
    435  * @param string $passwd Chaîne 'secrète' ajoutée au login et id_formulaire pour éviter
    436  *  les recoupements d'identité entre plusieurs formulaires
    437454 * @return string Un nombre de 19 chiffres
    438455*/
    439 function formidable_scramble($login, $id_form, $passwd = '') {
    440         if ($passwd == '') {
    441                 if (isset($GLOBALS['formulaires']['passwd']['interne']) == false) {
    442                         $passwd = $GLOBALS['formulaires']['passwd']['interne'];
    443                 } else {
    444                         $passwd = 'palabresecreta';
    445                 }
     456function formidable_scramble($login, $id_form) {
     457        if (isset($GLOBALS['formulaires']['passwd']['interne']) == false) {
     458                $passwd = $GLOBALS['formulaires']['passwd']['interne'];
     459        } else {
     460                $passwd = 'palabresecreta';
    446461        }
    447462        $login_md5 = md5("$login$passwd$id_form");
     
    528543
    529544/**
    530  * Retourne la valeur de la variable PHP servant à anonymiser.
     545 * Retourne la valeur "scrambelisée" de la variable PHP d'identification.
    531546 * pour les deux variables proposés par formidable, recherche directement dans $_SERVER
    532547 * sinon utilise un eval() si une autre variable a été défini en global.
    533548 * Mais peu probable que le cas se présente, car pas d'interface dans le .yaml pour proposer d'autres variables que celle définies par formidable
    534549 * @param string $nom_variable le nom de la variable
    535  */
    536 function formidable_variable_anonymisation($nom_variable) {
     550 * @param string $id_formulaire le formulaire concerné
     551 * @return string
     552 */
     553function formidable_variable_php_identification($nom_variable, $id_formulaire) {
    537554        if (in_array($nom_variable, array("remote_user", "php_auth_user"))) {
    538555                $nom_variable = strtoupper($nom_variable);
    539                 return isset($_SERVER[$nom_variable]) ? $_SERVER[$nom_variable] : null;
    540         }
    541         return eval("return $nom_variable;");
    542 }
     556                $valeur_variable = isset($_SERVER[$nom_variable]) ? $_SERVER[$nom_variable] : 0;
     557        } else {
     558                $valeur_variable = eval ("return $nom_variable;");
     559        }
     560        if ($valeur_variable) {
     561                $valeur_variable = formidable_scramble($valeur_variable, $id_formulaire);
     562        }
     563        return $valeur_variable;
     564}
Note: See TracChangeset for help on using the changeset viewer.