source: plugins_spip/diogene_complements/diogene_geo/diogene_geo_pipelines.php @ 4937

Last change on this file since 4937 was 4937, checked in by kent1, 9 years ago

On prend en compte la nouvelle fonctionnalité de GIS de centrage automatique de l'utilisateur lors de la création de points

On vide les request des données géo lors de la suppression d'un point

File size: 6.4 KB
Line 
1<?php
2
3function diogene_geo_diogene_ajouter_saisies($flux){
4        $objet = str_replace('editer_','',$flux['args']['contexte']['form']);
5        $id_objet = $flux['args']['contexte']['id_'.$objet];
6        if(in_array($objet,array('article','rubrique')) && is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('geo',unserialize($flux['args']['champs_ajoutes']))){
7                if(intval($id_objet)){
8                        $valeurs_gis = sql_fetsel("*","spip_gis AS gis LEFT JOIN spip_gis_liens AS lien USING(id_gis)","lien.id_objet=$id_objet AND lien.objet=".sql_quote($objet));
9                        if(is_array($valeurs_gis)){
10                                $valeurs_gis['gis_titre'] = $valeurs_gis['titre'];
11                                $valeurs_gis['gis_descriptif'] = $valeurs_gis['descriptif'];
12                                unset($valeurs_gis['titre']);
13                                unset($valeurs_gis['gis_descriptif']);
14                                $flux['args']['contexte'] = array_merge($flux['args']['contexte'],$valeurs_gis);
15                        }
16                }
17                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_geo',$flux['args']['contexte']);
18        }
19    return $flux;
20}
21
22/**
23 * Insertion dans le pipeline diogene_traiter
24 *
25 * On crée un point ou le met à jour si on a les infos de géoloc
26 *
27 * @param array $flux le contexte du pipeline
28 */
29function diogene_geo_diogene_traiter($flux){
30        if($flux['args']['action'] == 'modifier'){
31                $objet = $flux['args']['type'];
32                $id_objet = $flux['args']['id_objet'];
33                if(_request('gis_supprimer')){
34                        include_spip('action/editer_gis');
35                        $id_gis = _request('id_gis');
36                        delier_gis($id_gis, $objet, $id_objet);
37                        $nb_gis = sql_countsel('spip_gis_liens','id_gis='.intval($id_gis));
38                        if($nb_gis == 0)
39                                supprimer_gis($id_gis);
40                               
41                        /**
42                         * On vide ensuite les request sur les données géo
43                         */
44                        set_request('lat','');
45                        set_request('lon','');
46                        set_request('zoom','');
47                        set_request('gis_titre','');
48                        set_request('gis_descriptif','');
49                        set_request('adresse','');
50                        set_request('code_postal','');
51                        set_request('ville','');
52                        set_request('region','');
53                        set_request('pays','');
54                }
55                else if(($lat = _request('lat')) && ($lon = _request('lon'))){
56                        include_spip('action/editer_gis');
57                        // On crée l'array pour l'update et pour la création des coordonnées
58                        $zoom = _request('zoom');
59                        $titre = _request('gis_titre');
60                        $descriptif = _request('gis_descriptif');
61                        $id_gis = _request('id_gis');
62                        $datas = array(
63                                'titre' => $titre,
64                                'descriptif' => $descriptif,
65                                'lat' => $lat,
66                                'lon' => $lon,
67                                'zoom' => $zoom,
68                                'titre' => $titre,
69                                'adresse' => _request('adresse'),
70                                'code_postal' => _request('code_postal'),
71                                'ville' => _request('ville'),
72                                'region' => _request('region'),
73                                'pays' => _request('pays')
74                        );
75                        if(!intval($id_gis)){
76                                $id_gis = insert_gis();
77                        }
78                        sql_updateq('spip_gis',$datas,'id_gis='.intval($id_gis));
79                        if($objet && $id_objet)
80                                lier_gis($id_gis, $objet, $id_objet);
81                }
82        }
83        return $flux;
84}
85
86/**
87 * Insertion dans le pipeline diogene_verifier (Plugin Diogene)
88 * Vérifie la validité des champs lat, lon, zoom, gis_titre, gis_descriptif
89 * - Si au moins une de ces valeurs est présente (sauf le descriptif), lat, lon, zoom, et titre
90 * deviennent obligatoires
91 * - Si lat et lon sont présents mais ne sont pas de type float => erreur
92 * - Si zoom est présent et n'est pas un int => erreur
93 *
94 * @param array $flux Le contexte du pipeline
95 */
96function diogene_geo_diogene_verifier($flux){
97        if(!_request('gis_supprimer')){
98                $erreurs = &$flux['args']['erreurs'];
99               
100                $lat = _request('lat');
101                $lon = _request('lon');
102                $zoom = _request('zoom');
103                $titre = _request('gis_titre');
104               
105                if($lat OR $lon OR $zoom OR $titre){
106                        if(!$lat){
107                                $flux['data']['lat'] = _T('info_obligatoire');
108                        }
109                        if(!$lon){
110                                $flux['data']['lon'] = _T('info_obligatoire');
111                        }
112                        if(!$zoom){
113                                $flux['data']['zoom'] = _T('info_obligatoire');
114                        }
115                        if(!$titre){
116                                $flux['data']['gis_titre'] = _T('info_obligatoire');
117                        }
118                }
119       
120                if((!$erreur['lat']) && $lat){
121                        if((!empty($lat)) && !is_numeric($lat)){
122                                $flux['data']['lat'] = _T('diogene:erreur_valeur_float',array('champ'=> _T('diogene_geo:latitude')));
123                        }
124                }
125                if((!$erreur['lon']) && $lon){
126                        if((!empty($lon)) && !is_numeric($lon)){
127                                $flux['data']['lonx'] = _T('diogene:erreur_valeur_float',array('champ'=> _T('diogene_geo:longitude')));
128                        }
129                }
130                if((!$erreur['zoom']) && $zoom){
131                        if((!empty($zoom)) && !ctype_digit($zoom)){
132                                $flux['data']['zoom'] = _T('diogene:erreur_valeur_int',array('champ'=>_T('diogene_geo:zoom')));
133                        }
134                }
135        }
136        return $flux;
137}
138
139
140/**
141 * Insertion dans le pipeline diogene_charger (plugin DiogÚne)
142 * On récupÚre les valeurs de lat, lon, zoom, gis_titre et gis_descriptif dans ce qui a été auparavant posté
143 * (On évite le $_GET de l'url) pour le réinsérer en cas d'erreur dans le formulaire
144 *
145 * @param array $flux Le contexte du pipeline
146 */
147function diogene_geo_diogene_charger($flux){
148        $flux['data']['lat'] = $_POST['lat'];
149        $flux['data']['lon'] = $_POST['lon'];
150        $flux['data']['zoom'] = $_POST['zoom'];
151        $flux['data']['gis_titre'] = $_POST['gis_titre'];
152        $flux['data']['gis_descriptif'] = $_POST['gis_descriptif'];
153        $flux['data']['adresse'] = $_POST['adresse'];
154        $flux['data']['code_postal'] = $_POST['code_postal'];
155        $flux['data']['ville'] = $_POST['ville'];
156        $flux['data']['region'] = $_POST['region'];
157        $flux['data']['pays'] = $_POST['pays'];
158        return $flux;
159}
160
161/**
162 * Insertion dans le pipeline diogene_champs_sup (plugin Diogene)
163 * On ajoute la possibilité d'avoir une partie de formulaire pour gis pour les articles, les rubriques,
164 * les pages spécifiques et emballe_medias
165 *
166 * @param array $flux Le contexte du flux
167 */
168function diogene_geo_diogene_champs_sup($flux){
169        $flux['article']['geo'] = $flux['page']['geo'] = $flux['emballe_media']['geo'] = _T('diogene_geo:form_legend');
170        $flux['rubrique']['geo'] = _T('diogene_geo:form_legend');
171        return $flux;
172}
173
174/**
175 * Insertion dans le pipeline em_post_upload_medias (plugin Emballe médias)
176 * Dans le cas des fichiers jpg, si on a récup une géoloc, on l'ajoute à l'article aussi
177 *
178 * @param array $flux Le contexte du flux
179 */
180function diogene_geo_em_post_upload_medias($flux){
181        $id_gis = sql_getfetsel('id_gis','spip_gis_liens','objet='.sql_quote('document').' AND id_objet='.intval($flux['args']['id_document']));
182        if(intval($id_gis)){
183                include_spip('action/editer_gis');
184                sql_delete('spip_gis_liens','objet='.sql_quote($flux['args']['objet']).' AND id_objet='.intval($flux['args']['id_objet']));
185                lier_gis($id_gis, $flux['args']['objet'], $flux['args']['id_objet']);
186        }
187        return $flux;
188}
189?>
Note: See TracBrowser for help on using the repository browser.