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

Last change on this file since 6078 was 6078, checked in by kent1, 8 years ago

Pouvoir cacher les informations de géolocalisation par défaut si pas d'id_gis associé

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