diff --git a/.gitattributes b/.gitattributes
index ee07e13c6cb61de39a0637589c4ebd6950584960..cc9abad57343ee4d9292885074d7468011c8f825 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -103,6 +103,7 @@ ecrire/exec/delete_all.php -text
 ecrire/exec/discuter.php -text
 ecrire/exec/documenter.php -text
 ecrire/exec/documents_liste.php -text
+ecrire/exec/editer_auteurs.php -text
 ecrire/exec/editer_mot.php -text
 ecrire/exec/export_all.php -text
 ecrire/exec/forum.php -text
diff --git a/ecrire/action/editer_auteurs.php b/ecrire/action/editer_auteurs.php
index 8b662235adbaab6384b0fa2c22a7ab2c737247c2..5a7bf01f59547cf19fe6aea0519d00a2b241b9d4 100644
--- a/ecrire/action/editer_auteurs.php
+++ b/ecrire/action/editer_auteurs.php
@@ -23,7 +23,7 @@ function action_editer_auteurs_dist() {
 
 	$arg = _request('arg');
 	$redirect = _request('redirect');
-spip_log("action_editer_auteur: $arg compris");
+
 	if (preg_match(",^\W*(\d+)\W-(\d+)$,", $arg, $r)) {
 		supprimer_auteur_et_rediriger($r[1], $r[2], $redirect);
 	}
diff --git a/ecrire/exec/editer_auteurs.php b/ecrire/exec/editer_auteurs.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce5870446525f198cb7aa94084161c9f598ca116
--- /dev/null
+++ b/ecrire/exec/editer_auteurs.php
@@ -0,0 +1,280 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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/presentation');
+
+function exec_editer_auteurs_dist()
+{
+	include_spip('inc/actions');
+
+	$id_article = intval(_request('id_article'));
+
+	if ($GLOBALS['connect_toutes_rubriques']) // pour eviter SQL
+		$droit = true;
+	else	$droit = acces_article($id_article);
+
+	if (!$droit) {
+		spip_log("Tentative d'intrusion de " . $GLOBALS['auteur_session']['nom'] . " dans " . $GLOBALS['exec']);
+		include_spip('inc/minipres');
+		minipres(_T('info_acces_interdit'));
+	}
+
+	return formulaire_editer_auteurs(_request('cherche_auteur'), _request('ids'), $id_article, 'ajax'); 
+}
+
+function formulaire_editer_auteurs($cherche_auteur, $ids, $id_article, $flag_editable)
+{
+  global $spip_lang_left, $options;
+  spip_log("formulaire_editer_auteurs($cherche_auteur, $ids, $id_article, $flag_editable");
+
+//
+// complement de action/editer_auteurs.php pour notifier la recherche d'auteur
+//
+
+ $bouton_creer_auteur =  $GLOBALS['connect_toutes_rubriques'];
+
+ if ($cherche_auteur) {
+
+	$res ="<p align='$spip_lang_left'>"
+	. debut_boite_info(true)
+	. rechercher_auteurs_articles($cherche_auteur, $ids,  $id_article);
+
+	if ($bouton_creer_auteur) {
+
+		$res .="<div style='width: 200px;'>"
+		. icone_horizontale(_T('icone_creer_auteur'), generer_url_ecrire("auteur_infos","ajouter_id_article=$id_article&nom=" . rawurlencode($cherche_auteur). "&redirect=" . generer_url_retour("articles","id_article=$id_article")), "redacteurs-24.gif", "creer.gif", false)
+		. "</div> ";
+
+		$bouton_creer_auteur = false;
+	}
+
+	$res .= fin_boite_info(true)
+	. '</p>';
+ } else $res ='';
+
+//
+// Afficher les auteurs
+//
+	$les_auteurs = array();
+
+	$result = spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id_article");
+
+	while ($row = spip_fetch_array($result))
+		$les_auteurs[]= $row['id_auteur'];
+
+	if ($les_auteurs = join(',', $les_auteurs)) 
+		$res .= afficher_auteurs_articles($id_article, $flag_editable, $les_auteurs);
+
+//
+// Ajouter un auteur
+//
+
+ if ($flag_editable AND $options == 'avancees') {
+	$res .= debut_block_invisible("auteursarticle")
+	. "<table width='100%'><tr>";
+
+	if ($bouton_creer_auteur) {
+
+		$res .= "<td width='200'>"
+		. icone_horizontale(_T('icone_creer_auteur'), generer_url_ecrire("auteur_infos","ajouter_id_article=$id_article&redirect=" .generer_url_retour("articles","id_article=$id_article")), "redacteurs-24.gif", "creer.gif", false)
+		. "</td><td width='20'>&nbsp;</td>";
+	}
+
+	$res .="<td>"
+	. ajouter_auteurs_articles($id_article, $les_auteurs, $bouton_creer_auteur)
+	. "</td></tr></table>"
+	. fin_block();
+ }
+ 
+ if ($flag_editable === 'ajax') return $res;
+
+ $bouton = (($flag_editable AND $options == 'avancees')
+	    ? bouton_block_invisible("auteursarticle")
+	    : '')
+ . _T('texte_auteurs')
+ . aide("artauteurs");
+
+ return  debut_cadre_enfonce("auteur-24.gif", true, "", $bouton)
+ . "\n<div id='editer_auteurs-$id_article'>$res</div>"
+ . fin_cadre_enfonce(true);
+}
+
+// http://doc.spip.org/@rechercher_auteurs_articles
+function rechercher_auteurs_articles($cherche_auteur, $ids, $id_article)
+{
+	if (!$ids) {
+		return "<B>"._T('texte_aucun_resultat_auteur', array('cherche_auteur' => $cherche_auteur)).".</B><BR />";
+	}
+	elseif ($ids == -1) {
+		return "<B>"._T('texte_trop_resultats_auteurs', array('cherche_auteur' => $cherche_auteur))."</B><BR />";
+	}
+	elseif (preg_match('/^\d+$/',$ids)) {
+
+		$row = spip_fetch_array(spip_query("SELECT nom FROM spip_auteurs WHERE id_auteur=$ids"));
+		return "<B>"._T('texte_ajout_auteur')."</B><BR /><UL><LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>".typo($row['nom'])."</FONT></B></UL>";
+	}
+	else {
+		$ids = preg_replace('/[^0-9,]/','',$ids); // securite
+		$result = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur IN ($ids) ORDER BY nom");
+
+		$res = "<B>"
+		. _T('texte_plusieurs_articles', array('cherche_auteur' => $cherche_auteur))
+		. "</B><BR />"
+		.  "<UL class='verdana1'>";
+		while ($row = spip_fetch_array($result)) {
+				$id_auteur = $row['id_auteur'];
+				$nom_auteur = $row['nom'];
+				$email_auteur = $row['email'];
+				$bio_auteur = $row['bio'];
+
+				$res .= "<li><b>".typo($nom_auteur)."</b>";
+
+				if ($email_auteur) $res .= " ($email_auteur)";
+
+				$res .= " | "
+				  .  ajax_action_auteur('editer_auteurs', "$id_article,$id_auteur","articles","id_article=$id_article", array(_T('lien_ajouter_auteur')));
+
+				if (trim($bio_auteur)) {
+					$res .= "<br />".couper(propre($bio_auteur), 100)."\n";
+				}
+				$res .= "</li>\n";
+			}
+		$res .= "</UL>";
+		return $res;
+	}
+}
+
+// http://doc.spip.org/@afficher_auteurs_articles
+function afficher_auteurs_articles($id_article, $flag_editable, $les_auteurs)
+{
+	global $connect_statut, $options,$connect_id_auteur;
+
+	$table = array();
+
+	$result = spip_query("SELECT * FROM spip_auteurs AS A WHERE A.id_auteur IN ($les_auteurs) ORDER BY A.nom");
+
+	while ($row = spip_fetch_array($result)) {
+			$vals = array();
+			$id_auteur = $row["id_auteur"];
+			$nom_auteur = $row["nom"];
+			$email_auteur = $row["email"];
+			if ($bio_auteur = attribut_html(propre(couper($row["bio"], 100))))
+			  $bio_auteur = " TITLE=\"$bio_auteur\"";
+			$url_site_auteur = $row["url_site"];
+			$statut_auteur = $row["statut"];
+			if ($row['messagerie'] == 'non' OR $row['login'] == '') $messagerie = 'non';
+
+			$vals[] = bonhomme_statut($row);
+
+			$vals[] = "<a href='" . generer_url_ecrire('auteurs_edit', "id_auteur=$id_auteur") . "' $bio_auteur>".typo($nom_auteur)."</a>";
+
+			$vals[] = bouton_imessage($id_auteur);
+		
+			if ($email_auteur) $vals[] =  "<A href='mailto:$email_auteur'>"._T('email')."</A>";
+			else $vals[] =  "&nbsp;";
+
+			if ($url_site_auteur) $vals[] =  "<A href='$url_site_auteur'>"._T('info_site_min')."</A>";
+			else $vals[] =  "&nbsp;";
+
+			$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"));
+
+			$nombre_articles = intval($cpt['n']);
+
+			if ($nombre_articles > 1) $vals[] =  $nombre_articles.' '._T('info_article_2');
+			elseif ($nombre_articles == 1) $vals[] =  _T('info_1_article');
+			else $vals[] =  "&nbsp;";
+
+			if ($flag_editable AND ($connect_id_auteur != $id_auteur OR $connect_statut == '0minirezo') AND $options == 'avancees') {
+				$vals[] =  ajax_action_auteur('editer_auteurs', "$id_article,-$id_auteur",'articles', "id_article=$id_article", array(_T('lien_retirer_auteur')."&nbsp;". http_img_pack('croix-rouge.gif', "X", "width='7' height='7' border='0' align='middle'")));
+			} else {
+			  $vals[] = "";
+			}
+		
+			$table[] = $vals;
+	}
+	
+	$largeurs = array('14', '', '', '', '', '', '');
+	$styles = array('arial11', 'arial2', 'arial11', 'arial11', 'arial11', 'arial11', 'arial1');
+
+	return "<div class='liste'><table width='100%' cellpadding='3' cellspacing='0' border='0' background=''>"
+	. afficher_liste($largeurs, $table, $styles)
+	. "</table></div>\n";
+}
+
+
+// http://doc.spip.org/@ajouter_auteurs_articles
+function ajouter_auteurs_articles($id_article, $les_auteurs)
+{
+	$result = spip_query("SELECT * FROM spip_auteurs WHERE " . (!$les_auteurs ? '' : "id_auteur NOT IN ($les_auteurs) AND ") . "statut!='5poubelle' AND statut!='6forum' AND statut!='nouveau' ORDER BY statut, nom");
+
+	if (!$num = spip_num_rows($result)) return '';
+
+	$js = "\"findObj_forcer('valider_ajouter_auteur').style.visibility='visible';\"";
+
+	return ajax_action_auteur('editer_auteurs', $id_article,'articles', "id_article=$id_article",
+				      (
+			"<span class='verdana1'><B>"._T('titre_cadre_ajouter_auteur')."&nbsp; </B></span>\n" .
+
+			($num > 200 
+			? ("<input type='text' name='cherche_auteur' onClick=$js CLASS='fondl' VALUE='' SIZE='20' />" .
+			  "<span  class='visible_au_chargement' id='valider_ajouter_auteur'>\n<input type='submit' value='"._T('bouton_chercher')."' CLASS='fondo' /></span>")
+			: ("<select name='nouv_auteur' size='1' style='width:150px;' CLASS='fondl' onChange=$js>" .
+			   articles_auteur_select($result) .
+			   "</select>" .
+			   "<span  class='visible_au_chargement' id='valider_ajouter_auteur'>" .
+			   " <input type='submit' value='"._T('bouton_ajouter')."' CLASS='fondo'>" .
+			   "</span>"))));
+}
+
+// http://doc.spip.org/@articles_auteur_select
+function articles_auteur_select($result)
+{
+	global $couleur_claire ;
+
+	$statut_old = $premiere_old = $res = '';
+
+	while ($row = spip_fetch_array($result)) {
+		$id_auteur = $row["id_auteur"];
+		$nom = $row["nom"];
+		$email = $row["email"];
+		$statut = $row["statut"];
+
+		$statut=str_replace("0minirezo", _T('info_administrateurs'), $statut);
+		$statut=str_replace("1comite", _T('info_redacteurs'), $statut);
+		$statut=str_replace("6visiteur", _T('info_visiteurs'), $statut);
+				
+		$premiere = strtoupper(substr(trim($nom), 0, 1));
+
+		if ($connect_statut != '0minirezo')
+			if ($p = strpos($email, '@'))
+				  $email = substr($email, 0, $p).'@...';
+		if ($email)
+			$email = " ($email)";
+
+		if ($statut != $statut_old) {
+			$res .= "\n<OPTION VALUE=\"x\">";
+			$res .= "\n<OPTION VALUE=\"x\" style='background-color: $couleur_claire;'> $statut";
+		}
+
+		if ($premiere != $premiere_old AND ($statut != _T('info_administrateurs') OR !$premiere_old))
+			$res .= "\n<OPTION VALUE=\"x\">";
+				
+		$res .= "\n<OPTION VALUE=\"$id_auteur\">&nbsp;&nbsp;&nbsp;&nbsp;" . supprimer_tags(couper(typo("$nom$email"), 40));
+		$statut_old = $statut;
+		$premiere_old = $premiere;
+	}
+	return $res;
+}
+
+?>