source: spip-zone/_plugins_/formidable_enregistrer_table/traiter/table.php @ 49171

Last change on this file since 49171 was 49171, checked in by jluc@…, 10 years ago
File size: 5.7 KB
Line 
1<?php
2// Débroussailleur : JLuc
3//
4// OK :
5// - Paramétrage du traitement =
6//              * spécification de la table destinataire pour le formulaire
7//              * correspondance des champs entre formulaire et table
8//              sous la forme d'une suite de couples champform1|champtable
9// - Enregistrement dans la table
10//
11// Approximatif ou foireux :
12// - Toute la mécanique de gestion des "modification de réponses existantes"
13//      est dupliquée depuis le traitement "enregistrement"
14//      Notamment, il utilise les valeurs de cette configuration qui doit donc être activée
15//      Il faudrait soit retirer tout ça et faire au plus simple
16//      soit mutualiser le code ET la config ET l'interface de config !
17// - La fonction traiter_table_update_dist n'a pas encore été touchée,
18//      elle doit être adaptée pour ce nouveau traitement
19//
20
21// Sécurité
22if (!defined("_ECRIRE_INC_VERSION")) return;
23
24function traitement_date_fr_vers_sql($date) {
25        sscanf ($date, "%2d/%2d/%4d%s",$jour,$mois,$an,$s);
26        return "$an-$mois-$jour";
27};
28
29// exemples :
30// function traitement_champ_bateau_couleur ($valeur, $table, $nom)
31// function traitement_champ_date_debut ($valeur, $table, $nom)
32// function traitement_champ_evenement_date_debut ($valeur, $table, $nom)
33// function traitement_champ ($valeur, $table, $nom)
34
35/* exemple d'usage :
36function traitement_champ ($valeur, $table, $nom) {
37        // ICI appels des fonctions de conversions
38        if (strpos($nom,'date')===0) {
39                $valeur = traitement_date_fr_vers_sql($valeur);
40                echo "<br>Reçu date fr et convertit vers SQL = $valeur";
41        };
42};
43*/
44
45function traiter_table_dist($args, $retours){
46       
47        include_spip('inc/formidable');
48        include_spip('base/abstract_sql');
49        $options = $args['options'];
50       
51        $table_destinataire = $options['table_destinataire'];
52       
53        $correspondance_champs_formulaire_table = $options['correspondance_champs_formulaire_table'];
54
55        $correspondance_champs_formulaire_table = saisies_chaine2tableau($correspondance_champs_formulaire_table);
56       
57        $formulaire = $args['formulaire'];
58        $id_formulaire = intval($formulaire['id_formulaire']);
59        $saisies = unserialize($formulaire['saisies']);
60        $saisies = saisies_lister_par_nom($saisies);
61
62        // La personne a-t-elle un compte ?
63        global $auteur_session;
64        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
65       
66        // On cherche le cookie et sinon on le crée
67        $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
68        if (isset($_COOKIE[$nom_cookie]))
69                $cookie = $_COOKIE[$nom_cookie];
70        else {
71                include_spip("inc/acces");
72                $cookie = creer_uniqid();
73        }
74       
75        // On regarde si c'est une modif d'une réponse existante
76        $modif_reponse = 
77                $id_formulaires_reponse 
78                        = intval(_request('deja_enregistre_'.$id_formulaire));
79       
80        // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
81        if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
82                $statut='publie';
83        else
84                $statut = 'prop';
85       
86        // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
87        if (!$id_formulaires_reponse){
88                $id_formulaires_reponse = sql_insertq(
89                        'spip_formulaires_reponses',
90                        array(
91                                'id_formulaire' => $id_formulaire,
92                                'id_auteur' => $id_auteur,
93                                'cookie' => $cookie,
94                                'ip' => $GLOBALS['ip'],
95                                'date' => 'NOW()',
96                                'statut' => $statut
97                        )
98                );
99                // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
100                if (!$options['multiple'] or $options['modifiable']){
101                        include_spip("inc/cookie");
102                        // Expiration dans 30 jours
103                        spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
104                }
105        }
106       
107        // Si l'id n'a pas été créé correctement alors erreur
108        if (!($id_formulaires_reponse > 0)){
109                $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
110        }
111        // Sinon on continue à mettre à jour
112        else {
113                $champs = array();
114                $insertions = array();
115                foreach($saisies as $nom => $saisie){
116                        // On ne prend que les champs qui ont effectivement été envoyés par le formulaire
117                        if (($valeur = _request($nom)) !== null){
118                                $champs[] = $nom;
119                                if (isset ($correspondance_champs_formulaire_table[$nom]))
120                                        $colname = $correspondance_champs_formulaire_table[$nom];
121                                else {
122                                        $retours['message_erreur'] .= "\n<br/>Erreur : le champ du formulaire ".$nom."n'a pas de correspondance déclarée dans la table utilisateur";
123                                        break;
124                                };
125                               
126                                // traitements des valeurs avant enregistrement : fonction de la table destinataire et du champ destination
127                                if (function_exists($f = 'traitement_champ_'.$table_destinataire.'_'.$nom) 
128                                        OR function_exists($f = 'traitement_champ_'.$nom)
129                                        OR function_exists($f = 'traitement_champ'))
130                                        $valeur = $f($valeur, $table_destinataire, $nom);
131                                       
132                                $inserts[$colname] = (is_array($valeur) ? serialize($valeur) : $valeur);
133                        }
134                }
135
136                if ($modif_reponse) // On modifie l'enregistrement trouvé
137                        $inserts['id_formulaires_reponse'] = $id_formulaires_reponse;
138       
139                // S'il y a bien des choses à modifier
140                if ($champs) {
141//                      if ($modif_reponse)
142//                              sql_updateq ($table_destinataire, $inserts);
143//                      else
144                        // On insère les nouvelles valeurs
145                        $id= sql_insertq ($table_destinataire, $inserts);
146                        if (!$id)       
147                                $retours['message_erreur'] .= "\n<br/>Erreur : l'insertion dans la table utilisateur ne se fait pas bien.".sql_error();
148                };
149        }
150
151        return $retours;
152}
153
154function traiter_table_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){
155        // Si des champs ont été supprimés du formulaire,
156        // il faut supprimer les colonnes de la table
157        // mais cela se régle en dehors de formidable
158        // et mettre à jour la table de correspondance
159        // mais le plugin ne fait pas de vérification au moment du changement.
160}
161
162?>
Note: See TracBrowser for help on using the repository browser.