diff --git a/.gitattributes b/.gitattributes
index 268d1fd7953e4f7fd0b82c548063bd461bd1d57e..87cf7c0cf6053ab58bdf332b05ee952846a0873e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -529,6 +529,7 @@ ecrire/exec/valider_xml.php -text
 ecrire/exec/virtualiser.php -text
 ecrire/extract/index.php -text
 ecrire/inc/actions.php -text
+ecrire/inc/afficher_objets.php -text
 ecrire/inc/agenda.php -text
 ecrire/inc/aider.php -text
 ecrire/inc/ajouter_documents.php -text
@@ -589,7 +590,6 @@ ecrire/inc/safehtml.php -text
 ecrire/inc/securiser_action.php -text
 ecrire/inc/selectionner.php -text
 ecrire/inc/selectionner_auteur.php -text
-ecrire/inc/sites_voir.php -text
 ecrire/inc/suivi_versions.php -text
 ecrire/inc/syndic.php -text
 ecrire/inc/tourner.php -text
diff --git a/ecrire/exec/accueil.php b/ecrire/exec/accueil.php
index 02ca418c758b53849044a665fdabfcdcbd9a3ada..150aaa24ebd794688681da0291b286f3d8e4d765 100644
--- a/ecrire/exec/accueil.php
+++ b/ecrire/exec/accueil.php
@@ -22,19 +22,18 @@ function encours_accueil()
 	// Les articles a valider
 	//
 
-	$res =  afficher_articles(_T('info_articles_proposes'), array("WHERE" => "statut='prop'", 'ORDER BY' => "date DESC"));
+	$res =  afficher_objets('article',_T('info_articles_proposes'), array("WHERE" => "statut='prop'", 'ORDER BY' => "date DESC"));
 
 	//
 	// Les breves a valider
 	//
-	$res .= afficher_breves(afficher_plus(generer_url_ecrire('breves'))._T('info_breves_valider'), array("FROM" => 'spip_breves', 'WHERE' => "statut='prepa' OR statut='prop'", 'ORDER BY' => "date_heure DESC"), true);
+	$res .= afficher_objets('breve',afficher_plus(generer_url_ecrire('breves'))._T('info_breves_valider'), array("FROM" => 'spip_breves', 'WHERE' => "statut='prepa' OR statut='prop'", 'ORDER BY' => "date_heure DESC"), true);
 
 	//
 	// Les sites references a valider
 	//
 	if ($GLOBALS['meta']['activer_sites'] != 'non') {
-		include_spip('inc/sites_voir');
-		$res .= afficher_sites(afficher_plus(generer_url_ecrire('sites_tous')).'<b>' . _T('info_site_valider') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "statut='prop'", 'ORDER BY'=> "nom_site"));
+		$res .= afficher_objets('site',afficher_plus(generer_url_ecrire('sites_tous')).'<b>' . _T('info_site_valider') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "statut='prop'", 'ORDER BY'=> "nom_site"));
 	}
 
 	if ($connect_statut == '0minirezo') {
@@ -42,8 +41,7 @@ function encours_accueil()
 	// Les sites a probleme
 	//
 	  if ($GLOBALS['meta']['activer_sites'] != 'non') {
-		include_spip('inc/sites_voir');
-		$res .= afficher_sites(afficher_plus(generer_url_ecrire('sites_tous')). '<b>' . _T('avis_sites_syndiques_probleme') . '</b>', array('FROM' => 'spip_syndic', 'WHERE' => "(syndication='off' OR syndication='sus') AND statut='publie'", 'ORDER BY' => 'nom_site'));
+		$res .= afficher_objets('site',afficher_plus(generer_url_ecrire('sites_tous')). '<b>' . _T('avis_sites_syndiques_probleme') . '</b>', array('FROM' => 'spip_syndic', 'WHERE' => "(syndication='off' OR syndication='sus') AND statut='publie'", 'ORDER BY' => 'nom_site'));
 	}
 
 	// Les articles syndiques en attente de validation
@@ -434,14 +432,14 @@ function exec_accueil_dist()
 	debut_droite();
 
 	if ($GLOBALS['meta']["post_dates"] == "non" AND $connect_statut == '0minirezo') {
-		echo afficher_articles(_T('info_article_a_paraitre'), array("WHERE" => "statut='publie' AND date>NOW()", 'ORDER BY' => "date"));
+		echo afficher_objets('article',_T('info_article_a_paraitre'), array("WHERE" => "statut='publie' AND date>NOW()", 'ORDER BY' => "date"));
 }
 
 //
 // Vos articles en cours 
 //
 
-	echo afficher_articles(afficher_plus(generer_url_ecrire('articles_page'))._T('info_en_cours_validation'),	array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", "ORDER BY" => "articles.date DESC"));
+	echo afficher_objets('article',afficher_plus(generer_url_ecrire('articles_page'))._T('info_en_cours_validation'),	array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", "ORDER BY" => "articles.date DESC"));
 
 	if ($spip_display == 4)
 	  echo colonne_droite_eq4($id_rubrique,
diff --git a/ecrire/exec/articles_page.php b/ecrire/exec/articles_page.php
index 6f366bdfad975d1194385fbc388dc6a1833de100..dd0e464909c1515460a37e55b8d0115331cb1e81 100644
--- a/ecrire/exec/articles_page.php
+++ b/ecrire/exec/articles_page.php
@@ -50,7 +50,7 @@ debut_droite();
 // Vos articles en cours de redaction
 //
 
-	echo afficher_articles(_T('info_en_cours_validation'), array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", 'ORDER BY' => "articles.date DESC"));
+	echo afficher_objets('article',_T('info_en_cours_validation'), array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", 'ORDER BY' => "articles.date DESC"));
 
 
 
@@ -58,19 +58,19 @@ debut_droite();
 // Vos articles soumis au vote
 //
 
-	echo afficher_articles(_T('info_attente_validation'), array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prop'", "ORDER BY" => "articles.date"));
+	echo afficher_objets('article',_T('info_attente_validation'), array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prop'", "ORDER BY" => "articles.date"));
 
 //
 // Vos articles publies
 //
 
-	echo afficher_articles(_T('info_publies'),	array("FROM" =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=\"$connect_id_auteur\" AND articles.statut='publie'", 'ORDER BY' => "articles.date DESC"));
+	echo afficher_objets('article',_T('info_publies'),	array("FROM" =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=\"$connect_id_auteur\" AND articles.statut='publie'", 'ORDER BY' => "articles.date DESC"));
 
 //
 //  Vos articles refuses
 //
 
-	echo afficher_articles(_T('info_refuses'),	array('FROM' =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=\"$connect_id_auteur\" AND articles.statut='refuse'",  'ORDER BY' => "articles.date DESC"));
+	echo afficher_objets('article',_T('info_refuses'),	array('FROM' =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=\"$connect_id_auteur\" AND articles.statut='refuse'",  'ORDER BY' => "articles.date DESC"));
 
 	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'articles_page'),'data'=>''));
 
diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index cb8de1566ffb2ea0b9eae15920f91e7b5e62fca7..14714845161f12313567a1cd95109b043086331c 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -161,7 +161,7 @@ function auteurs_interventions($auteur) {
 	else if ($connect_id_auteur == $id_auteur) $aff_art = "'prepa','prop','publie'";
 	else $aff_art = "'prop','publie'";
 
-	echo afficher_articles(_T('info_articles_auteur'),  array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien",  "WHERE" => "lien.id_auteur='$id_auteur' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_art)",  'ORDER BY' => "articles.date DESC"));
+	echo afficher_objets('article',_T('info_articles_auteur'),  array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien",  "WHERE" => "lien.id_auteur='$id_auteur' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_art)",  'ORDER BY' => "articles.date DESC"));
 
 	if ($id_auteur != $connect_id_auteur
 	    AND ($statut == '0minirezo' OR $statut == '1comite')) {
diff --git a/ecrire/exec/breves.php b/ecrire/exec/breves.php
index 9293ac25101b2b6c5df3ea8c07a04ae880df1a20..5e28069567cea32fd5a9cdae2ba0145fd4017ca8 100644
--- a/ecrire/exec/breves.php
+++ b/ecrire/exec/breves.php
@@ -42,7 +42,7 @@ function exec_breves_dist()
 
 		$statuts = "'prop', 'publie'" . ($editable ? ", 'refuse'": "");
 
-		$res = afficher_breves($titre.aide ("breves"), array("SELECT" => 'id_rubrique, id_breve, date_heure, titre, statut', "FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND statut IN ($statuts)", 'ORDER BY' => "date_heure DESC"));
+		$res = afficher_objets('breve',$titre.aide ("breves"), array("SELECT" => 'id_rubrique, id_breve, date_heure, titre, statut', "FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND statut IN ($statuts)", 'ORDER BY' => "date_heure DESC"));
 
 		echo $res ;
 
diff --git a/ecrire/exec/memoriser.php b/ecrire/exec/memoriser.php
index 446d63247d9b459b60a788a22cfceb2e9ee1ee97..993db6530bee6065d3de5f3625b9022ba43ad42d 100644
--- a/ecrire/exec/memoriser.php
+++ b/ecrire/exec/memoriser.php
@@ -26,6 +26,7 @@ function exec_memoriser_dist()
 		$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $r['FROM'] . ($r['WHERE'] ? (' WHERE ' . $r['WHERE']) : '') . ($r['GROUP BY'] ? (' GROUP BY ' . $r['GROUP BY']) : '')));
 
 		include_spip('inc/presentation');
+		include_spip('inc/afficher_objets');
 		ajax_retour(afficher_articles_trad($t, $r, $f, $p, $hash, $cpt['n'], _request('trad')));
 
 	} else
diff --git a/ecrire/exec/mots_edit.php b/ecrire/exec/mots_edit.php
index 2cdc455eb8b080dc5d1f868d17543ba50063a58e..2c8035a9064c7d2d6d836a792326145dee4e8645 100644
--- a/ecrire/exec/mots_edit.php
+++ b/ecrire/exec/mots_edit.php
@@ -163,12 +163,11 @@ global $ajouter_id_article, $champs_extra, $connect_statut, $descriptif, $id_gro
 
 		$out .= afficher_rubriques('<b>' . _T('info_rubriques_liees_mot') . '</b>', array("FROM" => 'spip_rubriques AS rubrique, spip_mots_rubriques AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_rubrique=rubrique.id_rubrique", 'ORDER BY' => "rubrique.titre"));
 
-		$out .= afficher_articles(_T('info_articles_lies_mot'),	array('FROM' => "spip_articles AS articles, spip_mots_articles AS lien", 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_articles)", 'ORDER BY' => "articles.date DESC"));
+		$out .= afficher_objets('article',_T('info_articles_lies_mot'),	array('FROM' => "spip_articles AS articles, spip_mots_articles AS lien", 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_articles)", 'ORDER BY' => "articles.date DESC"));
 
-		$out .= afficher_breves('<b>' . _T('info_breves_liees_mot') . '</b>', array("FROM" => 'spip_breves AS breves, spip_mots_breves AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_breve=breves.id_breve", 'ORDER BY' => "breves.date_heure DESC"));
+		$out .= afficher_objets('breve','<b>' . _T('info_breves_liees_mot') . '</b>', array("FROM" => 'spip_breves AS breves, spip_mots_breves AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_breve=breves.id_breve", 'ORDER BY' => "breves.date_heure DESC"));
 
-		include_spip('inc/sites_voir');
-		$out .= afficher_sites('<b>' . _T('info_sites_lies_mot') . '</b>', array("FROM" => 'spip_syndic AS syndic, spip_mots_syndic AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_syndic=syndic.id_syndic", 'ORDER BY' => "syndic.nom_site DESC"));
+		$out .= afficher_objets('site','<b>' . _T('info_sites_lies_mot') . '</b>', array("FROM" => 'spip_syndic AS syndic, spip_mots_syndic AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_syndic=syndic.id_syndic", 'ORDER BY' => "syndic.nom_site DESC"));
 	}
 
 	$out .= fin_cadre_relief(true);
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index fd9d1490184580bfbaed0a419269934d14006497..46cc005bf1702a99fa45965fa1c5786ca9037991 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -294,28 +294,26 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 	//
 	// Les articles a valider
 	//
-	$res .= afficher_articles(_T('info_articles_proposes'),	array('WHERE' => "id_rubrique='$id_rubrique' AND statut='prop'", 'ORDER BY' => "date DESC"));
+	$res .= afficher_objets('article',_T('info_articles_proposes'),	array('WHERE' => "id_rubrique='$id_rubrique' AND statut='prop'", 'ORDER BY' => "date DESC"));
 
 	//
 	// Les breves a valider
 	//
-	$res .= afficher_breves('<b>' . _T('info_breves_valider') . '</b>', array("FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND (statut='prepa' OR statut='prop')", 'ORDER BY' => "date_heure DESC"), true);
+	$res .= afficher_objets('breve','<b>' . _T('info_breves_valider') . '</b>', array("FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND (statut='prepa' OR statut='prop')", 'ORDER BY' => "date_heure DESC"), true);
 
 
 	//
 	// Les sites references a valider
 	//
 	if ($GLOBALS['meta']['activer_sites'] != 'non') {
-		include_spip('inc/sites_voir');
-		$res .= afficher_sites('<b>' . _T('info_site_valider') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND statut='prop'", 'ORDER BY' => "nom_site"));
+		$res .= afficher_objets('site','<b>' . _T('info_site_valider') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND statut='prop'", 'ORDER BY' => "nom_site"));
 	}
 
 	//
 	// Les sites a probleme
 	//
 	if ($GLOBALS['meta']['activer_sites'] != 'non' AND $connect_toutes_rubriques) {
-		include_spip('inc/sites_voir');
-		$res .= afficher_sites('<b>' . _T('avis_sites_syndiques_probleme') . '</b>', array('FROM' => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND (syndication='off' OR syndication='sus') AND statut='publie'", 'ORDER BY' => "nom_site"));
+		$res .= afficher_objets('site','<b>' . _T('avis_sites_syndiques_probleme') . '</b>', array('FROM' => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND (syndication='off' OR syndication='sus') AND statut='publie'", 'ORDER BY' => "nom_site"));
 	}
 
 	// Les articles syndiques en attente de validation
@@ -339,13 +337,13 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 //////////  Les articles en cours de redaction
 /////////////////////////
 
-	  $res .= afficher_articles(_T('info_tous_articles_en_redaction'), array("WHERE" => "statut='prepa' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"));
+	  $res .= afficher_objets('article',_T('info_tous_articles_en_redaction'), array("WHERE" => "statut='prepa' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"));
 
 
 //////////  Les articles publies
 /////////////////////////
 
-	  $res .= afficher_articles(_T('info_tous_articles_presents'), array("WHERE" => "statut='publie' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"));
+	  $res .= afficher_objets('article',_T('info_tous_articles_presents'), array("WHERE" => "statut='publie' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"));
 	  
 	if (autoriser('creerarticledans','rubrique',$id_rubrique)){
 	  $res .=  "<div style='float:$spip_lang_right'>" .
@@ -354,7 +352,7 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 
 //// Les breves
 
-	$res .= afficher_breves('<b>' . _T('icone_ecrire_nouvel_article') . '</b>', array("FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND statut != 'prop' AND statut != 'prepa'", 'ORDER BY' => "date_heure DESC"));
+	$res .= afficher_objets('breve','<b>' . _T('icone_ecrire_nouvel_article') . '</b>', array("FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND statut != 'prop' AND statut != 'prepa'", 'ORDER BY' => "date_heure DESC"));
 
 
 	if (autoriser('creerbrevedans','rubrique',$id_rubrique,NULL,array('id_parent'=>$id_parent))){
@@ -365,8 +363,7 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 //// Les sites references
 
 	if ($GLOBALS['meta']["activer_sites"] == 'oui') {
-		include_spip('inc/sites_voir');
-		$res .= '<br />' . afficher_sites('<b>' . _T('titre_sites_references_rubrique') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND statut!='refuse' AND statut != 'prop' AND syndication NOT IN ('off','sus')", 'ORDER BY' => 'nom_site'));
+		$res .= '<br />' . afficher_objets('site','<b>' . _T('titre_sites_references_rubrique') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND statut!='refuse' AND statut != 'prop' AND syndication NOT IN ('off','sus')", 'ORDER BY' => 'nom_site'));
 
 		if ($id_rubrique > 0
 		AND (autoriser('creersitedans','rubrique',$id_rubrique))) {
diff --git a/ecrire/exec/recherche.php b/ecrire/exec/recherche.php
index 0c3772891e734f9b36cdd5094cd17939a0213a75..09bb8e01d7f3fdfce144ab6183dbb30019f74aec 100644
--- a/ecrire/exec/recherche.php
+++ b/ecrire/exec/recherche.php
@@ -12,10 +12,10 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/presentation');
-include_spip('inc/sites_voir');
 
 // http://doc.spip.org/@exec_recherche_dist
 function exec_recherche_dist() {
+	global $spip_lang_right;
 	$recherche = _request('recherche');
 	$recherche_aff = entites_html($recherche);
 
@@ -52,8 +52,8 @@ function exec_recherche_dist() {
 		}
 
 	}
-
-	debut_gauche();
+	
+	echo debut_grand_cadre();
 
 	if (!strlen($recherche)) {
 		$recherche_aff = _T('info_rechercher');
@@ -61,7 +61,7 @@ function exec_recherche_dist() {
 	} else $onfocus = '';
 
 	$onfocus = '<input type="text" size="10" value="'.$recherche_aff.'" name="recherche" class="spip_recherche" accesskey="r"' . $onfocus . ' />';
-	echo generer_form_ecrire("recherche", $onfocus, " method='get'");
+	echo "<div style='width:200px;float:$spip_lang_right;'>".generer_form_ecrire("recherche", $onfocus, " method='get'")."</div>";
 
 /*
 	// Si on est autorise a modifier, proposer le choix de REMPLACER
@@ -71,42 +71,44 @@ function exec_recherche_dist() {
 	}
 */
 
-	debut_droite();
-
 	if ($results) {
 		echo "<span class='verdana1'><b>"._T('info_resultat_recherche')."</b></span><br />";
 		echo "<span class='ligne_foncee verdana1 spip_large'><b>$recherche_aff</b></span>";
+		include_spip('inc/afficher_objets');
 
 		foreach($results as $table => $r) {
 			switch ($table) {
 			case 'article':
-				$fn = 'afficher_articles';
 				$titre = _T('info_articles_trouves');
 				$order = 'date DESC';
 				break;
 			case 'breve':
-				$fn = 'afficher_breves';
 				$titre = _T('info_breves_touvees');
 				$order = 'date_heure DESC';
 				break;
 			case 'rubrique':
-				$fn = 'afficher_rubriques';
 				$titre = _T('info_rubriques_trouvees');
 				$order = 'date DESC';
 				break;
 			case 'site':
-				$fn = 'afficher_sites';
 				$titre = _T('info_sites_trouves');
 				$order = 'date DESC';
 				break;
 			case 'auteur':
-				$fn = 'afficher_auteurs';
 				$titre = _T('info_auteurs_trouves');
 				$order = 'nom';
 				break;
+			case 'mot':
+				$titre = _T('titre_page_mots_tous');
+				$order = 'titre';
+				break;
+			default:
+				$titre = _T("info_trouves");
+				$order = "id_$table";
+				break;
 			}
 
-			echo $fn($titre,
+			echo afficher_objets($table,$titre,
 				array(
 					// gasp: la requete spip_articles exige AS articles...
 					'FROM' => 'spip_'.table_objet($table).' AS '.$table.'s',
@@ -124,61 +126,7 @@ function exec_recherche_dist() {
 		if (strlen($recherche))
 			echo "<p class='verdana1'>"._T('avis_aucun_resultat')."</p>";
 
-	echo fin_gauche(), fin_page();
-}
-
-
-// old style, devrait etre dans inc/presentation
-// http://doc.spip.org/@afficher_auteurs
-function afficher_auteurs ($titre_table, $requete) {
-
-	if (!$requete['SELECT']) $requete['SELECT'] = '*' ;
-
-	$tous_id = array();
-	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
-	if (! ($cpt = $cpt['n'])) return 0 ;
-	if ($requete['LIMIT']) $cpt = min($requete['LIMIT'], $cpt);
-
-	$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
-	$nb_aff = floor(1.5 * _TRANCHES);
-	$deb_aff = intval(_request($tmp_var));
-	$tranches = '';
-	if ($cpt > $nb_aff) {
-		$nb_aff = (_TRANCHES); 
-		$tranches = afficher_tranches_requete($cpt, $tmp_var, '', $nb_aff);
-	}
-
-	debut_cadre_relief("auteur-24.gif");
-
-	if ($titre_table) {
-			echo "<p><table width='100%' cellpadding='0' cellspacing='0' border='0'>";
-			echo "<tr><td style='width: 100%'>";
-			echo "<table width='100%' cellpadding='3' cellspacing='0' border='0'>";
-			echo "<tr style='background-color: #333333'><td style='width: 100%' colspan='5'><span style='color: #FFFFFF;' class='verdana1 spip_medium'><b>$titre_table</b></span></td></tr>";
-		}
-	else {
-			echo "<p><table width='100%' cellpadding='3' cellspacing='0' border='0'>";
-		}
-
-	echo $tranches;
-
-	$result = spip_query("SELECT " . $requete['SELECT'] . " FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '') . ($requete['ORDER BY'] ? (' ORDER BY ' . $requete['ORDER BY']) : '') . " LIMIT " . ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
-
-	$table = array();
-	while ($row = spip_fetch_array($result)) {
-		$tous_id[] = $row['id_auteur'];
-		$formater_auteur = charger_fonction('formater_auteur', 'inc');
-		$table[]= $formater_auteur($row['id_auteur']);
-	}
-	spip_free_result($result);
-	$largeurs = array(20, 20, 200, 20, 50);
-	$styles = array('','','arial2','arial1','arial1');
-	echo afficher_liste($largeurs, $table, $styles);
-
-	if ($titre_table) echo "</table></td></tr>";
-	echo "</table>";
-	fin_cadre_relief();
-
+	echo fin_grand_cadre(), fin_page();
 }
 
-?>
+?>
\ No newline at end of file
diff --git a/ecrire/exec/sites.php b/ecrire/exec/sites.php
index 9598463831b1f5351a8211af8eadeea9dd887053..ec216254b91d2111ff07cdb173eb9ef7eb679853 100644
--- a/ecrire/exec/sites.php
+++ b/ecrire/exec/sites.php
@@ -12,7 +12,6 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/presentation');
-include_spip('inc/sites_voir');
 include_spip('inc/syndic');
 include_spip('inc/mots');
 include_spip('inc/date');
@@ -205,7 +204,7 @@ function exec_sites_dist()
 						    );
 			fin_boite_info();
 		}
-		echo afficher_syndic_articles(_T('titre_articles_syndiques'), array('FROM' => 'spip_syndic_articles', 'WHERE' => "id_syndic=$id_syndic", 'ORDER BY' => "date DESC"), $id_syndic);
+		echo afficher_objets('syndic_article',_T('titre_articles_syndiques'), array('FROM' => 'spip_syndic_articles', 'WHERE' => "id_syndic=$id_syndic", 'ORDER BY' => "date DESC"), $id_syndic);
 
 
 	// afficher la date de dernier acces a la syndication
diff --git a/ecrire/exec/sites_tous.php b/ecrire/exec/sites_tous.php
index 9bb36482408444b3adad38cb9de71edf82442635..450f1fda969fd098be95fb29459200c4cc3c7c12 100644
--- a/ecrire/exec/sites_tous.php
+++ b/ecrire/exec/sites_tous.php
@@ -13,7 +13,6 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/presentation');
-include_spip('inc/sites_voir');
 
 // http://doc.spip.org/@exec_sites_tous_dist
 function exec_sites_tous_dist()
@@ -29,11 +28,11 @@ creer_colonne_droite();
 echo pipeline('affiche_droite',array('args'=>array('exec'=>'sites_tous'),'data'=>''));	  
 debut_droite();
 
- echo afficher_sites('<b>' . _T('titre_sites_tous') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "syndication='non' AND statut='publie'", 'ORDER BY'=> "nom_site"));
+ echo afficher_objets('site','<b>' . _T('titre_sites_tous') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "syndication='non' AND statut='publie'", 'ORDER BY'=> "nom_site"));
 
- echo afficher_sites('<b>' . _T('titre_sites_syndiques') . '</b>', array('FROM' => 'spip_syndic', 'WHERE' => "(syndication='oui' OR syndication='sus') AND statut='publie'", 'ORDER BY' => "nom_site"));
+ echo afficher_objets('site','<b>' . _T('titre_sites_syndiques') . '</b>', array('FROM' => 'spip_syndic', 'WHERE' => "(syndication='oui' OR syndication='sus') AND statut='publie'", 'ORDER BY' => "nom_site"));
 
- echo afficher_sites('<b>' . _T('titre_sites_proposes') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "statut='prop'", 'ORDER BY' => "nom_site"));
+ echo afficher_objets('site','<b>' . _T('titre_sites_proposes') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "statut='prop'", 'ORDER BY' => "nom_site"));
 
 if ($connect_statut == '0minirezo' OR $GLOBALS['meta']["proposer_sites"] > 0) {
 	echo  "<div style='float:$spip_lang_right'>",
@@ -44,13 +43,13 @@ if ($connect_statut == '0minirezo' OR $GLOBALS['meta']["proposer_sites"] > 0) {
 echo pipeline('affiche_milieu',array('args'=>array('exec'=>'sites_tous'),'data'=>''));	  
 
 
- echo afficher_sites('<b>' . _T('avis_sites_probleme_syndication') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "syndication='off' AND statut='publie'", 'ORDER BY' => "nom_site"));
+ echo afficher_objets('site','<b>' . _T('avis_sites_probleme_syndication') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "syndication='off' AND statut='publie'", 'ORDER BY' => "nom_site"));
 
 if ($connect_statut == '0minirezo') {
-  echo afficher_sites('<b>' . _T('info_sites_refuses') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "statut='refuse'", 'ORDER BY' => "nom_site"));
+  echo afficher_objets('site','<b>' . _T('info_sites_refuses') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "statut='refuse'", 'ORDER BY' => "nom_site"));
 }
 
- echo afficher_syndic_articles('<b>' . _T('titre_dernier_article_syndique') . '</b>', array('FROM' => 'spip_syndic_articles', 'ORDER BY' => "date DESC",  'LIMIT' => "50"));
+ echo afficher_objets('syndic_article','<b>' . _T('titre_dernier_article_syndique') . '</b>', array('FROM' => 'spip_syndic_articles', 'ORDER BY' => "date DESC",  'LIMIT' => "50"));
 
 echo fin_gauche(), fin_page();
 }
diff --git a/ecrire/inc/afficher_objets.php b/ecrire/inc/afficher_objets.php
new file mode 100644
index 0000000000000000000000000000000000000000..fb57ff31bed40395cab690852096991ac6ac44f6
--- /dev/null
+++ b/ecrire/inc/afficher_objets.php
@@ -0,0 +1,528 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2007                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+
+function icone_table($type){
+	$derog = array('mot'=>'mot-cle-24.gif','syndic_article'=>'site-24.gif');
+	if (isset($derog[$type]))
+		return $derog[$type];
+	return "$type-24.gif";
+}
+function icone_objet($type,$statut){
+	$derog = array(
+	'mot'=>'petite-cle.gif','rubrique'=>'rubrique-12.gif',
+	auteur=>array('0minirezo'=>'admin-12.gif','1comite'=>'redac-12.gif','5forum'=>'visit-12.gif',''=>'visit-12.gif')
+	);
+	if (isset($derog[$type])){
+		if (is_string($derog[$type])) return $derog[$type];
+		if (is_array($derog[$type])){
+			if (isset($derog[$type][$statut])) return $derog[$type][$statut];
+			if (isset($derog[$type][''])) return $derog[$type][''];
+		}
+	}
+	return "$type-24.gif";
+}
+
+
+function lien_editer_objet($type,$key,$id){
+	return generer_url_ecrire($type . "s_edit","$key=$id");
+}
+function lien_voir_objet($type,$key,$id){
+	$exec = array('article'=>'articles','breve'=>'breves_voir','rubrique'=>'naviguer','mot'=>'mots_tous');
+	$exec = isset($exec[$type])?$exec[$type]:$type . "s";
+	return generer_url_ecrire($exec,"$key=$id");
+}
+
+static $my_sites;
+// http://doc.spip.org/@afficher_numero_edit
+function afficher_numero_edit($id, $key, $type,$row=NULL) {
+	global $spip_lang_right, $spip_lang_left;
+	static $numero , $style='' ;
+	if ($type=='syndic_article'){
+		if (autoriser('modifier',$type,$id)) {
+			$redirect = self();	
+			if ($row['statut'] == "publie"){
+			  $s =  "[<a href='". redirige_action_auteur('instituer_syndic',"$id-refuse", $GLOBALS['exec'], $redirect) . "'><span style='color: black'>"._T('info_bloquer_lien')."</span></a>]";
+			
+			}
+			else if ($row['statut'] == "refuse"){
+			  $s =  "[<a href='". redirige_action_auteur('instituer_syndic',"$id-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_retablir_lien')."</a>]";
+			}
+			else if ($row['statut'] == "off"
+			AND $my_sites[$id_syndic]['miroir'] == 'oui') {
+				$s = '('._T('syndic_lien_obsolete').')';
+			}
+			else /* 'dispo' ou 'off' (dans le cas ancien site 'miroir') */
+			{
+			  $s = "[<a href='". redirige_action_auteur('instituer_syndic',"$id-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_valider_lien')."</a>]";
+			}
+			return $s;
+		}		
+	}
+	
+	if (!$style) {
+		$style = " class='spip_xx-small' style='float: $spip_lang_right; padding-$spip_lang_left: 4px; color: black; '"; 
+
+		$numero = _T('info_numero_abbreviation');
+	}
+
+	if (!autoriser('modifier',$type,$id)) {
+		$bal ='span';
+		$href = '';
+	} else {
+		$bal = 'a';
+		$href = "\nhref='"
+		. lien_editer_objet($type,$key,$id)
+		. "' title='"
+		. _T('bouton_modifier')
+		. "'";
+	}
+	return "<$bal$style$href><b>"
+	. $numero
+	. $id
+	. "</b></$bal>";
+	return "";
+}
+
+// libelle du titre de l'objet :
+// la partie du titre a afficher dans un lien
+// puis la partie hors lien
+function afficher_titre_objet($type,$row){
+	if (function_exists($f = "afficher_titre_$type"))
+		return $f($row);
+	$titre = isset($row['titre'])?sinon($row['titre'], _T('ecrire:info_sans_titre')):
+	  (isset($row['nom'])?sinon($row['nom'], _T('ecrire:info_sans_titre')):"");
+	 return array(typo($titre),'');
+}
+function afficher_titre_site($row){
+	$syndication = $row['syndication'];
+	$s = "";
+	$s .= typo($row['nom_site']);
+	$s2 = "&nbsp;&nbsp; <span class='spip_xx-small'>[<a href='"
+	.$row['url_site']."'>"._T('lien_visite_site')."</a>]</span>";
+	
+	return array($s,$s2);
+}
+function afficher_titre_syndic_article($row){
+	$titre=safehtml($row["titre"]);
+	$url=$row["url"];
+	$date=$row["date"];
+	$lesauteurs=typo($row["lesauteurs"]);
+	$statut=$row["statut"];
+	$descriptif=safehtml($row["descriptif"]);
+	
+	$s = "<a href='$url'>$titre</a>";
+
+	$date = affdate_court($date);
+	if (strlen($lesauteurs) > 0) $date = $lesauteurs.', '.$date;
+	$s.= " ($date)";
+
+	// Tags : d'un cote les enclosures, de l'autre les liens
+	if($e = afficher_enclosures($row['tags']))
+		$s .= ' '.$e;
+
+	// descriptif
+	if (strlen($descriptif) > 0) {
+		// couper un texte vraiment tres long
+		if (strlen($descriptif) > 10000)
+			$descriptif = safehtml(spip_substr($descriptif, 0, 6000)).' (...)';
+		else
+			$descriptif = safehtml($descriptif);
+		$s .= '<div class="arial1">'
+			# 385px = largeur de la colonne ou s'affiche le texte
+			. filtrer('image_reduire',$descriptif, 385, 550)
+			. '</div>';
+	}
+
+	// tags
+	if ($tags = afficher_tags($row['tags']))
+		$s .= "<div style='float:$spip_lang_right;'>&nbsp;<em>"
+			. $tags . '</em></div>';
+
+	// source
+	if (strlen($row['url_source']))
+		$s .= "<div style='float:$spip_lang_right;'>"
+		. propre("[".$row['source']."->".$row['url_source']."]")
+		. "</div>";
+	else if (strlen($row['source']))
+		$s .= "<div style='float:$spip_lang_right;'>"
+		. typo($row['source'])
+		. "</div>";
+
+	return array('',$s);
+}
+
+function afficher_complement_objet($type,$row){
+	if (function_exists($f = "afficher_complement_$type"))
+		return $f($row);
+	 return "";
+}
+
+function afficher_complement_site($row){
+	$syndication = $row['syndication'];
+	$s = "";
+	if ($syndication == 'off' OR $syndication == 'sus') {
+		$s .= "<div style='color: red;'>"
+			. http_img_pack('puce-orange-anim.gif', $syndication, "class='puce'",_T('info_panne_site_syndique'))
+			. " "._T('info_probleme_grave')." </div>";
+	}
+	if ($syndication == "oui" or $syndication == "off" OR $syndication == 'sus'){
+		$s .= "<div style='color: red;'>"._T('info_syndication')."</div>";
+	}
+	if ($syndication == "oui" OR $syndication == "off" OR $syndication == "sus") {
+		$total_art = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_syndic_articles WHERE id_syndic='$id_syndic'"));
+		$s .= " " . $total_art['n'] . " " . _T('info_syndication_articles');
+	} else {
+			$s .= "&nbsp;";
+	}
+	return $s;
+}
+function afficher_complement_syndic_article($row){
+	if ($GLOBALS['exec'] != 'sites') {
+		$id_syndic = $row['id_syndic'];
+		// $my_sites cache les resultats des requetes sur les sites
+		if (!$my_sites[$id_syndic])
+			$my_sites[$id_syndic] = spip_fetch_array(spip_query("SELECT nom_site, moderation, miroir FROM spip_syndic WHERE id_syndic=$id_syndic"));
+
+		$aff = $my_sites[$id_syndic]['nom_site'];
+		if ($my_sites[$id_syndic]['moderation'] == 'oui')
+			$aff = "<i>$aff</i>";
+			
+		$s = "<a href='" . generer_url_ecrire("sites","id_syndic=$id_syndic") . "'>$aff</a>";
+
+		return $s;
+	}
+	return "";	
+}
+
+// affichage des liste d'objets
+// Cas generique, utilise pour tout sauf article
+function inc_afficher_objets_dist($type, $titre_table,$requete,$formater=''){
+	if ($afficher = charger_fonction("afficher_{$type}s",'inc',true)){
+		return $afficher($titre_table,$requete,$formater);
+	}
+
+	if (($GLOBALS['meta']['multi_rubriques'] == 'oui'
+	     AND (!isset($GLOBALS['id_rubrique'])))
+	OR $GLOBALS['meta']['multi_articles'] == 'oui') {
+		$afficher_langue = true;
+
+		if (isset($GLOBALS['langue_rubrique'])) $langue_defaut = $GLOBALS['langue_rubrique'];
+		else $langue_defaut = $GLOBALS['meta']['langue_site'];
+	} else $afficher_langue = $langue_defaut = '';
+
+	$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
+
+	if ($affrub) $largeurs = array('7', '', '', '', '188', '38');
+	else $largeurs = array('7','', '', '', '100', '38');
+	$styles = array('arial11', 'arial11', 'arial1', 'arial1', 'arial1 centered', 'arial1');
+
+	$arg = array( $afficher_langue, $affrub, $langue_defaut);
+	if (!function_exists($fonction_ligne = "afficher_{$type}s_boucle")){
+		$fonction_ligne = "afficher_objet_boucle";
+		$arg = array($type,id_table_objet($type),$afficher_langue, $affrub, $langue_defaut);
+	}
+	return affiche_tranche_bandeau($requete, icone_table($type), 'toile_foncee', "ligne_blanche", $tmp_var, $titre_table, false, $largeurs, $styles, $fonction_ligne, $arg);
+}
+
+function afficher_objet_boucle($row, &$tous_id,  $voir_logo, $own)
+{
+	global $connect_statut, $spip_lang_right;
+	list($type,$primary,$afficher_langue, $affrub, $langue_defaut) = $own;
+	$vals = '';
+	$id_objet = $row[$primary];
+	if (autoriser('voir',$type,$id_objet)){
+		$tous_id[] = $id_objet;
+		
+		$date_heure = isset($row['date'])?$row['date']:(isset($row['date_heure'])?$row['date_heure']:"");
+
+		$statut = isset($row['statut'])?$row['statut']:"";
+		if (isset($row['lang']))
+		  changer_typo($lang = $row['lang']);
+		else $lang = $langue_defaut;
+		$lang_dir = lang_dir($lang);
+		$id_rubrique = isset($row['id_rubrique'])?$row['id_rubrique']:0;
+		
+		if (function_exists($f = "puce_statut_$type"))
+			$vals[] = $f($id_objet, $statut, $id_rubrique, $type);
+		else $vals[] = "<img src='"._DIR_IMG_PACK.icone_objet($type,$statut)."' />";
+	
+		list($titre,$suite) = afficher_titre_objet($type,$row);
+		$s = "\n<div>";
+		if ($voir_logo) {
+			$chercher_logo = charger_fonction('chercher_logo', 'inc');
+			if ($logo = $chercher_logo($id_objet, $primary, 'on')) {
+				list($fid, $dir, $nom, $format) = $logo;
+				include_spip('inc/filtres_images');
+				$logo = image_reduire("<img src='$fid' alt='' />", 26, 20);
+				if ($logo)
+					$s .= "\n<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</span>";
+			}
+		}
+		if (strlen($titre)){
+			$s .= "<a href='" . lien_voir_objet($type,$primary,$id_objet) . "'"/*." style=\"display:block;\""*/ .">";
+			$s .= $titre;
+			$s .= "</a>";
+		}
+		$s .= $suite;
+		$s .= "</div>";
+		$vals[] = $s;
+
+		$s = "";
+		if ($afficher_langue){
+			if (isset($row['langue_choisie'])){
+				$s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>";
+				if ($row['langue_choisie'] == "oui") $s .= "<b>".traduire_nom_langue($lang)."</b>";
+				else $s .= "(".traduire_nom_langue($lang).")";
+				$s .= "</span>";
+			}
+			elseif ($lang != $langue_defaut)
+				$s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>(".traduire_nom_langue($lang).")</span>";
+		}
+		$vals[] = $s;
+		
+		$s = afficher_complement_objet($type,$row);
+		$vals[] = $s;
+		
+		$s = "";
+		if ($affrub && $id_rubrique) {
+			$rub = spip_fetch_array(spip_query("SELECT id_rubrique, titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
+			$id_rubrique = $rub['id_rubrique'];
+			$s .= "<a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "' style=\"display:block;\">".typo($rub['titre'])."</a>";
+		} else 
+		if ($statut){
+			if ($statut != "prop")
+					$s = affdate_jourcourt($date_heure);
+				else
+					$s .= _T('info_a_valider');
+		}
+		$vals[] = $s;
+				
+		$vals[] = afficher_numero_edit($id_objet, $primary, $type, $row);
+	}
+	return $vals;
+}
+
+// Cas particuliers -----------------------------------------------------------------
+
+//
+// Afficher tableau d'articles
+//
+function inc_afficher_articles_dist($titre, $requete, $formater='') {
+
+	if (!isset($requete['FROM'])) $requete['FROM'] = 'spip_articles AS articles';
+
+	if (!isset($requete['SELECT'])) {
+		$requete['SELECT'] = "articles.id_article, articles.titre, articles.id_rubrique, articles.statut, articles.date, articles.lang, articles.id_trad, articles.descriptif";
+	}
+	
+	if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
+
+	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
+
+	if (!$cpt = $cpt['n']) return '' ;
+
+
+	$requete['FROM'] = preg_replace("/(spip_articles( AS \w*)?)/", "\\1 LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete['FROM']);
+
+	$requete['SELECT'] .= ", petitions.id_article AS petition ";
+
+	// memorisation des arguments pour gerer l'affichage par tranche
+	// et/ou par langues.
+
+	$hash = substr(md5(serialize($requete) . $GLOBALS['meta']['gerer_trad'] . $titre), 0, 31);
+	$tmp_var = 't' . substr($hash, 0, 7);
+	$nb_aff = floor(1.5 * _TRANCHES);
+	$deb_aff = intval(_request($tmp_var));
+
+	//
+	// Stocke la fonction ajax dans le fichier temp pour exec=memoriser
+	//
+
+	// on lit l'existant
+	lire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt', $ajax_fonctions);
+	$ajax_fonctions = @unserialize($ajax_fonctions);
+
+	// on ajoute notre fonction
+	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
+	$v = array(time(), $titre, $requete, $tmp_var, $formater);
+	$ajax_fonctions[$hash] = $v;
+
+	// supprime les fonctions trop vieilles
+	foreach ($ajax_fonctions as $h => $fonc)
+		if (time() - $fonc[0] > 48*3600)
+			unset($ajax_fonctions[$h]);
+
+	// enregistre
+	ecrire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt',
+		serialize($ajax_fonctions));
+
+
+	return afficher_articles_trad($titre, $requete, $formater, $tmp_var, $hash, $cpt);
+}
+
+// http://doc.spip.org/@afficher_articles_trad
+function afficher_articles_trad($titre_table, $requete, $formater, $tmp_var, $hash, $cpt, $trad=0) {
+
+	global $spip_lang_right;
+
+	if ($trad) {
+		$formater = 'afficher_articles_trad_boucle';
+		$icone = "langues-off-12.gif";
+		$alt = _T('masquer_trad');
+	} else {
+		if (!$formater) {
+			$formater_article =  charger_fonction('formater_article', 'inc');
+			$formater = $formater_article;
+		}
+		$icone = 'langues-12.gif';
+		$alt = _T('afficher_trad');
+	}
+
+	$nb_aff = ($cpt  > floor(1.5 * _TRANCHES)) ? _TRANCHES : floor(1.5 * _TRANCHES) ;
+	$deb_aff = intval(_request($tmp_var));
+
+	$q = spip_query("SELECT " . $requete['SELECT'] . " FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '') . ($requete['ORDER BY'] ? (' ORDER BY ' . $requete['ORDER BY']) : '') . " LIMIT " . ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
+	$t = '';
+	while ($r = spip_fetch_array($q))
+		if (autoriser('voir','article',$r['id_article']))
+			$t .= $formater($r);
+	spip_free_result($q);
+
+	if ($t)
+	  $t = afficher_liste_debut_tableau()
+	    . $t
+	    . afficher_liste_fin_tableau();
+
+	$style = "style='visibility: hidden; float: $spip_lang_right'";
+
+	$texte = http_img_pack("searching.gif", "", $style . " id='img_$tmp_var'");
+
+	if (($GLOBALS['meta']['gerer_trad'] == "oui")) {
+		$url = generer_url_ecrire('memoriser',"hash=$hash&trad=" . (1-$trad));
+		$texte .= 
+		 "\n<span style='float: $spip_lang_right;'><a href=\"#\"\nonclick=\"return charger_id_url('$url','$tmp_var');\">"
+		. "<img\nsrc='". _DIR_IMG_PACK . $icone ."' alt='$alt' /></a></span>";
+	}
+	$texte .=  '<b>' . $titre_table  . '</b>';
+
+	$res = "\n<div class='liste'>"
+	. bandeau_titre_boite2($texte, "article-24.gif", 'toile_blanche', 'ligne_noire')
+	. (($cpt <= $nb_aff) ? ''
+	   : afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('memoriser', "hash=$hash&trad=$trad"), $nb_aff))
+	. $t
+	. "</div>\n";
+
+	return ajax_action_greffe($tmp_var,$res);
+}
+
+// http://doc.spip.org/@afficher_articles_trad_boucle
+function afficher_articles_trad_boucle($row)
+{
+  	global $lang_objet,  $spip_lang_right, $spip_display;
+
+	$lang_dir = lang_dir($lang_objet);
+	$vals = '';
+	$id_article = $row['id_article'];
+	$titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
+	$id_rubrique = $row['id_rubrique'];
+	$date = $row['date'];
+	$statut = $row['statut'];
+	$id_trad = $row['id_trad'];
+	$lang = $row['lang'];
+
+	// La petite puce de changement de statut
+	$vals[] = puce_statut_article($id_article, $statut, $id_rubrique);
+
+	// Le titre (et la langue)
+	
+	$langues_art = "";
+	$dates_art = "";
+	$l = "";
+
+	$res_trad = spip_query("SELECT id_article, lang, date_modif  FROM spip_articles WHERE id_trad = $id_trad AND id_trad > 0");
+
+	while ($row_trad = spip_fetch_array($res_trad)) {
+
+		$id_article_trad = $row_trad["id_article"];
+		$lang_trad = $row_trad["lang"];
+		$date_trad = $row_trad["date_modif"];
+		$dates_art[$lang_trad] = $date_trad;
+		$langues_art[$lang_trad] = $id_article_trad;
+		if ($id_article_trad == $id_trad) $date_ref = $date;
+	}
+
+
+	// faudrait sortir ces invariants de boucle
+
+	if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') {
+			$afficher_langue = true;
+			$langue_defaut = isset($GLOBALS['langue_rubrique'])
+			  ? $GLOBALS['meta']['langue_site']
+			  : $GLOBALS['langue_rubrique'];
+	}
+
+	$span_lang = false;
+
+	foreach(explode(',', $GLOBALS['meta']['langues_multilingue']) as $k){
+		if ($langues_art[$k]) {
+			if ($langues_art[$k] == $id_trad) {
+				$span_lang = "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "'><span class='lang_base'>$k</span></a>";
+				$l .= $span_lang;
+			} else {
+				$date = $dates_art[$k];
+				if ($date < $date_ref) 
+					$l .= "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "' class='claire'>$k</a>";
+				else $l .= "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "' class='foncee'>$k</a>";
+			}			
+		}
+#				else $l.= "<span class='creer'>$k</span>";
+	}
+			
+	if (!$span_lang)
+		$span_lang = "<a href='" . generer_url_ecrire("articles","id_article=$id_article") . "'><span class='lang_base'>$lang</span></a>";
+
+	$vals[] = "\n<div style='text-align: center;'>$span_lang</div>";
+			
+			
+	$s = "\n<div>";
+	$s .= "\n<div style='float: $spip_lang_right; margin-right: -10px;'>$l</div>";
+	
+	if (acces_restreint_rubrique($id_rubrique))
+		$s .= http_img_pack("admin-12.gif", _T('titre_image_administrateur'), "width='12' height='12'", _T('titre_image_admin_article'));
+
+	$s .= "<a href='" . generer_url_ecrire("articles","id_article=$id_article") . " dir='$lang_dir' style=\"display:block;\">";
+			
+			
+	if ($id_article == $id_trad) $titre = "<b>$titre</b>";
+			
+	$s .= typo($titre);
+
+	if ($afficher_langue AND $lang != $langue_defaut)
+		$s .= " <span class='spip_xx-small' style='color: #666666'  dir='$lang_dir'>(".traduire_nom_langue($lang).")</span>";
+
+	$s .= "</a>";
+	$s .= "</div>";
+	
+	$vals[] = $s;
+	
+	$vals[] = "";
+	
+	$largeurs = array(11, 24, '', '1');
+	$styles = array('', 'arial1', 'arial1', '');
+
+	return ($spip_display != 4)
+	? afficher_liste_display_neq4($largeurs, $vals, $styles)
+	: afficher_liste_display_eq4($largeurs, $vals, $styles);
+}
+
+?>
\ No newline at end of file
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index fefe1937c3db5c61cd4ad1c9829884804aefb134..419b13891a41f5db4978eff203a8be7f08b74abe 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -16,7 +16,6 @@ include_spip('inc/agenda'); // inclut inc/layer, inc/texte, inc/filtre
 include_spip('inc/boutons');
 include_spip('inc/actions');
 
-
 define('_ACTIVER_PUCE_RAPIDE', true);
 
 // Faux HR, avec controle de couleur
@@ -28,7 +27,6 @@ function hr($color, $retour = false) {
 	if ($retour) return $ret; else echo $ret;
 }
 
-
 //
 // Cadres
 //
@@ -309,6 +307,11 @@ function afficher_plus($lien) {
 // Fonctions d'affichage
 //
 
+function afficher_objets($type, $titre_table,$requete,$formater=''){
+	$afficher_objets = charger_fonction('afficher_objets','inc');
+	return $afficher_objets($type, $titre_table,$requete,$formater);
+}
+
 // http://doc.spip.org/@afficher_liste
 function afficher_liste($largeurs, $table, $styles = '') {
 	global $spip_display;
@@ -631,359 +634,61 @@ function puce_statut_breve($id, $statut, $id_rubrique, $type) {
 		.  "</span></span>";
 }
 
-// http://doc.spip.org/@afficher_script_statut
-function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act)
-{
-  $i = http_wrapper($img);
-  $h = generer_action_auteur("instituer_$type","$id-$statut");
-  $h = "javascript:selec_statut('$id', '$type', $n, '$i', '$h');";
-  $t = supprimer_tags($titre);
-  return "<a href=\"$h\"\ntitle=\"$t\"$act><img src='$i' alt=' '/></a>";
-}
-
-//
-// Afficher tableau d'articles
-//
-// http://doc.spip.org/@afficher_articles
-function afficher_articles($titre, $requete, $formater='') {
-
-	if (!isset($requete['FROM'])) $requete['FROM'] = 'spip_articles AS articles';
-
-	if (!isset($requete['SELECT'])) {
-		$requete['SELECT'] = "articles.id_article, articles.titre, articles.id_rubrique, articles.statut, articles.date, articles.lang, articles.id_trad, articles.descriptif";
+function puce_statut_site($id_site, $statut, $id_rubrique, $type){
+	switch ($statut) {
+		case 'publie':
+				if (acces_restreint_rubrique($id_rubrique))
+					$puce = 'puce-verte-anim.gif';
+				else
+					$puce='puce-verte-breve.gif';
+				$title = _T('info_site_reference');
+				break;
+			case 'prop':
+				if (acces_restreint_rubrique($id_rubrique))
+					$puce = 'puce-orange-anim.gif';
+				else
+					$puce='puce-orange-breve.gif';
+				$title = _T('info_site_attente');
+				break;
+			case 'refuse':
+				if (acces_restreint_rubrique($id_rubrique))
+					$puce = 'puce-poubelle-anim.gif';
+				else
+					$puce='puce-poubelle-breve.gif';
+				$title = _T('info_site_refuse');
+				break;
 	}
-	
-	if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
-
-	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
-
-	if (!$cpt = $cpt['n']) return '' ;
-
-
-	$requete['FROM'] = preg_replace("/(spip_articles( AS \w*)?)/", "\\1 LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete['FROM']);
-
-	$requete['SELECT'] .= ", petitions.id_article AS petition ";
-
-	// memorisation des arguments pour gerer l'affichage par tranche
-	// et/ou par langues.
-
-	$hash = substr(md5(serialize($requete) . $GLOBALS['meta']['gerer_trad'] . $titre), 0, 31);
-	$tmp_var = 't' . substr($hash, 0, 7);
-	$nb_aff = floor(1.5 * _TRANCHES);
-	$deb_aff = intval(_request($tmp_var));
-
-	//
-	// Stocke la fonction ajax dans le fichier temp pour exec=memoriser
-	//
-
-	// on lit l'existant
-	lire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt', $ajax_fonctions);
-	$ajax_fonctions = @unserialize($ajax_fonctions);
-
-	// on ajoute notre fonction
-	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
-	$v = array(time(), $titre, $requete, $tmp_var, $formater);
-	$ajax_fonctions[$hash] = $v;
-
-	// supprime les fonctions trop vieilles
-	foreach ($ajax_fonctions as $h => $fonc)
-		if (time() - $fonc[0] > 48*3600)
-			unset($ajax_fonctions[$h]);
-
-	// enregistre
-	ecrire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt',
-		serialize($ajax_fonctions));
-
-
-	return afficher_articles_trad($titre, $requete, $formater, $tmp_var, $hash, $cpt);
+	return http_img_pack($puce, $statut, "class='puce'",$title);
 }
 
-// http://doc.spip.org/@afficher_articles_trad
-function afficher_articles_trad($titre_table, $requete, $formater, $tmp_var, $hash, $cpt, $trad=0) {
-
-	global $spip_lang_right;
-
-	if ($trad) {
-		$formater = 'afficher_articles_trad_boucle';
-		$icone = "langues-off-12.gif";
-		$alt = _T('masquer_trad');
-	} else {
-		if (!$formater) {
-			$formater_article =  charger_fonction('formater_article', 'inc');
-			$formater = $formater_article;
+function puce_statut_syndic_article($id_syndic, $statut, $id_rubrique, $type){
+		if ($statut=='publie') {
+				$puce='puce-verte.gif';
 		}
-		$icone = 'langues-12.gif';
-		$alt = _T('afficher_trad');
-	}
-
-	$nb_aff = ($cpt  > floor(1.5 * _TRANCHES)) ? _TRANCHES : floor(1.5 * _TRANCHES) ;
-	$deb_aff = intval(_request($tmp_var));
-
-	$q = spip_query("SELECT " . $requete['SELECT'] . " FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '') . ($requete['ORDER BY'] ? (' ORDER BY ' . $requete['ORDER BY']) : '') . " LIMIT " . ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
-	$t = '';
-	while ($r = spip_fetch_array($q))
-		if (autoriser('voir','article',$r['id_article']))
-			$t .= $formater($r);
-	spip_free_result($q);
-
-	if ($t)
-	  $t = afficher_liste_debut_tableau()
-	    . $t
-	    . afficher_liste_fin_tableau();
-
-	$style = "style='visibility: hidden; float: $spip_lang_right'";
-
-	$texte = http_img_pack("searching.gif", "", $style . " id='img_$tmp_var'");
-
-	if (($GLOBALS['meta']['gerer_trad'] == "oui")) {
-		$url = generer_url_ecrire('memoriser',"hash=$hash&trad=" . (1-$trad));
-		$texte .= 
-		 "\n<span style='float: $spip_lang_right;'><a href=\"#\"\nonclick=\"return charger_id_url('$url','$tmp_var');\">"
-		. "<img\nsrc='". _DIR_IMG_PACK . $icone ."' alt='$alt' /></a></span>";
-	}
-	$texte .=  '<b>' . $titre_table  . '</b>';
-
-	$res = "\n<div class='liste'>"
-	. bandeau_titre_boite2($texte, "article-24.gif", 'toile_blanche', 'ligne_noire')
-	. (($cpt <= $nb_aff) ? ''
-	   : afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('memoriser', "hash=$hash&trad=$trad"), $nb_aff))
-	. $t
-	. "</div>\n";
-
-	return ajax_action_greffe($tmp_var,$res);
-}
-
-// http://doc.spip.org/@afficher_articles_trad_boucle
-function afficher_articles_trad_boucle($row)
-{
-  	global $lang_objet,  $spip_lang_right, $spip_display;
-
-	$lang_dir = lang_dir($lang_objet);
-	$vals = '';
-	$id_article = $row['id_article'];
-	$titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
-	$id_rubrique = $row['id_rubrique'];
-	$date = $row['date'];
-	$statut = $row['statut'];
-	$id_trad = $row['id_trad'];
-	$lang = $row['lang'];
-
-	// La petite puce de changement de statut
-	$vals[] = puce_statut_article($id_article, $statut, $id_rubrique);
-
-	// Le titre (et la langue)
-	
-	$langues_art = "";
-	$dates_art = "";
-	$l = "";
-
-	$res_trad = spip_query("SELECT id_article, lang, date_modif  FROM spip_articles WHERE id_trad = $id_trad AND id_trad > 0");
-
-	while ($row_trad = spip_fetch_array($res_trad)) {
-
-		$id_article_trad = $row_trad["id_article"];
-		$lang_trad = $row_trad["lang"];
-		$date_trad = $row_trad["date_modif"];
-		$dates_art[$lang_trad] = $date_trad;
-		$langues_art[$lang_trad] = $id_article_trad;
-		if ($id_article_trad == $id_trad) $date_ref = $date;
-	}
-
-
-	// faudrait sortir ces invariants de boucle
-
-	if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') {
-			$afficher_langue = true;
-			$langue_defaut = isset($GLOBALS['langue_rubrique'])
-			  ? $GLOBALS['meta']['langue_site']
-			  : $GLOBALS['langue_rubrique'];
-	}
-
-	$span_lang = false;
-
-	foreach(explode(',', $GLOBALS['meta']['langues_multilingue']) as $k){
-		if ($langues_art[$k]) {
-			if ($langues_art[$k] == $id_trad) {
-				$span_lang = "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "'><span class='lang_base'>$k</span></a>";
-				$l .= $span_lang;
-			} else {
-				$date = $dates_art[$k];
-				if ($date < $date_ref) 
-					$l .= "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "' class='claire'>$k</a>";
-				else $l .= "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "' class='foncee'>$k</a>";
-			}			
+		else if ($statut == "refuse") {
+				$puce = 'puce-poubelle.gif';
 		}
-#				else $l.= "<span class='creer'>$k</span>";
-	}
-			
-	if (!$span_lang)
-		$span_lang = "<a href='" . generer_url_ecrire("articles","id_article=$id_article") . "'><span class='lang_base'>$lang</span></a>";
-
-	$vals[] = "\n<div style='text-align: center;'>$span_lang</div>";
-			
-			
-	$s = "\n<div>";
-	$s .= "\n<div style='float: $spip_lang_right; margin-right: -10px;'>$l</div>";
 	
-	if (acces_restreint_rubrique($id_rubrique))
-		$s .= http_img_pack("admin-12.gif", _T('titre_image_administrateur'), "width='12' height='12'", _T('titre_image_admin_article'));
-
-	$s .= "<a href='" . generer_url_ecrire("articles","id_article=$id_article") . " dir='$lang_dir' style=\"display:block;\">";
-			
-			
-	if ($id_article == $id_trad) $titre = "<b>$titre</b>";
-			
-	$s .= typo($titre);
-
-	if ($afficher_langue AND $lang != $langue_defaut)
-		$s .= " <span class='spip_xx-small' style='color: #666666'  dir='$lang_dir'>(".traduire_nom_langue($lang).")</span>";
-
-	$s .= "</a>";
-	$s .= "</div>";
-	
-	$vals[] = $s;
-	
-	$vals[] = "";
-	
-	$largeurs = array(11, 24, '', '1');
-	$styles = array('', 'arial1', 'arial1', '');
-
-	return ($spip_display != 4)
-	? afficher_liste_display_neq4($largeurs, $vals, $styles)
-	: afficher_liste_display_eq4($largeurs, $vals, $styles);
-}
-
-//
-// Afficher tableau de breves
-//
-
-// http://doc.spip.org/@afficher_breves
-function afficher_breves($titre_table, $requete, $affrub=false) {
- 
-	if (($GLOBALS['meta']['multi_rubriques'] == 'oui'
-	     AND (!isset($GLOBALS['id_rubrique'])))
-	OR $GLOBALS['meta']['multi_articles'] == 'oui') {
-		$afficher_langue = true;
-
-		if (isset($GLOBALS['langue_rubrique'])) $langue_defaut = $GLOBALS['langue_rubrique'];
-		else $langue_defaut = $GLOBALS['meta']['langue_site'];
-	} else $afficher_langue = $langue_defaut = '';
-
-
-	$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
-
-	if ($affrub) $largeurs = array('7', '', '188', '38');
-	else $largeurs = array('7','', '100', '38');
-	$styles = array('', 'arial11', 'arial1', 'arial1');
-
-	return affiche_tranche_bandeau($requete, "breve-24.gif", 'toile_foncee', "ligne_blanche", $tmp_var, $titre_table, false, $largeurs, $styles, 'afficher_breves_boucle', array( $afficher_langue, $affrub, $langue_defaut));
-
-}
-
-// http://doc.spip.org/@afficher_breves_boucle
-function afficher_breves_boucle($row, &$tous_id,  $voir_logo, $own)
-{
-	global $connect_statut, $spip_lang_right;
-	list($afficher_langue, $affrub, $langue_defaut) = $own;
-
-	$vals = '';
-
-	$id_breve = $row['id_breve'];
-	if (autoriser('voir','breve',$id_breve)){
-		$tous_id[] = $id_breve;
-		$date_heure = $row['date_heure'];
-		$titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
-		$statut = $row['statut'];
-		if (isset($row['lang']))
-		  changer_typo($lang = $row['lang']);
-		else $lang = $langue_defaut;
-		$lang_dir = lang_dir($lang);
-		$id_rubrique = $row['id_rubrique'];
-		
-		$vals[] = puce_statut_breve($id_breve, $statut, $id_rubrique, 'breve');
-	
-		$s = "\n<div>";
-		$s .= "<a href='" . generer_url_ecrire("breves_voir","id_breve=$id_breve") . "' style=\"display:block;\">";
-		if ($voir_logo) {
-			$chercher_logo = charger_fonction('chercher_logo', 'inc');
-			if ($logo = $chercher_logo($id_breve, 'id_breve', 'on')) {
-				list($fid, $dir, $nom, $format) = $logo;
-				include_spip('inc/filtres_images');
-				$logo = image_reduire("<img src='$fid' alt='' />", 26, 20);
-				if ($logo)
-					$s .= "\n<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</span>";
-			}
+		else if ($statut == "dispo") { // moderation : a valider
+				$puce = 'puce-rouge.gif';
 		}
-		$s .= typo($titre);
-		if ($afficher_langue AND $lang != $langue_defaut)
-			$s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>(".traduire_nom_langue($lang).")</span>";
-		$s .= "</a>";
-	
 	
-		$s .= "</div>";
-		$vals[] = $s;
+		else if ($statut == "off") { // feed d'un site en mode "miroir"
+				$puce = 'puce-rouge-anim.gif';
+		}
 	
-		$s = "";
-		if ($affrub) {
-			$rub = spip_fetch_array(spip_query("SELECT id_rubrique, titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
-			$id_rubrique = $rub['id_rubrique'];
-			$s .= "<a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "' style=\"display:block;\">".typo($rub['titre'])."</a>";
-		} else if ($statut != "prop")
-				$s = affdate_jourcourt($date_heure);
-			else
-				$s .= _T('info_a_valider');
-		$vals[] = $s;
-				
-		$vals[] = afficher_numero_edit($id_breve, 'id_breve', 'breve');
-	}
-	return $vals;
+		return http_img_pack($puce, $statut, "class='puce'");
 }
 
 
-//
-// Afficher tableau de rubriques
-//
-
-// http://doc.spip.org/@afficher_rubriques
-function afficher_rubriques($titre_table, $requete) {
-
-        $tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
-	$largeurs = array('12','', '');
-	$styles = array('', 'arial2', 'arial11');
-	return affiche_tranche_bandeau($requete, "rubrique-24.gif", 'toile_gris_fort', 'ligne_blanche', $tmp_var, $titre_table, false, $largeurs, $styles, 'afficher_rubriques_boucle');
-}
-
-// http://doc.spip.org/@afficher_rubriques_boucle
-function afficher_rubriques_boucle($row, &$tous_id)
+// http://doc.spip.org/@afficher_script_statut
+function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act)
 {
-	$vals = '';
-
-	$id_rubrique = $row['id_rubrique'];
-	$id_parent = $row['id_parent'];
-	$tous_id[] = $id_rubrique;
-	$titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
-	$lang = traduire_nom_langue($row['lang']);
-	$langue_choisie = $row['langue_choisie'];
-	
-	if ($id_parent == 0) $puce = "secteur-12.gif";
-	else $puce = "rubrique-12.gif";
-	
-	$vals[] = http_img_pack($puce, '', "");
-	
-	$s = "<a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "' style='font-weight: bold;'>";
-	$s .= typo($titre);
-	$s .= "</a>";
-	$vals[] = $s;
-	
-	$s = "\n<div style='text-align: right'>";
-	if  ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
-		if ($langue_choisie == "oui") $s .= "<b>$lang</b>";
-		else $s .= "($lang)";
-	}
-	$s .= "</div>";
-	$vals[] = $s;
-
-	return $vals;
+  $i = http_wrapper($img);
+  $h = generer_action_auteur("instituer_$type","$id-$statut");
+  $h = "javascript:selec_statut('$id', '$type', $n, '$i', '$h');";
+  $t = supprimer_tags($titre);
+  return "<a href=\"$h\"\ntitle=\"$t\"$act><img src='$i' alt=' '/></a>";
 }
 
 //
@@ -1199,15 +904,6 @@ function afficher_forum_thread($row, $controle_id_article, $compteur_forum, $nb_
 }
 
 
-// http://doc.spip.org/@forum_logo
-function forum_logo($statut)
-{
-	if ($statut == "prive") return "forum-interne-24.gif";
-	else if ($statut == "privadm") return "forum-admin-24.gif";
-	else if ($statut == "privrac") return "forum-interne-24.gif";
-	else return "forum-public-24.gif";
-}
-
 // http://doc.spip.org/@afficher_forum_mots
 function afficher_forum_mots($id_forum)
 {
@@ -1247,6 +943,16 @@ function afficher_forum_4($compteur_forum, $nb_forum, $thread)
 }
 
 
+// http://doc.spip.org/@forum_logo
+function forum_logo($statut)
+{
+	if ($statut == "prive") return "forum-interne-24.gif";
+	else if ($statut == "privadm") return "forum-admin-24.gif";
+	else if ($statut == "privrac") return "forum-interne-24.gif";
+	else return "forum-public-24.gif";
+}
+
+
 // http://doc.spip.org/@envoi_link
 function envoi_link($nom_site_spip, $minipres=false) {
 	global $auteur_session, $connect_toutes_rubriques, $spip_display, $spip_lang;
@@ -1874,35 +1580,6 @@ function meme_rubrique($id_rubrique, $id, $type, $order='date', $limit=NULL, $aj
 	. "\n<div id='imgstatut$idom$id_rubrique' class='bandeau_rubriques' style='z-index: 1;'>$retour</div>";
 }
 
-// http://doc.spip.org/@afficher_numero_edit
-function afficher_numero_edit($id, $key, $type)
-{
-	global $spip_lang_right, $spip_lang_left;
-	static $numero , $style='' ;
-
-	if (!$style) {
-		$style = " class='spip_xx-small' style='float: $spip_lang_right; padding-$spip_lang_left: 4px; color: black; '"; 
-
-		$numero = _T('info_numero_abbreviation');
-	}
-
-	if (!autoriser('modifier',$type,$id)) {
-		$bal ='span';
-		$href = '';
-	} else {
-		$bal = 'a';
-		$href = "\nhref='"
-		. generer_url_ecrire($type . "s_edit","$key=$id")
-		. "' title='"
-		. _T('bouton_modifier')
-		. "'";
-	}
-	return "<$bal$style$href><b>"
-	. $numero
-	. $id
-	. "</b></$bal>";
-}
-
 //
 // Afficher la hierarchie des rubriques
 //
diff --git a/ecrire/inc/sites_voir.php b/ecrire/inc/sites_voir.php
deleted file mode 100644
index 979700a9c271c875d458e81f363d4cd65dd50e92..0000000000000000000000000000000000000000
--- a/ecrire/inc/sites_voir.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-
-/***************************************************************************\
- *  SPIP, Systeme de publication pour l'internet                           *
- *                                                                         *
- *  Copyright (c) 2001-2007                                                *
- *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
- *                                                                         *
- *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
- *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
-\***************************************************************************/
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-include_spip('inc/actions');
-
-// http://doc.spip.org/@afficher_sites
-function afficher_sites($titre_table, $requete)
-{
-	$tmp_var = 't_' . substr(md5(join(' ',$requete)), 0, 4);
-
-	return affiche_tranche_bandeau($requete, "site-24.gif", 'toile_claire', 'ligne_noire', $tmp_var, $titre_table, false,  array('','',''), array('arial11', 'arial1', 'arial1'), 'afficher_sites_boucle');
-}
-
-// http://doc.spip.org/@afficher_sites_boucle
-function afficher_sites_boucle($row, &$tous_id, $voir_logo, $bof)
-{
-	global $spip_lang_right;
-	$vals = '';
-	$id_syndic=$row["id_syndic"];
-	if (autoriser('voir','site',$id_syndic)){
-		$id_rubrique=$row["id_rubrique"];
-		$nom_site=sinon(typo($row["nom_site"]), _T('info_sans_titre'));
-		$url_site=$row["url_site"];
-		$url_syndic=$row["url_syndic"];
-		$syndication=$row["syndication"];
-		$statut=$row["statut"];
-				
-		$tous_id[] = $id_syndic;
-	
-		switch ($statut) {
-			case 'publie':
-					if (acces_restreint_rubrique($id_rubrique))
-						$puce = 'puce-verte-anim.gif';
-					else
-						$puce='puce-verte-breve.gif';
-					$title = _T('info_site_reference');
-					break;
-				case 'prop':
-					if (acces_restreint_rubrique($id_rubrique))
-						$puce = 'puce-orange-anim.gif';
-					else
-						$puce='puce-orange-breve.gif';
-					$title = _T('info_site_attente');
-					break;
-				case 'refuse':
-					if (acces_restreint_rubrique($id_rubrique))
-						$puce = 'puce-poubelle-anim.gif';
-					else
-						$puce='puce-poubelle-breve.gif';
-					$title = _T('info_site_refuse');
-					break;
-		}
-		if ($syndication == 'off' OR $syndication == 'sus') {
-					$puce = 'puce-orange-anim.gif';
-					$title = _T('info_panne_site_syndique');
-				}
-	
-		$s = "<a href=\"".generer_url_ecrire("sites","id_syndic=$id_syndic")."\" title=\"$title\">";
-	
-		if ($voir_logo) {
-			$chercher_logo = charger_fonction('chercher_logo', 'inc');
-			if ($logo = $chercher_logo($id_syndic, 'id_syndic', 'on'))  {
-				list($fid, $dir, $nom, $format) = $logo;
-				include_spip('inc/filtres_images');
-				$logo = image_reduire("<img src='$fid' alt='' />", 26, 20);
-				if ($logo)
-					$s .= "<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</span>";
-			}
-		}
-	
-		$s .= http_img_pack($puce, $statut, "class='puce'") ."&nbsp;&nbsp;";
-				
-		$s .= typo($nom_site);
-		
-		$s .= "</a> &nbsp;&nbsp; <span class='spip_xx-small'>[<a href='$url_site'>"._T('lien_visite_site')."</a>]</span>";
-		$vals[] = $s;
-				
-		$s = "";
-	
-		if ($syndication == 'off' OR $syndication == 'sus') {
-			$s .= "<span style='color: red;'>"._T('info_probleme_grave')." </span>";
-		}
-		if ($syndication == "oui" or $syndication == "off" OR $syndication == 'sus'){
-			$s .= "<span style='color: red;'>"._T('info_syndication')."</span>";
-		}
-		$vals[] = $s;
-	
-		if ($syndication == "oui" OR $syndication == "off" OR $syndication == "sus") {
-			$total_art = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_syndic_articles WHERE id_syndic='$id_syndic'"));
-			$s = " " . $total_art['n'] . " " . _T('info_syndication_articles');
-		} else {
-				$s = "&nbsp;";
-		}
-		$vals[] = $s;
-	}
-
-	return $vals;
-}
-
-// http://doc.spip.org/@afficher_syndic_articles
-function afficher_syndic_articles($titre_table, $requete, $id = 0) {
-	global $connect_statut, $spip_lang_right;
-
-	$col = (($connect_statut == '0minirezo') ? 3 :  2) + ($id==0);
-	$tmp_var = 't_' . substr(md5(join(' ',$requete)), 0, 4);
-
-	if (!$requete['FROM']) $requete['FROM']= 'spip_syndic_articles';
-
-	if (!$id) {
-			$largeurs = array(7, '', '100');
-			$styles = array('','arial11', 'arial1');
-	} else {
-			$largeurs = array(7, '');
-			$styles = array('','arial11');
-	}
-	if ($connect_statut == '0minirezo') {
-			$largeurs[] = '80';
-			$styles[] = 'arial1';
-	}
-
-	return affiche_tranche_bandeau($requete, "site-24.gif", "toile_gris_fort", "ligne_blanche", $tmp_var, $titre_table, $obligatoire, $largeurs, $styles, 'afficher_syndic_articles_boucle', array($tmp_var, $id));
-}
-
-// http://doc.spip.org/@afficher_syndic_articles_boucle
-function afficher_syndic_articles_boucle($row, &$my_sites, $bof, $redirect)
-{
-	global  $connect_statut, $spip_lang_right;
-
-	$vals = '';
-
-	$id_syndic_article=$row["id_syndic_article"];
-	$id_syndic=$row["id_syndic"];
-	if (autoriser('voir','site',$id_syndic)){
-		$titre=safehtml($row["titre"]);
-		$url=$row["url"];
-		$date=$row["date"];
-		$lesauteurs=typo($row["lesauteurs"]);
-		$statut=$row["statut"];
-		$descriptif=safehtml($row["descriptif"]);
-	
-		if ($statut=='publie') {
-				$puce='puce-verte.gif';
-		}
-		else if ($statut == "refuse") {
-				$puce = 'puce-poubelle.gif';
-		}
-	
-		else if ($statut == "dispo") { // moderation : a valider
-				$puce = 'puce-rouge.gif';
-		}
-	
-		else if ($statut == "off") { // feed d'un site en mode "miroir"
-				$puce = 'puce-rouge-anim.gif';
-		}
-	
-		$vals[] = http_img_pack($puce, $statut, "class='puce'");
-	
-		$s = "<a href='$url'>$titre</a>";
-	
-		$date = affdate_court($date);
-		if (strlen($lesauteurs) > 0) $date = $lesauteurs.', '.$date;
-		$s.= " ($date)";
-	
-		// Tags : d'un cote les enclosures, de l'autre les liens
-		if($e = afficher_enclosures($row['tags']))
-			$s .= ' '.$e;
-	
-		// descriptif
-		if (strlen($descriptif) > 0) {
-			// couper un texte vraiment tres long
-			if (strlen($descriptif) > 10000)
-				$descriptif = safehtml(spip_substr($descriptif, 0, 6000)).' (...)';
-			else
-				$descriptif = safehtml($descriptif);
-			$s .= '<div class="arial1">'
-				# 385px = largeur de la colonne ou s'affiche le texte
-				. filtrer('image_reduire',$descriptif, 385, 550)
-				. '</div>';
-		}
-	
-		// tags
-		if ($tags = afficher_tags($row['tags']))
-			$s .= "<div style='float:$spip_lang_right;'>&nbsp;<em>"
-				. $tags . '</em></div>';
-	
-		// source
-		if (strlen($row['url_source']))
-			$s .= "<div style='float:$spip_lang_right;'>"
-			. propre("[".$row['source']."->".$row['url_source']."]")
-			. "</div>";
-		else if (strlen($row['source']))
-			$s .= "<div style='float:$spip_lang_right;'>"
-			. typo($row['source'])
-			. "</div>";
-	
-		$vals[] = $s;
-	
-		// on n'affiche pas la colonne 'site' lorsqu'on regarde un site precis
-		if ($GLOBALS['exec'] != 'sites') {
-			// $my_sites cache les resultats des requetes sur les sites
-			if (!$my_sites[$id_syndic])
-				$my_sites[$id_syndic] = spip_fetch_array(spip_query("SELECT nom_site, moderation, miroir FROM spip_syndic WHERE id_syndic=$id_syndic"));
-	
-			$aff = $my_sites[$id_syndic]['nom_site'];
-			if ($my_sites[$id_syndic]['moderation'] == 'oui')
-				$aff = "<i>$aff</i>";
-				
-			$s = "<a href='" . generer_url_ecrire("sites","id_syndic=$id_syndic") . "'>$aff</a>";
-	
-			$vals[] = $s;
-		}
-					
-		if ($connect_statut == '0minirezo'){
-			list($tmp_var, $id) = $redirect;
-			$redirect = ($tmp_var . '=' . intval(_request($tmp_var)))
-			. (!$id ? '' : "&id_syndic=$id");
-	
-			if ($statut == "publie"){
-			  $s =  "[<a href='". redirige_action_auteur('instituer_syndic',"$id_syndic_article-refuse", $GLOBALS['exec'], $redirect) . "'><span style='color: black'>"._T('info_bloquer_lien')."</span></a>]";
-			
-			}
-			else if ($statut == "refuse"){
-			  $s =  "[<a href='". redirige_action_auteur('instituer_syndic',"$id_syndic_article-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_retablir_lien')."</a>]";
-			}
-			else if ($statut == "off"
-			AND $my_sites[$id_syndic]['miroir'] == 'oui') {
-				$s = '('._T('syndic_lien_obsolete').')';
-			}
-			else /* 'dispo' ou 'off' (dans le cas ancien site 'miroir') */
-			{
-			  $s = "[<a href='". redirige_action_auteur('instituer_syndic',"$id_syndic_article-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_valider_lien')."</a>]";
-			}
-			$vals[] = $s;
-		}
-	}
-
-	return $vals;
-}
-?>
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index c6f2f64f364999a09845f955c3e9c51d232f8a81..efc39c7a18a5a90ab9e2a1d792ca5b6afbfa4e9f 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -553,8 +553,13 @@ function id_table_objet($type) {
 		return 'id_document';
 	else if ($type == 'petition')
 		return 'id_article';
-	else
-		return 'id_'.$type;
+	else {
+		$t = table_objet($type);
+		global $tables_principales;
+		if (isset($tables_principales[$t]['key']["PRIMARY KEY"]))
+			return $tables_principales[$t]['key']["PRIMARY KEY"];
+	}
+	return 'id_'.$type;
 }
 
 // Recuperer le nom de la table de jointure xxxx sur l'objet yyyy
diff --git a/ecrire/inc/vieilles_defs.php b/ecrire/inc/vieilles_defs.php
index 7da2b5f632d6af166816b1ca8d2e48622d63ca15..430c49e92f1b6f7f758d4728287cc859baf463f2 100644
--- a/ecrire/inc/vieilles_defs.php
+++ b/ecrire/inc/vieilles_defs.php
@@ -259,4 +259,18 @@ function generer_url_post_ecrire($script, $args='', $name='', $ancre='', $onchan
 	return "\n<form action='$action$ancre'$name method='post'$onchange>"
 	.form_hidden($action);
 }
+
+function afficher_articles($titre, $requete, $formater='') {
+	afficher_objets('article',$titre,$requete,$formater);
+}
+function afficher_auteurs ($titre_table, $requete) {
+	afficher_objets('auteur',$titre_table,$requete,'');
+}
+function afficher_sites($titre_table, $requete){
+	afficher_objets('site',$titre_table,$requete,'');	
+}
+function afficher_syndic_articles($titre_table, $requete, $id = 0) {
+	afficher_objets('syndic_article',$titre_table,$requete,$id);	
+}
+
 ?>