From 89b1281c1bf768810678fc174373be0cb5a05b25 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Wed, 6 Oct 2004 16:25:50 +0000
Subject: [PATCH] vignettes avec un minimum d'indirections

---
 ecrire/inc_documents.php3 | 89 +++++++++++++++++++++------------------
 spip_image.php3           | 81 ++++++++++++-----------------------
 2 files changed, 74 insertions(+), 96 deletions(-)

diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index 938599b177..8c2761989c 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -43,6 +43,26 @@ function vignette_par_defaut($type_extension, $size=true) {
 }
 
 
+function vignette_previsu_ou_par_defaut($fichier, $extension) {
+  // si pas de vignette, utiliser la vignette par defaut
+  // ou essayer de creer une previsu si permis
+  $formats = ','.lire_meta('formats_graphiques').',';
+  if ((strpos($formats, ",$extension,") === false) || 
+      (lire_meta("creer_preview") != 'oui')) {
+    return vignette_par_defaut($extension ? $extension : 'txt', true);
+  } else {
+    return array(($flag_ecrire?'../':'').'spip_image.php3?vignette='.rawurlencode(str_replace('../', '', $fichier)), 0, 0);
+  }
+}
+
+function document_et_vignette($document) 
+{
+	eregi('\.([a-z0-9]+)$', $document, $regs);
+	list($fichier, $largeur, $hauteur) = 
+		vignette_previsu_ou_par_defaut($document, $regs[1]);
+	return "<a href='../$document'><img src='$fichier' border='0'></a>";
+}
+
 //
 // Integration (embed) multimedia
 //
@@ -233,18 +253,8 @@ function integre_image($id_document, $align, $type_aff) {
 			$hauteur_vignette = $hauteur;
 		}
 
-		// si pas de vignette, utiliser la vignette par defaut
-		// ou essayer de creer une preview (images)
-		if (!$url_fichier_vignette) {
-			if (!ereg(",$extension,", ','.lire_meta('formats_graphiques').',')) {
-				list($url_fichier_vignette, $largeur_vignette, $hauteur_vignette) = vignette_par_defaut($extension);
-			} else {
-				$url_fichier_vignette = ($flag_ecrire?'../':'').'spip_image.php3?vignette='.rawurlencode(str_replace('../', '', $fichier));
-			}
-		}
-
-		if ($type_aff=='fichier_vignette')
-			return $url_fichier_vignette;
+		if (!$url_fichier_vignette) 
+		  list($url_fichier_vignette, $largeur_vignette, $hauteur_vignette) = vignette_previsu_ou_par_defaut($fichier, $extension);
 
 		if ($url_fichier_vignette) {
 			$vignette = "<img src='$url_fichier_vignette' border='0'";
@@ -375,6 +385,7 @@ function texte_upload_manuel($dir, $inclus = '') {
 
 
 function texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, $fichier_document) {
+#  spip_log("texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, $fichier_document)");
 	if ($largeur_vignette > 120) {
 		$rapport = 120.0 / $largeur_vignette;
 		$largeur_vignette = 120;
@@ -448,8 +459,6 @@ function afficher_upload($link, $redirect='', $intitule, $inclus = '', $afficher
 }
 
 
-
-
 //
 // Afficher les documents non inclus
 // (page des articles)
@@ -512,14 +521,14 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 			$titre = $document->get('titre');
 			$descriptif = $document->get('descriptif');
 			$fichier = generer_url_document($id_document);
+
 			$fichier = substr($fichier, 3, strlen($fichier));
 			$largeur = $document->get('largeur');
 			$hauteur = $document->get('hauteur');
 			$taille = $document->get('taille');
 			$date = $document->get('date');
 			$mode = $document->get('mode');
-			
-					
+
 			echo "<div style='text-align:center;'>";
 			if ($flag_modif) {
 			
@@ -582,25 +591,21 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 			//
 			// Recuperer la vignette
 			//
+
 			if ($id_vignette >0) {
-				$vignette = fetch_document($id_vignette);
-			
+				$vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = $id_vignette"));;
 				if ($vignette) {
 					$fichier_vignette = generer_url_document($id_vignette);
-					$largeur_vignette = $vignette->get('largeur');
-					$hauteur_vignette = $vignette->get('hauteur');
-					$taille_vignette = $vignette->get('taille');
+					$largeur_vignette = $vignette['largeur'];
+					$hauteur_vignette = $vignette['hauteur'];
+					$taille_vignette = $vignette['taille'];
 			
 			
 					echo texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, "../$fichier");
 				}
 			}
-			else {
-				$fichier_vignette = "../spip_image.php3?vignette=$fichier";
-				echo "<a href='../$fichier'><img src='$fichier_vignette' border='0'></a>";
-			}
-				echo "</div>";
-					
+			else { echo document_et_vignette($fichier); }
+			echo "</div>";
 					
 			if ($flag_modif) {
 					
@@ -723,7 +728,6 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 	}
 
 
-
 	//// Documents associes
 	$query = "SELECT * FROM #table AS docs, spip_documents_".$type."s AS l ".
 		"WHERE l.id_$type=$id_article AND l.id_document=docs.id_document ".
@@ -787,21 +791,22 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 			
 		
 			if ($id_vignette > 0) {
-				$vignette = fetch_document($id_vignette);
+				$vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = $id_vignette"));;
 			
 				if ($vignette) {
 					$fichier_vignette = generer_url_document($id_vignette);
-					$largeur_vignette = $vignette->get('largeur');
-					$hauteur_vignette = $vignette->get('hauteur');
-					$taille_vignette = $vignette->get('taille');
+					$largeur_vignette = $vignette['largeur'];
+					$hauteur_vignette = $vignette['hauteur'];
+					$taille_vignette = $vignette['taille'];
 				}
 				echo "<div style='text-align:center;'>";
 				echo texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, "../$fichier");
 				echo "</div>";
 			}
 			else {
-				$fichier_vignette = "../spip_image.php3?vignette=$fichier";
-				echo "<div style='text-align: center;'><a href='../$fichier'><img src='$fichier_vignette' border='0'></a></div>";
+				echo "<div style='text-align: center;'>",
+				  document_et_vignette($fichier), 
+				  "</div>";
 			}
 			
 			
@@ -996,12 +1001,12 @@ function afficher_horizontal_document($id_document, $image_link, $redirect_url =
 	//
 	// Recuperer la vignette
 	//
-	if ($id_vignette) $vignette = fetch_document($id_vignette);
+	if ($id_vignette) $vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = $id_vignette"));;
 	if ($vignette) {
 		$fichier_vignette = generer_url_document($id_vignette);
-		$largeur_vignette = $vignette->get('largeur');
-		$hauteur_vignette = $vignette->get('hauteur');
-		$taille_vignette = $vignette->get('taille');
+		$largeur_vignette = $vignette['largeur'];
+		$hauteur_vignette = $vignette['hauteur'];
+		$taille_vignette = $vignette['taille'];
 	}
 
 	echo "<p></p><div style='border: 1px dashed #666666; padding: 5px; background-color: #f0f0f0;'>";
@@ -1362,12 +1367,12 @@ function afficher_case_document($id_document, $image_link, $redirect_url = "", $
 		// Edition de la vignette
 		//
 
-		if ($id_vignette) $vignette = fetch_document($id_vignette);
+		if ($id_vignette) $vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = $id_vignette"));;
 		if ($vignette) {
 			$fichier_vignette = generer_url_document($id_vignette);
-			$largeur_vignette = $vignette->get('largeur');
-			$hauteur_vignette = $vignette->get('hauteur');
-			$taille_vignette = $vignette->get('taille');
+			$largeur_vignette = $vignette['largeur'];
+			$hauteur_vignette = $vignette['hauteur'];
+			$taille_vignette = $vignette['taille'];
 		}
 
 		echo "<p></p><div style='border: 1px dashed #666666; padding: 5px; background-color: #f0f0f0;'>";
diff --git a/spip_image.php3 b/spip_image.php3
index debc5cfbbf..4bae55fe94 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -6,10 +6,18 @@ include_ecrire("inc_meta.php3");
 include_ecrire("inc_admin.php3");
 
 function copier_document($ext, $orig, $source) {
-	$dest = creer_repertoire_documents($ext) .
+
+	$dir = creer_repertoire_documents($ext);
+	$dest = $dir .
 		ereg_replace("[^.a-zA-Z0-9_=-]+", "_", 
 			translitteration(ereg_replace("\.([^.]+)$", "", 
 						      ereg_replace("<[^>]*>", '', basename($orig)))));
+	/* bientot, en mieux ....
+	if ((lire_meta("creer_htpasswd")) == 'oui')
+	  {include_ecrire("inc_cron.php3");
+	    verifier_htaccess($dir);
+	  }
+	*/
 	# bien vu ?
 	if ($orig == ($dest . '.' . $ext)) return $orig;
 	$n = 0;
@@ -26,11 +34,6 @@ function effacer_repertoire_temporaire($nom) {
 	@rmdir($nom);
 }
 
-function scinder_repertoire_documents($nom) {
-  eregi('^' . _DIR_IMG . '(.*/)?([^\./]+)\.([a-z0-9]+)$', $nom, $regs);
-  return $regs;
-}
-
 function effacer_image($nom) {
 	global $hash_id_auteur, $hash;
 
@@ -75,10 +78,9 @@ function tester_vignette ($test_vignette) {
 		include_ecrire('inc_logos.php3');
 		$taille_preview = lire_meta("taille_preview");
 		if ($taille_preview < 10) $taille_preview = 120;
-		$loc =_DIR_IMG . "test_$test_vignette";
-		if ($preview = creer_vignette(_DIR_IMG . 'test_image.jpg',
-					      $taille_preview, $taille_preview, 'jpg', $loc, $test_vignette, true))
-			return ("$loc." . $preview['format']);
+		if ($preview = creer_vignette(_DIR_IMG . 'test_image.jpg', $taille_preview, $taille_preview, 'jpg', '', "test_$test_vignette", $test_vignette, true))
+
+			return ($preview['fichier']);
 	}
 	return '';
 }
@@ -192,7 +194,7 @@ function ajout_image($source, $dest) {
 // Ajouter un document
 //
 
-function ajout_doc($orig, $source, $mode, $id_document, $titre_automatique=true) {
+function ajout_doc($orig, $source, $mode, $id_document) {
 	global $hash_id_auteur, $hash, $id_article, $type;
 
 	//
@@ -237,7 +239,6 @@ function ajout_doc($orig, $source, $mode, $id_document, $titre_automatique=true)
 				}
 			}
 
-
 	//
 	// Mettre a jour les infos du document uploade
 	//
@@ -251,39 +252,25 @@ function ajout_doc($orig, $source, $mode, $id_document, $titre_automatique=true)
 
 			if ($nouveau) {
 				if (!$mode) $mode = ($type_image AND $type_inclus == 'image') ? 'vignette' : 'document';
-				$titre = ereg_replace("\..*$", "", $orig);
-				$titre = ereg_replace("ecrire/|upload/", "", $titre);
-				$titre = strtr($titre, "_", " ");
-				if (!$titre_automatique) $titre = "";
-				//$update = "mode='$mode', titre='".addslashes($titre)."', ";
 				$update = "mode='$mode', ";
 			}
 
 			$query = "UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier='$dest_path' ".
 		"WHERE id_document=$id_document";
 			spip_query($query);
-			
+
 			if ($id_document_lie) {
 				$query = "UPDATE spip_documents SET id_vignette=$id_document WHERE id_document=$id_document_lie";
 				spip_query($query);
 				$id_document = $id_document_lie; // pour que le 'return' active le bon doc.
 			}
-
 	// Creer la vignette
 			if ($mode == 'document' AND lire_meta('creer_preview') == 'oui'
 			    AND ereg(",$ext,", ','.lire_meta('formats_graphiques').',')) {
 				include_ecrire('inc_logos.php3');
-				$regs = scinder_repertoire_documents($dest_path);
-				if ($regs) {
-					$d = lire_meta('taille_preview');
-					creer_vignette($dest_path, 
-						       $d,
-						       $d,
-						       'jpg', 
-						       creer_repertoire_documents('vignettes').$regs[2].'-s',
-						       'AUTO',
-						       true);
-				}
+				$f = ereg_replace(".$ext$", '-s', basename($dest_path));
+				$d = lire_meta('taille_preview');
+				creer_vignette($dest_path, $d, $d, 'jpg', 'vignettes', $f, 'AUTO', true);
 			}
 		}
 	}
@@ -349,31 +336,18 @@ function gdRotate($imagePath,$rtt){
 
 //
 // Creation automatique de vignette new style
-//
-function creer_fichier_vignette($vignette) {
-	$fichier_vignette = '';
-	$regs = scinder_repertoire_documents($vignette);
-	if ($regs) {
-		$source = $regs[0];
-		$format = $regs[3];
-		$destination = creer_repertoire_documents('vignettes').$regs[2].'-s';	// adresse new style
-
-		if (lire_meta("creer_preview") == 'oui') {
-			$taille_preview = lire_meta("taille_preview");
-			if ($taille_preview < 10) $taille_preview = 120;
-			include_ecrire('inc_logos.php3');
-			if ($preview = creer_vignette($source, $taille_preview, $taille_preview, $format, $destination))
-				$fichier_vignette = $preview['fichier'];
-		}
-	}
+// Normalement le test est vérifié donc on ne rend rien sinon
 
-	if (!$fichier_vignette) {
-		include_ecrire('inc_documents.php3');
-		list($fichier_vignette) = vignette_par_defaut($format);
-		if (!$fichier_vignette)
-			list($fichier_vignette) = vignette_par_defaut('txt');
+function creer_fichier_vignette($vignette) {
+	if ($vignette && lire_meta("creer_preview") == 'oui') {
+		eregi('\.([a-z0-9]+)$', $vignette, $regs);
+		$format = $regs[1];
+		$taille_preview = lire_meta("taille_preview");
+		if ($taille_preview < 10) $taille_preview = 120;
+		include_ecrire('inc_logos.php3');
+		$preview = creer_vignette($vignette, $taille_preview, $taille_preview, $format, 'vignettes', basename($vignette).'-s');
+		return $preview['fichier'];
 	}
-	return $fichier_vignette;
 }
 
 function supprime_document_et_vignette($doc_supp) {
@@ -507,7 +481,6 @@ function afficher_compactes($image_name) {
 		// presenter une interface pour choisir si fichier joint ou decompacter
 		include_ecrire ("inc_presentation.php3");
 		install_debut_html(_T('upload_fichier_zip'));
-	
 		
 		echo "<p>"._T('upload_fichier_zip_texte')."</p>";
 		echo "<p>"._T('upload_fichier_zip_texte2')."</p>";
-- 
GitLab