source: spip-zone/_plugins_/gis/trunk/action/editer_gis.php @ 60882

Last change on this file since 60882 was 60882, checked in by guy.cesaro@…, 9 years ago

quelques reports des evolutions de la branche v2 entre r51054 et r60879 : a tester.

File size: 4.5 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5include_spip('inc/autoriser');
6
7function action_editer_gis_dist($arg=null) {
8        if (is_null($arg)){
9                $securiser_action = charger_fonction('securiser_action', 'inc');
10                $arg = $securiser_action();
11        }
12       
13        // si id_gis n'est pas un nombre, c'est une creation
14        if (!$id_gis = intval($arg)) {
15                if (!$id_gis = insert_gis())
16                        return array(false,_L('echec'));
17        }
18        $err = revisions_gis($id_gis);
19        return array($id_gis,$err);
20}
21
22/**
23 * Fonction d'insertion d'un gis vide
24 *
25 * @return int/false $id_gis : l'identifiant numérique du point ou false en cas de non création
26 */
27function insert_gis() {
28        if(autoriser('creer','gis')){
29                $champs = array();
30               
31                // Envoyer aux plugins
32                $champs = pipeline('pre_insertion', array(
33                        'args' => array(
34                                'table' => 'spip_gis',
35                        ),
36                        'data' => $champs
37                ));
38               
39                $id_gis = sql_insertq("spip_gis", $champs);
40               
41                pipeline('post_insertion',
42                        array(
43                                'args' => array(
44                                        'table' => 'spip_gis',
45                                        'id_objet' => $id_gis
46                                ),
47                                'data' => $champs
48                        )
49                );
50                return $id_gis;
51        }else{
52                return false;
53        }
54}
55
56/**
57 *  Enregistrer certaines modifications d'un gis
58 *
59 * @param int $id_gis : l'identifiant numérique du point
60 * @param array $c : un array des valeurs à mettre en base (par défaut false, on récupère les valeurs passées en dans le POST)
61 */
62function revisions_gis($id_gis, $c=false) {
63        $err = '';
64        // recuperer les champs dans POST s'ils ne sont pas transmis
65        if ($c === false) {
66                $c = array();
67                foreach (array(
68                        'lat', 'lon', 'zoom', 'titre', 'descriptif', 'adresse', 'code_postal', 'ville', 'region', 'pays'
69                ) as $champ) {
70                        if (($a = _request($champ)) !== null) {
71                                $c[$champ] = $a;
72                        }
73                }
74        }
75       
76        include_spip('inc/modifier');
77        modifier_contenu('gis', $id_gis, array(
78                        //'nonvide' => array('nom' => _T('info_sans_titre')),
79                        'invalideur' => "id='id_gis/$id_gis'"
80                ),
81                $c);
82       
83        if ((intval(_request('id_objet')) && _request('objet')) OR (intval($c['id_objet']) && $c['objet'])) {
84                $objet = _request('objet') ? _request('objet') : $c['objet'];
85                $id_objet = _request('id_objet') ? _request('id_objet') : $c['id_objet'];
86                lier_gis($id_gis, $objet, $id_objet);
87        }
88       
89        return $err;
90}
91
92/**
93 * Lier un point géolocalisé à un objet SPIP
94 *
95 * @param int $id_gis identifiant numérique du point
96 * @param string $objet Le type de l'objet à lier
97 * @param int $id_objet L'identifiant numérique de l'objet lié
98 *
99 * @return bool : true si la liaison s'est bien passée, false à l'inverse
100 */
101function lier_gis($id_gis, $objet, $id_objet){
102        //$objet = objet_type($objet);
103        if ($id_objet AND $id_gis
104        AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
105        AND !sql_getfetsel("id_gis", "spip_gis_liens", "id_gis=$id_gis AND id_objet=$id_objet AND objet=".sql_quote($objet))
106        AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
107        ) {
108                sql_insertq('spip_gis_liens',
109                        array('id_gis' => $id_gis,
110                                'id_objet' => $id_objet,
111                                'objet' => $objet));
112                include_spip('inc/invalideur');
113                suivre_invalideur("id='id_gis/$id_gis'");
114                return true;
115        }
116        return false;
117}
118
119/**
120 * Délier un point géolocalisé d'un objet SPIP
121 *
122 * @param int $id_gis identifiant numérique du point
123 * @param string $objet Le type de l'objet à lier
124 * @param int $id_objet L'identifiant numérique de l'objet lié
125 *
126 * @return bool : true si la suppression de la liaison s'est bien passée, false à l'inverse
127 */
128function delier_gis($id_gis, $objet, $id_objet){
129        //$objet = objet_type($objet);
130        if ($id_objet AND $id_gis
131        AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
132        AND autoriser('delier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
133        ) {
134                sql_delete('spip_gis_liens', "id_gis=$id_gis AND id_objet=$id_objet AND objet=". sql_quote($objet));
135                include_spip('inc/invalideur');
136                suivre_invalideur("id='id_gis/$id_gis'");
137                return true;
138        }
139        return false;
140}
141
142/**
143 * Supprimer définitivement un point géolocalisé
144 *
145 * @param int $id_gis identifiant numérique du point
146 * @return 0/false 0 si réussite, false dans le cas ou le point n'existe pas
147 */
148function supprimer_gis($id_gis){
149        $valide = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id_gis));
150        if($valide && autoriser('supprimer','gis',$valide)){
151                sql_delete("spip_gis_liens", "id_gis=".intval($id_gis));
152                sql_delete("spip_gis", "id_gis=".intval($id_gis));
153                $id_gis = 0;
154                include_spip('inc/invalideur');
155                suivre_invalideur("id='id_gis/$id_gis'");
156                return $id_gis;
157        }
158        return false;
159}
160
161?>
Note: See TracBrowser for help on using the repository browser.