From 8cbdc6172d33c296a0cd3b087db67329b2c03fb8 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Fri, 21 Jan 2011 11:19:31 +0000
Subject: [PATCH] supprimer les documents du core. Preliminaires : il reste du
 code intrique et la gestion des logos qui est batarde. En l'etat le core ne
 fonctionne pas encore sans l'extension medias

---
 ecrire/action/editer_article.php |  12 +-
 ecrire/action/supprimer.php      |   1 -
 ecrire/balise/url_.php           |   1 +
 ecrire/base/auxiliaires.php      |  14 -
 ecrire/base/connect_sql.php      |  20 +-
 ecrire/base/create.php           |  38 --
 ecrire/base/serial.php           |  40 ---
 ecrire/base/upgrade.php          |   5 +-
 ecrire/core.xml                  |   1 +
 ecrire/genie/optimiser.php       |  11 -
 ecrire/inc/autoriser.php         | 106 +-----
 ecrire/inc/config.php            |   3 -
 ecrire/inc/distant.php           |   2 +-
 ecrire/inc/documents.php         | 588 ++++++-------------------------
 ecrire/inc_version.php           |   2 +-
 ecrire/install/etape_3.php       |   1 -
 ecrire/public.php                |  11 +-
 ecrire/public/boucles.php        |  62 ----
 ecrire/public/interfaces.php     |  19 -
 19 files changed, 139 insertions(+), 798 deletions(-)

diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php
index 8bd60caf89..d9decea0f5 100644
--- a/ecrire/action/editer_article.php
+++ b/ecrire/action/editer_article.php
@@ -24,19 +24,11 @@ function action_editer_article_dist($arg=null) {
 	// mais on verifie qu'on a toutes les donnees qu'il faut.
 	if (!$id_article = intval($arg)) {
 		$id_parent = _request('id_parent');
-		$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
-		if (!($id_parent AND $id_auteur)) {
+		if (!($id_parent AND $GLOBALS['visiteur_session']['id_auteur'])) {
 			include_spip('inc/headers');
 			redirige_url_ecrire();
 		}
-		if (($id_article = insert_article($id_parent)) > 0)
-		
-		# cf. GROS HACK ecrire/inc/getdocument
-		# rattrapper les documents associes a cet article nouveau
-		# ils ont un id = 0-id_auteur
-
-			sql_updateq("spip_documents_liens", array("id_objet" => $id_article), array("id_objet = ".(0-$id_auteur),"objet='article'"));
-	} 
+	}
 
 	// Enregistre l'envoi dans la BD
 	if ($id_article > 0) $err = articles_set($id_article);
diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php
index fbb5db58d1..1364b87bc6 100644
--- a/ecrire/action/supprimer.php
+++ b/ecrire/action/supprimer.php
@@ -13,7 +13,6 @@
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
 include_spip('inc/charsets');	# pour le nom de fichier
-include_spip('inc/documents');
 
 // Effacer une rubrique
 // http://doc.spip.org/@action_supprimer_dist
diff --git a/ecrire/balise/url_.php b/ecrire/balise/url_.php
index 553efd35be..307416f0cc 100644
--- a/ecrire/balise/url_.php
+++ b/ecrire/balise/url_.php
@@ -46,6 +46,7 @@ function generer_generer_url_arg($type, $p, $_id)
 			return NULL;
 		}
 		$s = _q($s);
+		# exception des urls de documents sur un serveur distant...
 		if ($type == 'document') {
 			return 
 			"quete_meta('adresse_site', $s) . '/' .\n\t" .
diff --git a/ecrire/base/auxiliaires.php b/ecrire/base/auxiliaires.php
index c86926f6f1..65b80ea733 100644
--- a/ecrire/base/auxiliaires.php
+++ b/ecrire/base/auxiliaires.php
@@ -35,16 +35,6 @@ $spip_auteurs_liens_key = array(
 		"PRIMARY KEY"		=> "id_auteur,id_objet,objet",
 		"KEY id_auteur"	=> "id_auteur");
 
-$spip_documents_liens = array(
-		"id_document"	=> "bigint(21) DEFAULT '0' NOT NULL",
-		"id_objet"	=> "bigint(21) DEFAULT '0' NOT NULL",
-		"objet"	=> "VARCHAR (25) DEFAULT '' NOT NULL",
-		"vu"	=> "ENUM('non', 'oui') DEFAULT 'non' NOT NULL");
-
-$spip_documents_liens_key = array(
-		"PRIMARY KEY"		=> "id_document,id_objet,objet",
-		"KEY id_document"	=> "id_document");
-
 $spip_meta = array(
 		"nom"	=> "VARCHAR (255) NOT NULL",
 		"valeur"	=> "text DEFAULT ''",
@@ -58,10 +48,6 @@ $tables_auxiliaires['spip_auteurs_liens'] = array(
 	'field' => &$spip_auteurs_liens,
 	'key' => &$spip_auteurs_liens_key);
 
-$tables_auxiliaires['spip_documents_liens'] = array(
-	'field' => &$spip_documents_liens,
-	'key' => &$spip_documents_liens_key);
-
 $tables_auxiliaires['spip_meta'] = array(
 	'field' => &$spip_meta,
 	'key' => &$spip_meta_key);
diff --git a/ecrire/base/connect_sql.php b/ecrire/base/connect_sql.php
index 7fd0bc11a9..c5fe694b0a 100644
--- a/ecrire/base/connect_sql.php
+++ b/ecrire/base/connect_sql.php
@@ -243,11 +243,11 @@ function table_objet($type,$serveur='') {
 		// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
 		$surnoms = pipeline('declarer_tables_objets_surnoms',
 			array(
-				'doc' => 'documents', # pour les modeles
+				# pour les modeles
+				# a enlever ?
+				'doc' => 'documents',
 				'img' => 'documents',
 				'emb' => 'documents',
-				'type_document' => 'types_documents', # hum
-				'extension' => 'types_documents' # hum
 			));
 	}
 	if (isset($surnoms[$type]))
@@ -278,15 +278,11 @@ function table_objet_sql($type,$serveur='') {
 // http://doc.spip.org/@id_table_objet
 function id_table_objet($type,$serveur='') {
 	$type = objet_type($type,$serveur);
-	if ($type == 'type')
-		return 'extension';
-	else {
-		if (!$type) return;
-		$t = table_objet($type);
-		$trouver_table = charger_fonction('trouver_table', 'base');
-		$desc = $trouver_table($t,$serveur);
-		return @$desc['key']["PRIMARY KEY"];
-	}
+	if (!$type) return;
+	$t = table_objet($type);
+	$trouver_table = charger_fonction('trouver_table', 'base');
+	$desc = $trouver_table($t,$serveur);
+	return @$desc['key']["PRIMARY KEY"];
 }
 
 // http://doc.spip.org/@objet_type
diff --git a/ecrire/base/create.php b/ecrire/base/create.php
index ee5fe7eec6..c0dafc4736 100644
--- a/ecrire/base/create.php
+++ b/ecrire/base/create.php
@@ -134,42 +134,4 @@ function maj_tables($upgrade_tables=array(),$serveur=''){
 		     $serveur);
 }
 
-/**
- * Creer la table des types de document
- *
- * http://doc.spip.org/@creer_base_types_doc
- *
- * @param string $serveur
- * @return void
- */
-function creer_base_types_doc($serveur='') {
-	global $tables_images, $tables_sequences, $tables_documents, $tables_mime;
-
-	foreach ($tables_mime as $extension => $type_mime) {
-		if (isset($tables_images[$extension])) {
-			$titre = $tables_images[$extension];
-			$inclus='image';
-		}
-		else if (isset($tables_sequences[$extension])) {
-			$titre = $tables_sequences[$extension];
-			$inclus='embed';
-		}
-		else {
-			$inclus='non';
-			if (isset($tables_documents[$extension]))
-				$titre = $tables_documents[$extension];
-			else
-				$titre = '';
-		}
-		// Init ou Re-init ==> replace pas insert
-		sql_replace('spip_types_documents',
-			array('mime_type' => $type_mime,
-				'titre' => $titre,
-				'inclus' => $inclus,
-				'extension' => $extension,
-				'upload' => 'oui'
-			),
-			'', $serveur);
-	}
-}
 ?>
diff --git a/ecrire/base/serial.php b/ecrire/base/serial.php
index 8bd879af02..7ca26266d3 100644
--- a/ecrire/base/serial.php
+++ b/ecrire/base/serial.php
@@ -118,42 +118,6 @@ $spip_rubriques_key = array(
 #		"KEY url_propre"	=> "url_propre"
 );
 
-$spip_documents = array(
-		"id_document"	=> "bigint(21) NOT NULL",
-		"id_vignette"	=> "bigint(21) DEFAULT '0' NOT NULL",
-		"extension"	=> "VARCHAR(10) DEFAULT '' NOT NULL",
-		"titre"	=> "text DEFAULT '' NOT NULL",
-		"date"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
-		"descriptif"	=> "text DEFAULT '' NOT NULL",
-		"fichier"	=> "varchar(255) DEFAULT '' NOT NULL",
-		"taille"	=> "integer",
-		"largeur"	=> "integer",
-		"hauteur"	=> "integer",
-		"mode"	=> "ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL",
-		"distant"	=> "VARCHAR(3) DEFAULT 'non'",
-		"maj"	=> "TIMESTAMP");
-
-$spip_documents_key = array(
-		"PRIMARY KEY"	=> "id_document",
-		"KEY id_vignette"	=> "id_vignette",
-		"KEY mode"	=> "mode",
-		"KEY extension"	=> "extension");
-$spip_documents_join = array(
-		"id_document"=>"id_document",
-		"extension"=>"extension");
-
-$spip_types_documents = array(
-		"extension"	=> "varchar(10) DEFAULT '' NOT NULL",
-		"titre"	=> "text DEFAULT '' NOT NULL",
-		"descriptif"	=> "text DEFAULT '' NOT NULL",
-		"mime_type"	=> "varchar(100) DEFAULT '' NOT NULL",
-		"inclus"	=> "ENUM('non', 'image', 'embed') DEFAULT 'non'  NOT NULL",
-		"upload"	=> "ENUM('oui', 'non') DEFAULT 'oui'  NOT NULL",
-		"maj"	=> "TIMESTAMP");
-
-$spip_types_documents_key = array(
-		"PRIMARY KEY"	=> "extension",
-		"KEY inclus"	=> "inclus");
 
 /// Attention: mes_fonctions peut avoir deja defini cette variable
 /// il faut donc rajouter, mais pas reinitialiser
@@ -164,10 +128,6 @@ $tables_principales['spip_auteurs']  =
 	array('field' => &$spip_auteurs, 'key' => &$spip_auteurs_key,'join' => &$spip_auteurs_join);
 $tables_principales['spip_rubriques'] =
 	array('field' => &$spip_rubriques, 'key' => &$spip_rubriques_key);
-$tables_principales['spip_documents'] =
-	array('field' => &$spip_documents,  'key' => &$spip_documents_key, 'join' => &$spip_documents_join);
-$tables_principales['spip_types_documents']	=
-	array('field' => &$spip_types_documents, 'key' => &$spip_types_documents_key);
 
 	$tables_principales = pipeline('declarer_tables_principales',$tables_principales);
 }
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index 7abefd6580..ec62bae368 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -192,8 +192,9 @@ function serie_alter($serie, $q = array(), $meta='', $table='meta') {
 
 // http://doc.spip.org/@upgrade_types_documents
 function upgrade_types_documents() {
-	include_spip('base/create');
-	creer_base_types_doc();
+	if (include_spip('base/medias')
+	  AND function_exists('creer_base_types_doc'));
+		creer_base_types_doc();
 }
 
 // http://doc.spip.org/@upgrade_test
diff --git a/ecrire/core.xml b/ecrire/core.xml
index 82592b7db2..039226cc17 100644
--- a/ecrire/core.xml
+++ b/ecrire/core.xml
@@ -241,6 +241,7 @@
 	<pipeline><nom>declarer_tables_objets_surnoms</nom><action></action></pipeline>
 	<pipeline><nom>declarer_type_surnoms</nom><action></action></pipeline>
 	<pipeline><nom>declarer_url_objets</nom><action></action></pipeline>
+	<pipeline><nom>detecter_fond_par_defaut</nom><action></action></pipeline>
 	<pipeline><nom>definir_session</nom><action></action></pipeline>
 	<pipeline><nom>delete_tables</nom><action></action></pipeline>
 	<pipeline><nom>editer_contenu_objet</nom><action></action></pipeline>
diff --git a/ecrire/genie/optimiser.php b/ecrire/genie/optimiser.php
index e1cd373448..8c65b3ab42 100644
--- a/ecrire/genie/optimiser.php
+++ b/ecrire/genie/optimiser.php
@@ -161,17 +161,6 @@ function optimiser_base_disparus($attente = 86400) {
 	sql_delete("spip_auteurs", "statut='nouveau' AND maj < ". sql_quote(date('Y-m-d', time()-45*24*3600)));
 
 
-	//
-	// Documents
-	//
-
-	include_spip('action/editer_liens');
-	// optimiser les liens de tous les documents vers des objets effaces
-	$n+= objet_optimiser_liens(array('document'=>'*'),'*');
-	
-
-	// on ne nettoie volontairement pas automatiquement les documents orphelins
-	
 	$n = pipeline('optimiser_base_disparus', array(
 			'args'=>array(
 				'attente' => $attente,
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index bf8bb24467..bbec4ac6b5 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -228,65 +228,7 @@ function autoriser_rubrique_modifier_dist($faire, $type, $id, $qui, $opt) {
 		autoriser('publierdans', 'rubrique', $id, $qui, $opt);
 }
 
-// On ne peut joindre un document qu'a un article qu'on a le droit d'editer
-// mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond
-// au hack id_article = 0-id_auteur
-// http://doc.spip.org/@autoriser_joindredocument_dist
-function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){
-	return
-		autoriser('modifier', $type, $id, $qui, $opt)
-		OR (
-			$type == 'article'
-			AND $id<0
-			AND abs($id) == $qui['id_auteur']
-			AND autoriser('ecrire', $type, $id, $qui, $opt)
-		);
-}
-
-// On ne peut modifier un document que s'il est lie a un objet qu'on a le droit
-// d'editer *et* qu'il n'est pas lie a un objet qu'on n'a pas le droit d'editer
-// http://doc.spip.org/@autoriser_document_modifier_dist
-function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){
-	static $m = array();
-
-	if ($qui['statut'] == '0minirezo'
-	AND !$qui['restreint'])
-		return true;
-
-	if (!isset($m[$id])) {
-		$vu = false;
-		$interdit = false;
 
-		$s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".sql_quote($id));
-		while ($t = sql_fetch($s)) {
-			if (autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {
-				$vu = true;
-			}
-			else {
-				$interdit = true;
-				break;
-			}
-		}
-		$m[$id] = ($vu && !$interdit);
-	}
-
-	return $m[$id];
-}
-
-
-// On ne peut supprimer un document que s'il n'est lie a aucun objet
-// c'est autorise pour tout auteur ayant acces a ecrire
-// http://doc.spip.org/@autoriser_document_modifier_dist
-function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt){
-	if (!intval($id)
-		OR !$qui['id_auteur']
-		OR !autoriser('ecrire','','',$qui))
-		return false;
-	if (sql_countsel('spip_documents_liens', 'id_document='.intval($id)))
-		return false;
-
-	return true;
-}
 
 // Autoriser a modifier l'article $id
 // = publierdans rubrique parente
@@ -310,8 +252,11 @@ function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt) {
 // Voir un objet
 // http://doc.spip.org/@autoriser_voir_dist
 function autoriser_voir_dist($faire, $type, $id, $qui, $opt) {
-	if ($type == 'document')
-		return autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
+	# securite, mais on aurait pas du arriver ici !
+	if (function_exists($f='autoriser_'.$type.'_voir') OR function_exists($f='autoriser_'.$type.'_voir_dist')){
+		return $f($faire, $type, $id, $qui, $opt);
+	}
+
 	if ($qui['statut'] == '0minirezo') return true;
 	if ($type == 'auteur') return false;
 	if ($type == 'groupemots') {
@@ -460,39 +405,6 @@ function autoriser_chargerftp_dist($faire, $type, $id, $qui, $opt) {
 }
 
 
-//
-// Peut-on voir un document dans _DIR_IMG ?
-// Tout le monde (y compris les visiteurs non enregistres), puisque par
-// defaut ce repertoire n'est pas protege ; si une extension comme
-// acces_restreint a positionne creer_htaccess, on regarde
-// si le document est lie a un element publie
-// (TODO: a revoir car c'est dommage de sortir de l'API true/false)
-//
-// http://doc.spip.org/@autoriser_document_voir_dist
-function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
-
-	if (!isset($GLOBALS['meta']["creer_htaccess"])
-	OR $GLOBALS['meta']["creer_htaccess"] != 'oui')
-		return true;
-
-	if ((!is_numeric($id)) OR $id < 0) return false;
-
-	if (in_array($qui['statut'], array('0minirezo', '1comite')))
-		return 'htaccess';
-
-	if ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document='.intval($id)))
-	foreach ($liens as $l) {
-		$table_sql = table_objet_sql($l['objet']);
-		$id_table = id_table_objet($l['objet']);
-		if (sql_countsel($table_sql, "$id_table = ". intval($l['id_objet'])
-		. (in_array($l['objet'], array('article', 'rubrique', 'breve'))
-			? " AND statut = 'publie'"
-			: '')
-		) > 0)
-			return 'htaccess';
-	}
-	return false;
-}
 
 // Qui peut activer le debugueur ?
 // http://doc.spip.org/@autoriser_debug_dist
@@ -595,12 +507,4 @@ function autoriser_base_reparer_dist($faire, $type, $id, $qui, $opts) {
 
 	return true;
 }
-
-/**
- * Auto-association de documents a du contenu editorial qui le reference
- * par defaut true pour tous les objets
- */
-function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) {
-	return true;
-}
 ?>
diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php
index 480e083c67..de6ddd5851 100644
--- a/ecrire/inc/config.php
+++ b/ecrire/inc/config.php
@@ -387,9 +387,6 @@ function liste_metas()
 		'jours_neuf' => '',
 		'quoi_de_neuf' => 'non',
 
-		'documents_article' => 'non',
-		'documents_rubrique' => 'non',
-		'documents_date' => 'non',
 		'syndication_integrale' => 'oui',
 		'charset' => _DEFAULT_CHARSET,
 		'dir_img' => substr(_DIR_IMG,strlen(_DIR_RACINE)),
diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index d89b1189aa..c53c5b7cf1 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -346,7 +346,7 @@ function recuperer_entetes($f, $date_verif='')
 // http://doc.spip.org/@nom_fichier_copie_locale
 function nom_fichier_copie_locale($source, $extension) {
 
-	include_spip('inc/getdocument');
+	include_spip('inc/documents');
 	$d = creer_repertoire_documents('distant'); # IMG/distant/
 	$d = sous_repertoire($d, $extension); # IMG/distant/pdf/
 
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index a0ee9ba917..f9da217935 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -12,12 +12,15 @@
 
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
-include_spip('inc/actions'); // *action_auteur et determine_upload
-include_spip('inc/date');
-
-// donne le chemin du fichier relatif a _DIR_IMG
-// pour stockage 'tel quel' dans la base de donnees
-// http://doc.spip.org/@set_spip_doc
+/**
+ * donne le chemin du fichier relatif a _DIR_IMG
+ * pour stockage 'tel quel' dans la base de donnees
+ *
+ * http://doc.spip.org/@set_spip_doc
+ *
+ * @param string $fichier
+ * @return string
+ */
 function set_spip_doc($fichier) {
 	if (strpos($fichier, _DIR_IMG) === 0)
 		return substr($fichier, strlen(_DIR_IMG));
@@ -25,8 +28,14 @@ function set_spip_doc($fichier) {
 		return $fichier; // ex: fichier distant
 }
 
-// donne le chemin complet du fichier
-// http://doc.spip.org/@get_spip_doc
+/**
+ * donne le chemin complet du fichier
+ *
+ * http://doc.spip.org/@get_spip_doc
+ *
+ * @param string $fichier
+ * @return bool|string
+ */
 function get_spip_doc($fichier) {
 	// fichier distant
 	if (preg_match(',^\w+://,', $fichier))
@@ -44,486 +53,121 @@ function get_spip_doc($fichier) {
 	return $fichier;
 }
 
-// Constante indiquant le charset probable des documents non utf-8 joints
-
-if (!defined('CHARSET_JOINT')) define('CHARSET_JOINT', 'iso-8859-1');
+/**
+ * Creer IMG/pdf/
+ *
+ * http://doc.spip.org/@creer_repertoire_documents
+ *
+ * @param  $ext
+ * @return string
+ */
+function creer_repertoire_documents($ext) {
+	$rep = sous_repertoire(_DIR_IMG, $ext);
 
-// Filtre pour #FICHIER permettant d'incruster le contenu d'un document
-// Si 2e arg fourni, conversion dans le charset du site si possible
-
-// http://doc.spip.org/@contenu_document
-function contenu_document($arg, $charset='')
-{
-	if (is_numeric($arg)) {
-		$r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($arg));
-		if (!$r) return '';
-		$f = $r['fichier'];
-		$f = ($r['distant'] =='oui') ? _DIR_RACINE . copie_locale($f) : get_spip_doc($f);
+	if (!$ext OR !$rep) {
+		spip_log("creer_repertoire_documents '$rep' interdit");
+		exit;
 	}
-	else {
-		if (!@file_exists($f=$arg)){
-			if (!$f = copie_locale($f))
-				return '';
-			$f = _DIR_RACINE . $f;
-		}
-	}
-
-	$r = spip_file_get_contents($f);
 
-	if ($charset) {
-		include_spip('inc/charset');
-		if ($charset !== 'auto') {
-			$r = importer_charset($r, $charset);
-		} elseif ($GLOBALS['meta']['charset'] == 'utf-8' AND !is_utf8($r))
-			$r = importer_charset($r, CHARSET_JOINT);
+	// Cette variable de configuration peut etre posee par un plugin
+	// par exemple acces_restreint
+	if ($GLOBALS['meta']["creer_htaccess"] == 'oui') {
+		include_spip('inc/acces');
+		verifier_htaccess($rep);
 	}
-	return $r;
-}
-
-// http://doc.spip.org/@generer_url_document_dist
-function generer_url_document_dist($id_document, $args='', $ancre='') {
-
-	include_spip('inc/autoriser');
-	if (!autoriser('voir', 'document', $id_document)) return '';
-
-	$r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($id_document));
-
-	if (!$r) return '';
-
-	$f = $r['fichier'];
-
-	if ($r['distant'] == 'oui') return $f;
 
-	// Si droit de voir tous les docs, pas seulement celui-ci
-	// il est inutilement couteux de rajouter une protection
-	$r = (autoriser('voir', 'document'));
-	if (($r AND $r !== 'htaccess')
-		// idem si ce doc est visible par tous
-		// ie si ca ne renvoie pas false
-		OR autoriser('voir', 'document', $id_document, array()))
-		return get_spip_doc($f);
-
-	include_spip('inc/securiser_action');
-
-	// cette action doit etre publique !
-	return generer_url_action('acceder_document',
-		$args . ($args ? "&" : '')
-			. 'arg='.$id_document
-			. ($ancre ? "&ancre=$ancre" : '')
-			. '&cle=' . calculer_cle_action($id_document.','.$f)
-			. '&file=' . rawurlencode($f)
-			,false,true);
-}
-
-// http://doc.spip.org/@document_et_vignette
-function document_et_vignette($document, $url, $portfolio=false) {
-	$image = $document['id_vignette'];
-
-	if ($image)
-		$image = sql_fetsel("*", "spip_documents", "id_document = ".$image);
-	if ($image) {
-		if (!$portfolio OR !($GLOBALS['meta']['creer_preview'] == 'oui')) {
-			$x = $image['largeur'];
-			$y = $image['hauteur'];
-		} else {
-			$x = 120;
-			$y = 110;
-		}
-		$image = get_spip_doc($image['fichier']);
-	} else {
-		if ($portfolio) {
-			$x = 110;
-			$y = 120;
-		} else 	$x = $y =-1;
-	}
-	if (!$url) $url = generer_url_document_dist($document['id_document'], 'document');
-	return vignette_automatique($image, $document, $url, $x, $y, '', "miniature_document");
+	return $rep;
 }
 
-//
-// Affiche le document avec sa vignette par defaut
-//
-// Attention : en mode 'doc', si c'est un fichier graphique on prefere
-// afficher une vue reduite, quand c'est possible (presque toujours, donc)
-// En mode 'image', l'image conserve sa taille
-//
-// A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille
-// de la vignette -> c'est a ca que sert la variable $portfolio
-// http://doc.spip.org/@vignette_automatique
-function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class='spip_logos')
-{
-	include_spip('inc/distant');
-	include_spip('inc/texte');
-	include_spip('inc/filtres_images_mini');
-	$e = $doc['extension'];
-	if (!$img) {
-		if ($img = image_du_document($doc)) {
-			if (!$x AND !$y) // eviter une double reduction
-				$img = image_reduire($img);
-		}
-		else{
-			$f = charger_fonction('vignette','inc');
-			$img = $f($e, false);
-			$size = @getimagesize($img);
-			$img = "<img src='$img' ".$size[3]." />";
-		}
-	}
-	else{
-		$size = @getimagesize($img);
-		$img = "<img src='$img' ".$size[3]." />";
-	}
-	// on appelle image_reduire independamment de la presence ou non
-	// des librairies graphiques
-	// la fonction sait se debrouiller et faire de son mieux dans tous les cas
-	if ($x OR $y) {
-		$img = image_reduire($img, $x, $y);
-	}
-	$img = inserer_attribut($img, 'alt', '');
-	$img = inserer_attribut($img, 'class', $class);
-	if ($align) $img = inserer_attribut($img, 'align', $align);
-
-	if (!$lien) return $img;
-
-	$titre = supprimer_tags(typo($doc['titre']));
-	$titre = " - " .taille_en_octets($doc['taille'])
-	  . ($titre ? " - $titre" : "");
-
-	$type = sql_fetsel('titre, mime_type','spip_types_documents', "extension = " . sql_quote($e));
-
-	$mime = $type['mime_type'];
-	$titre = attribut_html(couper($type['titre'] . $titre, 80));
-
-	return "<a href='$lien' type='$mime' title='$titre'>$img</a>";
-}
-
-// Trouve une image caracteristique d'un document.
-// Si celui-ci est une image et que les outils graphiques sont dispos,
-// retourner le document (en exploitant sa copie locale s'il est distant).
-// Autrement retourner la vignette fournie par SPIP pour ce type MIME
-// Resultat: un fichier local existant
-
-function image_du_document($document)
-{
-	$e = $document['extension'];
-	if ((strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false)
-	  AND (!test_espace_prive() OR $GLOBALS['meta']['creer_preview']=='oui')
-	  AND $document['fichier']) {
-		if ($document['distant'] == 'oui') {
-			$image = _DIR_RACINE.copie_locale($document['fichier']);
-		}
-		else
-			$image = get_spip_doc($document['fichier']);
-		if (@file_exists($image)) return $image;
-	}
-	return '';
-}
-
-//
-// Afficher un document dans la colonne de gauche
-//
-
-// http://doc.spip.org/@afficher_documents_colonne
-function afficher_documents_colonne($id, $type="article",$script=NULL) {
-	include_spip('inc/autoriser');
-
-	// il faut avoir les droits de modif sur l'article pour pouvoir uploader !
-	if (!autoriser('joindredocument',$type,$id))
-		return "";
-
-	include_spip('inc/presentation'); // pour l'aide quand on appelle afficher_documents_colonne depuis un squelette
-	// seuls cas connus : article, breve ou rubrique
-	if ($script==NULL){
-		$script = $type.'s_edit';
-		if (!test_espace_prive())
-			$script = parametre_url(self(),"show_docs",'');
-	}
-	$id_document_actif = _request('show_docs');
-
-	$joindre = charger_fonction('joindre', 'inc');
-
-	define('_INTERFACE_DOCUMENTS', true);
-	if (!_INTERFACE_DOCUMENTS
-	OR $GLOBALS['meta']["documents_$type"]=='non') {
-
-	// Ajouter nouvelle image
-	$ret = "<div id='images'>\n"
-		. $joindre(array(
-			'cadre' => 'relief',
-			'icone' => 'image-24.gif',
-			'fonction' => 'new',
-			'titre' => majuscules(_T('bouton_ajouter_image')).aide("ins_img"),
-			'script' => $script,
-			'args' => "id_$type=$id",
-			'id' => $id,
-			'intitule' => _T('info_telecharger'),
-			'mode' => 'image',
-			'type' => $type,
-			'ancre' => '',
-			'id_document' => 0,
-			'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true)
-		))
-		. '</div><br />';
-
-	if (!_INTERFACE_DOCUMENTS) {
-		//// Images sans documents
-		$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_objet=" . intval($id) . " AND T.objet=" . sql_quote($type) . " AND D.mode='image'", "", "D.id_document");
-
-		$ret .= "\n<div id='liste_images'>";
-
-		while ($doc = sql_fetch($res)) {
-			$id_document = $doc['id_document'];
-			$deplier = ($id_document_actif==$id_document);
-			$ret .= afficher_case_document($id_document, $id, $script, $type, $deplier);
-		}
-
-		$ret .= "</div><br /><br />\n";
-	}
-	}
-
-	/// Ajouter nouveau document
-	$bouton = !_INTERFACE_DOCUMENTS
-		? majuscules(_T('bouton_ajouter_document')).aide("ins_doc")
-		: (_T('bouton_ajouter_image_document')).aide("ins_doc");
-
-	$ret .= "<div id='documents'></div>\n<div id='portfolio'></div>\n";
-	if ($GLOBALS['meta']["documents_$type"]!='non') {
-		$ret .= $joindre(array(
-			'cadre' => _INTERFACE_DOCUMENTS ? 'relief' : 'enfonce',
-			'icone' => 'doc-24.gif',
-			'fonction' => 'new',
-			'titre' => $bouton,
-			'script' => $script,
-			'args' => "id_$type=$id",
-			'id' => $id,
-			'intitule' => _T('info_telecharger'),
-			'mode' => _INTERFACE_DOCUMENTS ? 'choix' : 'document',
-			'type' => $type,
-			'ancre' => '',
-			'id_document' => 0,
-			'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true)
-		));
-	}
-
-	// Afficher les documents lies
-	$ret .= "<br /><div id='liste_documents'>\n";
-
-	//// Documents associes
-	$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_objet=" . intval($id) . " AND T.objet=" . sql_quote($type)
-	. ((!_INTERFACE_DOCUMENTS)
-		? " AND D.mode='document'"
-    	: " AND D.mode IN ('image','document')"
-	), "", "D.mode, D.id_document");
-
-	while($row = sql_fetch($res))
-		$ret .= afficher_case_document($row['id_document'], $id, $script, $type, ($id_document_actif==$row['id_document']));
-
-	$ret .= "</div>";
-	if (test_espace_prive()){
-		$ret .= http_script('', "async_upload.js")
-		  . http_script('$("form.form_upload").async_upload(async_upload_article_edit)');
-	}
-
-	return $ret;
+/**
+ * Efface le repertoire de maniere recursive !
+ *
+ * http://doc.spip.org/@effacer_repertoire_temporaire
+ *
+ * @param string $nom
+ */
+function effacer_repertoire_temporaire($nom) {
+	$d = opendir($nom);
+	while (($f = readdir($d)) !== false) {
+		if (is_file("$nom/$f"))
+			spip_unlink("$nom/$f");
+		else if ($f <> '.' AND $f <> '..'
+		AND is_dir("$nom/$f"))
+			effacer_repertoire_temporaire("$nom/$f");
+	}
+	closedir($d);
+	@rmdir($nom);
 }
 
 //
-// Affiche le raccourci <doc123|left>
-// et l'insere quand on le clique
-//
-// http://doc.spip.org/@affiche_raccourci_doc
-function affiche_raccourci_doc($doc, $id, $align) {
-	static $num = 0;
-
-	if ($align) {
-		$pipe = "|$align";
-
-		if ($GLOBALS['browser_barre'])
-			$onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe&gt;', $('textarea[name=texte]')[0]);\"\ntitle=\"". str_replace('&amp;', '&', entites_html(_T('double_clic_inserer_doc')))."\"";
-	} else {
-		$align='center';
-	}
-
-	return
-	  ((++$num > 1) ? "" : http_script('',  "spip_barre.js"))
-		. "\n<div style='text-align: $align'$onclick>&lt;$doc$id$pipe&gt;</div>\n";
+/**
+ * Copier un document $source un dossier IMG/$ext/$orig.$ext
+ * en numerotant eventuellement si un du meme nom existe deja
+ *
+ * http://doc.spip.org/@copier_document
+ *
+ * @param string $ext
+ * @param string $orig
+ * @param string $source
+ * @return bool|mixed|string
+ */
+function copier_document($ext, $orig, $source) {
+
+	$orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
+	$dir = creer_repertoire_documents($ext);
+	$dest = preg_replace("/[^._=-\w\d]+/", "_",
+			translitteration(preg_replace("/\.([^.]+)$/", "",
+						      preg_replace("/<[^>]*>/", '', basename($orig)))));
+
+	// ne pas accepter de noms de la forme -r90.jpg qui sont reserves
+	// pour les images transformees par rotation (action/documenter)
+	$dest = preg_replace(',-r(90|180|270)$,', '', $dest);
+
+	// Si le document "source" est deja au bon endroit, ne rien faire
+	if ($source == ($dir . $dest . '.' . $ext))
+		return $source;
+
+	// sinon tourner jusqu'a trouver un numero correct
+	$n = 0;
+	while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));
+
+	return deplacer_fichier_upload($source, $newFile);
 }
 
+/**
+ * Deplacer ou copier un fichier
+ *
+ * http://doc.spip.org/@deplacer_fichier_upload
+ *
+ * @param string $source
+ * @param string $dest
+ * @param bool $move
+ * @return bool|mixed|string
+ */
+function deplacer_fichier_upload($source, $dest, $move=false) {
+	// Securite
+	if (substr($dest,0,strlen(_DIR_RACINE))==_DIR_RACINE)
+		$dest = _DIR_RACINE.preg_replace(',\.\.+,', '.', substr($dest,strlen(_DIR_RACINE)));
+	else
+		$dest = preg_replace(',\.\.+,', '.', $dest);
 
-// Est-ce que le document est inclus dans le texte ?
-// http://doc.spip.org/@est_inclus
-function est_inclus($id_document) {
-	return isset($GLOBALS['doublons_documents_inclus']) ?
-		in_array($id_document,$GLOBALS['doublons_documents_inclus']) : false;
-}
-
-//
-// Afficher un document sous forme de bloc depliable
-// en donnant un apercu
-// et en indiquer le raccourci permettant l'incrustation
-// Pour les distant, donner un bouton pour rappatriement (trombone)
-// Pour les images, donnner les boutons de rotations
-
-
-// http://doc.spip.org/@afficher_case_document
-function afficher_case_document($id_document, $id, $script, $type, $deplier=false) {
-	global $spip_lang_right;
-
-	$document = sql_fetsel("D.id_document, D.id_vignette,D.extension,D.titre,D.descriptif,D.fichier,D.largeur,D.hauteur,D.taille,D.mode,D.distant, D.date, L.vu", "spip_documents AS D INNER JOIN spip_documents_liens AS L ON L.id_document=D.id_document", "L.id_objet=".intval($id)." AND objet=".sql_quote($type)." AND L.id_document=".intval($id_document));
-
-	if (!$document) return "";
-
-	$id_vignette = $document['id_vignette'];
-	$extension = $document['extension'];
-	$descriptif = $document['descriptif'];
-	$fichier = $document['fichier'];
-	$largeur = $document['largeur'];
-	$hauteur = $document['hauteur'];
-	$mode = $document['mode'];
-	$distant = $document['distant'];
-	$titre = $document['titre'];
-	$legender = charger_fonction('legender', 'inc');
-	$dist = '';
-
-	$r = sql_fetsel("titre,inclus", "spip_types_documents", "extension=".sql_quote($extension));
-	if ($r) {
-		$type_inclus = $r['inclus'];
-		$type_titre = $r['titre'];
-	}
-
-	if ($mode == 'document') {
-
-		if ($distant == 'oui') {
-			include_spip('inc/tourner');
-			$dist = "\n<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>"
-			. "\n<img src='" . chemin_image('attachment.gif') . "'\n\talt=\"$fichier\"\n\ttitle=\"$fichier\" />\n"
-			. bouton_copier_local($document, $type, $id, $id_document, $script)
-			. "</div>\n";
-		}
-
-		if (est_inclus($id_document))
-			$raccourci = affiche_raccourci_doc('doc', $id_document, '');
-		else {
-			$vign= (($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0);
-			$raccourci = $vign ? ("<b>"._T('info_inclusion_vignette')."</b><br />") : '';
-
-			$raccourci .= "<div style='color: 333333'>"
-			. affiche_raccourci_doc('doc', $id_document, 'left')
-			. affiche_raccourci_doc('doc', $id_document, 'center')
-			. affiche_raccourci_doc('doc', $id_document, 'right')
-			. "</div>\n";
-
-			if ($vign) {
-				$raccourci .= "<div style='padding:2px; ' class='arial1 spip_xx-small'>";
-				$raccourci .= "<b>"._T('info_inclusion_directe')."</b><br />";
-				$raccourci .= "<div style='color: 333333'>"
-				. affiche_raccourci_doc('emb', $id_document, 'left')
-				. affiche_raccourci_doc('emb', $id_document, 'center')
-				. affiche_raccourci_doc('emb', $id_document, 'right')
-				. "</div>\n";
-				$raccourci .= "</div>";
-			}
-		}
-		$ninclus = false;
-		$icone = 'doc-24.gif';
-		$style = 'e';
-
-	} else if ($mode == 'image') {
-
-		$icone = 'image-24.gif';
-		$style = 'r';
-		$ninclus = ($type_inclus !== 'image');
-		$doc = ($descriptif OR $titre) ? 'doc' : 'img';
-
-		if (est_inclus($id_document))
-			$raccourci = affiche_raccourci_doc($doc, $id_document, '');
-		else {
-			$raccourci =
-				affiche_raccourci_doc($doc, $id_document, 'left')
-				. affiche_raccourci_doc($doc, $id_document, 'center')
-				. affiche_raccourci_doc($doc, $id_document, 'right');
+	if ($move)	$ok = @rename($source, $dest);
+	else				$ok = @copy($source, $dest);
+	if (!$ok) $ok = @move_uploaded_file($source, $dest);
+	if ($ok)
+		@chmod($dest, _SPIP_CHMOD & ~0111);
+	else {
+		$f = @fopen($dest,'w');
+		if ($f) {
+			fclose ($f);
+		} else {
+			include_spip('inc/flock');
+			raler_fichier($dest);
 		}
-
+		spip_unlink($dest);
 	}
-	$cadre = lignes_longues(typo($titre ? $titre : basename($fichier)), 20);
-	// encapsuler chaque document dans un container pour permettre son remplacement en ajax
-	return  '<div>'
-		. debut_cadre($style, $icone, '', $cadre, "document$id_document")
-		. ($ninclus ? '' :
-		   ("\n<div style='text-align: center'>"
-		    . $dist
-		    . document_et_vignette($document, '', true)
-		    . '</div>'
-		    . "\n<div class='verdana1' style='text-align: center; color: black;'>\n"
-		    . ($type_titre ? $type_titre :
-		       ( _T('info_document').' '.majuscules($extension)))
-		    . "</div>"))
-		. $apercu
-		. "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>"
-		. $raccourci
-		. "</div>\n"
-		. $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier)
-		. fin_cadre($style)
-		. '</div>';
+	return $ok ? $dest : false;
 }
 
-// Etablit la liste des documents orphelins, c'est-a-dire qui ne sont lies
-// a rien ; renvoie un tableau (id_document)
-// ici on ne join pas avec la table objet pour voir si l'objet existe vraiment
-// on considere que c'est le role d'optimiser que de nettoyer les liens morts
-// sinon eventuellement appeler avant une fonction nettoyer_liens_documents
-// http://doc.spip.org/@lister_les_documents_orphelins
-function lister_les_documents_orphelins() {
-	$s = sql_select("D.id_document, D.id_vignette", "spip_documents AS D LEFT JOIN spip_documents_liens AS L ON D.id_document=L.id_document", "(L.id_objet IS NULL)");
-
-	$orphelins = array();
-	while ($t = sql_fetch($s)) {
-		$orphelins[$t['id_document']] = true;
-		// la vignette d'un orphelin est orpheline
-		if ($t['id_vignette'])
-			$orphelins[$t['id_vignette']] = true;
-
-	}
-
-	// les vignettes qui n'appartiennent a aucun document sont aussi orphelines
-	$s = sql_select("V.id_document", "spip_documents AS V LEFT JOIN spip_documents AS D ON V.id_document=D.id_vignette", "V.mode='vignette' AND D.id_document IS NULL");
-	while ($t = sql_fetch($s))
-		$orphelins[$t['id_document']] = true;
-
-	return array_keys(array_filter($orphelins));
-}
-
-// Supprimer les documents de la table spip_documents,
-// ainsi que les fichiers correspondants dans IMG/
-// Fonction a n'appeler que sur des documents orphelins
-// http://doc.spip.org/@supprimer_documents
-function supprimer_documents($liste = array()) {
-	if (!count($liste))
-		return;
-
-	$in = sql_in('id_document', $liste);
-
-	// Supprimer les fichiers locaux et les copies locales
-	// des docs distants
-	$s = sql_select("fichier, distant", "spip_documents", $in);
-	while ($t = sql_fetch($s)) {
-		if ($t['distant'] == 'oui') {
-			include_spip('inc/distant');
-			if ($local = copie_locale($t['fichier'], 'test'))
-				spip_log("efface $local = ".$t['fichier']);
-				supprimer_fichier($local);
-		}
-		else {
-			if (@file_exists($f = get_spip_doc($t['fichier']))) {
-				spip_log("efface $f");
-				supprimer_fichier($f);
-			}
-		}
-	}
-
-	// Supprimer les entrees dans spip_documents et associees
-	sql_delete('spip_documents', $in);
-	// en principe il ne devrait rien y avoir ici si les documents sont bien orphelins
-	sql_delete('spip_documents_liens', $in);
-}
 
 ?>
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 73bdeda0bb..73dcb887f5 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -45,7 +45,7 @@ define('_ROOT_RESTREINT', _ROOT_CWD . _DIR_RESTREINT);
 if (!defined('_NOM_IMG_PACK')) define('_NOM_IMG_PACK', 'images/');
 # le chemin http (relatif) vers les images standard
 define('_DIR_IMG_PACK', (_DIR_RACINE . 'prive/' . _NOM_IMG_PACK));
-# le chemin des vignettes de type de document
+# le chemin des vignettes de type de fichier
 define('_DIR_IMG_ICONES_DIST', _DIR_RACINE . "prive/vignettes/");
 
 # le chemin php (absolu) vers les images standard (pour hebergement centralise)
diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php
index 453beac1b3..183c446cce 100644
--- a/ecrire/install/etape_3.php
+++ b/ecrire/install/etape_3.php
@@ -90,7 +90,6 @@ function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db,
 		}
 		spip_log("Creation des tables. Codage $charsetbase");
 		creer_base($server_db); // AT LAST
-		creer_base_types_doc($server_db);
 		// memoriser avec quel charset on l'a creee
 
 		if ($charset) {
diff --git a/ecrire/public.php b/ecrire/public.php
index c99287e769..4f1fb9722a 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -58,17 +58,8 @@ if (isset($GLOBALS['_INC_PUBLIC'])) {
 			unset($_GET['action']);
 	# sinon, fond par defaut
 	} else {
-		// traiter le cas pathologique d'un upload de document ayant echoue
-		// car trop gros
-		if (empty($_GET) AND empty($_POST) AND empty($_FILES)
-		AND isset($_SERVER["CONTENT_LENGTH"])
-		AND strstr($_SERVER["CONTENT_TYPE"], "multipart/form-data;")) {
-			include_spip('inc/getdocument');
-			erreur_upload_trop_gros();
-		}
-
 		// sinon fond par defaut (cf. assembler.php)
-		$fond = '';
+		$fond = pipeline('detecter_fond_par_defaut','');
 	}
 
 	$tableau_des_temps = array();
diff --git a/ecrire/public/boucles.php b/ecrire/public/boucles.php
index d9ae8685c4..859f41a574 100644
--- a/ecrire/public/boucles.php
+++ b/ecrire/public/boucles.php
@@ -36,68 +36,6 @@ function boucle_BOUCLE_dist($id_boucle, &$boucles) {
 }
 
 
-//
-// <BOUCLE(DOCUMENTS)>
-//
-// http://doc.spip.org/@boucle_DOCUMENTS_dist
-function boucle_DOCUMENTS_dist($id_boucle, &$boucles) {
-	$boucle = &$boucles[$id_boucle];
-	$id_table = $boucle->id_table;
-
-	// on ne veut pas des fichiers de taille nulle,
-	// sauf s'ils sont distants (taille inconnue)
-	array_unshift($boucle->where,array("'($id_table.taille > 0 OR $id_table.distant=\\'oui\\')'"));
-
-	// Supprimer les vignettes
-	if (!isset($boucle->modificateur['criteres']['mode'])
-	AND !isset($boucle->modificateur['criteres']['tout'])) {
-		array_unshift($boucle->where,array("'!='", "'$id_table.mode'", "'\\'vignette\\''"));
-	}
-
-	// Pour une boucle generique (DOCUMENTS) sans critere de lien, verifier
-	// qu notre document est lie a un element publie
-	// (le critere {tout} permet de les afficher tous quand meme)
-	// S'il y a un critere de lien {id_article} par exemple, on zappe
-	// ces complications (et tant pis si la boucle n'a pas prevu de
-	// verification du statut de l'article)
-	if ((!isset($boucle->modificateur['tout']) OR !$boucle->modificateur['tout'])
-	AND (!isset($boucle->modificateur['criteres']['id_objet']) OR !$boucle->modificateur['criteres']['id_objet'])
-	) {
-		# Espace avant LEFT JOIN indispensable pour insertion de AS
-		# a refaire plus proprement
-
-		## la boucle par defaut ignore les documents de forum
-		$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 (l.id_objet=aa.id_article AND l.objet=\'article\')
-			LEFT JOIN spip_breves AS bb
-				ON (l.id_objet=bb.id_breve AND l.objet=\'breve\')
-			LEFT JOIN spip_rubriques AS rr
-				ON (l.id_objet=rr.id_rubrique AND l.objet=\'rubrique\')"
-			// test conditionne par la presence du plugin forum, en attendant le champ statut sur la table documents
-			. (test_plugin_actif('forum')?" LEFT JOIN spip_forum AS ff	ON (l.id_objet=ff.id_forum AND l.objet=\'forum\')":"");
-
-		$boucle->group[] = "$id_table.id_document";
-
-		if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW) {
-			array_unshift($boucle->where,"'(aa.statut IN (\'publie\',\'prop\') OR bb.statut  IN (\'publie\',\'prop\') OR rr.statut IN (\'publie\',\'prive\')"
-			.(test_plugin_actif('forum')? " OR ff.statut IN (\'publie\',\'prop\')":"")
-			.")'");
-		} else {
-			$postdates = ($GLOBALS['meta']['post_dates'] == 'non')
-				? ' AND \'.quete_condition_postdates(\'aa.date\').\''
-				: '';
-			array_unshift($boucle->where,"'((aa.statut = \'publie\'$postdates) OR bb.statut = \'publie\' OR rr.statut = \'publie\'"
-			.(test_plugin_actif('forum')? " OR ff.statut=\'publie\'":"")
-			.")'");
-		}
-	}
-
-
-	return calculer_boucle($id_boucle, $boucles);
-}
-
 //
 // <BOUCLE(HIERARCHIE)>
 //
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index d8d24bf40a..f7c546c4d9 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -191,27 +191,15 @@ function declarer_interfaces(){
 
 	$table_des_tables['articles']='articles';
 	$table_des_tables['auteurs']='auteurs';
-	$table_des_tables['documents']='documents';
-	$table_des_tables['types_documents']='types_documents';
 	$table_des_tables['rubriques']='rubriques';
 	$table_des_tables['hierarchie']='rubriques';
 
-	$exceptions_des_tables['documents']['type_document']=array('types_documents'
-	, 'titre');
-	$exceptions_des_tables['documents']['extension_document']=array('types_documents', 'extension');
-	$exceptions_des_tables['documents']['mime_type']=array('types_documents'
-	, 'mime_type');
-
-
 	$table_titre['articles']= 'titre, lang';
 	$table_titre['rubriques']= 'titre, lang';
 	$table_titre['auteurs']= "nom AS titre, '' AS lang";
-	$table_titre['documents']= "titre, fichier AS surnom, '' AS lang";
 
 	$table_date['articles']='date';
 	$table_date['auteurs']='date';
-	$table_date['documents']='date';
-	$table_date['types_documents']='date';
 	$table_date['rubriques']='date';
 
 	$table_statut['spip_articles'][] = array(
@@ -260,15 +248,9 @@ function declarer_interfaces(){
 	global $tables_jointures;
 
 	$tables_jointures['spip_articles']['id_auteur']= 'auteurs_liens';
-	$tables_jointures['spip_articles'][]= 'documents_liens';
 
 	$tables_jointures['spip_auteurs'][]= 'auteurs_liens';
 
-	$tables_jointures['spip_documents'][]= 'documents_liens';
-	$tables_jointures['spip_documents'][]= 'types_documents';
-
-	$tables_jointures['spip_rubriques'][]= 'documents_liens';
-
 
 	global  $exceptions_des_jointures;
 	#$exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre'); // pour exemple
@@ -286,7 +268,6 @@ function declarer_interfaces(){
 	$table_des_traitements['DATE_MODIF'][]= 'normaliser_date(%s)';
 	$table_des_traitements['DATE_NOUVEAUTES'][]= 'normaliser_date(%s)';
 	$table_des_traitements['DESCRIPTIF'][]= _TRAITEMENT_RACCOURCIS;
-	$table_des_traitements['FICHIER']['documents']= 'get_spip_doc(%s)';
 	$table_des_traitements['INTRODUCTION'][]= 'PtoBR('. _TRAITEMENT_RACCOURCIS .')';
 	$table_des_traitements['NOM_SITE_SPIP'][]= _TRAITEMENT_TYPO;
 	$table_des_traitements['NOM'][]= _TRAITEMENT_TYPO;
-- 
GitLab