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 | |
---|
14 | if (!defined("_ECRIRE_INC_VERSION")) return; #securite |
---|
15 | |
---|
16 | // Pas besoin de contexte de compilation |
---|
17 | global $balise_FORMS_collecte; |
---|
18 | $balise_FORMS_collecte = array('id_form','id_article','id_donnee'); |
---|
19 | |
---|
20 | function balise_FORMS ($p) { |
---|
21 | return calculer_balise_dynamique($p,'FORMS', array('id_form', 'id_article', 'id_donnee', 'class')); |
---|
22 | } |
---|
23 | |
---|
24 | function balise_FORMS_stat($args, $filtres) { |
---|
25 | return $args; |
---|
26 | } |
---|
27 | |
---|
28 | function 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("&","&",$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("&","&",$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 | ?> |
---|