Changeset 111970 in spip-zone


Ignore:
Timestamp:
Oct 11, 2018, 8:53:52 PM (6 days ago)
Author:
maieul@…
Message:

refactorisation du code : une seule fonction pour trouver la réponse qui doit être modifié si on autorise la modification des réponses
Pour le moment appeller:

  • lors du chargement du formulaire
  • lors de l'enregistrement des réponses
Location:
_plugins_/formidable/trunk
Files:
3 edited

Legend:

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

    r111850 r111970  
    127127                        }
    128128
    129                         // Si on passe un identifiant de reponse, on edite cette reponse si elle existe
    130                         if ($id_formulaires_reponse = intval($id_formulaires_reponse)) {
    131                                 $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
    132                                 if ($ok == false) {
    133                                         $contexte['editable'] = false;
    134                                         $contexte['message_erreur'] = _T(
    135                                                 'formidable:traiter_enregistrement_erreur_edition_reponse_inexistante'
    136                                         );
    137                                 }
    138                         } else {
    139                                 // calcul des paramètres d'anonymisation
    140                                 $options = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null;
    141 
    142                                 $anonymisation = (isset($options['anonymiser']) && $options['anonymiser']==true)
    143                                         ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
    144                                         : '';
    145 
    146                                 // Si multiple = non mais que c'est modifiable, alors on va chercher
    147                                 // la dernière réponse si elle existe
    148                                 if ($options
    149                                         and !$options['multiple']
    150                                         and $options['modifiable']
    151                                         and $reponses = formidable_verifier_reponse_formulaire(
    152                                                 $formulaire['id_formulaire'],
    153                                                 $options['identification'],
    154                                                 $anonymisation
    155                                         )) {
    156                                         $id_formulaires_reponse = array_pop($reponses);
    157                                         $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
    158                                 }
     129                        //trouver la réponse à éditer
     130                        $options_enregistrement = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null;
     131                        $id_formulaires_reponse = formidable_trouver_reponse_a_editer($formulaire['id_formulaire'], $id_formulaires_reponse, $options_enregistrement);
     132
     133                        // adapter le contexte en conséquence
     134                        $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
     135                        if ($ok == false) {
     136                                $contexte['editable'] = false;
     137                                $contexte['message_erreur'] = _T(
     138                                        'formidable:traiter_enregistrement_erreur_edition_reponse_inexistante'
     139                                );
    159140                        }
    160141                } else {
     
    540521function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) {
    541522
     523        if ($id_formulaires_reponse == false) {
     524                $ok = true;
     525                return $contexte;
     526        }
    542527        // On prépare des infos si jamais on a des champs fichiers
    543528        $saisies_fichiers = saisies_lister_avec_type($contexte['_saisies'], 'fichiers');// les saisies de type fichier
  • _plugins_/formidable/trunk/inc/formidable.php

    r110847 r111970  
    9191function formidable_generer_nom_cookie($id_formulaire) {
    9292        return $GLOBALS['cookie_prefix'].'cookie_formidable_'.$id_formulaire;
     93}
     94
     95
     96/*
     97 * Trouver la réponse à éditer pour un formulaire donné,
     98 * dans un contexte donné
     99 * en fonction de la configuration du formulaire.
     100 * @param int $id_formulaire L'identifiant du formulaire
     101 * @param int $id_formulaires_reponse L'identifant de réponse passé au moment de l'appel du formulaire
     102 * @param array $options Les options d'enregistrement du formulaire
     103 * @param boolean $verifier_est_auteur si égal à true, on vérifie si $id_formulaires_reponse est passé que l'auteur connecté est bien l'auteur de la réponse passée en argument
     104 * @return int $id_formulaires_reponse L'identifiant de la réponse à modifier effectivement.
     105 *
     106 */
     107function formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options, $verifier_est_auteur = false) {
     108        // Si on passe un identifiant de reponse, on edite cette reponse si elle existe
     109        if ($id_formulaires_reponse = intval($id_formulaires_reponse) and $verifier_est_auteur == false) {
     110                return $id_formulaires_reponse;
     111        } else {
     112                // calcul des paramètres d'anonymisation
     113                $anonymisation = (isset($options['anonymiser']) && $options['anonymiser'] == 'on')
     114                        ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
     115                        : '';
     116
     117                $reponses = formidable_verifier_reponse_formulaire(
     118                        $id_formulaire,
     119                        $options['identification'],
     120                        $anonymisation
     121                );
     122
     123                //A-t-on demandé de vérifier que l'auteur soit bien celui de la réponse?
     124                if ($id_formulaires_reponse = intval($id_formulaires_reponse)
     125                        and $verifier_est_auteur == true) {
     126                        if (in_array($id_formulaires_reponse, $reponses) == false) {
     127                                $id_formulaires_reponse = false;
     128                        }
     129                        return $id_formulaires_reponse;
     130                }
     131
     132                // Si multiple = non mais que c'est modifiable, alors on va chercher
     133                // la dernière réponse si elle existe
     134                if ($options
     135                        and !$options['multiple']
     136                        and $options['modifiable']
     137                        and is_array($reponses)
     138                        ) {
     139                                $id_formulaires_reponse = array_pop($reponses);
     140                }
     141        }
     142        return $id_formulaires_reponse;
    93143}
    94144
  • _plugins_/formidable/trunk/traiter/enregistrement.php

    r111969 r111970  
    4040        // On regarde si c'est une modif d'une réponse existante
    4141        $id_formulaires_reponse = $args['id_formulaires_reponse'];
    42 
    43         // recherche d'éventuelles anciennes réponses
    44         $reponses = formidable_verifier_reponse_formulaire(
    45                 $id_formulaire,
    46                 $options['identification'],
    47                 ($options['anonymiser'] == 'on')
    48                         ? $options['anonymiser_variable']
    49                         : false
    50         );
    51 
    52         // pas d'id_formulaires_reponse : on cherche une éventuelle réponse en base
    53         if ($id_formulaires_reponse == false) {
    54                 $traitements_formulaire = unserialize($formulaire['traitements']);
    55 
    56                 if (isset($traitements_formulaire['enregistrement'])) {
    57                         $options =  $traitements_formulaire['enregistrement'];
    58 
    59                         if (isset($options['multiple']) && $options['multiple'] == ''
    60                                         && isset($options['modifiable']) && $options['modifiable'] == 'on'
    61                                         && is_array($reponses) && count($reponses) > 0) {
    62                                 $id_formulaires_reponse = max($reponses);
    63                         }
    64                 }
    65         } else {
    66                 // vérifier que l'auteur est bien l'auteur de la réponse, si non, on invalide l'id_formulaires_reponse
    67                 if (in_array($id_formulaires_reponse, $reponses) == false) {
    68                         $id_formulaires_reponse = false;
    69                 }
    70         }
     42        $id_formulaires_reponse = formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options, true);
    7143
    7244        // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
Note: See TracChangeset for help on using the changeset viewer.