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

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

"d'autres petits oups (le chemin est encore long vers le 10N suivant)"

File size: 4.6 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 
62                OR autoriser('modifier','donnee',$id_donnee,NULL,array('id_form'=>$id_form)));
63        $formactif = $formactif?' ':'';
64
65        $flag_reponse = (_request('ajout_reponse') == $id_form) && (_request('nobotnobot')=='');
66        if ($flag_reponse) {
67                include_spip('inc/forms');
68                $url_validation = Forms_enregistrer_reponse_formulaire($id_form, $id_donnee, $erreur, $reponse, $script_validation, $id_article?"id_article=$id_article":"");
69                if (!$erreur) {
70                        $formok = _T($reponse_enregistree);
71                        if ($reponse)
72                          $reponse = _T($message_confirm,array('mail'=>$reponse));
73                        if (!_DIR_RESTREINT && $id_donnee=_request('id_donnee'))
74                                $valeurs = Forms_valeurs($id_form,$id_donnee);
75                }
76                else {
77                        // on reinjecte get et post dans $valeurs
78                        foreach($_GET as $key => $val)
79                                $valeurs[$key] = interdire_scripts($val);
80                        foreach($_POST as $key => $val)
81                                $valeurs[$key] = interdire_scripts($val);
82                }
83        }
84        elseif (!_DIR_RESTREINT && $id_donnee=_request('id_donnee'))
85                $valeurs = Forms_valeurs($id_form,$id_donnee);
86        elseif (_DIR_RESTREINT!="" && $row['modifiable']=='oui'){
87                global $auteur_session;
88                $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
89                $cookie = $_COOKIE[Forms_nom_cookie_form($id_form)];
90                //On retourne les donnees si auteur ou cookie
91                $q = "SELECT donnees.id_donnee " .
92                        "FROM spip_forms_donnees AS donnees " .
93                        "WHERE donnees.id_form="._q($id_form)." ".
94                        "AND donnees.statut='publie' ";
95                if ($cookie) $q.="AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).") ";
96                else
97                        if ($id_auteur)
98                                $q.="AND id_auteur="._q($id_auteur)." ";
99                        else
100                                $q.="AND 0=1 ";
101                //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
102                if ($row['multiple']=='oui' && $id_donnee) $q.="AND donnees.id_donnee="._q($id_donnee);
103                $res = spip_query($q);
104                if($row2 = spip_fetch_array($res)){
105                        $id_donnee=$row2['id_donnee'];
106                        $valeurs = Forms_valeurs($id_form,$id_donnee);
107                }
108        }
109
110        if ($row['type_form'] == 'sondage'){
111                include_spip('inc/forms');
112                if ((Forms_verif_cookie_sondage_utilise($id_form)==true)&&(_DIR_RESTREINT!=""))
113                        $affiche_sondage=' ';
114        }
115        include_spip('inc/filtres');
116        include_spip('inc/forms_lier_donnees');
117        return array('formulaires/forms', 0, 
118                array(
119                        'erreur_message'=>isset($erreur['@'])?$erreur['@']:'',
120                        'erreur'=>serialize($erreur),
121                        'reponse'=>filtrer_entites($reponse),
122                        'id_article' => $id_article,
123                        'id_form' => $id_form,
124                        'id_donnee' => $id_donnee?$id_donnee:'',
125                        'self' => $url,
126                        'valeurs' => serialize($valeurs),
127                        'url_validation' => str_replace("&amp;","&",$url_validation),
128                        'affiche_sondage' => $affiche_sondage,
129                        'formok' => filtrer_entites($formok),
130                        'formvisible' => $formok?(_DIR_RESTREINT!=_DIR_RESTREINT_ABS):true,
131                        'formactif' => $formactif,
132                        'class' => 'formulaires/'.($class?$class:'forms_structure')
133                ));
134}
135
136?>
Note: See TracBrowser for help on using the repository browser.