source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/forms_options.php @ 9945

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

"bug, renvoyer false si id_donnee est nul"

File size: 6.4 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 */
13if (!defined('_DIR_PLUGIN_FORMS')){
14        $p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__FILE__))));
15        define('_DIR_PLUGIN_FORMS',(_DIR_PLUGINS.end($p))."/");
16}
17include_spip('base/forms');
18$GLOBALS['forms_actif_exec'][] = 'donnees_edit';
19
20function autoriser_form_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
21        if ($type=='form')
22                if ($faire=='administrer'){
23                        return ($qui['statut'] == '0minirezo');
24                }
25                else
26                        return ($qui['statut'] == '0minirezo');
27        return false;
28}
29function autoriser_donnee_dist($faire,$type,$id_donnee,$qui,$opt){
30        static $types = array();
31        if (!isset($opt['id_form'])){
32                $res = spip_query("SELECT id_form FROM spip_forms_donnees WHERE id_donnee="._q($id_donnee));
33                if (!$row = spip_fetch_array($res)) return false;
34                $opt['id_form'] = $row['id_form'];
35        }
36        $id_form = $opt['id_form'];
37        if (!isset($opt['type_form'])){
38                if (!isset($types[$id_form])){
39                        $res = spip_query("SELECT type_form FROM spip_forms WHERE id_form="._q($id_form));
40                        if (!$row = spip_fetch_array($res)) return false;
41                        $types[$id_form] = $row['type_form'];
42                }
43                $opt['type_form'] = $types[$id_form];
44        }
45        $type_form = in_array($opt['type_form'],array('','sondage'))?'form':$opt['type_form'];
46        // Chercher une fonction d'autorisation explicite
47        if (
48        // 1. Sous la forme "autoriser_type_form_donnee_faire"
49                (
50                $type_form
51                AND $f = 'autoriser_'.$type_form.'_donnee_'.$faire
52                AND (function_exists($f) OR function_exists($f.='_dist'))
53                )
54
55        // 2. Sous la forme "autoriser_type_form_donnee"
56        OR (
57                $type_form
58                AND $f = 'autoriser_'.$type_form.'_donnee'
59                AND (function_exists($f) OR function_exists($f.='_dist'))
60                )
61        // 3. Sous la forme "autoriser_table_donnee_faire"
62        OR (
63                $f = 'autoriser_table_donnee_'.$faire
64                AND (function_exists($f) OR function_exists($f.='_dist'))
65        )
66        // 4. Sous la forme "autoriser_table_donnee_faire"
67        OR (
68                $f = 'autoriser_table_donnee'
69                AND (function_exists($f) OR function_exists($f.='_dist'))
70        )
71
72        // 5. Sinon autorisation generique
73        OR (
74                $f = 'autoriser_form'
75                AND (function_exists($f) OR function_exists($f.='_dist'))
76        )
77
78        )
79                $a = $f($faire,$type,intval($id),$qui,$opt);
80        if (_DEBUG_AUTORISER) spip_log("autoriser_form_donnee_dist delegue a $f($faire,$type,$id): ".($a?'OK':'niet'));
81        return $a;
82}
83
84function autoriser_form_donnee_modifier_dist($faire, $type, $id_donnee, $qui, $opt) {
85        if (!intval($id_donnee)) return false;
86        if (!isset($opt['id_form']) OR !$id_form = $opt['id_form']) return false;
87        // un admin dans le back office a toujours le droit de modifier
88        if (($qui['statut'] == '0minirezo')) return true;
89        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
90        if (!$row = spip_fetch_array($result)) return false;
91        $dejareponse=Forms_verif_cookie_sondage_utilise($id_form);
92        global $auteur_session;
93        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
94        $cookie = $_COOKIE[Forms_nom_cookie_form($id_form)];
95        if (($row['modifiable'] == 'oui') && $dejareponse) {
96                $q = "SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form);
97                if ($cookie) $q.=" AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")";
98                else $q.=" AND id_auteur="._q($id_auteur)." ";
99                //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
100                if ($row['multiple']=='oui' || !_DIR_RESTREINT) $q.=" AND id_donnee="._q($id_donnee);
101                $r=spip_query($q);
102                if ($r=spip_fetch_array($r)) return true;
103        }
104        return false;
105}
106function autoriser_table_donnee_modifier_dist($faire, $type, $id_donnee, $qui, $opt) {
107        return autoriser_form_donnee_modifier_dist($faire, $type, $id_donnee, $qui, $opt);
108}
109function autoriser_form_donnee_creer_dist($faire, $type, $id_donnee, $qui, $opt) {
110        if (!isset($opt['id_form']) OR !$id_form = $opt['id_form']) return false;
111        // un admin dans le back office a toujours le droit d'inserer
112        if (($qui['statut'] == '0minirezo')) return true;
113        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
114        if (!$row = spip_fetch_array($result)) return false;
115        if ($row['multiple']=='oui') return true;
116        $dejareponse=Forms_verif_cookie_sondage_utilise($id_form);
117        if ($dejareponse) return false;
118        return true;
119}
120function autoriser_table_donnee_creer_dist($faire, $type, $id_donnee, $qui, $opt) {
121        return autoriser_form_donnee_creer($faire, $type, $id_donnee, $qui, $opt);
122}
123function autoriser_form_donnee_instituer_dist($faire,$type,$id_donnee,$qui,$opt) {
124        if (($qui['statut'] != '0minirezo')
125        OR !isset($opt['nouveau_statut'])
126        OR ($opt['nouveau_statut']=='prepa')) return false;
127        return true;
128}
129function autoriser_table_donnee_instituer_dist($faire,$type,$id_donnee,$qui,$opt) {
130        return autoriser_form_donnee_instituer_dist($faire,$type,$id_donnee,$qui,$opt);
131}
132
133// le reglage du cookie doit se faire avant l'envoi de tout HTML au client
134function Forms_poser_cookie_sondage($id_form) {
135        if ($id_form = intval($id_form)) {
136                $nom_cookie = $GLOBALS['cookie_prefix'].'cookie_form_'.$id_form;
137                // Ne generer un nouveau cookie que s'il n'existe pas deja
138                if (!$cookie = $_COOKIE[$nom_cookie]) {
139                        include_spip("inc/acces");
140                        $cookie = creer_uniqid();
141                }
142                $GLOBALS['cookie_form'] = $cookie; // pour utilisation dans inc_forms...
143                // Expiration dans 30 jours
144                setcookie($nom_cookie, $cookie, time() + 30 * 24 * 3600);
145        }
146}
147
148function Forms_generer_url_sondage($id_form) {
149        return generer_url_public("sondage","id_form=$id_form",true);
150}
151
152if ((intval(_request('ajout_reponse'))) && (_request('ajout_cookie_form') == 'oui'))
153        Forms_poser_cookie_sondage(_request('ajout_reponse'));
154
155// test si un cookie sondage a ete pose
156foreach($_COOKIE as $cookie=>$value){
157        if (preg_match(",".$GLOBALS['cookie_prefix']."cookie_form_([0-9]+),",$cookie,$reg)){
158                $idf = intval($reg[1]);
159                $res = spip_query("SELECT id_article FROM spip_forms_articles WHERE id_form=".intval($idf));
160                while($row=spip_fetch_array($res)){
161                        $ida = $row['id_article'];
162                        if (
163                                                (isset($GLOBALS['article'])&&($GLOBALS['article']==$ida))
164                                        ||(isset($GLOBALS['id_article'])&&($GLOBALS['id_article']==$ida))
165                                        ||(isset($GLOBALS["article$ida"]))
166                                        ||(isset($GLOBALS['contexte_inclus']['id_article'])&&($GLOBALS['contexte_inclus']['id_article']==$ida)) ){
167                                        // un article qui utilise le form va etre rendu
168                                        // il faut utiliser le marquer cache pour ne pas polluer la page commune
169                                        $GLOBALS['marqueur'].=":sondage $idf";
170                                        break;
171                                }
172                }
173        }
174}
175
176?>
Note: See TracBrowser for help on using the repository browser.