diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index 911f3f5e9a0e01c3f3134bf2b86e8e0dda5dafdc..8c0596c678b993242643567d9cd649bdb9658ac8 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -591,8 +591,11 @@ $document=0) {
 
 	$res .= "</div>\n" . fin_block();
 
-	if (!$redirect)
+	if (!$redirect) 
 		$redirect = $clean_link->getUrl();
+	if ($type == "rubrique")
+		$redirect .='&amp;action=calculer_rubriques';
+		
 	return construire_upload($res,
 				array(
 				'redirect' => $redirect,
@@ -614,7 +617,7 @@ function construire_upload($corps, $args, $enctype='')
 	    $res .= "\n<input type='hidden' name='$k' value='$v' />";
 
 # ici enlever $action pour uploader directemet dans l'espace prive (UPLOAD_DIRECT)
-	return "\n<form method='post'' action='" .
+	return "\n<form method='post' action='" .
 	  generer_url_public('spip_action.php') .
 	  "'" .
 	  (!$enctype ? '' : " enctype='$enctype'") .
@@ -663,25 +666,28 @@ function afficher_transferer_upload($type, $texte_upload)
 
 function afficher_portfolio(
 	$documents = array(),	# liste des documents, avec toutes les donnees
-	$id_article, 			# numero de l'article ou de la rubrique
-	$type = "article",		# article ou rubrique ?
+	$id_article, 		# numero de l'article ou de la rubrique
+	$type = "article",	# article ou rubrique ?
 	$album = 'portfolio',	# album d'images ou de documents ?
 	$flag_modif = false,	# a-t-on le droit de modifier ?
-	$redirect_url,			# adresse du retour apres spip_action
-	$couleur				# couleur des cases du tableau
+	$couleur		# couleur des cases du tableau
 ) {
 	charger_generer_url();
 	global $connect_id_auteur, $connect_statut;
 	global $options,  $couleur_foncee;
 	global $spip_lang_left, $spip_lang_right;
 
+	$redirect_url = new Link();
+	if ($type == "rubrique")
+		$redirect_url->addVar('action', 'calculer_rubriques');
+	$redirect_url = $redirect_url->getUrl();
+
 	// la derniere case d'une rangee
 	$bord_droit = ($album == 'portfolio' ? 2 : 1);
 
 	foreach ($documents as $document) {
 		$id_document = $document['id_document'];
 		$id_vignette = $document['id_vignette'];
-		$id_type = $document['id_type'];
 		$titre = $document['titre'];
 		$descriptif = $document['descriptif'];
 		$url = generer_url_document($id_document);
@@ -711,50 +717,7 @@ entites_html($document['fichier'])."\" />\n";
 			// bloc vignette + rotation
 			echo "<div style='text-align:center;'>";
 			
-
-			# 'extension', a ajouter dans la base quand on supprimera spip_types_documents
-			switch ($id_type) {
-				case 1:
-					$document['extension'] = "jpg";
-					break;
-				case 2:
-					$document['extension'] = "png";
-					break;
-				case 3:
-					$document['extension'] = "gif";
-					break;
-			}
-
-			// bloc rotation de l'image
-			// si c'est une image, qu'on sait la faire tourner, qu'elle
-			// n'est pas distante, et qu'elle n'a pas de vignette perso !
-			if ($flag_modif
-			AND strstr($GLOBALS['meta']['formats_graphiques'], $document['extension'])
-			AND $document['distant']!='oui'
-			AND !$id_vignette) {
-				echo "<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>";
-				$process = $GLOBALS['meta']['image_process'];
-				// pour TEST: $process = 'imagick' ;
-				if ($process == 'imagick' OR $process == 'gd2'
-				OR $process == 'convert' OR $process == 'netpbm') {
-					// tournerr a gauche
-					echo http_href_img(bouton_tourner_document($id_article, $redirect_url, $id_document, $album, -90), 'tourner-gauche.gif', "style='border-width: 0px;'", _T('image_tourner_gauche'), '', 'bouton_rotation');
-					echo "<br />";
-
-					// tourner a droite
-					echo http_href_img(bouton_tourner_document($id_article, $redirect_url, $id_document, $album, 90),
-						'tourner-droite.gif', "style='border-width: 0px;'",
-						_T('image_tourner_droite'), '', 'bouton_rotation');
-					echo "<br />";
-
-					// tourner 180
-
-					echo http_href_img(bouton_tourner_document($id_article, $redirect_url, $id_document, $album, 180),
-						'tourner-180.gif', "style='border-width: 0px;'",
-						_T('image_tourner_180'), '', 'bouton_rotation');
-				}
-				echo "</div>\n";
-			} // fin bloc rotation
+			afficher_rotateurs($album, $document, $flag_modif, $id_article, $id_document, $id_vignette);
 
 			//
 			// Recuperer la vignette et afficher le doc
@@ -877,19 +840,55 @@ entites_html($document['fichier'])."\" />\n";
 			}
 			
 			document_vu($id_document);
-		}
+	}
 
-		// fermer la derniere ligne
-		if ($case > 0) {
+	// fermer la derniere ligne
+	if ($case > 0) {
 			echo "<td style='border-$spip_lang_left: 1px solid $couleur;'>&nbsp;</td>";
 			echo "</tr>";
-		}
+	}
+}
 
+function  afficher_rotateurs($album, $document, $flag_modif, $id_article, $id_document, $id_vignette) {
+	global $spip_lang_right;
+	static $ftype = array(1 => 'jpg', 2 => 'png', 3 => 'gif');
+
+	$process = $GLOBALS['meta']['image_process'];
+
+	// bloc rotation de l'image
+	// si c'est une image, qu'on sait la faire tourner, qu'elle
+	// n'est pas distante, et qu'elle n'a pas de vignette perso 
+	// et qu'on a la bibli !
+	if ($flag_modif  AND $document['distant']!='oui' AND !$id_vignette
+	AND strstr($GLOBALS['meta']['formats_graphiques'],
+		   $ftype[$document['id_type']])
+	AND ($process == 'imagick' OR $process == 'gd2'
+	     OR $process == 'convert' OR $process == 'netpbm') ) {
+
+		echo "\n<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>";
+
+		  // tournerr a gauche
+		echo http_href_img(bouton_tourner_document($id_article, $id_document, $album, -90), 'tourner-gauche.gif', "style='border-width: 0px;'", _T('image_tourner_gauche'), '', 'bouton_rotation');
+		echo "<br />";
+
+		// tourner a droite
+		echo http_href_img(bouton_tourner_document($id_article, $id_document, $album, 90),
+					   'tourner-droite.gif', "style='border-width: 0px;'",
+					   _T('image_tourner_droite'), '', 'bouton_rotation');
+		echo "<br />";
+
+		// tourner 180
+		echo http_href_img(bouton_tourner_document($id_article, $id_document, $album, 180),
+				   'tourner-180.gif', "style='border-width: 0px;'",
+				   _T('image_tourner_180'), '', 'bouton_rotation');
+		
+		echo "</div>\n";
+	}
 }
 
-function bouton_tourner_document($id_article, $redirect, $id, $album, $rot)
+function bouton_tourner_document($id_article, $id, $album, $rot)
 {
-  return generer_action_auteur('tourner', $id, $redirect) .
+  return generer_action_auteur('tourner', $id, new Link) .
     ($id_article ? ('&amp;id_article=' .$id_article) : "") .
     ("&amp;var_rot=$rot&amp;ancre=$album");
 }
@@ -920,15 +919,8 @@ function bloc_gerer_vignette($document, $id_article, $redirect_url, $album) {
 }
 
 function afficher_documents_non_inclus($id_article, $type = "article", $flag_modif) {
-	global $couleur_claire;
-	global $connect_id_auteur, $connect_statut;
-	global $options;
-	global $spip_lang_left, $spip_lang_right;
-
-	$redirect_url = new Link();
-	if ($type == "rubrique")
-		$redirect_url->addVar('action', 'calculer_rubriques');
-	$redirect_url = $redirect_url->getUrl();
+	global $couleur_claire, $connect_id_auteur, $connect_statut;
+	global $options, $spip_lang_left, $spip_lang_right;
 
 	// Afficher portfolio
 	/////////
@@ -956,13 +948,11 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 		echo "<div style='background-color: $couleur_claire; padding: 4px; color: black; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;' class='verdana2'><b>".majuscules(_T('info_portfolio'))."</b></div>";
 		echo "<table width='100%' cellspacing='0' cellpadding='3'>";
 
-		afficher_portfolio ($documents, $id_article, $type, 'portfolio', $flag_modif, $redirect_url, $couleur_claire);
+		afficher_portfolio ($documents, $id_article, $type, 'portfolio', $flag_modif, $couleur_claire);
 
 		echo "</table>\n";
 	}
 
-
-
 	//// Documents associes
 	$query = "SELECT * FROM spip_documents AS docs, spip_documents_".$type."s AS l ".
 		"WHERE l.id_$type=$id_article AND l.id_document=docs.id_document ".
@@ -985,7 +975,7 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 		echo "<div style='background-color: #aaaaaa; padding: 4px; color: black; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;' class='verdana2'><b>". majuscules(_T('info_documents')) ."</b></div>";
 		echo "<table width='100%' cellspacing='0' cellpadding='5'>";
 
-		afficher_portfolio ($documents, $id_article, $type, 'documents', $flag_modif, $redirect_url, '#aaaaaa');
+		afficher_portfolio ($documents, $id_article, $type, 'documents', $flag_modif, '#aaaaaa');
 		echo "</table>";
 	}
 
@@ -996,23 +986,19 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 		echo "<div align='right'>";
 		echo "<table width='50%' cellpadding=0 cellspacing=0 border=0><tr><td style='text-align: $spip_lang_left;'>";
 		echo debut_cadre_relief("image-24.gif", false, "", _T('titre_joindre_document'));
-		echo afficher_upload($id_article, $redirect_url, _T('info_telecharger_ordinateur'), '', 'document', $type);
-		
+		echo afficher_upload($id_article, "", _T('info_telecharger_ordinateur'), '', 'document', $type);
 		echo fin_cadre_relief();
-		
-		
 		echo "</td></tr></table>";
 		echo "</div>";
 	}
-
 }
 
 
 //
 // Afficher un document dans la colonne de gauche
-// (edition des articles)
+//
 
-function afficher_documents_colonne($id_article, $type="article", $flag_modif = true) {
+function afficher_documents_colonne($id, $type="article", $flag_modif = true) {
 	global $connect_id_auteur, $connect_statut, $options;
 	global $clean_link;
 	global $id_doc_actif;
@@ -1027,13 +1013,13 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif =
 	$titre_cadre = _T('bouton_ajouter_image').aide("ins_img");
 	debut_cadre_relief("image-24.gif", false, "creer.gif", $titre_cadre);
 
-	echo afficher_upload($id_article, $redirect_url, _T('info_telecharger'),'','vignette',$type);
+	echo afficher_upload($id, '', _T('info_telecharger'),'','vignette',$type);
 
 	fin_cadre_relief();
 
 	//// Documents associes
 	$query = "SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l ".
-		"WHERE l.id_".$type."=$id_article AND l.id_document=docs.id_document ".
+		"WHERE l.id_".$type."=$id AND l.id_document=docs.id_document ".
 		"AND docs.mode='document' ORDER BY docs.id_document";
 
 	$res = spip_query($query);
@@ -1052,12 +1038,12 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif =
 	}
 
 	//// Images sans documents
-	$images_liees = spip_query("SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l "."WHERE l.id_".$type."=$id_article AND l.id_document=docs.id_document ".$docs_exclus."AND docs.mode='vignette' ORDER BY docs.id_document");
+	$images_liees = spip_query("SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l "."WHERE l.id_".$type."=$id AND l.id_document=docs.id_document ".$docs_exclus."AND docs.mode='vignette' ORDER BY docs.id_document");
 
 	echo "\n<p />";
 	while ($document = spip_fetch_array($images_liees)) {
 		$id_document = $document['id_document'];
-		afficher_case_document($id_document, $id_article, $redirect_url, $id_doc_actif == $id_document);
+		afficher_case_document($id_document, $id, $type, $id_doc_actif == $id_document);
 	}
 
 	/// Ajouter nouveau document
@@ -1065,7 +1051,7 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif =
 	if ($type == "article" AND $GLOBALS['meta']["documents_$type"] != 'non') {
 		$titre_cadre = _T('bouton_ajouter_document').aide("ins_doc");
 		debut_cadre_enfonce("doc-24.gif", false, "creer.gif", $titre_cadre);
-		echo afficher_upload($id_article, $redirect_url,_T('info_telecharger_ordinateur'), '','document',$type);
+		echo afficher_upload($id, '',_T('info_telecharger_ordinateur'), '','document',$type);
 		fin_cadre_enfonce();
 	}
 
@@ -1075,7 +1061,7 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif =
 		if ($documents_lies) {
 			reset($documents_lies);
 			while (list(, $id_document) = each($documents_lies)) {
-			  afficher_case_document($id_document, $id_article, $redirect_url, $id_doc_actif == $id_document);
+			  afficher_case_document($id_document, $id, $type, $id_doc_actif == $id_document);
 			}
 		}
 	}
@@ -1101,7 +1087,7 @@ function affiche_raccourci_doc($doc, $id, $align) {
 // Afficher un document sous forme de ligne depliable
 //
 
-function afficher_case_document($id_document, $id_article, $redirect_url = "", $deplier = false) {
+function afficher_case_document($id_document, $id, $type, $deplier = false) {
 	global $connect_id_auteur, $connect_statut;
 	global $clean_link;
 	global $options;
@@ -1112,8 +1098,6 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 
 	$doublons = ','.document_vu().',';
 
-	if (!$redirect_url) $redirect_url = $clean_link->getUrl();
-
 	$document = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document)));
 
 	$id_vignette = $document['id_vignette'];
@@ -1132,10 +1116,10 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 	}
 
 	$result = spip_query("SELECT * FROM spip_types_documents WHERE id_type=$id_type");
-	if ($type = @spip_fetch_array($result))	{
-		$type_extension = $type['extension'];
-		$type_inclus = $type['inclus'];
-		$type_titre = $type['titre'];
+	if ($letype = @spip_fetch_array($result))	{
+		$type_extension = $letype['extension'];
+		$type_inclus = $letype['inclus'];
+		$type_titre = $letype['titre'];
 	}
 
 	//
@@ -1209,7 +1193,7 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 		if ($options == "avancees") {
 			echo "<div style='color: black;'>";
 			if ($type_titre){
-				echo "$type_titre";
+			  echo $type_titre;
 			} else {
 				echo _T('info_document').' '.majuscules($type_extension);
 			}
@@ -1223,13 +1207,10 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 			echo "</div>";
 		}
 
-		$link = new Link($redirect_url);
-		$link->addVar('modif_document', 'oui');
-		$link->addVar('id_document', $id_document);
-		$link->addVar('show_docs', $id_document);
-
-		echo $link->getForm('POST',
-			$clean_link->getUrl()."#document$id_document");
+		echo generer_url_post_ecrire($type . "s_edit", 
+					     "id_$type=$id&modif_document=oui&id_document=$id_document&show_docs=$id_document",
+					     "",
+					     "#document$id_document");
 
 		echo "<b>"._T('entree_titre_document')."</b><br />\n";
 		echo "<input type='text' name='titre_document' class='formo' value=\"".entites_html($titre)."\" size='40'
@@ -1246,9 +1227,9 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 		if ($options == "avancees")
 			afficher_formulaire_taille($document, $type_inclus);
 
-		echo "<div class='display_au_chargement' id='valider_doc$id_document' align='".$GLOBALS['spip_lang_right']."'>";
-		echo "<input TYPE='submit' class='fondo' style='font-size:9px;' ' VALUE='"._T('bouton_enregistrer')."'>";
-		echo "</div>";
+		echo "\n<div class='display_au_chargement' id='valider_doc$id_document' align='".$GLOBALS['spip_lang_right']."'>";
+		echo "<input type='submit' class='fondo' style='font-size:9px;' ' VALUE='"._T('bouton_enregistrer')."'>";
+		echo "</div>\n";
 		echo "</form>";
 
 		echo "</div>";
@@ -1256,7 +1237,7 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 		// Fin edition des champs
 
 		echo "<p /><div align='center'>";
-		icone_horizontale(_T('icone_supprimer_document'), bouton_supprime_document_et_vignette($id_article, $redirect_url, $id_document, 'documents'), "doc-24.gif", "supprimer.gif");
+		icone_horizontale(_T('icone_supprimer_document'), bouton_supprime_document_et_vignette($id, $clean_link->getUrl(), $id_document, 'documents'), "doc-24.gif", "supprimer.gif");
 		echo "</div>";
 
 
@@ -1275,7 +1256,7 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 					$document['extension'] = "gif";
 					break;
 			}
-			bloc_gerer_vignette($document, $id_article, $redirect_url, 'documents');
+			bloc_gerer_vignette($document, $id, $clean_link->getUrl(), 'documents');
 			echo "</div>\n";
 		}
 
@@ -1342,7 +1323,7 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 		  _T('info_largeur_vignette', array('largeur_vignette' => $largeur, 'hauteur_vignette' => $hauteur)),
 		  "</div>\n";
 
-		$link = new Link($redirect_url);
+		$link = new Link($clean_link->getUrl());
 		$link->addVar('modif_document', 'oui');
 		$link->addVar('id_document', $id_document);
 		$link->addVar('show_docs', $id_document);
@@ -1360,14 +1341,14 @@ function afficher_case_document($id_document, $id_article, $redirect_url = "", $
 		}
 
 		echo "<div align='".$GLOBALS['spip_lang_right']."'>";
-		echo "<input class='fondo' style='font-size: 9px;' TYPE='submit' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";
+		echo "<input class='fondo' style='font-size: 9px;' type='submit' value='"._T('bouton_enregistrer')."'>";
 		echo "</div>";
 		echo "</div>";
 		echo "</form>";
 
 		echo "<center>";
 
-		icone_horizontale (_T('icone_supprimer_image'), bouton_supprime_document_et_vignette($id_article, $redirect_url, $id_document, 'images'), "image-24.gif", "supprimer.gif");
+		icone_horizontale (_T('icone_supprimer_image'), bouton_supprime_document_et_vignette($id, $clean_link->getUrl(), $id_document, 'images'), "image-24.gif", "supprimer.gif");
 		echo "</center>\n";
 
 
@@ -1415,7 +1396,7 @@ function maj_documents ($id_objet, $type) {
 				$query .= ", largeur='$largeur_document',
 					hauteur='$hauteur_document'";
 
-			$query .= " WHERE id_document=".$_POST['id_document'];
+			$query .= " WHERE id_document=".$id_document;
 			spip_query($query);