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