From 459583f10f0e3c712ff4882ac8fa8fb89957f3d6 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Wed, 11 Oct 2006 16:47:45 +0000
Subject: [PATCH] =?UTF-8?q?D=C3=A9coupage=20fonctionnel=20un=20peu=20diff?=
 =?UTF-8?q?=C3=A9rent=20pour=20faciliter=20les=20surcharges=20et=20partage?=
 =?UTF-8?q?r=20le=20code.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/exec/articles.php      |   2 +-
 ecrire/exec/documenter.php    |   2 +-
 ecrire/exec/iconifier.php     |   2 +-
 ecrire/inc/auth.php           |  10 ++-
 ecrire/inc/editer_auteurs.php | 138 ++++++++++++++++++----------------
 5 files changed, 85 insertions(+), 69 deletions(-)

diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index 01a10e62c8..b4dcb2c45c 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -75,7 +75,7 @@ function articles_affiche($id_article, $row, $cherche_auteur, $ids, $cherche_mot
 
 	$statut_rubrique = acces_rubrique($id_rubrique);
 
-	$flag_auteur = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur LIMIT 1"));
+	$flag_auteur = spip_num_rows(auteurs_article($id_article, " id_auteur=$connect_id_auteur"));
 
 	$flag_editable = ($statut_rubrique OR ($flag_auteur AND ($statut_article == 'prepa' OR $statut_article == 'prop' OR $statut_article == 'poubelle')));
 
diff --git a/ecrire/exec/documenter.php b/ecrire/exec/documenter.php
index 76e1023fe7..26a54a825b 100644
--- a/ecrire/exec/documenter.php
+++ b/ecrire/exec/documenter.php
@@ -37,7 +37,7 @@ function exec_documenter_dist()
 		$editable = (is_array($droits) AND $droits[$row['id_rubrique']]);
 		if (!$editable) {
 			if ($row['statut'] == 'prepa' OR $row['statut'] == 'prop')
-				$editable = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id AND id_auteur=$id_auteur"));
+				$editable = spip_num_rows(auteurs_article($id_article, " AND id_auteur=$id_auteur"));
 		}
 	}
 	if (!$editable) {
diff --git a/ecrire/exec/iconifier.php b/ecrire/exec/iconifier.php
index f2bd535d35..04cca72c53 100644
--- a/ecrire/exec/iconifier.php
+++ b/ecrire/exec/iconifier.php
@@ -37,7 +37,7 @@ function exec_iconifier_dist()
 		$row = spip_fetch_array(spip_query("SELECT id_rubrique, statut FROM spip_$table WHERE $type=$id"));
 		$droit = acces_rubrique($row['id_rubrique']);
 		if (!$droit AND  ($row['statut'] == 'prepa' OR $row['statut'] == 'prop' OR $row['statut'] == 'poubelle'))
-			$droit = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur LIMIT 1"));
+			$droit = spip_num_rows(determiner_auteurs_article($id_article, "id_auteur=$connect_id_auteur"));
 	}
 
 	if (!$droit) {
diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php
index e0569c9797..41faa6e2b2 100644
--- a/ecrire/inc/auth.php
+++ b/ecrire/inc/auth.php
@@ -51,15 +51,19 @@ function acces_article($id_article)
 
 	if (acces_rubrique($row['id_rubrique'])) return true;
 
-	$s = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur LIMIT 1"));
-
-	if (!$s) return false;
+	$s = auteurs_article($id_article, " id_auteur=$connect_id_auteur");
+	if (!spip_num_rows($s)) return false;
 
 	$s = $row['statut'];
 
 	return ($s == 'prepa' OR $s == 'prop' OR $s == 'poubelle');
 }
 
+function auteurs_article($id_article, $cond='')
+{
+	return spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id_article". ($cond ? " AND $cond" : ''));
+}
+
 // Retourne les droits de publication d'un auteur selon le codage suivant:
 // - le tableau de ses rubriques si c'est un admin restreint
 // - 0 si c'est un admin de plein droit
diff --git a/ecrire/inc/editer_auteurs.php b/ecrire/inc/editer_auteurs.php
index 2621e68651..0699c3dbaf 100644
--- a/ecrire/inc/editer_auteurs.php
+++ b/ecrire/inc/editer_auteurs.php
@@ -17,88 +17,102 @@ include_spip('inc/actions');
 
 function inc_editer_auteurs_dist($id_article, $flag, $cherche_auteur, $ids)
 {
-  global $spip_lang_left, $spip_lang_right, $options;
+	global $options;
+
+	$les_auteurs = join(',', determiner_auteurs_article($id_article));
+	if ($flag AND $options == 'avancees') {
+		$r = 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");
+		$futurs = ajouter_auteurs_articles($id_article, $r);
+	} else $futurs = '';
+
+	return editer_auteurs_article($id_article, $flag, $cherche_auteur, $ids, $les_auteurs, $futurs);
+}
+
+function editer_auteurs_article($id_article, $flag, $cherche_auteur, $ids, $les_auteurs, $futurs)
+{
+	global $spip_lang_left, $spip_lang_right, $options;
 
 //
 // complement de action/editer_auteurs.php pour notifier la recherche d'auteur
 //
+	$bouton_creer_auteur =  $GLOBALS['connect_toutes_rubriques'];
 
- $bouton_creer_auteur =  $GLOBALS['connect_toutes_rubriques'];
+	if ($cherche_auteur) {
 
- if ($cherche_auteur) {
+		$reponse ="<p align='$spip_lang_left'>"
+		. debut_boite_info(true)
+		. rechercher_auteurs_articles($cherche_auteur, $ids,  $id_article);
 
-	$reponse ="<p align='$spip_lang_left'>"
-	. debut_boite_info(true)
-	. rechercher_auteurs_articles($cherche_auteur, $ids,  $id_article);
+		if ($bouton_creer_auteur) {
 
-	if ($bouton_creer_auteur) {
+			$reponse .="<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> ";
 
-		$reponse .="<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;
+		}
 
-		$bouton_creer_auteur = false;
-	}
+		$reponse .= fin_boite_info(true)
+		. '</p>';
+	} else $reponse ='';
 
-	$reponse .= fin_boite_info(true)
-	. '</p>';
- } else $reponse ='';
+	if ($les_auteurs)
+		$reponse .= afficher_auteurs_articles($id_article, $flag, $les_auteurs);
 
 //
-// Afficher les auteurs
+// Ajouter un auteur
 //
-	$les_auteurs = array();
 
-	$result = spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=$id_article");
+	$res = '';
+	if ($flag AND $options == 'avancees') {
 
-	while ($row = spip_fetch_array($result))
-		$les_auteurs[]= $row['id_auteur'];
+		if ($bouton_creer_auteur) {
 
-	if ($les_auteurs = join(',', $les_auteurs)) 
-		$reponse .= afficher_auteurs_articles($id_article, $flag, $les_auteurs);
+			$res = "<div style='width:170px;'><span class='verdana1'><b>"
+			. 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)
+			. "</b></span></div>\n";
+		}
 
-//
-// Ajouter un auteur
-//
+		$res = "<div style='float:$spip_lang_right; width:280px;position:relative;display:inline;'>"
+		. $futurs
+		."</div>\n"
+		. $res;
+	}
 
- $res = '';
- if ($flag AND $options == 'avancees') {
+	$bouton = (!$flag 
+		   ? ''
+		   : (($flag === 'ajax')
+			? bouton_block_visible("auteursarticle")
+			: bouton_block_invisible("auteursarticle")))
+	. _T('texte_auteurs')
+	. aide("artauteurs");
+
+	$res = '<div>&nbsp;</div>' // pour placer le gif patienteur
+	. debut_cadre_enfonce("auteur-24.gif", true, "", $bouton)
+	. $reponse
+	.  ($flag === 'ajax' ?
+		debut_block_visible("auteursarticle") :
+		debut_block_invisible("auteursarticle"))
+	. $res
+	. fin_block()
+	. fin_cadre_enfonce(true);
+
+	return ajax_action_greffe("editer_auteurs-$id_article", $res);
+}
 
-	if ($bouton_creer_auteur) {
+function determiner_auteurs_article($id_article, $cond='')
+{
+	$les_auteurs = array();
 
-		$res = "<div style='width:170px;'><span class='verdana1'><b>"
-		. 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)
-		. "</b></span></div>\n";
-	}
+	$result = auteurs_article($id_article,$cond); // function de inc/auth
+
+	while ($row = spip_fetch_array($result))
+		$les_auteurs[]= $row['id_auteur'];
 
-	$res = "<div style='float:$spip_lang_right; width:280px;position:relative;display:inline;'>"
-	. ajouter_auteurs_articles($id_article, $les_auteurs, $bouton_creer_auteur)
-	."</div>\n"
-	. $res;
-
- }
-
- $bouton = (!$flag 
-	    ? ''
-	    : (($flag === 'ajax')
-	        ? bouton_block_visible("auteursarticle")
-	       : bouton_block_invisible("auteursarticle")))
- . _T('texte_auteurs')
-. aide("artauteurs");
-
- $res = '<div>&nbsp;</div>' // pour placer le gif patienteur
- . debut_cadre_enfonce("auteur-24.gif", true, "", $bouton)
- . $reponse
- .  ($flag === 'ajax' ?
-     debut_block_visible("auteursarticle") :
-     debut_block_invisible("auteursarticle"))
- . $res
- . fin_block()
- . fin_cadre_enfonce(true);
-
- return ajax_action_greffe("editer_auteurs-$id_article", $res);
+	return $les_auteurs;
 }
 
+
 // http://doc.spip.org/@rechercher_auteurs_articles
 function rechercher_auteurs_articles($cherche_auteur, $ids, $id_article)
 {
@@ -203,11 +217,9 @@ function afficher_auteurs_articles($id_article, $flag_editable, $les_auteurs)
 
 
 // http://doc.spip.org/@ajouter_auteurs_articles
-function ajouter_auteurs_articles($id_article, $les_auteurs)
+function ajouter_auteurs_articles($id_article, $query)
 {
-	$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 '';
+	if (!$num = spip_num_rows($query)) return '';
 
 	$js = "\"findObj_forcer('valider_ajouter_auteur').style.visibility='visible';\"";
 
@@ -219,7 +231,7 @@ function ajouter_auteurs_articles($id_article, $les_auteurs)
 			? ("<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) .
+			   articles_auteur_select($query) .
 			   "</select>" .
 			   "<span  class='visible_au_chargement' id='valider_ajouter_auteur'>" .
 			   " <input type='submit' value='"._T('bouton_ajouter')."' CLASS='fondo'>" .
-- 
GitLab