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

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

Eviter les conflits d'édition lorsque l'on passe par revisions_gis

Pouvoir supprimer le point

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