Compare commits

...

103 Commits
master ... v2

Author SHA1 Message Date
spip.franck@lien-d-amis.net c9dc7573e3 - Je monte la version de saisie (en gardant la même branche pour réduire le risque de casse) pour être certain que si un jour, un commit qui concerne l'un des plug et saisie, que la version de saisies soit une version sûr ! 4 years ago
spip.franck@lien-d-amis.net 81a221a041 zone.spip est maintenant en https, donc j'ajoute le "s" 5 years ago
spip.franck@lien-d-amis.net 5bf6942001 spip.net est maintenant en https, donc, j'ajoute le "s" à http 5 years ago
spip.franck@lien-d-amis.net 21a654df43 En finir une fois pour toutes avec spip-contrib, pour mettre à la place contrib.spip 6 years ago
spip.franck@lien-d-amis.net 4777cc63b2 Contrib est en https, donc j'ajoute le "s", plus divers broutilles 6 years ago
brunobergot@gmail.com 588f3baa40 version 2.4.12 : réparer le picto du marker openlayers 6 years ago
brunobergot@gmail.com 578e0321d3 oups 8 years ago
brunobergot@gmail.com defb7401c0 Versions 3.4.5 et 2.4.11 : fix pour l'image de marker openlayers 8 years ago
ben.spip@gmail.com af0240943f oups un / manquant pour les contrib.spip.net .... maintenant contrib.spip.net/ 8 years ago
ben.spip@gmail.com c9bf793050 spip-contrib.net -> contrib.spip.net pour Francky 8 years ago
spip.franck@lien-d-amis.net bcb86f3be4 Ce n'est plus spip-contrib, mais contrib.spip 8 years ago
brunobergot@gmail.com e3fa5ca577 report tardif de r74581 : éviter une erreur si exif_read_data() n'est pas dispo 9 years ago
denisb@a-working-class-hero-is-something-to.be ec5ac8dfcd gis/trunk, gis/branches : correction du 'prefix' de sélecteur générique pour son 'utilise' (spip.factory) 9 years ago
brunobergot@gmail.com c6759b6324 On necessite cfg car sans ça le plugin n'est pas vraiment fonctionnel (en attendant que quelqu'un prenne le temps de passer le form de config à la mode bonux) 9 years ago
brunobergot@gmail.com b0ea644ac7 version 2.4.8 : maj de la lib qu'on passe sur contrib maintenant + bugfix pour les controles de zoom + pan avec gg maps API (cf https://github.com/mapstraction/mxn/pull/257) 9 years ago
brunobergot@gmail.com 4cc0ad5f1b report de r70214 : mots est un array, pas de trim sur ce paramètre + description du paramètre en question 9 years ago
guy.cesaro@gmail.com de7efa1111 re-introduction du parametre du modele id_a_ouvrir qui permet d'ouvrir l'infobulle d'un marqueur au chargement de la carte (merci b_b pour le support !) 10 years ago
real3t@gmail.com ec3fe522ea Une virgule vous manque et plus rien ne s'affiche. 10 years ago
real3t@gmail.com c1ecc31c40 À l'invitation de b_b, un modèle de document pour gis qui utilise le critère media 10 years ago
real3t@gmail.com b45135af08 Pouvoir passer le critère 'media' (pour les documents) 10 years ago
brunobergot@gmail.com 1cde20bb63 Rafale matinale pour régler le problème avec json_encode pour ceux et celles qui utilisent une vielle version de PHP (il serait temps que les hébergeurs activent PHP 5 par défaut...) 10 years ago
kent1@arscenic.info 0899240fc1 report de r63218 10 years ago
brunobergot@gmail.com 54a0a99392 fix sur la v2 et la v3 de GIS : on utilise la branche 2.11 de openlayers car la 2.12 pète le geocoder (cf https://github.com/mapstraction/mxn/pull/151) 10 years ago
brunobergot@gmail.com 9873ebc825 version 2.4.0 : report de r53606 pour backporter la saisie carte 11 years ago
real3t@gmail.com 799b16d9b2 Encodage CDATA pour Pi r 11 years ago
kent1@arscenic.info a0032d7ab1 les commentaires js "<!-- -->" avait tendance à créer des syntaxe error lors de chargement ajax des cartes, on les remplace par des CDATA 11 years ago
brunobergot@gmail.com 2615c59a4a oups 11 years ago
brunobergot@gmail.com 0a1e100e2e Version 2.3.6 : fix pour éviter un clash avec le vieux lecteur multimédia + report de r53774 sur les cartes de previsu et de config (dans certains cas on passe plusieurs dans ajaxload) 11 years ago
brunobergot@gmail.com 2849f89d77 revert de r59809 + ajout de la prise en charge du paramètre id_evenement pour le modele de la carte 11 years ago
dut.surleweb@gmail.com dd6865b887 Limite l'interrogation à l'évenement present dans le contexte. 11 years ago
brunobergot@gmail.com 1fceddee06 Version 2.3.5 : on trim tous les paramètres (sauf la recherche) qui sont passés au getJSON pour ne pas avoir d'erreur quand le rédacteur insère le modèle dans on article avec une écriture de la forme suivante. 11 years ago
brunobergot@gmail.com 6b1adfb974 appliquer propre à la pseudo balise #DESCRIPTIF_GIS + déplacer toutes les déclarations de traitement typo dans le fichier de déclaration des tables 11 years ago
brunobergot@gmail.com dda2104364 suite de r57402 : ne pas passer un paramètre mots=null quand il n'y en a pas dans l'environnement 11 years ago
brunobergot@gmail.com 032aa95559 passer en paramètre le nom de la nouvelle api utilisée afin de bien prendre en compte le changement de config 11 years ago
brunobergot@gmail.com 7d82056479 version 2.3.3 : permettre de localiser les événements du plugin agenda (dut) 11 years ago
brunobergot@gmail.com 38e4d8b94c version 2.2.3 : contourner un bug avec l'ajout des controles sous openlayers en attendant que mapstraction soit corrigé cf https://github.com/mapstraction/mxn/issues/109 11 years ago
brunobergot@gmail.com cebab91463 version 2.2.2 : maj de la lib Mapstraction + ajout d'un paramètre autofocus_marker au modèle de la carte pour permettre de limiter l'affichage à une seule infobulle 11 years ago
kent1@arscenic.info af39dc6204 Passer des clauses where directement dans les arguments 11 years ago
kent1@arscenic.info b3f8d1dc8f Amélioration de la méthode xmlrpc 11 years ago
brunobergot@gmail.com bd341bd3ea Ajouter tous les champs du point dans le select lors de l'utilisation du critère gis et suffixer les balises de ces champs pour éviter tout problème avec des champs homonymes (ex : avec agenda la balise adresse force une jointure sur la table evenements). 11 years ago
brunobergot@gmail.com 37cfc561ad la branche 2 est stable minantenant 11 years ago
brunobergot@gmail.com 4d46225f14 permettre d'utiliser le super critère mots dans les boucles des fichiers JSON qui alimentent les cartes 11 years ago
brunobergot@gmail.com 86a4d31ca1 ajout de l'option ajaxload au modèle de la carte pour permettre de désactiver l'init de la carte sur ajaxload 11 years ago
brunobergot@gmail.com 407c7b0470 correction de r54193 : le deuxième argument de _request() n'est pas une valeur alternative comme dans #ENV 11 years ago
brunobergot@gmail.com 632de89a21 un s oublié et paf... 11 years ago
brunobergot@gmail.com 2bc90b894b pétouille de commentaire 11 years ago
brunobergot@gmail.com bdaa6979a0 version 2.2.0 : optimiser les squelettes json à l'aide du critère {gis} qui permet maintenant de forcer une jointure correcte sur la table gis depuis les boucles des autres objets 11 years ago
brunobergot@gmail.com 403caf6ae3 éviter un problème avec les apostrophes sur le label des points (l'étoile nous permet de ne pas générer d'entité html) 11 years ago
brunobergot@gmail.com 7efdf8c470 maj de version suite à r54980 11 years ago
brunobergot@gmail.com 59e2bc952f éviter une erreur de casting dans revisions_gis() sur certaines version de PHP (reste à voir s'il est nécessaire que cette fonction renvoie quelque chose quand ça foire) 11 years ago
brunobergot@gmail.com d6553d56e7 Maj de version : on se branche sur la nouvelle version de notre lib Mapstraction perso qui du coup permet de proposer le geodocer pour openlayers 11 years ago
kent1@arscenic.info dc1b3ef2b7 On va suivre le serveur xmlrpc ... qui permet de ne pas stipuler ces fonctions partout 11 years ago
kent1@arscenic.info 3850c68bb2 Un fichier en langue anglaise ... correct 11 years ago
kent1@arscenic.info c4119ab7d3 des class="spip_out" sur les liens externes 11 years ago
kent1@arscenic.info 39224d1438 Une class spip_out pour le lien vers la doc ... et le lien dans la version anglaise... 11 years ago
kent1@arscenic.info 7420eb6333 un e en trop 11 years ago
real3t@gmail.com a8e13bd163 Tant que mxn ne gérera pas correctement la suppression du HTML des labels sur les points, retour en arrière (stockage de la modif dans SoyezCréateurs [54405]) 11 years ago
real3t@gmail.com c03a3dc396 Faire un lien depuis le titre vers l'objet concerné. 11 years ago
real3t@gmail.com 5828027109 Pour un site, le TITRE, c'est NOM_SITE 11 years ago
kent1@arscenic.info 2496b2970c Eviter des problèmes sur open_basedir si actif... 11 years ago
real3t@gmail.com 94b8a10312 Pouvoir afficher pour une rubrique, et les points des articles, et ceux des sites. 11 years ago
real3t@gmail.com 3684a43f38 Pouvoir lister tous les points des sites d'une rubrique 11 years ago
kent1@arscenic.info a057e225c9 Le premier plugin à utiliser les pipelines d'un plugin qui n'existe pas encore ... GIS en avance sur son temps 11 years ago
kent1@arscenic.info e4daea3313 phpdoc 11 years ago
brunobergot@gmail.com a177ebf5e9 un pack de controles persos pour openlayers sous licence GPL : http://support.mapbox.com/kb/mapping-101/openlayers-themes 11 years ago
kent1@arscenic.info 3e7254c59a Du coup gis peut porter son crudifix 11 years ago
kent1@arscenic.info d1b1082f3c Encore un oups 11 years ago
kent1@arscenic.info aafbd1c31f si on passe objet/id_objet dans $c, on l'utilise pour faire la liaison avec un autre objet 11 years ago
kent1@arscenic.info 67034afe20 Utilisation des nouvelles autorisations 11 years ago
kent1@arscenic.info 1749ac81a8 comme cela c'est suffisant 11 years ago
kent1@arscenic.info 90bd8fe429 On utilise l'autorisation qui va bien et correctement 11 years ago
kent1@arscenic.info 7ac73d45af ah ben super 11 years ago
kent1@arscenic.info b14e57911d des autorisations de base pour GIS certainement à améliorer ... 11 years ago
lesage.sylvain@laposte.net 821357f029 Report de r53804 11 years ago
lesage.sylvain@laposte.net cf641862c6 il manquait yandex dans la liste des API avec clé obligatoire 11 years ago
lesage.sylvain@laposte.net bd67a019ee report de r53774 11 years ago
kent1@arscenic.info 24a134f6fc if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement 11 years ago
pierrekuhn82@gmail.com ac6e74b815 On ferme les versions spip, entités numérique. 11 years ago
brunobergot@gmail.com ab86e6caed descriptif et slogan avec entités chépakoi pour tonton 11 years ago
brunobergot@gmail.com fe3567149d bien récupérer l'id de la carte lors de son utilisation depuis le texte d'un élément SPIP 11 years ago
brunobergot@gmail.com 0c5773a125 maj de l'url de la lib 11 years ago
brunobergot@gmail.com b6351f493d On se branche sur notre propre version de la lib Mapstraction pour ne pas avoir à attendre leur release pour chaque modif mineure. La lib est générée sur le serveur de mediaspip à partir de la branche suivante : https://github.com/brunob/mxn/tree/gis 11 years ago
brunobergot@gmail.com 48142bdae1 - centrer les icones persos au milieu en bas avec icon_anchor qui n'est pas encore dispo dans addJSON de mapstraction (ça va venir) 11 years ago
brunobergot@gmail.com a62a523279 on vire l'API yahoo dont le service ferme le 13/11/2011 + masquer temporairement microsoft bing de la liste des APIs le temps qu'on répare son intégration 11 years ago
webmaster@art-logic.info bc13c4f490 pas de bio sur Gis 11 years ago
webmaster@art-logic.info 935f21ab85 Ajouts dans la branche V2 11 years ago
webmaster@art-logic.info 5095da5d10 On ajoute des bios et des descriptifs alternatifs 11 years ago
webmaster@art-logic.info a7e76d025c Un descriptif alternatif si des fois il n'y en a pas dans le Gis. 11 years ago
brunobergot@gmail.com 37eb4d601a oubli dans r49045 : il faut spécifier l'attribut icon_anchor des logos persos des points 11 years ago
kent1@arscenic.info 0684bb0a66 On joue avec des paramètres mi-anglais / mi-français ... on accepte deux paramètres pour chaque option dont le nom était dans une langue et pas dans l'autre 11 years ago
kent1@arscenic.info ff007f7599 pouvoir passer hauteur et largeur aux modèles (équivalents à width et height) 11 years ago
brunobergot@gmail.com dc88c19f2b pas de bordures les logos des points 11 years ago
kent1@arscenic.info 3049e33cdd Si pas de titre ou si le titre est égal au nom de fichier ou contient kml ou kmz : 11 years ago
kent1@arscenic.info b0f3496afa Inversion latitude et longitude 11 years ago
kent1@arscenic.info c5df1cdf7f On limite le calcul de moyenne de latitude et longitude aux 500 premiers points 11 years ago
kent1@arscenic.info f8f3ea8666 Si on n'a pas de latitude ni longitude directement dans Document, on fait une moyenne des latitude et longitude des Placemark 11 years ago
brunobergot@gmail.com 126ee08dda r51159 devait faire taire les logs :p 11 years ago
kent1@arscenic.info 2a5c1bc051 éviter une erreur dans les logs pour un pipeline qu'il ne trouvait pas... 11 years ago
kent1@arscenic.info c40901460b On backport les débeloppement qui étaient prévus pour cette branche au départ 11 years ago
brunobergot@gmail.com a71a505c04 un squelette JSON pour afficher les points liés aux rubriques (fourberie inside pour gérer un id_parent conditionnel) + la carte passe aussi l'id_parent présent dans l'env + on vire un vieux truc obsolète 11 years ago
brunobergot@gmail.com 886f346f74 JSON valide si on a plusieurs points attachés à un mots ou un auteur + maj todo (on devrait virer ce fichier non ?) 11 years ago
rastapopoulos@spip.org 192028b539 On change le statut pour le ZIP actuel de la version 2, comme le proposait tonton. Je mets donc en test. 11 years ago
rastapopoulos@spip.org 62a62c0385 On copie le trunk actuel dans une branche 2 qui serait pour SPIP 2.1, et le trunk serait pour SPIP 3. Mais du coup qu'en est-il des numéros de version du plugin ? Ça reste les mêmes dans les deux branches ? U peu chiant tout ça quand même. 11 years ago
  1. 24
      .gitattributes
  2. 1
      TODO.txt
  3. 96
      action/editer_gis.php
  4. 2
      action/editer_lien_gis.php
  5. 68
      action/kml_infos.php
  6. 2
      action/supprimer_gis.php
  7. 5
      base/gis.php
  8. 2
      base/gis_upgrade.php
  9. 64
      crud/gis.php
  10. 39
      formulaires/config_gis.html
  11. 10
      formulaires/config_gis_fonctions.php
  12. 133
      formulaires/editer_gis.html
  13. 2
      formulaires/editer_gis.php
  14. 2
      formulaires/rechercher_gis.php
  15. 2
      genie/gis_nettoyer_base.php
  16. 92
      gis_autoriser.php
  17. 132
      gis_fonctions.php
  18. 6
      gis_options.php
  19. 86
      gis_pipelines.php
  20. BIN
      images/openlayers/dark/blank.gif
  21. BIN
      images/openlayers/dark/cloud-popup-relative.png
  22. BIN
      images/openlayers/dark/east-mini.png
  23. BIN
      images/openlayers/dark/layer-switcher-maximize.png
  24. BIN
      images/openlayers/dark/layer-switcher-minimize.png
  25. BIN
      images/openlayers/dark/north-mini.png
  26. BIN
      images/openlayers/dark/slider.png
  27. BIN
      images/openlayers/dark/south-mini.png
  28. BIN
      images/openlayers/dark/west-mini.png
  29. BIN
      images/openlayers/dark/zoom-minus-mini.png
  30. BIN
      images/openlayers/dark/zoom-panel.png
  31. BIN
      images/openlayers/dark/zoom-plus-mini.png
  32. BIN
      images/openlayers/dark/zoom-world-mini.png
  33. BIN
      images/openlayers/dark/zoombar.png
  34. 125
      inc/gis_xmlrpc.php
  35. 3
      inc/iptc.php
  36. 138
      inc/kml_infos.php
  37. 29
      javascript/gis.js
  38. 10
      json/gis.html
  39. 15
      json/gis_articles.html
  40. 2
      json/gis_articles_plus_sites.html
  41. 15
      json/gis_auteurs.html
  42. 20
      json/gis_documents.html
  43. 20
      json/gis_evenements.html
  44. 15
      json/gis_mots.html
  45. 20
      json/gis_rubriques.html
  46. 20
      json/gis_sites.html
  47. 47
      lang/gis_en.php
  48. 18
      lang/gis_fr.php
  49. 156
      modeles/carte_gis.html
  50. 9
      modeles/carte_gis_preview.html
  51. 37
      plugin.xml
  52. 2
      prive/exec/gis_editer_fonctions.php
  53. 2
      prive/exec/gis_fonctions.php
  54. 2
      prive/inclure/gis_objet_formulaires.html
  55. 196
      saisies/carte.html

24
.gitattributes vendored

@ -2,9 +2,11 @@
/TODO.txt -text
action/editer_gis.php -text
action/editer_lien_gis.php -text
action/kml_infos.php -text
action/supprimer_gis.php -text
base/gis.php -text
base/gis_upgrade.php -text
crud/gis.php -text
fonds/cfg_gis.html -text
formulaires/config_gis.html -text
formulaires/config_gis_fonctions.php -text
@ -23,12 +25,33 @@ images/gis-16.png -text
images/gis-24.png -text
images/gis.png -text
images/marker.png -text
images/openlayers/dark/blank.gif -text
images/openlayers/dark/cloud-popup-relative.png -text
images/openlayers/dark/east-mini.png -text
images/openlayers/dark/layer-switcher-maximize.png -text
images/openlayers/dark/layer-switcher-minimize.png -text
images/openlayers/dark/north-mini.png -text
images/openlayers/dark/slider.png -text
images/openlayers/dark/south-mini.png -text
images/openlayers/dark/west-mini.png -text
images/openlayers/dark/zoom-minus-mini.png -text
images/openlayers/dark/zoom-panel.png -text
images/openlayers/dark/zoom-plus-mini.png -text
images/openlayers/dark/zoom-world-mini.png -text
images/openlayers/dark/zoombar.png -text
inc/gis_xmlrpc.php -text
inc/iptc.php -text
inc/kml_infos.php -text
javascript/gis.js -text
json/gis.html -text
json/gis_articles.html -text
json/gis_articles_plus_sites.html -text
json/gis_auteurs.html -text
json/gis_documents.html -text
json/gis_evenements.html -text
json/gis_mots.html -text
json/gis_rubriques.html -text
json/gis_sites.html -text
lang/gis.xml -text
lang/gis_en.php -text
lang/gis_fr.php -text
@ -48,4 +71,5 @@ prive/liste/objets_gis.html -text
prive/navigation/gis_editer.html -text
prive/navigation/gis_tous.html -text
prive/style_prive_plugin_gis.html -text
saisies/carte.html -text
tests/gis_connect_sql.php -text

1
TODO.txt

@ -1,4 +1,3 @@
Regarder la compression JS qui ne fonctionne pas
Avoir un crayon de modification de point depuis le public

96
action/editer_gis.php

@ -2,6 +2,8 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/autoriser');
function action_editer_gis_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
@ -14,23 +16,48 @@ function action_editer_gis_dist() {
return array($id_gis,$err);
}
/**
* Fonction d'insertion d'un gis vide
*
* @return int/false $id_gis : l'identifiant numérique du point ou false en cas de non création
*/
function insert_gis() {
$champs = array();
// Envoyer aux plugins
$champs = pipeline('pre_insertion', array(
'args' => array(
'table' => 'spip_gis',
),
'data' => $champs
));
$id_gis = sql_insertq("spip_gis", $champs);
return $id_gis;
if(autoriser('creer','gis')){
$champs = array();
// Envoyer aux plugins
$champs = pipeline('pre_insertion', array(
'args' => array(
'table' => 'spip_gis',
),
'data' => $champs
));
$id_gis = sql_insertq("spip_gis", $champs);
pipeline('post_insertion',
array(
'args' => array(
'table' => 'spip_gis',
'id_objet' => $id_gis
),
'data' => $champs
)
);
return $id_gis;
}else{
return false;
}
}
// Enregistrer certaines modifications d'un gis
/**
* Enregistrer certaines modifications d'un gis
*
* @param int $id_gis : l'identifiant numérique du point
* @param array $c : un array des valeurs à mettre en base (par défaut false, on récupère les valeurs passées en dans le POST)
*/
function revisions_gis($id_gis, $c=false) {
$err = '';
// recuperer les champs dans POST s'ils ne sont pas transmis
if ($c === false) {
$c = array();
@ -50,8 +77,13 @@ function revisions_gis($id_gis, $c=false) {
),
$c);
if(intval(_request('id_objet')) && _request('objet'))
lier_gis($id_gis, _request('objet'), _request('id_objet'));
if ((intval(_request('id_objet')) && _request('objet')) OR (intval($c['id_objet']) && $c['objet'])) {
$objet = _request('objet') ? _request('objet') : $c['objet'];
$id_objet = _request('id_objet') ? _request('id_objet') : $c['id_objet'];
lier_gis($id_gis, $objet, $id_objet);
}
return $err;
}
/**
@ -60,18 +92,25 @@ function revisions_gis($id_gis, $c=false) {
* @param int $id_gis identifiant numérique du point
* @param string $objet Le type de l'objet à lier
* @param int $id_objet L'identifiant numérique de l'objet lié
*
* @return bool : true si la liaison s'est bien passée, false à l'inverse
*/
function lier_gis($id_gis, $objet, $id_objet){
//$objet = objet_type($objet);
if ($id_objet AND $id_gis
AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
AND !sql_getfetsel("id_gis", "spip_gis_liens", "id_gis=$id_gis AND id_objet=$id_objet AND objet=".sql_quote($objet))
AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
) {
sql_insertq('spip_gis_liens',
array('id_gis' => $id_gis,
'id_objet' => $id_objet,
'objet' => $objet));
include_spip('inc/invalideur');
suivre_invalideur("id='id_gis/$id_gis'");
return true;
}
return false;
}
/**
@ -80,27 +119,40 @@ function lier_gis($id_gis, $objet, $id_objet){
* @param int $id_gis identifiant numérique du point
* @param string $objet Le type de l'objet à lier
* @param int $id_objet L'identifiant numérique de l'objet lié
*
* @return bool : true si la suppression de la liaison s'est bien passée, false à l'inverse
*/
function delier_gis($id_gis, $objet, $id_objet){
//$objet = objet_type($objet);
if ($id_objet AND $id_gis
AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
AND autoriser('delier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
) {
sql_delete('spip_gis_liens', "id_gis=$id_gis AND id_objet=$id_objet AND objet=". sql_quote($objet));
include_spip('inc/invalideur');
suivre_invalideur("id='id_gis/$id_gis'");
return true;
}
include_spip('inc/invalideur');
suivre_invalideur("id='id_gis/$id_gis'");
return false;
}
/**
* Supprimer définitivement un point géolocalisé
*
* @param int $id_gis identifiant numérique du point
* @return 0/false 0 si réussite, false dans le cas ou le point n'existe pas
*/
function supprimer_gis($id_gis){
if (intval($id_gis)){
$valide = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id_gis));
if($valide && autoriser('supprimer','gis',$valide)){
sql_delete("spip_gis_liens", "id_gis=".intval($id_gis));
sql_delete("spip_gis", "id_gis=".intval($id_gis));
$id_gis = 0;
include_spip('inc/invalideur');
suivre_invalideur("id='id_gis/$id_gis'");
return $id_gis;
}
$id_gis = 0;
include_spip('inc/invalideur');
suivre_invalideur("id='id_gis/$id_gis'");
return $id_gis;
return false;
}
?>

2
action/editer_lien_gis.php

@ -9,7 +9,7 @@ function action_editer_lien_gis_dist(){
list($action,$id_gis, $objet, $id_objet) = explode('/',$arg);
include_spip('inc/autoriser');
if (intval($id_gis) AND autoriser('modifier','gis',$id_gis,null,null)){
if (intval($id_gis) AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))){
include_spip('action/editer_gis');
if ($action == 'lier')
lier_gis($id_gis, $objet, $id_objet);

68
action/kml_infos.php

@ -0,0 +1,68 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/charsets'); # pour le nom de fichier
include_spip('inc/actions');
function action_kml_infos_dist(){
global $redirect;
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(-?)(\d+)\W(\w+)\W?(\d*)\W?(\d*)$,", $arg, $r)){
spip_log("action_kml_infos_dist incompris: " . $arg);
$redirect = urldecode(_request('redirect'));
return;
}
else{
action_kml_infos_post($r);
}
}
function action_kml_infos_post($r){
list(, $sign, $id_objet, $objet, $id_document, $suite) = $r;
if(intval($id_document)){
$recuperer_info = charger_fonction('kml_infos','inc');
$infos = $recuperer_info($id_document);
if($infos){
include_spip('inc/documents');
$fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document));
if(is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])){
$c = array(
'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier),
'lat'=> $latitude,
'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'")){
// 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");
}
else{
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = insert_gis();
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");
}
}
unset($infos['longitude']);
unset($infos['latitude']);
if(count($infos) > 0){
include_spip('inc/modifier');
revision_document($id_document, $infos);
}
}
}
$redirect = urldecode(_request('redirect'));
return $redirect;
}
?>

2
action/supprimer_gis.php

@ -10,7 +10,7 @@ function action_supprimer_gis_dist(){
list($id_gis) = preg_split(',[^0-9],',$arg);
include_spip('inc/autoriser');
if (intval($id_gis) AND autoriser('supprimer','gis',$id_gis,null,null)){
if (intval($id_gis) AND autoriser('supprimer','gis',$id_gis)){
include_spip("action/editer_gis");
supprimer_gis($id_gis);
}

5
base/gis.php

@ -20,6 +20,11 @@ function gis_declarer_tables_interfaces($interface){
// Titre pour url
$interface['table_titre']['gis'] = "titre, '' AS lang";
// Traitements typo et raccourcis
$interface['table_des_traitements']['DESCRIPTIF_GIS'][]= _TRAITEMENT_RACCOURCIS;
$interface['table_des_traitements']['VILLE'][]= 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['PAYS'][]= 'typo(extraire_multi(%s))';
return $interface;
}

2
base/gis_upgrade.php

@ -1,5 +1,7 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
/**

64
crud/gis.php

@ -0,0 +1,64 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('action/editer_gis');
/**
* Interface C(r)UD pour GIS
*/
/**
* Create :
* Crée un point géolocalisé
*
* @param $dummy
* @param array $set : Le contenu des champs à mettre en base
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé
*/
function crud_gis_create_dist($dummy,$set=null){
if ($id = insert_gis()){
list($e,$ok) = revisions_gis($id,$set);
}
else{
$e = _L('create error');
}
return array('success'=>$e?false:true,'message'=>$e?$e:$ok,'result'=>array('id'=>$id));
}
/**
* Update :
* Met à jour un point géolocalisé
*
* @param $dummy
* @param array $set : Le contenu des champs à mettre en base
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé
*/
function crud_gis_update_dist($id,$set=null){
$id_gis = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id));
if(!$id_gis){
$e = _T('gis:erreur_gis_inconnu',array('id'=>$id));
}else if(autoriser('modifier','gis',$id)){
list($e,$ok) = revisions_gis($id,$set);
}else{
$e = _L('update error');
}
return array('success'=>$e?false:true,'message'=>$e?$e:$ok,'result'=>array('id'=>$id));
}
/**
* Delete :
* Supprime un point géolocalisé
*
* @param $dummy
* @param int $id : L'identifiant numérique du point à supprimer
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id supprimé
*/
function crud_gis_delete_dist($id){
if(autoriser('supprimer','gis',$id)){
list($e,$ok) = supprimer_gis($id);
}
return array('success'=>$e?false:true,'message'=>$e?$e:$ok,'result'=>array('id'=>$id));
}
?>

39
formulaires/config_gis.html

@ -27,10 +27,8 @@
cloudmade,<:gis:cfg_lbl_api_cloudmade:>,
google,<:gis:cfg_lbl_api_google:>,
googlev3,<:gis:cfg_lbl_api_googlev3:>,
microsoft,<:gis:cfg_lbl_api_microsoft:>,
openlayers,<:gis:cfg_lbl_api_openlayers:>,
ovi,<:gis:cfg_lbl_api_ovi:>,
yahoo,<:gis:cfg_lbl_api_yahoo:>,
yandex,<:gis:cfg_lbl_api_yandex:>})]})]
[(#VAL{_GIS_APIS}|defined|oui)
@ -53,6 +51,32 @@
defaut=#GET{api_defaut},valeur_forcee=#GET{api_forcee},readonly=#GET{api_readonly},disable=#GET{api_disable},explication=#GET{api_explications},
datas=#GET{apis}})]
[(#SET{maptypes,[(#ARRAY{
ROAD,<:gis:cfg_lbl_maptype_carte:>,
SATELLITE,<:gis:cfg_lbl_maptype_satellite:>,
HYBRID,<:gis:cfg_lbl_maptype_hybride:>,
PHYSICAL,<:gis:cfg_lbl_maptype_relief:>})]})]
[(#VAL{_GIS_MAPTYPES}|defined|oui)
[(#EVAL{_GIS_MAPTYPES}|unserialize|is_array|oui)#SET{apis,#EVAL{_GIS_MAPTYPES}|unserialize}]
]
[(#SET{maptype_defaut,carte})]
[(#VAL{_GIS_MAPTYPES_DEFAUT}|defined|oui)
[(#SET{maptype_defaut,[(#EVAL{_GIS_MAPTYPES_DEFAUT})]})]
]
[(#VAL{_GIS_MAPTYPES_FORCE}|defined|oui)
[(#SET{maptype_readonly,readonly})]
[(#SET{maptype_disable,disabled})]
[(#SET{maptype_force,[(#EVAL{_GIS_MAPTYPES_FORCE})]})]
[(#SET{maptype_explications,<:gis:explication_maptype_force:>})]
]
[(#SAISIE{selection,maptype,
label=<:gis:cfg_lbl_maptype:>,
cacher_option_intro=oui,
defaut=#GET{maptype_defaut},valeur_forcee=#GET{maptype_force},readonly=#GET{maptype_readonly},disable=#GET{maptype_disable},explication=#GET{maptype_explications},
datas=#GET{maptypes}})]
[(#SAISIE{oui_non,geocoder,
defaut='',
label=<:gis:cfg_lbl_geocoder:>,
@ -106,8 +130,17 @@
var init_config = function() {
var map;
var map_container = 'map_config';
// ne pas doublonner la carte quand on passe plusieurs fois dans ajaxload, pas propre mais bon...
$('#map_config').empty();
map = new mxn.Mapstraction(map_container,'[(#REM|gis_api_utilisee)]');
map.setCenterAndZoom(new mxn.LatLonPoint(#ENV{lat,0},#ENV{lon,0}),#ENV{zoom,0});
// Pour l'API Openlayers, la methode n'existe pas
try {
map.setMapType([mxn.Mapstraction.(#REM|gis_maptype_utilise)]);
}
catch(err) {
$(".editer_maptype").hide();
}
map.addControls({
pan: true,
@ -138,7 +171,7 @@
}
var geocoders = ['cartociudad','google','googlev3','yandex'];
var geocoders = ['cartociudad','google','googlev3','yandex','openlayers'];
var show_geocoder = function(){
if(($.inArray($('#champ_api').val(),geocoders) >= 0) && $('li.editer_geocoder').is(':hidden')){

10
formulaires/config_gis_fonctions.php

@ -4,13 +4,15 @@
* Utilisé notamment pour l'insertion dans les pipelines de CFG
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Fonction de verification du formulaire de configuration CFG
* - On vérifie si dans les cas de cloudmade ou de google (v2), une clé a
* été fournie
* - On vérifie si dans les cas de cloudmade, de google (v2) ou de
* yandex, une clé a été fournie
*/
function cfg_config_gis_verifier(&$cfg){
if(in_array($cfg->val['api'],array('cloudmade','google'))){
if(in_array($cfg->val['api'],array('cloudmade','google','yandex'))){
$obligatoire = "api_key_".$cfg->val['api'];
if(!$cfg->val[$obligatoire]){
$erreur[$obligatoire] = _T('info_obligatoire');
@ -32,7 +34,7 @@ function cfg_config_gis_post_traiter(&$cfg){
/**
* On redirige le formulaire pour rafraichir la page
*/
$cfg->messages['redirect'] = self();
$cfg->messages['redirect'] = parametre_url(self(),'api',$cfg->val['api']);
}
}

133
formulaires/editer_gis.html

@ -1,130 +1,4 @@
#CACHE{0}
<div id="map_[(#ENV{objet})]_[(#ENV{id_objet})]" name="formMap" class="formMap" style="width: 100%; height: 350px"></div>
<script type="text/javascript">
<!--
var form_map;
var annuler_geocoder = 0;
[(#ENV{recherhce}|!={non}|oui|et{#CONFIG{gis/geocoder}|oui})
[(#SET{geocoder,oui})]
var geocoder;]
(function($){
var maj_inputs = function(map,data,action) {
[(#GET{geocoder}|oui)
if (action != 'geocoding') {
var f = geocoder.geocode(data);
}]
var zoom = map.getZoom();
$("#champ_zoom").val(zoom);
if(action == 'click'){
$("#champ_lat").val(data.lat);
$("#champ_lon").val(data.lon);
annuler_geocoder = 1;
form_map.setCenter(data);
marker = new mxn.Marker(data);
}
else if(annuler_geocoder != 1){
if(data.point == 'undefined'){
$("#champ_lat").val(data.lat);
$("#champ_lon").val(data.lon);
form_map.setCenter(data);
marker = new mxn.Marker(data);
}else{
$("#champ_lat").val(data.point.lat);
$("#champ_lon").val(data.point.lon);
form_map.setCenter(data.point);
marker = new mxn.Marker(data.point);
}
}
form_map.removeAllMarkers();
form_map.addMarker(marker);
}
[(#GET{geocoder}|oui)
function geocode(query) {
$('#champ_adresse').val(query.street);
$('#champ_code_postal').val(query.postcode);
$('#champ_ville').val(query.locality);
$('#champ_region').val(query.region);
$('#champ_pays').val(query.country);
maj_inputs(form_map,query,'geocoding');
}]
var init_map = function() {
// creer la carte
var map_container = 'map_[(#ENV{objet})]_[(#ENV{id_objet})]';
form_map = new mxn.Mapstraction(map_container,'[(#REM|gis_api_utilisee)]');
form_map.setCenterAndZoom(new mxn.LatLonPoint(#ENV{lat,#CONFIG{gis/lat,0}},#ENV{lon,#CONFIG{gis/lon,0}}),#ENV{zoom,#CONFIG{gis/zoom,0}});
form_map.addControls({
pan: true,
zoom: '#CONFIG{gis/control,large}',
map_type: true
});
[(#GET{geocoder}|oui)
// geocoder
geocoder = new mxn.Geocoder('[(#REM|gis_api_utilisee)]',geocode);]
[(#ENV{lat}|oui)
var data = {
"type": "FeatureCollection",
"features": [(#VAL{91}|chr)]
{"type": "Feature",
"geometry": {"type": "Point", "coordinates": [(#VAL{91}|chr)]#LON, #LAT[(#VAL{93}|chr)]},
"id":"#ID_GIS",
"title":[(#TITRE|supprimer_numero|json_encode)],
"description":[(#DESCRIPTIF|json_encode)][,(#LOGO_GIS|oui)
[(#SET{logo_doc,#LOGO_GIS|image_passe_partout{28,28}|image_recadre{28,28}|image_recadre{32,32,center}|image_aplatir{jpg,ffffff}})]
#SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur}
#SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur}
["icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)],
"icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)]]
}[(#VAL{93}|chr)]
}
form_map.addJSON(data);]
// mettre a jour les coordonnees quand on clique la carte
form_map.click.addHandler(function(name, source, args) {
annuler_geocoder = 0;
var pos = args.location;
maj_inputs(form_map,pos,'click');
});
// mettre à jour le zoom quand on le modifie
form_map.changeZoom.addHandler(function(name, source, args) {
var zoom = source.getZoom();
$("#champ_zoom").val(zoom);
});
[(#GET{geocoder}|oui)
// geocoder si clic...
$('a#rechercher').css("cursor","pointer").click(function(){
var address = {};
address.address = $("#champ_geocoder").attr("value");
annuler_geocoder = 0;
geocoder.geocode(address);
});
// ne pas soumettre le formulaire si on presse Entree depuis le champ de recherche
$('#champ_geocoder').keypress(function(e){
if (e.which == 13) {
$('a#rechercher').trigger("click");
return false;
}
});]
[(#ENV{id_gis}|non|ou{#ENV{id_gis}|=={oui}}|et{#CONFIG{gis/geolocaliser_user_html5}|=={on}}|oui)
gis_get_navigator_location(form_map,#ENV{zoom,#CONFIG{gis/zoom,0}});]
};
$(function(){
init_map();
[(#ENV{ajaxload}|!={non}|oui)onAjaxLoad(init_map);]
});
})(jQuery);
-->
</script>
<div class="formulaire_spip formulaire_editer formulaire_editer_gis">
<!-- br class='spacer' / -->
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
@ -137,12 +11,7 @@ var geocoder;]
<ul>
[(#SAISIE{hidden,objet})]
[(#SAISIE{hidden,id_objet})]
[(#GET{geocoder}|oui)
<li class="rechercher_adresse">
<label for="champ_geocoder"><:gis:label_rechercher_address:></label>
<input type="text" class="text" name="champ_geocoder" id="champ_geocoder" value="" />
<a id="rechercher"><:info_rechercher:></a>
</li>]
[(#SAISIE{carte,editer_gis_#ENV{id_gis},env,li_class=haut})]
[(#SAISIE{input,lat,
label=<:gis:lat:>,
defaut=#CONFIG{gis/lat,0},

2
formulaires/editer_gis.php

@ -3,6 +3,8 @@
* Formulaire de création et d'édition d'un point géolocalisé
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/actions');
include_spip('inc/editer');

2
formulaires/rechercher_gis.php

@ -3,6 +3,8 @@
* Formulaire de création et d'édition d'un point géolocalisé
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/actions');
include_spip('inc/editer');

2
genie/gis_nettoyer_base.php

@ -1,5 +1,7 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function genie_gis_nettoyer_base_dist($t){
$liens = array();

92
gis_autoriser.php

@ -1,9 +1,44 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
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
* @param array $qui Les informations de session de l'auteur
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_iconifier_dist($faire,$quoi){
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
* @param array $qui Les informations de session de l'auteur
* @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')));
}
/**
* 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
@ -12,8 +47,61 @@ function gis_autoriser(){};
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_iconifier_dist($faire,$quoi,$id,$qui,$opts){
return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
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
* @param array $qui Les informations de session de l'auteur
* @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);
}
return false;
}
/**
* Autorisation a délier un point d'un objet
* Un auteur peut dé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
* @param array $qui Les informations de session de l'auteur
* @param array $opt Des options
* @return boolean true/false
*/
function autoriser_gis_delier_dist($faire,$quoi,$id,$qui,$opts){
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
* @param array $qui Les informations de session de l'auteur
* @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)){
return false;
}
}
return autoriser('modifier','gis',$id,$qui,$opts);
}
?>

132
gis_fonctions.php

@ -1,5 +1,9 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/json');
/**
* Filtre dec_to_dms, http://www.statemaster.com/encyclopedia/Geographic-coordinate-conversion
*
@ -37,7 +41,7 @@ function dms_to_dec($ref,$deg,$min,$sec) {
/**
* 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
* sinon voir ici : https://zone.spip.org/trac/spip-zone/browser/_plugins_/forms/geoforms/inc/gPoint.php
*
* @param int $from id_gis du point de référence
* @param int $ti id_gis du point distant
@ -65,7 +69,8 @@ function distance($from,$to,$miles=false) {
}
/**
* Critere {gis distance<XX} pour filtrer une liste de points par rapport à la distance du point de l'env
* Critère {gis} sur les boucles autres que GIS pour forcer la jointure sur la table GIS
* Critère {gis distance<XX} sur une boucle GIS pour filtrer une liste de points par rapport à la distance du point de l'env
*
* @param unknown_type $idb
* @param unknown_type $boucles
@ -74,37 +79,66 @@ function distance($from,$to,$miles=false) {
function critere_gis_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$id = $boucle->primary;
$id_table = $boucle->id_table; // articles
$primary = $boucle->primary; // id_article
$objet = objet_type($id_table); // article
// exclure l'élément en cours des résultats
$id_gis = calculer_argument_precedent($idb,$id, $boucles);
$boucle->where[]= array("'!='", "'$boucle->id_table." . "$id'", $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)){
$type=$r[1];
$op=$r[2];
$op_val=$r[3];
if ($id_table == 'gis') {
// exclure l'élément en cours des résultats
$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)){
$type=$r[1];
$op=$r[2];
$op_val=$r[3];
}
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);
// 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 {
// ajouter tous les champs du point au select
// et les suffixer pour lever toute ambiguite avec des champs homonymes
$boucle->select[]= 'gis.titre AS titre_gis';
$boucle->select[]= 'gis.descriptif AS descriptif_gis';
$boucle->select[]= 'gis.adresse AS adresse_gis';
$boucle->select[]= 'gis.pays AS pays_gis';
$boucle->select[]= 'gis.code_pays AS code_pays_gis';
$boucle->select[]= 'gis.region AS region_gis';
$boucle->select[]= 'gis.ville AS ville_gis';
$boucle->select[]= 'gis.code_postal AS code_postal_gis';
// jointure sur spip_gis_liens/spip_gis
// cf plugin notation
// $boucle->join["surnom (as) table de liaison"] = array("surnom de la table a lier", "cle primaire de la table de liaison", "identifiant a lier", "type d'objet de l'identifiant");
$boucle->from['gis_liens'] = 'spip_gis_liens';
$boucle->join['gis_liens']= array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
$boucle->from['gis'] = 'spip_gis';
$boucle->join['gis']= array("'gis_liens'","'id_gis'");
// bien renvoyer tous les points qui son attachés à l'objet
$boucle->group[] = 'gis_liens.id_gis';
// ajouter gis aux jointures et spécifier les jointures explicites pour pouvoir utiliser les balises de la table de jointure
// 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';
$boucle->jointures_explicites = 'gis_liens gis';
}
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);
// 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;
}
@ -118,6 +152,26 @@ function balise_distance_dist($p) {
return rindex_pile($p, 'distance', 'gis');
}
/**
* Balise #TITRE_GIS : retourne le titre du point
* Necessite le critere {gis} sur la boucle
*
* @param unknown_type $p
*/
function balise_titre_gis_dist($p) {
return rindex_pile($p, 'titre_gis', 'gis');
}
/**
* Balise #DESCRIPTIF_GIS : retourne le descriptif du point
* Necessite le critere {gis} sur la boucle
*
* @param unknown_type $p
*/
function balise_descriptif_gis_dist($p) {
return rindex_pile($p, 'descriptif_gis', 'gis');
}
function generer_url_ecrire_gis($id, $args='', $ancre='', $statut='', $connect='') {
$a = "id_gis=" . intval($id);
if (!$statut) {
@ -143,4 +197,20 @@ function gis_api_utilisee(){
return $config['api'] ? $config['api'] : $defaut;
}
}
/**
* Définition du fond cartographique à utiliser en prenant compte les defines
*/
function gis_maptype_utilise(){
$defaut = 'ROAD';
if(defined('_GIS_MAPTYPES_FORCE')){
return _GIS_MAPTYPES_FORCE;
}else{
if(defined('_GIS_MAPTYPES_DEFAUT')){
$defaut = _GIS_MAPTYPES_DEFAUT;
}
$config = @unserialize($GLOBALS['meta']['gis']);
return $config['maptype'] ? $config['maptype'] : $defaut;
}
}
?>

6
gis_options.php

@ -1,9 +1,9 @@
<?php
define('_DIR_LIB_GIS',_DIR_RACINE.'lib/h8e7f8b9b-mxn-2.0.17/');
if (!defined("_ECRIRE_INC_VERSION")) return;
$table_des_traitements['VILLE'][]= 'typo(extraire_multi(%s))';
$table_des_traitements['PAYS'][]= 'typo(extraire_multi(%s))';
define('_DIR_LIB_GIS','lib/mxn-gis-2.4.12/');
$GLOBALS['logo_libelles']['id_gis'] = _T('gis:libelle_logo_gis');
?>

86
gis_pipelines.php

@ -1,5 +1,7 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function gis_inserer_javascript($flux){
// initialisation des valeurs de config
@ -26,16 +28,14 @@ function gis_inserer_javascript($flux){
if ($config['api'] == 'microsoft')
$flux .="\n".'<script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"></script>'."\n";
if ($config['api'] == 'openlayers')
$flux .="\n".'<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>'."\n";
$flux .="\n".'<script type="text/javascript" src="http://openlayers.org/api/2.11/OpenLayers.js"></script>'."\n";
if ($config['api'] == 'ovi')
$flux .="\n".'<script type="text/javascript" src="http://api.maps.ovi.com/jsl.js"></script>'."\n";
if ($config['api'] == 'yandex')
$flux .="\n".'<script type="text/javascript" src="http://api-maps.yandex.ru/1.1/index.xml?key='.$config['api_key_yandex'].'"></script>'."\n";
if ($config['api'] == 'yahoo')
$flux .="\n".'<script type="text/javascript" src="http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=MapstractionDemo"></script>'."\n";
// insertion de la lib mapstraction
if(in_array($config['api'],array('cartociudad','google','googlev3','yandex'))){
if(in_array($config['api'],array('cartociudad','google','googlev3','yandex','openlayers'))){
$geocoder = ($config['geocoder']) ? ',[geocoder]' : '';
}else{
$geocoder = '';
@ -79,6 +79,10 @@ function gis_affiche_milieu($flux){
$objet = 'document';
$id_objet = $flux['args']['id_document'];
break;
case 'evenements_edit':
$objet = 'evenement';
$id_objet = $flux['args']['id_evenement'];
break;
default:
$objet = $id_objet = '';
break;
@ -106,15 +110,17 @@ function gis_post_edition($flux){
if (($flux['args']['operation'] == 'ajouter_document')
AND ($document = sql_fetsel("*","spip_documents","id_document=".intval($flux['args']['id_objet'])))
) {
if ($document['extension'] == 'jpg') {
if(in_array($document['extension'],array('jpg','kml','kmz'))){
$config = @unserialize($GLOBALS['meta']['gis']);
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 ($exifs = @exif_read_data($fichier,'GPS')) {
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");
@ -251,6 +257,41 @@ function gis_post_edition($flux){
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'))){
$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'])){
$c = array(
'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier),
'descriptif' => $infos['descriptif'],
'lat'=> $latitude,
'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'")){
// 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");
}
else{
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = insert_gis();
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");
}
}
unset($infos['longitude']);
unset($infos['latitude']);
if(count($infos) > 0){
include_spip('inc/modifier');
revision_document($id_document, $infos);
}
}
}
}
if (($flux['args']['operation'] == 'supprimer_document')
@ -283,7 +324,7 @@ function gis_declarer_type_surnoms($surnoms){
return $surnoms;
}
function gis_declarer_objets_surnoms($surnoms){
function gis_declarer_tables_objets_surnoms($surnoms){
$surnoms['gis'] = 'gis';
return $surnoms;
}
@ -293,4 +334,33 @@ function gis_taches_generales_cron($taches_generales){
return $taches_generales;
}
/**
* 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
*/
function gis_xmlrpc_methodes($flux){
$flux['spip.liste_gis'] = 'spip_liste_gis';
$flux['spip.lire_gis'] = 'spip_lire_gis';
return $flux;
}
/**
* Insertion dans le pipeline xmlrpc_server_class (xmlrpc)
* Ajout de fonctions spécifiques utilisés par le serveur xml-rpc
*/
function gis_xmlrpc_server_class($flux){
include_spip('inc/gis_xmlrpc');
return $flux;
}
function gis_saisies_autonomes($flux){
$flux[] = 'carte';
return $flux;
}
?>

BIN
images/openlayers/dark/blank.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

BIN
images/openlayers/dark/cloud-popup-relative.png