svn/root/tags/v4.47.18
kent1@arscenic.info 7 years ago
parent 6ba9d75208
commit db2f874f3f

@ -1,8 +1,10 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function gis_declarer_tables_interfaces($interface){
function gis_declarer_tables_interfaces($interface) {
$interface['table_des_tables']['gis'] = 'gis';
$interface['table_des_tables']['gis_liens'] = 'gis_liens';
@ -21,7 +23,7 @@ function gis_declarer_tables_interfaces($interface){
return $interface;
}
function gis_declarer_tables_objets_sql($tables){
function gis_declarer_tables_objets_sql($tables) {
/* Declaration de la table de points gis */
$tables['spip_gis'] = array(
/* Declarations principales */
@ -52,7 +54,7 @@ function gis_declarer_tables_objets_sql($tables){
"fillopacity" => "varchar(4) NOT NULL DEFAULT ''"
),
'key' => array(
"PRIMARY KEY" => "id_gis",
'PRIMARY KEY' => 'id_gis',
'KEY lat' => 'lat',
'KEY lon' => 'lon',
'KEY pays' => 'pays(500)',
@ -63,7 +65,7 @@ function gis_declarer_tables_objets_sql($tables){
'KEY code_postal' => 'code_postal',
),
'join' => array(
"id_gis"=>"id_gis"
'id_gis' => 'id_gis'
),
'principale' => 'oui',
'modeles' => array('carte_gis', 'carte_gis_preview'),
@ -121,17 +123,17 @@ function gis_declarer_tables_objets_sql($tables){
return $tables;
}
function gis_declarer_tables_auxiliaires($tables_auxiliaires){
function gis_declarer_tables_auxiliaires($tables_auxiliaires) {
$spip_gis_liens = array(
"id_gis" => "bigint(21) NOT NULL",
"objet" => "VARCHAR (25) DEFAULT '' NOT NULL",
"id_objet" => "bigint(21) NOT NULL");
$spip_gis_liens_key = array(
"PRIMARY KEY" => "id_gis,id_objet,objet",
"KEY id_gis" => "id_gis",
"KEY id_objet" => "id_objet",
"KEY objet" => "objet"
'PRIMARY KEY' => 'id_gis,id_objet,objet',
'KEY id_gis' => 'id_gis',
'KEY id_objet' => 'id_objet',
'KEY objet' => 'objet'
);
$tables_auxiliaires['spip_gis_liens'] = array(
@ -140,5 +142,3 @@ function gis_declarer_tables_auxiliaires($tables_auxiliaires){
return $tables_auxiliaires;
}
?>

@ -1,6 +1,8 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* On inclue le fichier de pipelines pour avoir les fonctions:
@ -8,5 +10,3 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* gis_insert_head
*/
include_spip('gis_pipelines');
?>

@ -1,37 +1,38 @@
<?php
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction de verification du formulaire de configuration
* - On vérifie que la clé Bing est présente si cette couche est sélectionnée
*/
function formulaires_configurer_gis_verifier_dist(){
function formulaires_configurer_gis_verifier_dist() {
$erreurs = array();
$layers = _request('layers');
if (!is_array($layers)) {
$layers = array();
}
if ((_request('layer_defaut') == 'bing_aerial') OR in_array('bing_aerial', $layers)){
if ((_request('layer_defaut') == 'bing_aerial') or in_array('bing_aerial', $layers)) {
$obligatoire = 'api_key_bing';
if (!_request($obligatoire)){
if (!_request($obligatoire)) {
$erreurs[$obligatoire] = _T('info_obligatoire');
}
}
// S'il n'y a pas d'erreur on va chercher l'ancienne couche par défaut pour voir si elle a changé
if (empty($erreurs)){
if (empty($erreurs)) {
include_spip('inc/config');
$layer_defaut = lire_config('gis/layer_defaut');
// Si on change la couche par défaut ou si une couche google est présente dans la conf, le formulaire ne doit pas etre traiter en ajax
if ((_request('layer_defaut') != $layer_defaut)
OR (count(array_intersect(array('google_roadmap', 'google_satellite', 'google_terrain'), $layers)) > 0)
OR (in_array('bing_aerial', $layers)))
or (count(array_intersect(array('google_roadmap', 'google_satellite', 'google_terrain'), $layers)) > 0)
or (in_array('bing_aerial', $layers))) {
refuser_traiter_formulaire_ajax();
}
}
return $erreurs;
}
?>

@ -1,6 +1,8 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Formulaire de création et d'édition d'un point géolocalisé
@ -11,7 +13,7 @@ include_spip('inc/editer');
/**
* Chargement des valeurs par défaut du formulaire
*
*
* @param int|string $id_gis Identifiant numérique du point ou 'new' pour un nouveau
* @param string $objet Le type d'objet SPIP auquel il est attaché
* @param int $id_objet L'id_objet de l'objet auquel il est attaché
@ -19,42 +21,49 @@ include_spip('inc/editer');
* @param string $ajaxload initialiser la carte à chaque onAjaxLoad()
* @param array $options TODO à documenter, voir avec l'auteur de http://zone.spip.org/trac/spip-zone/changeset/53906
*/
function formulaires_editer_gis_charger_dist($id_gis='new', $objet='', $id_objet='', $retour='', $ajaxload='oui', $options=''){
function formulaires_editer_gis_charger_dist($id_gis = 'new', $objet = '', $id_objet = '', $retour = '', $ajaxload = 'oui', $options = '') {
$valeurs = formulaires_editer_objet_charger('gis', $id_gis, '', '', $retour, '');
$valeurs['objet'] = $objet;
$valeurs['id_objet'] = $id_objet;
$valeurs['ajaxload'] = $ajaxload;
/* Traitement des options */
/* Traitement des options */
/* peut etre a envoyer dans une fonction generique de verification des options */
if (is_array($options)) {
if (!$valeurs['lat'] and is_numeric($options['lat']))
$valeurs['lat']=$options['lat'];
if (!$valeurs['lon'] and is_numeric($options['lon']))
$valeurs['lon']=$options['lon'];
if (!$valeurs['zoom'] and is_numeric($options['zoom']) && intval($options['zoom'])==$options['zoom'])
$valeurs['zoom']=$options['zoom'];
if (!$valeurs['lat'] and is_numeric($options['lat'])) {
$valeurs['lat']=$options['lat'];
}
if (!$valeurs['lon'] and is_numeric($options['lon'])) {
$valeurs['lon']=$options['lon'];
}
if (!$valeurs['zoom'] and is_numeric($options['zoom']) && intval($options['zoom']) == $options['zoom']) {
$valeurs['zoom']=$options['zoom'];
}
/* Bounding Box */
if (is_numeric($options['sw_lat']))
$valeurs['sw_lat']=$options['sw_lat'];
if (is_numeric($options['sw_lon']))
$valeurs['sw_lon']=$options['sw_lon'];
if (is_numeric($options['ne_lat']))
$valeurs['ne_lat']=$options['ne_lat'];
if (is_numeric($options['ne_lon']))
$valeurs['ne_lon']=$options['ne_lon'];
if (is_numeric($options['sw_lat'])) {
$valeurs['sw_lat']=$options['sw_lat'];
}
if (is_numeric($options['sw_lon'])) {
$valeurs['sw_lon']=$options['sw_lon'];
}
if (is_numeric($options['ne_lat'])) {
$valeurs['ne_lat']=$options['ne_lat'];
}
if (is_numeric($options['ne_lon'])) {
$valeurs['ne_lon']=$options['ne_lon'];
}
}
return $valeurs;
}
/**
* Vérification des valeurs du formulaire
*
*
* 4 champs sont obligatoires :
* -* Son titre
* -* Sa latitude
* -* Sa longitude
* -* Son niveau de zoom
*
*
* @param int|string $id_gis Identifiant numérique du point ou 'new' pour un nouveau
* @param string $objet Le type d'objet SPIP auquel il est attaché
* @param int $id_objet L'id_objet de l'objet auquel il est attaché
@ -62,14 +71,14 @@ function formulaires_editer_gis_charger_dist($id_gis='new', $objet='', $id_objet
* @param string $ajaxload initialiser la carte à chaque onAjaxLoad()
* @param array $options ???
*/
function formulaires_editer_gis_verifier_dist($id_gis='new', $objet='', $id_objet='', $retour='', $ajaxload='oui', $options=''){
$erreurs = formulaires_editer_objet_verifier('gis', $id_gis,array('titre','lat','lon','zoom'));
function formulaires_editer_gis_verifier_dist($id_gis = 'new', $objet = '', $id_objet = '', $retour = '', $ajaxload = 'oui', $options = '') {
$erreurs = formulaires_editer_objet_verifier('gis', $id_gis, array('titre', 'lat', 'lon', 'zoom'));
return $erreurs;
}
/**
* Traitement des valeurs du formulaire
*
*
* @param int|string $id_gis Identifiant numérique du point ou 'new' pour un nouveau
* @param string $objet Le type d'objet SPIP auquel il est attaché
* @param int $id_objet L'id_objet de l'objet auquel il est attaché
@ -77,17 +86,16 @@ function formulaires_editer_gis_verifier_dist($id_gis='new', $objet='', $id_obje
* @param string $ajaxload initialiser la carte à chaque onAjaxLoad()
* @param array $options ???
*/
function formulaires_editer_gis_traiter_dist($id_gis='new', $objet='', $id_objet='', $retour='', $ajaxload='oui', $options=''){
if (_request('supprimer')){
function formulaires_editer_gis_traiter_dist($id_gis = 'new', $objet = '', $id_objet = '', $retour = '', $ajaxload = 'oui', $options = '') {
if (_request('supprimer')) {
include_spip('action/editer_gis');
supprimer_gis($id_gis);
$id_table_objet = id_table_objet($objet);
if ($retour)
$res['redirect'] = parametre_url($retour,$id_table_objet,$id_objet);
if ($retour) {
$res['redirect'] = parametre_url($retour, $id_table_objet, $id_objet);
}
return $res;
} else {
return formulaires_editer_objet_traiter('gis', $id_gis, '', '', $retour, '');
}
}
?>

@ -1,34 +1,39 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function formulaires_gis_inserer_modeles_traiter_dist($champs) {
// champs a ne pas prendre en compte
$ignorer = array('adresse','code_postal','ville','pays');
$code = '<'._request('modele');
if (_request('id_modele') && _request('id_modele')!='')
$code .= _request('id_modele');
if (_request('variante') && _request('variante')!='')
$code .= '|'._request('variante');
if (_request('classe') && _request('classe')!='')
$code .= '|'._request('classe');
if (_request('align') && _request('align')!='')
$code .= '|'._request('align');
foreach ($champs as $champ) {
if( !in_array($champ, $ignorer) && $champ != 'modele' && $champ != 'variante' && $champ != 'classe' && $champ != 'id_modele' && $champ != 'align' && _request($champ) && _request($champ)!='') {
if($champ == _request($champ))
$code .= "|$champ";
// On transforme les tableaux en une liste
elseif (is_array(_request($champ)))
$code .= "|$champ=".implode(',',_request($champ));
else
$code .= "|$champ="._request($champ);
}
}
$code .= '>';
return $code;
}
?>
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_gis_inserer_modeles_traiter_dist($champs) {
// champs a ne pas prendre en compte
$ignorer = array('adresse','code_postal','ville','pays');
$code = '<' . _request('modele');
if (_request('id_modele') && _request('id_modele') != '') {
$code .= _request('id_modele');
}
if (_request('variante') && _request('variante')!='') {
$code .= '|'._request('variante');
}
if (_request('classe') && _request('classe')!='') {
$code .= '|'._request('classe');
}
if (_request('align') && _request('align')!='') {
$code .= '|'._request('align');
}
foreach ($champs as $champ) {
if (!in_array($champ, $ignorer) && $champ != 'modele' && $champ != 'variante' && $champ != 'classe' && $champ != 'id_modele' && $champ != 'align' && _request($champ) && _request($champ)!='') {
if ($champ == _request($champ)) {
$code .= "|$champ";
} elseif (is_array(_request($champ))) {
// On transforme les tableaux en une liste
$code .= "|$champ=".implode(',', _request($champ));
} else {
$code .= "|$champ=" . _request($champ);
}
}
}
$code .= '>';
return $code;
}

@ -1,6 +1,8 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Formulaire de création et d'édition d'un point géolocalisé
@ -11,13 +13,13 @@ include_spip('inc/editer');
/**
* Chargement des valeurs par défaut du formulaire
*
*
* @param string $objet Le type d'objet SPIP auquel il est attaché
* @param int $id_objet L'id_objet de l'objet auquel il est attaché
* @param string $retour L'url de retour
* @param string $recherche
*/
function formulaires_rechercher_gis_charger_dist($objet='', $id_objet='', $retour='', $recherche=''){
function formulaires_rechercher_gis_charger_dist($objet = '', $id_objet = '', $retour = '', $recherche = '') {
$valeurs['recherche_gis'] = _request('recherche_gis');
$valeurs['objet'] = $objet;
$valeurs['id_objet'] = $id_objet;
@ -26,28 +28,26 @@ function formulaires_rechercher_gis_charger_dist($objet='', $id_objet='', $retou
/**
* Vérification des valeurs du formulaire
*
*
* @param string $objet Le type d'objet SPIP auquel il est attaché
* @param int $id_objet L'id_objet de l'objet auquel il est attaché
* @param string $retour L'url de retour
* @param string $recherche
*/
function formulaires_rechercher_gis_verifier_dist($objet='', $id_objet='', $retour='', $recherche=''){
function formulaires_rechercher_gis_verifier_dist($objet = '', $id_objet = '', $retour = '', $recherche = '') {
$erreurs = array();
return $erreurs;
}
/**
* Traitement des valeurs du formulaire
*
*
* @param string $objet Le type d'objet SPIP auquel il est attaché
* @param int $id_objet L'id_objet de l'objet auquel il est attaché
* @param string $retour L'url de retour
* @param string $recherche
*/
function formulaires_rechercher_gis_traiter_dist($objet='', $id_objet='', $retour='', $recherche=''){
function formulaires_rechercher_gis_traiter_dist($objet = '', $id_objet = '', $retour = '', $recherche = '') {
$res = array();
return $res;
}
?>

@ -1,7 +1,9 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Installation/maj des tables gis
@ -9,7 +11,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param string $nom_meta_base_version
* @param string $version_cible
*/
function gis_upgrade($nom_meta_base_version, $version_cible){
function gis_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
// Première installation
@ -75,7 +77,7 @@ function gis_upgrade($nom_meta_base_version, $version_cible){
array('sql_alter', 'TABLE spip_gis_liens ADD INDEX (objet)'),
array('sql_alter', 'TABLE spip_gis_liens ADD INDEX (id_objet)'),
);
// Ajout des champs de styles (color, weight, opacity, fillcolor & fillopacity)
$maj['2.1.0'] = array(
array('maj_tables',array('spip_gis')),
@ -85,22 +87,24 @@ function gis_upgrade($nom_meta_base_version, $version_cible){
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function gis_upgrade_2_0(){
function gis_upgrade_2_0() {
include_spip('action/editer_gis');
// On déplace les liaisons articles et rubriques
$res = sql_select('*','spip_gis');
$res = sql_select('*', 'spip_gis');
while ($row = sql_fetch($res)) {
if($row['id_article'] != 0)
if ($row['id_article'] != 0) {
lier_gis($row['id_gis'], 'article', $row['id_article']);
if($row['id_rubrique'] != 0)
}
if ($row['id_rubrique'] != 0) {
lier_gis($row['id_gis'], 'article', $row['id_rubrique']);
}
}
// On déplace les liaisons mots
$res = sql_select('*','spip_gis_mots');
$res = sql_select('*', 'spip_gis_mots');
while ($row = sql_fetch($res)) {
$titre_mot = sql_getfetsel('titre','spip_mots','id_mot='.$row['id_mot']);
$titre_mot = sql_getfetsel('titre', 'spip_mots', 'id_mot='.$row['id_mot']);
$c = array(
'titre' => $titre_mot,
'lat'=> $row['lat'],
@ -108,7 +112,7 @@ function gis_upgrade_2_0(){
'zoom' => $row['zoom']
);
$id_gis = insert_gis();
revisions_gis($id_gis,$c);
revisions_gis($id_gis, $c);
lier_gis($id_gis, 'mot', $row['id_mot']);
}
}
@ -119,10 +123,9 @@ function gis_upgrade_2_0(){
* @param string $nom_meta_base_version
*/
function gis_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_gis");
sql_drop_table("spip_gis_liens");
sql_drop_table('spip_gis');
sql_drop_table('spip_gis_liens');
effacer_meta($nom_meta_base_version);
// Effacer la config
effacer_meta('gis');
}

@ -1,13 +1,16 @@
<?php
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function gis_autoriser(){};
function gis_autoriser() {
}
/**
* Autorisation a modifier le logo d'un point
* Si on est autorisé à modifier le point en question
*
*
* @param string $faire L'action
* @param string $type Le type d'objet
* @param int $id L'identifiant numérique de l'objet
@ -15,15 +18,15 @@ function gis_autoriser(){};
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_iconifier_dist($faire,$quoi,$id,$qui,$opts){
return autoriser('modifier','gis',$id,$qui,$opts);
function autoriser_gis_iconifier_dist($faire, $quoi, $id, $qui, $opts) {
return autoriser('modifier', 'gis', $id, $qui, $opts);
}
/**
* Autorisation a modifier un point
* Avoir un statut dans les 3 fournis par SPIP
* (On n'a pas d'auteur pour un point ...)
*
*
* @param string $faire L'action
* @param string $type Le type d'objet
* @param int $id L'identifiant numérique de l'objet
@ -31,15 +34,15 @@ function autoriser_gis_iconifier_dist($faire,$quoi,$id,$qui,$opts){
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_modifier_dist($faire,$quoi,$id,$qui,$opts){
return (in_array($qui['statut'],array('0minirezo','1comite','6forum')));
function autoriser_gis_modifier_dist($faire, $quoi, $id, $qui, $opts) {
return (in_array($qui['statut'], array('0minirezo', '1comite', '6forum')));
}
/**
* Autorisation a creer un point
* Avoir un statut dans les 3 fournis par SPIP
* (On n'a pas d'auteur pour un point ...)
*
*
* @param string $faire L'action
* @param string $type Le type d'objet
* @param int $id L'identifiant numérique de l'objet
@ -47,14 +50,14 @@ function autoriser_gis_modifier_dist($faire,$quoi,$id,$qui,$opts){
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_creer_dist($faire,$quoi,$id,$qui,$opts){
return (in_array($qui['statut'],array('0minirezo','1comite','6forum')));
function autoriser_gis_creer_dist($faire, $quoi, $id, $qui, $opts) {
return (in_array($qui['statut'], array('0minirezo', '1comite', '6forum')));
}
/**
* Autorisation a lier un point d'un objet
* Un auteur peut lier un point à un autre objet que s'il peut modifier l'objet à lier en question
*
*
* @param string $faire L'action
* @param string $type Le type d'objet
* @param int $id L'identifiant numérique de l'objet
@ -62,9 +65,9 @@ function autoriser_gis_creer_dist($faire,$quoi,$id,$qui,$opts){
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_lier_dist($faire,$quoi,$id,$qui,$opts){
if(is_array($opts) && isset($opts['objet']) && isset($opts['id_objet'])){
return autoriser('modifier',$opts['objet'],$opts['id_objet'],$qui);
function autoriser_gis_lier_dist($faire, $quoi, $id, $qui, $opts) {
if (is_array($opts) and isset($opts['objet']) and isset($opts['id_objet'])) {
return autoriser('modifier', $opts['objet'], $opts['id_objet'], $qui);
}
return false;
}
@ -73,7 +76,7 @@ function autoriser_gis_lier_dist($faire,$quoi,$id,$qui,$opts){
* Autorisation a délier un point d'un objet
* Un auteur peut délier un point d'un autre objet que s'il peut modifier l'objet en question
* Si l'objet lié n'existe plus, on vérifie que l'auteur a le droit de modifier le point
*
*
* @param string $faire L'action
* @param string $type Le type d'objet
* @param int $id L'identifiant numérique de l'objet
@ -81,19 +84,20 @@ function autoriser_gis_lier_dist($faire,$quoi,$id,$qui,$opts){
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_delier_dist($faire,$quoi,$id,$qui,$opts){
function autoriser_gis_delier_dist($faire, $quoi, $id, $qui, $opts) {
$table = table_objet_sql($opts['objet']);
$_id_objet = id_table_objet($table);
if (!sql_getfetsel($_id_objet,$table,"$_id_objet=".intval($opts['id_objet'])))
return autoriser('modifier','gis',$id,$qui,$opts);
else
return autoriser('lier','gis',$id,$qui,$opts);
if (!sql_getfetsel($_id_objet, $table, "$_id_objet=" . intval($opts['id_objet']))) {
return autoriser('modifier', 'gis', $id, $qui, $opts);
} else {
return autoriser('lier', 'gis', $id, $qui, $opts);
}
}
/**
* Autorisation a supprimer un point
* Un auteur peut supprimer un point s'il peut délier tous les objets et modifier le point
*
*
* @param string $faire L'action
* @param string $type Le type d'objet
* @param int $id L'identifiant numérique de l'objet
@ -101,12 +105,12 @@ function autoriser_gis_delier_dist($faire,$quoi,$id,$qui,$opts){
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_supprimer_dist($faire,$quoi,$id,$qui,$opts){
$liaisons = sql_select('*','spip_gis_liens','id_gis='.intval($id));
while($liaison = sql_fetch($liaisons)){
if(!autoriser('delier','gis',$liaison['id_gis'],$qui,$liaison)){
function autoriser_gis_supprimer_dist($faire, $quoi, $id, $qui, $opts) {
$liaisons = sql_select('*', 'spip_gis_liens', 'id_gis=' . intval($id));
while ($liaison = sql_fetch($liaisons)) {
if (!autoriser('delier', 'gis', $liaison['id_gis'], $qui, $liaison)) {
return false;
}
}
return autoriser('modifier','gis',$id,$qui,$opts);
return autoriser('modifier', 'gis', $id, $qui, $opts);
}

@ -1,49 +1,51 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/config');
include_spip('inc/json');
/**
/**
* Filtre dec_to_dms, http://www.statemaster.com/encyclopedia/Geographic-coordinate-conversion
*
*
* @param decimal $coord
* @return string
*/
function dec_to_dms($coord) {
return sprintf(
"%0.0f° %2.3f",
'%0.0f° %2.3f',
floor(abs($coord)),
60*(abs($coord)-floor(abs($coord)))
);
}
/**
/**
* Filtre dms_to_dec, http://www.statemaster.com/encyclopedia/Geographic-coordinate-conversion
*
*
* @param string $ref N, E, S, W
* @param int $deg
* @param int $min
* @param int $sec
* @return decimal
*/
function dms_to_dec($ref,$deg,$min,$sec) {
function dms_to_dec($ref, $deg, $min, $sec) {
$arrLatLong = array();
$arrLatLong["N"] = 1;
$arrLatLong["E"] = 1;
$arrLatLong["S"] = -1;
$arrLatLong["W"] = -1;
$arrLatLong['N'] = 1;
$arrLatLong['E'] = 1;
$arrLatLong['S'] = -1;
$arrLatLong['W'] = -1;
return ($deg+((($min*60)+($sec))/3600)) * $arrLatLong[$ref];
}
/**
/**
* Filtre distance pour renvoyer la distance entre deux points
* http://snipplr.com/view/2531/calculate-the-distance-between-two-coordinates-latitude-longitude/
* sinon voir ici : http://zone.spip.org/trac/spip-zone/browser/_plugins_/forms/geoforms/inc/gPoint.php
*
*
* @param int|array $from
* id_gis du point de référence ou tableau de coordonnées
* @param int|array $to
@ -53,23 +55,12 @@ function dms_to_dec($ref,$deg,$min,$sec) {
* @return float
* Retourne la distance en kilomètre ou en miles
*/
function distance($from, $to, $miles=false) {
function distance($from, $to, $miles = false) {
// On ne travaille que si on a toutes les infos
if (
// Le départ est soit un tableau soit un entier
(
(is_array($from) and isset($from['lat']) and isset($from['lon']))
or
($from = intval($from) and $from > 0 and $from = sql_fetsel('lat,lon','spip_gis',"id_gis=$from"))
)
and
// Le distant est soit un tableau soit un entier
(
(is_array($to) and isset($to['lat']) and isset($to['lon']))
or
($to = intval($to) and $to > 0 and $to = sql_fetsel('lat,lon','spip_gis',"id_gis=$to"))
)
){
if (((is_array($from) and isset($from['lat']) and isset($from['lon'])) // Le départ est soit un tableau soit un entier
or ($from = intval($from) and $from > 0 and $from = sql_fetsel('lat,lon', 'spip_gis', "id_gis=$from")))
and ((is_array($to) and isset($to['lat']) and isset($to['lon'])) or ($to = intval($to) and $to > 0 and $to = sql_fetsel('lat,lon', 'spip_gis', "id_gis=$to"))) // Le distant est soit un tableau soit un entier
) {
$pi80 = M_PI / 180;
$from['lat'] *= $pi80;
$from['lon'] *= $pi80;
@ -85,13 +76,13 @@ function distance($from, $to, $miles=false) {
return ($miles ? ($km * 0.621371192) : $km);
}
return false;
}
/**
* Compilation du critère {distancefrom}
*
*
* Critère {distancefrom} qui permet de ne sélectionner que les objets se trouvant à une distance comparée avec un point de repère.
* On doit lui passer 3 paramètres obligatoires :
* - le point de repère qui est un tableau avec les clés "lat" et "lon" ou un id_gis
@ -110,13 +101,10 @@ function critere_distancefrom_dist($idb, &$boucles, $crit) {
$id_table = $boucle->id_table; // articles
$primary = $boucle->primary; // id_article
$objet = objet_type($id_table); // article
if (
// Soit depuis une boucle (GIS) soit un autre objet mais avec {gis}
($id_table == 'gis' or isset($boucle->join['gis']))
// Il faut aussi qu'il y ait 3 critères obligatoires
and count($crit->param) == 3
){
if (($id_table == 'gis' or isset($boucle->join['gis'])) // Soit depuis une boucle (GIS) soit un autre objet mais avec {gis}
and count($crit->param) == 3 // Il faut aussi qu'il y ait 3 critères obligatoires
) {
$point_reference = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
$operateur = calculer_liste($crit->param[1], array(), $boucles, $boucles[$idb]->id_parent);
$distance = calculer_liste($crit->param[2], array(), $boucles, $boucles[$idb]->id_parent);
@ -130,7 +118,7 @@ function critere_distancefrom_dist($idb, &$boucles, $crit) {
$boucle->hierarchie .= '$operateur_distance = trim('.$operateur.');';
$boucle->hierarchie .= 'if (!in_array($operateur_distance, array("=","<",">","<=",">="))){ $operateur_distance = false; }';
$boucle->hierarchie .= '$distance = '.$distance.';';
$boucle->select[] = '".(!$point_reference ? "\'\' as distance" : "(6371 * acos( cos( radians(".$point_reference["lat"].") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(".$point_reference["lon"].") ) + sin( radians(".$point_reference["lat"].") ) * sin( radians( gis.lat ) ) ) ) AS distance")."';
$boucle->having[] = '((!$point_reference or !$operateur_distance or !$distance) ? "1=1" : "distance $operateur_distance ".sql_quote($distance))';
}
@ -153,55 +141,55 @@ function critere_gis_dist($idb, &$boucles, $crit) {
$id_table = $boucle->id_table; // articles
$primary = $boucle->primary; // id_article
$objet = objet_type($id_table); // article
if ($id_table == 'gis') {
// exclure l'élément en cours des résultats
$id_gis = calculer_argument_precedent($idb,$primary, $boucles);
$id_gis = calculer_argument_precedent($idb, $primary, $boucles);
$boucle->where[]= array("'!='", "'$boucle->id_table." . "$primary'", $id_gis);
// récupérer les paramètres du critère
$op='';
$params = $crit->param;
$type = array_shift($params);
$type = $type[0]->texte;
if(preg_match(',^(\w+)([<>=]+)([0-9]+)$,',$type,$r)){
if (preg_match(',^(\w+)([<>=]+)([0-9]+)$,', $type, $r)) {
$type=$r[1];
$op=$r[2];
$op_val=$r[3];
}
if ($op)
if ($op) {
$boucle->having[]= array("'".$op."'", "'".$type."'",$op_val);
}
// récupérer lat/lon du point de la boucle englobante
$lat = calculer_argument_precedent($idb,'lat', $boucles);
$lon = calculer_argument_precedent($idb,'lon', $boucles);
$lat = calculer_argument_precedent($idb, 'lat', $boucles);
$lon = calculer_argument_precedent($idb, 'lon', $boucles);
// http://www.awelty.fr/developpement-web/php/
// http://www.movable-type.co.uk/scripts/latlong-db.html
// http://code.google.com/intl/fr/apis/maps/articles/geospatial.html#geospatial
$select = "(6371 * acos( cos( radians(\".$lat.\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\".$lon.\") ) + sin( radians(\".$lat.\") ) * sin( radians( gis.lat ) ) ) ) AS distance";
$order = "'distance'";
$boucle->select[]= $select;
$boucle->order[]= $order;
} else {
/* Recherche d'objets SANS point */
if ($crit->not) {
$boucle->from['gis_liens'] = 'spip_gis_liens';
$boucle->from_type['gis_liens'] = "LEFT";
$boucle->from_type['gis_liens'] = 'LEFT';
$boucle->join['gis_liens'] = array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
$boucle->where[] = "'gis_liens.id_gis IS NULL'";
/* Recherche d'objets AVEC point + ajout des champs GIS */
} else {
// ajouter tous les champs du point au select
// ajouter tous les champs du point au select
// et les suffixer pour lever toute ambiguite avec des champs homonymes
if (!function_exists('objet_info')) {
include_spip('inc/filtres');
}
$champs = objet_info('gis', 'champs_critere_gis');
foreach($champs as $champ){
foreach ($champs as $champ) {
$boucle->select[] = $champ;
}
// jointure sur spip_gis_liens/spip_gis
@ -215,7 +203,7 @@ function critere_gis_dist($idb, &$boucles, $crit) {
// mais attention, si on trouve en amont un groupement portant sur un champ *de GIS*,
// alors cela signifie que la personne veut faire une opération de groupement sur les points donc là on n'ajoute pas id_gis
$tous_les_points = true;
foreach ($boucle->group as $champ){
foreach ($boucle->group as $champ) {
if (in_array($champ, array('ville', 'code_postal', 'pays', 'code_pays', 'region','departement'))) {
$tous_les_points = false;
}
@ -227,10 +215,9 @@ function critere_gis_dist($idb, &$boucles, $crit) {
// permet de passer dans trouver_champ_exterieur() depuis index_tables_en_pile()
// cf http://article.gmane.org/gmane.comp.web.spip.zone/6628
$boucle->jointures[] = 'gis';
if (empty($boucle->jointures_explicites)){
if (empty($boucle->jointures_explicites)) {
$boucle->jointures_explicites = 'gis_liens gis';
}
else{
} else {
$boucle->jointures_explicites .= ' gis_liens gis';
}
}
@ -340,12 +327,12 @@ function balise_code_postal_gis_dist($p) {
/**
* Définition du fond de carte à utiliser par défaut en prenant compte les defines
*/
function gis_layer_defaut(){
function gis_layer_defaut() {
$defaut = 'openstreetmap_mapnik';
if(defined('_GIS_LAYER_DEFAUT_FORCE')){
if (defined('_GIS_LAYER_DEFAUT_FORCE')) {
return _GIS_LAYER_DEFAUT_FORCE;
}else{
if(defined('_GIS_LAYER_DEFAUT')){
} else {
if (defined('_GIS_LAYER_DEFAUT')) {
$defaut = _GIS_LAYER_DEFAUT;
}
$config = lire_config('gis/layer_defaut');
@ -358,22 +345,23 @@ function gis_layer_defaut(){
* @param $env
* @return array
*/
function gis_modele_url_json_env($env){
function gis_modele_url_json_env($env) {
$contexte = array();
if (is_string($env))
if (is_string($env)) {
$env = unserialize($env);
if ($env){
}
if ($env) {
// d'abord toutes les cles primaires connues
$tables_sql = lister_tables_objets_sql();
foreach (array_keys($tables_sql) as $table){
foreach (array_keys($tables_sql) as $table) {
$primary = id_table_objet($table);
if (isset($env[$primary])) {
$contexte[$primary] = is_array($env[$primary]) ? $env[$primary] : trim($env[$primary]);
}
}
// puis cas particuliers et ceux ajoutés par le pipeline
$keys = pipeline('gis_modele_parametres_autorises', array("objet", "id_objet","id_secteur","id_parent","media","recherche","mots","pays","code_pays","region","departement","ville","code_postal","adresse"));
foreach ($keys as $key){
$keys = pipeline('gis_modele_parametres_autorises', array('objet', 'id_objet', 'id_secteur', 'id_parent', 'media', 'recherche', 'mots', 'pays', 'code_pays', 'region', 'departement', 'ville', 'code_postal', 'adresse'));
foreach ($keys as $key) {
if (isset($env[$key])) {
$contexte[$key] = is_array($env[$key]) ? $env[$key] : trim($env[$key]);
}
@ -389,16 +377,16 @@ function gis_modele_url_json_env($env){
* @param array $kml
* @return array
*/
function gis_kml_to_urls($kml){
if ($kml AND count($kml)){
include_spip("inc/filtres_mini");
include_spip("inc/distant");
foreach($kml as $k=>$v){
if (is_numeric($v)){
$kml[$k] = url_absolue(generer_url_entite($v,"document"));
function gis_kml_to_urls($kml) {
if ($kml and count($kml)) {
include_spip('inc/filtres_mini');
include_spip('inc/distant');
foreach ($kml as $k => $v) {
if (is_numeric($v)) {
$kml[$k] = url_absolue(generer_url_entite($v, 'document'));
} else {
$kml[$k] = _DIR_RACINE.copie_locale($kml[$k], 'modif');
}
else
$kml[$k] = _DIR_RACINE.copie_locale($kml[$k],"modif");
}
}
return $kml;
@ -406,46 +394,46 @@ function gis_kml_to_urls($kml){
/**
* Retourne les propriétés JSON de l'icône d'un point
*
*
* @param string $img
* Balise HTML `<img ... />` ou chemin de l'image (qui peut être une URL distante).
* @return string
* Les propriétés de l'icône
**/
function gis_icon_properties($img=''){
function gis_icon_properties($img = '') {
$props = $icon = '';
if ($img) {
if (largeur($img) >= 44)
$icon = extraire_attribut(filtrer('image_graver',filtrer('image_recadre',filtrer('image_passe_partout',$img,32,32),32,32,'center','transparent')),'src');
else
$icon = extraire_attribut($img,'src') ? extraire_attribut($img,'src') : $img;
}
else
if (largeur($img) >= 44) {
$icon = extraire_attribut(filtrer('image_graver', filtrer('image_recadre', filtrer('image_passe_partout', $img, 32, 32), 32, 32, 'center', 'transparent')), 'src');
} else {
$icon = extraire_attribut($img, 'src') ? extraire_attribut($img, 'src') : $img;
}
} else {
$icon = find_in_path('images/marker_defaut.png');
}
if ($icon) {
$props .= ",\n\t\t\t\"icon\": ". json_encode(url_absolue($icon)).",";
$props .= ",\n\t\t\t\"icon\": ". json_encode(url_absolue($icon)).',';
list($h,$w) = taille_image($icon);
$props .= "\n\t\t\t\"icon_size\": ". json_encode(array($w,$h)).",";
$props .= "\n\t\t\t\"icon_size\": ". json_encode(array($w,$h)).',';
/**
* Si l'icone est carrée, on considère que c'est soit un point soit un carré qui pointe un lieu et non une "goutte"
* On centre donc au milieu de l'icone
*/
if($w == $h) {
$props .= "\n\t\t\t\"icon_anchor\": ". json_encode(array($w/2,$h/2)).",";
}
else {
$props .= "\n\t\t\t\"icon_anchor\": ". json_encode(array($w/2,$h)).",";
if ($w == $h) {
$props .= "\n\t\t\t\"icon_anchor\": ". json_encode(array($w/2, $h/2)).',';
} else {
$props .= "\n\t\t\t\"icon_anchor\": ". json_encode(array($w/2, $h)).',';
}
$props .= "\n\t\t\t\"popup_anchor\": ". json_encode(array(1,-round($h/1.2,2)));
$props .= "\n\t\t\t\"popup_anchor\": ". json_encode(array(1, -round($h/1.2, 2)));
}
if ($shadow = find_in_path('images/marker_defaut_shadow.png')) {
$props .= ",\n\t\t\t\"shadow\": ". json_encode(url_absolue($shadow));
list($h,$w) = taille_image($shadow);
$props .= ",\n\t\t\t\"shadow_size\": ". json_encode(array($w,$h));
}
return $props;
}

@ -1,9 +1,11 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// pour compat cf http://zone.spip.org/trac/spip-zone/changeset/79911/
define('_DIR_LIB_GIS',find_in_path('lib/leaflet/'));
define('_DIR_LIB_GIS', find_in_path('lib/leaflet/'));
$GLOBALS['logo_libelles']['id_gis'] = _T('gis:libelle_logo_gis');
@ -173,7 +175,7 @@ $gis_layers = array (
);
if (isset($GLOBALS['gis_layers']) and is_array($GLOBALS['gis_layers'])) {
$GLOBALS['gis_layers'] = array_merge($gis_layers,$GLOBALS['gis_layers']);
$GLOBALS['gis_layers'] = array_merge($gis_layers, $GLOBALS['gis_layers']);
} else {
$GLOBALS['gis_layers'] = $gis_layers;
}

@ -1,6 +1,8 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Insertion des css du plugin dans les pages publiques
@ -8,10 +10,10 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param $flux
* @return mixed
*/
function gis_insert_head_css($flux){
$flux .="\n".'<link rel="stylesheet" href="'. sinon(find_in_path('css/leaflet.css'),find_in_path('lib/leaflet/dist/leaflet.css')) .'" />';
$flux .="\n".'<link rel="stylesheet" href="'. sinon(find_in_path('css/leaflet-plugins.css'),find_in_path('lib/leaflet/plugins/leaflet-plugins.css')) .'" />';
$flux .="\n".'<link rel="stylesheet" href="'. sinon(find_in_path('css/leaflet.markercluster.css'),find_in_path('lib/leaflet/plugins/leaflet.markercluster.css')) .'" />';
function gis_insert_head_css($flux) {
$flux .="\n".'<link rel="stylesheet" href="'. sinon(find_in_path('css/leaflet.css'), find_in_path('lib/leaflet/dist/leaflet.css')) .'" />';
$flux .="\n".'<link rel="stylesheet" href="'. sinon(find_in_path('css/leaflet-plugins.css'), find_in_path('lib/leaflet/plugins/leaflet-plugins.css')) .'" />';
$flux .="\n".'<link rel="stylesheet" href="'. sinon(find_in_path('css/leaflet.markercluster.css'), find_in_path('lib/leaflet/plugins/leaflet.markercluster.css')) .'" />';
return $flux;
}
@ -21,22 +23,24 @@ function gis_insert_head_css($flux){
* @param $flux
* @return mixed
*/
function gis_insert_head($flux){
function gis_insert_head($flux) {
// initialisation des valeurs de config
$config = @unserialize($GLOBALS['meta']['gis']);
if (!isset($config['layers']) || !is_array($config['layers']))
if (!isset($config['layers']) || !is_array($config['layers'])) {
$config['layers'] = array('openstreetmap_mapnik');
}
include_spip('gis_fonctions');
if (!in_array(gis_layer_defaut(),$config['layers']))
if (!in_array(gis_layer_defaut(), $config['layers'])) {
$config['layers'][] = gis_layer_defaut();
}
// insertion des scripts pour google si nécessaire
if (count(array_intersect(array('google_roadmap', 'google_satellite', 'google_terrain'), $config['layers'])) > 0) {
$flux .="\n".'<script type="text/javascript" src="//maps.google.com/maps/api/js?sensor=false&amp;language='.$GLOBALS['spip_lang'].'"></script>';
}
return $flux;
}
@ -46,7 +50,7 @@ function gis_insert_head($flux){
* @param $flux
* @return mixed
*/
function gis_header_prive($flux){
function gis_header_prive($flux) {
$flux .= gis_insert_head_css('');
$flux .= gis_insert_head('');
return $flux;
@ -58,13 +62,12 @@ function gis_header_prive($flux){
* @param $flux
* @return mixed
*/
function gis_afficher_contenu_objet($flux){
function gis_afficher_contenu_objet($flux) {
if ($objet = $flux['args']['type']
and include_spip('inc/config')
and in_array(table_objet_sql($objet), lire_config('gis/gis_objets', array()))
and ($id = intval($flux['args']['id_objet']))
){
) {
$texte = recuperer_fond(
'prive/contenu/gis_objet',
array(
@ -75,7 +78,7 @@ function gis_afficher_contenu_objet($flux){
);
$flux['data'] .= $texte;
}
return $flux;
}
@ -86,86 +89,93 @@ function gis_afficher_contenu_objet($flux){
* @param $flux
* @return mixed
*/
function gis_post_edition($flux){
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'ajouter_document')
AND ($document = sql_fetsel("*","spip_documents","id_document=".intval($flux['args']['id_objet'])))
AND (in_array(table_objet_sql('document'), lire_config('gis/gis_objets', array())))
function gis_post_edition($flux) {
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'ajouter_document')
and ($document = sql_fetsel('*', 'spip_documents', 'id_document=' . intval($flux['args']['id_objet'])))
and (in_array(table_objet_sql('document'), lire_config('gis/gis_objets', array())))
) {
if (in_array($document['extension'],array('jpg','kml','kmz'))) {
if (in_array($document['extension'], array('jpg', 'kml', 'kmz'))) {
$config = @unserialize($GLOBALS['meta']['gis']);
if (!is_array($config))
if (!is_array($config)) {
$config = array();
}
include_spip('inc/documents');
$fichier = get_spip_doc($document['fichier']);
$id_document = $document['id_document'];
}
if ($document['extension'] == 'jpg') {
// on recupere les coords definies dans les exif du document s'il y en a
if (function_exists('exif_read_data') AND $exifs = @exif_read_data($fichier,'GPS')) {
if (!function_exists('dms_to_dec'))
if (function_exists('exif_read_data') and $exifs = @exif_read_data($fichier, 'GPS')) {
if (!function_exists('dms_to_dec')) {
include_spip('gis_fonctions');
spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier","gis");
$LatDeg = explode("/",$exifs["GPSLatitude"][0]);
if (is_numeric($LatDeg[1]) > 0)
}
spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier", 'gis');
$LatDeg = explode('/', $exifs['GPSLatitude'][0]);
if (is_numeric($LatDeg[1]) > 0) {
$intLatDeg = $LatDeg[0]/$LatDeg[1];
}
$LatMin = explode("/",$exifs["GPSLatitude"][1]);
if (is_numeric($LatMin[1]) > 0)
$LatMin = explode('/', $exifs['GPSLatitude'][1]);
if (is_numeric($LatMin[1]) > 0) {
$intLatMin = $LatMin[0]/$LatMin[1];
$LatSec = explode("/",$exifs["GPSLatitude"][2]);
if (is_numeric($LatSec[1]) > 0)
}
$LatSec = explode('/', $exifs['GPSLatitude'][2]);
if (is_numeric($LatSec[1]) > 0) {
$intLatSec = $LatSec[0]/$LatSec[1];
}
$LongDeg = explode("/",$exifs["GPSLongitude"][0]);
if (is_numeric($LongDeg[1]) > 0)
$LongDeg = explode('/', $exifs['GPSLongitude'][0]);
if (is_numeric($LongDeg[1]) > 0) {
$intLongDeg = $LongDeg[0]/$LongDeg[1];
}
$LongMin = explode("/",$exifs["GPSLongitude"][1]);
if (is_numeric($LongMin[1]) > 0)
$LongMin = explode('/', $exifs['GPSLongitude'][1]);
if (is_numeric($LongMin[1]) > 0) {
$intLongMin = $LongMin[0]/$LongMin[1];
}
$LongSec = explode("/",$exifs["GPSLongitude"][2]);
if (is_numeric($LongSec[1]) > 0)
$LongSec = explode('/', $exifs['GPSLongitude'][2]);
if (is_numeric($LongSec[1]) > 0) {
$intLongSec = $LongSec[0]/$LongSec[1];
}
// round to 5 = approximately 1 meter accuracy
if (is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec))
$latitude = round(dms_to_dec($exifs["GPSLatitudeRef"],
$intLatDeg,$intLatMin,$intLatSec),5);
if (is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec)) {
$latitude = round(dms_to_dec($exifs['GPSLatitudeRef'], $intLatDeg, $intLatMin, $intLatSec), 5);
}
if (is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec))
$longitude = round(dms_to_dec($exifs["GPSLongitudeRef"],
$intLongDeg,$intLongMin,$intLongSec), 5);
if (is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec)) {
$longitude = round(dms_to_dec($exifs['GPSLongitudeRef'], $intLongDeg, $intLongMin, $intLongSec), 5);
}
if ($config['geocoder'] == 'on') {
include_spip('inc/distant');
$url_geocoder = 'http://nominatim.openstreetmap.org/reverse/?format=xml&addressdetails=1&accept-language='.urlencode($GLOBALS['meta']['langue_site']).'&lat='.urlencode($latitude).'&lon='.urlencode($longitude);
$json = recuperer_page($url_geocoder);
$geocoder = json_decode($json,true);
$geocoder = json_decode($json, true);
if (is_array($geocoder)) {
$pays = $geocoder['address']['country'];
$code_pays = $geocoder['address']['country_code'];
$region = $geocoder['address']['state'];
if ($geocoder['address']['city']) {
$ville = $geocoder['address']['city'];
} else if ($geocoder['address']['town']) {
} elseif ($geocoder['address']['town']) {
$ville = $geocoder['address']['town'];
} else if ($geocoder['address']['village']) {
} elseif ($geocoder['address']['village']) {
$ville = $geocoder['address']['village'];
}
$code_postal = $geocoder['address']['postcode'];
$adresse = $geocoder['address']['road'];
}
}
} else if (file_exists($fichier)) {
include_spip("inc/iptc");
} elseif (file_exists($fichier)) {
include_spip('inc/iptc');
$er = new class_IPTC($fichier);
$iptc = $er->fct_lireIPTC();
$codesiptc = $er->h_codesIptc;
$string_recherche = '';
if ($iptc['city']) {
$string_recherche .= $iptc['city'].', ';
}
@ -179,7 +189,7 @@ function gis_post_edition($flux){
include_spip('inc/distant');
$url_geocoder = 'http://nominatim.openstreetmap.org/search/?format=json&addressdetails=1&limit=1&accept-language='.urlencode($GLOBALS['meta']['langue_site']).'&q='.urlencode($string_recherche);
$json = recuperer_page($url_geocoder);
$geocoder = json_decode($json,true);
$geocoder = json_decode($json, true);
if (is_array($geocoder[0])) {
$latitude = $geocoder[0]['lat'];
$longitude = $geocoder[0]['lon'];
@ -189,9 +199,9 @@ function gis_post_edition($flux){
$region = $geocoder[0]['address']['state'];
if ($geocoder[0]['address']['city']) {
$ville = $geocoder[0]['address']['city'];
} else if ($geocoder[0]['address']['town']) {
} elseif ($geocoder[0]['address']['town']) {
$ville = $geocoder[0]['address']['town'];
} else if ($geocoder[0]['address']['village']) {
} elseif ($geocoder[0]['address']['village']) {
$ville = $geocoder[0]['address']['village'];
}
}
@ -212,28 +222,28 @@ function gis_post_edition($flux){
'pays' => $pays,
'code_pays' => $code_pays
);
if (defined('_DIR_PLUGIN_GISGEOM')) {
$geojson = '{"type":"Point","coordinates":['.$longitude.','.$latitude.']}';
set_request('geojson',$geojson);
set_request('geojson', $geojson);
}
include_spip('action/editer_gis');
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'")) {
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'")) {
// Des coordonnées sont déjà définies pour ce document => on les update
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
revisions_gis($id_gis, $c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
} else {
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = insert_gis();
revisions_gis($id_gis,$c);
revisions_gis($id_gis, $c);
lier_gis($id_gis, 'document', $id_document);
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
}
}
} elseif (in_array($document['extension'],array('kml','kmz','gpx'))) {
$recuperer_info = charger_fonction('kml_infos','inc');
} elseif (in_array($document['extension'], array('kml','kmz','gpx'))) {
$recuperer_info = charger_fonction('kml_infos', 'inc');
$infos = $recuperer_info($document['id_document']);
if ($infos) {
if (is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])) {
@ -244,19 +254,19 @@ function gis_post_edition($flux){
'lon' => $longitude,
'zoom' => $config['zoom'] ? $config['zoom'] :'4'
);
include_spip('action/editer_gis');
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'")) {
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'")) {
// Des coordonnées sont déjà définies pour ce document => on les update
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
revisions_gis($id_gis, $c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
} else {
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = insert_gis();
revisions_gis($id_gis,$c);
revisions_gis($id_gis, $c);
lier_gis($id_gis, 'document', $id_document);
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
}
}
unset($infos['longitude']);
@ -268,15 +278,15 @@ function gis_post_edition($flux){
}
}
}
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'supprimer_document')
AND ($id_document = intval($flux['args']['id_objet'])
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'")))
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'supprimer_document')
and ($id_document = intval($flux['args']['id_objet'])
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'")))
) {
include_spip('action/editer_gis');
supprimer_gis($id_gis);
spip_log("GIS EXIFS : Suppression des coordonnées pour le document $id_document => id_gis = $id_gis","gis");
spip_log("GIS EXIFS : Suppression des coordonnées pour le document $id_document => id_gis = $id_gis", 'gis');
}
return $flux;
}
@ -287,18 +297,18 @@ function gis_post_edition($flux){
* @param array $flux
* @return array
*/
function gis_optimiser_base_disparus($flux){
function gis_optimiser_base_disparus($flux) {
include_spip('action/editer_liens');
// optimiser les liens morts :
// entre gis vers des objets effaces
// depuis des gis effaces
$flux['data'] += objet_optimiser_liens(array('gis'=>'*'),'*');
$flux['data'] += objet_optimiser_liens(array('gis' => '*'), '*');
return $flux;
}
function gis_saisies_autonomes($flux){
function gis_saisies_autonomes($flux) {
$flux[] = 'carte';
return $flux;
}
@ -306,13 +316,13 @@ function gis_saisies_autonomes($flux){
/**
* Insertion dans le pipeline xmlrpc_methodes (xmlrpc)
* Ajout de méthodes xml-rpc spécifiques à GIS
*
*
* @param array $flux : un array des methodes déjà présentes, fonctionnant sous la forme :
* -* clé = nom de la méthode;
* -* valeur = le nom de la fonction à appeler;
* @return array $flux : l'array complété avec nos nouvelles méthodes
* @return array $flux : l'array complété avec nos nouvelles méthodes
*/
function gis_xmlrpc_methodes($flux){
function gis_xmlrpc_methodes($flux) {
$flux['spip.liste_gis'] = 'spip_liste_gis';
$flux['spip.lire_gis'] = 'spip_lire_gis';
return $flux;
@ -320,28 +330,28 @@ function gis_xmlrpc_methodes($flux){
/**
* Insertion dans le pipeline xmlrpc_server_class (xmlrpc)
* Ajout de fonctions spécifiques utilisés par le serveur xml-rpc
* Ajout de fonctions spécifiques utilisés par le serveur xml-rpc
*/
function gis_xmlrpc_server_class($flux){
function gis_xmlrpc_server_class($flux) {
include_spip('inc/gis_xmlrpc');
return $flux;
}
/**
* Insertion dans le traitement du formulaire de configuration
*
*
* Purger le répertoire js si on a une carte google dans les layers pour recalculer le js statique
* Peut être à améliorer
*
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
*/
function gis_formulaire_traiter($flux){
if($flux['args']['form'] == 'configurer_gis'){
if (count(array_intersect(array('google_roadmap', 'google_satellite', 'google_terrain'), _request('layers'))) > 0){
function gis_formulaire_traiter($flux) {
if ($flux['args']['form'] == 'configurer_gis') {
if (count(array_intersect(array('google_roadmap', 'google_satellite', 'google_terrain'), _request('layers'))) > 0) {
include_spip('inc/invalideur');
purger_repertoire(_DIR_VAR.'cache-js');
purger_repertoire(_DIR_VAR . 'cache-js');
suivre_invalideur(1);
}
}

@ -1,12 +1,14 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Récupère la liste des points géolocalisés
*
*
* Arguments possibles :
* -* login string
* -* login string
* -* pass string
* -* objet string : le type d'objets liés
* -* id_objet int : l'identifiant numérique de l'objet lié
@ -19,55 +21,57 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
*/
function spip_liste_gis($args) {
global $spip_xmlrpc_serveur;
if(!$spip_xmlrpc_serveur)
if (!$spip_xmlrpc_serveur) {
return false;
}
$objet = 'gis';
$what[] = 'gis.id_gis';
$from = 'spip_gis as gis LEFT JOIN spip_gis_liens as lien ON gis.id_gis=lien.id_gis';
$where = is_array($args['where']) ? $args['where'] : array();
$order = is_array($args['tri']) ? $args['tri'] : array();
if((intval($args['id_objet']) > 0) && $args['objet']){
if ((intval($args['id_objet']) > 0) && $args['objet']) {
$where[] = 'lien.id_objet='.intval($args['id_objet']).' AND lien.objet='.sql_quote($args['objet']);
}
if(in_array('distance',$order) OR in_array('!distance',$order)){
if (in_array('distance', $order) or in_array('!distance', $order)) {
$distance = true;
$lat = $args['lat'];
$lon = $args['lon'];
if(!is_numeric($lon) OR !is_numeric($lat)){
if (!is_numeric($lon) or !is_numeric($lat)) {
$erreur = _T('gis:erreur_xmlrpc_lat_lon');
return new IXR_Error(-32601, attribut_html($erreur));
}else{
} else {
$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";
}
}
/**
* Une recherche
*/
if(is_string($args['recherche']) AND strlen($args['recherche']) > 3){
*/
if (is_string($args['recherche']) and strlen($args['recherche']) > 3) {
$prepare_recherche = charger_fonction('prepare_recherche', 'inc');
list($rech_select, $rech_where) = $prepare_recherche($args['recherche'], $objet.'s', $where);
$what[] = $rech_select;
$from .= ' INNER JOIN spip_resultats AS resultats ON ( resultats.id = gis.id_gis ) ';
$where[] = 'resultats.'.$rech_where;
}
$points_struct = array();
if($points = sql_select($what,$from,$where,'',$order,$args['limite'])){
while($point = sql_fetch($points)){
if ($points = sql_select($what, $from, $where, '', $order, $args['limite'])) {
while ($point = sql_fetch($points)) {
$struct=array();
$args['id_gis'] = $point['id_gis'];
/**
* On utilise la fonction geodiv_lire_media pour éviter de dupliquer trop de code
*/
$struct = spip_lire_gis($args);
if($distance)
if ($distance) {
$struct['distance'] = $point['distance'];
}
$points_struct[] = $struct;
}
}
@ -76,7 +80,7 @@ function spip_liste_gis($args) {
/**
* Récupère le contenu d'un point géolocalisé
*
*
* Arguments possibles :
* -* login
* -* pass
@ -84,49 +88,51 @@ function spip_liste_gis($args) {
* -* lat : si disponible avec lon, on ajoute la distance dans les infos
* -* lon : si disponible avec lat, on ajoute la distance dans les infos
*/
function spip_lire_gis($args){
function spip_lire_gis($args) {
global $spip_xmlrpc_serveur;
if(!$spip_xmlrpc_serveur)
if (!$spip_xmlrpc_serveur) {
return false;
if(!intval($args['id_gis']) > 0){
$erreur = _T('xmlrpc:erreur_identifiant',array('objet'=>'gis'));
}
if (!intval($args['id_gis']) > 0) {
$erreur = _T('xmlrpc:erreur_identifiant', array('objet'=>'gis'));
return new IXR_Error(-32601, attribut_html($erreur));
}
$args_gis = array('objet'=>'gis','id_objet'=>$args['id_gis']);
$args_gis = array('objet' => 'gis','id_objet' => $args['id_gis']);
$res = $spip_xmlrpc_serveur->read($args_gis);
if(!$res)
if (!$res) {
return $spip_xmlrpc_serveur->error;
if(isset($args['lat']) && is_numeric($args['lat']) && isset($args['lon']) && is_numeric($args['lon'])){
}
if (isset($args['lat']) && is_numeric($args['lat']) && isset($args['lon']) && is_numeric($args['lon'])) {
$lat = $args['lat'];
$lon = $args['lon'];
$what[] = 'gis.id_gis';
$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";
$distance = sql_fetsel($what,"spip_gis AS gis","gis.id_gis=".intval($args['id_gis']));
$distance = sql_fetsel($what, 'spip_gis AS gis', 'gis.id_gis='.intval($args['id_gis']));
$res['result'][0]['distance'] = $distance['distance'];
}
if(autoriser('modifier','gis',$args['id_gis'],$GLOBALS['visiteur_session']))
if (autoriser('modifier', 'gis', $args['id_gis'], $GLOBALS['visiteur_session'])) {
$res['result'][0]['modifiable'] = 1;
else
} else {
$res['result'][0]['modifiable'] = 0;
$logo = quete_logo('id_gis','on', $res['result'][0]['id_gis'], '', false);
if(is_array($logo))
}
$logo = quete_logo('id_gis', 'on', $res['result'][0]['id_gis'], '', false);
if (is_array($logo)) {
$res['result'][0]['logo'] = url_absolue($logo[0]);
}
if(defined('_DIR_PLUGIN_GISGEOM')){
if(isset($res['result'][0]['geo'])){
if (defined('_DIR_PLUGIN_GISGEOM')) {
if (isset($res['result'][0]['geo'])) {
include_spip('gisgeom_fonctions');
$res['result'][0]['geo'] = wkt_to_json($wkt);
}
}
$gis_struct = $res['result'][0];
$gis_struct = array_map('texte_backend',$gis_struct);
$gis_struct = array_map('texte_backend', $gis_struct);
return $gis_struct;
}
?>