From c85a72dd1ddea6fe766e21aa9606a8089c9db996 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 2 Oct 2006 22:27:23 +0000
Subject: [PATCH] =?UTF-8?q?Passage=20en=20Ajax=20du=20formulaire=20de=20ch?=
 =?UTF-8?q?angement=20des=20droits=20d'un=20auteur:=20la=20fonction=20"aff?=
 =?UTF-8?q?icher=5Fformulaire=5Fstatut=5Fauteur"=20c=C3=A8de=20la=20place?=
 =?UTF-8?q?=20au=20trio=20de=20scripts=20"instituer=5Fauteur"=20greffant?=
 =?UTF-8?q?=20dans=20le=20DOM=20un=20noeud=20homonyme=20.=20Le=20script=20?=
 =?UTF-8?q?"auteurs=5Fedit"=20(mal=20nomm=C3=A9)=20est=20enti=C3=A8rement?=
 =?UTF-8?q?=20en=20Ajax,=20le=20script=20"auteur=5Finfos"=20(idem)=20l'est?=
 =?UTF-8?q?=20=C3=A0=20moiti=C3=A9=20mais=20ne=20pr=C3=A9sente=20d=C3=A9j?=
 =?UTF-8?q?=C3=A0=20plus=20de=20risque=20de=20perte=20de=20saisie=20comme?=
 =?UTF-8?q?=20auparavant.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

A noter qu'il a fallu désamorcer le cache du DOM dans le mini-navigateur Ajax
de rubrique, car il est incompatible avec un Ajax englobant, ce qui est le cas
pour la gestion des adminstrateurs restreints. Il faudra repenser le système
de référence dans le DOM à terme.
---
 .gitattributes                                |   4 +-
 ecrire/action/instituer_auteur.php            |  50 +++++
 ecrire/action/supprimer.php                   |   8 -
 ecrire/exec/auteur_infos.php                  | 108 +++++----
 ecrire/exec/auteurs_edit.php                  |  15 +-
 ecrire/fragments/instituer_auteur.php         |  26 +++
 ecrire/fragments/selectionner.php             |   2 +-
 ecrire/inc/chercher_rubrique.php              |   6 +-
 .../{auteur_voir.php => instituer_auteur.php} | 212 ++++++++----------
 ecrire/inc/mini_nav.php                       |   6 +-
 10 files changed, 235 insertions(+), 202 deletions(-)
 create mode 100644 ecrire/action/instituer_auteur.php
 create mode 100644 ecrire/fragments/instituer_auteur.php
 rename ecrire/inc/{auteur_voir.php => instituer_auteur.php} (59%)

diff --git a/.gitattributes b/.gitattributes
index 117b8722cd..ca7cedfa97 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -309,6 +309,7 @@ ecrire/action/editer_mot.php -text
 ecrire/action/ical.php -text
 ecrire/action/iconifier.php -text
 ecrire/action/instituer_article.php -text
+ecrire/action/instituer_auteur.php -text
 ecrire/action/instituer_breve.php -text
 ecrire/action/instituer_collaboration.php -text
 ecrire/action/instituer_forum.php -text
@@ -404,6 +405,7 @@ ecrire/fragments/editer_mot.php -text
 ecrire/fragments/grouper_mots.php -text
 ecrire/fragments/iconifier.php -text
 ecrire/fragments/informer.php -text
+ecrire/fragments/instituer_auteur.php -text
 ecrire/fragments/legender.php -text
 ecrire/fragments/memoriser.php -text
 ecrire/fragments/petitionner.php -text
@@ -418,7 +420,6 @@ ecrire/fragments/virtualiser.php -text
 ecrire/inc/actions.php -text
 ecrire/inc/agenda.php -text
 ecrire/inc/article_select.php -text
-ecrire/inc/auteur_voir.php -text
 ecrire/inc/boutons.php -text
 ecrire/inc/chercher_logo.php -text
 ecrire/inc/chercher_rubrique.php -text
@@ -453,6 +454,7 @@ ecrire/inc/install_ldap3.php -text
 ecrire/inc/install_ldap4.php -text
 ecrire/inc/install_ldap5.php -text
 ecrire/inc/install_unpack.php -text
+ecrire/inc/instituer_auteur.php -text
 ecrire/inc/joindre.php -text
 ecrire/inc/lang_liste.php -text
 ecrire/inc/legender.php -text
diff --git a/ecrire/action/instituer_auteur.php b/ecrire/action/instituer_auteur.php
new file mode 100644
index 0000000000..d7e32ed1df
--- /dev/null
+++ b/ecrire/action/instituer_auteur.php
@@ -0,0 +1,50 @@
+<?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;
+
+// http://doc.spip.org/@action_instituer_collaboration_dist
+function action_instituer_auteur_dist() {
+
+	include_spip('inc/actions');
+	$var_f = charger_fonction('controler_action_auteur', 'inc');
+	$var_f();
+
+	$arg = _request('arg');
+
+	if (preg_match(",^(\d+)\W-(\d+)$,", $arg, $r))
+		spip_query("DELETE FROM spip_auteurs_rubriques WHERE id_auteur=".$r[1]." AND id_rubrique=" . $r[2]);
+	else if (!preg_match(',^(\d+)$,', $arg, $r)) {
+		spip_log("action_instituer_auteur_dist: $arg incompris");
+	} else {
+		$id_auteur = $r[1];
+		if ($id_parent = intval(_request('id_parent'))) {
+			include_spip('base/abstract_sql');
+			spip_abstract_insert('spip_auteurs_rubriques', "(id_auteur,id_rubrique)", "(" .$id_auteur .',' . $id_parent . ')');
+		}
+		if ($statut = _request('statut')) {
+			if (!ereg("^(0minirezo|1comite|5poubelle|6forum)$",$statut))
+			  spip_log("action_instituer_auteur_dist: $statut incompris  pour $id_auteur");
+			else {
+				spip_query("UPDATE spip_auteurs SET statut='".$statut . "' WHERE id_auteur=" . $id_auteur);
+
+				if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
+					include_spip("inc/indexation");
+					marquer_indexer('spip_auteurs', $id_auteur);
+				}
+				// Mettre a jour les fichiers .htpasswd et .htpasswd-admin
+				ecrire_acces();
+			}
+		}
+	}
+}
+?>
diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php
index 643a00dcc3..d3de05d627 100644
--- a/ecrire/action/supprimer.php
+++ b/ecrire/action/supprimer.php
@@ -64,14 +64,6 @@ function action_supprimer_rubrique($id_rubrique)
 
 }
 
-// http://doc.spip.org/@action_supprimer_auteur_rubrique
-function action_supprimer_auteur_rubrique($arg)
-{
-	if (preg_match(",^\W*(\d+)\W+(\d+)$,", $arg, $r))
-		spip_query("DELETE FROM spip_auteurs_rubriques WHERE id_auteur=".$r[1]." AND id_rubrique=" . $r[2]);
-	else spip_log("action_supprimer_auteur_rubrique $arg pas compris");
-}
-
 function supprimer_document_et_vignette($arg)
 {
 	$result = spip_query("SELECT id_vignette, fichier FROM spip_documents WHERE id_document=$arg");
diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index e501e16816..c23739a628 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -12,7 +12,6 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/presentation');
-include_spip('inc/auteur_voir');
 include_spip('inc/acces');
 include_spip('base/abstract_sql');
 
@@ -51,20 +50,24 @@ global $ajouter_id_article,
 //
 // Recuperer id_auteur ou se preparer a l'inventer
 //
- if ($id_auteur) {
-	$auteur = spip_fetch_array(spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur"));
-	if (!$auteur) exit;
- } else {
-	$auteur['nom'] = filtrer_entites(_T('item_nouvel_auteur'));
-	$onfocus = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
-	$auteur['statut'] = '1comite'; // statut par defaut a la creation
-	$auteur['source'] = 'spip';
-}
+	if ($id_auteur) {
+		$auteur = spip_fetch_array(spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur"));
+		if (!$auteur) exit;
+	} else {
+		$auteur['nom'] = filtrer_entites(_T('item_nouvel_auteur'));
+		$onfocus = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
+		$auteur['statut'] = '1comite'; // statut par defaut a la creation
+		$auteur['source'] = 'spip';
+	}
 
-if (!statut_modifiable_auteur($id_auteur, $auteur)) {
-	gros_titre(_T('info_acces_interdit'));
-	exit;
- }
+	// formulaire de changement de statut
+	// (faux chargement pour disposer de la fonction ci-dessous. a revoir)
+	$f = charger_fonction('instituer_auteur', 'inc');
+
+	if (!statut_modifiable_auteur($id_auteur, $auteur)) {
+		gros_titre(_T('info_acces_interdit'));
+		exit;
+	}
 
 //
 // Modification (et creation si besoin)
@@ -80,11 +83,11 @@ if (strval($nom)!='') {
 	if (($new_login<>$old_login) AND $connect_statut == '0minirezo' AND $connect_toutes_rubriques AND $auteur['source'] == 'spip') {
 		if ($new_login) {
 			if (strlen($new_login) < 4)
-				$echec .= "<p>"._T('info_login_trop_court');
+				$echec .= "\n<p>"._T('info_login_trop_court');
 			else {
 			  $n = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_auteurs WHERE login=" . spip_abstract_quote($new_login) . " AND id_auteur!=$id_auteur AND statut!='5poubelle'"));
 			  if ($n['n'])
-				$echec .= "<p>"._T('info_login_existant');
+				$echec .= "\n<p>"._T('info_login_existant');
 			  else if ($new_login != $old_login) {
 				$modif_login = true;
 				$auteur['login'] = $new_login;
@@ -101,9 +104,9 @@ if (strval($nom)!='') {
 	// changement de pass, a securiser en jaja ?
 	if ($new_pass AND ($statut != '5poubelle') AND $auteur['login'] AND $auteur['source'] == 'spip') {
 		if ($new_pass != $new_pass2)
-			$echec .= "<p>"._T('info_passes_identiques');
+			$echec .= "\n<p>"._T('info_passes_identiques');
 		else if ($new_pass AND strlen($new_pass) < 6)
-			$echec .= "<p>"._T('info_passe_trop_court');
+			$echec .= "\n<p>"._T('info_passe_trop_court');
 		else {
 			$modif_login = true;
 			$auteur['new_pass'] = $new_pass;
@@ -124,7 +127,7 @@ if (strval($nom)!='') {
 	  if (isset($email)) {
 		$email = trim($email);	 
 		if ($email !='' AND !email_valide($email)) 
-			$echec .= "<p>"._T('info_email_invalide');
+			$echec .= "\n<p>"._T('info_email_invalide');
 		$auteur['email'] = $email;
 	  }
 	}
@@ -174,9 +177,6 @@ if (strval($nom)!='') {
 	}
  }
 
-// Appliquer des modifications de statut
-modifier_statut_auteur($auteur, $_POST['statut'], $_POST['id_parent']);
-
 
 // Si on modifie la fiche auteur, reindexer et modifier htpasswd
 if ($nom OR $statut) {
@@ -236,9 +236,9 @@ function exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect,
   if ($echec){
 	debut_cadre_relief();
 	echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='left'");
-	echo "<font color='red'>$echec <p>"._T('info_recommencer')."</font>";
+	echo "<font color='red'>$echec \n<p>"._T('info_recommencer')."</font>";
 	fin_cadre_relief();
-	echo "<p>";
+	echo "\n<p>";
   }
 
   debut_cadre_formulaire();
@@ -262,40 +262,40 @@ function formulaire_auteur_infos($id_auteur, $auteur, $onfocus, $redirect, $ajou
 // Infos personnelles
 //
 
-echo "<div class='serif'>";
+echo "\n<div class='serif'>";
 
 debut_cadre_relief("fiche-perso-24.gif", false, "", _T("icone_informations_personnelles"));
 
 echo _T('titre_cadre_signature_obligatoire');
-echo "("._T('entree_nom_pseudo').")<BR>";
-echo "<INPUT TYPE='text' NAME='nom' CLASS='formo' VALUE=\"".entites_html($auteur['nom'])."\" SIZE='40' $onfocus><P>";
+echo "("._T('entree_nom_pseudo').")<br />\n";
+echo "<INPUT TYPE='text' NAME='nom' CLASS='formo' VALUE=\"".entites_html($auteur['nom'])."\" SIZE='40' $onfocus>\n<p>";
 
 echo "<B>"._T('entree_adresse_email')."</B>";
 
 if ($connect_statut == "0minirezo"
 AND ($connect_toutes_rubriques OR $auteur['statut']<>'0minirezo')) {
-	echo "<br><INPUT TYPE='text' NAME='email' CLASS='formo' VALUE=\"".entites_html($auteur['email'])."\" SIZE='40'><P>\n";
+	echo "<br><INPUT TYPE='text' NAME='email' CLASS='formo' VALUE=\"".entites_html($auteur['email'])."\" SIZE='40'>\n<p>\n";
 }
 else {
 	echo "&nbsp;: <tt>".$auteur['email']."</tt>";
 	echo "<br>("._T('info_reserve_admin').")\n";
-	echo "<P>";
+	echo "\n<p>";
 }
 
-echo "<B>"._T('entree_infos_perso')."</B><BR>";
-echo "("._T('entree_biographie').")<BR>";
+echo "<B>"._T('entree_infos_perso')."</B><br />\n";
+echo "("._T('entree_biographie').")<br />\n";
 echo "<TEXTAREA NAME='bio' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
 echo entites_html($auteur['bio']);
 echo "</TEXTAREA>\n";
 
 debut_cadre_enfonce("site-24.gif", false, "", _T('info_site_web'));
-echo "<B>"._T('entree_nom_site')."</B><BR>";
+echo "<B>"._T('entree_nom_site')."</B><br />\n";
 echo "<INPUT TYPE='text' NAME='nom_site_auteur' CLASS='forml' VALUE=\"".entites_html($auteur['nom_site'])."\" SIZE='40'><P>\n";
 
-echo "<B>"._T('entree_url')."</B><BR>";
+echo "<B>"._T('entree_url')."</B><br />\n";
 echo "<INPUT TYPE='text' NAME='url_site' CLASS='forml' VALUE=\"".entites_html($auteur['url_site'])."\" SIZE='40'>\n";
 fin_cadre_enfonce();
-	echo "<p>";
+	echo "\n<p>";
 
 if ($options == "avancees") {
 	debut_cadre_enfonce("cadenas-24.gif", false, "", _T('entree_cle_pgp'));
@@ -303,22 +303,18 @@ if ($options == "avancees") {
 	echo entites_html($auteur['pgp']);
 	echo "</TEXTAREA>\n";
 	fin_cadre_enfonce();
-	echo "<p>";
+	echo "\n<p>";
 }
 else {
 	echo "<input type='hidden' name='pgp' value=\"".entites_html($auteur['pgp'])."\">";
 }
 
-echo "<p>";
+echo "\n<p>";
 	if ($champs_extra) {
 		include_spip('inc/extra');
 		extra_saisie($auteur['extra'], 'auteurs', $auteur['statut']);
 	}
 
-fin_cadre_relief();
-echo "<p>";
-
-
 
 //
 // Login et mot de passe :
@@ -350,26 +346,26 @@ if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
 	echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='right'");
 	echo "<b>"._T('texte_login_precaution')."</b>\n";
 	fin_cadre_enfonce();
-	echo "<p>";
+	echo "\n<p>";
 }
 
 // Un redacteur n'a pas le droit de modifier son login !
 if ($edit_login) {
 	echo "<B>"._T('item_login')."</B> ";
-	echo "<font color='red'>("._T('texte_plus_trois_car').")</font> :<BR>";
+	echo "<font color='red'>("._T('texte_plus_trois_car').")</font> :<br />\n";
 	echo "<INPUT TYPE='text' NAME='new_login' CLASS='formo' VALUE=\"".entites_html($auteur['login'])."\" SIZE='40'><P>\n";
 }
 else {
-	echo "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><BR></legend><br><b>".$auteur['login']."</b> ";
-	echo "<i> ("._T('info_non_modifiable').")</i><p>";
+	echo "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><br />\n</legend><br><b>".$auteur['login']."</b> ";
+	echo "<i> ("._T('info_non_modifiable').")</i>\n<p>";
 }
 
 // On ne peut modifier le mot de passe en cas de source externe (par exemple LDAP)
 if ($edit_pass) {
 	echo "<B>"._T('entree_nouveau_passe')."</B> ";
-	echo "<font color='red'>("._T('info_plus_cinq_car').")</font> :<BR>";
-	echo "<INPUT TYPE='password' NAME='new_pass' CLASS='formo' VALUE=\"\" SIZE='40'><BR>\n";
-	echo _T('info_confirmer_passe')."<BR>";
+	echo "<font color='red'>("._T('info_plus_cinq_car').")</font> :<br />\n";
+	echo "<INPUT TYPE='password' NAME='new_pass' CLASS='formo' VALUE=\"\" SIZE='40'><br />\n";
+	echo _T('info_confirmer_passe')."<br />\n";
 	echo "<INPUT TYPE='password' NAME='new_pass2' CLASS='formo' VALUE=\"\" SIZE='40'><P>\n";
 }
 fin_cadre_relief();
@@ -382,15 +378,11 @@ echo "<p />";
 
  if ($apparait) apparait_auteur_infos($id_auteur, $auteur);
 
-// Afficher le formulaire de changement de statut (cf. inc/acces)
-afficher_formulaire_statut_auteur ($id_auteur, $auteur['statut']);
-
-
 echo "<INPUT NAME='ajouter_id_article' VALUE='$ajouter_id_article' TYPE='hidden'>\n";
 echo "<INPUT NAME='redirect' VALUE='$redirect' TYPE='hidden'>\n";
 echo "<INPUT NAME='redirect_ok' VALUE='oui' TYPE='hidden'>\n";
 
-echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondo' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'></DIV>";
+echo "\n<div align='right'><INPUT TYPE='submit' CLASS='fondo' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'></DIV>";
 
 echo pipeline('affiche_milieu',
 	array('args' => array(
@@ -400,10 +392,14 @@ echo pipeline('affiche_milieu',
 );
 
 echo "</div>";
-
+fin_cadre_relief();
 echo "</form>";
 
+// Afficher le formulaire de changement de statut (cf. inc_acces)
+ $f = charger_fonction('instituer_auteur', 'inc');
+ echo $f($id_auteur, $auteur['statut'], "auteurs_edit");
 }
+
 //
 // Apparaitre dans la liste des redacteurs connectes
 //
@@ -416,18 +412,18 @@ function apparait_auteur_infos($id_auteur, $auteur)
 
 		debut_cadre_relief("messagerie-24.gif", false, "", _T('info_liste_redacteurs_connectes'));
 		
-		echo "<div>"._T('texte_auteur_messagerie')."</div>";	
+		echo "\n<div>"._T('texte_auteur_messagerie')."</div>";	
 
 		if ($auteur['imessage']=="non"){
 			echo "<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='oui' id='perso_activer_imessage_on'>";
 			echo " <label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label> ";
-			echo "<BR><INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' CHECKED id='perso_activer_imessage_off'>";
+			echo "<br />\n<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' CHECKED id='perso_activer_imessage_off'>";
 			echo " <B><label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label></B> ";
 		} else {
 			echo "<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='oui' id='perso_activer_imessage_on' CHECKED>";
 			echo " <B><label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label></B> ";
 
-			echo "<BR><INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' id='perso_activer_imessage_off'>";
+			echo "<br />\n<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' id='perso_activer_imessage_off'>";
 			echo " <label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label> ";
 		}
 
diff --git a/ecrire/exec/auteurs_edit.php b/ecrire/exec/auteurs_edit.php
index c2142d7cc0..0316e95fb7 100644
--- a/ecrire/exec/auteurs_edit.php
+++ b/ecrire/exec/auteurs_edit.php
@@ -33,7 +33,8 @@ function exec_auteurs_edit_dist()
 
 	if (!$auteur = spip_fetch_array($result)) die('erreur');
 
-	modifier_statut_auteur($auteur, $_POST['statut'], $_POST['id_parent']);
+	// Afficher le formulaire de changement de statut (cf. inc_acces)
+	$f = charger_fonction('instituer_auteur', 'inc');
 
 	debut_page($auteur['nom'],  "auteurs",
 		   (($connect_id_auteur == $id_auteur) ? "perso" : "redacteurs"));
@@ -55,7 +56,7 @@ function exec_auteurs_edit_dist()
 			'id_auteur'=>$id_auteur),
 		'data'=>'')
 	);
-	table_auteurs_edit($auteur);
+	table_auteurs_edit($auteur, $f);
 	echo pipeline('affiche_milieu',
 		array('args' => array(
 			'exec'=>'auteurs_edit',
@@ -68,9 +69,9 @@ function exec_auteurs_edit_dist()
 }
 
 // http://doc.spip.org/@table_auteurs_edit
-function table_auteurs_edit($auteur)
+function table_auteurs_edit($auteur, $instituer_auteur)
 {
-	global $connect_statut, $connect_id_auteur, $champs_extra, $options  ;
+  global $connect_toutes_rubriques, $connect_statut, $connect_id_auteur, $champs_extra, $options,$spip_lang_right ;
 
 	$id_auteur=$auteur['id_auteur'];
 	$nom=$auteur['nom'];
@@ -128,11 +129,7 @@ function table_auteurs_edit($auteur)
 		extra_affichage($extra, "auteurs");
 	}
 
-	// Afficher le formulaire de changement de statut (cf. inc_acces)
-	if ($options == 'avancees')
-	  afficher_formulaire_statut_auteur ($id_auteur, $auteur['statut'], "auteurs_edit");
-
-	fin_cadre_relief();
+	echo $instituer_auteur($id_auteur, $auteur['statut'], "auteurs_edit");
 
 	echo "<div>&nbsp;</div>";
 
diff --git a/ecrire/fragments/instituer_auteur.php b/ecrire/fragments/instituer_auteur.php
new file mode 100644
index 0000000000..805b265f55
--- /dev/null
+++ b/ecrire/fragments/instituer_auteur.php
@@ -0,0 +1,26 @@
+<?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;
+
+function fragments_instituer_auteur_dist()
+{
+  $script = _request('script');
+  $id_auteur = intval(_request('id_auteur'));
+  if (!preg_match('/^\w+$/', $script)) die("$script !!");
+
+  $r = spip_fetch_array(spip_query("SELECT statut FROM spip_auteurs WHERE id_auteur=$id_auteur"));
+
+  $f = charger_fonction('instituer_auteur', 'inc');
+  return $f(_request('id_auteur'), $r['statut'] , _request('script'));
+}
+?>
diff --git a/ecrire/fragments/selectionner.php b/ecrire/fragments/selectionner.php
index 8da36f45f7..fb6d3cf9ed 100644
--- a/ecrire/fragments/selectionner.php
+++ b/ecrire/fragments/selectionner.php
@@ -24,7 +24,7 @@ function fragments_selectionner_dist()
 
 	include_spip('inc/texte');
 	include_spip('inc/mini_nav');
-	return mini_nav ($id, "choix_parent", "this.form.id_rubrique.value=::sel::;this.form.titreparent.value='::sel2::';findObj('selection_rubrique').style.display='none';", $exclus, $rac, $type!='breve');
+	return mini_nav ($id, "choix_parent", "this.form.id_rubrique.value=::sel::;this.form.titreparent.value='::sel2::';findObj_forcer('selection_rubrique').style.display='none';", $exclus, $rac, $type!='breve');
 
 }
 ?>
diff --git a/ecrire/inc/chercher_rubrique.php b/ecrire/inc/chercher_rubrique.php
index 19bb0151c5..90f09a9e29 100644
--- a/ecrire/inc/chercher_rubrique.php
+++ b/ecrire/inc/chercher_rubrique.php
@@ -204,7 +204,7 @@ function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0) {
 		$exclus = "&exclus=$idem&rac=oui";
 
 	if ($id_rubrique)
-		list($titre_parent) = spip_fetch_array(spip_query("SELECT titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique"), SPIP_NUM);
+		list($titre_parent) = spip_fetch_array(spip_query("SELECT titr<e FROM spip_rubriques WHERE id_rubrique=$id_rubrique"), SPIP_NUM);
 	else if ($type == 'auteur')
 		$titre_parent = '&nbsp;';
 	else
@@ -212,11 +212,11 @@ function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0) {
 
 	return 	"<table width='100%'><tr width='100%'><td width='45'>
 	<a	href=\"#\"
-		onClick=\"if(findObj('selection_rubrique').style.display=='none')
+		onClick=\"if(findObj_forcer('selection_rubrique').style.display=='none')
 			{charger_id_url_si_vide('" .
 	  generer_url_ecrire('selectionner',"id=$id_rubrique$exclus&type=$type", true) ."',
 				'selection_rubrique');}
-			else {findObj('selection_rubrique').style.display='none';}\"
+			else {findObj_forcer('selection_rubrique').style.display='none';}\"
 	><img src='". _DIR_IMG_PACK . "loupe.png' style='vertical-align: middle;'
 	/></a><img src='". _DIR_IMG_PACK . "searching.gif'
 		id='img_selection_rubrique' style='visibility: hidden;'>
diff --git a/ecrire/inc/auteur_voir.php b/ecrire/inc/instituer_auteur.php
similarity index 59%
rename from ecrire/inc/auteur_voir.php
rename to ecrire/inc/instituer_auteur.php
index d34752465b..d90cee269f 100644
--- a/ecrire/inc/auteur_voir.php
+++ b/ecrire/inc/instituer_auteur.php
@@ -13,134 +13,124 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/actions');
-
-// http://doc.spip.org/@cadre_auteur_infos
-function cadre_auteur_infos($id_auteur, $auteur)
-{
-  global $connect_statut;
-
-  if ($id_auteur) {
-	debut_boite_info();
-	echo "<CENTER>";
-	echo "<FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=1><B>"._T('titre_cadre_numero_auteur')."&nbsp;:</B></FONT>";
-	echo "<BR><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=6><B>$id_auteur</B></FONT>";
-	echo "</CENTER>";
-
-
-// "Voir en ligne" si l'auteur a un article publie
-// seuls les admins peuvent "previsualiser" une page auteur
-	$n = spip_num_rows(spip_query("SELECT lien.id_article FROM spip_auteurs_articles AS lien, spip_articles AS articles WHERE lien.id_auteur=$id_auteur AND lien.id_article=articles.id_article AND articles.statut='publie'"));
-	if ($n)
-		voir_en_ligne ('auteur', $id_auteur, 'publie');
-	else if ($connect_statut == '0minirezo')
-		voir_en_ligne ('auteur', $id_auteur, 'prop');
-
-	fin_boite_info();
-  }
-}
+include_spip('inc/texte');
+include_spip('inc/layer');
+include_spip('inc/auteur_voir');
+include_spip('inc/presentation');
 
 //  affiche le statut de l'auteur dans l'espace prive
+// les admins voient et peuvent modifier les droits d'un auteur
+// les admins restreints les voient mais 
+// ne peuvent les utiliser que pour mettre un auteur a la poubelle
 
-// http://doc.spip.org/@afficher_formulaire_statut_auteur
-function afficher_formulaire_statut_auteur ($id_auteur, $statut, $post='') {
-	global $connect_statut, $connect_toutes_rubriques, $connect_id_auteur;
-	global $spip_lang_right;
-
-
+// http://doc.spip.org/@auteur_voir_rubriques
+function inc_instituer_auteur_dist($id_auteur, $statut, $url_self)
+{
+	global $connect_toutes_rubriques, $connect_id_auteur, $connect_statut, $spip_lang_right;
+					 
 	if ($connect_statut != "0minirezo") return;
 
-	$droit = ( ($connect_toutes_rubriques OR $statut != "0minirezo")
-		   && ($connect_id_auteur != $id_auteur));
+	$result_admin = spip_query("SELECT rubriques.id_rubrique, titre FROM spip_auteurs_rubriques AS lien, spip_rubriques AS rubriques WHERE lien.id_auteur=$id_auteur AND lien.id_rubrique=rubriques.id_rubrique");
 
-	if ($post && $droit) {
-		$url_self = $post;
-		echo "<p />";
-		echo generer_url_post_ecrire($post, "id_auteur=$id_auteur");
-	} else
-		$url_self = "auteur_infos";
+	$restreint = spip_num_rows($result_admin);
 
-	// les admins voient et peuvent modifier les droits
-	// les admins restreints les voient mais 
-	// ne peuvent les utiliser que pour mettre un auteur a la poubelle
+	if (!$restreint) 
+		$res .= _T('info_admin_gere_toutes_rubriques');
+	else {
+		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) ? "id_auteur=$id_auteur" : '';
 
-	debut_cadre_relief();
+		$lien .= !$modif  ? '' : _T('lien_supprimer_rubrique');
 
-	if ($droit) {
-		  echo "<b>"._T('info_statut_auteur')." </b> ";
-		  echo choix_statut_auteur($statut);
+		$res .=  _T('info_admin_gere_rubriques')
+		. "\n<ul style='list-style-image: url("
+		. _DIR_IMG_PACK
+		. "rubrique-12.gif)'>";
+
+		while ($row_admin = spip_fetch_array($result_admin)) {
+			$id_rubrique = $row_admin["id_rubrique"];
+			
+			$res .= "<li><a href='"
+			. generer_url_ecrire("naviguer","id_rubrique=$id_rubrique")
+			. "'>"
+			. typo($row_admin["titre"])
+			. "</a>"
+			. (!$modif ? '' :
+			   ajax_action_auteur('instituer_auteur', "$id_auteur/-$id_rubrique", $url_self, $modif, array("&nbsp;&nbsp;&nbsp;&nbsp;[<font size='1'>$lien</font>]")))
+			. '</li>';
+		}
+		$res .= "</ul>";
 	}
 
 	// si pas admin au chargement, rien a montrer. 
-	echo "<div id='changer_statut_auteur'",
-		  (($statut == '0minirezo') ? '' : " style='visibility: hidden'"),
-		  '>';
-	$restreint = auteur_voir_rubriques($id_auteur, $url_self);
+	$vis = ($statut == '0minirezo') ? '' : " style='visibility: hidden'";
 
 		// Ajouter une rubrique a un administrateur restreint
 	if ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) {
-		echo debut_block_visible("statut$id_auteur");
-		echo "\n<div id='ajax_rubrique' class='arial1'><br />\n";
+		$res .=debut_block_visible("statut$id_auteur");
+		$res .="\n<div id='ajax_rubrique' class='arial1'><br />\n";
 		if (!$restreint)
-			echo "<b>"._T('info_restreindre_rubrique')."</b><br />";
+			$res .="<b>"._T('info_restreindre_rubrique')."</b><br />";
 		else
-			echo "<b>"._T('info_ajouter_rubrique')."</b><br />";
-		echo "\n<input name='id_auteur' value='$id_auteur' type='hidden' />";
+			$res .="<b>"._T('info_ajouter_rubrique')."</b><br />";
+		$res .="\n<input name='id_auteur' value='$id_auteur' type='hidden' />";
 		$selecteur_rubrique = charger_fonction('chercher_rubrique', 'inc');
-		echo $selecteur_rubrique(0, 'auteur', false);
-		echo "</div>\n";
-		echo fin_block();
+		$res .=$selecteur_rubrique(0, 'auteur', false);
+		$res .="</div>\n";
+		$res .=fin_block();
 	}
+		
+	$droit = (($connect_toutes_rubriques OR $statut != "0minirezo")
+		   && ($connect_id_auteur != $id_auteur));
 
-	echo '</div>'; // fin de la balise a visibilite conditionnelle
+	$ancre = "instituer_auteur-" . intval($id_auteur);
 
-	if ($post && $droit) {
-		echo "<div align='",
-		    $spip_lang_right,
-		    "'><input type='submit' class='fondo' value=\"",
-		    _T('bouton_valider'),
-		    "\" /></div>",
-		    "</form>\n";
+	if ($droit) {
+		$res = "<b>"._T('info_statut_auteur')." </b> "
+		. choix_statut_auteur($statut, "$ancre-aff")
+		. "<div id='$ancre-aff'$vis>"
+		. $res
+		. "</div><div align='"
+		.  $spip_lang_right
+		. "'><input type='submit' class='fondo' value=\""
+		. _T('bouton_valider')
+		. "\" /></div>";
+		
+		$res = ajax_action_auteur('instituer_auteur', $id_auteur, $url_self, (!$id_auteur ? "" : "id_auteur=$id_auteur"), $res);
 	}
 
-	fin_cadre_relief();
+	return (_request('var_ajaxcharset'))? $res :
+	  (debut_cadre_relief('',true)
+	. "<div id='"
+	. $ancre
+	. "'>"
+	. $res 
+	. '</div>'
+	. fin_cadre_relief(true));
 }
 
-// http://doc.spip.org/@auteur_voir_rubriques
-function auteur_voir_rubriques($id_auteur, $url_self)
+// http://doc.spip.org/@cadre_auteur_infos
+function cadre_auteur_infos($id_auteur, $auteur)
 {
-	global $connect_toutes_rubriques, $connect_id_auteur;
-					 
-	$result_admin = spip_query("SELECT rubriques.id_rubrique, titre FROM spip_auteurs_rubriques AS lien, spip_rubriques AS rubriques WHERE lien.id_auteur=$id_auteur AND lien.id_rubrique=rubriques.id_rubrique");
+  global $connect_statut;
 
-	$restreint = spip_num_rows($result_admin);
+  if ($id_auteur) {
+	debut_boite_info();
+	echo "<CENTER>";
+	echo "<FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=1><B>"._T('titre_cadre_numero_auteur')."&nbsp;:</B></FONT>";
+	echo "<BR><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=6><B>$id_auteur</B></FONT>";
+	echo "</CENTER>";
 
-	if (!$restreint) {
-		echo _T('info_admin_gere_toutes_rubriques');
-	} else {
-		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) ? "id_auteur=$id_auteur" : '';
 
-		echo _T('info_admin_gere_rubriques'),
-			"\n<ul style='list-style-image: url(",
-			_DIR_IMG_PACK,
-			"rubrique-12.gif)'>";
+// "Voir en ligne" si l'auteur a un article publie
+// seuls les admins peuvent "previsualiser" une page auteur
+	$n = spip_num_rows(spip_query("SELECT lien.id_article FROM spip_auteurs_articles AS lien, spip_articles AS articles WHERE lien.id_auteur=$id_auteur AND lien.id_article=articles.id_article AND articles.statut='publie'"));
+	if ($n)
+		voir_en_ligne ('auteur', $id_auteur, 'publie');
+	else if ($connect_statut == '0minirezo')
+		voir_en_ligne ('auteur', $id_auteur, 'prop');
 
-		while ($row_admin = spip_fetch_array($result_admin)) {
-			$id_rubrique = $row_admin["id_rubrique"];
-			
-			echo "<li><a href='", generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "'>",
-			  typo($row_admin["titre"]),
-			  "</a>";
-			
-			if ($modif) {
-			  echo "&nbsp;&nbsp;&nbsp;&nbsp;<font size='1'>[<a href='", redirige_action_auteur('supprimer', "auteur_rubrique-$id_auteur-$id_rubrique", $url_self, $modif), "'>",
-					    _T('lien_supprimer_rubrique'),
-					    "</a>]</font>";
-			}
-			echo '</li>';
-		}
-		echo "</ul>";
-	}
-	return $restreint;
+	fin_boite_info();
+  }
 }
 
 // http://doc.spip.org/@statut_modifiable_auteur
@@ -157,33 +147,13 @@ function statut_modifiable_auteur($id_auteur, $auteur)
 		  ($id_auteur AND ($auteur['statut'] != "0minirezo")))));
 }
 
-// http://doc.spip.org/@modifier_statut_auteur
-function modifier_statut_auteur (&$auteur, $statut, $add_rub='') {
-	global $connect_statut, $connect_toutes_rubriques;
-	// changer le statut ?
-	$id_auteur= intval($auteur['id_auteur']);
-	if (statut_modifiable_auteur($id_auteur, $auteur) &&
-	    ereg("^(0minirezo|1comite|5poubelle|6forum)$",$statut)) {
-			$auteur['statut'] = $statut;
-			spip_query("UPDATE spip_auteurs SET statut='".$statut."' WHERE id_auteur=$id_auteur");
-	}
-
-	// modif auteur restreint, seulement pour les admins
-	if ($connect_toutes_rubriques) {
-		if ($add_rub=intval($add_rub)) {
-			include_spip('base/abstract_sql');
-			spip_abstract_insert('spip_auteurs_rubriques', "(id_auteur,id_rubrique)", "($id_auteur, $add_rub)");
-	  }
-	}
-}
-
 // Menu de choix d'un statut d'auteur
 // http://doc.spip.org/@choix_statut_auteur
-function choix_statut_auteur($statut) {
+function choix_statut_auteur($statut, $ancre) {
 	global $connect_toutes_rubriques;
 
-	$menu = "<select name='statut' size=1 class='fondl'
-		onChange=\"setvisibility('changer_statut_auteur', this.selectedIndex ? 'hidden' : 'visible');\">";
+	$menu = "<select name='statut' size='1' class='fondl'
+		onChange=\"findObj_forcer('$ancre').style.visibility = (this.selectedIndex ? 'hidden' : 'visible');\">";
 
 	// Si on est admin restreint, on n'a pas le droit de modifier un admin
 	if ($connect_toutes_rubriques)
diff --git a/ecrire/inc/mini_nav.php b/ecrire/inc/mini_nav.php
index 09d89dce76..c4f74d7c9d 100644
--- a/ecrire/inc/mini_nav.php
+++ b/ecrire/inc/mini_nav.php
@@ -133,15 +133,15 @@ function mini_nav ($sel, $rac="",$fonction="", $rub_exclus=0, $aff_racine=false,
 	if ($aff_racine) {
 		$onClick = " aff_selection('rubrique','$rac', '0');";
 		# ce lien provoque la selection (directe) de la rubrique cliquee
-		$ondbClick = "findObj('id_parent').value=0;";
+		$ondbClick = "findObj_forcer('id_parent').value=0;";
 		# et l'affichage de son titre dans le bandeau
-		$ondbClick .= "findObj('titreparent').value='"
+		$ondbClick .= "findObj_forcer('titreparent').value='"
 			. strtr(
 				str_replace("'", "&#8217;",
 				str_replace('"', "&#34;",
 					textebrut(_T('info_racine_site')))),
 				"\n\r", "  ")."';";
-		$ondbClick .= "findObj('selection_rubrique').style.display='none';";
+		$ondbClick .= "findObj_forcer('selection_rubrique').style.display='none';";
 	}
 
 	if ($plonger)
-- 
GitLab