Compare commits

..

8 Commits
master ... v1

  1. 38
      .gitattributes
  2. 62
      CHANGELOG.md
  3. 214
      action/editer_gis.php
  4. 22
      action/editer_lien_gis.php
  5. 24
      action/gis_geocoder_rechercher.php
  6. 66
      action/kml_infos.php
  7. 19
      action/supprimer_gis.php
  8. 166
      balise/formulaire_gis.php
  9. 234
      base/gis.php
  10. 112
      base/gis_upgrade.php
  11. 64
      crud/gis.php
  12. 25
      css/leaflet_nodirection.css
  13. 38
      embed/kml.html
  14. 13
      embed/kml_fonctions.php
  15. 104
      fonds/cfg_gis.html
  16. 114
      formulaires/article_gis.html
  17. 172
      formulaires/article_gis.php
  18. 227
      formulaires/configurer_gis.html
  19. 40
      formulaires/configurer_gis.php
  20. 27
      formulaires/documents_gis.html
  21. 236
      formulaires/editer_gis.html
  22. 177
      formulaires/editer_gis.php
  23. 73
      formulaires/formulaire_gis.html
  24. 40
      formulaires/gis_inserer_modeles_traiter.php
  25. 36
      formulaires/rechercher_gis.html
  26. 53
      formulaires/rechercher_gis.php
  27. 131
      gis_administrations.php
  28. 140
      gis_autoriser.php
  29. 1
      gis_download.html
  30. 583
      gis_fonctions.php
  31. 6
      gis_json.html
  32. 13
      gis_kml.html
  33. 159
      gis_options.php
  34. 82
      gis_pipeline.php
  35. 387
      gis_pipelines.php
  36. BIN
      images/gis-16.png
  37. BIN
      images/gis-24.png
  38. BIN
      images/logo-gis-32.png
  39. 26
      images/logo-gis-xx.svg
  40. BIN
      img_pack/attente.gif
  41. BIN
      img_pack/correxir.png
  42. BIN
      img_pack/loading.gif
  43. BIN
      img_pack/loadingAnimation.gif
  44. BIN
      img_pack/musicplayer.swf
  45. BIN
      img_pack/shadow.png
  46. 8
      inc/cambiar_coordenadas.php
  47. 53
      inc/gis_geocode.php
  48. 139
      inc/gis_xmlrpc.php
  49. 334
      inc/iptc.php
  50. 226
      inc/kml_infos.php
  51. 225
      inc/parte_privada.php
  52. 431
      inc/staticmap.php
  53. 7
      inclure/download_gpx.html
  54. 9
      inclure/download_kml.html
  55. 9
      inclure/gpx-item.html
  56. 42
      inclure/kml-item.html
  57. 32
      javascript/.eslintrc
  58. 62
      javascript/gis.js.html
  59. 176
      javascript/gis_geocoder.js
  60. 24
      javascript/gis_utils.js
  61. 429
      javascript/leaflet.gis.js
  62. 8
      js/swfobject.js
  63. 21
      json-gis-marker.html
  64. 17
      json-gis-zoom.html
  65. 17
      json-gis.html
  66. 10
      json/gis.html
  67. 10
      json/gis_articles.html
  68. 10
      json/gis_articles_branche.html
  69. 2
      json/gis_articles_plus_sites.html
  70. 10
      json/gis_auteurs.html
  71. 10
      json/gis_documents.html
  72. 10
      json/gis_evenements.html
  73. 10
      json/gis_mots.html
  74. 10
      json/gis_organisations.html
  75. 10
      json/gis_point_libre.html
  76. 10
      json/gis_rubriques.html
  77. 10
      json/gis_sites.html
  78. 10
      json/gis_tous_avec_liens_espace_prive.html
  79. 43
      lang/gis.xml
  80. 199
      lang/gis_de.php
  81. 219
      lang/gis_en.php
  82. 241
      lang/gis_es.php
  83. 255
      lang/gis_fr.php
  84. 58
      lang/gis_gl.php
  85. 201
      lang/gis_ja.php
  86. 199
      lang/gis_nl.php
  87. 199
      lang/gis_pt_br.php
  88. 140
      lang/gis_ru.php
  89. 156
      lang/gis_sk.php
  90. 30
      lang/paquet-gis.xml
  91. 15
      lang/paquet-gis_en.php
  92. 15
      lang/paquet-gis_es.php
  93. 13
      lang/paquet-gis_fr.php
  94. 16
      lang/paquet-gis_ja.php
  95. 15
      lang/paquet-gis_nl.php
  96. 15
      lang/paquet-gis_pt_br.php
  97. 15
      lang/paquet-gis_ru.php
  98. 15
      lang/paquet-gis_sk.php
  99. 27
      lib/leaflet/README.md
  100. 33
      lib/leaflet/deps.sh
  101. Some files were not shown because too many files have changed in this diff Show More

38
.gitattributes vendored

@ -1,3 +1,35 @@
/phpstan.neon.dist export-ignore
/phpstan-baseline.neon export-ignore
/phpstan-constants.php export-ignore
* text=auto !eol
balise/formulaire_gis.php -text
base/gis.php -text
base/gis_upgrade.php -text
fonds/cfg_gis.html -text
formulaires/article_gis.html -text
formulaires/article_gis.php -text
formulaires/documents_gis.html -text
formulaires/editer_gis.html -text
formulaires/editer_gis.php -text
formulaires/formulaire_gis.html -text
/gis_options.php -text
/gis_pipeline.php -text
img_pack/attente.gif -text
img_pack/correxir.png -text
img_pack/loading.gif -text
img_pack/loadingAnimation.gif -text
img_pack/musicplayer.swf -text
img_pack/shadow.png -text
inc/cambiar_coordenadas.php -text
inc/parte_privada.php -text
js/swfobject.js -text
/json-gis-marker.html -text
/json-gis-zoom.html -text
/json-gis.html -text
lang/gis_en.php -text
lang/gis_es.php -text svneol=unset#application/octet-stream
lang/gis_fr.php -text
lang/gis_gl.php -text
modeles/carte_gis.html -text
modeles/carte_gis_json.html -text
/musicplayer.swf -text
/plugin.xml -text
/rss-gis-recursive.html -text
/rss-gis.html -text

62
CHANGELOG.md

@ -1,62 +0,0 @@
# Changelog
## Unreleased
### Changed
- Mise à jour de Leaflet en 1.9.3
## 4.54.2 - 2022-10-05
### Changed
- Mise à jour de Leaflet en 1.9.2
## 4.54.1 - 2022-09-23
### Changed
- Mise à jour de Leaflet en 1.9.1
## 4.54.0 - 2022-09-23
### Changed
- Mise à jour de Leaflet en 1.9.0
### Fixed
- Éviter un warning lors de l'appel de la classe class_IPTC sur les images qui n'ont pas d'info APP13
- Caster les variables dans `gis_post_edition()`
- Compatibilité SPIP 4.1 pour la fonction `inc_kml_infos()`
- Éviter un variable xx might not be defined dans `gis_post_edition()`
## 4.53.1 - 2022-07-11
### Fixed
- API cartes statiques, éviter de générer du vide quand certaines tuiles de la carte passent la date crossing line
- #27 Appel à suivre_invalideur conventionnel
- Update lib fullscreen pour compat ios
- Rétablir la compatibilité avec PHP < 7
## 4.53.0 - 2022-05-25
### Added
- Ajout d’un CHANGELOG
- #34 Ajout d'une API pour générer des cartes statiques
### Changed
- #40 Mise à jour de leaflet en 1.8.0 et des librairies utilisées par le plugin
### Fixed
- Fix Warnings Undefined array key
- Compatibilité PHP 8 : éviter des warnings du type Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated

214
action/editer_gis.php

@ -1,214 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/autoriser');
function action_editer_gis_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// si id_gis n'est pas un nombre, c'est une creation
if (!$id_gis = intval($arg)) {
if (!autoriser('creer', 'gis') or !$id_gis = gis_inserer()) {
return [false, _L('echec')];
}
}
$err = gis_modifier($id_gis);
return [$id_gis,$err];
}
/**
* Fonction d'insertion d'un gis vide
*
* @deprecated Utiliser objet_inserer()
* @see objet_inserer()
*
* @return int|bool $id_gis : l'identifiant numérique du point ou false en cas de non création
*/
function gis_inserer($set = null) {
$champs = is_array($set) ? $set : [];
// Envoyer aux plugins
$champs = pipeline('pre_insertion', [
'args' => [
'table' => 'spip_gis',
],
'data' => $champs
]);
$id_gis = sql_insertq('spip_gis', $champs);
pipeline(
'post_insertion',
[
'args' => [
'table' => 'spip_gis',
'id_objet' => $id_gis
],
'data' => $champs
]
);
return $id_gis;
}
/**
* Enregistrer certaines modifications d'un gis
*
* Appelle toutes les fonctions de modification d'un point gis
* $err est de la forme chaine de langue ou vide si pas d'erreur
* https://code.spip.net/@articles_set
*
* @param int $id_gis l'identifiant numérique du point
* @param null|array $set un array des valeurs à mettre en base (par défaut false, on récupère les valeurs passées en dans le POST)
* @return string
*/
function gis_modifier($id_gis, $set = null) {
include_spip('inc/modifier');
include_spip('inc/filtres');
$c = collecter_requests(
// white list
objet_info('gis', 'champs_editables'),
// black list
['id_objet','objet'],
// donnees eventuellement fournies
$set
);
if (isset($c['lon'])) {
if ($c['lon'] > 180) {
while ($c['lon'] > 180) {
$c['lon'] = $c['lon'] - 360;
}
} elseif ($c['lon'] <= -180) {
while ($c['lon'] <= -180) {
$c['lon'] = $c['lon'] + 360;
}
}
}
if (isset($c['lat'])) {
if ($c['lat'] > 90) {
while ($c['lat'] > 90) {
$c['lat'] = $c['lat'] - 180;
}
} elseif ($c['lat'] <= -90) {
while ($c['lat'] <= -90) {
$c['lat'] = $c['lat'] + 180;
}
}
}
if (
$err = objet_modifier_champs('gis', $id_gis, [
//'nonvide' => array('nom' => _T('info_sans_titre')),
'data' => $set,
'invalideur' => "id='gis/$id_gis'",
], $c)
) {
return $err;
}
// lier a un parent ?
$c = collecter_requests(['id_objet', 'objet'], [], $set);
if (isset($c['id_objet']) and intval($c['id_objet']) and isset($c['objet']) and $c['objet']) {
gis_associer($id_gis, [$c['objet'] => $c['id_objet']]);
}
return $err;
}
/**
* Associer un point géolocalisé a des objets listes sous forme
* array($objet=>$id_objets,...)
* $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
*
* on peut passer optionnellement une qualification du (des) lien(s) qui sera
* alors appliquee dans la foulee.
* En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
*
* @param int $id_gis
* @param array $objets
* @param array $qualif
* @return string
*/
function gis_associer($id_gis, $objets, $qualif = null) {
include_spip('action/editer_liens');
$res = objet_associer(['gis' => $id_gis], $objets, $qualif);
include_spip('inc/invalideur');
suivre_invalideur("id='gis/$id_gis'");
return $res;
}
/**
* Dissocier un point géolocalisé des objets listes sous forme
* array($objet=>$id_objets,...)
* $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
*
* un * pour $id_auteur,$objet,$id_objet permet de traiter par lot
*
* @param int $id_gis
* @param array $objets
* @return string
*/
function gis_dissocier($id_gis, $objets) {
include_spip('action/editer_liens');
$res = objet_dissocier(['gis' => $id_gis], $objets);
include_spip('inc/invalideur');
suivre_invalideur("id='gis/$id_gis'");
return $res;
}
/**
* Supprimer définitivement un point géolocalisé
*
* @param int $id_gis identifiant numérique du point
* @return int|false 0 si réussite, false dans le cas ou le point n'existe pas
*/
function gis_supprimer($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='gis/$id_gis'");
return $id_gis;
}
return false;
}
/**
* Délier un point géolocalisé d'un objet SPIP
*
* @deprecated Utiliser gis_dissocier()
* @see gis_dissocier()
*
* @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) {
return gis_dissocier($id_gis, [$objet => $id_objet]);
}
/**
* Lier un point géolocalisé à un objet SPIP
*
* @deprecated Utiliser gis_associer()
* @see gis_associer()
*
* @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) {
return gis_associer($id_gis, [$objet => $id_objet]);
}

22
action/editer_lien_gis.php

@ -1,22 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_editer_lien_gis_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
list($action,$id_gis, $objet, $id_objet) = explode('/', $arg);
include_spip('inc/autoriser');
if (intval($id_gis) and autoriser('lier', 'gis', $id_gis, $GLOBALS['visiteur_session'], ['objet' => $objet,'id_objet' => $id_objet])) {
include_spip('action/editer_gis');
if ($action == 'lier') {
gis_associer($id_gis, [$objet => $id_objet]);
} elseif ($action == 'delier') {
gis_dissocier($id_gis, [$objet => $id_objet]);
}
}
}

24
action/gis_geocoder_rechercher.php

@ -1,24 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Proxy vers le service du geocoder
*
* Cette fonction permet de transmettre une requete auprès du service
* de recherche d'adresse d'OpenStreetMap (Nomatim ou Photon).
*
* Seuls les arguments spécifiques au service sont transmis.
*/
function action_gis_geocoder_rechercher_dist() {
include_spip('inc/modifier');
/* On filtre les arguments à renvoyer à Nomatim (liste blanche) */
$arguments = collecter_requests(['format', 'q', 'limit', 'addressdetails', 'accept-language', 'lat', 'lon'], []);
include_spip('inc/gis_geocode');
if ($data = gis_geocode_request(_request('mode'), $arguments)) {
header('Content-Type: application/json; charset=UTF-8');
echo $data;
}
}

66
action/kml_infos.php

@ -1,66 +0,0 @@
<?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']) and is_numeric($longitude = $infos['longitude'])) {
$c = [
'titre' => $infos['titre'] ?: basename($fichier),
'lat' => $latitude,
'lon' => $longitude,
'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
gis_modifier($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 = gis_inserer();
gis_modifier($id_gis, $c);
gis_associer($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('action/editer_document');
document_modifier($id_document, $infos);
}
}
}
$redirect = urldecode(_request('redirect'));
return $redirect;
}

19
action/supprimer_gis.php

@ -1,19 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_supprimer_gis_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
list($id_gis) = preg_split(',[^0-9],', $arg);
include_spip('inc/autoriser');
if (intval($id_gis) and autoriser('supprimer', 'gis', $id_gis)) {
include_spip('action/editer_gis');
gis_supprimer($id_gis);
}
}

166
balise/formulaire_gis.php

@ -0,0 +1,166 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return; #securite
// includes para as funcions
include_spip('inc/texte');
include_spip('inc/lang');
include_spip('inc/mail');
include_spip('inc/date');
include_spip ("inc/meta");
include_spip ("inc/session");
include_spip ("inc/filtres");
include_spip ("inc/acces");
include_spip('base/abstract_sql');
include_spip ('inc/ajouter_documents');
spip_connect();
if(function_exists(charger_generer_url)) charger_generer_url();
/* Assurer une compat SPIP 2.1*/
else generer_url_entite();
//Le contexte indique dans quelle rubrique le visiteur peut proposer l article
function balise_FORMULAIRE_GIS ($p) {
$p = calculer_balise_dynamique($p,'FORMULAIRE_GIS', array('id_rubrique'));
return $p;
}
function balise_FORMULAIRE_GIS_stat($args, $filtres) {
// Pas d'id_rubrique ? Erreur de squelette
if (!$args[0])
return erreur_squelette(
_T('zbug_champ_hors_motif',
array ('champ' => '#FORMULAIRE_GIS',
'motif' => 'RUBRIQUES')), '');
// Verifier que les visisteurs sont autorises a proposer un article
return ($args);
}
function balise_FORMULAIRE_GIS_dyn($id_rubrique) {
global $_FILES, $_HTTP_POST_FILES; // ces variables sont indispensables pour récuperer les documents joints
global $REMOTE_ADDR, $afficher_texte, $_COOKIE, $_POST;
$titre= stripslashes(_request('titre'));
$chapo= stripslashes(_request('chapo'));
$texte= stripslashes(_request('texte'));
// form gis
$lat= _request('lat');
$lonx= _request('lonx');
$commentimg= _request('commentimg');
$commentsound= _request('commentsound');
$auteur= _request('auteur');
$lang = _request('var_lang');
$nom = 'changer_lang';
lang_select();
$langues = liste_options_langues($nom, $lang);
// retourver le secteur et la langue de la rubrique
$s = spip_query("SELECT id_secteur, lang FROM spip_rubriques WHERE id_rubrique = '$id_rubrique' ");
if ($r = spip_fetch_array($s)) {
$id_secteur = $r["id_secteur"];
$lang = $r["lang"];
}
$valider= _request('valider');
$media=_request('media');
$bouton= '';
// statut de l'article, et formulaire de login en fonction de la configuration choisie
if($valider)
{
// intégrer à la base de données
$time=time();
$date=date('Y-m-d H:i:s',$time);
$statut= 'publie';
// ajouter le contenu de l'article
spip_abstract_insert('spip_articles', "(surtitre, titre, soustitre, descriptif, chapo, texte, ps, statut, date, date_redac, id_rubrique, id_article)", "(
" . spip_abstract_quote($surtitre) . ",
" . spip_abstract_quote($titre) . ",
" . spip_abstract_quote($soustitre) . ",
" . spip_abstract_quote($descriptif) . ",
" . spip_abstract_quote($chapo) . ",
" . spip_abstract_quote($texte) . ",
" . spip_abstract_quote($nom_inscription) . ",
" . spip_abstract_quote($statut) . ",
" . spip_abstract_quote($date) . ",
" . spip_abstract_quote($date_redac) . ",
" . intval($id_rubrique) .",
" . intval($id_article) ."
)");
// Insertamos nunha variable unha nova id para sustituir por id_article
$id_novo_article = spip_insert_id();
// insertamos as coordenadas do artigo
spip_abstract_insert("spip_gis", "(id_article, lat, lonx)", "(" . $id_novo_article .",".$lat." ,".$lonx.")");
// insertamos o autor do artigo, tomado da cookie de sesion
spip_abstract_insert("spip_auteurs_articles", "(id_auteur, id_article)", "(" . $auteur . ", " . $id_novo_article . ")");
//proba subir imaxe
if ((isset($_FILES['commentimg'])) AND ($_FILES['commentimg']['error'] == "0")) {
$freshfile = $_FILES['commentimg'];
move_uploaded_file($freshfile['tmp_name'], _DIR_PLUGIN_GIS.$freshfile['name']) OR die ("<p>Error!</p>");
inc_ajouter_documents_dist (_DIR_PLUGIN_GIS.$freshfile['name'], $freshfile['name'], 'article', $id_novo_article , 'document', $id_document, $documents_actifs);
unlink (_DIR_PLUGIN_GIS.$freshfile['name']);
} else {
echo "no fai nada coa imaxe";
}
//proba subir son
if ((isset($_FILES['commentsound'])) AND ($_FILES['commentsound']['error'] == "0")) {
$freshfile = $_FILES['commentsound'];
echo $freshfile['tmp_name'];
move_uploaded_file($freshfile['tmp_name'], _DIR_PLUGIN_GIS.$freshfile['name']) OR die ("<p>Error!</p>");
inc_ajouter_documents_dist (_DIR_PLUGIN_GIS.$freshfile['name'], $freshfile['name'], 'article', $id_novo_article , 'document', $id_document, $documents_actifs);
unlink (_DIR_PLUGIN_GIS.$freshfile['name']);
} else {
echo "no fai nada co son";
}
if ($r = spip_fetch_array($s)){
$id_article = $r["id_article"];
}
return _T('form_prop_enregistre');
echo ($id_article);
}else{ // SI NON E if($valider), e decir, si non se lle da o boton enviar (podeselle dar o boton previsualizaar por exemplo, ou engadir imaxe)
return array('formulaires/formulaire_gis', 0,
array(
'formulaire_date' => $formulaire_date,
'url' => $url,
'langues' => $langues,
'previsu' => $previsu,
'surtitre' => $surtitre,
'titre' => interdire_scripts(typo($titre)),
'soustitre' => $soustitre,
'descriptif' => $descriptif,
'chapo' => $chapo,
'texte' => $texte,
'ps' => $ps,
'lien_titre' => $lien_titre,
'lien_url' => $lien_url,
'id_rubrique' => $id_rubrique,
'id_secteur' => $id_secteur,
'id_auteur_session' => $id_auteur_session,
'mot' => $mot,
'auteur' => $auteur,
'lat' => $lat,
'lonx' => $lonx,
'commentimg' => $commentimg,
'commentsound' => $commentsound
)
);
} // FIN if($valider)
} // FIN function balise_FORMULAIRE_GIS_dyn($id_rubrique)
?>

234
base/gis.php

@ -1,144 +1,90 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function gis_declarer_tables_interfaces($interface) {
$interface['table_des_tables']['gis'] = 'gis';
$interface['table_des_tables']['gis_liens'] = 'gis_liens';
// Traitements typo et raccourcis
$interface['table_des_traitements']['TITRE_GIS'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['DESCRIPTIF_GIS'][] = _TRAITEMENT_RACCOURCIS;
$interface['table_des_traitements']['VILLE_GIS'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['PAYS_GIS'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['REGION_GIS'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['DEPARTEMENT_GIS'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['VILLE'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['PAYS'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['REGION'][] = 'typo(extraire_multi(%s))';
$interface['table_des_traitements']['DEPARTEMENT'][] = 'typo(extraire_multi(%s))';
return $interface;
}
function gis_declarer_tables_objets_sql($tables) {
/* Declaration de la table de points gis */
$tables['spip_gis'] = [
/* Declarations principales */
'table_objet' => 'gis',
'table_objet_surnoms' => ['gis'],
'type' => 'gis',
'type_surnoms' => ['gi'],
/* La table */
'field' => [
'id_gis' => 'bigint(21) NOT NULL',
'titre' => "text NOT NULL DEFAULT ''",
'descriptif' => "text NOT NULL DEFAULT ''",
'lat' => 'double NULL NULL',
'lon' => 'double NULL NULL',
'zoom' => 'tinyint(4) NULL NULL',
'adresse' => "text NOT NULL DEFAULT ''",
'pays' => "text NOT NULL DEFAULT ''",
'code_pays' => "varchar(255) NOT NULL DEFAULT ''",
'region' => "text NOT NULL DEFAULT ''",
'departement' => "text NOT NULL DEFAULT ''",
'ville' => "text NOT NULL DEFAULT ''",
'code_postal' => "varchar(255) NOT NULL DEFAULT ''",
'color' => "varchar(25) NOT NULL DEFAULT ''",
'weight' => "varchar(4) NOT NULL DEFAULT ''",
'opacity' => "varchar(4) NOT NULL DEFAULT ''",
'fillcolor' => "varchar(25) NOT NULL DEFAULT ''",
'fillopacity' => "varchar(4) NOT NULL DEFAULT ''"
],
'key' => [
'PRIMARY KEY' => 'id_gis',
'KEY lat' => 'lat',
'KEY lon' => 'lon',
'KEY pays' => 'pays(500)',
'KEY code_pays' => 'code_pays',
'KEY region' => 'region(500)',
'KEY departement' => 'departement(500)',
'KEY ville' => 'ville(500)',
'KEY code_postal' => 'code_postal',
],
'join' => [
'id_gis' => 'id_gis'
],
'principale' => 'oui',
'modeles' => ['carte_gis', 'carte_gis_preview'],
/* Le titre, la date et la gestion du statut */
'titre' => "titre, '' AS lang",
/* L'édition, l'affichage et la recherche */
'page' => false,
'url_voir' => 'gis',
'url_edit' => 'gis_edit',
'editable' => 'oui',
'champs_editables' => ['lat', 'lon', 'zoom', 'titre', 'descriptif', 'adresse', 'code_postal', 'ville', 'region', 'departement', 'pays', 'code_pays', 'color', 'weight', 'opacity', 'fillcolor', 'fillopacity'],
'champs_versionnes' => ['lat', 'lon', 'zoom', 'titre', 'descriptif', 'adresse', 'code_postal', 'ville', 'region', 'departement', 'pays', 'code_pays', 'color', 'weight', 'opacity', 'fillcolor', 'fillopacity'],
'champs_critere_gis' => ['gis.titre AS titre_gis', 'gis.descriptif AS descriptif_gis', 'gis.adresse AS adresse_gis', 'gis.pays AS pays_gis', 'gis.code_pays AS code_pays_gis', 'gis.region AS region_gis', 'gis.departement AS departement_gis', 'gis.ville AS ville_gis', 'gis.code_postal AS code_postal_gis'],
'icone_objet' => 'gis',
'rechercher_champs' => [
'titre' => 8,
'descriptif' => 5,
'pays' => 3,
'region' => 3,
'departement' => 3,
'ville' => 3,
'code_postal' => 3,
],
/* Les textes standard */
'texte_ajouter' => 'gis:texte_ajouter_gis',
'texte_retour' => 'icone_retour',
'texte_modifier' => 'gis:texte_modifier_gis',
'texte_creer' => 'gis:texte_creer_gis',
'texte_creer_associer' => 'gis:texte_creer_associer_gis',
'texte_objet' => 'gis:gis_singulier',
'texte_objets' => 'gis:gis_pluriel',
'info_aucun_objet' => 'gis:info_aucun_gis',
'info_1_objet' => 'gis:info_1_gis',
'info_nb_objets' => 'gis:info_nb_gis',
'texte_logo_objet' => 'gis:libelle_logo_gis',
];
$tables[]['tables_jointures'][] = 'gis_liens';
$tables[]['champs_versionnes'][] = 'jointure_gis';
// recherche jointe sur les points gis pour tous les objets
$tables[]['rechercher_jointures']['gis'] = [
'titre' => 3,
'descriptif' => 2,
'pays' => 4,
'region' => 1,
'departement' => 1,
'ville' => 1,
'code_postal' => 1
];
return $tables;
}
function gis_declarer_tables_auxiliaires($tables_auxiliaires) {
$spip_gis_liens = [
'id_gis' => 'bigint(21) NOT NULL',
'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
'id_objet' => 'bigint(21) NOT NULL'];
$spip_gis_liens_key = [
'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'] = [
'field' => &$spip_gis_liens,
'key' => &$spip_gis_liens_key];
return $tables_auxiliaires;
}
<?php
/*
* Spip Gis plugin
* Insetar google maps en SPIP
*
* Autores :
* Horacio Gonz‡lez, Berio Molina
* (c) 2007 - Distribu’do baixo licencia GNU/GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
global $tables_principales;
global $tables_auxiliaires;
//taboa gis ------------------------------------------
$spip_gis = array(
"id_gis" => "bigint(21) NOT NULL",
"id_article" => "int(11) NULL NULL",
"id_rubrique" => "int(11) NULL NULL",
"lat" => "float(21) NULL NULL",
"lonx" => "float(21) NULL NULL",
"zoom" => "tinyint(4) NULL NULL",
"pays" => "text NOT NULL DEFAULT ''",
"code_pays" => "varchar(255) NOT NULL DEFAULT ''",
"region" => "text NOT NULL DEFAULT ''",
"ville" => "text NOT NULL DEFAULT ''",
"code_postal" => "varchar(255) NOT NULL DEFAULT ''"
);
$spip_gis_key = array(
"PRIMARY KEY" => "id_gis",
"KEY id_article" => "id_article",
"KEY id_rubrique" => "id_rubrique"
);
$spip_gis_join = array(
"id_article"=>"id_article",
"id_rubrique"=>"id_rubrique",
);
$tables_principales['spip_gis'] = array(
'field' => &$spip_gis,
'key' => &$spip_gis_key,
'joint' => &$spip_gis_join
);
//------------------------------------------------------
//taboa gis_mots --------------------------------------
$spip_gis_mots = array(
"id_gis" => "bigint(21) NOT NULL",
"id_mot" => "int(11) NULL NULL",
"lat" => "float(21) NULL NULL",
"lonx" => "float(21) NULL NULL",
"zoom" => "tinyint(4) NULL NULL"
);
$spip_gis_mots_key = array(
"PRIMARY KEY" => "id_gis",
"KEY id_mot" => "id_mot"
);
$spip_gis_mots_join = array(
"id_mot"=>"id_mot"
);
$tables_principales['spip_gis_mots'] = array(
'field' => &$spip_gis_mots,
'key' => &$spip_gis_mots_key,
'joint' => &$spip_gis_most_join
);
//------------------------------------------------------
//on ajoute les kml à la table spip_types_documents --------------------------------------
$res = spip_query("SELECT extension FROM spip_types_documents WHERE extension='kml'");
if (!$row = spip_fetch_array($res))
spip_query("INSERT INTO `spip_types_documents` ( `id_type` , `titre` , `descriptif` , `extension` , `mime_type` , `inclus` , `upload` , `maj` ) VALUES ('', 'Google Earth Placemark', '', 'kml', 'application/vnd.google-earth.kml+xml', 'non', 'oui', NOW( ));");
//-- Relaci—ns ----------------------------------------------------
global $table_des_tables;
$table_des_tables['gis']='gis';
$table_des_tables['gis_config']='gis_config';
$table_des_tables['gis_mots']='gis_mots';
//-- Jointures ----------------------------------------------------
//Les jointures sont pas necessaires parce que le champs a utiliser comme criteres sont dejà
//dans les tables de GIS
//global $tables_jointures;
//$tables_jointures['spip_articles'][]= 'gis';
//$tables_jointures['spip_gis'][] = 'articles';
//$tables_jointures['spip_rubriques'][]= 'gis';
//$tables_jointures['spip_gis'][] = 'rubriques';
//$tables_jointures['spip_mots'][]= 'gis_mots';
//$tables_jointures['spip_gis_mots'][] = 'mots';
?>

112
base/gis_upgrade.php

@ -0,0 +1,112 @@
<?php
/*
* Spip Gis plugin
* Insetar google maps en SPIP
*
* Autores :
* Horacio Gonz‡lez, Berio Molina
* (c) 2007 - Distribu’do baixo licencia GNU/GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
function gis_upgrade($nom_meta_base_version,$version_cible){
$current_version = 0.0;
if ( (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
|| (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
if ($current_version==0.0){
include_spip('base/gis');
include_spip('base/create');
creer_base();
ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
}
if (version_compare($current_version,"0.1.1","<")){
spip_query("ALTER TABLE spip_gis ADD INDEX ( id_article )");
ecrire_meta($nom_meta_base_version,$current_version="0.1.1");
}
if (version_compare($current_version,"0.1.2","<")){
$key = "";
$res = spip_query("SELECT name, value FROM spip_gis_config WHERE name='googlemapkey'");
if ($row = spip_fetch_array($res))
$key = $row['value'];
ecrire_meta('geomap_googlemapkey',$key);
spip_query("DROP TABLE spip_gis_config");
ecrire_meta($nom_meta_base_version,$current_version="0.1.2");
}
if (version_compare($current_version,"0.1.3","<")){
spip_query("CREATE TABLE `spip_gis_mots` (
`id_gis` bigint(21) NOT NULL auto_increment,
`id_mot` int(11) default NULL,
`lat` float default NULL,
`lonx` float default NULL,
`zoom` tinyint(4) default NULL,
PRIMARY KEY (`id_gis`)
)");
ecrire_meta($nom_meta_base_version,$current_version="0.1.3");
}
if (version_compare($current_version,"0.1.4","<")){
$res = spip_query("SELECT extension FROM spip_types_documents WHERE extension='kml'");
if (!$row = spip_fetch_array($res))
spip_query("INSERT INTO `spip_types_documents` ( `id_type` , `titre` , `descriptif` , `extension` , `mime_type` , `inclus` , `upload` , `maj` ) VALUES ('', 'Google Earth Placemark', '', 'kml', 'application/vnd.google-earth.kml+xml', 'non', 'oui', NOW( ));");
ecrire_meta($nom_meta_base_version,$current_version="0.1.4");
}
if (version_compare($current_version,"0.1.5","<")){
spip_query("ALTER TABLE spip_gis ADD id_rubrique int(11) NULL NULL AFTER id_article");
spip_query("ALTER TABLE spip_gis ADD INDEX ( id_rubrique )");
ecrire_meta($nom_meta_base_version,$current_version="0.1.5");
}
/*esto es para realizar los cambios de nombre de variables*/
if (version_compare($current_version,"0.1.6","<")){
$value = "";
$res = spip_query("SELECT name, value FROM spip_meta WHERE name='geomap_default_lat'");
if ($row = spip_fetch_array($res)) {
$value = $row['value'];
ecrire_meta('gis_default_lat',$value);
} else {
effacer_meta('gis_default_lat');
}
$res = spip_query("SELECT name, value FROM spip_meta WHERE name='geomap_default_lonx'");
if ($row = spip_fetch_array($res)) {
$value = $row['value'];
ecrire_meta('gis_default_lonx',$value);
} else {
effacer_meta('gis_default_lonx');
}
$res = spip_query("SELECT name, value FROM spip_meta WHERE name='geomap_default_zoom'");
if ($row = spip_fetch_array($res)) {
$value = $row['value'];
ecrire_meta('gis_default_zoom',$value);
} else {
effacer_meta('gis_default_zoom');
}
effacer_meta("geomap_default_lat");
effacer_meta("geomap_default_lonx");
effacer_meta("geomap_default_zoom");
ecrire_meta('gis_map', 'no');
spip_query("ALTER TABLE spip_gis ADD zoom int(4) NULL NULL AFTER lonx");
ecrire_meta($nom_meta_base_version,$current_version="0.1.6");
}
if (version_compare($current_version,"0.1.7","<")){
spip_query("ALTER TABLE spip_gis ADD pays text NOT NULL DEFAULT '' AFTER zoom");
spip_query("ALTER TABLE spip_gis ADD code_pays varchar(255) NOT NULL DEFAULT '' AFTER pays");
spip_query("ALTER TABLE spip_gis ADD region text NOT NULL DEFAULT '' AFTER code_pays");
spip_query("ALTER TABLE spip_gis ADD ville text NOT NULL DEFAULT '' AFTER region");
spip_query("ALTER TABLE spip_gis ADD code_postal varchar(255) NOT NULL DEFAULT '' AFTER ville");
ecrire_meta($nom_meta_base_version,$current_version="0.1.7");
}
/*se encaga de trasladar las variables generales de geomap a gis*/
ecrire_metas();
}
}
function gis_vider_tables($nom_meta_base_version) {
spip_query("DROP TABLE spip_gis");
spip_query("DROP TABLE spip_gis_mots");
effacer_meta($nom_meta_base_version);
ecrire_metas();
}
?>

64
crud/gis.php

@ -1,64 +0,0 @@
<?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 string $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) {
$id = null;
if (autoriser('voir', 'gis') and $id = gis_inserer()) {
$err = gis_modifier($id, $set);
} else {
$err = _T('crud:erreur_creation', ['objet' => 'gis']);
}
return ['success' => ($err and strlen($err) > 0) ? false : true, 'message' => $err, 'result' => ['id' => $id]];
}
/**
* Update :
* Met à jour un point géolocalisé
*
* @param int $id
* @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) {
$err = _T('gis:erreur_gis_inconnu', ['id' => $id]);
} elseif (autoriser('modifier', 'gis', $id)) {
$err = gis_modifier($id, $set);
} else {
$err = _L('update error');
}
return ['success' => ($err && strlen($err) > 0) ? false : true,'message' => $err,'result' => ['id' => $id]];
}
/**
* Delete :
* Supprime un point géolocalisé
*
* @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) {
$err = '';
if (autoriser('supprimer', 'gis', $id)) {
$err = gis_supprimer($id);
}
return ['success' => is_numeric($err) ? true : false, 'message' => $err, 'result' => ['id' => $id]];
}

25
css/leaflet_nodirection.css

@ -1,25 +0,0 @@
.leaflet-map-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-pane,
.leaflet-tile-container,
.leaflet-overlay-pane,
.leaflet-shadow-pane,
.leaflet-marker-pane,
.leaflet-popup-pane,
.leaflet-overlay-pane svg,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
position: absolute;
left: 0;
top: 0;
right:auto;
}
.leaflet-tooltip {
max-width:30em;
overflow:hidden;
text-overflow:ellipsis;
}

38
embed/kml.html

@ -1,38 +0,0 @@
<BOUCLE_document(DOCUMENTS){id_document}>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR">
<head>
<title>[(#TITRE|sinon{#FICHIER|basename})] - #NOM_SITE_SPIP</title>
<base target="_parent" />
<meta name="generator" content="SPIP[ (#SPIP_VERSION)]" />
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET" />
[<link rel="stylesheet" href="(#CHEMIN{css/embed_code.css})">]
[(#VAL{''}|gis_insert_head_css)]
[<script src="(#CHEMIN{prive/javascript/jquery.js})" type="text/javascript"></script>]
[<script src="(#CHEMIN{prive/javascript/jquery.placeholder-label.js})" type="text/javascript"></script>]
[<script src="(#CHEMIN{prive/javascript/ajaxCallback.js})" type="text/javascript"></script>]
[(#VAL{''}|gis_insert_head)]
</head>
<body id="document_#ENV{id_document}" class="document embed_document embed_document_#MEDIA" dir="#LANG_DIR" style="width:#ENV{largeur}px;height:#ENV{hauteur}px">
<div class="infos_document gis">
[<div class="logo">(#LOGO_DOCUMENT|image_reduire{100,100})</div>]
<div class="titre"><h1>[(#TITRE|sinon{#FICHIER|basename})]</h1></div>
<BOUCLE_gis(GIS){id_document}>
<div class="spip_documents" style="clear:both">
#MODELE{carte_gis,largeur=100%,hauteur=#ENV{hauteur,400px},kml=#ID_DOCUMENT,lat=#LAT,lon=#LON,zoom=#ZOOM,point=non,id_carte_gis=kml#ID_DOCUMENT}
</div>
</BOUCLE_gis>
</B_gis>
<div class="spip_documents" style="clear:both">
#MODELE{carte_gis,largeur=100%,hauteur=#ENV{hauteur,400px},kml=#ID_DOCUMENT,point=non,id_carte_gis=kml#ID_DOCUMENT}
</div>
<//B_gis>
</div>
</body>
</html>
</BOUCLE_document>
</B_document>
#INCLURE{fond=embed/document,env}
<//B_document>
#FILTRE{trim}

13
embed/kml_fonctions.php

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

104
fonds/cfg_gis.html

@ -0,0 +1,104 @@
#CACHE{0}
[(#REM) titre=GIS]
[(#REM) descriptif=
<h4>Configuration du plugin GIS</h4>
Choisissez dans quelles rubriques activer le plugin.
]
<div class="formulaire_spip formulaire_editer formulaire_cfg">
<form method="post"><div>
[(#ENV{_cfg_}|form_hidden)]
<ul>
#SET{wichrub,#CONFIG{gis/rubriques_gis,#ARRAY{0,-1}}}
<li class="editer_api_carte_gis">
<label><:gis:api_carte:></label>
<div class="choix">
<input type="radio" name="api_carte" class="radio" value="geomap" id="api_carte_geomap"[ (#ENV{api_carte}|=={geomap}|?{'checked="checked"'})] />
<label for="api_carte_geomap"><:gis:api_carte_geomap:></label>
</div>
<div class="choix">
<input type="radio" name="api_carte" class="radio" value="openlayer" id="api_carte_openlayer"[ (#ENV{api_carte}|=={openlayer}|?{'checked="checked"'})] />
<label for="api_carte_openlayer"><:gis:api_carte_openlayer:></label>
</div>
</li>
<li class="editer_rubriques_gis">
<label for="rubriques_gis"><:gis:pages_prive:></label>
<p class="explications"><:gis:explication_pages_prive:></p>
<select name="rubriques_gis[]" multiple="multiple" size="9">
<option value="-1"[ (#EVAL{-1}|in_array{#GET{wichrub}}|?{' selected="selected"'})]>Toutes</option>
<BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}{tout}>
<option value="#ID_RUBRIQUE"[ (#ID_RUBRIQUE|in_array{#GET{wichrub}}|?{' selected="selected"'})]>
Secteur #ID_RUBRIQUE : #TITRE
</option>
<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}{tout}>
<option value="#ID_RUBRIQUE"[ (#ID_RUBRIQUE|in_array{#GET{wichrub}}|?{' selected="selected"'})]>
&rarr; Rubrique #ID_RUBRIQUE : #TITRE
</option>
<BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
</BOUCLE_rubriques>
</BOUCLE_secteurs>
</select>
</li>
<li class="editer_swfobject_gis">
<label><:gis:pages_public:></label>
<p class="explications"><:gis:explication_swfobject:></p>
<div class="choix">
<input type="checkbox" name="swfobject" class="checkbox" value="non" id="swfobject_non"[ (#ENV{swfobject}|=={non}|?{'checked="checked"'})] />
<label for="swfobject_non"><:gis:desactiver_swfobject:></label>
</div>
</li>
<li class="editer_geocoding_gis">
<label><:gis:geocoding:></label>
<p class="explications"><:gis:explication_geocoding:></p>
<div class="choix">
<input type="checkbox" name="geocoding" class="checkbox" value="oui" id="geocoding"[ (#ENV{geocoding}|=={oui}|?{'checked="checked"'})] />
<label for="geocoding"><:gis:activer_geocoding:></label>
</div>
</li>
</ul>
<fieldset>
<legend><:gis:parametres_formulaire:></legend>
<ul>
<li class="editer_rubrique_formulaire_gis">
<label for="rubrique_cible"><:gis:rubrique_cible:></label>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{rubrique_cible})</span>]
<select name="rubrique_cible">
<BOUCLE_r1(RUBRIQUES){racine}{par num titre}>
<option value=''></option>
<optgroup label="<:gis:secteur:> [(#TITRE|couper{40})]">
<option value="#ID_RUBRIQUE"[(#ENV{rubrique_cible}|=={#ID_RUBRIQUE}|?{' selected="selected"'})]>[(#TITRE|couper{40})] (<:gis:racine:>)</option>
<B_r2>
<option value="" class='mysteric_hr' disabled='disabled'><:gis:ou_choisir:></option>
<BOUCLE_r2(RUBRIQUES){id_parent}{par num titre}>
<option value="#ID_RUBRIQUE"[(#ENV{rubrique_cible}|=={#ID_RUBRIQUE}|?{' selected="selected"'})]>[(#TITRE|couper{40})]</option>
</BOUCLE_r2>
</optgroup>
</BOUCLE_r1>
</select>
</li>
<li class="editer_statut_formulaire_gis">
<label for="statut"><:gis:statut_articles:></label>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{statut})</span>]
<select name="statut">
<option value='prepa'[(#ENV{statut}|=={prepa}|?{' selected="selected"'})]>En cours de rédaction</option>
<option value='prop'[(#ENV{statut}|=={prop}|?{' selected="selected"'})]>Proposé</option>
<option value='publie'[(#ENV{statut}|=={publie}|?{' selected="selected"'})]>Publié</option>
</select>
</li>
<li class="editer_formats_documents[ (#ENV**{erreurs}|table_valeur{formats_documents}|?{'erreur'})]">
<label for="formats_documents"><:gis:formats_documents:></label>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{formats_documents})</span>]
<p class="explications"><:gis:texte_formats_documents:></p>
<input type="text" name="formats_documents" class="text" value="#ENV{formats_documents,'jpg,png,gif'}" />
</li>
</ul>
</fieldset>
<p class="boutons">
<input type="submit" name="_cfg_ok" class="submit" value="<:valider:>" />
<input type="submit" name="_cfg_delete" class="submit" value="<:effacer:>" />
</p>
</div></form>
</div>
#CFG_ARBO{gis}

114
formulaires/article_gis.html

@ -0,0 +1,114 @@
#CACHE{0}
<div id="formMap" name="formMap" style="width: 100%; height: 350px"></div>
<script type="text/javascript">
//<![CDATA[
var letraNH = String.fromCharCode(241);
var letraNHNH = String.fromCharCode(209);
var letraAacute = String.fromCharCode(225);
var letraAAacute = String.fromCharCode(193);
var letraEacute = String.fromCharCode(233);
var letraEEacute = String.fromCharCode(201);
var letraIacute = String.fromCharCode(237);
var letraIIacute = String.fromCharCode(205);
var letraOacute = String.fromCharCode(243);
var letraOOacute = String.fromCharCode(211);
var letraUacute = String.fromCharCode(250);
var letraUUacute = String.fromCharCode(218);
fecha = new Date();
if (GBrowserIsCompatible()) {
// create the map
var map = new GMap2(document.getElementById("formMap"));
var default_lat = [(#CONFIG**{[(#CONFIG**{gis/api_carte})]/latitude,0})];
var default_lonx = [(#CONFIG**{[(#CONFIG**{gis/api_carte})]/longitude,0})];
var default_zoom = [(#CONFIG**{[(#CONFIG**{gis/api_carte})]/zoom,0})];
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(default_lat,default_lonx), default_zoom, G_NORMAL_MAP);
// creamos el evento para crear nuevos marcadores
GEvent.addListener(map, "click", function(overlay, point){
map.clearOverlays();
if (point) {
map.addOverlay(new GMarker(point));
map.panTo(point);
document.forms.formulaire_article_gis.lat.value = point.y;
document.forms.formulaire_article_gis.lonx.value = point.x;
}
});
[(#ENV**{lat}|oui)
map.addOverlay(new GMarker(new GLatLng([(#ENV**{lat})],[(#ENV**{lonx})])));
map.setCenter(new GLatLng([(#ENV**{lat})],[(#ENV**{lonx})]));
]
} else {
alert("Sorry, the Google Maps API is not compatible with this browser");
}
//]]>
</script>
<div class="formulaire_spip formulaire_editer formulaire_article_gis">
<!-- br class='spacer' / -->
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<form method='post' action='#ENV{action}' enctype='multipart/form-data' name='formulaire_article_gis' id='formulaire_article_gis'><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
<li>
<label for="lat">Latitude</label>
<input type="text" name="lat" id="lat" class="text" value="[(#ENV**{lat})]" />
</li>
<li>
<label for="lonx">Lonxitude</label>
<input type="text" name="lonx" id="lonx" class="text" value="[(#ENV**{lonx})]" />
</li>
[<li class='saisie_document_gis[ (#ENV**{erreurs}|table_valeur{erreur_upload}|oui)erreur]'>
<fieldset>
<legend><:gis:document_joint:></legend>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{document})</span>]
(#ENV**{erreurs}|table_valeur{form_doc})
</fieldset>
</li>]
<li class="editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]">
<label for="titre"><:info_titre:></label>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{titre})</span>]
<input type='text' name='titre' id='titre' class='text' value="[(#ENV**{titre})]"/>
</li>
[(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|oui)
<li class="editer_texte[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]">
<label for="texte"><:info_texte:></label>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{texte})</span>]
[(#ENV**{_texte_trop_long,''})]
<div class="explication"><:texte_enrichir_mise_a_jour:></div>
<textarea name='texte' id='texte' class='barre_inserer' rows='7' cols='40'[
(#ENV**{browser_caret,''})]>[(#ENV**{texte})]</textarea>
<script type='text/javascript'><!--
jQuery(function(){
jQuery('#text_area')
.height((jQuery(window).height()-80)+'px');
});
//--></script>
</li>]
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input class='submit' type='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>

172
formulaires/article_gis.php

@ -0,0 +1,172 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/session');
include_spip('inc/securiser_action');
include_spip('public/assembler');
function formulaires_article_gis_charger_dist(){
$valeurs = array(
'titre'=>'',
'texte'=>'',
'lat'=>'',
'lonx'=>'',
'editable'=>true
);
// si on a pas de rubrique, on n'edite pas le formulaire !
if (!$id_rubrique = lire_config('gis/rubrique_cible')){
$valeurs['editable']=false;
}
// si l'on vien juste de poster le formlaire et qu'il a ete valide
// on veut pouvoir recommencer a poster un nouvelle photo
// on ne prend du coup pas les anciennes valeurs dans l'environnement
// pour ne pas polluer le nouveau formulaire
if (_request('soumission_gis_enregistre')){
unset ($valeurs['titre']);
unset ($valeurs['texte']);
unset ($valeurs['lat']);
unset ($valeurs['lonx']);
}
return $valeurs;
}
function formulaires_article_gis_verifier_dist(){
$erreurs = array();
$id_article = _request('id_article');
if ($id_article AND !_request('document'))
return $erreurs;
if (!$titre = _request('titre')){
$erreurs['titre'] = _T('gis:erreur_titre');
}
if (!$texte = _request('texte')){
$erreurs['texte'] = _T('gis:erreur_texte');
}
if (!count($erreurs)){
if ($afficher_texte != 'non') {
// ajout de l'article et de ses coordonnées
if(!$id_article){
include_spip('base/abstract_sql');
include_spip('inc/texte');
// pour le traitement :
// 1) on demande un nouvel article
// 2) on lui donne un titre et un statut et on y colle le texte
//3) on insère les coordonnées de l'article
// 1
include_spip('action/editer_article');
$id_rubrique = lire_config('gis/rubrique_cible');
if (!$id_article = insert_article($id_rubrique)){
return array(1,_T('gis:erreur_ajout_article'));
}
// 2
$titre = _request('titre');
$statut = lire_config('gis/statut','prop');
$texte = sql_quote(_request('texte'));
$c = array(
'titre'=> $titre,
'statut'=> $statut
);
include_spip('inc/modifier');
revision_article($id_article, $c);
instituer_article($id_article, $c);
sql_update('spip_articles', array('texte' => $texte), 'id_article=' . sql_quote($id_article));
//3
$lat = _request('lat');
$lonx = _request('lonx');
sql_insertq("spip_gis", array("id_article" => $id_article , "lat" => $lat, "lonx" => $lonx));
}
// ajout des documents
if(_request('document')) {
// compatibilite php < 4.1
if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
// recuperation des variables
$fichier = $_FILES['doc']['name'];
$size = $_FILES['doc']['size'];
$tmp = $_FILES['doc']['tmp_name'];
$type = $_FILES['doc']['type'];
$error = $_FILES['doc']['error'];
$doc = &$_FILES['doc'];
// verification si upload OK
if( !is_uploaded_file($tmp) ) {
$erreurs['document'] = _T('gis:erreur_upload');
}
else {
// on récupère l'extension du document envoyé
include_spip('base/abstract_sql');
include_spip('inc/ajouter_documents');
list($extension,$fichier) = fixer_extension_document($doc);
$acceptes = array_map('trim', explode(',',lire_config('gis/formats_documents','jpg,png,gif')));
// on vérifie que l'extension du document est autorisée
if (!in_array($extension, $acceptes)) {
if (!$formats = join(', ',$acceptes))
$formats = _L('aucun');
$erreurs['document'] = _T('gis:erreur_formats_acceptes',array('formats' => $formats));
}
else {
// ajout du document