$id_article), "id_article = ".(0-$id_auteur));
+ sql_updateq("spip_documents_liens", array("id_article" => $id_article), "id_article = ".(0-$id_auteur));
}
// Enregistre l'envoi dans la BD
diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php
index a8de776ac8..f63b3322ea 100644
--- a/ecrire/action/supprimer.php
+++ b/ecrire/action/supprimer.php
@@ -82,18 +82,14 @@ function supprimer_document_et_vignette($arg)
spip_unlink(get_spip_doc($row['fichier']));
sql_delete("spip_documents", "id_document=$arg");
sql_updateq("spip_documents", array("id_vignette" => 0), "id_vignette=$arg");
- sql_delete("spip_documents_articles", "id_document=$arg");
- sql_delete("spip_documents_rubriques", "id_document=$arg");
- sql_delete("spip_documents_breves", "id_document=$arg");
+ sql_delete("spip_documents_liens", "id_document=$arg");
$id_vignette = $row['id_vignette'];
if ($id_vignette > 0) {
$f = sql_getfetsel("fichier", "spip_documents ", "id_document=$id_vignette");
if ($f) spip_unlink(get_spip_doc($f));
sql_delete("spip_documents", "id_document=$id_vignette");
- sql_delete("spip_documents_articles", "id_document=$id_vignette");
- sql_delete("spip_documents_rubriques", "id_document=$id_vignette");
- sql_delete("spip_documents_breves", "id_document=$id_vignette");
+ sql_delete("spip_documents_liens", "id_document=$id_vignette");
}
}
}
diff --git a/ecrire/base/auxiliaires.php b/ecrire/base/auxiliaires.php
index 59c2901382..301ed529a0 100644
--- a/ecrire/base/auxiliaires.php
+++ b/ecrire/base/auxiliaires.php
@@ -100,7 +100,21 @@ $spip_auteurs_messages_key = array(
"PRIMARY KEY" => "id_auteur, id_message",
"KEY id_message" => "id_message");
+$spip_documents_liens = array(
+ "id_document" => "bigint(21) DEFAULT '0' NOT NULL",
+ "id_article" => "bigint(21) NULL",
+ "id_breve" => "bigint(21) NULL",
+ "id_rubrique" => "bigint(21) NULL",
+ "id_auteur" => "bigint(21) NULL",
+ "id_forum" => "bigint(21) NULL",
+ "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL");
+
+$spip_documents_liens_key = array(
+ "PRIMARY KEY" => "id_document,id_article,id_breve,id_rubrique,id_auteur,id_forum",
+ "KEY id_document" => "id_document");
+
+/*
$spip_documents_articles = array(
"id_document" => "bigint(21) DEFAULT '0' NOT NULL",
"id_article" => "bigint(21) DEFAULT '0' NOT NULL",
@@ -136,6 +150,7 @@ $spip_documents_forum = array(
$spip_documents_forum_key = array(
"PRIMARY KEY" => "id_forum, id_document",
"KEY id_document" => "id_document");
+*/
$spip_mots_articles = array(
"id_mot" => "bigint(21) DEFAULT '0' NOT NULL",
@@ -261,6 +276,10 @@ $tables_auxiliaires['spip_auteurs_rubriques'] = array(
$tables_auxiliaires['spip_auteurs_messages'] = array(
'field' => &$spip_auteurs_messages,
'key' => &$spip_auteurs_messages_key);
+$tables_auxiliaires['spip_documents_liens'] = array(
+ 'field' => &$spip_documents_liens,
+ 'key' => &$spip_documents_liens_key);
+/*
$tables_auxiliaires['spip_documents_articles'] = array(
'field' => &$spip_documents_articles,
'key' => &$spip_documents_articles_key);
@@ -273,6 +292,7 @@ $tables_auxiliaires['spip_documents_breves'] = array(
$tables_auxiliaires['spip_documents_forum'] = array(
'field' => &$spip_documents_forum,
'key' => &$spip_documents_forum_key);
+*/
$tables_auxiliaires['spip_mots_articles'] = array(
'field' => &$spip_mots_articles,
'key' => &$spip_mots_articles_key);
diff --git a/ecrire/exec/controle_forum.php b/ecrire/exec/controle_forum.php
index fd2eae6138..fc4ce7d8ce 100644
--- a/ecrire/exec/controle_forum.php
+++ b/ecrire/exec/controle_forum.php
@@ -132,7 +132,17 @@ function controle_forum_boucle($row) {
$type = $r['type'];
$valeur = $r['valeur'];
$pref = $r['pref'];
-
+
+
+ $documents = array();
+ if ($s = sql_select('doc.fichier AS fichier', 'spip_documents AS doc, spip_documents_liens AS lien', 'doc.id_document=lien.id_document AND lien.id_forum='.$id_forum))
+ while ($t = sql_fetch($s)) {
+ include_spip('inc/documents');
+ $documents[] = "".basename($t['fichier'])."";
+ }
+ $documents = join(', ', $documents);
+
+
$cadre = "";
$controle = "\n
";
@@ -190,6 +200,8 @@ function controle_forum_boucle($row) {
}
}
+ $controle .= $documents;
+
$controle .= "";
$controle .= "\n";
diff --git a/ecrire/exec/documents_liste.php b/ecrire/exec/documents_liste.php
index 0289d1d39f..9f1372cfd8 100644
--- a/ecrire/exec/documents_liste.php
+++ b/ecrire/exec/documents_liste.php
@@ -46,7 +46,7 @@ echo debut_droite('', true);
while ($row = sql_fetch($res))
$types[$row['extension']] = $row;
- $result = sql_select("docs.id_document AS id_doc, docs.extension AS extension, docs.fichier AS fichier, docs.date AS date, docs.titre AS titre, docs.descriptif AS descriptif, lien.id_rubrique AS id_rub, rubrique.titre AS titre_rub", "spip_documents AS docs, spip_documents_rubriques AS lien, spip_rubriques AS rubrique", "docs.id_document = lien.id_document AND rubrique.id_rubrique = lien.id_rubrique AND docs.mode = 'document'", "", "docs.date DESC");
+ $result = sql_select("docs.id_document AS id_doc, docs.extension AS extension, docs.fichier AS fichier, docs.date AS date, docs.titre AS titre, docs.descriptif AS descriptif, lien.id_rubrique AS id_rub, rubrique.titre AS titre_rub", "spip_documents AS docs, spip_documents_liens AS lien, spip_rubriques AS rubrique", "docs.id_document = lien.id_document AND rubrique.id_rubrique = lien.id_rubrique AND docs.mode = 'document'", "", "docs.date DESC");
while ($row=sql_fetch($result)){
$titre=$row['titre'];
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index 850a757ca6..5e9f083328 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -465,7 +465,7 @@ function tester_rubrique_vide($id_rubrique) {
if (sql_countsel('spip_syndic', "id_rubrique=$id_rubrique AND (statut='publie' OR statut='prop')"))
return false;
- if (sql_countsel('spip_documents_rubriques', "id_rubrique=$id_rubrique"))
+ if (sql_countsel('spip_documents_liens', "id_rubrique=$id_rubrique"))
return false;
return true;
diff --git a/ecrire/genie/optimiser.php b/ecrire/genie/optimiser.php
index 4b5c1eebf3..cdc83de0eb 100644
--- a/ecrire/genie/optimiser.php
+++ b/ecrire/genie/optimiser.php
@@ -145,12 +145,12 @@ function optimiser_base_disparus($attente = 86400) {
# les liens des documents qui sont dans une id_rubrique inexistante
# (meme remarque)
$res = sql_select("documents_rubriques.id_rubrique AS id",
- "spip_documents_rubriques AS documents_rubriques
+ "spip_documents_liens AS documents_rubriques
LEFT JOIN spip_rubriques AS rubriques
ON documents_rubriques.id_rubrique=rubriques.id_rubrique",
"rubriques.id_rubrique IS NULL");
- $n+= optimiser_sansref('spip_documents_rubriques', 'id_rubrique', $res);
+ $n+= optimiser_sansref('spip_documents_liens', 'id_rubrique', $res);
# les liens des mots affectes a une id_rubrique inexistante
$res = sql_select("mots_rubriques.id_rubrique AS id",
@@ -178,12 +178,12 @@ function optimiser_base_disparus($attente = 86400) {
# les liens de documents d'articles effaces
$res = sql_select("documents_articles.id_article AS id",
- "spip_documents_articles AS documents_articles
+ "spip_documents_liens AS documents_articles
LEFT JOIN spip_articles AS articles
ON documents_articles.id_article=articles.id_article",
"articles.id_article IS NULL");
- $n+= optimiser_sansref('spip_documents_articles', 'id_article', $res);
+ $n+= optimiser_sansref('spip_documents_liens', 'id_article', $res);
# les liens de mots affectes a des articles effaces
$res = sql_select("mots_articles.id_article AS id",
@@ -213,12 +213,12 @@ function optimiser_base_disparus($attente = 86400) {
# les liens de documents sur des breves effacees
$res = sql_select("documents_breves.id_breve AS id",
- "spip_documents_breves AS documents_breves
+ "spip_documents_liens AS documents_breves
LEFT JOIN spip_breves AS breves
ON documents_breves.id_breve=breves.id_breve",
"breves.id_breve IS NULL");
- $n+= optimiser_sansref('spip_documents_breves', 'id_breve', $res);
+ $n+= optimiser_sansref('spip_documents_liens', 'id_breve', $res);
# les liens de mots affectes a des breves effacees
$res = sql_select("mots_breves.id_breve AS id",
diff --git a/ecrire/inc/agenda.php b/ecrire/inc/agenda.php
index 6a9ae12aad..37e85e0e42 100644
--- a/ecrire/inc/agenda.php
+++ b/ecrire/inc/agenda.php
@@ -1405,7 +1405,7 @@ function quete_calendrier_interval_articles($avant, $apres, &$evenements) {
// http://doc.spip.org/@quete_calendrier_interval_rubriques
function quete_calendrier_interval_rubriques($avant, $apres, &$evenements) {
- $result=sql_select('DISTINCT R.id_rubrique, titre, descriptif, date', 'spip_rubriques AS R, spip_documents_rubriques AS L', "statut='publie' AND date >= $avant AND date < $apres AND R.id_rubrique = L.id_rubrique",'', "date");
+ $result=sql_select('DISTINCT R.id_rubrique, titre, descriptif, date', 'spip_rubriques AS R, spip_documents_liens AS L', "statut='publie' AND date >= $avant AND date < $apres AND R.id_rubrique = L.id_rubrique",'', "date");
while($row=sql_fetch($result)){
$amj = date_anneemoisjour($row['date']);
$id = $row['id_rubrique'];
diff --git a/ecrire/inc/ajouter_documents.php b/ecrire/inc/ajouter_documents.php
index 0b84f61d9c..361b674f40 100644
--- a/ecrire/inc/ajouter_documents.php
+++ b/ecrire/inc/ajouter_documents.php
@@ -243,10 +243,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
if ($id_lien AND $id
AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
) {
- $table = ($type_lien == 'forum')
- ? 'spip_documents_forum'
- : 'spip_documents_'.$type_lien.'s';
- sql_insertq($table,
+ sql_insertq('spip_documents_liens',
array('id_document' => $id,
'id_'.$type_lien => $id_lien));
} else spip_log("Pb d'insertion $id_lien $type_lien");
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 9536ffccd8..e18f23a3f6 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -552,9 +552,9 @@ function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
if (in_array($qui['statut'], array('0minirezo', '1comite')))
return 'htaccess';
- if (sql_countsel('spip_documents_articles AS rel_articles, spip_articles AS articles', "rel_articles.id_article = articles.id_article AND articles.statut = 'publie' AND rel_articles.id_document = $id") > 0
- OR sql_countsel('spip_documents_rubriques AS rel_rubriques, spip_rubriques AS rubriques', "rel_rubriques.id_rubrique = rubriques.id_rubrique AND rubriques.statut = 'publie' AND rel_rubriques.id_document = $id") > 0
- OR sql_countsel('spip_documents_breves AS rel_breves, spip_breves AS breves', "rel_breves.id_breve = breves.id_breve AND breves.statut = 'publie' AND rel_breves.id_document = $id") > 0)
+ if (sql_countsel('spip_documents_liens AS rel_articles, spip_articles AS articles', "rel_articles.id_article = articles.id_article AND articles.statut = 'publie' AND rel_articles.id_document = $id") > 0
+ OR sql_countsel('spip_documents_liens AS rel_rubriques, spip_rubriques AS rubriques', "rel_rubriques.id_rubrique = rubriques.id_rubrique AND rubriques.statut = 'publie' AND rel_rubriques.id_document = $id") > 0
+ OR sql_countsel('spip_documents_liens AS rel_breves, spip_breves AS breves', "rel_breves.id_breve = breves.id_breve AND breves.statut = 'publie' AND rel_breves.id_document = $id") > 0)
return 'htaccess';
else return false;
}
diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php
index 1eeae3fcaf..82ad19135f 100644
--- a/ecrire/inc/boutons.php
+++ b/ecrire/inc/boutons.php
@@ -130,7 +130,7 @@ function definir_barre_boutons() {
$sousmenu['sites_tous']=
new Bouton('site-24.gif', 'icone_sites_references');
- $n = sql_countsel('spip_documents_rubriques');
+ $n = sql_countsel('spip_documents_liens', 'id_rubrique>0');
if ($n) {
$sousmenu['documents_liste']=
new Bouton('doc-24.gif', 'icone_doc_rubrique');
diff --git a/ecrire/inc/documenter.php b/ecrire/inc/documenter.php
index 882978c137..b971564a59 100644
--- a/ecrire/inc/documenter.php
+++ b/ecrire/inc/documenter.php
@@ -26,16 +26,10 @@ function inc_documenter_dist(
$appelant ='' # pour le rappel (cf plugin)
) {
if (is_int($doc)) {
- $table = 'spip_documents_' . $type . 's';
- if (!id_table_objet($table)) {
- spip_log("documenter: $type table inconnue");
- $type = 'article';
- $table = 'spip_documents_' . $type . 's';
- }
$prim = 'id_' . $type;
$img = ($ancre == 'portfolio') ? '' : " NOT";
$select = "D.id_document, D.id_vignette, D.extension, D.titre, D.date, D.descriptif, D.fichier, D.taille, D.largeur, D.hauteur, D.mode, D.distant, L.vu, L." .$prim;
- $from = "spip_documents AS D LEFT JOIN $table AS L ON L.id_document=D.id_document";
+ $from = "spip_documents AS D LEFT JOIN spip_documents_liens AS L ON L.id_document=D.id_document";
$where = "L.$prim=$doc AND D.mode='document' AND D.extension $img IN ('gif', 'jpg', 'png')";
$order = "0+D.titre, D.date";
$docs = rows_as_array($select, $from, $where, '', $order);
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index 1d557b240d..2fef9f3adc 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -239,7 +239,7 @@ function afficher_documents_colonne($id, $type="article",$script=NULL) {
. '
';
//// Documents associes
- $res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_".$type."s AS T ON T.id_document=D.id_document", "T.id_".$type."=" .sql_quote($id) . " AND D.mode='document'", "", "D.id_document");
+ $res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_".$type."=" .sql_quote($id) . " AND D.mode='document'", "", "D.id_document");
$documents_lies = array();
@@ -247,7 +247,7 @@ function afficher_documents_colonne($id, $type="article",$script=NULL) {
$documents_lies[]= $row['id_document'];
//// Images sans documents
- $res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_".$type."s AS T ON T.id_document=D.id_document", "T.id_".$type."=" .sql_quote($id) . " AND D.mode='image'", "", "D.id_document");
+ $res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_".$type."=" .sql_quote($id) . " AND D.mode='image'", "", "D.id_document");
$ret .= "\n";
@@ -331,7 +331,7 @@ function est_inclus($id_document) {
function afficher_case_document($id_document, $id, $script, $type, $deplier=false) {
global $spip_lang_right;
- $table = 'spip_documents_' . $type . 's';
+ $table = 'spip_documents_liens';
$prim = id_table_objet($table);
if (!$prim) return '';
$prim = 'id_' . $type;
@@ -486,27 +486,21 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
function lister_les_documents_orphelins() {
$s = sql_select("d.id_document, d.id_vignette",
"spip_documents AS d
- LEFT JOIN spip_documents_articles AS a
- ON d.id_document=a.id_document
- LEFT JOIN spip_documents_breves AS b
- ON d.id_document=b.id_document
- LEFT JOIN spip_documents_rubriques AS r
- ON d.id_document=r.id_document
- LEFT JOIN spip_documents_forum AS f
- ON d.id_document=f.id_document
+ LEFT JOIN spip_documents_liens AS l
+ ON d.id_document=l.id_document
LEFT JOIN spip_articles AS aa
- ON aa.id_article=a.id_article
+ ON aa.id_article=l.id_article
LEFT JOIN spip_breves AS bb
- ON bb.id_breve=b.id_breve
+ ON bb.id_breve=l.id_breve
LEFT JOIN spip_rubriques AS rr
- ON rr.id_rubrique=r.id_rubrique
+ ON rr.id_rubrique=l.id_rubrique
LEFT JOIN spip_forum AS ff
- ON ff.id_forum=f.id_forum
+ ON ff.id_forum=l.id_forum
",
- "(a.id_article IS NULL OR aa.id_article IS NULL)
- AND (b.id_breve IS NULL OR bb.id_breve IS NULL)
- AND (r.id_rubrique IS NULL OR rr.id_rubrique IS NULL)
- AND (f.id_forum IS NULL OR ff.id_forum IS NULL)
+ "(aa.id_article IS NULL)
+ AND (bb.id_breve IS NULL)
+ AND (rr.id_rubrique IS NULL)
+ AND (ff.id_forum IS NULL)
");
$orphelins = array();
@@ -558,9 +552,7 @@ function supprimer_documents($liste = array()) {
// Supprimer les entrees dans spip_documents et associees
sql_delete('spip_documents', $in);
- sql_delete('spip_documents_articles', $in);
- sql_delete('spip_documents_rubriques', $in);
- sql_delete('spip_documents_breves', $in);
+ sql_delete('spip_documents_liens', $in);
}
?>
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index c2d6e6c9f3..e31107e98e 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -1989,7 +1989,7 @@ function match($texte, $expression, $modif="UimsS") {
}
// filtre replace pour faire des operations avec expression reguliere
-// [(#TEXTE|replace{^ceci$,cela,Uims})]
+// [(#TEXTE|replace{^ceci$,cela,UimsS})]
// http://doc.spip.org/@replace
function replace($texte, $expression, $replace='', $modif="UimsS") {
$expression=str_replace("\/","/", $expression);
diff --git a/ecrire/inc/import_insere.php b/ecrire/inc/import_insere.php
index eaf73e761f..182f0b5353 100644
--- a/ecrire/inc/import_insere.php
+++ b/ecrire/inc/import_insere.php
@@ -73,8 +73,10 @@ function insere_2_init($request) {
$t[]= 'spip_mots_syndic';
$t[]= 'spip_mots_forum';
$t[]= 'spip_mots_documents';
- $t[]= 'spip_documents_articles';
+ $t[]= 'spip_documents_articles'; # spip_documents_liens ??
$t[]= 'spip_documents_rubriques';
+ ## il en manque ici (spip_documents_breves etc)
+ $t[]= 'spip_documents_liens';
return $t;
}
diff --git a/ecrire/inc/legender.php b/ecrire/inc/legender.php
index 941a97d5e2..eeb85c4e07 100644
--- a/ecrire/inc/legender.php
+++ b/ecrire/inc/legender.php
@@ -24,13 +24,6 @@ include_spip('inc/date');
// http://doc.spip.org/@inc_legender_dist
function inc_legender_dist($id_document, $document, $script, $type, $id, $ancre, $deplier=false) {
- $table = 'spip_documents_' . $type . 's';
- if (!id_table_objet($table)) {
- spip_log("legender: $type table inconnue");
- $type = 'article';
- $table = 'spip_documents_' . $type . 's';
- }
- $prim = 'id_' . $type;
// premier appel
if ($document) {
$flag = $deplier;
@@ -39,7 +32,7 @@ function inc_legender_dist($id_document, $document, $script, $type, $id, $ancre,
if ($id_document) {
$document = sql_fetsel("*", "spip_documents", "id_document = " . intval($id_document));
- $document['vu'] = sql_getfetsel("vu", $table, "$prim=" . intval($id) ." AND id_document=".intval($id_document));
+ $document['vu'] = sql_getfetsel("vu", 'spip_documents_liens', "id_$type=" . intval($id) ." AND id_document=".intval($id_document));
if (!$document['vu']) $document['vu'] = 'non';
$flag = 'ajax';
diff --git a/ecrire/inc/modifier.php b/ecrire/inc/modifier.php
index 5e5dd0f16f..aa32cdc346 100644
--- a/ecrire/inc/modifier.php
+++ b/ecrire/inc/modifier.php
@@ -128,7 +128,7 @@ function modifier_contenu($type, $id, $options, $c=false, $serveur='') {
// marquer les documents vus dans le texte si il y a lieu
include_spip('base/auxiliaires');
- if (isset($GLOBALS['tables_auxiliaires']["spip_documents_$table_objet"]["field"]["vu"]))
+ if (isset($GLOBALS['tables_auxiliaires']["spip_documents_liens"]["field"]["vu"]))
marquer_doublons_documents($champs,$id,$id_table_objet,$table_objet,$spip_table_objet, $desc, $serveur);
// Notifications, gestion des revisions...
@@ -177,14 +177,14 @@ function marquer_doublons_documents($champs,$id,$id_table_objet,$table_objet,$sp
include_spip('base/abstract_sql');
$GLOBALS['doublons_documents_inclus'] = array();
traiter_modeles($champs['chapo'].$champs['texte'],true); // detecter les doublons
- sql_updateq("spip_documents_$table_objet", array("vu" => 'non'), "$id_table_objet=$id");
+ sql_updateq("spip_documents_liens", array("vu" => 'non'), "$id_table_objet=$id");
if (count($GLOBALS['doublons_documents_inclus'])){
// on repasse par une requete sur spip_documents pour verifier que les documents existent bien !
$in_liste = sql_in('id_document',
$GLOBALS['doublons_documents_inclus']);
$res = sql_select("id_document", "spip_documents", $in_liste);
while ($row = sql_fetch($res)) {
- sql_updateq("spip_documents_$table_objet", array("vu" => 'oui'), "$id_table_objet=$id AND id_document=" . $row['id_document']);
+ sql_updateq("spip_documents_liens", array("vu" => 'oui'), "$id_table_objet=$id AND id_document=" . $row['id_document']);
}
}
}
diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php
index 35eeb50e4e..9e6e3a51cc 100644
--- a/ecrire/inc/rubriques.php
+++ b/ecrire/inc/rubriques.php
@@ -88,7 +88,7 @@ function depublier_branche_rubrique_if($id_rubrique)
if (sql_countsel("spip_rubriques", "id_parent=$id_pred AND statut='publie'"))
return $id_pred != $id_rubrique;;
- if (sql_countsel("spip_documents_rubriques", "id_rubrique=$id_pred"))
+ if (sql_countsel("spip_documents_liens", "id_rubrique=$id_pred"))
return $id_pred != $id_rubrique;;
sql_updateq("spip_rubriques", array("statut" => '0'), "id_rubrique=$id_pred");
@@ -158,7 +158,7 @@ function calculer_rubriques_publiees() {
sql_updateq('spip_rubriques', array('statut_tmp'=>'publie', 'date_tmp'=>$row['date_h']),"id_rubrique=".$row['id']);
// Publier et dater les rubriques qui ont un *document* publie
- $r = sql_select("rub.id_rubrique AS id, max(fille.date) AS date_h", "spip_rubriques AS rub, spip_documents AS fille, spip_documents_rubriques AS lien", "rub.id_rubrique = lien.id_rubrique AND lien.id_document=fille.id_document AND rub.date_tmp <= fille.date AND fille.mode='document' $postdates ", "rub.id_rubrique");
+ $r = sql_select("rub.id_rubrique AS id, max(fille.date) AS date_h", "spip_rubriques AS rub, spip_documents AS fille, spip_documents_liens AS lien", "rub.id_rubrique = lien.id_rubrique AND lien.id_document=fille.id_document AND rub.date_tmp <= fille.date AND fille.mode='document' $postdates ", "rub.id_rubrique");
while ($row = sql_fetch($r))
sql_updateq('spip_rubriques', array('statut_tmp'=>'publie', 'date_tmp'=>$row['date_h']),"id_rubrique=".$row['id']);
diff --git a/ecrire/inc/tourner.php b/ecrire/inc/tourner.php
index b55eb7545a..3338065ebb 100644
--- a/ecrire/inc/tourner.php
+++ b/ecrire/inc/tourner.php
@@ -26,15 +26,9 @@ function inc_tourner_dist($id_document, $document, $script, $flag, $type)
$document = sql_fetsel("*", "spip_documents", "id_document = " . intval($id_document));
}
- $table = 'spip_documents_' . $type . 's';
- if (!id_table_objet($table)) {
- spip_log("tourner: $type table inconnue");
- $type = 'article';
- $table = 'spip_documents_' . $type . 's';
- }
$prim = 'id_' . $type;
// si pas de doc le hash sera inutilisable
- $id = intval(sql_getfetsel($prim, $table, "id_document = " . intval($id_document)));
+ $id = intval(sql_getfetsel($prim, 'spip_documents_liens', "id_document = " . intval($id_document)));
$titre = $document['titre'];
$id_vignette = $document['id_vignette'];
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index bebbcf0ad6..c4dfe4dd4a 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -313,9 +313,9 @@ $liste_des_authentifications = array(
// version des signatures de fonctions PHP
// (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes)
-$spip_version_code = 11904;
+$spip_version_code = 11911;
// version de la base SQL (= numero SVN de sa derniere modif)
-$spip_version = 11904;
+$spip_version = 11911;
// version de l'interface a la base
$spip_sql_version = 1;
diff --git a/ecrire/maj/svn10000.php b/ecrire/maj/svn10000.php
index 865dfb6e7f..2fa7187a35 100644
--- a/ecrire/maj/svn10000.php
+++ b/ecrire/maj/svn10000.php
@@ -107,5 +107,30 @@ $GLOBALS['maj'][11790] = array(array('maj_11790'));
$GLOBALS['maj'][11794] = array(); // ajout de spip_documents_forum
+// Reunir en une seule table les liens de documents
+// spip_documents_articles et spip_documents_forum
+function maj_11911 () {
+ foreach (array('article', 'breve', 'rubrique', 'auteur', 'forum') as $l) {
+ if ($s = sql_select('*', 'spip_documents_'.$l.'s')
+ OR $s = sql_select('*', 'spip_documents_'.$l)) {
+ $tampon = array();
+ while ($t = sql_fetch($s)) {
+ $keys = '('.join(',',array_keys($t)).')';
+ $tampon[] = '('.join(',', array_map('sql_quote', $t)).')';
+ if (count($tampon)>100) {
+ sql_insert('spip_documents_liens', $keys, join(',', $tampon));
+ $tampon = array();
+ }
+ }
+ if (count($tampon)) {
+ sql_insert('spip_documents_liens', $keys, join(',', $tampon));
+ }
+ }
+ }
+}
+$GLOBALS['maj'][11911] = array(array('maj_11911'));
+
+// penser a ajouter ici destruction des tables spip_documents_articles etc
+// une fois qu'on aura valide la procedure d'upgrade ci-dessus
?>
diff --git a/ecrire/public/boucles.php b/ecrire/public/boucles.php
index b95838233d..37896f01d9 100644
--- a/ecrire/public/boucles.php
+++ b/ecrire/public/boucles.php
@@ -183,18 +183,14 @@ function boucle_DOCUMENTS_dist($id_boucle, &$boucles) {
# a refaire plus proprement
## la boucle par defaut ignore les documents de forum
- $boucle->from[$id_table] = "spip_documents LEFT JOIN spip_documents_articles AS a
- ON $id_table.id_document=a.id_document
+ $boucle->from[$id_table] = "spip_documents LEFT JOIN spip_documents_liens AS l
+ ON $id_table.id_document=l.id_document
LEFT JOIN spip_articles AS aa
- ON a.id_article=aa.id_article
- LEFT JOIN spip_documents_breves AS b
- ON $id_table.id_document=b.id_document
+ ON l.id_article=aa.id_article
LEFT JOIN spip_breves AS bb
- ON b.id_breve=bb.id_breve
- LEFT JOIN spip_documents_rubriques AS r
- ON $id_table.id_document=r.id_rubrique
+ ON l.id_breve=bb.id_breve
LEFT JOIN spip_rubriques AS rr
- ON r.id_rubrique=rr.id_rubrique
+ ON l.id_rubrique=rr.id_rubrique
";
if ($GLOBALS['var_preview']) {
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index ae8e753ca9..2b7cca6b13 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -227,7 +227,7 @@ global $tables_jointures;
$tables_jointures['spip_articles'][]= 'mots_articles';
$tables_jointures['spip_articles']['id_auteur']= 'auteurs_articles';
-$tables_jointures['spip_articles'][]= 'documents_articles';
+$tables_jointures['spip_articles'][]= 'documents_liens';
$tables_jointures['spip_articles'][]= 'mots';
$tables_jointures['spip_articles'][]= 'signatures';
$tables_jointures['spip_articles'][]= 'petitions';
@@ -235,23 +235,20 @@ $tables_jointures['spip_articles'][]= 'petitions';
$tables_jointures['spip_auteurs'][]= 'auteurs_articles';
$tables_jointures['spip_breves'][]= 'mots_breves';
-$tables_jointures['spip_breves'][]= 'documents_breves';
+$tables_jointures['spip_breves'][]= 'documents_liens';
$tables_jointures['spip_breves'][]= 'mots';
-$tables_jointures['spip_documents'][]= 'documents_articles';
-$tables_jointures['spip_documents'][]= 'documents_rubriques';
-$tables_jointures['spip_documents'][]= 'documents_breves';
-$tables_jointures['spip_documents'][]= 'documents_forum';
+$tables_jointures['spip_documents'][]= 'documents_liens';
$tables_jointures['spip_documents'][]= 'mots_documents';
$tables_jointures['spip_documents'][]= 'types_documents';
$tables_jointures['spip_documents'][]= 'mots';
$tables_jointures['spip_forum'][]= 'mots_forum';
$tables_jointures['spip_forum'][]= 'mots';
-$tables_jointures['spip_forum'][]= 'documents_forum';
+$tables_jointures['spip_forum'][]= 'documents_liens';
$tables_jointures['spip_rubriques'][]= 'mots_rubriques';
-$tables_jointures['spip_rubriques'][]= 'documents_rubriques';
+$tables_jointures['spip_rubriques'][]= 'documents_liens';
$tables_jointures['spip_rubriques'][]= 'mots';
$tables_jointures['spip_syndic'][]= 'mots_syndic';