on remet le trunk (hop);

master
cyril@cym.fr 10 years ago
commit 0df53e5fec

28
.gitattributes vendored

@ -0,0 +1,28 @@
* text=auto !eol
/body-eval_benchmark.html -text
content/ajout_mc_site.html -text
content/eval_benchmark.html -text
content/rubrique-eval_benchmark.html -text
content/rubrique-eval_benchmark.xml -text
controleurs/ctags.html -text
css/eval_benchmark.css -text
/eval_benchmark.html -text
/eval_benchmark_administrations.php -text
/eval_benchmark_fonctions.php -text
/eval_benchmark_pipelines.php -text
formulaires/configurer_eval_benchmark.html -text
img/eval_benchmark-48.png -text
img/manque_logo.jpg -text
img/sortie-128.png -text
img/sortie-16.png -text
img/sortie-24.png -text
img/sortie_noir-24.png -text
img/wait.gif -text
lang/eval_benchmark_fr.php -text
lang/paquet-eval_benchmark_fr.php -text
liste/sites-critique.html -text
/paquet.xml -text
prive/squelettes/contenu/configurer_eval_benchmark.html -text
saisies/ctags.html -text
/structure-eval_benchmark.html -text
vues/ctags.html -text

@ -0,0 +1,3 @@
<body>
<INCLURE{fond=content/#ENV{type-page},env}>
</body>

@ -0,0 +1,15 @@
#FIL_ARIANE
<h2>Ajouter des mots clé aux sites</h2>
<ul>
<BOUCLE_sites(SYNDIC){par id_syndic}>
<li>
<span class="#EDIT{ctags}">
<BOUCLE_mc(MOTS){id_syndic}>#TITRE</BOUCLE_mc>[mot clé] <//B_mc>
</span>
- #ID_SYNDIC - #NOM_SITE
</li>
</BOUCLE_sites>
</ul>

@ -0,0 +1,86 @@
<iframe name='eval_benchmark' id='eval_benchmark' src='#ENV{url}'
style='position:absolute; top:0px; left:0px; width:100%; height:100%;
z-index:0' frameborder='no'>
</iframe>
<div id="evaluation_notation">
[<div id="evaluation_retour" title="<:eval_benchmark:bouton_sortie|attribut_html:>">
<a href="(#ENV{retour})">
[(#CHEMIN{img/sortie_noir-24.png}|balise_img{<:eval_benchmark:bouton_sortie:>})]
</a>
</div>]
<BOUCLE_s(SITES){id_syndic}>
#SET{id_evaluation,''}
[(#REM) retrouver l'évaluation à appliquer ]
<BOUCLE_e(EVALUATIONS){id_rubrique}>
#SET{id_evaluation,#ID_EVALUATION}
</BOUCLE_e>
[(#GET{id_evaluation}|oui)
<div class='ajax'>#FORMULAIRE_EVALUATION{#GET{id_evaluation}}</div>
]
[(#GET{id_evaluation}|non)
<p class='error'>Vous n'avez pas lié d'évaluation à la rubrique !</p>
]
</BOUCLE_s>
</div>
<style type='text/css'>
#evaluation_notation {
position:absolute;
right: 30px;
top: 10px;
width: 390px;
padding: 5px;
border-radius:5px;
background-color: #888;
z-index:10000;
box-shadow:0px 0px 10px #fff, 0px 0px 10px #fff, 0px 0px 10px #fff;
}
#evaluation_notation form {
padding: 0 10px 0 0;
overflow:auto;
height: 300px;
}
#evaluation_notation .handle {
cursor:move;
}
#evaluation_notation form textarea {
width: 95%;
}
/* bouton de retour */
#evaluation_retour {
position: absolute;
right: 25px;
top: 20px;
z-index: 1000;
}
/* repasser dessus bootstrap */
#evaluation_notation .formulaire_spip .editer {
padding: .5em 0;
margin:0;
}
#evaluation_notation .formulaire_spip .boutons {
margin: 0 0 -1.42857em;
}
#evaluation_notation .formulaire_spip {
margin-bottom:0;
border-radius:5px;
}
</style>
<script type='text/javascript'>
(function($){
$(document).ready(function(){
$('#evaluation_notation').draggable({
handle: ".formulaire_spip>h3" /* icone déplacement sur le titre */
/* cancel: "ul" *//* pas de déplacement dans le ul du formulaire */
}).find(".formulaire_spip>h3").addClass('handle');
});
})(jQuery);
</script>

@ -0,0 +1,27 @@
<BOUCLE_r(RUBRIQUES){id_rubrique}>
<BOUCLE_e(spip_evaluations_liens){id_objet==#ID_RUBRIQUE}{objet=='rubrique'}>
#SET{id_evaluation,#ID_EVALUATION}
<h1 class="#EDIT{titre}">#TITRE (évaluation N&deg;#GET{id_evaluation})</h1>
<BOUCLE_accueil(ARTICLES){id_rubrique}{id_article_accueil}>
[<h3 class="#EDIT{descriptif}">(#DESCRIPTIF)</h3>]
<div class="#EDIT{texte}">#TEXTE</div>
</BOUCLE_accueil>
[(#REM) Les sites à analyser ]
<INCLURE{fond=liste/sites-critique,
env,ajax,
id_article_accueil=#ID_ARTICLE_ACCUEIL,
id_evaluation=#GET{id_evaluation},
titre=<:eval_benchmark:sites_critique:>,
retour=#SELF
}/>
</BOUCLE_e>
<p><:eval_benchmark:erreur_aucune_evaluation_trouvee:>
<br /><:eval_benchmark:erreur_lien_rubrique_evaluation{id_rubrique=#ID_RUBRIQUE}:></p>
<//B_e>
</BOUCLE_r>

@ -0,0 +1,5 @@
<composition>
<nom>Rubrique critique de sites - Benchmark</nom>
<description>Permet d'évaluer les sites de la rubrique</description>
<icon>img/rubrique-eval_benchmark.png</icon>
</composition>

@ -0,0 +1,11 @@
#CACHE{0}
#SET{mots,#ARRAY}
<BOUCLE_mots_actifs(MOTS){id_groupe=1}{id_syndic}>
#SET_PUSH{mots,#ID_MOT}
</BOUCLE_mots_actifs>
<ul>
[(#SAISIE{ctags, content_#ENV{key}_ctags, id_groupe=1, class=crayons-active, valeur=#GET{mots},
label=<:eval_benchmark:label_categorie:>})]
</ul>

@ -0,0 +1,29 @@
/*
.composition_eval_benchmark #content {width:auto}
.composition_eval_benchmark #extra1,
.composition_eval_benchmark #extra2,
.composition_eval_benchmark #aside {display:none}
*/
.liste.sites-critique dl {width:22.000%;margin-right:1%;margin-bottom:1%;padding:1%;height:200px; overflow:hidden;float:left;position:relative}
.liste.sites-critique dd.titre {width:100%;float:none;padding:1%;text-align:center;font-size:1.2em}
.liste.sites-critique dd.vignette {float:none;text-align:center;margin-bottom:0.5em;}
.liste.sites-critique dd.vignette .spip_logos {float:none;margin:0}
.en_cours {
width:200px;
height:200px;
background-image:url(../img/wait.gif);
margin:auto;
margin-top:25%;
}
.liste.sites-critique dd.votes,
.liste.sites-critique dd.a_vote {position:absolute;top:0; width:33.33%;max-height:2em;}
.liste.sites-critique dd.votes {background-color:#82C93A;right:0}
.liste.sites-critique dd.a_vote {background-color:#c3d9ff;left:0}
/* on cache le lable de la saisie ctags */
.crayon-html .saisie_ctags label {display:none;}
.crayon-html .saisie_ctags {padding-left:10px;}

@ -0,0 +1 @@
<INCLURE{fond=structure-eval_benchmark}{env}{type-page=#ENV{page,#ENV{type-page}}}{composition=#ENV{composition,''}}>

@ -0,0 +1,23 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
function eval_benchmark_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(
// vérifier que la gestion d'un annuaire de sites est active
array('ecrire_meta', 'activer_sites', 'oui'),
// vérifie qu'on a bien les urls arborescentes
array('ecrire_meta', 'type_urls','arbo')
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function eval_benchmark_vider_tables($nom_meta_base_version) {
effacer_meta($nom_meta_base_version);
}
?>

@ -0,0 +1,43 @@
<?php
// obtenir la liste des identifiants de mots cles lies a notre objet...
function valeur_champ_ctags($table, $id, $champ) {
$valeurs = sql_allfetsel("m.id_mot", "spip_mots AS m, spip_mots_${table}s AS ma",
array("m.id_groupe=1", "m.id_mot = ma.id_mot", "ma.id_${table}=".sql_quote($id)));
$valeurs = array_map('array_shift', $valeurs);
return $valeurs;
}
// la revision du crayon ctags doit supprimer ou ajouter des liaisons de mots cles
function ctags_revision($id_objet, $colonnes, $type_objet){
// actuellement en bdd
$old = valeur_champ_ctags($type_objet, $id_objet, 'ctags');
// ceux qu'on veut maintenant
$new = explode(',', $colonnes['ctags']);
// les mots à supprimer
$del = array_diff($old, $new);
// les mots à ajouter
$add = array_diff($new, $old);
// actions !
if ($del) {
sql_delete("spip_mots_${type_objet}s",
array(sql_in("id_mot", $del), "id_$type_objet=$id_objet"));
}
if ($add) {
$adds = array();
foreach ($add as $a) {
$adds[] = array(
"id_$type_objet" => $id_objet,
"id_mot" => $a,
);
}
sql_insertq_multi("spip_mots_${type_objet}s", $adds);
}
return true;
}
?>

@ -0,0 +1,56 @@
<?php
function eval_benchmark_insert_head_css($flux){
$flux .= '<link rel="stylesheet" href="'.find_in_path('css/eval_benchmark.css').'" type="text/css" media="all" />';
return $flux;
}
function eval_benchmark_jqueryui_plugins($scripts){
$scripts[] = "jquery.ui.draggable";
return $scripts;
}
/**
* Pouvoir lier une évaluation à une rubrique ayant la composition 'eval_benchmark'
*
* @pipeline affiche_milieu
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function eval_benchmark_affiche_milieu($flux) {
$texte = "";
$e = trouver_objet_exec($flux['args']['exec']);
if (!$e['edition'] AND in_array($e['type'], array('rubrique'))) {
$id_rubrique = $flux['args'][$e['id_table_objet']];
if (isset($flux['args']['contexte']['composition'])) {
$composition = $flux['args']['contexte']['composition'];
} else {
$composition = sql_getfetsel('composition', 'spip_rubriques', 'id_rubrique=' . $id_rubrique);
}
if ($composition == 'eval_benchmark') {
$texte .= recuperer_fond('prive/objets/editer/liens', array(
'table_source' => 'evaluations',
'objet' => $e['type'],
'id_objet' => $id_rubrique
));
}
}
if ($texte) {
if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
$flux['data'] = substr_replace($flux['data'],$texte,$p,0);
else
$flux['data'] .= $texte;
}
return $flux;
}
?>

@ -0,0 +1,17 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:eval_benchmark:cfg_titre_parametrages:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
[<ul>(#SAISIE{evaluations, eval_benchmark, label=<:evaluations:selectionner_evaluation:>})</ul>]
<input type="hidden" name="_meta_casier" value="eval_benchmark" />
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
</form>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

@ -0,0 +1,42 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/compositions/trunk/lang/
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
// B
'bouton_sortie' => "Revenir à la liste des sites",
// C
'cfg_titre_parametrages' => "Paramétrages du plugin Evaluation de sites",
// E
'erreur_aucune_evaluation_trouvee' => "Aucune évaluation trouvée.",
'erreur_lien_rubrique_evaluation' => "Aucune évaluation n'est pour l'instant liée à la rubrique @id_rubrique@.",
// I
'info_chargement_en_cours' => "Le site @site@ est en cours de chargement,<br />merci de bien vouloir patienter...",
// S
'sites_critique' => "Sites évalués",
// L
'label_lien_direct' => "visiter",
'label_aucune_eval' => "Aucun avis.",
'label_evaluations' => "avis.",
'label_a_vote_oui' => "a voté",
'label_a_vote_non' => "voter !",
'label_categorie' => "Catégorie",
// T
'title_aucun_avis' => "Aucun avis pour l'instant. Visiter le site et donner votre avis",
'title_donner_votre_avis' => "Visiter le site et donner votre avis",
'title_modifier_votre_avis' => "Visiter le site à nouveau, et modifier ou compléter votre évaluation ",
'title_voir_les_avis' => "Voir tous les avis",
'title_voir_en_direct' => "Visiter le site en direct, sans formulaire d'évaluation.",
);
?>

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/compositions/trunk/lang/
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// R
'eval_benchmark_nom' => "Critique de sites - Benchmarks",
'eval_benchmark_slogan' => "Permet d'évaluer des objets SPIP de type site web",
'eval_benchmark_description' => "Ce plugin s'utilise avec le plugin Evaluations; il propose une composition de rubrique listant tous les sites d'une branche.",
);
?>

@ -0,0 +1,93 @@
[(#SET{votant,[(#SESSION{id_auteur})]})]
[(#SET{id_evaluation,#ENV{id_evaluation}})]
[(#SET{a_vote,''})]
[(#SET{sites,#ARAY})]
<BOUCLE_sites_tries(SITES mots){id_rubrique}{par titre_mot}>#SET_PUSH{sites, #ID_SYNDIC}</BOUCLE_sites_tries>
<BOUCLE_autres_sites(SITES){id_rubrique}{doublons sites_tries}>#SET_PUSH{sites, #ID_SYNDIC}</BOUCLE_autres_sites>
<B_sites>
<div class="liste sites-critique clearfix">
#ANCRE_PAGINATION
<h2 class="h2">[(#ENV{titre}) ](#GRAND_TOTAL)</h2>
<p>Tous ces sites sont évalués selon les critères de la campagne d'évaluation N&deg;#GET{id_evaluation}.</p>
<div class="row-fluid">
<ul class="thumbnails">
<BOUCLE_sites(SITES){id_syndic IN #GET{sites}}{pagination 12}>
[(#SET{lien,[(#URL_PAGE{eval_benchmark}
|parametre_url{url,#URL_SITE}
|parametre_url{id_syndic,#ID_SYNDIC}
|parametre_url{retour,#ENV{retour}})]
})]
[(#REM)Toutes les critiques de ce site dans le cadre de cette évaluation ]
<BOUCLE_critiques(EVALUATIONS_CRITIQUES)
{objet=site}
{id_objet=#ID_SYNDIC}
{id_evaluation=#GET{id_evaluation}}>
[(#REM) Est-ce que cette critique a été faite par l'auteur ?]
[(#ID_AUTEUR|=={#GET{votant}}|oui)[(#SET{a_vote,oui})]]
</BOUCLE_critiques>
[(#REM) Le nombre de votes pour cet objet]
[(#SET{votes,#TOTAL_BOUCLE})]
</B_critiques>
<li class="span4">
<div class="thumbnail">
[<a href="#GET{lien}"
title="[(#GET{a_vote}|=={'oui'}|?{<:eval_benchmark:title_modifier_votre_avis:>,<:eval_benchmark:title_donner_votre_avis:>})]">(#VAL{#URL_SITE}|thumbshot|balise_img|image_passe_partout{180,180}|image_recadre{180,180})</a>]
<p class="caption #EDIT{nom_site}">
<a href="#GET{lien}"
title="[(#GET{a_vote}|=={'oui'}|?{<:eval_benchmark:title_modifier_votre_avis:>,<:eval_benchmark:title_donner_votre_avis:>})]">#NOM_SITE</a></p>
<p>
[(#REM) Nombre d'avis ]
[(#GET{votes}|>{0}|?{
<a href="[(#URL_PAGE{evaluation_bilan}
|parametre_url{id_evaluation,#GET{id_evaluation}}
|parametre_url{objet,site}
|parametre_url{id_objet,#ID_SYNDIC})]"
title="<:eval_benchmark:title_voir_les_avis:>"
class="btn btn-small btn-success">[(#GET{votes}) ]<:eval_benchmark:label_evaluations:></a>,
<a href="[(#GET{lien})]"
title="<:eval_benchmark:title_aucun_avis:>"
class="btn btn-small btn-warning"><i class="icon-white icon-warning-sign"></i> 0 <:eval_benchmark:label_evaluations:></a>})]
[(#REM) L'utilisateur a t'il voté ?]
[(#GET{a_vote}|=={'oui'}|?{
<a class="btn btn-small btn-success" href="[(#GET{lien})]" title="<:eval_benchmark:title_modifier_votre_avis:>"><i class="icon-white icon-ok"></i> <:eval_benchmark:label_a_vote_oui:></a>,
<a class="btn btn-small btn-warning" href="[(#GET{lien})]" title="<:eval_benchmark:title_donner_votre_avis:>"><i class="icon-white icon-warning-sign"></i> <:eval_benchmark:label_a_vote_non:></a>})]
[(#REM) Lien direct sans formulaire ]
<a href="#URL_SITE"
class="btn btn-small btn-info"
title="<:eval_benchmark:title_voir_en_direct:>"><i class="icon-white icon-share-alt"></i> <:eval_benchmark:label_lien_direct:></a>
</p>
</div>
</li>
[(#SET{a_vote,''})]
[(#SET{votes,''})]
[(#COMPTEUR_BOUCLE|!={#TOTAL_BOUCLE}|oui)
[(#COMPTEUR_BOUCLE|modulo{3}|non)
</ul>
</div>
<div class='row-fluid'>
<ul class='thumbnails'>
]
]
</BOUCLE_sites>
</ul>
[<p class="pagination">(#PAGINATION{prive})</p>]
</div>
</div>
</B_sites>

@ -0,0 +1,29 @@
<paquet
prefix="eval_benchmark"
categorie="squelette"
version="0.3.1"
etat="dev"
compatibilite="[3.0.5;3.0.*]"
logo="img/eval_benchmark-48.png"
documentation=""
schema="1.0.0"
>
<nom>Critique de sites - Benchmarks</nom>
<auteur>Cyril Marion</auteur>
<licence>GNU/GPL</licence>
<pipeline nom="insert_head_css" inclure="eval_benchmark_pipelines.php" />
<pipeline nom="jqueryui_plugins" inclure="eval_benchmark_pipelines.php" />
<pipeline nom="affiche_milieu" inclure="eval_benchmark_pipelines.php" />
<necessite nom="evaluations" compatibilite="[1.1.0;[" />
<necessite nom="compositions" compatibilite="[3.0.0;[" />
<necessite nom="spipr_dist" compatibilite="[0.4.0;[" />
<necessite nom="article_accueil" compatibilite="[1.1.0;]" />
<necessite nom="thumbsites" compatibilite="[1.1.0;]" />
</paquet>

@ -0,0 +1,3 @@
#FORMULAIRE_CONFIGURER_EVAL_BENCHMARK

@ -0,0 +1,14 @@
[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
#SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
[(#REM) valeur peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
<select name="#ENV{nom}[]" multiple="multiple" class="#GET{type}[ (#ENV{class})]" size="#ENV{size,15}" id="champ_[(#ENV{nom}|saisie_nom2classe)]"[ value="(#ENV{valeur_forcee,#ENV{valeur}})"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
[(#ENV{cacher_option_intro}|non)
<option value="">[(#ENV{option_intro})]</option>]
<BOUCLE_mots(MOTS){par id_groupe, num titre, titre}{id_groupe ?}>
[<optgroup label="(#TYPE|unique|attribut_html)" />]
<option value="#ID_MOT" [(#ID_MOT|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui) selected="selected"]>[(#TITRE|supprimer_numero)]</option>
</BOUCLE_mots>
</select>

@ -0,0 +1,26 @@
[(#VAL{_Z_DOCTYPE}|defined|?{#VAL{_Z_DOCTYPE}|constant}|sinon{<!DOCTYPE HTML>})][
(#SET{class,[page_(#ENV{type-page,page})[ #ENV{type-page,page}_(#ENV{composition,''})]][ composition_(#ENV{composition})]})][
(#REM) http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/]
<!--[if lt IE 7 ]> <html class="[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie6 lte9 lte8 lte7" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <![endif]-->
<!--[if IE 7 ]> <html class="[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie7 lte9 lte8 lte7" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <![endif]-->
<!--[if IE 8 ]> <html class="[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie8 lte9 lte8" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <![endif]-->
<!--[if IE 9 ]> <html class="[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie9 lte9" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html class="[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR">
<!--<![endif]-->
<head>
<script type='text/javascript'>/*<![CDATA[*/(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);/*]]>*/</script>[
(#REM) Debut du head particulier a chaque page
pour inserer un title, des css particulieres(mais surchargees), ou des js *inline*
]<INCLURE{fond=head/#ENV{type-page},env}>[
(#REM) Partie commune a toutes les pages, sans env
]<INCLURE{fond=inclure/head}>[
(#REM) Fin du head particulier a chaque page, pour inserer des js specifiques par exemple
pour inserer des js *externes*
]<INCLURE{fond=head_js/#ENV{type-page},env}>
</head>
<INCLURE{fond=body-eval_benchmark,env}>
</html>

@ -0,0 +1,4 @@
#CACHE{0}
<BOUCLE_cat(MOTS){id_syndic}{id_groupe=1}{', '}>[(#TITRE|supprimer_numero)]</BOUCLE_cat>
---
<//B_cat>
Loading…
Cancel
Save