Browse Source

Jouer avec les roles sur les POIs de GIS

master
kent1@arscenic.info 7 years ago
commit
3969693eaf
  1. 10
      .gitattributes
  2. 27
      base/roles_gis.php
  3. 3
      gis_critere.html
  4. 12
      lang/gis_roles_fr.php
  5. 20
      paquet.xml
  6. 48
      prive/objets/liste/gis_lies.html
  7. 57
      prive/objets/liste/gis_roles_associer.html
  8. 47
      prive/objets/liste/gis_roles_lies.html
  9. BIN
      prive/themes/spip/images/gis-poi-types.png
  10. 47
      roles_gis_administrations.php

10
.gitattributes vendored

@ -0,0 +1,10 @@
* text=auto !eol
base/roles_gis.php -text
/gis_critere.html -text
lang/gis_roles_fr.php -text
/paquet.xml -text
prive/objets/liste/gis_lies.html -text
prive/objets/liste/gis_roles_associer.html -text
prive/objets/liste/gis_roles_lies.html -text
prive/themes/spip/images/gis-poi-types.png -text
/roles_gis_administrations.php -text

27
base/roles_gis.php

@ -0,0 +1,27 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
function roles_gis_declarer_tables_objets_sql($tables){
array_set_merge($tables, 'spip_gis', array(
"roles_colonne" => "role",
"roles_titres" => array(
'action' => 'gis_roles:role_action',
'informatif' => 'gis_roles:role_informatif',
),
"roles_objets" => array(
'cartes' => array(
'choix' => array('action','informatif'),
'defaut' => 'action'
)
)
));
$tables['spip_gis']['champs_critere_gis'][] = 'gis_liens.role as role_gis';
return $tables;
}
function roles_gis_declarer_tables_auxiliaires($tables) {
$tables['spip_gis_liens']['field']['role'] = "varchar(30) NOT NULL DEFAULT ''";
$tables['spip_gis_liens']['key']['PRIMARY KEY'] = "id_gis,id_objet,objet,role";
return $tables;
}

3
gis_critere.html

@ -0,0 +1,3 @@
<BOUCLE_cartes(CARTES){gis}>
#TITRE_GIS
</BOUCLE_cartes>

12
lang/gis_roles_fr.php

@ -0,0 +1,12 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// G
'role_action' => 'Action (ouvre un popup)',
'role_informatif' => 'Informatif (n\'est qu\'affiché sur la carte)'
);

20
paquet.xml

@ -0,0 +1,20 @@
<paquet
prefix="roles_gis"
categorie="edition"
version="1.0.0"
etat="dev"
compatibilite="[3.0.0;3.1.*]"
logo="prive/themes/spip/images/gis-poi-types.png"
documentation=""
schema="1.0.0"
>
<nom>GIS - Rôles de POIs</nom>
<auteur lien='http://www.kent1.info'>kent1</auteur>
<licence>GNU/GPL</licence>
<necessite nom="gis" compatibilite="[4.34.0;]" />
<necessite nom="roles" compatibilite="[1.8.2;]" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/roles_gis.php" />
<pipeline nom="declarer_tables_auxiliaires" inclure="base/roles_gis.php" />
</paquet>

48
prive/objets/liste/gis_lies.html

@ -0,0 +1,48 @@
[(#SET{defaut_tri,#ARRAY{
multi titre,1,
id_gis,1
}})
]
#SET{selection,#VAL{gis}|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}})</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='role' scope='col'><:roles:role_titre:></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='role'>
[(#INCLURE{fond=formulaires/inc-editer_liens_actions_roles,env,objet_source=gis,_objet_lien=gis,id=#ID_GIS,cle=gis-#ID_GIS-#OBJET-#ID_OBJET})]
<BOUCLE_roles(gis_liens){id_gis}{objet}{id_objet}{par role}{", "}>
[(#ROLE|role{gis})]</BOUCLE_roles>
</td>
<td class='action'>
[(#ENV{editable}|oui)
<button type="submit" class="button link delete" name="supprimer_lien\[gis-#ID_GIS-#ENV{objet}-#ENV{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 type="submit" 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:>}) ]</strong>
</div>
<//B_liste_gis>

57
prive/objets/liste/gis_roles_associer.html

@ -0,0 +1,57 @@
[(#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='role' scope='col'><:roles:role_titre:></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,5} 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='role'>[(#INCLURE{fond=formulaires/inc-editer_liens_roles,env,id=#ID_AUTEUR,cle=auteur-#ID_AUTEUR-#OBJET-#ID_OBJET})]</td>
<td class='action'><button type="submit" 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>

47
prive/objets/liste/gis_roles_lies.html

@ -0,0 +1,47 @@
[(#SET{defaut_tri,#ARRAY{
multi titre,1,
id_gis,1
}})
]
#SET{selection,#VAL{gis}|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}})</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='role' scope='col'><:roles:role_titre:></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='role'>
[(#INCLURE{fond=formulaires/inc-editer_liens_actions_roles,env,objet_source=gis,_objet_lien=gis,id=#ID_GIS,cle=gis-#ID_GIS-#OBJET-#ID_OBJET})]
<BOUCLE_roles(gis_liens){id_gis}{objet}{id_objet}{par role}{", "}>
[(#ROLE|role{gis})]</BOUCLE_roles>
</td>
<td class='action'>
[(#ENV{editable}|oui)
<button type="submit" class="button link delete" name="supprimer_lien\[gis-#ID_GIS-#ENV{objet}-#ENV{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>]
[(#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:>}) ]</strong>
</div>
<//B_liste_gis>

BIN
prive/themes/spip/images/gis-poi-types.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

47
roles_gis_administrations.php

@ -0,0 +1,47 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
function roles_gis_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(
// supprimer la clé primaire actuelle pour pouvoir en changer en ajoutant la colonne rôle
array('sql_alter', "TABLE spip_gis_liens DROP PRIMARY KEY"),
// ajout de la colonne role
array('maj_tables', array('spip_gis_liens')),
// la nouvelle colonne est la, mettre sa nouvelle clé primaire
array('sql_alter', "TABLE spip_gis_liens ADD PRIMARY KEY (id_gis,id_objet,objet,role)"),
// on passe par défaut tous les liens gis en rôle : action
array('sql_updateq', 'spip_gis_liens', array('role' => 'action'),array('role=' .sql_quote('')))
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function roles_gis_vider_tables($nom_meta_base_version) {
// tant qu'il existe des doublons, on supprime une ligne doublonnée
// sinon on ne pourra pas modifier la cle primaire ensuite
// cet algo est certainement a optimiser
while ($doublons = sql_allfetsel(
array('id_gis', 'id_objet', 'objet', 'role'),
array('spip_gis_liens'),
'', 'id_gis,id_objet,objet', '', '', 'COUNT(*) > 1'))
{
foreach ($doublons as $d) {
$where = array();
foreach ($d as $cle=>$valeur) {
$where[] = "$cle=".sql_quote($valeur);
}
sql_delete('spip_gis_liens', $where);
}
}
// supprimer la clé primaire, la colonne rôle, et remettre l'ancienne clé primaire
sql_alter("TABLE spip_gis_liens DROP PRIMARY KEY");
sql_alter("TABLE spip_gis_liens DROP COLUMN role");
sql_alter("TABLE spip_gis_liens ADD PRIMARY KEY (id_gis,id_objet,objet)");
effacer_meta($nom_meta_base_version);
}
Loading…
Cancel
Save