From 4d31273581db1fcd3af719e271b437648cb279bb Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 10 Jun 2007 22:33:56 +0000
Subject: [PATCH] suppression des id_type de documents, remplaces par extension
 ; la seule chose que je ne sais pas verifier, c'est la question des
 sauvegardes/restaurations, surtout avec du code que je ne comprends pas et
 qui est marque 'a voir' ; a voir, donc :)

---
 ecrire/action/acceder_document.php |  2 +-
 ecrire/action/documenter.php       |  4 +--
 ecrire/action/tourner.php          |  2 +-
 ecrire/balise/formulaire_admin.php | 10 +++---
 ecrire/base/create.php             |  6 +---
 ecrire/base/serial.php             | 15 ++++----
 ecrire/base/typedoc.php            |  6 ++--
 ecrire/base/upgrade.php            | 23 ++++++++++++-
 ecrire/exec/documents_liste.php    | 55 +++++++++++++++---------------
 ecrire/inc/ajouter_documents.php   | 14 ++++----
 ecrire/inc/chercher_logo.php       | 26 +++++++-------
 ecrire/inc/distant.php             | 28 ++++++---------
 ecrire/inc/documenter.php          |  4 +--
 ecrire/inc/documents.php           | 47 +++++++++++--------------
 ecrire/inc/indexation.php          |  3 +-
 ecrire/inc/legender.php            | 12 +++----
 ecrire/inc/tourner.php             |  5 ++-
 ecrire/inc_version.php             |  2 +-
 ecrire/public/composer.php         | 12 +++----
 19 files changed, 138 insertions(+), 138 deletions(-)

diff --git a/ecrire/action/acceder_document.php b/ecrire/action/acceder_document.php
index f78bacf6e4..8c8b94cd83 100644
--- a/ecrire/action/acceder_document.php
+++ b/ecrire/action/acceder_document.php
@@ -63,7 +63,7 @@ function action_acceder_document_dist() {
 		$where = "documents.fichier="._q(set_spip_doc($file))
 		. ($arg ? " AND documents.id_document=".intval($arg): '');
 
-		$s = spip_query("SELECT documents.id_document, documents.titre, documents.descriptif, documents.distant, documents.fichier, types.mime_type FROM spip_documents AS documents LEFT JOIN spip_types_documents AS types ON documents.id_type=types.id_type WHERE ".$where);
+		$s = spip_query("SELECT documents.id_document, documents.titre, documents.descriptif, documents.distant, documents.fichier, types.mime_type FROM spip_documents AS documents LEFT JOIN spip_types_documents AS types ON documents.extension=types.extension WHERE ".$where);
 		if (!$doc = spip_fetch_array($s)) {
 			$status = 404;
 		} else {
diff --git a/ecrire/action/documenter.php b/ecrire/action/documenter.php
index f36af77a33..80216b9c55 100644
--- a/ecrire/action/documenter.php
+++ b/ecrire/action/documenter.php
@@ -37,8 +37,8 @@ function action_documenter_post($r)
 	}
 	else {
 			if ($sign)
-				$x = spip_query("SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l, spip_types_documents AS lestypes WHERE l.id_$type=$id AND l.id_document=docs.id_document AND docs.mode='document' AND docs.id_type=lestypes.id_type AND lestypes.extension IN ('gif', 'jpg', 'png')");
-			else $x = spip_query("SELECT docs.* FROM spip_documents AS docs, spip_documents_".$type."s AS l, spip_types_documents AS lestypes  WHERE l.id_$type=$id AND l.id_document=docs.id_document AND docs.mode='document'  AND docs.id_type=lestypes.id_type AND lestypes.extension NOT IN ('gif', 'jpg', 'png')");
+				$x = spip_query("SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l WHERE l.id_$type=$id AND l.id_document=docs.id_document AND docs.mode='document' AND docs.extension IN ('gif', 'jpg', 'png')");
+			else $x = spip_query("SELECT docs.* FROM spip_documents AS docs, spip_documents_".$type."s AS l WHERE l.id_$type=$id AND l.id_document=docs.id_document AND docs.mode='document'  AND docs.extension NOT IN ('gif', 'jpg', 'png')");
 			while($r = spip_fetch_array($x)) {
 				//supprimer_document_et_vignette($r['id_document']);
 				// on dissocie, mais si le doc est utilise dans le texte, il sera reassocie ..., donc condition sur vu !
diff --git a/ecrire/action/tourner.php b/ecrire/action/tourner.php
index 6245b8d6fd..d7cd595ffe 100644
--- a/ecrire/action/tourner.php
+++ b/ecrire/action/tourner.php
@@ -187,7 +187,7 @@ function gdRotate ($src, $dest, $rtt){
 	ImageInterlace($dst_img,0);
 
 	// obligatoire d'enregistrer dans le meme format, puisqu'on change le doc
-	// mais pas son id_type
+	// mais pas son extension
 	$save($dst_img,$dest);
 }
 
diff --git a/ecrire/balise/formulaire_admin.php b/ecrire/balise/formulaire_admin.php
index f8f35c8e50..8943a0e73d 100644
--- a/ecrire/balise/formulaire_admin.php
+++ b/ecrire/balise/formulaire_admin.php
@@ -61,11 +61,11 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 
 	// Ne pas afficher le bouton 'Modifier ce...' si l'objet n'existe pas
 	foreach (array('article', 'breve', 'rubrique', 'mot', 'auteur', 'syndic') as $type) {
-		$id_type = id_table_objet($type);
-		if ($n = intval($$id_type)) {
-			$s = spip_query("SELECT $id_type FROM spip_".table_objet($type)."	WHERE $id_type=".$$id_type);
+		$_id_type = id_table_objet($type);
+		if ($n = intval($$_id_type)) {
+			$s = spip_query("SELECT $_id_type FROM spip_".table_objet($type)."	WHERE $_id_type=".$n);
 			if ($s AND spip_num_rows($s)) {
-				$$id_type = $n;
+				$$_id_type = $n;
 				$objet_affiche = $type;
 				break;
 			}
@@ -135,7 +135,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 		OR $objet_affiche == 'breve'
 		OR $objet_affiche == 'rubrique'
 		OR $objet_affiche == 'syndic')
-		  $preview = spip_num_rows(spip_query("SELECT id_$objet_affiche FROM spip_".table_objet($objet_affiche)." WHERE ".id_table_objet($objet_affiche)."=".$$id_type." AND ((statut IN ('prop', 'prive')) " . (!$p ? '' : "OR (statut='publie' AND date>NOW())") .")"));
+		  $preview = spip_num_rows(spip_query("SELECT id_$objet_affiche FROM spip_".table_objet($objet_affiche)." WHERE ".id_table_objet($objet_affiche)."=".$$_id_type." AND ((statut IN ('prop', 'prive')) " . (!$p ? '' : "OR (statut='publie' AND date>NOW())") .")"));
 	}
 
 	//
diff --git a/ecrire/base/create.php b/ecrire/base/create.php
index dd80ddb976..6e26f6c9ca 100644
--- a/ecrire/base/create.php
+++ b/ecrire/base/create.php
@@ -34,11 +34,7 @@ function creer_base() {
 		spip_mysql_create($k, $v['field'], $v['key'], false);
 
 	foreach($tables_images as $k => $v)
-		spip_query_db("INSERT IGNORE INTO spip_types_documents (extension, inclus, titre, id_type) VALUES ('$k', 'image', '" .
-			      (is_numeric($v) ?
-			       (strtoupper($k) . "', $v") :
-			       "$v', 0") .
-			      ")");
+		spip_query_db("INSERT IGNORE INTO spip_types_documents (extension, inclus, titre) VALUES ("._q($k).", 'image'," . _q($v).')');
 
 	foreach($tables_sequences as $k => $v)
 		spip_query_db("INSERT IGNORE INTO spip_types_documents (extension, titre, inclus) VALUES ('$k', '$v', 'embed')");
diff --git a/ecrire/base/serial.php b/ecrire/base/serial.php
index 53a24f89a0..43c9b487ed 100644
--- a/ecrire/base/serial.php
+++ b/ecrire/base/serial.php
@@ -208,7 +208,8 @@ $spip_rubriques_key = array(
 $spip_documents = array(
 		"id_document"	=> "bigint(21) NOT NULL",
 		"id_vignette"	=> "bigint(21) DEFAULT '0' NOT NULL",
-		"id_type"	=> "bigint(21) DEFAULT '0' NOT NULL",
+/*		"id_type"	=> "bigint(21) DEFAULT '0' NOT NULL", */
+		"extension"	=> "VARCHAR(10)",
 		"titre"	=> "text",
 		"date"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
 		"descriptif"	=> "text",
@@ -225,24 +226,26 @@ $spip_documents_key = array(
 		"PRIMARY KEY"	=> "id_document",
 		"KEY id_vignette"	=> "id_vignette",
 		"KEY mode"	=> "mode",
-		"KEY id_type"	=> "id_type");
+		"KEY extension"	=> "extension");
 $spip_documents_join = array(
 		"id_document"=>"id_document",
-		"id_type"=>"id_type");
+		"extension"=>"extension");
 
 $spip_types_documents = array(
-		"id_type"	=> "bigint(21) NOT NULL",
+/*		"id_type"	=> "bigint(21) NOT NULL", */
+		"extension"	=> "varchar(10)",
 		"titre"	=> "text",
 		"descriptif"	=> "text",
-		"extension"	=> "varchar(10)",
 		"mime_type"	=> "varchar(100)",
 		"inclus"	=> "ENUM('non', 'image', 'embed') NOT NULL DEFAULT 'non'",
 		"upload"	=> "ENUM('oui', 'non') NOT NULL DEFAULT 'oui'",
 		"maj"	=> "TIMESTAMP");
 
 $spip_types_documents_key = array(
-		"PRIMARY KEY"	=> "id_type",
+/*		"PRIMARY KEY"	=> "id_type",
 		"UNIQUE extension"	=> "extension",
+*/
+		"PRIMARY KEY"	=> "extension",
 		"KEY inclus"	=> "inclus");
 
 $spip_syndic = array(
diff --git a/ecrire/base/typedoc.php b/ecrire/base/typedoc.php
index 37b00f22ca..fd97463719 100644
--- a/ecrire/base/typedoc.php
+++ b/ecrire/base/typedoc.php
@@ -18,9 +18,9 @@ global $tables_images, $tables_sequences, $tables_documents, $tables_mime, $mime
 
 $tables_images = array(
 		       // Images reconnues par PHP
-		       'jpg' => 1, 
-		       'png' => 2, 
-		       'gif' => 3,
+		       'jpg' => 'JPEG', 
+		       'png' => 'PNG', 
+		       'gif' =>'GIF',
 
 		       // Autres images (peuvent utiliser le tag <img>)
 		       'bmp' => 'BMP',
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index 055ee2037d..e4c54d5d56 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -1385,6 +1385,7 @@ function maj_base($version_cible = 0) {
 		}
 	  maj_version('1.935');
 	}
+
 	if (upgrade_vers(1.937, $version_installee, $version_cible)) {
 		// convertir les champs blob des tables spip en champs texte
 		convertir_un_champ_blob_en_text("spip_articles","texte","LONGTEXT");
@@ -1404,8 +1405,28 @@ function maj_base($version_cible = 0) {
 		convertir_un_champ_blob_en_text("spip_syndic_articles","descriptif","LONGTEXT");
 		convertir_un_champ_blob_en_text("spip_petitions","texte","LONGTEXT");
 		convertir_un_champ_blob_en_text("spip_ortho_cache","suggest","TEXT");
-		maj_version('1.937');
+		maj_version('1.938');
+	}
+
+	if (upgrade_vers(1.938, $version_installee, $version_cible)) {
+		// Ajouter un champ extension aux spip_documents, et le
+		// remplir avec les valeurs ad hoc
+		spip_query("ALTER TABLE spip_documents ADD extension VARCHAR(10) NOT NULL DEFAULT ''");
+		spip_query("ALTER TABLE spip_documents ADD INDEX extension (extension)");
+		$s = spip_query("SELECT id_type,extension FROM spip_types_documents");
+		while ($t = spip_fetch_array($s)) {
+			spip_query("UPDATE spip_documents
+				SET extension="._q($t['extension'])
+				." WHERE id_type="._q($t['id_type']));
+		}
+		spip_query("ALTER TABLE spip_documents DROP INDEX id_type, DROP id_type");
+		spip_query("ALTER TABLE spip_types_documents DROP INDEX id_type, DROP id_type");
+
+		## recreer la PRIMARY KEY sur spip_types_documents.extension
+		spip_query("ALTER TABLE spip_types_documents ADD PRIMARY KEY (extension)");
+		maj_version('1.938');
 	}
+
 }
 
 ?>
\ No newline at end of file
diff --git a/ecrire/exec/documents_liste.php b/ecrire/exec/documents_liste.php
index 9108393369..3f47430294 100644
--- a/ecrire/exec/documents_liste.php
+++ b/ecrire/exec/documents_liste.php
@@ -41,37 +41,36 @@ fin_boite_info();
 
 debut_droite();
 
-	// recupere les types
+	// recupere les titres des types
 	$res = spip_query("SELECT * FROM spip_types_documents");
 	while ($row = spip_fetch_array($res))
-		$types[$row['id_type']] = $row;
-
-	$result = spip_query("SELECT docs.id_document AS id_doc, docs.id_type AS type, 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 FROM spip_documents AS docs, spip_documents_rubriques AS lien, spip_rubriques AS rubrique WHERE docs.id_document = lien.id_document AND rubrique.id_rubrique = lien.id_rubrique AND docs.mode = 'document' ORDER BY docs.date DESC");
-	
-	while($row=spip_fetch_array($result)){
-			$titre=$row['titre'];
-			$descriptif=$row['descriptif'];
-			$date=$row['date'];
-			$id_document=$row['id_doc'];
-			$id_rubrique=$row['id_rub'];
-			$titre_rub = typo($row['titre_rub']);
-			$fichier = $row['fichier'];
-
-			if (!$titre) $titre = _T('info_document').' '.$id_document;
-			
-			debut_cadre_relief("doc-24.gif");
-			echo "<b>$titre</b> (" . $types[$row['type']]['titre'] . ', ' . affdate($date) . ")";
-			if ($descriptif)
-				echo "<p>".propre($descriptif) . '</p>';
-			else
-				echo "<p><tt>$fichier</tt>" . '</p>';
-
-			echo "<p>"._T('info_dans_rubrique')." <a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "'>$titre_rub</a></p>";
-			
-			fin_cadre_relief();
+		$types[$row['extension']] = $row;
+
+	$result = spip_query("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 FROM spip_documents AS docs, spip_documents_rubriques AS lien, spip_rubriques AS rubrique WHERE docs.id_document = lien.id_document AND rubrique.id_rubrique = lien.id_rubrique AND docs.mode = 'document' ORDER BY docs.date DESC");
+
+	while ($row=spip_fetch_array($result)){
+		$titre=$row['titre'];
+		$descriptif=$row['descriptif'];
+		$date=$row['date'];
+		$id_document=$row['id_doc'];
+		$id_rubrique=$row['id_rub'];
+		$titre_rub = typo($row['titre_rub']);
+		$fichier = $row['fichier'];
+
+		if (!$titre) $titre = _T('info_document').' '.$id_document;
+
+		debut_cadre_relief("doc-24.gif");
+		echo "<b>$titre</b> (" . $types[$row['extension']]['titre'] . ', ' . affdate($date) . ")";
+		if ($descriptif)
+			echo propre($descriptif);
+		else
+			echo "<p><tt>$fichier</tt>" . '</p>';
+
+		echo "<p>"._T('info_dans_rubrique')." <a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "'>$titre_rub</a></p>";
+		fin_cadre_relief();
 	}
-	
 
-echo fin_gauche(), fin_page();
+	echo fin_gauche(), fin_page();
 }
+
 ?>
diff --git a/ecrire/inc/ajouter_documents.php b/ecrire/inc/ajouter_documents.php
index 00f10d971c..3df8080113 100644
--- a/ecrire/inc/ajouter_documents.php
+++ b/ecrire/inc/ajouter_documents.php
@@ -56,7 +56,6 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 			# $a['fichier'] est une copie locale du fichier
 
 			$fichier = $source;
-			$id_type = $a['id_type'];
 			$taille = $a['taille'];
 			$titre = $a['titre'];
 			$largeur = $a['largeur'];
@@ -129,7 +128,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 			spip_log("Impossible de copier_document($ext, $nom_envoye, $source)");
 			return;
 		}
-		$id_type = $row['id_type'];	# numero du type dans spip_types_documents:(
+		$extension = $row['extension'];
 		$type_inclus_image = ($row['inclus'] == 'image');
 
 		// Prevoir traitement specifique pour videos
@@ -224,14 +223,15 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 	// passe "mode=document" et "id_document=.." (pas utilise)
 	if (!$id_document) {
 		// Inserer le nouveau doc et recuperer son id_
-		$id_document = spip_abstract_insert("spip_documents", "(id_type, titre, date, distant)", "($id_type, " . _q($titre) . ", NOW(), '$distant')");
+		$id_document = spip_abstract_insert("spip_documents", "(extension, titre, date, distant)", "("._q($extension).", " . _q($titre) . ", NOW(), '$distant')");
 
 		if ($id_lien
 		AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
-		    ) {
-		  spip_abstract_insert("spip_documents_".$type_lien."s",
-				       "(id_document, id_".$type_lien.")",
-				       "($id_document, $id_lien)");
+		) {
+			spip_abstract_insert("spip_documents_".$type_lien."s",
+				"(id_document, id_".$type_lien.")",
+				"($id_document, $id_lien)"
+			);
 		}
 		// par defaut (upload ZIP ou ftp) integrer
 		// les images en mode 'vignette' et le reste en mode document
diff --git a/ecrire/inc/chercher_logo.php b/ecrire/inc/chercher_logo.php
index 19b7263371..12329be333 100644
--- a/ecrire/inc/chercher_logo.php
+++ b/ecrire/inc/chercher_logo.php
@@ -13,11 +13,11 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // http://doc.spip.org/@inc_chercher_logo_dist
-function inc_chercher_logo_dist($id, $id_type, $mode='on') {
+function inc_chercher_logo_dist($id, $_id_objet, $mode='on') {
 	global $formats_logos;
 	# attention au cas $id = '0' pour LOGO_SITE_SPIP : utiliser intval()
 
-	$type = type_du_logo($id_type);
+	$type = type_du_logo($_id_objet);
 	$nom = $type . $mode . intval($id);
 
 	foreach ($formats_logos as $format) {
@@ -29,21 +29,21 @@ function inc_chercher_logo_dist($id, $id_type, $mode='on') {
 }
 
 // http://doc.spip.org/@type_du_logo
-function type_du_logo($id_type) {
-	return isset($GLOBALS['table_logos'][$id_type])
-		? $GLOBALS['table_logos'][$id_type]
-		: preg_replace(',^id_,', '', $id_type);
+function type_du_logo($_id_objet) {
+	return isset($GLOBALS['table_logos'][$_id_objet])
+		? $GLOBALS['table_logos'][$_id_objet]
+		: preg_replace(',^id_,', '', $_id_objet);
 }
 
 // Exceptions standards (historique)
 global $table_logos;
 $table_logos = array( 
-		     'id_article' => 'art', 
-		     'id_auteur' => 'aut', 
-#		     'id_breve' => 'breve', 
-#		     'id_mot' => 'mot', 
-		     'id_syndic'=> 'site',
-		     'id_rubrique' => 'rub'
-		     );
+	'id_article' => 'art', 
+	'id_auteur' => 'aut', 
+#	'id_breve' => 'breve', 
+#	'id_mot' => 'mot', 
+	'id_syndic'=> 'site',
+	'id_rubrique' => 'rub'
+);
 
 ?>
diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index 3ad35ad0a3..3a4b4059a4 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -282,17 +282,13 @@ function fichier_copie_locale($source) {
 		return $source;
 	}
 
-	$extension = "";
 	// Chercher d'abord le doc dans la table des documents, pour se baser sur son type reel
-	$t = spip_fetch_array(spip_query("SELECT id_type FROM spip_documents WHERE fichier=" . _q($source) . " AND distant='oui'"));
-	if ($t) {
-		$t = spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE id_type=".$t['id_type']));
-		if ($t)
-			$extension = $t['extension'];
-	}
-	
+	$s = spip_query("SELECT extension FROM spip_documents WHERE fichier=" . _q($source) . " AND distant='oui'");
+	if ($t = spip_fetch_array($s)) {
+		$extension = $t['extension'];
+
 	// si la source n'est pas dans la table des documents, on regarde si son extension est connue et autorisee
-	if (!strlen($extension)) {
+	} else {
 		$path_parts = pathinfo($source);
 		if (isset($path_parts['extension']) && strlen($path_parts['extension'])){
 			// verifier que c'est un type autorise
@@ -301,8 +297,8 @@ function fichier_copie_locale($source) {
 				$extension = $t['extension'];
 		}
 	}
-	
-	if (strlen($extension))
+
+	if (isset($extension))
 		return nom_fichier_copie_locale($source, $extension);
 }
 
@@ -337,32 +333,30 @@ function recuperer_infos_distantes($source, $max=0) {
 		$t = null;
 		if (($mime_type == 'text/plain' OR $mime_type == '')
 		AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) {
-			$t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE extension=" . _q($rext[1])));
+			$t = spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE extension=" . _q($rext[1])));
 		}
 
 		// Autre mime/type (ou text/plain avec fichier d'extension inconnue)
 		if (!$t)
-			$t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE mime_type=" . _q($mime_type)));
+			$t = spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE mime_type=" . _q($mime_type)));
 
 		// Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
 		// On essaie de nouveau avec l'extension
 		if (!$t
 		AND $mime_type != 'text/plain'
 		AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) {
-			$t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE extension=" . _q($rext[1])));
+			$t = spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE extension=" . _q($rext[1])));
 		}
 
 
 		if ($t) {
 			spip_log("mime-type $mime_type ok, extension ".$t['extension']);
-			$a['id_type'] = $t['id_type'];
 			$a['extension'] = $t['extension'];
 		} else {
 			# par defaut on retombe sur '.bin' si c'est autorise
 			spip_log("mime-type $mime_type inconnu");
-			$t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE extension='bin'"));
+			$t = spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE extension='bin'"));
 			if (!$t) return false;
-			$a['id_type'] = $t['id_type'];
 			$a['extension'] = $t['extension'];
 		}
 
diff --git a/ecrire/inc/documenter.php b/ecrire/inc/documenter.php
index 2070fc34f0..8b07c36983 100644
--- a/ecrire/inc/documenter.php
+++ b/ecrire/inc/documenter.php
@@ -29,11 +29,11 @@ function inc_documenter_dist(
 
 	if (is_int($doc)) {
 		if ($ancre == 'portfolio') {
-			$lies = spip_query("SELECT docs.*,l.id_$type,l.vu FROM spip_documents AS docs, spip_documents_".$type."s AS l, spip_types_documents AS lestypes WHERE l.id_$type=$doc AND l.id_document=docs.id_document AND docs.mode='document' AND docs.id_type=lestypes.id_type AND lestypes.extension IN ('gif', 'jpg', 'png') ORDER BY 0+docs.titre, docs.date");
+			$lies = spip_query("SELECT docs.*,l.id_$type,l.vu FROM spip_documents AS docs, spip_documents_".$type."s AS l WHERE l.id_$type=$doc AND l.id_document=docs.id_document AND docs.mode='document' AND docs.extension IN ('gif', 'jpg', 'png') ORDER BY 0+docs.titre, docs.date");
 			$toile = 'toile_claire';
 			$couleur = 'bordure_claire_';
 		} else {
-			$lies = spip_query("SELECT docs.*,l.id_$type,l.vu FROM spip_documents AS docs, spip_documents_".$type."s AS l,spip_types_documents AS lestypes WHERE l.id_$type=$doc AND l.id_document=docs.id_document AND docs.mode='document' AND docs.id_type=lestypes.id_type AND lestypes.extension NOT IN ('gif', 'jpg', 'png') ORDER BY 0+docs.titre, docs.date");
+			$lies = spip_query("SELECT docs.*,l.id_$type,l.vu FROM spip_documents AS docs, spip_documents_".$type."s AS l WHERE l.id_$type=$doc AND l.id_document=docs.id_document AND docs.mode='document' AND docs.extension NOT IN ('gif', 'jpg', 'png') ORDER BY 0+docs.titre, docs.date");
 			$toile = 'toile_gris_fort';
 			$couleur = 'bordure_grise_';
 		}
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index f02f12cfb3..75763780da 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -30,12 +30,18 @@ function set_spip_doc($fichier) {
 // donne le chemin complet du fichier
 // http://doc.spip.org/@get_spip_doc
 function get_spip_doc($fichier) {
+	// fichier distant
 	if (preg_match(',^\w+://,', $fichier))
 		return $fichier;
-	else
-		return (strpos($fichier, _DIR_IMG) === false)
-			? _DIR_IMG . $fichier
-			: $fichier;
+
+	// gestion d'erreurs, fichier=''
+	if (!strlen($fichier))
+		return false;
+
+	// fichier normal
+	return (strpos($fichier, _DIR_IMG) === false)
+		? _DIR_IMG . $fichier
+		: $fichier;
 }
 
 // http://doc.spip.org/@generer_url_document_dist
@@ -107,10 +113,7 @@ function image_pattern($vignette) {
 
 // http://doc.spip.org/@document_et_vignette
 function document_et_vignette($document, $url, $portfolio=false) {
-	// a supprimer avec spip_types_documents
-	$extension = spip_fetch_array(spip_query("SELECT extension, mime_type FROM	spip_types_documents WHERE id_type=".$document['id_type']));
-	$mime = $extension['mime_type'];
-	$extension = $extension['extension'];
+	$extension = $document['extension'];
 	$vignette = $document['id_vignette'];
 
 	if ($vignette) 
@@ -153,8 +156,10 @@ function document_et_vignette($document, $url, $portfolio=false) {
 
 	if (!$url)
 		return $image;
-	else
-		return "<a href='$url'\n\ttype='$mime'>$image</a>";
+	else {
+		$t = spip_fetch_array(spip_query("SELECT mime_type FROM spip_types_documents WHERE extension="._q($document['extension'])));
+		return "<a href='$url'\n\ttype='".$t['mime_type']."'>$image</a>";
+	}
 }
 
 
@@ -286,7 +291,7 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 	//$document = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document)));
 
 	$id_vignette = $document['id_vignette'];
-	$id_type = $document['id_type'];
+	$extension = $document['extension'];
 	$titre = $document['titre'];
 	$descriptif = $document['descriptif'];
 	$url = generer_url_document($id_document);
@@ -302,9 +307,8 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 
 	$cadre = strlen($titre) ? $titre : basename($document['fichier']);
 
-	$result = spip_query("SELECT titre,inclus,extension FROM spip_types_documents WHERE id_type=$id_type");
-	if ($letype = @spip_fetch_array($result)) {
-		$type_extension = $letype['extension'];
+	$result = spip_query("SELECT titre,inclus FROM spip_types_documents WHERE extension="._q($extension));
+	if ($letype = spip_fetch_array($result)) {
 		$type_inclus = $letype['inclus'];
 		$type_titre = $letype['titre'];
 	}
@@ -315,19 +319,6 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 	$ret = "";
 	if ($mode == 'document') {
 
-		# 'extension', a ajouter dans la base quand on supprimera spip_types_documents
-		switch ($id_type) {
-				case 1:
-					$document['extension'] = "jpg";
-					break;
-				case 2:
-					$document['extension'] = "png";
-					break;
-				case 3:
-					$document['extension'] = "gif";
-					break;
-			}
-
 		$ret .= "<a id='document$id_document' name='document$id_document'></a>\n";
 		$ret .= debut_cadre_enfonce("doc-24.gif", true, "", lignes_longues(typo($cadre),20));
 
@@ -354,7 +345,7 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 		. '</div>'
 		. "\n<div class='verdana1' style='text-align: center; color: black;'>\n"
 		. ($type_titre ? $type_titre : 
-		      ( _T('info_document').' '.majuscules($type_extension)))
+		      ( _T('info_document').' '.majuscules($extension)))
 		. "</div>";
 
 		// Affichage du raccourci <doc...> correspondant
diff --git a/ecrire/inc/indexation.php b/ecrire/inc/indexation.php
index d43ab2ae49..db263594a0 100644
--- a/ecrire/inc/indexation.php
+++ b/ecrire/inc/indexation.php
@@ -375,8 +375,7 @@ function indexer_contenu_document ($row, $min_long=3) {
 	global $extracteur;
 
 	if ($row['mode'] == 'vignette') return;
-	$extension = spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE id_type = ".$row['id_type']));
-	$extension = $extension['extension'];
+	$extension = $row['extension'];
 
 	// Voir si on sait lire le contenu (eventuellement en chargeant le
 	// fichier extract/pdf.php dans find_in_path() )
diff --git a/ecrire/inc/legender.php b/ecrire/inc/legender.php
index b132dec401..e1ad7e556d 100644
--- a/ecrire/inc/legender.php
+++ b/ecrire/inc/legender.php
@@ -75,7 +75,7 @@ function inc_legender_dist($id_document, $document, $script, $type, $id, $ancre,
 		     array('largeur_vignette' => $document['largeur'],
 			   'hauteur_vignette' => $document['hauteur']));
 	else
-	  $contenu .= taille_en_octets($document['taille']) . ' - ';
+	  $contenu .= taille_en_octets($document['taille']);
 
 	if ($date) $contenu .= "<br />\n" . affdate($date);
 
@@ -186,8 +186,8 @@ function vignette_formulaire_legender($id_document, $document, $script, $type, $
 function formulaire_taille($document) {
 
 	// (on ne le propose pas pour les images qu'on sait
-	// lire, id_type<=3), sauf bug, ou document distant
-	if ($document['id_type'] <= 3
+	// lire : gif jpg png), sauf bug, ou document distant
+	if (in_array($document['extension'], array('gif','jpg','png'))
 	AND $document['hauteur']
 	AND $document['largeur']
 	AND $document['distant']!='oui')
@@ -195,10 +195,10 @@ function formulaire_taille($document) {
 	$id_document = $document['id_document'];
 
 	// Donnees sur le type de document
-	$t = @spip_abstract_fetsel('inclus,extension',
-		'spip_types_documents', "id_type=".$document['id_type']);
+	$extension = $document['extension'];
+	$t = spip_abstract_fetsel('inclus',
+		'spip_types_documents', "extension="._q($extension));
 	$type_inclus = $t['inclus'];
-	$extension = $t['extension'];
 
 	# TODO -- pour le MP3 "l x h pixels" ne va pas
 	if (($type_inclus == "embed" OR $type_inclus == "image")
diff --git a/ecrire/inc/tourner.php b/ecrire/inc/tourner.php
index ed36e554c3..d6c97926d2 100644
--- a/ecrire/inc/tourner.php
+++ b/ecrire/inc/tourner.php
@@ -82,7 +82,6 @@ function inc_tourner_dist($id_document, $document, $script, $flag, $type)
 // http://doc.spip.org/@boutons_rotateurs
 function boutons_rotateurs($document, $type, $id, $id_document, $script) {
 	global $spip_lang_right;
-	static $ftype = array(1 => 'jpg', 2 => 'png', 3 => 'gif');
 
 	$process = $GLOBALS['meta']['image_process'];
 
@@ -91,8 +90,8 @@ function boutons_rotateurs($document, $type, $id, $id_document, $script) {
 	// n'est pas distante, qu'elle est bien presente dans IMG/
 	// qu'elle n'a pas de vignette perso ; et qu'on a la bibli !
 	if ($document['distant']!='oui' 
-	AND isset($ftype[$document['id_type']])
-	AND (strpos($GLOBALS['meta']['formats_graphiques'], $ftype[$document['id_type']])!==false)
+	AND in_array($document['extension'], array('gif', 'jpg', 'png'))
+	AND (strpos($GLOBALS['meta']['formats_graphiques'], $document['extension'])!==false)
 	AND ($process == 'imagick'
 		OR $process == 'gd2'
 		OR $process == 'convert'
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 1167d381fe..5278eecb2f 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -299,7 +299,7 @@ $liste_des_statuts = array(
 // (utilise pour les modifs de la base de donnees)
 
 // version de la base
-$spip_version = 1.937;
+$spip_version = 1.938;
 
 // version de spip en chaine
 // et en numerique a incrementer sur les evolutions qui cassent la compatibilite descendante
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 83e6cc4e97..663e840e76 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -361,12 +361,12 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier
 	if (!$id_document) return '';
 	if ($doubdoc) $doublons["documents"] .= ','.$id_document;
 
-	if (!($row = spip_abstract_select(array('id_type', 'id_vignette', 'fichier', 'mode'), array('spip_documents'), array("id_document = $id_document"))))
+	if (!($row = spip_abstract_select(array('extension', 'id_vignette', 'fichier', 'mode'), array('spip_documents'), array("id_document = $id_document"))))
 		// pas de document. Ne devrait pas arriver
 		return ''; 
 
 	$row = spip_abstract_fetch($row);
-	$id_type = $row['id_type'];
+	$extension = $row['extension'];
 	$id_vignette = $row['id_vignette'];
 	$fichier = get_spip_doc($row['fichier']);
 	$mode = $row['mode'];
@@ -393,14 +393,12 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier
 		$y = intval($r[2]);
 	}
 
-	// Retrouver l'extension et le type mime
+	// Retrouver le type mime
 	$ex = spip_abstract_fetch(spip_abstract_select(
-		array('extension', 'mime_type'),
+		array('mime_type'),
 		array('spip_types_documents'),
-		array("id_type = " . intval($id_type))));
-	$extension = $ex['extension'];
+		array("extension = " . _q($extension))));
 	$mime = $ex['mime_type'];
-	if (!$extension) $extension = 'txt';
 
 	if ($logo AND @file_exists($logo)) {
 		if ($x OR $y)
-- 
GitLab