source: spip-zone/_plugins_/gis/trunk/inc/gis_xmlrpc.php @ 60882

Last change on this file since 60882 was 60882, checked in by guy.cesaro@…, 9 years ago

quelques reports des evolutions de la branche v2 entre r51054 et r60879 : a tester.

File size: 3.4 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/**
6 * Récupère la liste des points géolocalisés
7 *
8 * Arguments possibles :
9 * -* login string
10 * -* pass string
11 * -* objet string : le type d'objets liés
12 * -* id_objet int : l'identifiant numérique de l'objet lié
13 * -* where array : conditions à ajouter dans la clause where du select
14 * -* tri array : les éléments de tri
15 * -** Si 'distance' dans le tri
16 * -*** lat float : la latitude à partir de laquelle chercher
17 * -*** lon float : la longitude à partir de laquelle chercher
18 * -* limite int : le nombre d'éléments maximum à retourner
19 */
20function spip_liste_gis($args) {
21        global $spip_xmlrpc_serveur;
22       
23        if(!$spip_xmlrpc_serveur)
24                return false;
25       
26        $objet = 'gis';
27       
28        $what[] = 'gis.id_gis';
29        $from = 'spip_gis as gis LEFT JOIN spip_gis_liens as lien ON gis.id_gis=lien.id_gis';
30        $where = is_array($args['where']) ? $args['where'] : array();
31        $order = is_array($args['tri']) ? $args['tri'] : array();
32        if((intval($args['id_objet']) > 0) && $args['objet']){
33                $where[] = 'lien.id_objet='.intval($args['id_objet']).' AND lien.objet='.sql_quote($args['objet']);
34        }
35       
36        if(in_array('distance',$order)){
37                $distance = true;
38                $lat = $args['lat'];
39                $lon = $args['lon'];
40                if(!is_numeric($lon) OR !is_numeric($lat)){
41                        $erreur = _T('gis:erreur_xmlrpc_lat_lon');
42                        return new IXR_Error(-32601, attribut_html($erreur));
43                }else{
44                        $what[] = "(6371 * acos( cos( radians(\"$lat\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\"$lon\") ) + sin( radians(\"$lat\") ) * sin( radians( gis.lat ) ) ) ) AS distance";
45                }
46        }
47       
48        /**
49         * Une recherche
50         */     
51        if(is_string($args['recherche']) AND strlen($args['recherche']) > 3){
52                $prepare_recherche = charger_fonction('prepare_recherche', 'inc');
53                list($rech_select, $rech_where) = $prepare_recherche($args['recherche'], $objet.'s', $where);
54                $what[] = $rech_select;
55                $from .= ' INNER JOIN spip_resultats AS resultats ON ( resultats.id = gis.id_gis ) ';
56                $where[] = 'resultats.'.$rech_where;
57        }
58       
59        $points_struct = array();
60
61        if($points = sql_select($what,$from,$where,'',$order,$args['limite'])){
62                while($point = sql_fetch($points)){
63                        $struct=array();
64                        $args['id_gis'] = $point['id_gis'];
65                        /**
66                         * On utilise la fonction geodiv_lire_media pour éviter de dupliquer trop de code
67                         */
68                        $struct = spip_lire_gis($args);
69                        if($distance)
70                                $struct['distance'] = $point['distance'];
71                        $points_struct[] = $struct;
72                }
73        }
74        return $points_struct;
75}
76
77/**
78 * Récupère le contenu d'un point géolocalisé
79 *
80 * Arguments possibles :
81 * -* login
82 * -* pass
83 * -* id_gis (Obligatoire)
84 */
85function spip_lire_gis($args){
86        global $spip_xmlrpc_serveur;
87       
88        if(!$spip_xmlrpc_serveur)
89                return false;
90       
91        if(!intval($args['id_gis']) > 0){
92                $erreur = _T('xmlrpc:erreur_identifiant',array('objet'=>'gis'));
93                return new IXR_Error(-32601, attribut_html($erreur));
94        }
95       
96        $args_gis = array('objet'=>'gis','id_objet'=>$args['id_gis']);
97        $res = $spip_xmlrpc_serveur->read($args_gis);
98        if(!$res)
99                return $spip_xmlrpc_serveur->error;
100       
101        if(autoriser('modifier','gis',$args['id_gis'],$GLOBALS['visiteur_session']))
102                $res['result'][0]['modifiable'] = 1;
103        else
104                $res['result'][0]['modifiable'] = 0;
105        $logo = quete_logo('id_gis','on', $res['result'][0]['id_gis'], '', false);
106        if(is_array($logo))
107                $res['result'][0]['logo'] = url_absolue($logo[0]);
108       
109        $gis_struct = $res['result'][0];
110        $gis_struct = array_map('texte_backend',$gis_struct);
111        return $gis_struct;
112}
113
114?>
Note: See TracBrowser for help on using the repository browser.