diff --git a/ecrire/inc_logos.php3 b/ecrire/inc_logos.php3
index c15641e1760e0b785cce86ce7885cf998510d780..805df43c42996046f4494070fe3e69f353e3d4ad 100644
--- a/ecrire/inc_logos.php3
+++ b/ecrire/inc_logos.php3
@@ -58,14 +58,13 @@ function afficher_boite_logo($logo, $survol, $texteon, $texteoff) {
 		echo "<p>";
 		debut_cadre_relief("image-24.gif");
 		echo "<center><font size='2' FACE='Verdana,Arial,Sans,sans-serif'>";
-	
-		$logo_ok = get_image($logo);
-		$survol_ok = (!$logo_ok ? '' : get_image($survol));
-		afficher_logo($logo, $texteon, $logo_ok);
-	
-		if ($logo_ok OR $survol_ok) {
-			echo "<br><br>";
-			afficher_logo($survol, $texteoff, $survol_ok);
+		$desc = decrire_logo($logo);
+		afficher_logo($logo, $texteon, $desc);
+
+		if ($desc) {
+			echo "<br /><br />";
+			$desc = decrire_logo($survol);
+			afficher_logo($survol, $texteoff, $desc);   
 		}
 	
 		echo "</font></center>";
@@ -74,23 +73,30 @@ function afficher_boite_logo($logo, $survol, $texteon, $texteoff) {
 	}
 }
 
+function decrire_logo($racine) {
+	$logo = get_image($racine);
+	if ($logo) {
+		$taille = $logo[1];
+		if ($taille) {
+			list($x, $y, $w, $h) =  $taille;
+			$logo[1] = "$x x $y "._T('info_pixels');
+			$taille = " width='$w' height='$h'";
+		}
+		$logo[2] = "<img src='" .
+			_DIR_IMG . $logo[0] . $logo[2] .
+			"'$taille alt='' />";
+	}
+	return $logo;
+}
+
 function afficher_logo($racine, $titre, $logo) {
 	global $id_article, $coll, $id_breve, $id_auteur, $id_mot, $id_syndic, $connect_id_auteur;
 	global $couleur_foncee, $couleur_claire;
 	global $clean_link;
 
 	include_ecrire('inc_admin.php3');
-
+ 
 	$redirect = $clean_link->getUrl();
-	if ($logo) {
-		$fichier = $logo[0];
-		$taille = $logo[1];
-		$fid = $logo[2];
-		if ($taille) {
-			$taille_html = " WIDTH=$taille[2] HEIGHT=$taille[3] ";
-			$taille_txt = "$taille[0] x $taille[1] "._T('info_pixels');
-		}
-	}
 
 	echo "<b>";
 	echo bouton_block_invisible(md5($titre));
@@ -98,14 +104,14 @@ function afficher_logo($racine, $titre, $logo) {
 	echo "</b>";
 	echo "<font size=1>";
 
-	if ($fichier) {
+	if ($logo) {
+		list($fichier, $taille, $img) =  $logo;
 		$hash = calculer_action_auteur("supp_image $fichier");
 
-		echo "<p><center><img src='" . _DIR_IMG . "$fichier$fid' $taille_html alt='' />";
-
+		echo "<p><center>$img";
 		echo debut_block_invisible(md5($titre));
-		echo "$taille_txt\n";
-		echo "<br />[<A HREF='../spip_image.php3?";
+		echo $taille;
+		echo "\n<br />[<a href='../spip_image.php3?";
 		$elements = array('id_article', 'id_breve', 'id_syndic', 'coll', 'id_mot', 'id_auteur');
 		while (list(,$element) = each ($elements)) {
 			if ($$element) {
diff --git a/ecrire/index.php3 b/ecrire/index.php3
index d6653fbd85074a372b5297a5592ba193903e8e02..207becf09021d8fedbdef43150ebf3ab15baf076 100644
--- a/ecrire/index.php3
+++ b/ecrire/index.php3
@@ -2,7 +2,6 @@
 
 include ("inc.php3");
 include_ecrire ("inc_calendrier.php");
-define('_DIR_IMG', ($GLOBALS['flag_ecrire'] ? "../" : "")."IMG/");
 
 if ($HTTP_REFERER && !strpos($HTTP_REFERER, '/ecrire/')) $bonjour = 'oui';
 
@@ -52,15 +51,10 @@ if ($spip_display != 4) {
 	if ($spip_display != 1) {
 		include_ecrire("inc_logos.php3");
 	
-		$logo = get_image("rubon0");
+		$logo = decrire_logo("rubon0");
 		if ($logo) {
-			$fichier = $logo[0];
-			$taille = $logo[1];
 			$fid = $logo[2];
-			if ($taille) {
-				$taille_html = " WIDTH=$taille[2] HEIGHT=$taille[3] ";
-			}
-			echo "<div style='text-align:center; margin-bottom: 5px;'><a href='naviguer.php3'><img src='" . _DIR_IMG . "$fichier$fid' $taille_html border='0' alt='' /></a></div>";
+			echo "<div style='text-align:center; margin-bottom: 5px;'><a href='naviguer.php3'>$fid</a></div>";
 		}
 	}
 	echo "<div class='verdana1'>";
diff --git a/spip_image.php3 b/spip_image.php3
index c04c3e4c3c15cb32ac6ff938c806a961f01399c8..8792888f27473e39a792b47c61fa807668cc687d 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -2,7 +2,7 @@
 
 include ("ecrire/inc_version.php3");
 include_local("inc-public-global.php3");
-include_ecrire("inc_filtres.php3");
+# include_ecrire("inc_filtres.php3"); semble inutile au 2/10/2004
 include_ecrire("inc_charsets.php3");
 include_ecrire("inc_meta.php3");
 include_ecrire("inc_admin.php3");
@@ -12,11 +12,25 @@ function creer_repertoire_documents($ext) {
 	return  _DIR_IMG . creer_repertoire(_DIR_IMG, $ext);
 }
 
-function effacer_repertoire_documents($nom) {
-	$d = opendir(_DIR_IMG . $nom);
+function copier_document($ext, $orig, $source) {
+	$dest = creer_repertoire_documents($ext) .
+		ereg_replace("[^.a-zA-Z0-9_=-]+", "_", 
+			translitteration(ereg_replace("\.([^.]+)$", "", 
+						      ereg_replace("<[^>]*>", '', basename($orig)))));
+	# bien vu ?
+	if ($orig == ($dest . '.' . $ext)) return $orig;
+	$n = 0;
+	while (@file_exists($newFile = $dest.($n++ ? '-'.$n : '').'.'.$ext));
+	$r = deplacer_fichier_upload($source, $newFile);
+	return ($r ? $newFile : '');
+}
+
+function effacer_repertoire_temporaire($nom) {
+	$d = opendir($nom);
 	while ($f = readdir($d)) {
-		if (is_file($f = _DIR_IMG . "$nom/$f")) @unlink($f);
+		if (is_file($f = "$nom/$f")) @unlink($f);
 		}
+	@rmdir($nom);
 }
 
 function scinder_repertoire_documents($nom) {
@@ -195,12 +209,13 @@ function ajout_image($source, $dest) {
 // Ajouter un document
 //
 
-function ajout_doc($orig, $source, $dest, $mode, $id_document, $doc_vignette='', $titre_vignette='', $descriptif_vignette='', $titre_automatique=true) {
+function ajout_doc($orig, $source, $mode, $id_document, $titre_automatique=true) {
+	$doc_vignette=''; $titre_vignette=''; $descriptif_vignette=''; 
+
 	global $hash_id_auteur, $hash, $id_article, $type;
 
 	//die ("<li>$orig<li>$source<li>$dest<li>$mode<li>$id_document");
 
-
 	//
 	// Securite
 	//
@@ -220,15 +235,8 @@ function ajout_doc($orig, $source, $dest, $mode, $id_document, $doc_vignette='',
 	//
 	// Recopier le fichier
 	//
-			$dest = creer_repertoire_documents($ext) .
-				ereg_replace("[^.a-zA-Z0-9_=-]+", "_", 
-					     translitteration(ereg_replace("\.([^.]+)$", "", supprimer_tags(basename($orig)))));
-			spip_log("spip_image '$dest' '$orig'");
-			$n = 0;
-			while (@file_exists($newFile = $dest.($n++ ? '-'.$n : '').'.'.$ext));
-			$dest_path = $newFile;
-			
-			if (!deplacer_fichier_upload($source, $dest_path)) return ;
+			$dest_path = copier_document($ext,$orig, $source);
+			if (!$dest_path) return ;
 
 	//
 	// Preparation
@@ -391,7 +399,6 @@ function creer_fichier_vignette($vignette) {
 		if (!$fichier_vignette)
 			list($fichier_vignette) = vignette_par_defaut('txt');
 	}
-	spip_log($vignette . $fichier_vignette);
 	return $fichier_vignette;
 }
 
@@ -489,127 +496,118 @@ function tourner_document($var_rot, $doc_rotate, $convert_command) {
 	}
 }
 
-//
-// ajouter un document
-//
-
-if ($ajout_doc == 'oui') {
-
-// image_name n'est valide que par POST http, mais pas par la methode ftp/upload
-// par ailleurs, pour un fichier ftp/upload, il faut effacer l'original nous-memes
-if (!$image_name AND $image2) {
-	$image = "ecrire/upload/".$image2;
-	$image_name = $image;
-	$supprimer_ecrire_upload = $image;
-} 
-else {
-	$supprimer_ecrire_upload = '';
-}
-	if (eregi("\.zip$",$image_name) AND !$action_zip){
-		// Pretraitement des fichiers ZIP
-		// Recopier le fichier
-		creer_repertoire_documents("tmp");
-		$dest = creer_repertoire_documents("tmp_zip");
-		
-		$dest .= ereg_replace("[^.a-zA-Z0-9_=-]+", "_", translitteration(ereg_replace("\.([^.]+)$", "", supprimer_tags(basename($image_name)))));
-		$dest .= ".zip";
-		$n = 0;
-		if (!deplacer_fichier_upload($image, $dest)) 
-			exit;
-
+function afficher_compactes($image_name) {
 
-		$image_name = $dest;
-
-		require_once('ecrire/pclzip.lib.php');
-		$zip = new PclZip($image_name);
+	$afficher_message_zip = false;
+	$zip = new PclZip($image_name);
 
-		if (($list = $zip->listContent()) == 0) {
-			// pas possible de decompacter: installer comme fichier zip joint
-			$afficher_message_zip = false;
-		}
-		else {
-			// Verifier si le contenu peut etre uploade (verif extension)
-			for ($i=0; $i<sizeof($list); $i++) {
-				for(reset($list[$i]); $key = key($list[$i]); next($list[$i])) {
-				
-					if ($key == "stored_filename") {
-						if (ereg("\.([^.]+)$", $list[$i][$key], $match)) {
-							$ext = addslashes(strtolower($match[1]));
-							$ext = corriger_extension($ext);
-
-							// Regexp des fichiers a ignorer
-							if (!ereg("^(\.|.*/\.|.*__MACOSX/)",
-							$list[$i][$key])) {
-								$query = "SELECT * FROM spip_types_documents WHERE extension='$ext' AND upload='oui'";
-								$result = spip_query($query);
-								if ($row = @spip_fetch_array($result)) {
-									$afficher_message_zip = true;
-									$aff_fichiers .= "<li>".$list[$i][$key]."</li>";
-								}
+	if ($list = $zip->listContent()) {
+	// si pas possible de decompacter: installer comme fichier zip joint
+	// Verifier si le contenu peut etre uploade (verif extension)
+		for ($i=0; $i<sizeof($list); $i++) {
+			for(reset($list[$i]); $key = key($list[$i]); next($list[$i])) {
+			
+				if ($key == "stored_filename") {
+					if (ereg("\.([^.]+)$", $list[$i][$key], $match)) {
+						$ext = addslashes(strtolower($match[1]));
+						$ext = corriger_extension($ext);
+
+						// Regexp des fichiers a ignorer
+						if (!ereg("^(\.|.*/\.|.*__MACOSX/)",
+						$list[$i][$key])) {
+							$query = "SELECT * FROM spip_types_documents WHERE extension='$ext' AND upload='oui'";
+							$result = spip_query($query);
+							if ($row = @spip_fetch_array($result)) {
+								$afficher_message_zip = true;
+								$aff_fichiers .= "<li>".$list[$i][$key]."</li>";
 							}
 						}
 					}
 				}
 			}
 		}
+	}
 
-		if ($afficher_message_zip) {
-			// presenter une interface pour choisir si fichier joint ou decompacter
-			include_ecrire ("inc_presentation.php3");
-			install_debut_html(_T('upload_fichier_zip'));
+	if (!$afficher_message_zip) return false;
+	  
+		// 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>";
-			
+		echo "<p>"._T('upload_fichier_zip_texte')."</p>";
+		echo "<p>"._T('upload_fichier_zip_texte2')."</p>";
 		
-			if ($HTTP_POST_VARS) $vars = $HTTP_POST_VARS;
-			else $vars = $HTTP_GET_VARS;
-			
-			$link = new Link();
-			$link->delVar("image");
-			$link->delVar("image2");
-			$link->addVar("image_name", $image_name);
+		$link = new Link();
+		$link->delVar("image");
+		$link->delVar("image2");
+		$link->addVar("image_name", $image_name);
 
-			echo $link->getForm('POST');
-			
-			echo _L('')."<div><input type='radio' checked name='action_zip' value='telquel'>"._T('upload_zip_telquel')."</div>";
-			echo "<div><input type='radio' name='action_zip' value='decompacter'>"._T('upload_zip_decompacter')."</div>";
-			
-			echo "<ul>$aff_fichiers</ul>";
-			
-			echo "<div>&nbsp;</div>";
-			echo "<div style='text-align: right;'><input class='fondo' style='font-size: 9px;' TYPE='submit' NAME='Valider' VALUE='"._T('bouton_valider')."'></div>";
+		echo $link->getForm('POST');
+		
+		echo _L('')."<div><input type='radio' checked name='action_zip' value='telquel'>"._T('upload_zip_telquel')."</div>";
+		echo "<div><input type='radio' name='action_zip' value='decompacter'>"._T('upload_zip_decompacter')."</div>";
+		
+		echo "<ul>$aff_fichiers</ul>";
+		
+		echo "<div>&nbsp;</div>";
+		echo "<div style='text-align: right;'><input class='fondo' style='font-size: 9px;' TYPE='submit' NAME='Valider' VALUE='"._T('bouton_valider')."'></div>";
+		
+		echo "</form>";
+		install_fin_html();
 			
-			echo "</form>";
-			install_fin_html();
-				
-			exit();
-		}
-		else {
-			$image = $image_name;
-			$supprimer_ecrire_upload = $image;
-		}
+		return true;
+}
+
+//
+// ajouter un document
+//
+
+if ($ajout_doc == 'oui') {
+
+// image_name n'est valide que par POST http, mais pas par la methode ftp/upload
+// par ailleurs, pour un fichier ftp/upload, il faut effacer l'original nous-memes
+	if (!$image_name AND $image2) {
+		$image = "ecrire/upload/".$image2;
+		$image_name = $image;
+	} 
+	if (eregi("\.zip$",$image_name))
+	  # action_zip indique un rappel par la fonction affiche_compactes
+	  if (!$action_zip){
+		// on va se rappeler: copier le fichier car PHP va le virer
+		$image_name = copier_document("zip", $image_name, $image);
+		// anormal, on se tire
+		if (!$image_name) exit;
+		// renvoyer un formulaire demandant si on deballe ou pas
+		require_once('ecrire/pclzip.lib.php');
+		if (afficher_compactes($image_name)) exit;
+		// pas possible de deballer, on continue
+		$forcer_document = 'oui';
+		$image = $image_name;
 	}
-	else if (eregi("\.zip$",$image_name)) {
+	  else {
+	    // reponse au formulaire
 		if ($action_zip == "telquel") {
-			$effacer_tmp = true;
-			
-			ajout_doc($image_name, $image_name, $fichier, "document", $id_document);
+			$forcer_document = 'oui';
 			
 		} else {
-		
 			require_once('ecrire/pclzip.lib.php');
   			$archive = new PclZip($image_name);
-			$image_name = _DIR_IMG . "tmp";
-			$list = $archive->extract(PCLZIP_OPT_PATH, $image_name, PCLZIP_OPT_REMOVE_ALL_PATH);
+			$tmp_dir = creer_repertoire_documents($hash);
+			$archive->extract(PCLZIP_OPT_PATH, $tmp_dir, PCLZIP_OPT_REMOVE_ALL_PATH);
+			# virer le zip après le déballage
+			@unlink($image_name);
+			$image_name = $tmp_dir;
 
-			$effacer_tmp = true;
 		}
-	}
-
+	  }
 
-	if (is_dir($image_name)) {
+	if (!is_dir($image_name)) {
+		ajout_doc($image_name,
+			  $image,
+			  ($forcer_document == 'oui' ? "document" : $mode),
+			  $id_document);
+	} else {
 		include_ecrire('inc_documents.php3');
 		$fichiers = fichiers_upload($image_name);
 		while (list(,$f) = each($fichiers)) {
@@ -621,24 +619,15 @@ else {
 				if ($inclus)
 					$req .= " AND inclus='$inclus'";
 				if (@spip_fetch_array(spip_query($req)))
-					ajout_doc($f, $f, '', 'document', '','','','',false);
+					ajout_doc($f, $f, 'document', false);
 			}
 		}
-	} else {
-		if ($forcer_document == 'oui')
-			ajout_doc($image_name, $image, $fichier, "document", $id_document);
-		else
-			ajout_doc($image_name, $image, $fichier, $mode, $id_document);
-	}
-	
-	
-	if ($effacer_tmp) {
-	  effacer_repertoire_documents('tmp');
-	  effacer_repertoire_documents('tmp_zip');
 
+# détruire le repertoire de deballage
+		if ($tmp_dir) effacer_repertoire_temporaire($tmp_dir);
 	}
  }
- 
+
 $redirect = '';
 
 if ($test_vignette) // appel de ecrire/config-fonction