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

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

utiliser l'API autoriser pour tester les autorisations insertion ou modification
l'upload d'un doc depuis l'espace privé faisait planter (securite du core !)
un cadre par ci

File size: 4.0 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
19function autoriser_form_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
20        if ($type=='form')
21                if ($faire=='administrer'){
22                        return ($qui['statut'] == '0minirezo');
23                }
24                else
25                        return ($qui['statut'] == '0minirezo');
26        return false;
27}
28function autoriser_form_modifierdonnee_dist($faire, $type, $id_form, $qui, $opt) {
29        // un admin dans le back office a toujours le droit de modifier
30        if (($qui['statut'] == '0minirezo')&&!_DIR_RESTREINT) return true;
31        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
32        if (!$row = spip_fetch_array($result)) return false;
33        if (!$opt['id_donnee']) return false;
34        $dejareponse=Forms_verif_cookie_sondage_utilise($id_form);
35        if (($row['modifiable'] == 'oui') && $dejareponse) {
36                $q = "SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form).
37                        " AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")";
38                //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
39                if ($row['multiple']=='oui' || !_DIR_RESTREINT) $q.=" AND id_donnee="._q($opt['id_donnee']);
40                $r=spip_query($q);
41                if ($r=spip_fetch_array($r)) return true;
42        }
43        return false;
44}
45function autoriser_form_insererdonnee_dist($faire, $type, $id_form, $qui, $opt) {
46        // un admin dans le back office a toujours le droit d'inserer
47        if (($qui['statut'] == '0minirezo')&&!_DIR_RESTREINT) return true;
48        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
49        if (!$row = spip_fetch_array($result)) return false;
50        if ($row['multiple']=='oui') return true;
51        $dejareponse=Forms_verif_cookie_sondage_utilise($id_form);
52        if ($dejareponse) return false;
53        $r=spip_query("SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form)." AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")");
54        if ($r=spip_fetch_array($r)) return false;
55        return true;
56}
57
58// Code a rapatrier dans inc-public et inc_forms
59// (NB : le reglage du cookie doit se faire avant l'envoi de tout HTML au client)
60function Forms_poser_cookie_sondage() {
61        if ($id_form = intval($_POST['id_form'])) {
62                $nom_cookie = $GLOBALS['cookie_prefix'].'cookie_form_'.$id_form;
63                // Ne generer un nouveau cookie que s'il n'existe pas deja
64                if (!$cookie = $_COOKIE[$nom_cookie]) {
65                        include_spip("inc/acces");
66                        $cookie = creer_uniqid();
67                }
68                $GLOBALS['cookie_form'] = $cookie; // pour utilisation dans inc_forms...
69                // Expiration dans 30 jours
70                setcookie($nom_cookie, $cookie, time() + 30 * 24 * 3600);
71        }
72}
73
74function Forms_generer_url_sondage($id_form) {
75        return generer_url_public("sondage","id_form=$id_form",true);
76}
77
78if (isset($GLOBALS['ajout_reponse']) && $GLOBALS['ajout_reponse'] == 'oui' &&
79                isset($GLOBALS['ajout_cookie_form']) && $GLOBALS['ajout_cookie_form'] == 'oui')
80        Forms_poser_cookie_sondage();
81
82// test si un cookie sondage a ete pose
83foreach($_COOKIE as $cookie=>$value){
84        if (preg_match(",".$GLOBALS['cookie_prefix']."cookie_form_([0-9]+),",$cookie)){
85                $idf = preg_replace(",".$GLOBALS['cookie_prefix']."cookie_form_([0-9]+),","\\1",$cookie);
86                $res = spip_query("SELECT id_article FROM spip_forms_articles WHERE id_form=".intval($idf));
87                while($row=spip_fetch_array($res)){
88                        $ida = $row['id_article'];
89                        if (
90                                                (isset($GLOBALS['article'])&&($GLOBALS['article']==$ida))
91                                        ||(isset($GLOBALS['id_article'])&&($GLOBALS['id_article']==$ida))
92                                        ||(isset($GLOBALS["article$ida"]))
93                                        ||(isset($GLOBALS['contexte_inclus']['id_article'])&&($GLOBALS['contexte_inclus']['id_article']==$ida)) ){
94                                        // un article qui utilise le form va etre rendu
95                                        // il faut utiliser le marquer cache pour ne pas polluer la page commune
96                                        $GLOBALS['marqueur'].=":sondage $idf";
97                                        break;
98                                }
99                }
100        }
101}
102
103?>
Note: See TracBrowser for help on using the repository browser.