From 5b524cf7df636a56b2ff3dca0ff4bd6c4fa3faf8 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Wed, 16 Jan 2008 22:37:45 +0000
Subject: [PATCH] =?UTF-8?q?Harmonisation=20de=20la=20structure=20de=20donn?=
 =?UTF-8?q?=C3=A9es=20de=20'recuperer=5Finfos=5Fdistantes'=20et=20'inc=5Fa?=
 =?UTF-8?q?jouter=5Fdocument'=20pour=20=C3=A9viter=20de=20faire=20et=20d?=
 =?UTF-8?q?=C3=A9faire=202=20fois=20la=20m=C3=AAme=20chose=20et=20gagner?=
 =?UTF-8?q?=20une=20requete=20SQL.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/ajouter_documents.php | 149 ++++++++++++-------------------
 ecrire/inc/distant.php           |   9 ++
 2 files changed, 68 insertions(+), 90 deletions(-)

diff --git a/ecrire/inc/ajouter_documents.php b/ecrire/inc/ajouter_documents.php
index 92eef68235..5bd3862d69 100644
--- a/ecrire/inc/ajouter_documents.php
+++ b/ecrire/inc/ajouter_documents.php
@@ -56,23 +56,22 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 			# NB: dans les bonnes conditions (fichier autorise et pas trop gros)
 			# $a['fichier'] est une copie locale du fichier
 
-			$fichier = $source;
-			$taille = $a['taille'];
-			$titre = $a['titre'];
-			$largeur = $a['largeur'];
-			$hauteur = $a['hauteur'];
-			$ext = $a['extension'];
 			$type_image = $a['type_image'];
 
-			$distant = 'oui';
-			$mode = 'document';
+			unset($a['type_image']);
+			unset($a['body']);
+
+			$a['date'] = 'NOW()';
+			$a['distant'] = 'oui';
+			$a['mode'] = 'document';
+			$a['fichier'] = set_spip_doc($source);
 		}
 		else {
 			spip_log("Echec du lien vers le document $source, abandon");
 			return;
 		}
-	} else {
-		$distant = 'non';
+	} else { // pas distant
+
 		$type_image = ''; // au pire
 		// tester le type de document :
 		// - interdit a l'upload ?
@@ -86,25 +85,18 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 		} else $titre = '';
 		$ext = corriger_extension(strtolower($ext));
 
-		// Si le fichier est de type inconnu, on va le stocker en .zip
-		$row = sql_fetsel("*", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
-		if (!$row) {
+		$row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
 
-/* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .BIN */
-/*			$ext = 'bin';
-			$nom_envoye .= '.bin';
-			spip_log("Extension $ext");
-			$row = sql_fetsel("*", "spip_types_documents", "extension='bin' AND upload='oui'");
-			if (!$row) {
-				spip_log("Extension $ext interdite a l'upload");
-				return;
-			}
-*/
+		if ($row) {
+			$type_inclus_image = ($row['inclus'] == 'image');
+			$fichier = copier_document($ext, $nom_envoye, $source);
+		} else {
 
 /* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */
 			$ext = 'zip';
-			$row = sql_fetsel("*", "spip_types_documents", "extension='zip' AND upload='oui'");
-			if (!$row) {
+			$type_inclus_image = false;
+
+			if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) {
 				spip_log("Extension $ext interdite a l'upload");
 				return;
 			}
@@ -126,20 +118,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 			}
 			$fichier = copier_document($ext, $nom_envoye, $source);
 			spip_unlink($source);
-
-		} else {
-			$fichier = copier_document($ext, $nom_envoye, $source);
 		}
 
-		// Verifier que le fichier est a son emplacement definitif
-		
-		if (!$fichier) {
-			spip_log("Impossible de copier_document($ext, $nom_envoye, $source)");
-			return;
-		}
-		$extension = $row['extension'];
-		$type_inclus_image = ($row['inclus'] == 'image');
-
 		// Prevoir traitement specifique pour videos
 		// (http://www.getid3.org/ peut-etre
 		if ($ext == "mov") {
@@ -148,7 +128,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 		} else 	if ($ext == "svg") {
 		  // recuperer les dimensions et supprimer les scripts
 				list($largeur,$hauteur)= traite_svg($fichier);
-		} else {
+		} else { // image ?
 		// Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
 			$size_image = @getimagesize($fichier);
 			$largeur = intval($size_image[0]);
@@ -157,8 +137,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 		}
 
 		// Quelques infos sur le fichier
-		if (!@file_exists($fichier)
-		OR !$taille = @filesize($fichier)) {
+		if (!$fichier OR !@file_exists($fichier)
+		OR !$taille = @intval(filesize($fichier))) {
 			spip_log ("Echec copie du fichier $fichier");
 			return;
 		}
@@ -215,82 +195,73 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 				return;
 			}
 
-			if (!($largeur * $hauteur)) {
+			if (!($largeur OR $hauteur)) {
 				spip_log('erreur upload vignette '.$fichier);
 				spip_unlink($fichier);
 				return;
 			}
+		} elseif (!in_array($mode, array('distant', 'image', 'document'))) {
+			if ($type_image AND $type_inclus_image)
+				$mode = 'image';
+			else
+				$mode = 'document';
 		}
+		$a =  array(
+			'date' => 'NOW()',
+			'distant' => 'non',
+			'mode' => $mode,
+			'titre'=> $titre,
+			'largeur' => $largeur,
+			'hauteur' => $hauteur,
+			'taille' => $taille,
+			'extension'=> $ext, 
+			'fichier' => set_spip_doc($fichier));
 	}
 
-	// Preparation vignette du document $id_document
-	$id_document_lie = $id_document=intval($id_document);
-	if ($mode == 'vignette' AND  $id_document) {
-		# on force le statut "document" de ce fichier (inutile ?)
-		sql_updateq("spip_documents", array("mode" => 'document'), "id_document=$id_document");
-		$id_document = 0;
-	}
+	if (($id_document=intval($id_document)) AND $mode!='vignette') {
+
+		 // Mise a jour des descripteurs d'un vieux doc
+		unset($a['titre']);
+		unset($a['date']);
+		unset($a['distant']);
+		unset($a['mode']);
 
-	$chemin = set_spip_doc($fichier);
+		sql_updateq('spip_documents', $a, "id_document=$id_document");
+		$id = $id_document;
 
+	} else {
 	// Installer le document dans la base
 	// attention piege semantique : les images s'installent en mode 'vignette'
 	// note : la fonction peut "mettre a jour un document" si on lui
 	// passe "mode=document" et "id_document=.." (pas utilise)
-	if (!$id_document) {
-		// par defaut (upload ZIP ou ftp) integrer
-		// les images en mode 'vignette' et le reste en mode document
-		if (!in_array($mode, array('vignette', 'distant', 'image', 'document')))
-			if ($type_image AND $type_inclus_image)
-				$mode = 'image';
-			else
-				$mode = 'document';
 
-		// Inserer le nouveau doc et recuperer son id_
-		$id_document = sql_insertq("spip_documents",
-					   array(
-			'extension'=> $ext, 
-			'titre'=> $titre,
-			'date' => 'NOW()',
-			'distant' => $distant,
-			'mode' => $mode,
-			'taille' => intval($taille),
-			'largeur' => intval($largeur),
-			'hauteur' => intval($hauteur),
-			'fichier' => $chemin));
+		$id = sql_insertq("spip_documents", $a);
 
-		if ($id_lien AND $id_document
+		spip_log ("ajout du document $source $nom_envoye  (M '$mode' T '$type_lien' L '$id_lien' D '$id')");
+
+		if ($id_lien AND $id
 		AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
 		) {
 			sql_insertq("spip_documents_".$type_lien."s",
-				    array('id_document' => $id_document,
+				    array('id_document' => $id,
 					  'id_'.$type_lien => $id_lien));
 		} else spip_log("Pb d'insertion $id_lien $type_lien");
-	} else 	// Mise a jour des descripteurs d'un vieux doc
-		sql_updateq('spip_documents', array(
-			'taille' => intval($taille),
-			'largeur' => intval($largeur),
-			'hauteur' => intval($hauteur),
-			'fichier' => $chemin),
-				"id_document=$id_document");
-
-	if ($id_document_lie) {
-		sql_updateq("spip_documents", array("id_vignette" => $id_document	), "id_document=$id_document_lie");
-		// hack pour que le retour vers ecrire/ active le bon doc.
-		$documents_actifs[$fichier] = $id_document_lie; 
-	}
-	else
-		$documents_actifs[$fichier] = $id_document; 
 
-	spip_log ("ajout du document $source $nom_envoye  (M '$mode' T '$type_lien' L '$id_lien' D '$id_document')");
+		if ($id_document) {
+			sql_updateq("spip_documents", array("id_vignette" => $id, "mode" => 'document'), "id_document=$id_document");
+
+		} else  $id_document = $id;
 
+	}
+	// pour que le retour vers ecrire/ active le bon doc.
+	$documents_actifs[$fichier] = $id_document;
 	// Notifications, gestion des revisions, reindexation...
 	pipeline('post_edition',
 		array(
 			'args' => array(
 				'operation' => 'ajouter_document',
 				'table' => 'spip_documents',
-				'id_objet' => $id_document
+				'id_objet' => $id
 			),
 			'data' => null
 		)
@@ -299,8 +270,6 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 	return $type_image;
 }
 
-
-
 // http://doc.spip.org/@verifier_compactes
 function verifier_compactes($zip) {
 	if (!$list = $zip->listContent()) return array();
diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index b2e64853e1..723d463695 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -325,6 +325,15 @@ function fichier_copie_locale($source) {
 
 
 // Recuperer les infos d'un document distant, sans trop le telecharger
+#$a['body'] = chaine
+#$a['type_image'] = booleen
+#$a['titre'] = chaine
+#$a['largeur'] = intval
+#$a['hauteur'] = intval
+#$a['taille'] = intval
+#$a['extension'] = chaine
+#$a['fichier'] = chaine
+
 // http://doc.spip.org/@recuperer_infos_distantes
 function recuperer_infos_distantes($source, $max=0, $charger_si_petite_image = true) {
 
-- 
GitLab