[PLUGINS] ~maj Crayons
[lhc/web/www.git] / www / plugins / gis / action / editer_gis.php
1 <?php
2
3 if (!defined("_ECRIRE_INC_VERSION")) return;
4
5 include_spip('inc/autoriser');
6
7 function 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 (!autoriser('creer','gis') or !$id_gis = gis_inserer())
16 return array(false,_L('echec'));
17 }
18 $err = gis_modifier($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 */
27 function gis_inserer() {
28 $champs = array();
29
30 // Envoyer aux plugins
31 $champs = pipeline('pre_insertion', array(
32 'args' => array(
33 'table' => 'spip_gis',
34 ),
35 'data' => $champs
36 ));
37
38 $id_gis = sql_insertq("spip_gis", $champs);
39
40 pipeline('post_insertion',
41 array(
42 'args' => array(
43 'table' => 'spip_gis',
44 'id_objet' => $id_gis
45 ),
46 'data' => $champs
47 )
48 );
49 return $id_gis;
50 }
51
52 /**
53 * Enregistrer certaines modifications d'un gis
54 *
55 * @param int $id_gis : l'identifiant numérique du point
56 * @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)
57 */
58 /**
59 * Appelle toutes les fonctions de modification d'un point gis
60 * $err est de la forme chaine de langue ou vide si pas d'erreur
61 * http://doc.spip.org/@articles_set
62 *
63 * @param $id_gis
64 * @param null $set
65 * @return string
66 */
67 function gis_modifier($id_gis, $set=null) {
68 include_spip('inc/modifier');
69 include_spip('inc/filtres');
70 $c = collecter_requests(
71 // white list
72 objet_info('gis','champs_editables'),
73 // black list
74 array('id_objet','objet'),
75 // donnees eventuellement fournies
76 $set
77 );
78
79 if(isset($c['lon'])){
80 if($c['lon'] > 180){
81 while($c['lon'] > 180){
82 $c['lon'] = $c['lon'] - 360;
83 }
84 }else if($c['lon'] <= -180){
85 while($c['lon'] <= -180){
86 $c['lon'] = $c['lon'] + 360;
87 }
88 }
89 }
90 if(isset($c['lat'])){
91 if($c['lat'] > 90){
92 while($c['lat'] > 90){
93 $c['lat'] = $c['lat'] - 180;
94 }
95 }else if($c['lat'] <= -90){
96 while($c['lat'] <= -90){
97 $c['lat'] = $c['lat'] + 180;
98 }
99 }
100 }
101 if ($err = objet_modifier_champs('gis', $id_gis,
102 array(
103 //'nonvide' => array('nom' => _T('info_sans_titre')),
104 'data' => $set,
105 'invalideur' => "id='gis/$id_gis'",
106 ),
107 $c))
108 return $err;
109
110 // lier a un parent ?
111 $c = collecter_requests(array('id_objet', 'objet'),array(),$set);
112 if (isset($c['id_objet']) AND intval($c['id_objet']) AND isset($c['objet']) AND $c['objet']) {
113 lier_gis($id_gis, $c['objet'], $c['id_objet']);
114 }
115
116 return $err;
117 }
118
119
120 /**
121 * Associer un point géolocalisé a des objets listes sous forme
122 * array($objet=>$id_objets,...)
123 * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
124 *
125 * on peut passer optionnellement une qualification du (des) lien(s) qui sera
126 * alors appliquee dans la foulee.
127 * En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
128 *
129 * @param int $id_gis
130 * @param array $objets
131 * @param array $qualif
132 * @return string
133 */
134 function gis_associer($id_gis,$objets, $qualif = null){
135 include_spip('action/editer_liens');
136 $res = objet_associer(array('gis'=>$id_gis), $objets, $qualif);
137 include_spip('inc/invalideur');
138 suivre_invalideur("id='gis/$id_gis'");
139 return $res;
140 }
141
142 /**
143 * Dissocier un point géolocalisé des objets listes sous forme
144 * array($objet=>$id_objets,...)
145 * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
146 *
147 * un * pour $id_auteur,$objet,$id_objet permet de traiter par lot
148 *
149 * @param int $id_gis
150 * @param array $objets
151 * @return string
152 */
153 function gis_dissocier($id_gis,$objets){
154 include_spip('action/editer_liens');
155 $res = objet_dissocier(array('gis'=>$id_gis), $objets);
156 include_spip('inc/invalideur');
157 suivre_invalideur("id='gis/$id_gis'");
158 return $res;
159 }
160
161
162
163 /**
164 * Supprimer définitivement un point géolocalisé
165 *
166 * @param int $id_gis identifiant numérique du point
167 * @return int|false 0 si réussite, false dans le cas ou le point n'existe pas
168 */
169 function gis_supprimer($id_gis){
170 $valide = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id_gis));
171 if($valide && autoriser('supprimer','gis',$valide)){
172 sql_delete("spip_gis_liens", "id_gis=".intval($id_gis));
173 sql_delete("spip_gis", "id_gis=".intval($id_gis));
174 $id_gis = 0;
175 include_spip('inc/invalideur');
176 suivre_invalideur("id='id_gis/$id_gis'");
177 return $id_gis;
178 }
179 return false;
180 }
181
182
183 /**
184 * Délier un point géolocalisé d'un objet SPIP
185 *
186 * @param int $id_gis identifiant numérique du point
187 * @param string $objet Le type de l'objet à lier
188 * @param int $id_objet L'identifiant numérique de l'objet lié
189 *
190 * @return bool : true si la suppression de la liaison s'est bien passée, false à l'inverse
191 */
192 function delier_gis($id_gis, $objet, $id_objet){
193 //$objet = objet_type($objet);
194 if ($id_objet AND $id_gis
195 AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
196 AND autoriser('delier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
197 ) {
198 gis_dissocier($id_gis,array($objet=>$id_objet));
199 return true;
200 }
201 return false;
202 }
203
204 /**
205 * Lier un point géolocalisé à un objet SPIP
206 *
207 * @param int $id_gis identifiant numérique du point
208 * @param string $objet Le type de l'objet à lier
209 * @param int $id_objet L'identifiant numérique de l'objet lié
210 *
211 * @return bool : true si la liaison s'est bien passée, false à l'inverse
212 */
213 function lier_gis($id_gis, $objet, $id_objet){
214 //$objet = objet_type($objet);
215 if ($id_objet AND $id_gis
216 AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
217 AND !sql_getfetsel("id_gis", "spip_gis_liens", "id_gis=$id_gis AND id_objet=$id_objet AND objet=".sql_quote($objet))
218 AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
219 ) {
220 gis_associer($id_gis,array($objet=>$id_objet));
221 return true;
222 }
223 return false;
224 }
225
226 function insert_gis() {return gis_inserer();}
227 function revisions_gis($id_gis, $c=false) {return gis_modifier($id_gis,$c);}
228 function supprimer_gis($id_gis){return gis_supprimer($id_gis);}
229
230 ?>