source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/balise/forms.php @ 10099

Last change on this file since 10099 was 10099, checked in by cedric@…, 13 years ago

"ne pas presenter une ancienne donnee si on est en reponde multiples et aucune id_donnee selectionnee"

File size: 4.8 KB
Line 
1<?php
2/*
3 * forms
4 * Gestion de formulaires editables dynamiques
5 *
6 * Auteurs :
7 * Antoine Pitrou
8 * Cedric Morin
9 * Renato
10 * ??? 2005,2006 - Distribue sous licence GNU/GPL
11 *
12 */
13
14if (!defined("_ECRIRE_INC_VERSION")) return;    #securite
15
16// Pas besoin de contexte de compilation
17global $balise_FORMS_collecte;
18$balise_FORMS_collecte = array('id_form','id_article','id_donnee');
19
20function balise_FORMS ($p) {
21        return calculer_balise_dynamique($p,'FORMS', array('id_form', 'id_article', 'id_donnee', 'class'));
22}
23
24function balise_FORMS_stat($args, $filtres) {
25        return $args;
26}
27
28function balise_FORMS_dyn($id_form = 0, $id_article = 0, $id_donnee = 0, $class='', $script_validation = 'valide_form', $message_confirm='forms:avis_message_confirmation',$reponse_enregistree="forms:reponse_enregistree",$forms_obligatoires="") {
29        if (!include_spip('inc/autoriser'))
30                include_spip('inc/autoriser_compat');
31        $url = self();
32        // nettoyer l'url qui est passee par htmlentities pour raison de securites
33        $url = str_replace("&amp;","&",$url);
34        if ($retour=='') $retour = $url;
35
36        $res = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
37        if (!$row = spip_fetch_array($res)) return;
38        else {
39                if ($forms_obligatoires!='' && $row['forms_obligatoires']!='') $forms_obligatoires .= ",";
40                $forms_obligatoires .= $row['forms_obligatoires'];
41                // substituer le formulaire obligatoire pas rempli si necessaire
42                if (strlen($forms_obligatoires)){
43                        $row=Forms_obligatoire($row,$forms_obligatoires);
44                        $id_form=$row['id_form'];
45                }
46                $type_form = $row['type_form'];
47        }
48
49        $id_donnee = $id_donnee?$id_donnee:intval(_request('id_donnee'));
50        $erreur = array();
51        $reponse = '';
52        $formok = '';
53        $valeurs = array('0'=>'0');
54        $affiche_sondage = '';
55        $formactif = (
56          (
57                   (_DIR_RESTREINT==_DIR_RESTREINT_ABS && $row['modifiable']=='oui')
58                  OR in_array(_request('exec'),$GLOBALS['forms_actif_exec'])
59                )
60                AND 
61                (!($id_donnee>0)
62                  OR autoriser('modifier','donnee',$id_donnee,NULL,array('id_form'=>$id_form))
63                ));
64        $formactif = $formactif?' ':'';
65
66        $flag_reponse = (_request('ajout_reponse') == $id_form) && (_request('nobotnobot')=='');
67        if ($flag_reponse) {
68                include_spip('inc/forms');
69                $url_validation = Forms_enregistrer_reponse_formulaire($id_form, $id_donnee, $erreur, $reponse, $script_validation, $id_article?"id_article=$id_article":"");
70                if (!$erreur) {
71                        $formok = _T($reponse_enregistree);
72                        if ($reponse)
73                          $reponse = _T($message_confirm,array('mail'=>$reponse));
74                        if (!_DIR_RESTREINT 
75                          AND (($r=_request('id_donnee'))===NULL OR $r==$id_donnee OR $r<0) )
76                                $valeurs = Forms_valeurs($id_form,$id_donnee);
77                        else
78                                $id_donnee = 0;
79                }
80                else {
81                        // on reinjecte get et post dans $valeurs
82                        foreach($_GET as $key => $val)
83                                $valeurs[$key] = interdire_scripts($val);
84                        foreach($_POST as $key => $val)
85                                $valeurs[$key] = interdire_scripts($val);
86                }
87        }
88        elseif (!_DIR_RESTREINT && $id_donnee=_request('id_donnee'))
89                $valeurs = Forms_valeurs($id_form,$id_donnee);
90        elseif (_DIR_RESTREINT!="" && $row['modifiable']=='oui'){
91                global $auteur_session;
92                $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
93                $cookie = $_COOKIE[Forms_nom_cookie_form($id_form)];
94                //On retourne les donnees si auteur ou cookie
95                $q = "SELECT donnees.id_donnee " .
96                        "FROM spip_forms_donnees AS donnees " .
97                        "WHERE donnees.id_form="._q($id_form)." ".
98                        "AND donnees.statut='publie' ";
99                if ($cookie) $q.="AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).") ";
100                else
101                        if ($id_auteur)
102                                $q.="AND id_auteur="._q($id_auteur)." ";
103                        else
104                                $q.="AND 0=1 ";
105                //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
106                if ($row['multiple']=='oui') $q.="AND donnees.id_donnee="._q($id_donnee);
107                $res = spip_query($q);
108                if($row2 = spip_fetch_array($res)){
109                        $id_donnee=$row2['id_donnee'];
110                        $valeurs = Forms_valeurs($id_form,$id_donnee);
111                }
112        }
113
114        if ($row['type_form'] == 'sondage'){
115                include_spip('inc/forms');
116                if ((Forms_verif_cookie_sondage_utilise($id_form)==true)&&(_DIR_RESTREINT!=""))
117                        $affiche_sondage=' ';
118        }
119        include_spip('inc/filtres');
120        include_spip('inc/forms_lier_donnees');
121        return array('formulaires/forms', 0, 
122                array(
123                        'erreur_message'=>isset($erreur['@'])?$erreur['@']:'',
124                        'erreur'=>serialize($erreur),
125                        'reponse'=>filtrer_entites($reponse),
126                        'id_article' => $id_article,
127                        'id_form' => $id_form,
128                        'id_donnee' => $id_donnee?$id_donnee:(0-$GLOBALS['auteur_session']['id_auteur']), # GROS Hack pour les jointures a la creation
129                        'self' => $url,
130                        'valeurs' => serialize($valeurs),
131                        'url_validation' => str_replace("&amp;","&",$url_validation),
132                        'affiche_sondage' => $affiche_sondage,
133                        'formok' => filtrer_entites($formok),
134                        'formvisible' => $formok?(_DIR_RESTREINT!=_DIR_RESTREINT_ABS):true,
135                        'formactif' => $formactif,
136                        'class' => 'formulaires/'.($class?$class:'forms_structure')
137                ));
138}
139
140?>
Note: See TracBrowser for help on using the repository browser.