From 2be76cb1c6dfc9bfb9f12e6580ad7e90c2050bcf Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 17 Jan 2008 16:29:22 +0000
Subject: [PATCH] =?UTF-8?q?Le=20filtre=20'contenu=5Fdocument'=20accepte=20?=
 =?UTF-8?q?comme=20argument=20non=20seulement=20un=20entier=20(produit=20n?=
 =?UTF-8?q?otamment=20par=20#ID=5FDOCUMENT)=20mais=20aussi=20un=20chemin?=
 =?UTF-8?q?=20ou=20une=20URL=20(produit=20notamment=20par=20#URL=5FDOCUMEN?=
 =?UTF-8?q?T).=20Dans=20les=20deux=20cas=20il=20ram=C3=A8ne=20le=20contenu?=
 =?UTF-8?q?=20du=20document=20ainsi=20d=C3=A9sign=C3=A9.=20La=20forme=20{{?=
 =?UTF-8?q?{=20[(#URL=5FDOCUMENT|contenu=5Fdocument)]=20}}}=20est=20=C3=A0?=
 =?UTF-8?q?=20pr=C3=A9f=C3=A9rer=20car=20elle=20garantit=20l'ex=C3=A9cutio?=
 =?UTF-8?q?n=20du=20squelette=20sur=20une=20base=20externe,=20contrairemen?=
 =?UTF-8?q?t=20=C3=A0=20ID=5FDOCUMENT=20qui=20ne=20communique=20pas=20sa?=
 =?UTF-8?q?=20base=20de=20r=C3=A9f=C3=A9rence.=20Cette=20forme=20reste=20t?=
 =?UTF-8?q?outefois=20n=C3=A9cessaire=20en=20cas=20d'acc=C3=A8s=20prot?=
 =?UTF-8?q?=C3=A9g=C3=A9=20aux=20documents:=20il=20faudrait=20continuer=20?=
 =?UTF-8?q?le=20m=C3=A9nage=20autour=20de=20la=20fonction=20''copie=5Floca?=
 =?UTF-8?q?le''=20pour=20qu'une=20copie=20de=20soi=20=C3=A0=20soi=20ne=20s?=
 =?UTF-8?q?oit=20pas=20bloqu=C3=A9e=20dans=20ce=20cas.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Et correction d'une scorie de [11088].
---
 ecrire/inc/distant.php   | 47 ++++++++++++++++++----------------------
 ecrire/inc/documents.php | 17 ++++++++++-----
 2 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index 723d463695..915212ce1f 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -286,41 +286,36 @@ function nom_fichier_copie_locale($source, $extension) {
 //
 // http://doc.spip.org/@fichier_copie_locale
 function fichier_copie_locale($source) {
-	// Si c'est une image locale pas de souci
+	// Si c'est deja local pas de souci
 	if (!preg_match(',^\w+://,', $source)) {
 		if (_DIR_RACINE)
 			$source = preg_replace(',^'.preg_quote(_DIR_RACINE).',', '', $source);
 		return $source;
 	}
 
-	// Chercher d'abord le doc dans la table des documents, pour se baser sur son type reel
-	$s = sql_select("extension", "spip_documents", "fichier=" . sql_quote($source) . " AND distant='oui' AND extension>''");
-	if ($t = sql_fetch($s)) {
-		$extension = $t['extension'];
+	// Si c'est deja dans la table des documents,
+	// ramener le nom de sa copie potentielle
+	$ext = sql_getfetsel("extension", "spip_documents", "fichier=" . sql_quote($source) . " AND distant='oui' AND extension <> ''");
 
+	if ($ext) return nom_fichier_copie_locale($source, $ext);
 
-	// si la source n'est pas dans la table des documents, 
-	// on determine son extension et on verifie que c'est ok
-	} else {
-		if (
-		// voir si l'extension est pas indiquee dans le nom du fichier et si il aurait pas deja ete rapatrie, auquel cas c'est ok
-		($path_parts = pathinfo($source) AND $ext = $path_parts['extension'] AND $f = _DIR_RACINE . nom_fichier_copie_locale($source, $ext) AND file_exists($f))
-		OR
-		// on la ping et on regarde si son extension est connue et autorisee
-		($a = recuperer_infos_distantes($source,0,false) AND $ext = $a['extension'])
-		OR
-		// a defaut on fait confiance a l'extension
-		($path_parts = pathinfo($source) AND $ext = $path_parts['extension'])
-		) {
-			// verifier que c'est un type autorise
-			$t = sql_fetsel("extension", "spip_types_documents", "extension=".sql_quote($ext));
-			if ($t)
-				$extension = $t['extension'];
-		}
-	}
+	// voir si l'extension indiquee dans le nom du fichier est ok
+	// et si il n'aurait pas deja ete rapatrie
 
-	if (isset($extension))
-		return nom_fichier_copie_locale($source, $extension);
+	$path_parts = pathinfo($source);
+	$ext = $path_part ? $path_parts['extension'] : '';
+
+	if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=".sql_quote($ext))) {
+		$f = nom_fichier_copie_locale($source, $ext);
+		if (file_exists(_DIR_RACINE  . $f))
+		  return $f;
+	}
+	// Ping  pour voir si son extension est connue et autorisee
+	$path_parts = recuperer_infos_distantes($source,0,false) ;
+	$ext = $path_part ? $path_parts['extension'] : '';
+	if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=".sql_quote($ext))) {
+		return nom_fichier_copie_locale($source, $ext);
+	}
 }
 
 
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index 32e83c374c..54ee7bc0fa 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -42,12 +42,17 @@ function get_spip_doc($fichier) {
 		: $fichier;
 }
 
-function contenu_document($id_document)
+// Filtre pour #ID_DOCUMENT ou #URL_DOCUMENT
+
+function contenu_document($arg)
 {
-	$r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($id_document));
-	if (!$r) return '';
-	$f = $r['fichier'];
-	$f = ($r['distant'] =='oui') ? copie_locale($f) : get_spip_doc($f);
+	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') ? copie_locale($f) : get_spip_doc($f);
+	} else if (!$f = copie_locale($arg)) return '';
+
 	return spip_file_get_contents($f);
 }
 
@@ -65,7 +70,7 @@ function generer_url_document_dist($id_document, $args='', $ancre='') {
 
 	// Si droit de voir tous les docs, pas seulement celui-ci
 	// il est inutilement couteux de rajouter une protection
-	if (($row['distant'] == 'oui') OR !autoriser('voir', 'document'))
+	if (($row['distant'] == 'oui') OR autoriser('voir', 'document'))
 		return get_spip_doc($f);
 
 	include_spip('inc/securiser_action');
-- 
GitLab