diff --git a/.gitattributes b/.gitattributes
index c7693b4818b774cb37e34a2d0879e81848b7731f..f15d5ae2f79c48af1459d3e8b54700d0032bacab 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -12,6 +12,10 @@ dist/formulaires/editer_article/charger.php -text
 dist/formulaires/editer_article/traiter.php -text
 dist/formulaires/editer_article/verifier.php -text
 dist/formulaires/editer_article_fonctions.php -text
+dist/formulaires/editer_rubrique.html -text
+dist/formulaires/editer_rubrique/charger.php -text
+dist/formulaires/editer_rubrique/traiter.php -text
+dist/formulaires/editer_rubrique/verifier.php -text
 dist/formulaires/formulaire_.html -text
 dist/formulaires/login_forum_abo.html -text
 dist/formulaires/logo_auteur.html -text
@@ -302,6 +306,7 @@ dist/prive/contenu/breve.html -text
 dist/prive/contenu/rubrique.html -text
 dist/prive/contenu/site.html -text
 dist/prive/editer/article.html -text
+dist/prive/editer/rubrique.html -text
 dist/prive/infos/article.html -text
 dist/prive/infos/article_fonctions.php -text
 dist/prive/infos/auteur.html -text
diff --git a/dist/formulaires/editer_article.html b/dist/formulaires/editer_article.html
index 4f989d5275532f7d1e3744cb2a30f22f9c604889..337b2c42a0f2061b78cc22cf4feba2217670c2b9 100644
--- a/dist/formulaires/editer_article.html
+++ b/dist/formulaires/editer_article.html
@@ -1,4 +1,4 @@
-<div class='formfx'>
+<div class='formfx editer_article'>
 	<br class='spacer' />
 	[<p class="formulaire_message">(#ENV*{message_ok})</p>]
 	[<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>]
@@ -29,14 +29,14 @@
 				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{soustitre})</span>]
 	    </li>]
 	
-	    [<li>(#REM|sinon{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}}
-	    |chercher_rubrique{#ENV{id_rubrique}, #ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})</li>]
+	    [<li>(#VAL{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}}
+	    |chercher_rubrique{#ENV{id_rubrique},'article',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})</li>]
 	
 	  	[(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '})
 	    <li class="haut">
 	      <label for="descriptif"><:texte_descriptif_rapide:><em>#AIDER{artdesc}</em></label>
 	      <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif})]</textarea>
-				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptid})</span>]
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptif})</span>]
 	    </li>]
 	  	[(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|?{' '})
 	    [<li class='haut redirection'>(#ENV**{chapo}|match{^=}|?{' '})
diff --git a/dist/formulaires/editer_article/charger.php b/dist/formulaires/editer_article/charger.php
index 463cf609a761523c99f064b48fec11f7eb8c5470..b196d3c999b6eab2ecc885aac8be0907e5b04c98 100644
--- a/dist/formulaires/editer_article/charger.php
+++ b/dist/formulaires/editer_article/charger.php
@@ -17,135 +17,20 @@ include_spip('inc/editer');
 
 // http://doc.spip.org/@inc_editer_article_dist
 function formulaires_editer_article_charger_dist($id_article='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){
-
-	$new = $id_article;
-	// Appel direct dans un squelette
-	if (!$row) {
-		include_spip('inc/article_select');
-		$row = article_select($id_article, $id_rubrique, $lier_trad);
-		if (!$row) return '';
-		if (is_numeric($id_article)) $new = '';
-		else $new = $id_article;
-	}
-	// Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
-	// (et donc: pas de lien de traduction)
-	$id_article = ($new OR $lier_trad) ? 'oui' : $row['id_article'];
-
-	$contexte = $row;
-	$contexte['config'] = $config = $config_fonc($row);
-	$att_text = " class='formo' "
-	. $GLOBALS['browser_caret']
-	. " rows='"
-	. ($config['lignes'] +15)
-	. "' cols='40'";
-	list($contexte['texte'],$contexte['_texte_trop_long']) = editer_article_recolle($contexte['texte'],$att_text);
-
-	// on veut conserver la langue de l'interface ;
-	// on passe cette donnee sous un autre nom, au cas ou le squelette
-	// voudrait l'exploiter
-	if (isset($contexte['lang'])) {
-		$contexte['langue'] = $contexte['lang'];
-		unset($contexte['lang']);
-	}
-
-	$contexte['browser_caret']=$GLOBALS['browser_caret'];
-
-	$contexte['_hidden'] = "<input type='hidden' name='editer_article' value='oui' />\n" .
-		 (!$lier_trad ? '' :
-		 ("\n<input type='hidden' name='lier_trad' value='" .
-		  $lier_trad .
-		  "' />" .
-		  "\n<input type='hidden' name='changer_lang' value='" .
-		  $config['langue'] .
-		  "' />")) . $hidden;
-
-	// Ajouter le controles md5
-	if (intval($id_article)) {
-		include_spip('inc/editer');
-		$contexte['_hidden'] .= controles_md5($row);
-	}
-	if (isset($contexte['extra']))
-		$contexte['extra'] = unserialize($contexte['extra']);
-
-	// preciser que le formulaire doit passer dans un pipeline
-	$contexte['_pipeline'] = array('editer_contenu_objet','args'=>array('type'=>'article','id'=>$id_article,'contexte'=>$contexte));
-	// preciser que le formulaire doit etre securise auteur/action
-	$contexte['_action'] = array('editer_article',$id_article);
-
-	return $contexte;
-}
-
-
-//
-// Gestion des textes trop longs (limitation brouteurs)
-// utile pour les textes > 32ko
-
-// http://doc.spip.org/@coupe_trop_long
-function coupe_trop_long($texte){
-	$aider = charger_fonction('aider', 'inc');
-	if (strlen($texte) > 28*1024) {
-		$texte = str_replace("\r\n","\n",$texte);
-		$pos = strpos($texte, "\n\n", 28*1024);	// coupe para > 28 ko
-		if ($pos > 0 and $pos < 32 * 1024) {
-			$debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n";
-			$suite = substr($texte, $pos + 2);
-		} else {
-			$pos = strpos($texte, " ", 28*1024);	// sinon coupe espace
-			if (!($pos > 0 and $pos < 32 * 1024)) {
-				$pos = 28*1024;	// au pire (pas d'espace trouv'e)
-				$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
-			} else {
-				$decalage = 1;
-			}
-			$debut = substr($texte,0,$pos + $decalage); // Il faut conserver l'espace s'il y en a un
-			$suite = substr($texte,$pos + $decalage);
-		}
-		return (array($debut,$suite));
-	}
-	else
-		return (array($texte,''));
+	return formulaires_editer_objet_charger('article',$id_article,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
 }
 
-// http://doc.spip.org/@editer_article_recolle
-function editer_article_recolle($texte, $att_text)
-{
-	if ((strlen($texte)<29*1024)
-	 OR (include_spip('inc/layer') AND ($GLOBALS['browser_name']!="MSIE")) )
-	 return array($texte,"");
-	 
-	include_spip('inc/barre');
-	$textes_supplement = "<br /><span style='color: red'>"._T('info_texte_long')."</span>\n";
-	$nombre = 0;
-
-	while (strlen($texte)>29*1024) {
-		$nombre ++;
-		list($texte1,$texte) = coupe_trop_long($texte);
-		$id = "document.getElementById('texte$nombre')";
-		$textes_supplement .= "<br />" . afficher_barre($id) .
-			"<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
-		}
-	return array($texte,$textes_supplement);
-}
-
-
 // Choix par defaut des options de presentation
 // http://doc.spip.org/@articles_edit_config
 function articles_edit_config($row)
 {
-	global /*$champs_extra,*/ $spip_ecran, $spip_lang, $spip_display;
+	global $spip_ecran, $spip_lang, $spip_display;
 
 	$config = $GLOBALS['meta'];
 	$config['lignes'] = ($spip_ecran == "large")? 8 : 5;
 	$config['afficher_barre'] = $spip_display != 4;
 	$config['langue'] = $spip_lang;
 
-	/*if ($champs_extra) {
-		include_spip('inc/extra');
-		$config['extra'] = true;
-	} 
-	else 
-		$config['extra'] = false;*/
-
 	$config['restreint'] = ($row['statut'] == 'publie');
 	return $config;
 }
diff --git a/dist/formulaires/editer_article/traiter.php b/dist/formulaires/editer_article/traiter.php
index 974df0ca479e84aefd8a6a5b338f26f78694f5e4..ddaac26ffdb1f9fcd26ae4534bd163f6a1fd4879 100644
--- a/dist/formulaires/editer_article/traiter.php
+++ b/dist/formulaires/editer_article/traiter.php
@@ -17,18 +17,7 @@ include_spip('inc/editer');
 
 // http://doc.spip.org/@inc_editer_article_dist
 function formulaires_editer_article_traiter_dist($id_article='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){
-
-	$message = "";
-	$action_editer_article = charger_fonction('editer_article','action');
-	list($id_article,$err) = $action_editer_article();
-	if ($err){
-		$message .= $err;
-	}
-	elseif ($retour) {
-		include_spip('inc/headers');
-		$message .= redirige_formulaire(parametre_url($retour,'id_article',$id_article));
-	}
-	return $message;
+	return formulaires_editer_objet_traiter('article',$id_article,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
 }
 
 ?>
\ No newline at end of file
diff --git a/dist/formulaires/editer_article_fonctions.php b/dist/formulaires/editer_article_fonctions.php
index d99f86d0d42a85d2694d685082d4223ded224f1c..c43ef7fb4317a75120398aa29f26ed80ca323a7a 100644
--- a/dist/formulaires/editer_article_fonctions.php
+++ b/dist/formulaires/editer_article_fonctions.php
@@ -1,17 +1,5 @@
 <?php
 
-function chercher_rubrique($msg, $id_rubrique, $id_secteur, $restreint){
-	$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
-	$opt = $chercher_rubrique($id_rubrique, 'article', $restreint);
-
-	if ($id_rubrique == 0) $logo = "racine-site-24.gif";
-	elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.gif";
-	else $logo = "rubrique-24.gif";
-
-	include_spip('inc/presentation');
-	return debut_cadre_couleur($logo, true, "", $msg) . $opt .fin_cadre_couleur(true);
-}
-
 function barre_typo($id,$lang=''){
 	include_spip('inc/barre');
 	return '<div>' . afficher_barre("document.getElementById('$id')",false,$lang) . '</div>';
diff --git a/dist/formulaires/editer_rubrique.html b/dist/formulaires/editer_rubrique.html
new file mode 100644
index 0000000000000000000000000000000000000000..a16bbb6e41c8382606fe940092935011c44fec54
--- /dev/null
+++ b/dist/formulaires/editer_rubrique.html
@@ -0,0 +1,46 @@
+<div class='formfx editer_rubrique'>
+	<br class='spacer' />
+	[<p class="formulaire_message">(#ENV*{message_ok})</p>]
+	[<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>]
+	[(#ENV{editable})
+	<form method='post' action='#ENV{action}' enctype='multipart/form-data' class='noajax'>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+	  <input type='hidden' name='id_article' value='#ENV{id_article}' />
+	  <fieldset>
+	  <ol class="formfx">
+	    <li class="gauche obligatoire">
+	      <label for="titre"><:info_titre:><em>#AIDER{arttitre}</em></label>
+	      <input type='text' name='titre' id='titre' class='formo' value="[(#ENV**{titre,#REM|concat{info_nouvel_article}|_T})]"
+				[(#ENV{titre,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]/>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{titre})</span>]
+	    </li>
+	
+	    [<li>(#VAL{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{rubrub}}
+	    |chercher_rubrique{#ENV{id_rubrique},'rubrique',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})</li>]
+	
+	  	[(#ENV**{config}|table_valeur{rubriques_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '})
+	    <li class="haut">
+	      <label for="descriptif"><:texte_descriptif_rapide:></label>
+	      <div class='commentaire'><:entree_contenu_rubrique:></div>
+	      <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif})]</textarea>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptif})</span>]
+	    </li>]
+	  	[(#ENV**{config}|table_valeur{rubriques_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '})
+	    <li class="haut">
+	      <label for="text_area"><:info_texte_explicatif:><em>#AIDER{raccourcis}</em></label>
+	    	[(#ENV**{_texte_trop_long,''})]
+	      <div class="commentaire"><:texte_enrichir_mise_a_jour:><em>#AIDER{raccourcis}</em></div>
+	      <textarea name='texte' id='text_area' class='formo barre_inserer' rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'[
+	      (#ENV**{browser_caret,''})]>[(#ENV**{texte})]</textarea>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{texte})</span>]
+	    </li>]
+	  </ol>
+	  </fieldset>
+	  [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+	  <!--extra-->
+	  <div style='text-align: right'><input class='fondo' type='submit' value='<:bouton_enregistrer:>' /></div>
+	</form>
+	]
+</div>
\ No newline at end of file
diff --git a/dist/formulaires/editer_rubrique/charger.php b/dist/formulaires/editer_rubrique/charger.php
new file mode 100644
index 0000000000000000000000000000000000000000..c33feee904aa56d2fd6354f1c115bdef3acd653c
--- /dev/null
+++ b/dist/formulaires/editer_rubrique/charger.php
@@ -0,0 +1,35 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2008                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/actions');
+include_spip('inc/editer');
+
+// http://doc.spip.org/@inc_editer_article_dist
+function formulaires_editer_rubrique_charger_dist($id_rubrique='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){
+	return formulaires_editer_objet_charger('rubrique',$id_rubrique,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden);
+}
+
+function rubriques_edit_config($row)
+{
+	global $spip_ecran, $spip_lang, $spip_display;
+
+	$config = $GLOBALS['meta'];
+	$config['lignes'] = ($spip_ecran == "large")? 8 : 5;
+	$config['afficher_barre'] = $spip_display != 4;
+	$config['langue'] = $spip_lang;
+
+	$config['restreint'] = (!$GLOBALS['connect_toutes_rubriques']);
+	return $config;
+}
+?>
\ No newline at end of file
diff --git a/dist/formulaires/editer_rubrique/traiter.php b/dist/formulaires/editer_rubrique/traiter.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4b02058342f38b2002cb51240e7adf4becd21ea
--- /dev/null
+++ b/dist/formulaires/editer_rubrique/traiter.php
@@ -0,0 +1,22 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2008                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/actions');
+include_spip('inc/editer');
+
+function formulaires_editer_rubrique_traiter_dist($id_rubrique='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){
+	return formulaires_editer_objet_traiter('rubrique',$id_rubrique,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden);
+}
+
+?>
\ No newline at end of file
diff --git a/dist/formulaires/editer_rubrique/verifier.php b/dist/formulaires/editer_rubrique/verifier.php
new file mode 100644
index 0000000000000000000000000000000000000000..b21fef9aa3e7b4abc805abf1580946f7c14289d7
--- /dev/null
+++ b/dist/formulaires/editer_rubrique/verifier.php
@@ -0,0 +1,37 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2008                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/actions');
+include_spip('inc/editer');
+
+function formulaires_editer_rubrique_verifier_dist($id_rubrique='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){
+
+	$erreurs = array();
+	if (intval($id_article)) {
+		$conflits = controler_contenu('rubrique',$id_rubrique);
+		if (count($conflits)) {
+			foreach($conflits as $champ=>$conflit){
+				$erreurs[$champ] .= _L("ATTENTION : Ce champ a &eacute;t&eacute; modifi&eacute; par ailleurs. La valeur actuelle est :<br /><textarea readonly='readonly' class='forml'>".$conflit['base']."</textarea>");
+			}
+		}
+	}
+	foreach(array('titre') as $obli){
+		if (!_request($obli))
+			$erreurs[$obli] .= _L("Cette information est obligatoire");;
+	}
+
+	return $erreurs;
+}
+
+?>
\ No newline at end of file
diff --git a/dist/prive/editer/rubrique.html b/dist/prive/editer/rubrique.html
new file mode 100644
index 0000000000000000000000000000000000000000..f090a664888fe43c02c9dce255e564aa540d5bc4
--- /dev/null
+++ b/dist/prive/editer/rubrique.html
@@ -0,0 +1,5 @@
+#ENV**{icone_retour}
+[<:info_modifier_rubrique:>
+<h1>(#ENV{titre})</h1>]
+<hr class='fin_article_presentation' />
+#FORMULAIRE_EDITER_RUBRIQUE{#ENV{new},#ENV{id_rubrique},#ENV{lier_trad},#ENV{redirect},#ENV{config_fonc}}
\ No newline at end of file
diff --git a/ecrire/action/editer_rubrique.php b/ecrire/action/editer_rubrique.php
index 55fe06db583f28d14813e8ac79cda1a9cb8c37a6..8e545bd567826883bc7abf493f7fa51c4e596c83 100644
--- a/ecrire/action/editer_rubrique.php
+++ b/ecrire/action/editer_rubrique.php
@@ -28,10 +28,15 @@ function action_editer_rubrique_dist() {
 
 	revisions_rubriques($id_rubrique);
 
-	$redirect = parametre_url(
-		urldecode(_request('redirect')),
-		'id_rubrique', $id_rubrique, '&');
-	redirige_par_entete($redirect);
+	if (_request('redirect')) {
+		$redirect = parametre_url(
+			urldecode(_request('redirect')),
+			'id_rubrique', $id_rubrique, '&');
+	
+		redirige_par_entete($redirect);
+	}
+	else 
+		return array($id_rubrique,'');
 }
 
 
diff --git a/ecrire/exec/rubriques_edit.php b/ecrire/exec/rubriques_edit.php
index 4919bb7729ac422ef26055ec9884b057714421cb..6e898fc918ce74b0df57830a053f5fec69b993e0 100644
--- a/ecrire/exec/rubriques_edit.php
+++ b/ecrire/exec/rubriques_edit.php
@@ -98,9 +98,22 @@ function exec_rubriques_edit_args($id_rubrique, $id_parent, $new)
 	echo creer_colonne_droite('', true);
 	echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));	  
 	echo debut_droite('', true);
-
+	
 	echo debut_cadre_formulaire("", true);
 
+	$contexte = array(
+	'icone_retour'=>icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif",$GLOBALS['spip_lang_right']),
+	'redirect'=>generer_url_ecrire("naviguer"),
+	'titre'=>$titre,
+	'new'=>$new == "oui"?$new:$id_rubrique,
+	'id_rubrique'=>$id_parent, // pour permettre la specialisation par la rubrique appelante
+	'config_fonc'=>'rubriques_edit_config'
+	);
+	$page = evaluer_fond("prive/editer/rubrique", $contexte, $connect);
+	echo $page['texte'];
+	echo fin_cadre_formulaire(true);
+	/*
+
 	if ($id_rubrique) echo icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif",$spip_lang_right);
 	else echo icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_parent"), $ze_logo, "rien.gif",$spip_lang_right);
 
@@ -119,8 +132,8 @@ function exec_rubriques_edit_args($id_rubrique, $id_parent, $new)
 	$form .= "<li>"
 		. debut_cadre_couleur("$logo_parent", true, '', _T('entree_interieur_rubrique').aide ("rubrub"))
 		. $chercher_rubrique($id_parent, 'rubrique', !$connect_toutes_rubriques, $id_rubrique);
-// si c'est une rubrique-secteur contenant des breves, demander la
-// confirmation du deplacement
+	// si c'est une rubrique-secteur contenant des breves, demander la
+	// confirmation du deplacement
 	$contient_breves = sql_countsel('spip_breves', "id_rubrique=$id_rubrique",'',2);
 
 	if ($contient_breves > 0) {
@@ -175,12 +188,11 @@ function exec_rubriques_edit_args($id_rubrique, $id_parent, $new)
 	$form .= "</ol>";
 
 	echo redirige_action_auteur("editer_rubrique", $id_rubrique ? $id_rubrique : 'oui', 'naviguer', '', $form, " method='post'");
-
-	echo "\n", fin_cadre_formulaire(true);
+	*/
 
 	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));	  
 
 	echo fin_gauche(), fin_page();
 	}
 }
-?>
+?>
\ No newline at end of file
diff --git a/ecrire/inc/editer.php b/ecrire/inc/editer.php
index c061011a3d27aa08bd3843894a403775cd90d37a..638695930c5c412c179bd9b7ec0afde677e7ea8e 100644
--- a/ecrire/inc/editer.php
+++ b/ecrire/inc/editer.php
@@ -12,6 +12,137 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+function formulaires_editer_objet_traiter($type, $id='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){
+
+	$message = "";
+	$action_editer = charger_fonction("editer_$type",'action');
+	list($id,$err) = $action_editer();
+	if ($err){
+		$message .= $err;
+	}
+	elseif ($retour) {
+		include_spip('inc/headers');
+		$id_table_objet = id_table_objet($type);
+		$message .= redirige_formulaire(parametre_url($retour,$id_table_objet,$id));
+	}
+	return $message;
+}
+
+function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){
+	$table_objet = table_objet($type);
+	$table_objet_sql = table_objet_sql($type);
+	$id_table_objet = id_table_objet($type);
+	
+	$new = $id;
+	// Appel direct dans un squelette
+	if (!$row) {
+		if ($select = charger_fonction($type."_select",'inc',true)){
+			$row = article_select($id, $id_parent, $lier_trad);
+			if (!$row) return '';
+		}
+		else {
+			$row = sql_fetsel('*',$table_objet_sql,$id_table_objet."=".intval($id));
+		}
+		if (is_numeric($id)) $new = '';
+		else $new = $id;
+	}
+	// Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
+	// (et donc: pas de lien de traduction)
+	$id = ($new OR $lier_trad) ? 'oui' : $row[$id_table_objet];
+
+	$contexte = $row;
+	$contexte['config'] = $config = $config_fonc($row);
+	$att_text = " class='formo' "
+	. $GLOBALS['browser_caret']
+	. " rows='"
+	. ($config['lignes'] +15)
+	. "' cols='40'";
+	list($contexte['texte'],$contexte['_texte_trop_long']) = editer_texte_recolle($contexte['texte'],$att_text);
+
+	// on veut conserver la langue de l'interface ;
+	// on passe cette donnee sous un autre nom, au cas ou le squelette
+	// voudrait l'exploiter
+	if (isset($contexte['lang'])) {
+		$contexte['langue'] = $contexte['lang'];
+		unset($contexte['lang']);
+	}
+
+	$contexte['browser_caret']=$GLOBALS['browser_caret'];
+
+	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
+		 (!$lier_trad ? '' :
+		 ("\n<input type='hidden' name='lier_trad' value='" .
+		  $lier_trad .
+		  "' />" .
+		  "\n<input type='hidden' name='changer_lang' value='" .
+		  $config['langue'] .
+		  "' />")) . $hidden;
+
+	// Ajouter le controles md5
+	if (intval($id)) {
+		$contexte['_hidden'] .= controles_md5($row);
+	}
+	if (isset($contexte['extra']))
+		$contexte['extra'] = unserialize($contexte['extra']);
+
+	// preciser que le formulaire doit passer dans un pipeline
+	$contexte['_pipeline'] = array('editer_contenu_objet','args'=>array('type'=>$type,'id'=>$id,'contexte'=>$contexte));
+	// preciser que le formulaire doit etre securise auteur/action
+	$contexte['_action'] = array("editer_$type",$id);
+
+	return $contexte;
+}
+
+//
+// Gestion des textes trop longs (limitation brouteurs)
+// utile pour les textes > 32ko
+
+// http://doc.spip.org/@coupe_trop_long
+function coupe_trop_long($texte){
+	$aider = charger_fonction('aider', 'inc');
+	if (strlen($texte) > 28*1024) {
+		$texte = str_replace("\r\n","\n",$texte);
+		$pos = strpos($texte, "\n\n", 28*1024);	// coupe para > 28 ko
+		if ($pos > 0 and $pos < 32 * 1024) {
+			$debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n";
+			$suite = substr($texte, $pos + 2);
+		} else {
+			$pos = strpos($texte, " ", 28*1024);	// sinon coupe espace
+			if (!($pos > 0 and $pos < 32 * 1024)) {
+				$pos = 28*1024;	// au pire (pas d'espace trouv'e)
+				$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
+			} else {
+				$decalage = 1;
+			}
+			$debut = substr($texte,0,$pos + $decalage); // Il faut conserver l'espace s'il y en a un
+			$suite = substr($texte,$pos + $decalage);
+		}
+		return (array($debut,$suite));
+	}
+	else
+		return (array($texte,''));
+}
+
+function editer_texte_recolle($texte, $att_text)
+{
+	if ((strlen($texte)<29*1024)
+	 OR (include_spip('inc/layer') AND ($GLOBALS['browser_name']!="MSIE")) )
+	 return array($texte,"");
+	 
+	include_spip('inc/barre');
+	$textes_supplement = "<br /><span style='color: red'>"._T('info_texte_long')."</span>\n";
+	$nombre = 0;
+
+	while (strlen($texte)>29*1024) {
+		$nombre ++;
+		list($texte1,$texte) = coupe_trop_long($texte);
+		$id = "document.getElementById('texte$nombre')";
+		$textes_supplement .= "<br />" . afficher_barre($id) .
+			"<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
+		}
+	return array($texte,$textes_supplement);
+}
+
 
 // Produit la liste des md5 d'un tableau de donnees, sous forme
 // de inputs html
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 737505b7546bb4ea93170cad6896f1a7cbebaee4..11726abfb566d2050ecb61969043cea3d53824e7 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -2448,4 +2448,32 @@ function f_extra_editer_contenu_objet($flux){
 	return $flux;
 }
 
+
+function chercher_rubrique($msg, $id_rubrique, $type, $id_secteur, $restreint){
+	$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
+	$opt = $chercher_rubrique($id_rubrique, $type, $restreint);
+
+	if ($id_rubrique == 0) $logo = "racine-site-24.gif";
+	elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.gif";
+	else $logo = "rubrique-24.gif";
+
+	$confirm = "";
+	if ($type=='rubrique') {
+		// si c'est une rubrique-secteur contenant des breves, demander la
+		// confirmation du deplacement
+		$contient_breves = sql_countsel('spip_breves', "id_rubrique=$id_rubrique",'',2);
+	
+		if ($contient_breves > 0) {
+			$scb = ($contient_breves>1? 's':'');
+			$scb = _T('avis_deplacement_rubrique',
+				array('contient_breves' => $contient_breves,
+				      'scb' => $scb));
+			$confirm .= "\n<div class='confirmer_deplacement verdana2'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>" . $scb . "</label></div>\n";
+		} else
+			$confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
+	}
+	include_spip('inc/presentation');
+	return debut_cadre_couleur($logo, true, "", $msg) . $opt . $confirm .fin_cadre_couleur(true);
+}
+
 ?>
\ No newline at end of file