Browse Source

Très gros changements, pour s'adapter a la maniere de faire en SPIP3:

* tout le privé dans les répertoires objets et squelettes
* on utilise au maximum l'echaffaudage (creation automatique des pages selon le type d'objet)

Fonctionnalités perdues:
* bouton "supprimer definitivement ce point" dans la liste de points GIS d'un article
* formulaire d'ajout d'un nouveau point GIS directement dans un article (maintenant ca va a la page d'édition, puis ca revient)

Bugs:
* bug SPIP sur les paginations - http://core.spip.org/issues/2089
  Pour résoudre: mettre define('_CACHE_CONTEXTES_AJAX',true); dans mes_options.php
v3
lesage.sylvain@laposte.net 11 years ago
parent
commit
5445ca39ba
  1. 28
      .gitattributes
  2. 2
      base/gis.php
  3. 3
      formulaires/editer_gis.html
  4. 35
      formulaires/rechercher_gis.html
  5. 48
      formulaires/rechercher_gis.php
  6. 88
      gis_pipelines.php
  7. 10
      lang/gis_fr.php
  8. 14
      paquet.xml
  9. 9
      prive/contenu/gis_objet.html
  10. 54
      prive/exec/gis.html
  11. 30
      prive/exec/gis_editer.html
  12. 15
      prive/exec/gis_editer_fonctions.php
  13. 5
      prive/exec/gis_fonctions.php
  14. 49
      prive/inclure/gis_objet_formulaires.html
  15. 35
      prive/liste/gis.html
  16. 41
      prive/liste/gis_objet.html
  17. 38
      prive/liste/objets_gis.html
  18. 15
      prive/navigation/gis_editer.html
  19. 20
      prive/objets/contenu/gis.html
  20. 18
      prive/objets/infos/gis.html
  21. 55
      prive/objets/liste/gis_associer.html
  22. 39
      prive/objets/liste/gis_lies.html
  23. 5
      prive/objets/liste/gis_tous.html
  24. 41
      prive/objets/liste/objets_gis.html
  25. 16
      prive/objets/liste/objets_gis_simple.html
  26. 23
      prive/squelettes/contenu/gis.html
  27. 36
      prive/squelettes/contenu/gis_edit.html
  28. 6
      prive/squelettes/contenu/gis_tous.html
  29. 8
      prive/squelettes/hierarchie/gis.html
  30. 1
      prive/squelettes/hierarchie/gis_edit.html
  31. 9
      prive/squelettes/navigation/gis_edit.html
  32. 3
      prive/squelettes/navigation/gis_tous.html
  33. 10
      prive/style_prive_plugin_gis.html

28
.gitattributes vendored

@ -10,8 +10,6 @@ formulaires/configurer_gis.html -text
formulaires/configurer_gis.php -text
formulaires/editer_gis.html -text
formulaires/editer_gis.php -text
formulaires/rechercher_gis.html -text
formulaires/rechercher_gis.php -text
genie/gis_nettoyer_base.php -text
/gis_administrations.php -text
/gis_autoriser.php -text
@ -42,19 +40,21 @@ lang/paquet-gis_fr.php -text
modeles/carte_gis.html -text
modeles/carte_gis_preview.html -text
/paquet.xml -text
prive/contenu/gis_objet.html -text
prive/exec/gis.html -text
prive/exec/gis_editer.html -text
prive/exec/gis_editer_fonctions.php -text
prive/exec/gis_fonctions.php -text
prive/exec/gis_tous.html -text
prive/inclure/gis_objet_formulaires.html -text
prive/liste/gis.html -text
prive/liste/gis_objet.html -text
prive/liste/objets_gis.html -text
prive/navigation/gis_editer.html -text
prive/navigation/gis_tous.html -text
prive/objets/contenu/gis.html -text
prive/objets/infos/gis.html -text
prive/objets/liste/gis_associer.html -text
prive/objets/liste/gis_lies.html -text
prive/objets/liste/gis_tous.html -text
prive/objets/liste/objets_gis.html -text
prive/objets/liste/objets_gis_simple.html -text
prive/squelettes/contenu/configurer_gis.html -text
prive/squelettes/contenu/gis.html -text
prive/squelettes/contenu/gis_edit.html -text
prive/squelettes/contenu/gis_tous.html -text
prive/squelettes/hierarchie/gis.html -text
prive/squelettes/hierarchie/gis_edit.html -text
prive/squelettes/navigation/gis_edit.html -text
prive/squelettes/navigation/gis_tous.html -text
prive/style_prive_plugin_gis.html -text
prive/themes/spip/images/gis-16.png -text
prive/themes/spip/images/gis-24.png -text

2
base/gis.php

@ -48,7 +48,7 @@ function gis_declarer_tables_objets_sql($tables){
"PRIMARY KEY" => "id_gis",
),
'principale' => 'oui',
/*'modeles' => array('carte_gis','carte_gis_preview'),*/
'modeles' => array('carte_gis','carte_gis_preview'),
/* Le titre, la date et la gestion du statut */
'titre' => "titre, '' AS lang",

3
formulaires/editer_gis.html

@ -48,8 +48,7 @@
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'[ style="direction: (#LANG_DIR|=={ltr}|?{rtl,ltr})"]>
<input class='submit' type='submit' name='enregistrer' value='<:bouton_enregistrer:>' />[(#ENV{id_gis}|intval|oui)
<input class='submit link' type='submit' name='supprimer' value='<:lien_supprimer:>' />]
<input class='submit' type='submit' name='enregistrer' value='<:bouton_enregistrer:>' />
</p>
</div></form>
</BOUCLE_editable>

35
formulaires/rechercher_gis.html

@ -1,35 +0,0 @@
#CACHE{0}
<BOUCLE_exclure(GIS){objet=#ENV{objet}}{id_objet=#ENV{id_objet}}{doublons objet}> </BOUCLE_exclure>
<BOUCLE_si_recherche(CONDITION){si #ENV{recherche_gis}}>
<B_recherche>
<ul class="liste_items">
<BOUCLE_recherche(GIS){titre LIKE %(#ENV{recherche_gis})%}{doublons objet}>#SET{id_gis,#ID_GIS}
[<li class="item">(#TITRE)
<div class="actions">
[(#BOUTON_ACTION{<:gis:bouton_lier:>,[(#URL_ACTION_AUTEUR{editer_lien_gis,lier/#GET{id_gis}/#ENV{objet}/#ENV{id_objet},#SELF})],ajax})]
</div>
</li>]
</BOUCLE_recherche>
</ul>
</B_recherche>
<p class="reponse_formulaire reponse_formulaire_erreur"><:gis:erreur_recherche_pas_resultats:></p>
<//B_recherche>
</BOUCLE_si_recherche>
<div class="formulaire_spip formulaire_rechercher formulaire_rechercher_gis">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<BOUCLE_si_editable(CONDITION){si #ENV{editable}}>
<form method='post' action='#ENV{action}' name='formulaire_rechercher_gis' id='formulaire_rechercher_gis'><div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
[(#SAISIE{input,recherche_gis,
label=<:gis:label_rechercher_point:>})]
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'>
<input class='submit' type='submit' name='enregistrer' value='<:info_rechercher:>' />
</p>
</div></form>
</BOUCLE_si_editable>
</div>

48
formulaires/rechercher_gis.php

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

88
gis_pipelines.php

@ -52,71 +52,29 @@ function gis_inserer_javascript($flux){
}
function gis_affiche_milieu($flux){
if ($exec = $flux['args']['exec']){
switch ($exec){
case 'article':
$objet = 'article';
$id_objet = $flux['args']['id_article'];
break;
case 'auteur':
$objet = 'auteur';
$id_objet = $flux['args']['id_auteur'];
break;
case 'breve':
$objet = 'breve';
$id_objet = $flux['args']['id_breve'];
break;
case 'rubrique':
$objet = 'rubrique';
$id_objet = $flux['args']['id_rubrique'];
break;
case 'mot':
$objet = 'mot';
$id_objet = $flux['args']['id_mot'];
break;
case 'site':
$objet = 'syndic';
$id_objet = $flux['args']['id_syndic'];
break;
case 'document':
$objet = 'document';
$id_objet = $flux['args']['id_document'];
break;
default:
// Par défaut on regarde si on est sur la page d'un vrai objet SPIP
include_spip('base/objets.php');
$objets = lister_tables_objets_sql();
foreach ($objets as $table=>$infos){
// Si cet exec fait partie d'une URL pour voir un objet déclaré
if ($exec == $infos['url_voir']){
$objet = $infos['type'];
$id_objet = $flux['args'][id_table_objet($objet)];
break; // On a trouvé on s'arrête
}
}
break;
}
if ($objet && $id_objet) {
// TODO : seulement si la conf permet de geolocaliser cet objet
if (1) {
include_spip('inc/layer');
include_spip('inc/presentation');
$contexte['objet'] = $objet;
$contexte['id_objet'] = $id_objet;
$texte = "<div id='pave_gis'>";
$bouton = bouton_block_depliable(_T('gis:cfg_titre_gis'), false, "pave_gis_depliable");
$texte .= debut_cadre_enfonce(find_in_path('images/gis-24.png'), true, "", $bouton);
$texte .= recuperer_fond('prive/contenu/gis_objet', $contexte);
$texte .= fin_cadre_enfonce(true);
$texte .= "</div>";
if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
$flux['data'] = substr_replace($flux['data'],$texte,$p,0);
else
$flux['data'] .= $texte;
}
}
}
if ($en_cours = trouver_objet_exec($flux['args']['exec'])
AND $en_cours['edition']!==true // page visu
AND $en_cours['type']!=='gis' // on ne va pas associer des points entre eux
AND $type = $en_cours['type']
AND $id_table_objet = $en_cours['id_table_objet']
AND ($id = intval($flux['args'][$id_table_objet]))){
// TODO : seulement si la conf permet de geolocaliser cet objet
// -> ajouter un element a la array suivante (qqch comme ca - voir les mots):
// 'editable'=>autoriser('associergis',$type,$id)?'oui':'non'
$texte = recuperer_fond(
'prive/objets/editer/liens',
array(
'table_source'=>'gis',
'objet'=>$type,
'id_objet'=>$id
)
);
if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
$flux['data'] = substr_replace($flux['data'],$texte,$p,0);
else
$flux['data'] .= $texte;
}
return $flux;
}

10
lang/gis_fr.php

@ -65,13 +65,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'icone_gis_tous' => 'Points g&eacute;olocalis&eacute;s',
'info_id_objet' => 'N&deg;',
'info_aucun_gis' => 'Aucun point géolocalisé',
'info_aucun_objet_gis' => 'Aucun objet lié à ce point',
'info_1_gis' => 'Un point géolocalisé',
'info_1_objet_gis' => '1 objet lié à ce point',
'info_liste_gis' => 'Points géolocalisés',
'info_liste_gis_objet' => 'Points li&eacute;s &agrave; cet objet',
'info_liste_objets_gis' => 'Objets li&eacute;s &agrave; ce point',
'info_nb_gis' => '@nb@ points géolocalisés',
'info_nb_objets_gis' => '@nb@ objets liés à ce point',
'info_numero_gis' => 'Point num&eacute;ro',
'info_objet' => 'Objet',
'info_recherche_gis_zero' => 'Aucun résultat pour « @cherche_gis@ ».',
'info_supprimer_lien' => 'D&eacute;tacher',
'info_supprimer_liens' => 'D&eacute;tacher tous les points',
'info_voir_fiche_objet' => 'Voir la fiche',
@ -86,6 +88,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'label_ville' => 'Ville',
'lat' => 'Latitude',
'libelle_logo_gis' => 'LOGO DU POINT',
'lien_ajouter_gis' => 'Ajouter ce point',
'lon' => 'Longitude',
// T
@ -93,11 +96,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'texte_creer_gis' => 'Créer un point géolocalisé',
'texte_creer_associer_gis' => 'Créer et associer un point géolocalisé',
'texte_modifier_gis' => 'Modifier le point géolocalisé',
'texte_voir_gis' => 'Voir le point géolocalisé',
'titre_bloc_creer_point' => 'Lier un nouveau point',
'titre_bloc_points_lies' => 'Points liés',
'titre_bloc_rechercher_point' => 'Rechercher un point',
'titre_nombre_utilisation' => 'Une utilisation',
'titre_nombre_utilisations' => '@nb@ utilisations',
'titre_nouveau_point' => 'Nouveau point',
'titre_objet' => 'Titre',
// Z
'zoom' => 'Zoom'

14
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="gis"
categorie="divers"
version="3.1.6"
version="3.2.0"
schema="2.0.2"
etat="dev"
compatibilite="[3.0.0-dev;3.0.*["
@ -60,22 +60,10 @@
nom="taches_generales_cron"
inclure="gis_pipelines.php"
/>
<pipeline
nom="rechercher_liste_des_champs"
inclure="gis_pipelines.php"
/>
<pipeline
nom="autoriser"
inclure="gis_autoriser.php"
/>
<pipeline
nom="declarer_tables_objets_surnoms"
inclure="gis_pipelines.php"
/>
<pipeline
nom="declarer_type_surnoms"
inclure="gis_pipelines.php"
/>
<pipeline
nom="formulaire_traiter"
inclure="formulaires/configurer_gis.php"

9
prive/contenu/gis_objet.html

@ -1,9 +0,0 @@
<div id="editer_gis_[(#ENV{objet})]_[(#ENV{id_objet})]" class="ajax-action nom_action">
<div id="pave_gis_depliable" class="bloc_depliable blocreplie">
[(#INCLURE{fond=prive/inclure/gis_objet_formulaires,env,ajax})]
</div>
[(#INCLURE{fond=modeles/carte_gis_preview,id_objet,objet})]
</div>

54
prive/exec/gis.html

@ -1,54 +0,0 @@
<div class="fiche_objet">
[(#SET{id_gis,[(#VAL{id_gis}|_request)]})]
<:icone_retour|icone_inline{#ENV{retour,#URL_ECRIRE{gis_tous}},#CHEMIN{images/gis-24.png},rien.gif,left}:>
[(#GET{id_gis}|intval|oui)
<:gis:editer_gis_editer|icone_inline{#URL_ECRIRE{gis_editer,id_gis=#GET{id_gis}}|parametre_url{retour,#SELF},#CHEMIN{images/gis-24.png},edit.gif,right}:>]
<h1>
<BOUCLE_gis(GIS){id_gis=#GET{id_gis}}>
#TITRE
</BOUCLE_gis>
[(#ENV{nouveau}|=={oui}|?{<:info_sans_titre:>,#GET{id_gis}})]
<//B_gis>
</h1>
<BOUCLE_gisbis(GIS){id_gis=#GET{id_gis}}>
[(#INCLURE{fond=modeles/carte_gis_preview,id_gis})]
<div id="wysiwyg">
<div class="champ contenu_descriptif[(#DESCRIPTIF|non)vide]">
#DESCRIPTIF
</div>
<div class="champ contenu_adresse[(#ADRESSE|non)vide]">
#ADRESSE
</div>
<div class="champ contenu_region[(#REGION|non)vide]">
#REGION
</div>
<div class="champ contenu_code_postal[(#CODE_POSTAL|non)vide]">
#CODE_POSTAL
</div>
<div class="champ contenu_ville[(#VILLE|non)vide]">
#VILLE
</div>
<div class="champ contenu_pays[(#PAYS|non)vide]">
#PAYS [((#CODE_PAYS))]
</div>
</div>
</BOUCLE_gisbis>
[(#INCLURE{fond=prive/liste/objets_gis,
sinon=<:gis:aucun_objet:>,
env,
ajax})]
</div>
<!--#navigation-->
[(#ENV{id_gis,0}|intval|oui)
<div class="cadre infos cadre-info">
<div class="numero">
<:gis:info_numero_gis:>
<p>[(#ENV{id_gis})]</p>
</div>
</div>
]
<!--/#navigation-->
<!--#extra-->
<!--/#extra-->

30
prive/exec/gis_editer.html

@ -1,30 +0,0 @@
<div class="cadre-formulaire-editer">
<div class="entete-formulaire">
<:icone_retour|icone_inline{#ENV{retour,#URL_ECRIRE{gis_tous}},#CHEMIN{images/gis-24.png},rien.gif,left}:>
[(#VAL{id_gis}|_request|?{<:gis:formulaire_modifier_gis:>,<:gis:formulaire_creer_gis:>})]
<h1>
<BOUCLE_gis(GIS){id_gis=#VAL{id_gis}|_request}>
#TITRE
</BOUCLE_gis>
[(#ENV{nouveau}|=={oui}|?{<:info_sans_titre:>,#VAL{id_gis}|_request})]
<//B_gis>
</h1>
</div>
#FORMULAIRE_EDITER_GIS{#ENV{id_gis,0}, #ENV{objet}, #ENV{id_objet}, #ENV{retour,#URL_ECRIRE{gis_tous}}}
</div>
<!--#navigation-->
[(#ENV{id_gis,0}|intval|oui)
<div class="cadre infos cadre-info">
<div class="numero">
<:gis:info_numero_gis:>
<p>[(#ENV{id_gis})]</p>
</div>
</div>
[(#ENV**{id_gis}|gis_form_logo)]
[(#INCLURE{fond=prive/navigation/gis_editer,ajax,env})]
]
<!--/#navigation-->
<!--#extra-->
<!--/#extra-->

15
prive/exec/gis_editer_fonctions.php

@ -1,15 +0,0 @@
<?php
include_spip('inc/presentation');
function gis_form_logo($id_gis){
include_spip('inc/presentation');
$editable = false;
if(autoriser('iconifier', 'gis', $id_gis)){
$editable = true;
}
$iconifier = charger_fonction('iconifier', 'inc');
$icone = $iconifier('id_gis', $id_gis,'gis_editer', false, $editable);
return $icone;
}
?>

5
prive/exec/gis_fonctions.php

@ -1,5 +0,0 @@
<?php
include_spip('inc/presentation');
?>

49
prive/inclure/gis_objet_formulaires.html

@ -1,49 +0,0 @@
<div class="ajax">
<BOUCLE_test(GIS){objet}{id_objet}{0,1}> </BOUCLE_test>
#SET{gis_defaut,nouveau}
<//B_test>
[(#GET{gis_defaut}|=={nouveau}|?{#SET{bloc_gis,editer},#SET{bloc_gis,lier}})]
<div class="actions">
<a href="[(#SELF|parametre_url{bloc_gis,lier}|parametre_url{id_gis,''})]"
class="ajax[(#ENV{bloc_gis,#GET{bloc_gis}}|=={lier}|oui)on]">
<:gis:titre_bloc_points_lies:>
</a><span class="sep"> |
</span><a href="[(#SELF|parametre_url{bloc_gis,rechercher}|parametre_url{id_gis,''})]"
class="ajax[(#ENV{bloc_gis,#GET{bloc_gis}}|=={rechercher}|oui)on]">
<:gis:titre_bloc_rechercher_point:>
</a><span class="sep"> |
</span><a href="[(#SELF|parametre_url{bloc_gis,editer}|parametre_url{id_gis,nouveau})]"
class="ajax[(#ENV{id_gis,#GET{gis_defaut}}|=={nouveau}|oui|et{#ENV{bloc_gis,#GET{bloc_gis}}|=={editer}|oui})on]">
<:gis:titre_bloc_creer_point:>
</a>
</div>
[(#ENV{bloc_gis,#GET{bloc_gis}}|=={editer}|oui)
#FORMULAIRE_EDITER_GIS{#ENV{id_gis,#GET{gis_defaut}},#ENV{objet},#ENV{id_objet},#SELF,'non'}
<script type="text/javascript">
(function($){
$(function(){
// resize + recenter de la map si bloc deplie
$('#pave_gis_depliable').bind('deplie', function(e){
var container = $('#map_editer_gis_#ENV{id_gis,oui}');
form_map.resizeTo(container.width(),container.height());
var lat = $("#champ_lat").val();
var lon = $("#champ_lon").val();
form_map.setCenter(new mxn.LatLonPoint(lat,lon));
});
});
})(jQuery);
</script>
]
[(#ENV{bloc_gis,#GET{bloc_gis}}|=={lier}|oui)
[(#INCLURE{fond=prive/liste/gis_objet,sinon=<:gis:aucun_gis:>,env})]
]
<BOUCLE_gis(GIS){0,1}> </BOUCLE_gis>[(#ENV{bloc_gis,#GET{bloc_gis}}|=={rechercher}|oui)
<div class="ajax">
#FORMULAIRE_RECHERCHER_GIS{#ENV{objet},#ENV{id_objet},#SELF|parametre_url{bloc_gis,lier}}
</div>]</B_gis>
</div>

35
prive/liste/gis.html

@ -1,35 +0,0 @@
[(#SET{defaut_tri,#ARRAY{
id_gis,#ENV{id_gis_sens,1},
objet,#ENV{objet_sens,-1},
multi titre,1,
id_objet,1
}})
]<B_liste_gis>
#ANCRE_PAGINATION
<div class="liste-elements gis ajax">
<table class='spip liste'>
[(#ENV{where}|oui)[(#SET{titre,<:gis:info_liste_gis:>})]]
[<caption><strong class="caption">(#GET{titre,#ENV*{titre,<:gis:info_liste_gis:>}}) ([(#GRAND_TOTAL)])</strong></caption>]
<thead>
<tr class='first_row'>
<th class='titre'>[(#TRI{multi titre,<:info_titre:>,ajax})]</th>
<th class='id_gis id'>[(#TRI{id_gis,<:gis:info_id_objet:>,ajax})]</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_gis(GIS){objet ?}{id_objet ?}{where?}{tri #ENV{order,multi titre},#GET{defaut_tri}}{pagination #ENV{nb,10}}{!lang_select}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='titre'><a href="[(#ID_GIS|generer_url_entite{gis}|parametre_url{retour,#SELF})]" title="<:gis:editer_gis_editer:>">[(#TITRE|sinon{<:ecrire:info_sans_titre:>})]</a></td>
<td class='id'>[(#AUTORISER{modifier,gis,#ID_GIS}|?{
<a href="[(#URL_ECRIRE{gis_editer,id_gis=#ID_GIS})]">#ID_GIS</a>,
#ID_GIS
})]</td>
</tr>
</BOUCLE_liste_gis>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_gis>[
<div class="liste-elements objets_gis"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_liste_gis>

41
prive/liste/gis_objet.html

@ -1,41 +0,0 @@
[(#SET{defaut_tri,#ARRAY{
objet,#ENV{objet_sens,-1},
id_objet,1
}})
]<B_liste_gis>
#ANCRE_PAGINATION
<div class="liste-elements gis_objet">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,<:gis:info_liste_gis_objet:>})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='id_objet'>[(#TRI{id_objet,<:gis:info_id_objet:>,ajax})]</th>
<th class='titre'>[(#TRI{titre,<:info_titre:>,ajax})]</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_gis(GIS){objet=#ENV{objet}}{id_objet=#ENV{id_objet}}{tri #ENV{order,objet},#GET{defaut_tri}}{pagination #ENV{nb,10}}{!lang_select}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='id_objet'>[(#ID_GIS)]</td>
<td class='titre'><a href="[(#SELF|parametre_url{bloc_gis,editer}|parametre_url{id_gis,#ID_GIS})]" title="<:gis:editer_gis_editer:>" class="ajax">[(#TITRE|sinon{<:ecrire:info_sans_titre:>})]</a></td>
<td class='supprimer_lien'>
[(#BOUTON_ACTION{<:gis:bouton_supprimer_lien:>,[(#URL_ACTION_AUTEUR{editer_lien_gis,delier/#ID_GIS/#OBJET/#ID_OBJET,#SELF})],ajax})]
</td>
<td class='supprimer_gis'>
<BOUCLE_autres_liens(GIS_LIENS){id_gis}> </BOUCLE_autres_liens>
[(#TOTAL_BOUCLE|>{1}|non)
[(#BOUTON_ACTION{<:gis:bouton_supprimer_gis:>,[(#URL_ACTION_AUTEUR{supprimer_gis,#ID_GIS,#SELF})],ajax})]
]
</B_autres_liens>
</td>
</tr>
</BOUCLE_liste_gis>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_gis>[
<div class="liste-elements objets_gis"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_liste_gis>

38
prive/liste/objets_gis.html

@ -1,38 +0,0 @@
[(#SET{defaut_tri,#ARRAY{
objet,#ENV{objet_sens,-1},
id_objet,1
}})
]<B_liste_objets>
#ANCRE_PAGINATION
<div class="liste-elements objets_gis">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,<:gis:info_liste_objets_gis:>})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='objet'>[(#TRI{objet,<:gis:info_objet:>,ajax})]</th>
<th class='id_objet'>[(#TRI{id_objet,<:gis:info_id_objet:>,ajax})]</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_objets(GIS gis_liens){id_gis}{tri #ENV{order,objet},#GET{defaut_tri}}{pagination #ENV{nb,10}}{!lang_select}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='objet'>[(#OBJET)]</td>
<td class='id_objet'>[(#ID_OBJET)]</td>
<td class='fiche_objet'>[<a href="(#ID_OBJET|generer_url_entite{#OBJET})"><:gis:info_voir_fiche_objet:></a>]</td>
<td class='supprimer_lien'>
[(#BOUTON_ACTION{
[<:gis:info_supprimer_lien:> (#CHEMIN{images/croix-rouge.gif}|balise_img{<:gis:info_supprimer_lien:>})],
#URL_ACTION_AUTEUR{editer_lien_gis,delier/#ID_GIS/#OBJET/#ID_OBJET,#SELF},
ajax})]
</td>
</tr>
</BOUCLE_liste_objets>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_objets>[
<div class="liste-elements objets_gis"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_liste_objets>

15
prive/navigation/gis_editer.html

@ -1,15 +0,0 @@
<B_liste_objets>
#ANCRE_PAGINATION
<div class="liste-elements objets_gis">
#SET{total,#GRAND_TOTAL}
<h3>[(#GET{total}|singulier_ou_pluriel{gis:titre_nombre_utilisation,gis:titre_nombre_utilisations})]</h3>
<ul class="liste_items">
<BOUCLE_liste_objets(GIS gis_liens){id_gis}{tri #ENV{order,objet},#GET{defaut_tri}}{pagination #ENV{nb,10}}{!lang_select}>
<li class="item #OBJET">
<a href="[(#ID_OBJET|generer_url_entite{#OBJET})]">[(#INFO_TITRE{#OBJET,#ID_OBJET}) ](#OBJET ##ID_OBJET)</a>
</li>
</BOUCLE_liste_objets>
</ul>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_objets>

20
prive/objets/contenu/gis.html

@ -0,0 +1,20 @@
<BOUCLE_gis(GIS){id_gis=#ID}>
<div class="champ contenu_descriptif[(#DESCRIPTIF|non)vide]">
#DESCRIPTIF
</div>
<div class="champ contenu_adresse[(#ADRESSE|non)vide]">
#ADRESSE
</div>
<div class="champ contenu_region[(#REGION|non)vide]">
#REGION
</div>
<div class="champ contenu_code_postal[(#CODE_POSTAL|non)vide]">
#CODE_POSTAL
</div>
<div class="champ contenu_ville[(#VILLE|non)vide]">
#VILLE
</div>
<div class="champ contenu_pays[(#PAYS|non)vide]">
#PAYS [((#CODE_PAYS))]
</div>
</BOUCLE_gis>

18
prive/objets/infos/gis.html

@ -0,0 +1,18 @@
<BOUCLE_gis(GIS){id_gis=#ENV{id}}>
<div class='infos'>
<div class='numero'><:gis:info_numero_gis:><p>#ID_GIS</p></div>
#INCLURE{fond=prive/objets/liste/objets_gis_simple, id_gis=#ID_GIS, env}
[(#AUTORISER{supprimer,gis,#ID_GIS}|oui)
[(#URL_ACTION_AUTEUR{
supprimer_gis,
#ID_GIS,
#URL_ECRIRE{gis_tous}
}|icone_horizontale{<:gis:bouton_supprimer_gis:>,gis-24,del}
)]
]
</div>
</BOUCLE_gis>

55
prive/objets/liste/gis_associer.html

@ -0,0 +1,55 @@
[(#SET{defaut_tri,#ARRAY{
multi titre,1,
}})
]
#SET{exclus,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}
#SET{debut,#ENV{debutgisa,#EVAL{_request("debutgisa");}}}
<input type="hidden" name="debutgisa" value="#GET{debut}" />
<B_liste_gis>
[(#REM) En cas de pagination indirecte @32, il faut refaire le set car la boucle
a mis a jour la valeur avec la page reelle]
#SET{debut,#ENV{debutgisa,#EVAL{_request("debutgisa");}}}
#ANCRE_PAGINATION
[<h3><:info_resultat_recherche:> &laquo;(#ENV{recherche})&raquo;</h3>]
<div class="liste-objets liste-objets-associer gis">
<table class='spip liste'>
[<caption><span class="caption"><strong>(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_gis,gis:info_nb_gis}})</strong>
<span class="recherche">
<label for="recherche-#ENV{id}"><:info_rechercher_02:></label>
<input type="text" class="recherche" name="recherche" id="recherche-#ENV{id}" value="#ENV{recherche}" />
<input type="submit" class="tout_voir" name="tout_voir" value="<:info_tout_afficher:>" />
</span>
</span>
</caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='titre' scope='col'>[(#TRI{multi titre,<:info_titre:>,ajax})]</th>
<th class='action' scope='col'>&nbsp;</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_gis(GIS){!id_gis IN #GET{exclus}}{tout}{where?}{recherche?}{tri #ENV{par,multi titre},#GET{defaut_tri}}{pagination #ENV{nb,10} gisa}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='picto'>[(#CHEMIN_IMAGE{gis-16.png}|balise_img)]</td>
<td class='titre principale'>[(#LOGO_GIS|image_reduire{20,20})]<a href="[(#ID_GIS|generer_url_entite{gis})]"
title="<:gis:texte_voir_gis:>">[(#TITRE|sinon{<:ecrire:info_sans_titre:>})]</a></td>
<td class='action'><button class="button" name="ajouter_lien[gis-#ID_GIS-#OBJET-#ID_OBJET]" value="+"><:gis:lien_ajouter_gis:> [(#CHEMIN_IMAGE{ajouter-12.png}|balise_img{'+'})]</button></td>
</tr>
</BOUCLE_liste_gis>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_gis>
[(#ENV{recherche}|oui)
<div class="liste-objets liste-objets-associer gis caption-wrap">
<span class="caption"><strong>[(#VAL{gis:info_recherche_gis_zero}|_T{#ARRAY{cherche_gis,#ENV{recherche}}})]</strong>
<span class="recherche">
<label for="recherche-#ENV{id}"><:info_rechercher_02:></label>
<input type="text" class="recherche" name="recherche" id="recherche-#ENV{id}" value="#ENV{recherche}" />
<input type="submit" class="tout_voir" name="tout_voir" value="<:info_tout_afficher:>" />
</span>
</span>
</div>
]<//B_liste_gis>

39
prive/objets/liste/gis_lies.html

@ -0,0 +1,39 @@
[(#SET{defaut_tri,#ARRAY{
multi titre,1,
id_gis,1
}})
]
#SET{selection,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}
<input type="hidden" name="debutgisl" value='#ENV{debutgisl,#EVAL{_request("debutgisl");}}' />
<B_liste_gis>
#ANCRE_PAGINATION
<div class="liste-objets liste-objets-lies gis">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_gis,gis:info_nb_gis}}) #AIDER{artgis}</strong></caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='titre' scope='col'>[(#TRI{multi titre,<:info_titre:>,ajax})]</th>
<th class='action' scope='col'>&nbsp;</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_gis(GIS){id_gis IN #GET{selection}}{where?}{tri #ENV{par,multi titre},#GET{defaut_tri}}{pagination #ENV{nb,10} gisl}{!lang_select}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][(#ID_GIS|=={#ENV{id_lien_ajoute}}|oui)append]">
<td class='picto'>[(#CHEMIN_IMAGE{gis-16.png}|balise_img)]</td>
<td class='titre principale'>[(#LOGO_GIS|image_reduire{20,20})]<a href="[(#ID_GIS|generer_url_entite{gis})]"
title="<:gis:texte_voir_gis:>">[(#TITRE|sinon{<:ecrire:info_sans_titre:>})]</a></td>
<td class='action'><button class="button link delete" name="supprimer_lien[gis-#ID_GIS-#OBJET-#ID_OBJET]" value="X"><:gis:info_supprimer_lien:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})]</button></td>
</tr>
</BOUCLE_liste_gis>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
[(#GRAND_TOTAL|>{3}|oui)<div class="action"><button class="button link" name="supprimer_lien#EVAL{chr(91)}gis-*-#OBJET-#ID_OBJET#EVAL{chr(93)}" value="X"><:gis:info_supprimer_liens:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})]</button></div>]
[(#INCLURE{fond=modeles/carte_gis_preview,id_objet,objet})]
</div>
</B_liste_gis>
<div class="liste-objets liste-objets-lies gis caption-wrap">
<strong class="caption">[(#ENV*{titre,<:gis:info_aucun_gis:>}) ]#AIDER{artgis}</strong>
</div>
<//B_liste_gis>

5
prive/navigation/gis_tous.html → prive/objets/liste/gis_tous.html

@ -2,7 +2,7 @@
[(#ANCRE_PAGINATION)]
<div class="menu points">
<ul class="liste_items">
<BOUCLE_gis(GIS){par titre}{pagination 5}>
<BOUCLE_gis(GIS){par titre}{pagination #ENV{nb,5}}>
<li class="item">
<h3 class="titre">
<a href="[(#URL_ECRIRE{gis,id_gis=#ID_GIS})]">#TITRE</a>
@ -18,7 +18,7 @@
<p class='actions'>
<span class="afficher" id="afficher_[(#ID_GIS)]">&#91;<a href="[(#URL_ECRIRE{gis,id_gis=#ID_GIS})]">Afficher</a>&#93;</span>
[(#AUTORISER{modifier,gis,#ID_GIS}|oui)
<span class='lien_modifier'>&#91;<a href='[(#URL_ECRIRE{gis_editer,id_gis=#ID_GIS})]'><:gis:editer_gis_editer:></a>&#93;</span>]
<span class='lien_modifier'>&#91;<a href='[(#URL_ECRIRE{gis_edit}|parametre_url{id_gis,#ID_GIS}|parametre_url{redirect,#SELF|url_absolue})]'><:gis:editer_gis_editer:></a>&#93;</span>]
</p>
</li>
</BOUCLE_gis>
@ -37,4 +37,3 @@
</script>
</B_gis>
</div>
[(#URL_ECRIRE{gis_editer}|parametre_url{nouveau,oui}|icone_verticale{<:gis:editer_gis_nouveau:>,#CHEMIN{images/gis-24.png},new,#LANG_RIGHT})]

41
prive/objets/liste/objets_gis.html

@ -0,0 +1,41 @@
[(#SET{defaut_tri,#ARRAY{
objet,#ENV{objet_sens,-1},
id_objet,1
}})
]<B_liste_objets>
#ANCRE_PAGINATION
<div class="liste-objets objets_gis">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_objet_gis,gis:info_nb_objets_gis}})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='objet' scope='col'>[(#TRI{objet,<:gis:info_objet:>,ajax})]</th>
<th class='id_objet' scope='col'>[(#TRI{id_objet,<:gis:info_id_objet:>,ajax})]</th>
<th class='titre principale' scope='col'><:gis:titre_objet:></th>
<th></th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_objets(GIS gis_liens){id_gis}{tri #ENV{order,objet},#GET{defaut_tri}}{pagination #ENV{nb,10}}{!lang_select}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='picto'>[(#OBJET|objet_icone{16})]</td>
<td class='objet'>[(#OBJET|objet_info{texte_objet}|_T)]</td>
<td class='id_objet'>[(#ID_OBJET)]</td>
<td class='titre principale'><a href="[(#ID_OBJET|generer_url_entite{#OBJET})]"
title="<:gis:info_voir_fiche_objet:> <:info_numero_abbreviation|attribut_html:> #ID_OBJET">#INFO_TITRE{#OBJET,#ID_OBJET}</a></td>
<td class='action'>
[(#BOUTON_ACTION{
<:gis:info_supprimer_lien:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})],
#URL_ACTION_AUTEUR{editer_lien_gis,delier/#ID_GIS/#OBJET/#ID_OBJET,#SELF},
ajax})]
</td>
</tr>
</BOUCLE_liste_objets>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_objets>[
<div class="liste-elements objets_gis"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_liste_objets>

16
prive/objets/liste/objets_gis_simple.html

@ -0,0 +1,16 @@
<B_liste_objets>
#ANCRE_PAGINATION
<div class="liste-elements objets_gis">
#SET{total,#GRAND_TOTAL}
<h3>[(#GET{total}|singulier_ou_pluriel{gis:info_1_objet_gis,gis:info_nb_objets_gis})]</h3>
<ul class="liste_items">
<BOUCLE_liste_objets(GIS gis_liens){id_gis}{tri #ENV{order,objet},#GET{defaut_tri}}{pagination #ENV{nb,10}}{!lang_select}>
<li class="item #OBJET">
<a href="[(#ID_OBJET|generer_url_entite{#OBJET})]">[(#INFO_TITRE{#OBJET,#ID_OBJET}) ]([(#OBJET|objet_info{texte_objet}|_T)] <:info_numero_abbreviation|attribut_html:>#ID_OBJET)</a>
</li>
</BOUCLE_liste_objets>
</ul>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_objets>

23
prive/squelettes/contenu/gis.html

@ -0,0 +1,23 @@
<BOUCLE_gis(GIS){id_gis}{tout}{si #ENV{exec}|=={gis}}>
[(#BOITE_OUVRIR{[
[(#AUTORISER{modifier,gis,#ID_GIS})
[(#URL_ECRIRE{gis_edit,id_gis=#ID_GIS}|icone_verticale{<:gis:texte_modifier_gis:>,gis,edit,right ajax preload})]
]
<h1>(#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{gis-24.png}|balise_img{gis,cadre-icone})]</h1>
],simple fiche_objet})]
[(#INCLURE{fond=modeles/carte_gis_preview,id_gis})]
<div id="wysiwyg">
<INCLURE{fond=prive/objets/contenu/gis,id=#ID_GIS} />
</div>
<INCLURE{fond=prive/objets/liste/objets_gis,sinon=<:gis:aucun_objet:>,env,ajax} />
#BOITE_FERMER
#PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,gis,id,#ID_GIS},data,'<div class="nettoyeur"></div>'}}
</BOUCLE_gis>
[(#ENV**{exec}|=={gis_edit}|?{#INCLURE{fond=prive/squelettes/contenu/gis_edit,redirect='',env,retourajax=oui},#REM|sinon_interdire_acces})]
<//B_gis>

36
prive/squelettes/contenu/gis_edit.html

@ -0,0 +1,36 @@
[(#ID_GIS|oui)
[(#AUTORISER{modifier,gis,#ID_GIS}|sinon_interdire_acces)]
][(#ID_GIS|non)
[(#AUTORISER{creer,gis,#ID_GIS,'','',#ARRAY{associer_objet,#ENV{associer_objet}}}|sinon_interdire_acces)]
]
#SET{redirect,#ENV{redirect,#ENV{id_gis}|?{#URL_ECRIRE{gis,id_gis=#ID_GIS},#URL_ECRIRE{gis_tout}}}}
#SET{objet, #ENV{objet, ''}}
#SET{id_objet, #ENV{id_objet, 0}}
[(#ENV{associer_objet}|oui)
[(#SET{array_objet, #ENV{associer_objet}|explode{'|'}})]
#SET{objet, #GET{array_objet}|table_valeur{0}}
#SET{id_objet, #GET{array_objet}|table_valeur{1}}
]
<div class='cadre-formulaire-editer'>
<div class="entete-formulaire">
[(#ID_GIS|oui)
[(#GET{redirect}|icone_verticale{<:icone_retour:>,gis,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})]
]
[
[(#ID_GIS|?{<:gis:texte_modifier_gis:>,<:gis:texte_creer_gis:>})]
<h1>(#ENV{titre,#INFO_TITRE{gis,#ID_GIS}|sinon{<:gis:titre_nouveau_point:>}})</h1>
]
</div>
#SET{redirect,#ENV{redirect,#ID_GIS|generer_url_entite{gis}}}
[(#ENV{retourajax,''}|oui)
#SET{redirect,'javascript:if (window.jQuery) jQuery(".entete-formulaire .retour a").followLink();'}
<div class="ajax">
]
[(#FORMULAIRE_EDITER_GIS{#ENV{id_gis,oui},#GET{objet},#GET{id_objet},#GET{redirect},'',#ENV{associer_objet}})]
[(#ENV{retourajax,''}|oui)
</div>
<script type="text/javascript">/*<!\[CDATA\[*/reloadExecPage('#ENV{exec}','#navigation,#chemin');/*\]\]>*/</script>
]
</div>

6
prive/exec/gis_tous.html → prive/squelettes/contenu/gis_tous.html

@ -2,9 +2,3 @@
[(#REM)<p><:gis:editer_gis_explication:></p>]
[(#INCLURE{fond=modeles/carte_gis,id_carte_gis=_all})]
<div class="nettoyeur" />
<!--#navigation-->
[(#INCLURE{fond=prive/navigation/gis_tous,ajax,env})]
<!--/#navigation-->

8
prive/squelettes/hierarchie/gis.html

@ -0,0 +1,8 @@
<a href="#URL_ECRIRE{gis_tous}">
<:gis:gis_pluriel:>
</a> &gt;
<BOUCLE_point(GIS){id_gis}{0,1}>
<strong class="on">#TITRE</strong>
</BOUCLE_point>
<strong class="on"><:gis:titre_nouveau_point:></strong>
<//B_point>

1
prive/squelettes/hierarchie/gis_edit.html

@ -0,0 +1 @@
<INCLURE{fond=prive/squelettes/hierarchie/gis,env} />

9
prive/squelettes/navigation/gis_edit.html

@ -0,0 +1,9 @@
[(#ID_GIS|oui)
#BOITE_OUVRIR{'','info'}
#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','gis','id',#ID_GIS}}}
#BOITE_FERMER
<div class="ajax">
#FORMULAIRE_EDITER_LOGO{'gis',#ID_GIS,'',#ENV**}
</div>
]

3
prive/squelettes/navigation/gis_tous.html

@ -0,0 +1,3 @@
#INCLURE{fond=prive/objets/liste/gis_tous,env}
[(#URL_ECRIRE{gis_edit}|parametre_url{nouveau,oui}|icone_verticale{<:gis:editer_gis_nouveau:>,#CHEMIN{images/gis-24.png},new,#LANG_RIGHT})]

10
prive/style_prive_plugin_gis.html

@ -15,13 +15,3 @@
.points .liste_items .geo { margin: 5px 0 0; color: #666; }
.points .liste_items .geo abbr { border: 0; }
.points .liste_items p.actions { font-size: 0.9em; margin: 5px 0 0; }
/* sur les fiches objets */
.articles .fiche_objet #pave_gis { }
#page .liste-elements.gis_objet .caption,#page .liste-elements.gis .caption{background-image: url("#CHEMIN{images/gis-24.png}");}
#pave_gis_depliable .formulaire_rechercher_gis{margin:1em 0;}
#pave_gis_depliable .formulaire_editer_gis{margin:0 0 1em 0;}
/* edition d'un point */
.formulaire_editer_gis { }

Loading…
Cancel
Save