diff --git a/dist/formulaires/login_forum.html b/dist/formulaires/login_forum.html
index bd70cd4a32930e758ca4e0ca97b2c74fdbbc2bff..360c53cc5c57fe88cffc6ddec229d873d6369908 100644
--- a/dist/formulaires/login_forum.html
+++ b/dist/formulaires/login_forum.html
@@ -11,7 +11,7 @@
 
 <p align="center">
 
-&#91;<a[ href="(#ENV{inscription})&amp;mode=forum[(&amp;id_rubrique=(#ENV{id_rubrique})]&amp;focus=nom_inscription"] target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=500'); return false;"><:login_sinscrire:></a>&#93;
+&#91;<a[ href="(#ENV{inscription})&amp;mode=6forum[(&amp;id_rubrique=(#ENV{id_rubrique})]&amp;focus=nom_inscription"] target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=500'); return false;"><:login_sinscrire:></a>&#93;
 
 &#91;<a[ href="(#ENV{oubli})"] target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=280'); return false;"><:login_motpasseoublie:></a>&#93;
 
diff --git a/ecrire/action/editer_auteur.php b/ecrire/action/editer_auteur.php
index cdb1646ab7f8f8ab0df4a8d4d432c7fdd8a6d9e2..fa5d6dc373a8d28de915801a12352d9b61a69f41 100644
--- a/ecrire/action/editer_auteur.php
+++ b/ecrire/action/editer_auteur.php
@@ -199,8 +199,8 @@ function action_legender_auteur_post($r) {
 	if ($statut = _request('statut')
 	AND autoriser('modifier', 'auteur', $id_auteur, $qui = null,
 	$opt = array('statut'=>$statut))) {
-		if (!in_array($statut,$GLOBALS['liste_des_statuts'])) {
-		  spip_log("action_instituer_auteur_dist: $statut incompris  pour $id_auteur");
+		  if ($statut != addslashes($statut)) {
+		  spip_log("action_editer_auteur_dist: $statut incompris  pour $id_auteur");
 		} else {
 			spip_query("UPDATE spip_auteurs SET statut="._q($statut) . " WHERE id_auteur=" . _q($id_auteur));
 		}
diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php
index ba4606b251c7f4e6eb8da3993d3583139a2b4cba..badfe80ff0721556d99068737507e73ac7c46565 100644
--- a/ecrire/balise/formulaire_forum.php
+++ b/ecrire/balise/formulaire_forum.php
@@ -93,10 +93,10 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
 	if ($type == "abo") {
 		if (!$GLOBALS["auteur_session"]) {
 			return array('formulaires/login_forum', 0,
-				array('inscription' => generer_url_public('spip_inscription'),
-					'oubli' => generer_url_public('spip_pass')));
+					array('inscription' => generer_url_public('', 'action=inscription'),
+						'oubli' => generer_url_public('', 'action=pass')));
 		} else {
-		// forcer ces valeur
+		// forcer ces valeurs
 			$auteur = $GLOBALS['auteur_session']['nom'];
 			$email_auteur = $GLOBALS['auteur_session']['email'];
 		}
diff --git a/ecrire/balise/formulaire_inscription.php b/ecrire/balise/formulaire_inscription.php
index 7624aebb783f736371d53a2bd45591c4ac433fdc..4b0a4aa6eebc40c581c94963b98b9aca9107b2ab 100644
--- a/ecrire/balise/formulaire_inscription.php
+++ b/ecrire/balise/formulaire_inscription.php
@@ -22,7 +22,7 @@ function balise_FORMULAIRE_INSCRIPTION ($p) {
 	return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', array());
 }
 
-// args[0] peut valoir "redac" ou "forum" 
+// args[0] un statut d'auteur (1comite par defaut)
 // args[1] indique la rubrique eventuelle de proposition
 // args[2] indique le focus eventuel
 // [(#FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE})]
@@ -31,7 +31,7 @@ function balise_FORMULAIRE_INSCRIPTION ($p) {
 function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres) {
 	list($mode, $id, $focus) = $args;
 	//initialiser_mode_inscription
-	if(!$mode) $mode = $GLOBALS['meta']['accepter_inscriptions'] == 'oui' ? 'redac' : ''; 
+	if(!$mode) $mode = $GLOBALS['meta']['accepter_inscriptions'] == 'oui' ? '1comite' : ''; 
 	if (!test_mode_inscription($mode))
 		return '';
 	else return array($mode, $focus, $id);
@@ -84,8 +84,9 @@ function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id=0) {
 // http://doc.spip.org/@test_mode_inscription
 function test_mode_inscription($mode) {
 
-	return (($mode == 'redac' AND $GLOBALS['meta']['accepter_inscriptions'] == 'oui')
-		OR ($mode == 'forum'
+  return (($mode == '1comite'  OR ($mode == 'redac') // redac: compatibilite
+		AND $GLOBALS['meta']['accepter_inscriptions'] == 'oui')
+	  OR ($mode == addslashes($mode) // mode libre mais syntaxe propre
 		AND ($GLOBALS['meta']['accepter_visiteurs'] == 'oui'
 			OR $GLOBALS['meta']['forums_publics'] == 'abo')));
 }
diff --git a/ecrire/configuration/visiteurs.php b/ecrire/configuration/visiteurs.php
index 10c6c01bd81d0f3c1398f46e0f5f7616231d9ec8..19a6ecd16f92fb1b8aa05ccc854c8482840ff8f5 100644
--- a/ecrire/configuration/visiteurs.php
+++ b/ecrire/configuration/visiteurs.php
@@ -20,21 +20,17 @@ function configuration_visiteurs_dist()
 {
 	global $spip_lang_left ;
 
-	if ($n = ($forums_publics<>'abo')) {
-			$n = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_articles WHERE accepter_forum='abo' LIMIT 1"));
-			$n = !$n['n'];
-	}
-	if ($n) {
-		$res = "<table border='0' cellspacing='1' cellpadding='3' width=\"100%\">";
-		$res .= "\n<tr><td class='verdana2'>";
-		$res .= _T('info_question_accepter_visiteurs');
-		$res .= "</td></tr>";
-		$res .= "\n<tr><td style='text-align: $spip_lang_left' class='verdana2'>";
-		$res .= afficher_choix('accepter_visiteurs', $GLOBALS['meta']['accepter_visiteurs'],
+	if (!avoir_visiteurs()) {
+		$res = "<table border='0' cellspacing='1' cellpadding='3' width=\"100%\">"
+		. "\n<tr><td class='verdana2'>"
+		. _T('info_question_accepter_visiteurs')
+		. "</td></tr>"
+		. "\n<tr><td style='text-align: $spip_lang_left' class='verdana2'>"
+		. afficher_choix('accepter_visiteurs', $GLOBALS['meta']['accepter_visiteurs'],
 				       array('oui' => _T('info_option_accepter_visiteurs'),
-					'non' => _T('info_option_ne_pas_accepter_visiteurs')));
-		$res .= "</td></tr>\n";
-		$res .= "</td></tr></table>\n";
+					'non' => _T('info_option_ne_pas_accepter_visiteurs')))
+		. "</td></tr>\n"
+		. "</td></tr></table>\n";
 
 		$res = ajax_action_post('configurer', 'visiteurs', 'config_contenu','',$res);
 	} else {
diff --git a/ecrire/exec/auteurs.php b/ecrire/exec/auteurs.php
index 68ae230bc22c75aea2d465fc86c7d147f23567d8..79d106e4a228b2d5c676e0529734c448fa0bf153 100644
--- a/ecrire/exec/auteurs.php
+++ b/ecrire/exec/auteurs.php
@@ -19,7 +19,7 @@ function exec_auteurs_dist()
 {
 	$tri = preg_replace('/\W/', '', _request('tri'));
 	if (!$tri) $tri='nom'; 
-	$statut = preg_replace('/\W/', '', _request('statut'));
+	$statut =  _request('statut');
 
 	$result = requete_auteurs($tri, $statut);
 	$nombre_auteurs = spip_num_rows($result);
@@ -42,7 +42,7 @@ function exec_auteurs_dist()
 		echo $commencer_page(_T('info_auteurs_par_tri',
 					array('partri' => '')),
 				     "auteurs","redacteurs");
-		bandeau_auteurs($tri, $statut=='6forum');
+		bandeau_auteurs($tri, !statut_min_redac($statut));
 
 		echo "<div id='auteurs'>", $res, "</div>";
 		echo pipeline('affiche_milieu',array('args'=>array('exec'=>'auteurs'),'data'=>''));
@@ -50,6 +50,12 @@ function exec_auteurs_dist()
 	}
 }
 
+function statut_min_redac($statut)
+{
+  $x = !$statut OR strpos($statut, "0minirezo") OR strpos($statut, "1comite");
+  return $statut[0] =='!' ? !$x : $x;
+}
+
 // http://doc.spip.org/@lettres_d_auteurs
 function lettres_d_auteurs($query, $debut, $max_par_page, $tri)
 {
@@ -106,12 +112,11 @@ function bandeau_auteurs($tri, $visiteurs)
 
 		$res .= icone_horizontale(_T('icone_informations_personnelles'), generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur"), "fiche-perso-24.gif","rien.gif", false);
 
-		$n = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs WHERE statut='6forum' LIMIT 1"));
-		if ($n) {
-			if ($visiteurs)
+		if (avoir_visiteurs()) {
+                        if ($visiteurs)
 				$res .= icone_horizontale (_T('icone_afficher_auteurs'), generer_url_ecrire("auteurs"), "auteur-24.gif", "", false);
 			else
-				$res .= icone_horizontale (_T('icone_afficher_visiteurs'), generer_url_ecrire("auteurs","statut=6forum"), "auteur-24.gif", "", false);
+				$res .= icone_horizontale (_T('icone_afficher_visiteurs'), generer_url_ecrire("auteurs","statut=!1comite,0minirezo,nouveau"), "auteur-24.gif", "", false);
 		}
 		echo bloc_des_raccourcis($res);
 	}
@@ -129,11 +134,11 @@ function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_pag
 {
 	global $spip_lang_right;
 
-	$arg = $statut ? "&statut=$statut" : '';
+	$arg = $statut ? ("&statut=" .urlencode($statut)) : '';
 	$res ="\n<tr class='toile_gris_moyen'>"
 	. "\n<td style='width: 20px'>";
 
-	if ($tri=='statut' OR $statut !='')
+	if ($tri=='statut')
   		$res .= http_img_pack('admin-12.gif','', " class='lang'");
 	else {
 	  $t =  _T('lien_trier_statut');
@@ -147,10 +152,10 @@ function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_pag
 	else
 		$res .= auteurs_href(_T('info_nom'), "tri=nom$arg", " title='"._T('lien_trier_nom'). "'");
 
-
 	$res .= "</td><td>";
 
-	$col = ($statut == '6forum') ? _T('message') : _T('info_articles');
+	$col = statut_min_redac($statut) ? _T('info_articles') : _T('message') ;
+
 	if ($tri=='nombre')
 		$res .= '<b>' . $col .'</b>';
 	else
@@ -167,9 +172,9 @@ function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_pag
 			if ($j == $debut)
 				$res .= "<b>$j</b>";
 			else if ($j > 0)
-				$res .= auteurs_href($j, "tri=$tri&statut=$statut&debut=$j");
+				$res .= auteurs_href($j, "tri=$tri$arg&debut=$j");
 			else
-				$res .= auteurs_href('0', "tri=$tri&statut=$statut");
+				$res .= auteurs_href('0', "tri=$tri$arg");
 			if ($debut > $j  AND $debut < $j+$max_par_page){
 				$res .= " | <b>$debut</b>";
 			}
@@ -182,7 +187,7 @@ function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_pag
 				if ($val == $debut)
 					$res .= "<b>$key</b>\n";
 				else
-					$res .= auteurs_href($key, "tri=$tri&statut=$statut&debut=$val") . "\n";
+					$res .= auteurs_href($key, "tri=$tri$arg&debut=$val") . "\n";
 			}
 			$res .= "</td></tr>\n";
 		}
@@ -196,11 +201,11 @@ function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_pag
 
 		if ($debut > 0) {
 			$debut_prec = max($debut - $max_par_page, 0);
-			$nav .= auteurs_href('&lt;&lt;&lt;',"tri=$tri&debut=$debut_prec&statut=$statut");
+			$nav .= auteurs_href('&lt;&lt;&lt;',"tri=$tri&debut=$debut_prec$arg");
 		}
 		$nav .= "</td><td style='text-align: $spip_lang_right'>";
 		if ($debut_suivant < $nombre_auteurs) {
-			$nav .= auteurs_href('&gt;&gt;&gt;',"tri=$tri&debut=$debut_suivant&statut=$statut");
+			$nav .= auteurs_href('&gt;&gt;&gt;',"tri=$tri&debut=$debut_suivant&$arg");
 		}
 		$nav .= "</td></tr></table>\n";
 	}
@@ -239,10 +244,14 @@ function requete_auteurs($tri, $statut)
 // sauf les admins, toujours visibles.
 // limiter les statuts affiches
 if ($connect_statut == '0minirezo') {
-	if ($statut) {
-		$sql_visible = "aut.statut IN ('$statut')";
-	} else {
+	if (!$statut) {
 		$sql_visible = "aut.statut IN ('0minirezo','1comite','5poubelle')";
+	} else {
+		if ($statut[0]="!") {
+		  $statut = substr($statut,1); $not = " NOT";
+		} else $not = '';
+		$statut = preg_replace('/\W+/',"','",$statut); 
+		$sql_visible = "aut.statut$not IN ('$statut')";
 	}
 } else {
 	$sql_visible = "(
@@ -270,12 +279,12 @@ default:
 	$sql_order = " multi";
 }
 
-
+ $visit = ($statut  AND ($statut!='1comite') AND ($statut != '0minirezo'));
 //
 // La requete de base est tres sympa
 // (pour les visiteurs, ca postule que les messages concernent des articles)
 
- $row = spip_query("SELECT							aut.id_auteur AS id_auteur,							aut.statut AS statut,								aut.nom AS nom,								UPPER(aut.nom) AS unom,							count(lien.id_article) as compteur							$sql_sel									FROM spip_auteurs as aut " . (($statut == '6forum') ? 			"LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur " :		("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur	 LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)")) .	" WHERE $sql_visible GROUP BY aut.id_auteur ORDER BY $sql_order");
+ $row = spip_query("SELECT							aut.id_auteur AS id_auteur,							aut.statut AS statut,								aut.nom AS nom,								UPPER(aut.nom) AS unom,							count(lien.id_article) as compteur							$sql_sel									FROM spip_auteurs as aut " . ($visit ?		 			"LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur " :		("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur	 LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)")) .	" WHERE $sql_visible GROUP BY aut.id_auteur ORDER BY $sql_order");
  return $row;
 }
 
diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php
index 88f76c281f9f324342252decfb06c6d3369110e7..45daec30573120685761a6adac531f87b8009a72 100644
--- a/ecrire/inc/auth.php
+++ b/ecrire/inc/auth.php
@@ -71,9 +71,9 @@ function auth_rubrique($id_auteur, $statut)
 function acces_statut($id_auteur, $statut, $bio)
 {
 	if ($statut == 'nouveau') {
-		$statut = ($bio ? ($bio == 'redac' ? '1comite' : '6forum'):
-			   (($GLOBALS['meta']['accepter_inscriptions'] == 'oui') ? '1comite' : '6forum'));
-		spip_query("UPDATE spip_auteurs SET bio='', statut='$statut'	WHERE id_auteur=$id_auteur");
+		$statut = $bio ? $bio :
+		  (($GLOBALS['meta']['accepter_inscriptions'] == 'oui') ? '1comite' : '6forum');
+		spip_query("UPDATE spip_auteurs SET bio='', statut=" . _q($statut) . " WHERE id_auteur=$id_auteur");
 	}
 	return $statut;
 }
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 6d15b274f090ce41476a44f583aac0b1a6879f75..101d847cc052a73b2de56742dc85ac144c065fa1 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -159,8 +159,8 @@ function autoriser_rubrique_creersitedans_dist($faire, $type, $id, $qui, $opt) {
 		AND $GLOBALS['meta']['activer_sites'] != 'non'
 		AND (
 			$qui['statut']=='0minirezo'
-			OR ($qui['statut']=='1comite' AND $GLOBALS['meta']["proposer_sites"]>=1)
-			OR ($qui['statut']=='6forum' AND $GLOBALS['meta']["proposer_sites"]>=2) );
+			OR ($GLOBALS['meta']["proposer_sites"] >= 
+			    ($qui['statut']=='1comite' ? 1 : 2)));
 }
 
 // Autoriser a modifier un site
diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php
index f36665209b8e26a7583a0d6e5f175bb0c0519eac..e75e5d3f0531df34e500b7dab526aaca30432530 100644
--- a/ecrire/inc/boutons.php
+++ b/ecrire/inc/boutons.php
@@ -152,11 +152,9 @@ function definir_barre_boutons() {
 
 	$sousmenu=array();
 
-	$n = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs WHERE statut='6forum' LIMIT 1"));
-
-	if ($n)
+	if (avoir_visiteurs())
 		$sousmenu['auteurs'] = 
-			new Bouton("fiche-perso.png", 'icone_afficher_visiteurs', null, "statut=6forum");
+			new Bouton("fiche-perso.png", 'icone_afficher_visiteurs', null, "statut=!1comite,0minirezo,nouveau");
 
 	$sousmenu['auteur_infos']=
 		new Bouton("auteur-24.gif", "icone_creer_nouvel_auteur", null, 'new=oui');
diff --git a/ecrire/inc/editer_auteurs.php b/ecrire/inc/editer_auteurs.php
index 80a469ed12380e00a4035ee41746f53c0aa4a37b..dd5be03a25d1297477f22f344299dacc2be7dcb6 100644
--- a/ecrire/inc/editer_auteurs.php
+++ b/ecrire/inc/editer_auteurs.php
@@ -151,7 +151,7 @@ function determiner_non_auteurs($type, $id, $cond_les_auteurs, $order)
 	if (strlen($cond))
 		$cond = "id_auteur NOT IN (" . substr($cond,1) . ') AND ';
 
-	return spip_query("SELECT * FROM spip_auteurs WHERE $cond" . "statut!='5poubelle' AND statut!='6forum' AND statut!='nouveau' ORDER BY $order");
+	return spip_query("SELECT * FROM spip_auteurs WHERE $cond" . "statut='0minirezo' OR statut='1comite' ORDER BY $order");
 }
 
 // http://doc.spip.org/@rechercher_auteurs_objet
diff --git a/ecrire/inc/formater_auteur.php b/ecrire/inc/formater_auteur.php
index 48a82b1bcaba90b3b053f925309e96a504fa25d3..074aabd9fd1cefcf4e51c2a9d2c35cf67f846362 100644
--- a/ecrire/inc/formater_auteur.php
+++ b/ecrire/inc/formater_auteur.php
@@ -12,7 +12,6 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-
 //
 // Construit un tableau des 5 informations principales sur un auteur,
 // avec des liens vers les scripts associes:
@@ -20,9 +19,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // 2. l'icone du mail avec un lien mailto ou a defaut la messagerie de Spip
 // 3. le nom, avec lien vers la page complete des informations
 // 4. le mot "site" avec le lien vers le site Web personnelle
-// 5. le nombre d'articles publies
+// 5. le nombre d'objets publies
 //
 
+// Un auteur sans autorisation de modification de soi  est un visiteur;
+// il n'a pas de messagerie interne, et n'a publie que des messages de forum
+
 // http://doc.spip.org/@inc_formater_auteur_dist
 function inc_formater_auteur_dist($id_auteur) {
 
@@ -54,7 +56,7 @@ function inc_formater_auteur_dist($id_auteur) {
 	if ($url_site_auteur = $row["url_site"]) $vals[] =  "<a href='$url_site_auteur'>"._T('info_site_min')."</a>";
 	else $vals[] =  "&nbsp;";
 
-	if ($row['statut'] != '6forum') {
+	if (autoriser('modifier', 'auteur', $id_auteur, $row)) {
 	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(articles.id_article) AS n FROM spip_auteurs_articles AS lien, spip_articles AS articles WHERE lien.id_auteur=$id_auteur AND articles.id_article=lien.id_article AND articles.statut IN " . ($connect_statut == "0minirezo" ? "('prepa', 'prop', 'publie', 'refuse')" : "('prop', 'publie')") . " GROUP BY lien.id_auteur"), SPIP_NUM);
 	  $t = _T('info_article_2');
 	  $t1 = _T('info_1_article'); 
@@ -78,9 +80,8 @@ function formater_auteur_mail($row, $id_auteur)
 {
 	global $spip_lang_rtl;
 
-	$email = $row['email'];
-	if (($row['statut'] == '6forum') || ($row['statut'] == '5poubelle'))
-		$href= 'mailto:' . $email;
+	if (!autoriser('modifier', 'auteur', $id_auteur, $row))
+		$href= 'mailto:' . $row['email'];
 	else $href = generer_action_auteur("editer_message","normal/$id_auteur");
 	return "<a href='$href' title=\""
 	  .  _T('info_envoyer_message_prive')
diff --git a/ecrire/inc/instituer_auteur.php b/ecrire/inc/instituer_auteur.php
index 83e26d72f76155fdf9031cd6b699b656182e4d26..f81652e016e97f01edb7b83005d7d8fbb042d447 100644
--- a/ecrire/inc/instituer_auteur.php
+++ b/ecrire/inc/instituer_auteur.php
@@ -68,72 +68,56 @@ function choix_statut_auteur($statut, $id_auteur, $ancre) {
 	null, array('statut' => '?')))
 		return '';
 
-	// Calculer le menu
-	$menu = "<select name='statut' size='1' class='fondl'
-		onchange=\"(this.options[this.selectedIndex].value == '0minirezo')?jQuery('#$ancre').slideDown():jQuery('#$ancre:visible').slideUp();\">";
-
-	// A-t-on le droit de promouvoir cet auteur comme admin ?
-	if (autoriser('modifier', 'auteur', intval($id_auteur),
-	null, array('statut' => '0minirezo'))) {
-		$menu .= "\n<option" .
-			mySel("0minirezo",$statut) .
-			">" . _T('item_administrateur_2')
-			. '</option>';
-	}
-
-	// Ajouter le choix "comite"
-	$menu .=
-		"\n<option" .
-		mySel("1comite",$statut) .
-		">" .
-		_T('intem_redacteur') .
-		'</option>';
-
-	// Ajouter le choix "visiteur" si :
-	// - l'auteur est visiteur
-	// - OU, on accepte les visiteurs (ou forums sur abonnement)
-	// - OU il y a des visiteurs dans la base
-	$x = (($statut == '6forum')
-	      OR ($GLOBALS['meta']['accepter_visiteurs'] == 'oui')
-	      OR ($GLOBALS['meta']['forums_publics'] == 'abo'));
-	if (!$x) {
-	  $x = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_auteurs WHERE statut='6forum' LIMIT 1"));
-	  $x = $x['n'];
+	$autres = "";
+	// Chercher tous les statuts non standards.
+	// Le count(*) ne sert pas, mais en son absence
+	// SQL (enfin, une version de SQL) renvoie un ensemble vide !
+	$q = spip_query($r ="SELECT statut, count(*) FROM spip_auteurs WHERE statut NOT IN ('" . join("','", $GLOBALS['liste_des_statuts']) . "') GROUP BY statut");
+	while ($r = spip_fetch_array($q, SPIP_NUM)) {
+		$nom = htmlentities($r[0]);
+		$autres .= mySel($nom, $statut, _T('info_statut_auteur_autre') . ' ' . $nom);
 	}
-	if ($x)
-		$menu .= "\n<option" .
-			mySel("6forum",$statut) .
-			">" .
-			_T('item_visiteur') .
-			'</option>';
 
-	// Ajouter l'option "nouveau" si l'auteur n'est pas confirme
-	if ($statut == 'nouveau')
-		$menu .= "\n<option" .
-			mySel('nouveau',$statut) .
-			">" .
-			_T('info_statut_auteur_a_confirmer') .
-			'</option>';
-
-	// Ajouter l'option "autre" si le statut est inconnu
-	elseif (!in_array($statut, $GLOBALS['liste_des_statuts']))
-		$menu .= "\n<option" .
-			mySel('autre','autre') .
-			">" .
-			_T('info_statut_auteur_autre').' '.htmlentities($statut).
-			'</option>';
-
-	$menu .= "\n<option" .
+	// Calculer le menu
+	return "<select name='statut' size='1' class='fondl'
+		onchange=\"(this.options[this.selectedIndex].value == '0minirezo')?jQuery('#$ancre').slideDown():jQuery('#$ancre:visible').slideUp();\">"
+	. liste_statuts_instituer($statut, $id_auteur) 
+	. $autres
+	. "\n<option" .
 		mySel("5poubelle",$statut) .
-		" style='background:url(" . _DIR_IMG_PACK . "rayures-sup.gif)'>&gt; "
+		" class='danger'>&gt; "
 		._T('texte_statut_poubelle') .
-		'</option>' .
-		"</select>\n";
+		'</option>'
+	. "</select>\n";
+}
+
+function liste_statuts_instituer($courant, $id_auteur) {
+	$recom = array("info_administrateurs" => _T('item_administrateur_2'),
+		       "info_redacteurs" =>  _T('intem_redacteur'),
+		       "info_visiteurs" => _T('item_visiteur'));
+	
+	// A-t-on le droit de promouvoir cet auteur comme admin 
+	// et y a-t-il des visiteurs ?
+
+	$droits = array("info_administrateurs" =>
+		       autoriser('modifier', 'auteur', $id_auteur,
+				 null, array('statut' => '0minirezo')),
+		       "info_redacteurs" => true,
+		       "info_visiteurs" => avoir_visiteurs());
+	
+	$menu = '';
+	foreach($GLOBALS['liste_des_statuts'] as $k => $v) {
+		if (isset($recom[$k]) AND $droits[$k])
+			$menu .=  mySel($v, $courant, $recom[$k]);
+
+	}
+	// Ajouter l'option "nouveau" si l'auteur n'est pas confirme
+	if ($courant == 'nouveau')
+		$menu .= mySel('nouveau',$courant,_T('info_statut_auteur_a_confirmer'));
 
 	return $menu;
 }
 
-
 // http://doc.spip.org/@choix_rubriques_admin_restreint
 function choix_rubriques_admin_restreint($auteur) {
 	global $connect_toutes_rubriques, $connect_id_auteur, $connect_statut, $spip_lang_right, $spip_lang;
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index 5b30ded89540a3aa4ed8d7a6940368b307f07570..7ebc66d1fc46c69927f2e986293818b2e354aee4 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -694,6 +694,15 @@ function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act)
   return "<a href=\"$h\"\ntitle=\"$t\"$act><img src='$i' alt=' '/></a>";
 }
 
+function avoir_visiteurs() {
+
+	if ($GLOBALS['meta']["forums_publics"] == 'abo') return true;
+	if ($GLOBALS['meta']['accepter_visiteurs'] == 'oui') return true;
+	$n = spip_query("SELECT COUNT(*) AS n FROM spip_articles WHERE accepter_forum='abo' LIMIT 1");
+	$n = spip_fetch_array($n);
+	return $n['n'];
+}
+
 //
 // Afficher des auteurs sur requete SQL
 //
@@ -702,6 +711,9 @@ function bonhomme_statut($row) {
 	global $connect_statut;
 
 	switch($row['statut']) {
+		case "nouveau":
+			return '';
+			break;
 		case "0minirezo":
 			return http_img_pack("admin-12.gif", _T('titre_image_administrateur'), "",
 					_T('titre_image_administrateur'));
@@ -713,14 +725,10 @@ function bonhomme_statut($row) {
 			  return http_img_pack("redac-12.gif",_T('titre_image_redacteur'), "", _T('titre_image_redacteur_02'));
 			break;
 		case "5poubelle":
-		  return http_img_pack("poubelle.gif", _T('titre_image_auteur_supprime'), "",_T('titre_image_auteur_supprime'));
+			return http_img_pack("poubelle.gif", _T('titre_image_auteur_supprime'), "",_T('titre_image_auteur_supprime'));
 			break;
-		case "6forum":
-		  return http_img_pack("visit-12.gif", _T('titre_image_visiteur'), "",_T('titre_image_visiteur'));
-			break;
-		case "nouveau":
 		default:
-			return '';
+		  return http_img_pack("visit-12.gif", _T('titre_image_visiteur'), "",_T('titre_image_visiteur'));
 			break;
 	}
 }
diff --git a/ecrire/install/etape_ldap4.php b/ecrire/install/etape_ldap4.php
index e1bc4aa6a6bcc112b7ac60452e9639496044c0d1..b8a5236eb399b2f495fb5ea57379f4339d392be5 100644
--- a/ecrire/install/etape_ldap4.php
+++ b/ecrire/install/etape_ldap4.php
@@ -62,18 +62,26 @@ function install_etape_ldap4_dist()
 				'statut_ldap' => array(
 					'label' => _T('info_statut_utilisateurs_2').'<br />',
 					'valeur' => '1comite',
-					'alternatives' => array(
-						'6forum' => "<b>"._T('info_visiteur_1')."</b> "._T('info_visiteur_2')."<br />",
-						'1comite' => "<b>"._T('info_redacteur_1')."</b> "._T('info_redacteur_2')."<br />",
-						'0minirezo' => "<b>"._T('info_administrateur_1')."</b> "._T('info_administrateur_2')."<br />"
+					'alternatives' => liste_statuts_ldap()
 					)
 				)
-			)
-		)
+			   )
 		. bouton_suivant()));
 	}
 
 	echo info_progression_etape(4,'etape_ldap','install/');
 	echo install_fin_html();
 }
+
+function liste_statuts_ldap() {
+	$recom = array("info_administrateurs" => ("<b>" ._T('info_administrateur_1')."</b> "._T('info_administrateur_2')."<br />"),
+		       "info_redacteurs" =>  ("<b>"._T('info_redacteur_1')."</b> "._T('info_redacteur_2')."<br />"),
+		       "info_visiteurs" => ("<b>"._T('info_visiteur_1')."</b> "._T('info_visiteur_2')."<br />"));
+	
+	$res = array();
+	foreach($GLOBALS['liste_des_statuts'] as $k => $v) {
+		if (isset($recom[$k])) $res[$v] = $recom[$k];
+	}
+	return $res;
+}
 ?>