source: spip-zone/_plugins_/gis/trunk/gis_pipelines.php @ 48996

Last change on this file since 48996 was 48996, checked in by kent1@…, 10 years ago

Des locutions manquantes en anglais

Quelque fois les pipelines ne chargent pas les fonctions ...

On test et on inclu si elles ne sont pas là

On incrémente

  • Property svn:executable set to *
File size: 9.7 KB
Line 
1<?php
2
3function gis_inserer_javascript($flux){
4       
5        // initialisation des valeurs de config
6        $config = @unserialize($GLOBALS['meta']['gis']);
7        if (!is_array($config))
8                $config = array();
9        $config = array_merge(array(
10                'api' => 'openlayers'
11        ), $config);
12       
13        if(defined('_GIS_APIS') && !array_key_exists($config['api'],unserialize(_GIS_APIS))){
14                return $flux;
15        }
16        // insertion du script de l'api a utiliser
17        if ($config['api'] == 'cloudmade')
18                $flux .="\n".'<script type="application/javascript" src="http://tile.cloudmade.com/wml/latest/web-maps-lite.js"></script>'."\n";
19        if ($config['api'] == 'google')
20                $flux .="\n".'    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key='.$config['api_key_google'].'&hl='.$GLOBALS['spip_lang'].'"></script>'."\n";
21        if ($config['api'] == 'googlev3')
22                $flux .="\n".'<script type="application/javascript" src="http://maps.google.com/maps/api/js?sensor=false&amp;language='.$GLOBALS['spip_lang'].'"></script>'."\n";
23        if ($config['api'] == 'microsoft')
24                $flux .="\n".'<script src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"></script>'."\n";
25        if ($config['api'] == 'openlayers')
26                $flux .="\n".'<script src="http://openlayers.org/api/OpenLayers.js"></script>'."\n";
27        if ($config['api'] == 'yahoo')
28                $flux .="\n".'<script type="application/javascript" src="http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=MapstractionDemo"></script>'."\n";
29       
30        // insertion de la lib mapstraction
31        if(in_array($config['api'],array('cartociudad','google','googlev3','yandex'))){
32                $geocoder = ($config['geocoder']) ? ',[geocoder]' : '';
33        }else{
34                $geocoder = '';
35        }
36        $flux .="\n".'<script type="application/javascript" src="'. url_absolue(find_in_path(_DIR_LIB_GIS.'mxn.js')) .'?('. $config['api'] . $geocoder .')"></script>'."\n";
37       
38        // insertion des scripts de gis
39        $flux .="\n".'<script type="application/javascript" src="'. url_absolue(find_in_path('javascript/gis.js')) .'"></script>'."\n";
40
41        return $flux;
42}
43
44function gis_affiche_milieu($flux){
45        if ($exec = $flux['args']['exec']){
46                switch ($exec){
47                        case 'articles':
48                                $objet = 'article';
49                                $id_objet = $flux['args']['id_article'];
50                                break;
51                        case 'auteur_infos':
52                                $objet = 'auteur';
53                                $id_objet = $flux['args']['id_auteur'];
54                                break;
55                        case 'breves_voir':
56                                $objet = 'breve';
57                                $id_objet = $flux['args']['id_breve'];
58                                break;
59                        case 'naviguer':
60                                $objet = 'rubrique';
61                                $id_objet = $flux['args']['id_rubrique'];
62                                break;
63                        case 'mots_edit':
64                                $objet = 'mot';
65                                $id_objet = $flux['args']['id_mot'];
66                                break;
67                        case 'sites':
68                                $objet = 'syndic';
69                                $id_objet = $flux['args']['id_syndic'];
70                                break;
71                        case 'documents_edit':
72                                $objet = 'document';
73                                $id_objet = $flux['args']['id_document'];
74                                break;
75                        default:
76                                $objet = $id_objet = '';
77                                break;
78                }
79                if ($objet && $id_objet) {
80                        // TODO : seulement si la conf permet de geolocaliser cet objet
81                        if (1) {
82                                $contexte['objet'] = $objet;
83                                $contexte['id_objet'] = $id_objet;
84                                $flux['data'] .= "<div id='pave_gis'>";
85                                $bouton = bouton_block_depliable(_T('gis:cfg_titre_gis'), false, "pave_gis_depliable");
86                                $flux['data'] .= debut_cadre_enfonce(find_in_path('images/gis-24.png'), true, "", $bouton);
87                                $flux['data'] .= recuperer_fond('prive/contenu/gis_objet', $contexte);
88                                $flux['data'] .= fin_cadre_enfonce(true);
89                                $flux['data'] .= "</div>";
90                        }
91                }
92        }
93
94        return $flux;
95}
96
97function gis_post_edition($flux){
98       
99        if (($flux['args']['operation'] == 'ajouter_document') 
100                AND ($document = sql_fetsel("*","spip_documents","id_document=".intval($flux['args']['id_objet'])))
101        ) {
102                if ($document['extension'] == 'jpg') {
103                        $config = @unserialize($GLOBALS['meta']['gis']);
104                        if(!is_array($config))
105                                $config = array();
106                        include_spip('inc/documents');
107                        $fichier = get_spip_doc($document['fichier']);
108                        $id_document = $document['id_document'];
109                        // on recupere les coords definies dans les exif du document s'il y en a
110                        if ($exifs =  @exif_read_data($fichier,'GPS')) {
111                                if(!function_exists('dms_to_dec'))
112                                        include_spip('gis_fonctions');
113                                spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier","gis");
114                               
115                                $LatDeg = explode("/",$exifs["GPSLatitude"][0]);
116                                $intLatDeg = $LatDeg[0]/$LatDeg[1];
117
118                                $LatMin = explode("/",$exifs["GPSLatitude"][1]);
119                                $intLatMin = $LatMin[0]/$LatMin[1];
120
121                                $LatSec = explode("/",$exifs["GPSLatitude"][2]);
122                                $intLatSec = $LatSec[0]/$LatSec[1];
123
124                                $LongDeg = explode("/",$exifs["GPSLongitude"][0]);
125                                $intLongDeg = $LongDeg[0]/$LongDeg[1];
126
127                                $LongMin = explode("/",$exifs["GPSLongitude"][1]);
128                                $intLongMin = $LongMin[0]/$LongMin[1];
129
130                                $LongSec = explode("/",$exifs["GPSLongitude"][2]);
131                                $intLongSec = $LongSec[0]/$LongSec[1];
132
133                                // round to 5 = approximately 1 meter accuracy
134                                $latitude = round(dms_to_dec($exifs["GPSLatitudeRef"],
135                                $intLatDeg,$intLatMin,$intLatSec),5);
136
137                                $longitude =  round(dms_to_dec($exifs["GPSLongitudeRef"],
138                                $intLongDeg,$intLongMin,$intLongSec), 5);
139                                if($config['adresse'] == 'on'){
140                                        include_spip('inc/xml');
141                                        $url_geocoder = 'http://maps.googleapis.com/maps/api/geocode/xml?latlng='.urlencode($latitude).','.urlencode($longitude).'&sensor=true';
142                                        $geocoder = spip_xml_load($url_geocoder);
143                                        spip_xml_match_nodes(',result,',$geocoder,$matches_adress);
144                                        if(is_array($matches_adress['result'])){
145                                                foreach($matches_adress['result'] as $component){
146                                                        if(in_array('country',$component['type'])){
147                                                                $pays = $component['address_component'][0]['long_name'][0];
148                                                                $code_pays = $component['address_component'][0]['short_name'][0];
149                                                        }
150                                                        if(in_array('administrative_area_level_1',$component['type'])){
151                                                                $region = $component['address_component'][0]['long_name'][0];
152                                                        }
153                                                        if(in_array('locality',$component['type'])){
154                                                                $ville = $component['address_component'][0]['long_name'][0];
155                                                        }
156                                                        if(in_array('postal_code',$component['type'])){
157                                                                $code_postal = $component['address_component'][0]['long_name'][0];
158                                                        }
159                                                        if(in_array('route',$component['type'])){
160                                                                $adresse = $component['address_component'][0]['long_name'][0];
161                                                        }
162                                                }
163                                        }
164                                }
165                        }else if(file_exists($fichier)){
166                                include_spip("inc/iptc");
167
168                                $er = new class_IPTC($fichier);
169                                $iptc = $er->fct_lireIPTC();
170                                $codesiptc = $er->h_codesIptc;
171                                $string_recherche = '';
172                               
173                                if($iptc['city']){
174                                        $string_recherche .= $iptc['city'].', ';
175                                }
176                                if($iptc['provinceState']){
177                                        $string_recherche .= $iptc['provinceState'].', ';
178                                }
179                                if($iptc['country']){
180                                        $string_recherche .= $iptc['country'];
181                                }
182                                if(strlen($string_recherche)){
183                                        include_spip('inc/xml');
184                                        $url_geocoder = 'http://maps.googleapis.com/maps/api/geocode/xml?address='.urlencode($string_recherche).'&sensor=true';
185                                        $geocoder = spip_xml_load($url_geocoder);
186                                        if(is_array($geocoder)){
187                                                spip_xml_match_nodes(',location,',$geocoder,$matches);
188                                                $latitude = $matches['location']['0']['lat']['0'];
189                                                $longitude = $matches['location']['0']['lng']['0'];
190                                                if($config['adresse'] == 'on'){
191                                                        spip_xml_match_nodes(',address_component,',$geocoder,$matches_adress);
192                                                        if(is_array($matches_adress['address_component'])){
193                                                                foreach($matches_adress['address_component'] as $component){
194                                                                        if(in_array('country',$component['type'])){
195                                                                                $pays = $component['long_name'][0];
196                                                                                $code_pays = $component['short_name'][0];
197                                                                        }
198                                                                        if(in_array('administrative_area_level_1',$component['type'])){
199                                                                                $region = $component['long_name'][0];
200                                                                        }
201                                                                        if(in_array('locality',$component['type'])){
202                                                                                $ville = $component['long_name'][0];
203                                                                        }
204                                                                }
205                                                        }
206                                                }
207                                        }
208                                }
209                        }
210                        if(is_numeric($latitude) && is_numeric($longitude)){
211                                $c = array(
212                                        'titre' => basename($fichier),
213                                        'lat'=> $latitude,
214                                        'lon' => $longitude,
215                                        'zoom' => $config['zoom'] ? $config['zoom'] :'4',
216                                        'adresse' => $adresse,
217                                        'code_postal' => $code_postal,
218                                        'ville' => $ville,
219                                        'region' => $region,
220                                        'pays' => $pays,
221                                        'code_pays' => $code_pays
222                                );
223               
224                                include_spip('action/editer_gis');
225       
226                                if($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT  JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")){
227                                        // Des coordonnées sont déjà définies pour ce document => on les update
228                                        revisions_gis($id_gis,$c);
229                                        spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
230                                }
231                                else{
232                                        // Aucune coordonnée n'est définie pour ce document  => on les crées
233                                        $id_gis = insert_gis();
234                                        revisions_gis($id_gis,$c);
235                                        lier_gis($id_gis, 'document', $id_document);
236                                        spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
237                                }
238                        }
239                }
240        }
241        if (($flux['args']['operation'] == 'supprimer_document') 
242                AND ($id_document = intval($flux['args']['id_objet'])
243                AND ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT  JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")))
244        ) {
245                include_spip('action/editer_gis');
246                supprimer_gis($id_gis);
247                spip_log("GIS EXIFS : Suppression des coordonnées pour le document $id_document => id_gis = $id_gis","gis");
248        }
249       
250        return $flux;
251}
252
253// permettre la recherche dans une boucle gis
254function gis_rechercher_liste_des_champs($tables){
255        $tables['gis'] = array(
256                'titre' => 8,
257                'descriptif' => 5,
258                'pays' => 3,
259                'region' => 3,
260                'ville' => 3,
261                'code_postal' => 3
262        );
263        return $tables;
264}
265
266function gis_taches_generales_cron($taches_generales){
267        $taches_generales['gis_nettoyer_base'] = 3600*48;
268        return $taches_generales;
269}
270
271?>
Note: See TracBrowser for help on using the repository browser.