[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / traiter / enregistrement.php
index 81516f2..adc94a8 100644 (file)
 <?php
 
 // Sécurité
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-function traiter_enregistrement_dist($args, $retours){
-    include_spip('inc/formidable');
-    include_spip('base/abstract_sql');
-    $options = $args['options'];
-    $formulaire = $args['formulaire'];
-    $id_formulaire = $args['id_formulaire'];
-    $saisies = unserialize($formulaire['saisies']);
-    $saisies = saisies_lister_par_nom($saisies);
-
-    // La personne a-t-elle un compte ?
-    global $auteur_session;
-    $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
-
-    // traitement de l'anonymisation
-    if ($options['anonymiser'] == 'on') {
-        // mod de l'id_auteur
-        $variables_anonymisation =
-            $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
-        $id = eval("return $variables_anonymisation;");
-        $id_auteur = formidable_scramble($id, $id_formulaire);
-    }
-    // On cherche le cookie et sinon on le crée
-    $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
-    if (isset($_COOKIE[$nom_cookie]))
-        $cookie = $_COOKIE[$nom_cookie];
-    else {
-        include_spip("inc/acces");
-        $cookie = creer_uniqid();
-    }
-
-    // On regarde si c'est une modif d'une réponse existante
-    $id_formulaires_reponse = $args['id_formulaires_reponse'];
-
-    // recherche d'éventuelles anciennes réponses
-       $reponses = formidable_verifier_reponse_formulaire(
-                       $id_formulaire, 
-                       $options['identification'], 
-                       ($options['anonymiser'] == 'on') 
-                               ? $options['anonymiser_variable'] 
-                               : false
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
+
+function traiter_enregistrement_dist($args, $retours) {
+       include_spip('inc/formidable');
+       include_spip('base/abstract_sql');
+       $options = $args['options'];
+       $formulaire = $args['formulaire'];
+       $id_formulaire = $args['id_formulaire'];
+       $saisies = unserialize($formulaire['saisies']);
+       $saisies = saisies_lister_par_nom($saisies);
+
+       // La personne a-t-elle un compte ?
+       $id_auteur = isset($GLOBALS['visiteur_session']) ? (isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['id_auteur'] : 0) : 0;
+
+       // traitement de l'anonymisation
+       if ($options['anonymiser'] == 'on') {
+               // mod de l'id_auteur
+               $variables_anonymisation =
+                       $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
+               $id = eval("return $variables_anonymisation;");
+               $id_auteur = formidable_scramble($id, $id_formulaire);
+       }
+
+       // On cherche le cookie et sinon on le crée
+       $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+       if (isset($_COOKIE[$nom_cookie])) {
+               $cookie = $_COOKIE[$nom_cookie];
+       } else {
+               include_spip('inc/acces');
+               $cookie = creer_uniqid();
+       }
+
+       // On regarde si c'est une modif d'une réponse existante
+       $id_formulaires_reponse = $args['id_formulaires_reponse'];
+
+       // recherche d'éventuelles anciennes réponses
+       $reponses = formidable_verifier_reponse_formulaire(
+               $id_formulaire,
+               $options['identification'],
+               ($options['anonymiser'] == 'on')
+                       ? $options['anonymiser_variable']
+                       : false
        );
-       
-    // pas d'id_formulaires_reponse : on cherche une éventuelle réponse en base
-    if ($id_formulaires_reponse == false) {
-       $traitements_formulaire = unserialize($formulaire['traitements']);
-       
-       if (isset($traitements_formulaire['enregistrement'])) {
-               $options =  $traitements_formulaire['enregistrement'];
-
-                       if (isset($options['multiple']) && $options['multiple'] == ''
-                               && isset($options['modifiable']) && $options['modifiable'] == 'on'
+
+       // pas d'id_formulaires_reponse : on cherche une éventuelle réponse en base
+       if ($id_formulaires_reponse == false) {
+               $traitements_formulaire = unserialize($formulaire['traitements']);
+
+               if (isset($traitements_formulaire['enregistrement'])) {
+                       $options =  $traitements_formulaire['enregistrement'];
+
+                       if (isset($options['multiple']) && $options['multiple'] == ''
+                                       && isset($options['modifiable']) && $options['modifiable'] == 'on'
                                        && is_array($reponses) && count($reponses) > 0) {
-                       $id_formulaires_reponse = max($reponses);
-               }
-       }
-    } else {
-       // vérifier que l'auteur est bien l'auteur de la réponse, si non, on invalide l'id_formulaires_reponse
-       if (in_array($id_formulaires_reponse, $reponses) == false) $id_formulaires_reponse = false;
-    }
-    
-    // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
-    if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
-        $statut='publie';
-    else
-        $statut = 'prop';
-
-    // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
-    if (!$id_formulaires_reponse){
-        $id_formulaires_reponse = sql_insertq(
-            'spip_formulaires_reponses',
-            array(
-                'id_formulaire' => $id_formulaire,
-                'id_auteur' => $id_auteur,
-                'cookie' => $cookie,
-                'ip' => $args['options']['ip'] == 'on' ? $GLOBALS['ip'] : '',
-                'date' => 'NOW()',
-                'statut' => $statut
-            )
-        );
-        // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
-        if (!$options['multiple'] or $options['modifiable']){
-            include_spip("inc/cookie");
-            // Expiration dans 30 jours
-            spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
-        }
-    } else {
-       // simple mise à jour du champ maj de la table spip_formulaires_reponses
-       sql_updateq(
-               'spip_formulaires_reponses', 
-               array('maj' => 'NOW()'), 
-               "id_formulaires_reponse = $id_formulaires_reponse"
-       );
-    }
-
-    // Si l'id n'a pas été créé correctement alors erreur
-    if (!($id_formulaires_reponse > 0)){
-        $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
-    }
-    // Sinon on continue à mettre à jour
-    else{
-        $champs = array();
-        $insertions = array();
-        foreach($saisies as $nom => $saisie){
-            // On ne prend que les champs qui ont effectivement été envoyés par le formulaire
-            if (($valeur = _request($nom)) !== null){
-                $champs[] = $nom;
-                $insertions[] = array(
-                    'id_formulaires_reponse' => $id_formulaires_reponse,
-                    'nom' => $nom,
-                    'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
-                );
-            }
-        }
-
-        // S'il y a bien des choses à modifier
-        if ($champs){
-            // On supprime d'abord les champs
-            sql_delete(
-                'spip_formulaires_reponses_champs',
-                array(
-                    'id_formulaires_reponse = '.$id_formulaires_reponse,
-                    sql_in('nom', $champs)
-                )
-            );
-
-            // Puis on insère les nouvelles valeurs
-            sql_insertq_multi(
-                'spip_formulaires_reponses_champs',
-                $insertions
-            );
-        }
-        $retours['message_ok'] .= "\n"._T('formidable:traiter_enregistrement_message_ok');
-             $retours['id_formulaires_reponse'] = $id_formulaires_reponse;
-    }
-
-    // noter qu'on a deja fait le boulot, pour ne pas risquer double appel
-    $retours['traitements']['enregistrement'] = true;
-    return $retours;
+                               $id_formulaires_reponse = max($reponses);
+                       }
+               }
+       } else {
+               // vérifier que l'auteur est bien l'auteur de la réponse, si non, on invalide l'id_formulaires_reponse
+               if (in_array($id_formulaires_reponse, $reponses) == false) {
+                       $id_formulaires_reponse = false;
+               }
+       }
+
+       // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
+       if ($options['moderation'] == 'posteriori'
+               or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire' => $id_formulaire, 'nouveau_statut' => 'publie'))) {
+               $statut='publie';
+       } else {
+               $statut = 'prop';
+       }
+
+       // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
+       if (!$id_formulaires_reponse) {
+               $id_formulaires_reponse = sql_insertq(
+                       'spip_formulaires_reponses',
+                       array(
+                               'id_formulaire' => $id_formulaire,
+                               'id_auteur' => $id_auteur,
+                               'cookie' => $cookie,
+                               'ip' => $args['options']['ip'] == 'on' ? $GLOBALS['ip'] : '',
+                               'date' => 'NOW()',
+                               'statut' => $statut
+                       )
+               );
+               // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables,
+               // il faut poser un cookie
+               if (!$options['multiple'] or $options['modifiable']) {
+                       include_spip('inc/cookie');
+                       // Expiration dans 30 jours
+                       spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
+               }
+       } else {
+               // simple mise à jour du champ maj de la table spip_formulaires_reponses
+               sql_updateq(
+                       'spip_formulaires_reponses',
+                       array('maj' => 'NOW()'),
+                       "id_formulaires_reponse = $id_formulaires_reponse"
+               );
+       }
+
+       // Si l'id n'a pas été créé correctement alors erreur
+       if (!($id_formulaires_reponse > 0)) {
+               $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
+       } else {
+               // Sinon on continue à mettre à jour
+               $champs = array();
+               $insertions = array();
+               foreach ($saisies as $nom => $saisie) {
+                       // On ne prend que les champs qui ont effectivement été envoyés par le formulaire
+                       if (($valeur = _request($nom)) !== null) {
+                               $champs[] = $nom;
+                               $insertions[] = array(
+                                       'id_formulaires_reponse' => $id_formulaires_reponse,
+                                       'nom' => $nom,
+                                       'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
+                               );
+                       }
+               }
+
+               // S'il y a bien des choses à modifier
+               if ($champs) {
+                       // On supprime d'abord les champs
+                       sql_delete(
+                               'spip_formulaires_reponses_champs',
+                               array(
+                                       'id_formulaires_reponse = '.$id_formulaires_reponse,
+                                       sql_in('nom', $champs)
+                               )
+                       );
+
+                       // Puis on insère les nouvelles valeurs
+                       sql_insertq_multi(
+                               'spip_formulaires_reponses_champs',
+                               $insertions
+                       );
+               }
+               if (!isset($retours['message_ok'])) {
+                       $retours['message_ok'] = '';
+               }
+               $retours['message_ok'] .= "\n"._T('formidable:traiter_enregistrement_message_ok');
+               $retours['id_formulaires_reponse'] = $id_formulaires_reponse;
+       }
+
+       // noter qu'on a deja fait le boulot, pour ne pas risquer double appel
+       $retours['traitements']['enregistrement'] = true;
+       return $retours;
 }
 
-function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){
-    include_spip('inc/saisies');
-    include_spip('base/abstract_sql');
-    $comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
-
-    // Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
-    if ($comparaison['supprimees']){
-        // On récupère les réponses du formulaire
-        $reponses = sql_allfetsel(
-            'id_formulaires_reponse',
-            'spip_formulaires_reponses',
-            'id_formulaire = '.$id_formulaire
-        );
-        $reponses = array_map('reset', $reponses);
-
-        // Tous les noms de champs à supprimer
-        $noms = array_keys($comparaison['supprimees']);
-
-        // On supprime
-        sql_delete(
-            'spip_formulaires_reponses_champs',
-            array(
-                sql_in('id_formulaires_reponse', $reponses),
-                sql_in('nom', $noms)
-            )
-        );
-    }
+function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles) {
+       include_spip('inc/saisies');
+       include_spip('base/abstract_sql');
+       $comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
+
+       // Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
+       if ($comparaison['supprimees']) {
+               // On récupère les réponses du formulaire
+               $reponses = sql_allfetsel(
+                       'id_formulaires_reponse',
+                       'spip_formulaires_reponses',
+                       'id_formulaire = '.$id_formulaire
+               );
+               $reponses = array_map('reset', $reponses);
+
+               // Tous les noms de champs à supprimer
+               $noms = array_keys($comparaison['supprimees']);
+
+               // On supprime
+               sql_delete(
+                       'spip_formulaires_reponses_champs',
+                       array(
+                               sql_in('id_formulaires_reponse', $reponses),
+                               sql_in('nom', $noms)
+                       )
+               );
+       }
 }
-
-?>