From e7a8775944f4a08053140e454662beabf47ba7fe Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 12 Oct 2006 21:39:55 +0000
Subject: [PATCH] =?UTF-8?q?Permettre=20la=20surcharge=20du=20formulaire=20?=
 =?UTF-8?q?cr=C3=A9ant=20et/ou=20d=C3=A9crivant=20un=20auteur=20(introduct?=
 =?UTF-8?q?ion=20de=20la=20fonction=20legender=5Fauteur).=20Il=20faudrait?=
 =?UTF-8?q?=20fusionner=20=20cette=20fonction=20avec=20le=20squelette=20fo?=
 =?UTF-8?q?rmulaire=5Finscription=20qui=20n'en=20est=20qu'un=20cas=20parti?=
 =?UTF-8?q?culier.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes                 |   1 +
 ecrire/exec/auteur_infos.php   | 194 +++++++++++++++++++--------------
 ecrire/inc/legender_auteur.php | 194 +++++++++++++++++++++++++++++++++
 3 files changed, 307 insertions(+), 82 deletions(-)
 create mode 100644 ecrire/inc/legender_auteur.php

diff --git a/.gitattributes b/.gitattributes
index df4bd9edec..b6a43716fd 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -452,6 +452,7 @@ ecrire/inc/instituer_auteur.php -text
 ecrire/inc/joindre.php -text
 ecrire/inc/lang_liste.php -text
 ecrire/inc/legender.php -text
+ecrire/inc/legender_auteur.php -text
 ecrire/inc/maintenance.php -text
 ecrire/inc/message_select.php -text
 ecrire/inc/minipres.php -text
diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index 8879d94775..01b9088ef0 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -46,6 +46,35 @@ global $ajouter_id_article,
 		'data'=>'')
 	);
 
+	list($echec, $auteur) = action_auteur_infos_dist($id_auteur, $ajouter_id_article);
+// Redirection
+
+	if (!$echec AND $_SERVER['REQUEST_METHOD'] == "POST") {
+		redirige_par_entete($redirect ? rawurldecode($redirect) : generer_url_ecrire("auteurs_edit", "id_auteur=$id_auteur", true));
+}
+	exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect, $ajouter_id_article);
+}
+
+function action_auteur_infos_dist($id_auteur, $ajouter_id_article)
+{
+global $bio,
+  $champs_extra,
+  $connect_id_auteur,
+  $connect_statut,
+  $connect_toutes_rubriques,
+  $email,
+  $id_auteur,
+  $new_login,
+  $new_pass,
+  $new_pass2,
+  $nom,
+  $nom_site_auteur,
+  $perso_activer_imessage,
+  $pgp,
+  $redirect,
+  $statut,
+  $url_site;
+
 //
 // Recuperer id_auteur ou se preparer a l'inventer
 //
@@ -54,7 +83,7 @@ global $ajouter_id_article,
 		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';
 	}
@@ -190,26 +219,23 @@ if ($nom OR $statut) {
 
 	// Mettre a jour les fichiers .htpasswd et .htpasswd-admin
 	ecrire_acces();
-}
-// Redirection
-if (!$echec AND $_SERVER['REQUEST_METHOD'] == "POST") {
-  redirige_par_entete($redirect ? rawurldecode($redirect) : generer_url_ecrire("auteurs_edit", "id_auteur=$id_auteur", true));
-}
-exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect, $ajouter_id_article, $onfocus);
-
+ }
+ return array($echec, $auteur);
 }
 
 // http://doc.spip.org/@exec_affiche_auteur_info_dist
-function exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect, $ajouter_id_article, $onfocus)
+function exec_affiche_auteur_info_dist($initial, $auteur,  $echec, $redirect, $ajouter_id_article)
 {
 	global $connect_id_auteur;
 
+	$id_auteur = $auteur['id_auteur'];
+
 	if ($connect_id_auteur == $id_auteur)
 		debut_page($auteur['nom'], "auteurs", "perso");
 	else
 		debut_page($auteur['nom'],"auteurs","redacteurs");
 
-	echo "<br><br><br>";
+	echo "<br /><br /><br />";
 
 	debut_gauche();
 
@@ -242,12 +268,8 @@ function exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect,
 	}
 
 	debut_cadre_formulaire();
-	echo generer_url_post_ecrire('auteur_infos', (!$id_auteur ? "" : "id_auteur=$id_auteur"));
-	if ($ajouter_id_article)
-		echo "<input name='ajouter_id_article' value='$ajouter_id_article' type='hidden'>\n"
-		. "\n<input name='redirect' value='$redirect' type='hidden' />";
 
-	formulaire_auteur_infos($id_auteur, $auteur, $onfocus);
+	echo formulaire_auteur_infos($id_auteur, $auteur, $initial, $ajouter_id_article, $redirect);
 	echo "</form>";
 	echo $instituer_auteur($id_auteur, $auteur['statut'], "auteurs_edit");
 
@@ -259,66 +281,72 @@ function exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect,
 
 
 // http://doc.spip.org/@formulaire_auteur_infos
-function formulaire_auteur_infos($id_auteur, $auteur, $onfocus)
+function formulaire_auteur_infos($id_auteur, $auteur, $initial, $ajouter_id_article, $redirect)
 {
-  global $connect_statut, $connect_toutes_rubriques,$connect_id_auteur, $options, $champs_extra  ;
+	global $connect_statut, $connect_toutes_rubriques,$connect_id_auteur, $options, $champs_extra  ;
 
+	$onfocus = $initial ? '' : " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
 
-//
-// Infos personnelles
-//
-
-echo "\n<div class='serif'>";
-
-debut_cadre_relief("fiche-perso-24.gif", false, "", _T("icone_informations_personnelles"));
+	$corps = generer_url_post_ecrire('auteur_infos', (!$id_auteur ? "" : "id_auteur=$id_auteur"));
 
-echo _T('titre_cadre_signature_obligatoire');
-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 ($ajouter_id_article)
+		$corps .= "<input name='ajouter_id_article' value='$ajouter_id_article' type='hidden'>\n"
+		. "\n<input name='redirect' value='$redirect' type='hidden' />";
+	$corps .= "\n<div class='serif'>"
+	. debut_cadre_relief("fiche-perso-24.gif", true, "", _T("icone_informations_personnelles"))
+	. _T('titre_cadre_signature_obligatoire')
+	. "("._T('entree_nom_pseudo').")<br />\n"
+	. "<input type='text' name='nom' class='formo' value=\""
+	. entites_html($auteur['nom'])
+	. "\" size='40' $onfocus />\n<p>"
+	. "<b>"._T('entree_adresse_email')."</b>";
+
+	if ($connect_statut == "0minirezo"
+	AND ($connect_toutes_rubriques OR $auteur['statut']<>'0minirezo')) {
+		$corps .= "<br /><input type='text' name='email' class='formo' value=\"".entites_html($auteur['email'])."\" size='40' />\n<p>\n";
+	} else {
+		$corps .= "&nbsp;: <tt>".$auteur['email']."</tt>"
+		. "<br>("._T('info_reserve_admin').")\n"
+		. "\n<p>";
+	}
 
-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' />\n<p>\n";
-}
-else {
-	echo "&nbsp;: <tt>".$auteur['email']."</tt>";
-	echo "<br>("._T('info_reserve_admin').")\n";
-	echo "\n<p>";
-}
+	$corps .= "<b>"._T('entree_infos_perso')."</b><br />\n"
+	. "("._T('entree_biographie').")<br />\n"
+	. "<textarea name='bio' class='forml' rows='4' cols='40' wrap=soft>"
+	. entites_html($auteur['bio'])
+	. "</textarea>\n"
+	. debut_cadre_enfonce("site-24.gif", true, "", _T('info_site_web'))
+	. "<b>"._T('entree_nom_site')."</b><br />\n"
+	. "<input type='text' name='nom_site_auteur' class='forml' value=\""
+	. entites_html($auteur['nom_site'])
+	. "\" size='40'><P>\n"
+	. "<b>"
+	. _T('entree_url')
+	. "</b><br />\n"
+	. "<input type='text' name='url_site' class='forml' value=\""
+	. entites_html($auteur['url_site'])
+	. "\" size='40'>\n"
+	. fin_cadre_enfonce(true)
+	. "\n<p>";
+
+	if ($options == "avancees") {
+		$corps .= debut_cadre_enfonce("cadenas-24.gif", true, "", _T('entree_cle_pgp'))
+		. "<textarea name='pgp' class='forml' rows='4' cols='40' wrap=soft>"
+		. entites_html($auteur['pgp'])
+		. "</textarea>\n"
+		. fin_cadre_enfonce(true)
+		. "\n<p>";
+	} else {
+		$corps .= "<input type='hidden' name='pgp' value=\""
+		. entites_html($auteur['pgp'])
+		. "\" />";
+	}
 
-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 />\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 />\n";
-echo "<input type='text' name='url_site' class='forml' value=\"".entites_html($auteur['url_site'])."\" size='40'>\n";
-fin_cadre_enfonce();
-	echo "\n<p>";
-
-if ($options == "avancees") {
-	debut_cadre_enfonce("cadenas-24.gif", false, "", _T('entree_cle_pgp'));
-	echo "<textarea name='pgp' class='forml' rows='4' cols='40' wrap=soft>";
-	echo entites_html($auteur['pgp']);
-	echo "</textarea>\n";
-	fin_cadre_enfonce();
-	echo "\n<p>";
-}
-else {
-	echo "<input type='hidden' name='pgp' value=\"".entites_html($auteur['pgp'])."\" />";
-}
+	$corps .= "\n<p>";
 
-echo "\n<p>";
 	if ($champs_extra) {
 		include_spip('inc/extra');
-		extra_saisie($auteur['extra'], 'auteurs', $auteur['statut']);
+		$corps .= extra_saisie($auteur['extra'], 'auteurs', $auteur['statut'],'', false);
 	}
 
 //
@@ -343,25 +371,25 @@ else {
 	$edit_pass = false;
 }
 
-	debut_cadre_relief("base-24.gif");
+	$corps .= debut_cadre_relief("base-24.gif", true);
 
 // Avertissement en cas de modifs de ses propres donnees
 	if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
-		debut_cadre_enfonce();
-		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 "\n<p>";
+		$corps .= debut_cadre_enfonce(true)
+		.  http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='right'")
+		. "<b>"._T('texte_login_precaution')."</b>\n"
+		. fin_cadre_enfonce(true)
+		. "\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 />\n";
-		echo "<input type='text' name='new_login' class='formo' value=\"".entites_html($auteur['login'])."\" size='40' /><p>\n";
+		$corps .= "<b>"._T('item_login')."</b> "
+		. "<font color='red'>("._T('texte_plus_trois_car').")</font> :<br />\n"
+		. "<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 />\n</legend><br><b>".$auteur['login']."</b> ";
-		echo "<i> ("._T('info_non_modifiable').")</i>\n<p>";
+		$corps .= "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><br />\n</legend><br><b>".$auteur['login']."</b> "
+		. "<i> ("._T('info_non_modifiable').")</i>\n<p>";
 	}
 
 // On ne peut modifier le mot de passe en cas de source externe (par exemple LDAP)
@@ -371,9 +399,9 @@ else {
 		. "<input type='password' name='new_pass' class='formo' value=\"\" size='40' /><br />\n"
 		. _T('info_confirmer_passe')."<br />\n"
 		. "<input type='password' name='new_pass2' class='formo' value=\"\" size='40'><p>\n";
-		echo $res;
+		$corps .= $res;
 	}
-	fin_cadre_relief();
+	$corps .= fin_cadre_relief(true);
 
 	$res = "<p />";
 
@@ -391,9 +419,11 @@ else {
 			'id_auteur'=>$id_auteur),
 			'data'=>''));
 
-	echo $res;
-	echo "</div>";
-	fin_cadre_relief();
+	$corps .= $res
+	. "</div>"
+	. fin_cadre_relief(true);
+
+	return $corps;
 }
 
 //
diff --git a/ecrire/inc/legender_auteur.php b/ecrire/inc/legender_auteur.php
new file mode 100644
index 0000000000..d744656ae7
--- /dev/null
+++ b/ecrire/inc/legender_auteur.php
@@ -0,0 +1,194 @@
+<?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/@formulaire_auteur_infos
+function inc_legender_auteur($id_auteur, $auteur, $initial, $ajouter_id_article, $redirect)
+{
+	global $connect_statut, $connect_toutes_rubriques,$connect_id_auteur, $options, $champs_extra  ;
+
+	$onfocus = $initial ? '' : " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
+
+	$corps = generer_url_post_ecrire('auteur_infos', (!$id_auteur ? "" : "id_auteur=$id_auteur"));
+
+	if ($ajouter_id_article)
+		$corps .= "<input name='ajouter_id_article' value='$ajouter_id_article' type='hidden'>\n"
+		. "\n<input name='redirect' value='$redirect' type='hidden' />";
+	$corps .= "\n<div class='serif'>"
+	. debut_cadre_relief("fiche-perso-24.gif", true, "", _T("icone_informations_personnelles"))
+	. _T('titre_cadre_signature_obligatoire')
+	. "("._T('entree_nom_pseudo').")<br />\n"
+	. "<input type='text' name='nom' class='formo' value=\""
+	. entites_html($auteur['nom'])
+	. "\" size='40' $onfocus />\n<p>"
+	. "<b>"._T('entree_adresse_email')."</b>";
+
+	if ($connect_statut == "0minirezo"
+	AND ($connect_toutes_rubriques OR $auteur['statut']<>'0minirezo')) {
+		$corps .= "<br /><input type='text' name='email' class='formo' value=\"".entites_html($auteur['email'])."\" size='40' />\n<p>\n";
+	} else {
+		$corps .= "&nbsp;: <tt>".$auteur['email']."</tt>"
+		. "<br>("._T('info_reserve_admin').")\n"
+		. "\n<p>";
+	}
+
+	$corps .= "<b>"._T('entree_infos_perso')."</b><br />\n"
+	. "("._T('entree_biographie').")<br />\n"
+	. "<textarea name='bio' class='forml' rows='4' cols='40' wrap=soft>"
+	. entites_html($auteur['bio'])
+	. "</textarea>\n"
+	. debut_cadre_enfonce("site-24.gif", true, "", _T('info_site_web'))
+	. "<b>"._T('entree_nom_site')."</b><br />\n"
+	. "<input type='text' name='nom_site_auteur' class='forml' value=\""
+	. entites_html($auteur['nom_site'])
+	. "\" size='40'><P>\n"
+	. "<b>"
+	. _T('entree_url')
+	. "</b><br />\n"
+	. "<input type='text' name='url_site' class='forml' value=\""
+	. entites_html($auteur['url_site'])
+	. "\" size='40'>\n"
+	. fin_cadre_enfonce(true)
+	. "\n<p>";
+
+	if ($options == "avancees") {
+		$corps .= debut_cadre_enfonce("cadenas-24.gif", true, "", _T('entree_cle_pgp'))
+		. "<textarea name='pgp' class='forml' rows='4' cols='40' wrap=soft>"
+		. entites_html($auteur['pgp'])
+		. "</textarea>\n"
+		. fin_cadre_enfonce(true)
+		. "\n<p>";
+	} else {
+		$corps .= "<input type='hidden' name='pgp' value=\""
+		. entites_html($auteur['pgp'])
+		. "\" />";
+	}
+
+	$corps .= "\n<p>";
+
+	if ($champs_extra) {
+		include_spip('inc/extra');
+		$corps .= extra_saisie($auteur['extra'], 'auteurs', $auteur['statut'],'', false);
+	}
+
+//
+// Login et mot de passe :
+// accessibles seulement aux admins non restreints et l'auteur lui-meme
+//
+
+if ($auteur['source'] != 'spip') {
+	$edit_login = false;
+	$edit_pass = false;
+}
+else if (($connect_statut == "0minirezo") AND $connect_toutes_rubriques) {
+	$edit_login = true;
+	$edit_pass = true;
+}
+else if ($connect_id_auteur == $id_auteur) {
+	$edit_login = false;
+	$edit_pass = true;
+}
+else {
+	$edit_login = false;
+	$edit_pass = false;
+}
+
+	$corps .= debut_cadre_relief("base-24.gif", true);
+
+// Avertissement en cas de modifs de ses propres donnees
+	if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
+		$corps .= debut_cadre_enfonce(true)
+		.  http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='right'")
+		. "<b>"._T('texte_login_precaution')."</b>\n"
+		. fin_cadre_enfonce(true)
+		. "\n<p>";
+	}
+
+// Un redacteur n'a pas le droit de modifier son login !
+	if ($edit_login) {
+		$corps .= "<b>"._T('item_login')."</b> "
+		. "<font color='red'>("._T('texte_plus_trois_car').")</font> :<br />\n"
+		. "<input type='text' name='new_login' class='formo' value=\"".entites_html($auteur['login'])."\" size='40' /><p>\n";
+	} else {
+		$corps .= "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><br />\n</legend><br><b>".$auteur['login']."</b> "
+		. "<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) {
+		$res = "<b>"._T('entree_nouveau_passe')."</b> "
+		. "<font color='red'>("._T('info_plus_cinq_car').")</font> :<br />\n"
+		. "<input type='password' name='new_pass' class='formo' value=\"\" size='40' /><br />\n"
+		. _T('info_confirmer_passe')."<br />\n"
+		. "<input type='password' name='new_pass2' class='formo' value=\"\" size='40'><p>\n";
+		$corps .= $res;
+	}
+	$corps .= fin_cadre_relief(true);
+
+	$res = "<p />";
+
+	if ($GLOBALS['connect_id_auteur'] == $id_auteur)
+		$res .= apparait_auteur_infos($id_auteur, $auteur);
+
+	$res .= "\n<div align='right'>"
+	. "\n<input type='submit' class='fondo' value='"
+	. _T('bouton_enregistrer')
+	. "'></div>"
+
+	. pipeline('affiche_milieu',
+		array('args' => array(
+			'exec'=>'auteur_infos',
+			'id_auteur'=>$id_auteur),
+			'data'=>''));
+
+	$corps .= $res
+	. "</div>"
+	. fin_cadre_relief(true);
+
+	return $corps;
+}
+
+//
+// Apparaitre dans la liste des redacteurs connectes
+//
+
+// http://doc.spip.org/@apparait_auteur_infos
+function apparait_auteur_infos($id_auteur, $auteur)
+{
+
+	if ($auteur['imessage']=="non"){
+		$res = "<input type='radio' name='perso_activer_imessage' value='oui' id='perso_activer_imessage_on'>"
+		. " <label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label> "
+		. "<br />\n<input type='radio' name='perso_activer_imessage' value='non' checked id='perso_activer_imessage_off'>"
+		. " <b><label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label></b> ";
+	} else {
+		$res = "<input type='radio' name='perso_activer_imessage' value='oui' id='perso_activer_imessage_on' checked>"
+		. " <b><label for='perso_activer_imessage_on'>"
+		. _T('bouton_radio_apparaitre_liste_redacteurs_connectes')
+		. "</label></b> "
+		. "<br />\n<input type='radio' name='perso_activer_imessage' value='non' id='perso_activer_imessage_off'>"
+		. " <label for='perso_activer_imessage_off'>"
+		. _T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')
+		. "</label> ";
+	}
+
+	return debut_cadre_relief("messagerie-24.gif", true, "", _T('info_liste_redacteurs_connectes'))
+	. "\n<div>"
+	. _T('texte_auteur_messagerie')
+	. "</div>"
+	. $res
+	. fin_cadre_relief(true)
+	. "<p />";
+}
+?>
-- 
GitLab