From e4bb0f9c035f50cede2cd1e578e7b073c6711196 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 8 May 2007 20:44:46 +0000
Subject: [PATCH] rendre un peu plus generique le systeme d'edition des auteurs
 d'un objet (on pourra comme ca le faire marcher sur acces_restreint)

---
 ecrire/action/editer_auteurs.php | 12 +++++++-----
 ecrire/inc/editer_auteurs.php    |  5 +++--
 ecrire/inc/forum.php             |  7 ++++---
 ecrire/inc/indexation.php        |  2 ++
 ecrire/inc/utils.php             |  7 +++++++
 ecrire/public/interfaces.php     |  4 ++--
 6 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/ecrire/action/editer_auteurs.php b/ecrire/action/editer_auteurs.php
index 3978230f93..b29c35adb4 100644
--- a/ecrire/action/editer_auteurs.php
+++ b/ecrire/action/editer_auteurs.php
@@ -63,11 +63,12 @@ function action_editer_auteurs_dist() {
 // http://doc.spip.org/@supprimer_auteur_et_rediriger
 function supprimer_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
 {
+	$jointure = table_jointure('auteur', $type);
 	if (preg_match(',^[a-z]*$,',$type)){
-		spip_query("DELETE FROM spip_auteurs_{$type}s WHERE id_auteur="._q($id_auteur)." AND id_{$type}="._q($id));
+		spip_query("DELETE FROM spip_{$jointure} WHERE id_auteur="._q($id_auteur)." AND id_{$type}="._q($id));
 		if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
 				include_spip("inc/indexation");
-				marquer_indexer("spip_{$type}s", $id);
+				marquer_indexer("spip_".table_objet($type), $id);
 		}
 	}
 
@@ -77,14 +78,15 @@ function supprimer_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
 // http://doc.spip.org/@ajouter_auteur_et_rediriger
 function ajouter_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
 {
+	$jointure = table_jointure('auteur', $type);
 	if (preg_match(',^[a-z]*$,',$type)){
-		$res = spip_query("SELECT id_$type FROM spip_auteurs_{$type}s WHERE id_auteur=" . _q($id_auteur) . " AND id_{$type}=" . $id);
+		$res = spip_query("SELECT id_$type FROM spip_{$jointure} WHERE id_auteur=" . _q($id_auteur) . " AND id_{$type}=" . $id);
 		if (!spip_num_rows($res))
-			spip_abstract_insert("spip_auteurs_{$type}s", "(id_auteur,id_{$type})", "($id_auteur,$id)");
+			spip_abstract_insert("spip_{$jointure}", "(id_auteur,id_{$type})", "($id_auteur,$id)");
 	
 		if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
 			include_spip("inc/indexation");
-			marquer_indexer("spip_{$type}s", $id);
+			marquer_indexer("spip_".table_objet($type), $id);
 		}
 	}
 
diff --git a/ecrire/inc/editer_auteurs.php b/ecrire/inc/editer_auteurs.php
index 109c0f3717..80a469ed12 100644
--- a/ecrire/inc/editer_auteurs.php
+++ b/ecrire/inc/editer_auteurs.php
@@ -131,7 +131,8 @@ function determiner_auteurs_objet($type, $id, $cond='', $limit='')
 	$les_auteurs = array();
 	if (!preg_match(',^[a-z]*$,',$type)) return $les_auteurs; 
 
-	$result = spip_query("SELECT id_auteur FROM spip_auteurs_{$type}s WHERE id_{$type}="._q($id) 
+	$jointure = table_jointure('auteur', $type);
+	$result = spip_query("SELECT id_auteur FROM spip_{$jointure} WHERE id_{$type}="._q($id) 
 	. ($cond ? " AND $cond" : '')
 	. ($limit? " LIMIT $limit": '')
 	);
@@ -260,9 +261,9 @@ function ajouter_auteurs_objet($type, $id, $cond_les_auteurs,$script_edit, $arg_
 
 	if (!$determiner_non_auteurs = charger_fonction('determiner_non_auteurs_'.$type,'inc',true))
 		$determiner_non_auteurs = 'determiner_non_auteurs';
+
 	$query = $determiner_non_auteurs($type, $id, $cond_les_auteurs, "statut, nom");
 	if (!$num = spip_num_rows($query)) return '';
-
 	$js = "findObj_forcer('valider_ajouter_auteur').style.visibility='visible';";
 
 	$text = "<span class='verdana1'><b>"
diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php
index e5fe9bf9f8..d0f27d0071 100644
--- a/ecrire/inc/forum.php
+++ b/ecrire/inc/forum.php
@@ -237,6 +237,10 @@ function racine_forum($id_forum){
 	if (!$row = spip_fetch_array($result))
 		return false;
 
+	if ($row['id_parent']
+	AND $row['id_thread'] != $id_forum)) // eviter boucle infinie
+		return racine_forum($row['id_thread']);
+
 	if ($row['id_rubrique'])
 		return array('rubrique', $row['id_rubrique'], $id_forum);
 	if ($row['id_article'])
@@ -246,9 +250,6 @@ function racine_forum($id_forum){
 	if ($row['id_syndic'])
 		return array('site', $row['id_syndic'], $id_forum);
 
-	if ($row['id_thread'] <> $id_forum)
-		return racine_forum($row['id_thread']);
-
 	// On ne devrait jamais arriver ici, mais prevoir des cas de forums
 	// poses sur autre chose que les objets prevus...
 	spip_log("erreur racine_forum $id_forum");
diff --git a/ecrire/inc/indexation.php b/ecrire/inc/indexation.php
index 9248ebe4c8..62a7de7884 100644
--- a/ecrire/inc/indexation.php
+++ b/ecrire/inc/indexation.php
@@ -613,6 +613,8 @@ function indexer_objet($table, $id_objet, $forcer_reset = true) {
 // API pour l'espace prive pour marquer un objet d'une table a reindexer
 // http://doc.spip.org/@marquer_indexer
 function marquer_indexer ($table, $id_objet) {
+	if (!isset($GLOBALS['INDEX_elements_objet'][$table]))
+		return;
 	spip_log ("demande indexation $table id=$id_objet");
 	$id = primary_index_table($table);
 	spip_query("UPDATE $table SET idx='1' WHERE $id=$id_objet AND idx!='non'");
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index b0be60e7ee..bff662769f 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -555,6 +555,13 @@ function id_table_objet($type) {
 		return 'id_'.$type;
 }
 
+// Recuperer le nom de la table de jointure xxxx sur l'objet yyyy
+function table_jointure($x, $y) {
+	include_spip('public/interfaces');
+	if ($table = $GLOBALS['tables_jointures']['spip_' . table_objet($y)][id_table_objet($x)]
+	OR $table = $GLOBALS['tables_jointures']['spip_' . table_objet($x)][id_table_objet($y)])
+		return $table;
+}
 
 //
 // spip_timer : on l'appelle deux fois et on a la difference, affichable
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index e9d6f5be71..2f1da81b8e 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -221,13 +221,13 @@ $table_date['syndic_articles']='date';
 global $tables_jointures;
 
 $tables_jointures['spip_articles'][]= 'mots_articles';
-$tables_jointures['spip_articles'][]= 'auteurs_articles';
+$tables_jointures['spip_articles']['id_auteur']= 'auteurs_articles';
 $tables_jointures['spip_articles'][]= 'documents_articles';
 $tables_jointures['spip_articles'][]= 'mots';
 $tables_jointures['spip_articles'][]= 'signatures';
 
 $tables_jointures['spip_auteurs'][]= 'auteurs_articles';
-$tables_jointures['spip_auteurs'][]= 'mots';
+$tables_jointures['spip_auteurs'][]= 'mots'; // ??
 
 $tables_jointures['spip_breves'][]= 'mots_breves';
 $tables_jointures['spip_breves'][]= 'documents_breves';
-- 
GitLab