From d56b86098ddb22b2c2d2ebb12ecdac46b0d527f5 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 13 Mar 2006 16:10:27 +0000
Subject: [PATCH] =?UTF-8?q?Ajout=20de=20Primary=20Key=20aux=20tables=20aut?=
 =?UTF-8?q?eurs=5Frubriques,=20auteurs=5Farticles=20et=20auteurs=5Fmessage?=
 =?UTF-8?q?s=20comme=20pour=20le=20[5949]:=20ca=20doit=20acc=C3=A9lerer=20?=
 =?UTF-8?q?les=20requetes=20dessus=20et=20=C3=A7a=20permet=20surtout=20au?=
 =?UTF-8?q?=20compilateur=20de=20produire=20des=20jointures=20automatiques?=
 =?UTF-8?q?=20sans=20r=C3=A9p=C3=A9titions.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Au passage, nettoyage de afficher_formulaire_statut_auteur qui contenait du
code mort.
---
 ecrire/base/auxiliaires.php |   3 +
 ecrire/base/optimiser.php   |   2 +-
 ecrire/base/upgrade.php     |   9 ++-
 ecrire/inc/auteur_voir.php  | 123 ++++++++++++++++--------------------
 ecrire/inc_version.php      |   2 +-
 5 files changed, 67 insertions(+), 72 deletions(-)

diff --git a/ecrire/base/auxiliaires.php b/ecrire/base/auxiliaires.php
index f01708c805..ca12b91859 100644
--- a/ecrire/base/auxiliaires.php
+++ b/ecrire/base/auxiliaires.php
@@ -71,6 +71,7 @@ $spip_auteurs_articles = array(
 		"id_article"	=> "BIGINT (21) DEFAULT '0' NOT NULL");
 
 $spip_auteurs_articles_key = array(
+		"PRIMARY KEY"	=> "id_auteur, id_article",
 		"KEY id_auteur"	=> "id_auteur",
 		"KEY id_article"	=> "id_article");
 
@@ -79,6 +80,7 @@ $spip_auteurs_rubriques = array(
 		"id_rubrique"	=> "BIGINT (21) DEFAULT '0' NOT NULL");
 
 $spip_auteurs_rubriques_key = array(
+		"PRIMARY KEY"	=> "id_auteur, id_rubrique",
 		"KEY id_auteur"	=> "id_auteur",
 		"KEY id_rubrique"	=> "id_rubrique");
 
@@ -88,6 +90,7 @@ $spip_auteurs_messages = array(
 		"vu"		=> "CHAR (3) NOT NULL");
 
 $spip_auteurs_messages_key = array(
+		"PRIMARY KEY"	=> "id_auteur, id_message",
 		"KEY id_auteur"	=> "id_auteur",
 		"KEY id_message"	=> "id_message");
 
diff --git a/ecrire/base/optimiser.php b/ecrire/base/optimiser.php
index baa11eabf8..f68a4b0897 100644
--- a/ecrire/base/optimiser.php
+++ b/ecrire/base/optimiser.php
@@ -293,7 +293,7 @@ function optimiser_base() {
 		WHERE id_auteur=".$row['id_auteur']
 		." AND id_message=".$row['id_message']);
 
-	# les liens d'articles sur des auteurs effaces
+	# les liens de rubriques sur des auteurs effaces
 	$query = "SELECT auteurs_rubriques.id_auteur,auteurs_rubriques.id_rubrique
 		      FROM spip_auteurs_rubriques AS auteurs_rubriques
 		        LEFT JOIN spip_rubriques AS rubriques
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index 0438fc028d..7e8b5a23b5 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -11,7 +11,6 @@
 \***************************************************************************/
 
 
-//
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 function maj_version ($version, $test = true) {
@@ -1173,6 +1172,14 @@ function maj_base() {
 		spip_query("ALTER IGNORE TABLE spip_mots_forum ADD PRIMARY KEY (id_forum, id_mot)");
 		maj_version(1.909);
 	}
+
+	if ($version_installee < 1.910) {
+		spip_query("ALTER IGNORE TABLE spip_auteurs_articles ADD PRIMARY KEY (id_auteur, id_article)");
+		spip_query("ALTER IGNORE TABLE spip_auteurs_rubriques ADD PRIMARY KEY (id_auteur, id_rubrique)");
+		spip_query("ALTER IGNORE TABLE spip_auteurs_messages ADD PRIMARY KEY (id_auteur, id_message)");
+		maj_version(1.910);
+	}
+
 	return true;
 }
 
diff --git a/ecrire/inc/auteur_voir.php b/ecrire/inc/auteur_voir.php
index d240e17b8d..38c2983c26 100644
--- a/ecrire/inc/auteur_voir.php
+++ b/ecrire/inc/auteur_voir.php
@@ -46,12 +46,7 @@ function afficher_formulaire_statut_auteur ($id_auteur, $statut, $post='') {
 	global $spip_lang_right;
 
 
-	// S'agit-il d'un admin restreint ?
-	if ($statut == '0minirezo') {
-		$query_admin = "SELECT lien.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 GROUP BY lien.id_rubrique";
-		$result_admin = spip_query($query_admin);
-		$admin_restreint = (spip_num_rows($result_admin) > 0);
-	}
+	if ($connect_statut != "0minirezo") return;
 
 	$droit = ( ($connect_toutes_rubriques OR $statut != "0minirezo")
 		   && ($connect_id_auteur != $id_auteur));
@@ -66,83 +61,73 @@ function afficher_formulaire_statut_auteur ($id_auteur, $statut, $post='') {
 	// 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 ($connect_statut == "0minirezo") {
-		debut_cadre_relief();
-
-		if ($droit) {
-		  /* Neutralisation momentanee des couches. A revoir.
-		  $couches = $admin_restreint ? 
-		    bouton_block_visible("statut$id_auteur") :
-		    bouton_block_invisible("statut$id_auteur");
-		  echo $couches;
-		  */
+
+	debut_cadre_relief();
+
+	if ($droit) {
 		  echo "<b>"._T('info_statut_auteur')." </b> ";
 		  echo choix_statut_auteur($statut);
-		}
+	}
 
-		// si pas admin au chargement, rien a montrer. 
-		echo "<div id='changer_statut_auteur'",
+	// si pas admin au chargement, rien a montrer. 
+	echo "<div id='changer_statut_auteur'",
 		  (($statut == '0minirezo') ? '' : " style='visibility: hidden'"),
 		  '>';
-
-		echo "\n<p /><div style='arial2'>";
-		// si pas admin restreint au chargement, rien a calculer
-		if (!$admin_restreint) {
-			if ($statut == '0minirezo') {
-				echo _T('info_admin_gere_toutes_rubriques');
-			}
-		} else {
-				echo _T('info_admin_gere_rubriques')."\n";
-				echo "<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"];
-					echo "<li><a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "'>", typo($row_admin["titre"]), "</a>";
-
-					if ($connect_toutes_rubriques
-					AND $connect_id_auteur != $id_auteur) {
-					  echo "&nbsp;&nbsp;&nbsp;&nbsp;<font size='1'>[<a href='", generer_url_ecrire($url_self, "id_auteur=$id_auteur&supp_rub=$id_rubrique"), "'>",
-					    _T('lien_supprimer_rubrique'),
-					    "</a>]</font>";
-					}
-					echo '</li>';
-					$toutes_rubriques .= "$id_rubrique,";
-				}
-				$toutes_rubriques = ",$toutes_rubriques";
-
-				echo "</ul>";
-		}
-		echo "</div>\n";
+	auteur_voir_rubriques($id_auteur, $url_self);
 
 		// 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";
-			if (spip_num_rows($result_admin) == 0)
-				echo "<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' />";
-
-			// selecteur de rubrique
-			include_spip('inc/rubriques');
-			echo selecteur_rubrique(0, 'auteur', false);
-
-			echo "</div>\n";
-			echo fin_block();
-		}
+	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";
+		if (spip_num_rows($result_admin) == 0)
+			echo "<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' />";
+		include_spip('inc/rubriques');
+		echo selecteur_rubrique(0, 'auteur', false);
+		echo "</div>\n";
+		echo fin_block();
+	}
 
-		echo '</div>'; // fin de la balise a visibilite conditionnelle
+	echo '</div>'; // fin de la balise a visibilite conditionnelle
 
-		if ($post && $droit) {
-		  echo "<div align='",
+	if ($post && $droit) {
+		echo "<div align='",
 		    $spip_lang_right,
 		    "'><input type='submit' class='fondo' value=\"",
 		    _T('bouton_valider'),
 		    "\" /></div>",
 		    "</form>\n";
-		}
+	}
+
+	fin_cadre_relief();
+}
 
-		fin_cadre_relief();
+function auteur_voir_rubriques($id_auteur, $url_self)
+{
+	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");
+
+	if (!spip_num_rows($result_admin)) {
+		echo _T('info_admin_gere_toutes_rubriques');
+	} else {
+		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur);
+		echo _T('info_admin_gere_rubriques');
+		echo "\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"];
+			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='", generer_url_ecrire($url_self, "id_auteur=$id_auteur&supp_rub=$id_rubrique"), "'>",
+					    _T('lien_supprimer_rubrique'),
+					    "</a>]</font>";
+			}
+			echo '</li>';
+		}
+		echo "</ul>";
 	}
 }
 
@@ -173,7 +158,7 @@ function modifier_statut_auteur (&$auteur, $statut, $add_rub='', $supp_rub='') {
 	// modif auteur restreint, seulement pour les admins
 	if ($connect_toutes_rubriques) {
 		if ($add_rub=intval($add_rub))
-			spip_query("INSERT INTO spip_auteurs_rubriques
+			spip_query("INSERT IGNORE INTO spip_auteurs_rubriques
 			(id_auteur,id_rubrique)
 			VALUES(".$auteur['id_auteur'].", $add_rub)");
 
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index b43bacf9ce..9405b02f96 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -200,7 +200,7 @@ $extension_squelette = 'html';
 // (utilise pour les modifs de la base de donnees)
 
 // version de la base
-$spip_version = 1.909;
+$spip_version = 1.910;
 
 // version de spip
 $spip_version_affichee = '1.9 beta 1';
-- 
GitLab