From bed6cfc2046a80b151ceea409a537fd37acedab3 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 30 Jun 2007 07:08:15 +0000
Subject: [PATCH] =?UTF-8?q?Poursuite=20de=20l'utilisation=20syst=C3=A9mati?=
 =?UTF-8?q?que=20de=20la=20fonction=20autoriser.=20Le=20cas=20publierdansr?=
 =?UTF-8?q?ubrique=20admet=20un=20numero=20de=20rubrique=20vide,=20ce=20qu?=
 =?UTF-8?q?i=20sp=C3=A9cifie=20alors=20tous=20les=20admins.=20Un=20coup=20?=
 =?UTF-8?q?de=20#877=20au=20passage=20(=C3=A9tat:=20872=20/=20478=20/=2012?=
 =?UTF-8?q?94),=20et=20rappatriement=20des=20=5Frequest=20dans=20les=20fic?=
 =?UTF-8?q?hiers=20exec/*:=20les=20inc/*=20ne=20doivent=20pas=20en=20conte?=
 =?UTF-8?q?nir=20si=20on=20veut=20en=20faire=20des=20fonctions=20r=C3=A9ut?=
 =?UTF-8?q?ilisables=20ailleurs.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/exec/auteur_infos.php     |  15 +++-
 ecrire/inc/auteur_infos.php      | 121 ++++++++++---------------------
 ecrire/inc/autoriser.php         |   4 +-
 ecrire/inc/chercher_rubrique.php |   2 +-
 ecrire/inc/instituer_auteur.php  |  21 +++---
 5 files changed, 63 insertions(+), 100 deletions(-)

diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index ba98718ed8..5919e686a0 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -17,9 +17,12 @@ include_spip('inc/autoriser');
 
 // http://doc.spip.org/@exec_auteur_infos_dist
 function exec_auteur_infos_dist() {
-	global $connect_id_auteur;
+	global $connect_id_auteur, $spip_display;
 
 	$id_auteur = intval(_request('id_auteur'));
+	$redirect = _request('redirect');
+	$echec = _request('echec');
+	$new = _request('new');
 
 	pipeline('exec_init',
 		array('args' => array(
@@ -38,9 +41,13 @@ function exec_auteur_infos_dist() {
 			$auteur['nom'] = _request('nom');
 	}
 
-	$auteur_infos = charger_fonction('auteur_infos', 'inc');
-	$fiche = $auteur_infos($auteur, _request('redirect'));
+	if (!$auteur AND !$new) {
+		include_spip('inc/headers');
+		redirige_par_entete(generer_url_ecrire('auteurs'));
+	}
 
+	$auteur_infos = charger_fonction('auteur_infos', 'inc');
+	$fiche = $auteur_infos($auteur, $new, $echec, _request('edit'), intval(_request('lier_id_article')), $redirect);
 
 /*	// Si on est appele en ajax, on renvoie la fiche
 	if (_request('var_ajaxcharset')) {
@@ -151,7 +158,7 @@ function auteurs_interventions($auteur) {
 	$id_auteur = $auteur['id_auteur'];
 	$statut = $auteur['statut'];
 
-	global $connect_statut, $connect_id_auteur;
+	global $connect_id_auteur;
 
 	include_spip('inc/message_select');
 
diff --git a/ecrire/inc/auteur_infos.php b/ecrire/inc/auteur_infos.php
index b863f2603f..070904f3e0 100644
--- a/ecrire/inc/auteur_infos.php
+++ b/ecrire/inc/auteur_infos.php
@@ -12,76 +12,32 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-
 // Affiche la fiche de renseignements d'un auteur
 // eventuellement editable
 // http://doc.spip.org/@inc_auteur_infos_dist
-function inc_auteur_infos_dist($auteur, $redirect) {
-	if (!$auteur['id_auteur']) {
-		if (_request('new') == 'oui') {
-			$new = true;
-		} else {
-			include_spip('inc/headers');
-			redirige_par_entete(generer_url_ecrire('auteurs'));
-		}
-	}
+function inc_auteur_infos_dist($auteur, $new, $echec, $edit, $id_article, $redirect) {
 
 	if (!$new) {
-		$corps = legender_auteur_voir($auteur, $redirect);
+		$infos = legender_auteur_voir($auteur, $redirect);
 	} else
-		$corps = '';
-
-	if (_request('echec'))
-		$corps .= afficher_erreurs_auteur(_request('echec'));
+		$infos = '';
 
+	if ($echec)
+		$infos .= afficher_erreurs_auteur($echec);
 
 	// Calculer le bloc de statut (modifiable ou non selon)
 	$instituer_auteur = charger_fonction('instituer_auteur', 'inc');
 	$bloc_statut = $instituer_auteur($auteur);
+	$id_auteur = intval($auteur['id_auteur']);
 
-	// Calculer le formulaire general
-	if (autoriser('modifier', 'auteur', $auteur['id_auteur'])) {
-		$corps = legender_auteur_saisir($auteur, $corps, $bloc_statut, $redirect);
-	} else {
-		// Indiquer le bloc statut (cas non modifiable) ?
-		$corps .= $bloc_statut;
-	}
-
-	return $corps;
-
-}
-
-// http://doc.spip.org/@afficher_erreurs_auteur
-function afficher_erreurs_auteur($echec) {
-	foreach (split('@@@',$echec) as $e)
-		$corps .= '<p>' . _T($e) . "</p>\n";
-
-	$corps = debut_cadre_relief('', true)
-	.  "<span style='color: red; left-margin: 5px'>"
-	.  http_img_pack("warning.gif", _T('info_avertissement'), "style='width: 48px; height: 48px; float: left; margin: 5px;'")
-	. $corps
-	.  _T('info_recommencer')
-	.  "</span>\n"
-	. fin_cadre_relief(true);
-
-	return $corps;
-}
-
-
-// http://doc.spip.org/@legender_auteur_saisir
-function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redirect) {
-	global $options, $connect_statut, $connect_id_auteur, $connect_toutes_rubriques;
-
-	include_spip('inc/autoriser');
-
-	$id_auteur = $auteur['id_auteur'];
-
-	$setconnecte = ($connect_id_auteur == $id_auteur);
+	if (!autoriser('modifier', 'auteur', $id_auteur))
+		return $infos . $bloc_statut;
 
+	$setconnecte = $GLOBALS['auteur_session']['id_auteur'] == $id_auteur;
 
 	// Elaborer le formulaire
-	$corps = '';
-	$corps .= _T('titre_cadre_signature_obligatoire')
+
+	$corps = _T('titre_cadre_signature_obligatoire')
 	. "("
 	. _T('entree_nom_pseudo')
 	. ")<br />\n"
@@ -124,8 +80,7 @@ function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redi
 	. fin_cadre_enfonce(true)
 	. "\n<br />";
 
-	if ($options == "avancees"
-	OR strlen($auteur['pgp'])) {
+	if ($auteur['pgp']) {
 		$corps .= debut_cadre_enfonce("cadenas-24.gif", true, "", _T('entree_cle_pgp'))
 		. "<textarea name='pgp' class='forml' rows='4' cols='40'>"
 		. entites_html($auteur['pgp'])
@@ -149,11 +104,11 @@ function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redi
 		$edit_login = false;
 		$edit_pass = false;
 	}
-	else if (($connect_statut == "0minirezo") AND $connect_toutes_rubriques) {
+	else if (autoriser('modifier', 'auteur', $id_auteur, NULL, array('restreintes' => true))) {
 		$edit_login = true;
 		$edit_pass = true;
 	}
-	else if ($connect_id_auteur == $id_auteur) {
+	else if ($setconnecte) {
 		$edit_login = false;
 		$edit_pass = true;
 	}
@@ -165,7 +120,7 @@ function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redi
 	$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) {
+	if (($edit_login OR $edit_pass) AND $setconnecte) {
 		$corps .= debut_cadre_enfonce('', true)
 		.  http_img_pack("warning.gif", _T('info_avertissement'), 
 				 "style='width: 48px; height: 48px; float: right;margin: 5px;'")
@@ -196,13 +151,7 @@ function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redi
 
 	$corps .= fin_cadre_relief(true);
 
-
-	
-	//
-	// Retour
-	//
-
-	$corps = $auteur_infos_voir
+	$corps =  $infos
 		. "<div id='auteur_infos_edit'>\n"
 		. '<div>&nbsp;</div>'
 		. "\n<div class='serif'>"
@@ -216,22 +165,19 @@ function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redi
 
 	// Installer la fiche "auteur_infos_voir"
 	// et masquer le formulaire si on n'en a pas besoin
-	$new = ($auteur_infos_voir == '');
-	if (!$new
-	AND !_request('echec')
-	AND !_request('edit')) {
+
+	if (!$new AND !$echec AND !$edit) {
 		$corps .= "<script>jQuery('#auteur_infos_edit').hide()</script>\n";
 	} else {
 		$corps .= "<script>jQuery('#auteur_infos_voir').hide()</script>\n";
 	}
 
-
 	// Formulaire de statut
 	$corps .= $bloc_statut;
 
 
 	// Lier a un article (creation d'un auteur depuis un article)
-	if ($id_article = intval(_request('lier_id_article')))
+	if ($id_article)
 		$corps .= "<input type='hidden' name='lier_id_article' value='$id_article' />\n";
 
 	// Redirection apres enregistrement ?
@@ -241,12 +187,28 @@ function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redi
 	$corps .= "<div style='text-align: right'><input type='submit' value='"._T('bouton_enregistrer')."' class='fondo' /></div>";
 
 
-	$arg = intval($id_auteur);
-	$ret .= generer_action_auteur('editer_auteur', $arg, $redirect, $corps, ' method="POST"');
+	return generer_action_auteur('editer_auteur', $id_auteur, $redirect, $corps, ' method="post"');
+
+}
+
+// http://doc.spip.org/@afficher_erreurs_auteur
+function afficher_erreurs_auteur($echec) {
+	foreach (split('@@@',$echec) as $e)
+		$corps .= '<p>' . _T($e) . "</p>\n";
+
+	$corps = debut_cadre_relief('', true)
+	.  "<span style='color: red; left-margin: 5px'>"
+	.  http_img_pack("warning.gif", _T('info_avertissement'), "style='width: 48px; height: 48px; float: left; margin: 5px;'")
+	. $corps
+	.  _T('info_recommencer')
+	.  "</span>\n"
+	. fin_cadre_relief(true);
 
-	return $ret;
+	return $corps;
 }
 
+
+// http://doc.spip.org/@legender_auteur_saisir
 //
 // Apparaitre dans la liste des redacteurs connectes
 //
@@ -283,13 +245,10 @@ function apparait_auteur_infos($id_auteur, $auteur) {
 
 // http://doc.spip.org/@legender_auteur_voir
 function legender_auteur_voir($auteur) {
-	global $connect_toutes_rubriques, $connect_statut, $connect_id_auteur, $champs_extra, $options, $spip_lang_right;
+	global $spip_lang_right;
 	$res = "";
 
-	if (!$id_auteur = $auteur['id_auteur']) {
-		$new = true;
-	}
-
+	$id_auteur = $auteur['id_auteur'];
 
 	// Bouton "modifier" ?
 	if (autoriser('modifier', 'auteur', $id_auteur)) {
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 5321e91dd5..8375f7b178 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -43,7 +43,7 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
 
 	// Qui ? auteur_session ?
 	if ($qui === NULL)
-		$qui = $GLOBALS['auteur_session']; // "" si pas connecte
+	  $qui = $GLOBALS['auteur_session'] ? $GLOBALS['auteur_session'] : array('statut' => '', 'id_auteur' =>0);
 	elseif (is_numeric($qui)) {
 		$s = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=".$qui);
 		$qui = spip_fetch_array($s);
@@ -125,7 +125,7 @@ function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt) {
 	return
 		($qui['statut'] == '0minirezo')
 		AND (
-			!$qui['restreint']
+			!$qui['restreint'] OR !$id
 			OR in_array($id, $qui['restreint'])
 		);
 }
diff --git a/ecrire/inc/chercher_rubrique.php b/ecrire/inc/chercher_rubrique.php
index 9f4784ca0d..e22eabfe71 100644
--- a/ecrire/inc/chercher_rubrique.php
+++ b/ecrire/inc/chercher_rubrique.php
@@ -176,7 +176,7 @@ function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0) {
 	$init = " disabled='disabled' type='text' value=\"" . $titre . '" style=\'width:300px;\'';
 
 	$url = generer_url_ecrire('selectionner',"id=$id_rubrique&type=$type" . (!$idem ? '' : ("&exclus=$idem&racine=" . ($restreint ? 'non' : 'oui')))
-  . ($GLOBALS['var_profile'] ? '&var_profile=1' : ''));
+	. (isset($GLOBALS['var_profile']) ? '&var_profile=1' : ''));
 
 	return construire_selecteur($url, '', 'selection_rubrique', 'id_parent', $init, $id_rubrique);
 }
diff --git a/ecrire/inc/instituer_auteur.php b/ecrire/inc/instituer_auteur.php
index 8d74c9e775..90bd050f2e 100644
--- a/ecrire/inc/instituer_auteur.php
+++ b/ecrire/inc/instituer_auteur.php
@@ -25,25 +25,22 @@ include_spip('inc/message_select');
 
 // http://doc.spip.org/@inc_instituer_auteur_dist
 function inc_instituer_auteur_dist($auteur) {
-	global $connect_toutes_rubriques, $connect_id_auteur, $connect_statut, $spip_lang_right, $spip_lang;
-
-	if ($connect_statut != '0minirezo') return '';
-
-	$statut = $auteur['statut'];
 
 	if (!$id_auteur = $auteur['id_auteur']) {
-		$new = true;
 		$statut = '1comite';
-	}
+	} else 	$statut = $auteur['statut'];
 
 	$ancre = "instituer_auteur-" . intval($id_auteur);
 
-	if ($menu = choix_statut_auteur($statut, $id_auteur, "$ancre-aff"))
-		$res = "<b>"._T('info_statut_auteur')."</b> " . $menu;
+	$menu = choix_statut_auteur($statut, $id_auteur, "$ancre-aff");
+
+	if (!$menu) return '';
+
+	$res = "<b>" . _T('info_statut_auteur')."</b> " . $menu;
 
 	// Prepare le bloc des rubriques restreintes ;
 	// si l'auteur n'est pas admin, on le cache
-	$vis = ($statut == '0minirezo') ? '' : " style='display: none'";
+	$vis = autoriser('publierdans','rubrique') ? '' : " style='display: none'";
 	if ($menu_restreints = choix_rubriques_admin_restreint($auteur))
 		$res .= "<div id='$ancre-aff'$vis>"
 			. $menu_restreints
@@ -123,7 +120,7 @@ function liste_statuts_instituer($courant, $id_auteur) {
 
 // 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;
+	global $spip_lang;
 
 	$id_auteur = intval($auteur['id_auteur']);
 
@@ -173,7 +170,7 @@ function choix_rubriques_admin_restreint($auteur) {
 		. "</ul>\n";
 
 	// Ajouter une rubrique a un administrateur restreint
-	if ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) {
+	if (autoriser('modifier', 'auteur', $id_auteur, NULL, array('restreintes' => true))) {
 
 		$label = $restreint
 			? _T('info_ajouter_rubrique')
-- 
GitLab