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

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

Les controles de base sur la carte

On recharge les données du $_POST au rechargement du formulaire

File size: 5.3 KB
Line 
1<?php
2
3function diogene_geo_diogene_ajouter_saisies($flux){
4        $id_article = $flux['args']['contexte']['id_article'];
5        $id_rubrique = $flux['args']['contexte']['id_rubrique'];
6        spip_log(unserialize($flux['args']['champs_ajoutes']),'diogene');
7        if(is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('geo',unserialize($flux['args']['champs_ajoutes']))){
8                if($id_article OR $id_rubrique){
9                        if(intval($id_article)){
10                                $objet = sql_quote('article');
11                                $valeurs_gis = sql_fetsel("id_gis,lat,lon,zoom,titre,descriptif","spip_gis AS gis LEFT JOIN spip_gis_liens AS lien USING(id_gis)","lien.id_objet=$id_article AND lien.objet=".$objet);
12                        }else if(intval($id_rubrique)){
13                                $objet = sql_quote('rubrique');
14                                $valeurs_gis = sql_fetsel("id_gis,lat,lon,zoom,titre,descriptif","spip_gis AS gis LEFT JOIN spip_gis_liens AS lien USING(id_gis)","lien.id_objet=$id_rubrique AND lien.objet=".$objet);
15                        }
16                        if(is_array($valeurs_gis)){
17                                $valeurs_gis['gis_titre'] = $valeurs_gis['titre'];
18                                $valeurs_gis['gis_descriptif'] = $valeurs_gis['descriptif'];
19                                unset($valeurs_gis['titre']);
20                                unset($valeurs_gis['gis_descriptif']);
21                                $flux['args']['contexte'] = array_merge($flux['args']['contexte'],$valeurs_gis);
22                        }
23                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_geo',$flux['args']['contexte']);
24                }
25        }
26    return $flux;
27}
28
29function diogene_geo_diogene_traiter($flux){
30        if($flux['args']['action']=='modifier'){
31                $id_objet = $flux['args']['id_objet'];
32                $type = $flux['args']['type'];
33                $table  = $flux['args']['table'];
34                $id_table_objet = id_table_objet($type);
35                if(($lat = _request('lat')) && ($lng = _request('lon'))){
36                        // On crée l'array pour l'update et pour la création des coordonnées
37                        $zoom = _request('zoom') ? _request('zoom') : lire_config('gis/zoom');
38
39                        $coords = array(
40                                        $id_table_objet=> $id_objet,
41                                        'lat'=> $lat,
42                                        'lonx' => $lng,
43                                        'zoom' => $zoom
44                                );
45
46                        if(lire_config('gis/geocoding') == 'oui'){
47                                $geocoding = array(
48                                        "pays" => _request('pays'),
49                                        "code_pays" => _request('code_pays'),
50                                        "region" => _request('region'),
51                                        "ville" => _request('ville'),
52                                        "code_postal" => _request('code_postal')
53                                );
54                                $coords = array_merge($coords,$geocoding);
55                        }
56
57                        $coords_existantes = sql_getfetsel("id_gis","spip_gis","$id_table_objet = $id_objet");
58                        if($coords_existantes){
59                                // Des coordonnées sont déjà définies pour cet article
60                                // => on les update
61                                sql_updateq("spip_gis",$coords,"id_gis = $coords_existantes");
62                        }
63                        else{
64                                // Aucune coordonnée n'est définie pour cet article
65                                // => on les crées
66                                $id_gis = sql_insertq("spip_gis",$coords);
67                        }
68                }
69        }
70        return $flux;
71}
72
73/**
74 * Insertion dans le pipeline diogene_verifier (Plugin Diogene)
75 * Vérifie la validité des champs lat, lon, zoom, gis_titre, gis_descriptif
76 * - Si au moins une de ces valeurs est présente (sauf le descriptif), lat, lon, zoom, et titre
77 * deviennent obligatoires
78 * - Si lat et lon sont présents mais ne sont pas de type float => erreur
79 * - Si zoom est présent et n'est pas un int => erreur
80 *
81 * @param array $flux Le contexte du pipeline
82 */
83function diogene_geo_diogene_verifier($flux){
84        spip_log("DIOGENE_GEO : Verification des champs géographiques","diogene");
85
86        $erreurs = &$flux['args']['erreurs'];
87       
88        $lat = _request('lat');
89        $lon = _request('lon');
90        $zoom = _request('zoom');
91        $titre = _request('gis_titre');
92       
93        if($lat OR $lon OR $zoom OR $titre){
94                if(!$lat){
95                        $flux['lat'] = _T('info_obligatoire');
96                }
97                if(!$lon){
98                        $flux['lon'] = _T('info_obligatoire');
99                }
100                if(!$zoom){
101                        $flux['zoom'] = _T('info_obligatoire');
102                }
103                if(!$titre){
104                        $flux['gis_titre'] = _T('info_obligatoire');
105                }
106        }
107
108        if((!$erreur['lat']) && $lat){
109                if((!empty($lat)) && !is_numeric($lat)){
110                        $flux['lat'] = _T('diogene:erreur_valeur_float',array('champ'=> _T('diogene_geo:latitude')));
111                }
112        }
113        if((!$erreur['lon']) && $lon){
114                if((!empty($lon)) && !is_numeric($lon)){
115                        $flux['lonx'] = _T('diogene:erreur_valeur_float',array('champ'=> _T('diogene_geo:longitude')));
116                }
117        }
118        if((!$erreur['zoom']) && $zoom){
119                if((!empty($zoom)) && !ctype_digit($zoom)){
120                        $flux['zoom'] = _T('diogene:erreur_valeur_int',array('champ'=>_T('diogene_geo:zoom')));
121                }
122        }
123        return $flux;
124}
125
126
127/**
128 * Insertion dans le pipeline diogene_charger (plugin DiogÚne)
129 * On récupÚre les valeurs de lat, lon, zoom, gis_titre et gis_descriptif dans ce qui a été auparavant posté
130 * (On évite le $_GET de l'url) pour le réinsérer en cas d'erreur dans le formulaire
131 *
132 * @param array $flux Le contexte du pipeline
133 */
134function diogene_geo_diogene_charger($flux){
135        $flux['data']['lat'] = $_POST['lat'];
136        $flux['data']['lon'] = $_POST['lon'];
137        $flux['data']['zoom'] = $_POST['zoom'];
138        $flux['data']['gis_titre'] = $_POST['gis_titre'];
139        $flux['data']['gis_descriptif'] = $_POST['gis_descriptif'];
140        return $flux;
141}
142
143/**
144 * Insertion dans le pipeline diogene_champs_sup (plugin Diogene)
145 * On ajoute la possibilité d'avoir une partie de formulaire pour gis pour les articles, les rubriques,
146 * les pages spécifiques et emballe_medias
147 *
148 * @param array $flux Le contexte du flux
149 */
150function diogene_geo_diogene_champs_sup($flux){
151        $flux['article']['geo'] = $flux['page']['geo'] = $flux['emballe_media']['geo'] = _T('diogene_geo:form_legend');
152        $flux['rubrique']['geo'] = _T('diogene_geo:form_legend');
153        return $flux;
154}
155?>
Note: See TracBrowser for help on using the repository browser.