From 0f0bd471e5ee25bab461439479bf9141a2a209a8 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 2 Jan 2007 22:10:48 +0000
Subject: [PATCH] une constante define('_ID_WEBMESTRES', '1:5'); dans
 mes_options permet d'eviter a ces deux admins de devoir s'authentifier par
 ftp pour faire les trucs dangereux ... le mecanisme est bon, mais il reste a
 voir le nommage et la valeur par defaut (je mettrais bien '1' mais ca ouvre
 un trou); par ailleurs meilleur nommage de autoriser('modererpetition',
 'article'), desole pour qui aurait deja exploite cette API

---
 ecrire/exec/articles.php          |  2 +-
 ecrire/exec/controle_petition.php |  4 ++--
 ecrire/inc/admin.php              | 31 ++++++++++++++++++++++++++-----
 ecrire/inc/autoriser.php          | 15 +++++++++++++--
 4 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index b5be2f786f..723abd1a32 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -262,7 +262,7 @@ function boites_de_config_articles($id_article)
 		$regler = $regler_moderation($id_article,"articles","id_article=$id_article");
 	}
 
-	if (autoriser('moderer_petition', 'article', $id_article)) {
+	if (autoriser('modererpetition', 'article', $id_article)) {
 		$petitionner = charger_fonction('petitionner', 'inc');
 		$petition = $petitionner($id_article,"articles","id_article=$id_article");
 	}
diff --git a/ecrire/exec/controle_petition.php b/ecrire/exec/controle_petition.php
index 3b7649783a..d422ad6cce 100644
--- a/ecrire/exec/controle_petition.php
+++ b/ecrire/exec/controle_petition.php
@@ -23,10 +23,10 @@ function exec_controle_petition_dist()
 	$id_article = intval(_request('id_article'));
 
 	if (
-		autoriser('moderer_petition')
+		autoriser('modererpetition')
 		OR (
 			$id_article > 0
-			AND autoriser('moderer_petition', 'article', $id_article)
+			AND autoriser('modererpetition', 'article', $id_article)
 		)
 	) {
 
diff --git a/ecrire/inc/admin.php b/ecrire/inc/admin.php
index fd93c4aaec..42a7d4a683 100644
--- a/ecrire/inc/admin.php
+++ b/ecrire/inc/admin.php
@@ -31,8 +31,8 @@ function debut_admin($script, $action, $commentaire='') {
 		$dir = _DIR_TMP;
 	} else {
 		$dir = _DIR_TRANSFERT . $connect_login . '/';
-
 	}
+
 	$signal = fichier_admin($action);
 	if (@file_exists($dir . $signal)) {
 		spip_log ("Action admin: $action");
@@ -42,9 +42,29 @@ function debut_admin($script, $action, $commentaire='') {
 		include_spip('inc/texte');
 		$commentaire = ("\n<p>".propre($commentaire)."</p>\n");
 	}
+
 	include_spip('inc/minipres');
+	include_spip('inc/autoriser');
+
 
-	$form =  $commentaire
+	// Si on est un super-admin, un bouton de validation suffit
+	// nom de l'autorisation a revoir... 'webmestre' veut tout et rien dire...
+	if (autoriser('webmestre')) {
+		if (_request('validation_admin') == $signal) {
+			spip_log ("Action super-admin: $action");
+			return true;
+		}
+		$form = $commentaire
+			. "<form action='./' method='post'>"
+			. copy_request($script)
+			. '<input type="hidden" name="validation_admin" value="'.$signal.'" />'
+			. bouton_suivant(_T('bouton_valider'))
+		. "</form>";
+		$js = '';
+	}
+
+	else {
+		$form =  $commentaire
 		. "<form action='./' method='post'>"
 		. copy_request($script)
 		. fieldset(_T('info_authentification_ftp').aide("ftp_auth"),
@@ -57,14 +77,15 @@ function debut_admin($script, $action, $commentaire='') {
 			 . _T('info_creer_repertoire_2', array('repertoire' => joli_repertoire($dir)))
 			 . bouton_suivant(_T('bouton_recharger_page'))))
 		. "</form>";
+		$js = " onload='document.forms[0].fichier.value=\"\";barre_inserer(\"$signal\", document.forms[0].fichier)'";
+	}
 
 	// code volontairement tordu:
 	// provoquer la copie dans le presse papier du nom du repertoire
-	// en remettant a vide le champ pour que ça marche aussi en cas
+	// en remettant a vide le champ pour que ca marche aussi en cas
 	// de JavaScript inactif.
 	echo minipres(_T('info_action', array('action' => $action)),
-		 $form
-,		 " onload='document.forms[0].fichier.value=\"\";barre_inserer(\"$signal\", document.forms[0].fichier)'");
+		 $form, $js);
 	exit;
 }
 
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 21126e3660..67e3a52a2a 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -225,10 +225,21 @@ function autoriser_signature_modifier_dist($faire, $type, $id, $qui, $opt) {
 // Moderer la petition ?
 // = modifier l'article correspondant
 // = droits par defaut sinon (admin complet pour moderation de tout)
-// http://doc.spip.org/@autoriser_moderer_petition_dist
-function autoriser_moderer_petition_dist($faire, $type, $id, $qui, $opt) {
+// http://doc.spip.org/@autoriser_modererpetition_dist
+function autoriser_modererpetition_dist($faire, $type, $id, $qui, $opt) {
 	return
 		autoriser('modifier', $type, $id, $qui, $opt);
 }
 
+// Est-on webmestre ? Signifie qu'on n'a meme pas besoin de passer par ftp
+// pour modifier les fichiers, cf. notamment inc/admin
+// = rien ni personne sauf definition de 
+// a l'avenir peut-etre autoriser "admin numero 1" ou une interface de selection
+function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) {
+	return
+		(defined('_ID_WEBMESTRES') AND in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES)) AND $qui['statut'] == '0minirezo' AND !$qui['restreint'])
+		OR false;
+}
+
+
 ?>
-- 
GitLab