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

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

On change les labels du titre + description pour ne pas troubler les gens ...

On ne change le zoom que si on a un point au changement de zoom ... cela évite d'avoir un zoom d'entrée de jeu et donc de devoir le supprimer si on ne souhaite pas mettre de point

Un peu d'explications sur les pipelines

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