From 08d2dbd1ebc8b7a4dcf15ccba6fde1b81cc1f2f5 Mon Sep 17 00:00:00 2001
From: Antoine Pitrou <pitrou@free.fr>
Date: Mon, 4 Mar 2002 01:36:24 +0000
Subject: [PATCH] =?UTF-8?q?Repartir=20les=20documents=20dans=20des=20r?=
 =?UTF-8?q?=C3=A9pertoires=20en=20fonction=20du=20type=20(extension=20du?=
 =?UTF-8?q?=20fichier).=20Suggestions=20pour=20une=20meilleure=20r=C3=A9pa?=
 =?UTF-8?q?rtition=20=3F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_version.php3 |  2 +-
 inc-cache.php3          | 25 +++++++++++++++++++++++++
 inc-public.php3         |  8 ++++++--
 spip_image.php3         | 19 +++++++++++--------
 4 files changed, 43 insertions(+), 11 deletions(-)

diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index f89579b5da..85e77867a4 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -236,7 +236,7 @@ if ($ob_exists) {
 	// special bug Netscape Win 4.0x
 	if (eregi("Mozilla/4\.0[^ ].*Win", $HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
 		$use_gz = false;
-	}	
+	}
 
 	if ($use_gz) {
 		@ob_start("ob_gzhandler");
diff --git a/inc-cache.php3 b/inc-cache.php3
index dce3e4a04a..de81ecd9ef 100644
--- a/inc-cache.php3
+++ b/inc-cache.php3
@@ -6,6 +6,31 @@ if (defined("_INC_CACHE")) return;
 define("_INC_CACHE", "1");
 
 
+//
+// Retourne true si le sous-repertoire peut etre cree, false sinon
+//
+
+function creer_repertoire($base, $subdir) {
+	if (file_exists("$base/.plat")) return false;
+	$path = $base.'/'.$subdir;
+	if (file_exists($path)) return true;
+
+	@mkdir($path, 0777);
+	@chmod($path, 0777);
+	$ok = false;
+	if ($f = @fopen("$path/.test", "w")) {
+		@fputs($f, '<?php $ok = true; ?'.'>');
+		@fclose($f);
+		include("$path/.test");
+	}
+	if (!$ok) {
+		$f = fopen("$base/.plat", "w");
+		fclose($f);
+	}
+	return $ok;
+}
+
+
 function purger_repertoire($dir, $age, $regexp = '') {
 	$handle = opendir($dir);
 	$t = time();
diff --git a/inc-public.php3 b/inc-public.php3
index a3246d52f8..40bdb5942d 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -2,6 +2,7 @@
 
 $dir_ecrire = 'ecrire/';
 include ("ecrire/inc_version.php3");
+include_local ("inc-cache.php3");
 
 //
 // Ajouter un forum
@@ -24,7 +25,10 @@ $fichier_requete = eregi_replace('&(submit|valider|(var_[^=&]*)|recalcul)=[^&]*'
 $fichier_cache = substr(rawurlencode($fichier_requete), 0, 128);
 $sousrep_cache = substr(md5($fichier_cache), 0, 1);
 
-if (!file_exists("CACHE/.plat") AND !file_exists("CACHE/$sousrep_cache")) {
+if (creer_repertoire("CACHE", $sousrep_cache))
+	$fichier_cache = "$sousrep_cache/$fichier_cache";
+
+/*if (!file_exists("CACHE/.plat") AND !file_exists("CACHE/$sousrep_cache")) {
 	@mkdir("CACHE/$sousrep_cache", 0777);
 	@chmod("CACHE/$sousrep_cache", 0777);
 	$ok = false;
@@ -42,7 +46,7 @@ if (!file_exists("CACHE/.plat") AND !file_exists("CACHE/$sousrep_cache")) {
 if (!file_exists("CACHE/.plat")) {
 	$fichier_cache = "$sousrep_cache/$fichier_cache";
 }
-
+*/
 $chemin_cache = "CACHE/$fichier_cache";
 
 
diff --git a/spip_image.php3 b/spip_image.php3
index 122e9a86c6..e5b5769067 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -5,6 +5,7 @@ include ("ecrire/inc_version.php3");
 include_ecrire("inc_connect.php3");
 include_ecrire("inc_meta.php3");
 include_ecrire("inc_admin.php3");
+include_local("inc-cache.php3");
 
 if ($HTTP_POST_VARS) $vars = $HTTP_POST_VARS;
 else $vars = $HTTP_GET_VARS;
@@ -102,8 +103,6 @@ function ajout_doc($orig, $source, $dest, $mode, $id_document) {
 		$type_upload = $row['upload'];
 	}
 
-	echo "$orig<p>$source<p>";
-
 	// Ne pas accepter les types non autorises
 	if ($type_upload != 'oui') return;
 	if ($type_inclus == 'non' AND $mode == 'vignette') return;
@@ -132,22 +131,26 @@ function ajout_doc($orig, $source, $dest, $mode, $id_document) {
 		else
 			$dest = "doc-$id_document";
 	}
-	$dest = ereg_replace("\.([^.]+)$", "", $dest).".$ext";
-	$loc = "IMG/$dest";
+	$dest = ereg_replace("\.([^.]+)$", "", $dest) . ".$ext";
 
-	if (!deplacer_fichier_upload($source, $loc)) return;
+	if (creer_repertoire("IMG", $ext))
+		$dest_path = "IMG/$ext/$dest";
+	else
+		$dest_path = "IMG/$dest";
+
+	if (!deplacer_fichier_upload($source, $dest_path)) return;
 
 	//
 	// Recopier le fichier
 	//
 
-	$size_image = getimagesize($loc);
+	$size_image = getimagesize($dest_path);
 	$type_image = $size_image[2];
 	if ($type_image) {
 		$largeur = $size_image[0];
 		$hauteur = $size_image[1];
 	}
-	$taille = filesize($loc);
+	$taille = filesize($dest_path);
 
 	if ($nouveau) {
 		if (!$mode) $mode = $type_image ? 'vignette' : 'document';
@@ -155,7 +158,7 @@ function ajout_doc($orig, $source, $dest, $mode, $id_document) {
 		if ($largeur && $hauteur) $update .= "titre='image $largeur x $hauteur', ";
 	}
 
-	$query = "UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier='$loc' ".
+	$query = "UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier='$dest_path' ".
 		"WHERE id_document=$id_document";
 	mysql_query($query);
 	if ($id_document_lie) {
-- 
GitLab