From 1b391b3750fd4c1fd5062def69933d8fede81629 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 7 Aug 2006 12:47:13 +0000
Subject: [PATCH] =?UTF-8?q?Eclatement=20d'ajax=5Fpage,=20dont=20le=20taux?=
 =?UTF-8?q?=20de=20croissance=20n'=C3=A9tait=20plus=20tenable.=20C'est=20l?=
 =?UTF-8?q?a=20question=20de=20l'interface=20de=20programmation=20d'Ajax?=
 =?UTF-8?q?=20qui=20est=20pos=C3=A9e.=20En=20attendant=20de=20la=20stabili?=
 =?UTF-8?q?ser,=20le=20fichier=20index.php=20prend=20=C3=A0=20sa=20charge?=
 =?UTF-8?q?=20l'aiguillage=20et=20le=20traitement=20op=C3=A9r=C3=A9s=20aup?=
 =?UTF-8?q?aravant=20par=20ajax=5Fpage=20qui=20a=20=C3=A9t=C3=A9=20retir?=
 =?UTF-8?q?=C3=A9=20du=20d=C3=A9pot,=20son=20contenu=20=C3=A9tant=20r?=
 =?UTF-8?q?=C3=A9parti=20en=20autant=20de=20fichiers=20inc/ajax=5FF.php=20?=
 =?UTF-8?q?qu'il=20contenait=20de=20fonctions=20F.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Le mode d'appel est provisoirement encore "ecrire/?exec=ajax_page&fonction=F" en attendant mieux.
---
 .gitattributes                                |  13 +-
 ecrire/exec/ajax_page.php                     | 341 ------------------
 ecrire/exec/articles.php                      |   9 +-
 ecrire/img_pack/layer.js                      |   2 +-
 ecrire/img_pack/presentation.js               |   2 +-
 ecrire/inc/ajax_documenter.php                |  26 ++
 ecrire/inc/ajax_informer.php                  |  77 ++++
 ecrire/inc/ajax_memoriser.php                 |  66 ++++
 ecrire/inc/ajax_naviguer.php                  |  27 ++
 ecrire/inc/ajax_petitionner.php               |  26 ++
 ecrire/inc/ajax_plonger.php                   |  30 ++
 ecrire/inc/ajax_poster.php                    |  25 ++
 ecrire/inc/ajax_rechercher.php                | 122 +++++++
 ecrire/inc/ajax_selectionner.php              |  28 ++
 ecrire/inc/ajax_tourner.php                   |  27 ++
 .../{virtualite.php => ajax_virtualiser.php}  |  11 +
 ecrire/inc/chercher_rubrique.php              |   2 +-
 ecrire/inc/mini_nav.php                       |   7 +-
 ecrire/inc/minipres.php                       |  11 +-
 ecrire/inc/mots.php                           |   2 +-
 ecrire/inc/presentation.php                   |  10 +-
 ecrire/index.php                              |  24 +-
 22 files changed, 522 insertions(+), 366 deletions(-)
 delete mode 100644 ecrire/exec/ajax_page.php
 create mode 100644 ecrire/inc/ajax_documenter.php
 create mode 100644 ecrire/inc/ajax_informer.php
 create mode 100644 ecrire/inc/ajax_memoriser.php
 create mode 100644 ecrire/inc/ajax_naviguer.php
 create mode 100644 ecrire/inc/ajax_petitionner.php
 create mode 100644 ecrire/inc/ajax_plonger.php
 create mode 100644 ecrire/inc/ajax_poster.php
 create mode 100644 ecrire/inc/ajax_rechercher.php
 create mode 100644 ecrire/inc/ajax_selectionner.php
 create mode 100644 ecrire/inc/ajax_tourner.php
 rename ecrire/inc/{virtualite.php => ajax_virtualiser.php} (88%)

diff --git a/.gitattributes b/.gitattributes
index d82d005b37..b3a05727bb 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -53,7 +53,6 @@ ecrire/exec/admin_repair.php -text
 ecrire/exec/admin_tech.php -text
 ecrire/exec/admin_vider.php -text
 ecrire/exec/aide_index.php -text
-ecrire/exec/ajax_page.php -text
 ecrire/exec/articles.php -text
 ecrire/exec/articles_edit.php -text
 ecrire/exec/articles_forum.php -text
@@ -377,6 +376,17 @@ ecrire/img_pack/xml.gif -text
 ecrire/inc/actions.php -text
 ecrire/inc/agenda.php -text
 ecrire/inc/ajax.php -text
+ecrire/inc/ajax_documenter.php -text
+ecrire/inc/ajax_informer.php -text
+ecrire/inc/ajax_memoriser.php -text
+ecrire/inc/ajax_naviguer.php -text
+ecrire/inc/ajax_petitionner.php -text
+ecrire/inc/ajax_plonger.php -text
+ecrire/inc/ajax_poster.php -text
+ecrire/inc/ajax_rechercher.php -text
+ecrire/inc/ajax_selectionner.php -text
+ecrire/inc/ajax_tourner.php -text
+ecrire/inc/ajax_virtualiser.php -text
 ecrire/inc/article_select.php -text
 ecrire/inc/auteur_voir.php -text
 ecrire/inc/boutons.php -text
@@ -416,7 +426,6 @@ ecrire/inc/sites_voir.php -text
 ecrire/inc/suivi_versions.php -text
 ecrire/inc/syndic.php -text
 ecrire/inc/utils.php -text
-ecrire/inc/virtualite.php -text
 ecrire/lang/ecrire_br.php -text
 ecrire/lang/ecrire_bs.php -text
 ecrire/lang/ecrire_cs.php -text
diff --git a/ecrire/exec/ajax_page.php b/ecrire/exec/ajax_page.php
deleted file mode 100644
index 5f670fdc64..0000000000
--- a/ecrire/exec/ajax_page.php
+++ /dev/null
@@ -1,341 +0,0 @@
-<?php
-
-/***************************************************************************\
- *  SPIP, Systeme de publication pour l'internet                           *
- *                                                                         *
- *  Copyright (c) 2001-2006                                                *
- *  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;
-
-# gerer un charset minimaliste en convertissant tout en unicode &#xxx;
-
-function exec_ajax_page_dist()
-{
-	global $flag_ob, $fonction;
-
-	$var_nom = 'ajax_page_' . $fonction;
-	if (!function_exists($var_nom))
-		spip_log("fonction $var_nom indisponible");
-	else {
-		if ($flag_ob) {
-			ob_start();
-			$charset = $GLOBALS['meta']["charset"];
-		}
-// Curieux: le content-type bloque MSIE!
-//		@header('Content-type: text/html; charset=$charset');
-		echo "<"."?xml version='1.0' encoding='$charset'?".">\n";
-		$var_nom();
-
-		if ($flag_ob) {
-			$a = ob_get_contents();
-			ob_end_clean();
-			include_spip('inc/charsets');
-			echo charset2unicode($a, 'AUTO', true);
-		}
-	}
-}
-
-# Une fonction stockee en base de donnees ?
-
-function ajax_page_sql()
-{
-	global $connect_id_auteur;
-	global $id, $exclus, $col, $id_ajax_fonc, $type, $rac;
-	$id = intval($id);
-	$exclus = intval($exclus);
-	$col = intval($col);
-
-	$res = spip_query("SELECT variables FROM spip_ajax_fonc	WHERE id_ajax_fonc =" . spip_abstract_quote($id_ajax_fonc) . " AND id_auteur=$connect_id_auteur");
-	if ($row = spip_fetch_array($res)) {
-		
-		$variables = unserialize($row["variables"]);
-		while (list($i, $k) = each($variables)) {
-			$$i = $k;
-			
-		}
-		include_spip('inc/presentation');		
-		// Appliquer la fonction
-		if ($fonction == "afficher_articles") {
-			afficher_articles ($titre_table, $requete,
-				$afficher_visites, $afficher_auteurs);
-		}
-
-		elseif ($fonction == "afficher_articles_trad") {
-			afficher_articles_trad ($titre_table, $requete,
-				$afficher_visites, $afficher_auteurs);
-		}
-		elseif ($fonction == "afficher_groupe_mots") {
-			include_spip('inc/texte');
-			include_spip('inc/mots');
-			echo afficher_groupe_mots ($id_groupe);
-		}
-	}
-}
-
-function ajax_page_test()
-{
-	# tester si ca fonctionne pour ce brouteur
-	// (si on arrive la c'est que c'est bon, donc poser le cookie)
-	spip_setcookie('spip_accepte_ajax', 1);
-
-}
-
-# Un moteur de recherche ?
-function ajax_page_recherche()
-{
-	global $id, $exclus, $type, $rac;
-	$id = intval($id);
-	$exclus = intval($exclus);
-
-		include_spip('inc/texte');
-		$where = split("[[:space:]]+", $type);
-		if ($where) {
-			foreach ($where as $k => $v) 
-				$where[$k] = "'%" . substr(str_replace("%","\%", spip_abstract_quote($v)),1,-1) . "%'";
-			$where_titre = ("(titre LIKE " . join(" AND titre LIKE ", $where) . ")");
-			$where_desc = ("(descriptif LIKE " . join(" AND descriptif LIKE ", $where) . ")");
-			$where_id = ("(id_rubrique = " . join(" AND id_rubrique = ", $where) . ")");
-		} else {
-			$where_titre = " 1=2";
-			$where_desc = " 1=2";
-			$where_id = " 1=2";
-		}
-
-		if ($exclus) {
-			include_spip('inc/rubriques');
-			$where_exclus = " AND id_rubrique NOT IN (".calcul_branche($exclus).")";
-		} else
-			$where_exclus = '';
-
-		$res = spip_query("SELECT id_rubrique, id_parent, titre FROM spip_rubriques WHERE $where_id$where_exclus");
-		while ($row = spip_fetch_array($res)) {
-			$id_rubrique = $row["id_rubrique"];
-			$rub[$id_rubrique]["titre"] = typo ($row["titre"]);
-			$rub[$id_rubrique]["id_parent"] = $row["id_parent"];
-			$points[$id_rubrique] = $points[$id_rubrique] + 3;
-		}
-		$res = spip_query("SELECT id_rubrique, id_parent, titre FROM spip_rubriques WHERE $where_titre$where_exclus");
-		while ($row = spip_fetch_array($res)) {
-			$id_rubrique = $row["id_rubrique"];
-			$rub[$id_rubrique]["titre"] = typo ($row["titre"]);
-			$rub[$id_rubrique]["id_parent"] = $row["id_parent"];
-			$points[$id_rubrique] = $points[$id_rubrique] + 2;
-		}
-		$res = spip_query("SELECT id_rubrique, id_parent, titre FROM spip_rubriques WHERE $where_desc$where_exclus");
-		while ($row = spip_fetch_array($res)) {
-			$id_rubrique = $row["id_rubrique"];
-			$rub[$id_rubrique]["titre"] = typo ($row["titre"]);
-			$rub[$id_rubrique]["id_parent"] = $row["id_parent"];
-			$points[$id_rubrique] = $points[$id_rubrique] + 1;
-		}
-		
-		if ($points) {
-			arsort($points);
-			while (list($id,$pts) = each($points)) {
-				
-				$id_rubrique = $id;
-				$titre = $rub[$id]["titre"];
-				$id_parent = $rub[$id]["id_parent"];
-				
-				// Eviter une premiere fois d'afficher la rubrique exclue
-					if ($id_parent == 0) $style = "style='background-image: url(" . _DIR_IMG_PACK . "secteur-12.gif)'";
-					else $style = "";
-					$onClick = " aff_selection('rubrique','" .
-					  htmlentities($rac) .
-					  "','$id_rubrique');";
-	
-					$ondbClick = "findObj('id_parent').value=$id_rubrique;";
-					# et l'affichage de son titre dans le bandeau
-					$ondbClick .= "findObj('titreparent').value='"
-					. strtr(
-						str_replace("'", "&#8217;",
-						str_replace('"', "&#34;",
-							textebrut($titre))),
-						"\n\r", "  ")."';";
-				$ondbClick .= "findObj('selection_rubrique').style.display='none';";
-
-	
-					$ret .= "<div class='pashighlight' onClick=\"changerhighlight(this); $onClick\" ondblclick=\"$ondbClick$onClick\"><div class='arial11 petite-rubrique'$style>";
-					$ret .= "&nbsp; $titre";
-					$ret .= "</div></div>";
-			}
-				
-		}
-		if ($ret)
-			echo $ret;
-		else
-			echo "<div style='padding: 5px; color: red;'><b>"
-			.htmlentities($type)
-			."</b> :  "._T('avis_aucun_resultat')."</div>";
-
-}
-
-# afficher un mini-navigateur de rubriques
-
-function ajax_page_aff_rubrique()
-{
-	global $id, $exclus, $rac;
-	$id = intval($id);
-	$exclus = intval($exclus);
-
-	include_spip('inc/texte');
-	include_spip('inc/mini_nav');
-	echo mini_nav ($id, "choix_parent", "this.form.id_rubrique.value=::sel::;this.form.titreparent.value='::sel2::';findObj('selection_rubrique').style.display='none';", $exclus, $rac);
-
-}
-
-# afficher les sous-rubriques d'une rubrique (composant du mini-navigateur)
-
-function ajax_page_aff_rub()
-{
-	global $id, $exclus, $col, $rac;
-	$id = intval($id);
-	$exclus = intval($exclus);
-	$col = intval($col);
-
-	include_spip('inc/texte');
-	include_spip('inc/mini_nav');
-	echo mini_afficher_rubrique ($id, 
-					     htmlentities($rac),
-					     "", $col, $exclus);
-}
-
-# petit moteur de recherche sur les rubriques
-
-function ajax_page_aff_nav_recherche()
-{
-	global $id;
-	$id = intval($id);
-
-	include_spip('inc/texte');
-	include_spip('inc/mini_nav');
-	echo mini_nav ($id, "aff_nav_recherche", 
-			"document.location.href='" . generer_url_ecrire('naviguer', "id_rubrique=::sel::") .
-			"';", 0, true);
-}
-
-# Affiche les infos d'une rubrique selectionnee dans le mini navigateur
-
-function ajax_page_aff_info()
-{
-	global $couleur_foncee,$spip_display,$spip_lang_right ;
-	global $id, $exclus, $col, $type, $rac;
-	$id = intval($id);
-	$exclus = intval($exclus);
-	$col = intval($col);
-
-		include_spip('inc/texte');
-		if ($type == "rubrique") {
-			$res = spip_query("SELECT titre, descriptif FROM spip_rubriques WHERE id_rubrique = $id");
-			if ($row = spip_fetch_array($res)) {
-				$titre = typo($row["titre"]);
-				$descriptif = propre($row["descriptif"]);
-			} else {
-				$titre = _T('info_racine_site');
-			}
-		} else
-			$titre = '';
-		
-		$rac = htmlentities($rac);
-		echo "<div style='display: none;'>";
-		echo "<input type='text' id='".$rac."_sel' value='$id' />";
-		echo "<input type='text' id='".$rac."_sel2' value=\"".entites_html($titre)."\" />";
-		echo "</div>";
-
-		echo "<div class='arial2' style='padding: 5px; background-color: white; border: 1px solid $couleur_foncee; border-top: 0px;'>";
-		if ($type == "rubrique" AND $spip_display != 1 AND $spip_display!=4 AND $GLOBALS['meta']['image_process'] != "non") {
-			$logo_f = charger_fonction('chercher_logo', 'inc');
-			if ($res = $logo_f($id, 'id_rubrique', 'on'))
-			    if ($res = decrire_logo("id_rubrique", 'on', $id, 100, 48, $res))
-				echo  "<div style='float: $spip_lang_right; margin-$spip_lang_right: -5px; margin-top: -5px;'>$res</div>";
-		}
-
-		echo "<div><p><b>$titre</b></p></div>";
-		if (strlen($descriptif) > 0) echo "<div>$descriptif</div>";
-
-		echo "<div style='text-align: $spip_lang_right;'>";
-		
-				# ce lien provoque la selection (directe) de la rubrique cliquee
-				$onClick = "findObj('id_parent').value=$id;";
-				# et l'affichage de son titre dans le bandeau
-				$onClick .= "findObj('titreparent').value='"
-					. strtr(
-						str_replace("'", "&#8217;",
-						str_replace('"', "&#34;",
-							textebrut($titre))),
-						"\n\r", "  ")."';";
-				$onClick .= "findObj('selection_rubrique').style.display='none';";
-				$onClick .= "return false;";
-		
-		
-		echo "<input type='submit' value='"._T('bouton_choisir')."' onClick=\"$onClick\" class=\"fondo\" />";
-		echo "</div>";
-
-
-		echo "</div>";
-}
-
-function ajax_page_documenter()
-{
-	global $id_document, $script, $id, $type, $ancre;
-	$id = intval($id);
-	$id_document = intval($id_document);
-
-	include_spip('inc/documents');
-	include_spip('inc/presentation');
-
-	echo formulaire_documenter($id_document, array(), $script, $type, $id, $ancre);
-}
-
-function ajax_page_tourner()
-{
-	global $id_document, $script, $id, $type, $ancre;
-	$id = intval($id);
-	$id_document = intval($id_document);
-
-	include_spip('inc/documents');
-	include_spip('inc/presentation');
-
-	echo formulaire_tourner($id_document, array(), $script, 'ajax', $type);
-}
-
-function ajax_page_petitionner()
-{
-	global $id_article, $script;
-	$id_article = intval($id_article);
-
-	include_spip('inc/petition');
-	include_spip('inc/presentation');
-	include_spip('inc/actions');
-
-	echo formulaire_petitionner($id_article, $script, "&id_article=$id_article", true);
-}
-
-
-function ajax_page_poster()
-{
-	global $id_article, $script;
-	$id_article = intval($id_article);
-
-	include_spip('inc/forum');
-	include_spip('inc/actions');
-
-	echo formulaire_poster($id_article, $script, "&id_article=$id_article", true);
-}
-
-function ajax_page_virtualiser()
-{
-	global $id_article, $script;
-	$id_article = intval($id_article);
-
-	include_spip('inc/virtualite');
-	include_spip('inc/actions');
-
-	echo formulaire_virtualiser($id_article, 'ajax', $script, "&id_article=$id_article");
-}
-?>
diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index 26f673db14..010f151116 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -66,8 +66,11 @@ function exec_articles_dist()
 	$flag_editable = ($flag_modifiable OR ($flag_auteur AND ($statut_article == 'prepa' OR $statut_article == 'prop' OR $statut_article == 'poubelle')));
 
 	if ($flag_editable) {
+		if (isset($_POST['titre'])) {
    // id_article_bloque,  globale dans inc/presentation 
-		$id_article_bloque =  articles_set($id_article, $id_rubrique, $flag_modifiable);
+			$id_article_bloque =     $id_article;  
+			articles_set($id_article, $id_rubrique, $flag_modifiable);
+		}
 
 	// renvoyer vers la page de l'article
 		if ($new == 'oui'
@@ -1316,14 +1319,10 @@ function insert_article($id_parent)
 function articles_set($id_article, $id_rubrique, $statut)
 {
 
-   if (!isset($_POST['titre'])) return 0;
-
    if (!strlen($titre_article=corriger_caracteres($_POST['titre'])))
 		$titre_article = _T('info_sans_titre');
 
    revisions_articles ($id_article, $id_rubrique, $statut, $titre_article);
-
-   return $id_article;  
 }
 
 ?>
diff --git a/ecrire/img_pack/layer.js b/ecrire/img_pack/layer.js
index 079bd0415a..4c3f5c8fee 100644
--- a/ecrire/img_pack/layer.js
+++ b/ecrire/img_pack/layer.js
@@ -134,7 +134,7 @@ function aff_selection (type, rac, id) {
 	
 	findObj_forcer(rac+"_selection").style.display = "none";
 	
-	charger_id_url("./?exec=ajax_page&fonction=aff_info&type="+type+"&id="+id+"&rac="+rac, rac+"_selection");
+	charger_id_url("./?exec=ajax_page&fonction=informer&type="+type+"&id="+id+"&rac="+rac, rac+"_selection");
 }
 
 //
diff --git a/ecrire/img_pack/presentation.js b/ecrire/img_pack/presentation.js
index 9c60132bc1..244fa22822 100644
--- a/ecrire/img_pack/presentation.js
+++ b/ecrire/img_pack/presentation.js
@@ -228,7 +228,7 @@ function lancer_recherche(champ, cible) {
 function lancer_recherche_rub(champ, rac, exclus) {
 	valeur = findObj(champ).value;
 	if (valeur.length > 0) {
-		charger_id_url('./?exec=ajax_page&fonction=recherche&type='+valeur+'&exclus='+exclus+'&rac='+rac, rac+'_col_1');
+		charger_id_url('./?exec=ajax_page&fonction=rechercher&type='+valeur+'&exclus='+exclus+'&rac='+rac, rac+'_col_1');
 	}
 }
 
diff --git a/ecrire/inc/ajax_documenter.php b/ecrire/inc/ajax_documenter.php
new file mode 100644
index 0000000000..188cee52ad
--- /dev/null
+++ b/ecrire/inc/ajax_documenter.php
@@ -0,0 +1,26 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+function inc_ajax_documenter_dist()
+{
+	global $id_document, $script, $id, $type, $ancre;
+	$id = intval($id);
+	$id_document = intval($id_document);
+
+	include_spip('inc/documents');
+	include_spip('inc/presentation');
+
+	echo formulaire_documenter($id_document, array(), $script, $type, $id, $ancre);
+}
+?>
diff --git a/ecrire/inc/ajax_informer.php b/ecrire/inc/ajax_informer.php
new file mode 100644
index 0000000000..2e01340fee
--- /dev/null
+++ b/ecrire/inc/ajax_informer.php
@@ -0,0 +1,77 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+# Affiche les infos d'une rubrique selectionnee dans le mini navigateur
+
+function inc_ajax_informer_dist()
+{
+	global $couleur_foncee,$spip_display,$spip_lang_right ;
+	global $id, $exclus, $col, $type, $rac;
+	$id = intval($id);
+	$exclus = intval($exclus);
+	$col = intval($col);
+	$corps ='';
+
+	include_spip('inc/texte');
+	if ($type == "rubrique") {
+			$res = spip_query("SELECT titre, descriptif FROM spip_rubriques WHERE id_rubrique = $id");
+			if ($row = spip_fetch_array($res)) {
+				$titre = typo($row["titre"]);
+				$descriptif = propre($row["descriptif"]);
+			} else {
+				$titre = _T('info_racine_site');
+			}
+		} else
+			$titre = '';
+		
+	$rac = htmlentities($rac);
+	$corps .= "<div style='display: none;'>";
+	$corps .= "<input type='text' id='".$rac."_sel' value='$id' />";
+	$corps .= "<input type='text' id='".$rac."_sel2' value=\"".entites_html($titre)."\" />";
+	$corps .= "</div>";
+
+	$corps .= "<div class='arial2' style='padding: 5px; background-color: white; border: 1px solid $couleur_foncee; border-top: 0px;'>";
+	if ($type == "rubrique" AND $spip_display != 1 AND $spip_display!=4 AND $GLOBALS['meta']['image_process'] != "non") {
+		$logo_f = charger_fonction('chercher_logo', 'inc');
+		if ($res = $logo_f($id, 'id_rubrique', 'on'))
+			if ($res = decrire_logo("id_rubrique", 'on', $id, 100, 48, $res))
+				$corps .=  "<div style='float: $spip_lang_right; margin-$spip_lang_right: -5px; margin-top: -5px;'>$res</div>";
+	}
+
+	$corps .= "<div><p><b>$titre</b></p></div>";
+	if (strlen($descriptif) > 0) $corps .= "<div>$descriptif</div>";
+
+	$corps .= "<div style='text-align: $spip_lang_right;'>";
+		
+# ce lien provoque la selection (directe) de la rubrique cliquee
+	$onClick = "findObj('id_parent').value=$id;";
+# et l'affichage de son titre dans le bandeau
+	$onClick .= "findObj('titreparent').value='"
+					. strtr(
+						str_replace("'", "&#8217;",
+						str_replace('"', "&#34;",
+							textebrut($titre))),
+						"\n\r", "  ")."';";
+	$onClick .= "findObj('selection_rubrique').style.display='none';";
+	$onClick .= "return false;";
+		
+		
+	$corps .= "<input type='submit' value='"._T('bouton_choisir')."' onClick=\"$onClick\" class=\"fondo\" />";
+	$corps .= "</div>";
+	$corps .= "</div>";
+
+	return $corps;
+}
+
+?>
diff --git a/ecrire/inc/ajax_memoriser.php b/ecrire/inc/ajax_memoriser.php
new file mode 100644
index 0000000000..b5ec8d8844
--- /dev/null
+++ b/ecrire/inc/ajax_memoriser.php
@@ -0,0 +1,66 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+function inc_ajax_memoriser_dist()
+{
+	global $flag_ob;
+
+	if ($flag_ob) ob_start();
+	
+	ajax_page_sql();
+
+	if ($flag_ob) {
+			$a = ob_get_contents();
+			ob_end_clean();
+			return $a;
+	}
+}
+
+# Une fonction stockee en base de donnees 
+
+function ajax_page_sql()
+{
+	global $connect_id_auteur;
+	global $id, $exclus, $col, $id_ajax_fonc, $type, $rac;
+	$id = intval($id);
+	$exclus = intval($exclus);
+	$col = intval($col);
+
+	$res = spip_query("SELECT variables FROM spip_ajax_fonc	WHERE id_ajax_fonc =" . spip_abstract_quote($id_ajax_fonc) . " AND id_auteur=$connect_id_auteur");
+	if ($row = spip_fetch_array($res)) {
+		
+		$variables = unserialize($row["variables"]);
+		while (list($i, $k) = each($variables)) {
+			$$i = $k;
+			
+		}
+		include_spip('inc/presentation');		
+		// Appliquer la fonction
+		if ($fonction == "afficher_articles") {
+			afficher_articles ($titre_table, $requete,
+				$afficher_visites, $afficher_auteurs);
+		}
+
+		elseif ($fonction == "afficher_articles_trad") {
+			afficher_articles_trad ($titre_table, $requete,
+				$afficher_visites, $afficher_auteurs);
+		}
+		elseif ($fonction == "afficher_groupe_mots") {
+			include_spip('inc/texte');
+			include_spip('inc/mots');
+			echo afficher_groupe_mots ($id_groupe);
+		}
+	}
+}
+?>
diff --git a/ecrire/inc/ajax_naviguer.php b/ecrire/inc/ajax_naviguer.php
new file mode 100644
index 0000000000..4768a4aa97
--- /dev/null
+++ b/ecrire/inc/ajax_naviguer.php
@@ -0,0 +1,27 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+# petit moteur de recherche sur les rubriques
+
+function inc_ajax_naviguer_dist()
+{
+	global $id;
+	$id = intval($id);
+
+	include_spip('inc/texte');
+	include_spip('inc/mini_nav');
+	return mini_nav ($id, "aff_nav_recherche", 
+			"document.location.href='" . generer_url_ecrire('naviguer', "id_rubrique=::sel::") .
+			"';", 0, true);
+}
diff --git a/ecrire/inc/ajax_petitionner.php b/ecrire/inc/ajax_petitionner.php
new file mode 100644
index 0000000000..27cea35dda
--- /dev/null
+++ b/ecrire/inc/ajax_petitionner.php
@@ -0,0 +1,26 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+function inc_ajax_petitionner_dist()
+{
+	global $id_article, $script;
+	$id_article = intval($id_article);
+
+	include_spip('inc/petition');
+	include_spip('inc/presentation');
+	include_spip('inc/actions');
+
+	echo formulaire_petitionner($id_article, $script, "&id_article=$id_article", true);
+}
+?>
diff --git a/ecrire/inc/ajax_plonger.php b/ecrire/inc/ajax_plonger.php
new file mode 100644
index 0000000000..6b5163c556
--- /dev/null
+++ b/ecrire/inc/ajax_plonger.php
@@ -0,0 +1,30 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+
+# afficher les sous-rubriques d'une rubrique (composant du mini-navigateur)
+
+function inc_ajax_plonger_dist()
+{
+	global $id, $exclus, $col, $rac;
+	$id = intval($id);
+	$exclus = intval($exclus);
+	$col = intval($col);
+
+	include_spip('inc/texte');
+	include_spip('inc/mini_nav');
+	return mini_afficher_rubrique ($id, htmlentities($rac), "", $col, $exclus);
+}
+
+?>
diff --git a/ecrire/inc/ajax_poster.php b/ecrire/inc/ajax_poster.php
new file mode 100644
index 0000000000..aeda7deec0
--- /dev/null
+++ b/ecrire/inc/ajax_poster.php
@@ -0,0 +1,25 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+function inc_ajax_poster_dist()
+{
+	global $id_article, $script;
+	$id_article = intval($id_article);
+
+	include_spip('inc/forum');
+	include_spip('inc/actions');
+
+	echo formulaire_poster($id_article, $script, "&id_article=$id_article", true);
+}
+?>
diff --git a/ecrire/inc/ajax_rechercher.php b/ecrire/inc/ajax_rechercher.php
new file mode 100644
index 0000000000..83653e546c
--- /dev/null
+++ b/ecrire/inc/ajax_rechercher.php
@@ -0,0 +1,122 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+# gerer un charset minimaliste en convertissant tout en unicode &#xxx;
+
+function inc_ajax_rechercher_dist()
+{
+	global $flag_ob;
+
+	if ($flag_ob) {			ob_start();		}
+	ajax_page_recherche();
+
+	if ($flag_ob) {
+			$a = ob_get_contents();
+			ob_end_clean();
+			return $a;
+	}
+}
+
+# Un moteur de recherche ?
+function ajax_page_recherche()
+{
+	global $id, $exclus, $type, $rac;
+	$id = intval($id);
+	$exclus = intval($exclus);
+
+		include_spip('inc/texte');
+		$where = split("[[:space:]]+", $type);
+		if ($where) {
+			foreach ($where as $k => $v) 
+				$where[$k] = "'%" . substr(str_replace("%","\%", spip_abstract_quote($v)),1,-1) . "%'";
+			$where_titre = ("(titre LIKE " . join(" AND titre LIKE ", $where) . ")");
+			$where_desc = ("(descriptif LIKE " . join(" AND descriptif LIKE ", $where) . ")");
+			$where_id = ("(id_rubrique = " . join(" AND id_rubrique = ", $where) . ")");
+		} else {
+			$where_titre = " 1=2";
+			$where_desc = " 1=2";
+			$where_id = " 1=2";
+		}
+
+		if ($exclus) {
+			include_spip('inc/rubriques');
+			$where_exclus = " AND id_rubrique NOT IN (".calcul_branche($exclus).")";
+		} else
+			$where_exclus = '';
+
+		$res = spip_query("SELECT id_rubrique, id_parent, titre FROM spip_rubriques WHERE $where_id$where_exclus");
+		while ($row = spip_fetch_array($res)) {
+			$id_rubrique = $row["id_rubrique"];
+			$rub[$id_rubrique]["titre"] = typo ($row["titre"]);
+			$rub[$id_rubrique]["id_parent"] = $row["id_parent"];
+			$points[$id_rubrique] = $points[$id_rubrique] + 3;
+		}
+		$res = spip_query("SELECT id_rubrique, id_parent, titre FROM spip_rubriques WHERE $where_titre$where_exclus");
+		while ($row = spip_fetch_array($res)) {
+			$id_rubrique = $row["id_rubrique"];
+			$rub[$id_rubrique]["titre"] = typo ($row["titre"]);
+			$rub[$id_rubrique]["id_parent"] = $row["id_parent"];
+			$points[$id_rubrique] = $points[$id_rubrique] + 2;
+		}
+		$res = spip_query("SELECT id_rubrique, id_parent, titre FROM spip_rubriques WHERE $where_desc$where_exclus");
+		while ($row = spip_fetch_array($res)) {
+			$id_rubrique = $row["id_rubrique"];
+			$rub[$id_rubrique]["titre"] = typo ($row["titre"]);
+			$rub[$id_rubrique]["id_parent"] = $row["id_parent"];
+			$points[$id_rubrique] = $points[$id_rubrique] + 1;
+		}
+		
+		if ($points) {
+			arsort($points);
+			while (list($id,$pts) = each($points)) {
+				
+				$id_rubrique = $id;
+				$titre = $rub[$id]["titre"];
+				$id_parent = $rub[$id]["id_parent"];
+				
+				// Eviter une premiere fois d'afficher la rubrique exclue
+					if ($id_parent == 0) $style = "style='background-image: url(" . _DIR_IMG_PACK . "secteur-12.gif)'";
+					else $style = "";
+					$onClick = " aff_selection('rubrique','" .
+					  htmlentities($rac) .
+					  "','$id_rubrique');";
+	
+					$ondbClick = "findObj('id_parent').value=$id_rubrique;";
+					# et l'affichage de son titre dans le bandeau
+					$ondbClick .= "findObj('titreparent').value='"
+					. strtr(
+						str_replace("'", "&#8217;",
+						str_replace('"', "&#34;",
+							textebrut($titre))),
+						"\n\r", "  ")."';";
+				$ondbClick .= "findObj('selection_rubrique').style.display='none';";
+
+	
+					$ret .= "<div class='pashighlight' onClick=\"changerhighlight(this); $onClick\" ondblclick=\"$ondbClick$onClick\"><div class='arial11 petite-rubrique'$style>";
+					$ret .= "&nbsp; $titre";
+					$ret .= "</div></div>";
+			}
+				
+		}
+		if ($ret)
+			echo $ret;
+		else
+			echo "<div style='padding: 5px; color: red;'><b>"
+			.htmlentities($type)
+			."</b> :  "._T('avis_aucun_resultat')."</div>";
+
+}
+
+
+?>
diff --git a/ecrire/inc/ajax_selectionner.php b/ecrire/inc/ajax_selectionner.php
new file mode 100644
index 0000000000..f5ac54b2cc
--- /dev/null
+++ b/ecrire/inc/ajax_selectionner.php
@@ -0,0 +1,28 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+# afficher un mini-navigateur de rubriques
+
+function inc_ajax_selectionner_dist()
+{
+	global $id, $exclus, $rac;
+	$id = intval($id);
+	$exclus = intval($exclus);
+
+	include_spip('inc/texte');
+	include_spip('inc/mini_nav');
+	return mini_nav ($id, "choix_parent", "this.form.id_rubrique.value=::sel::;this.form.titreparent.value='::sel2::';findObj('selection_rubrique').style.display='none';", $exclus, $rac);
+
+}
+?>
diff --git a/ecrire/inc/ajax_tourner.php b/ecrire/inc/ajax_tourner.php
new file mode 100644
index 0000000000..7b2fe3e0a6
--- /dev/null
+++ b/ecrire/inc/ajax_tourner.php
@@ -0,0 +1,27 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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;
+
+function inc_ajax_tourner_dist()
+{
+	global $id_document, $script, $id, $type, $ancre;
+	$id = intval($id);
+	$id_document = intval($id_document);
+
+	include_spip('inc/documents');
+	include_spip('inc/presentation');
+
+	echo formulaire_tourner($id_document, array(), $script, 'ajax', $type);
+}
+
+?>
diff --git a/ecrire/inc/virtualite.php b/ecrire/inc/ajax_virtualiser.php
similarity index 88%
rename from ecrire/inc/virtualite.php
rename to ecrire/inc/ajax_virtualiser.php
index d9a95726e3..b5ffdc86de 100644
--- a/ecrire/inc/virtualite.php
+++ b/ecrire/inc/ajax_virtualiser.php
@@ -41,4 +41,15 @@ function formulaire_virtualiser($id_article, $virtuel, $script, $args)
 
 	return ajax_action_auteur('virtualiser', $id_article, $r, $script, $args, $args);
 }
+
+function inc_ajax_virtualiser_dist()
+{
+	global $id_article, $script;
+	$id_article = intval($id_article);
+
+	include_spip('inc/actions');
+
+	echo formulaire_virtualiser($id_article, 'ajax', $script, "&id_article=$id_article");
+}
+
 ?>
diff --git a/ecrire/inc/chercher_rubrique.php b/ecrire/inc/chercher_rubrique.php
index eb1dbca3fc..fcc7a2e712 100644
--- a/ecrire/inc/chercher_rubrique.php
+++ b/ecrire/inc/chercher_rubrique.php
@@ -210,7 +210,7 @@ function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0) {
 	<a	href=\"#\"
 		onClick=\"if(findObj('selection_rubrique').style.display=='none')
 			{charger_id_url_si_vide('" .
-	  generer_url_ecrire('ajax_page', "fonction=aff_rubrique&id=$id_rubrique$exclus", true) ."',
+	  generer_url_ecrire('ajax_page', "fonction=selectionner&id=$id_rubrique$exclus", true) ."',
 				'selection_rubrique');}
 			else {findObj('selection_rubrique').style.display='none';}\"
 	><img src='". _DIR_IMG_PACK . "loupe.png' style='vertical-align: middle;'
diff --git a/ecrire/inc/mini_nav.php b/ecrire/inc/mini_nav.php
index 1adb441fa1..385560c9ba 100644
--- a/ecrire/inc/mini_nav.php
+++ b/ecrire/inc/mini_nav.php
@@ -10,11 +10,8 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-
-//
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-
 function mini_afficher_rubrique ($id_rubrique, $rac="", $liste="", $col = 1, $rub_exclus=0) {
 	global  $spip_lang_left;
 	
@@ -77,7 +74,7 @@ function mini_afficher_rubrique ($id_rubrique, $rac="", $liste="", $col = 1, $ru
 					$titre = "<div class='rub-ouverte'>$titre</div>";
 
 					# ensuite, l'ouverture du menu des sous-rubriques
-					$url = generer_url_ecrire("ajax_page", "fonction=aff_rub&rac=$rac&exclus=$rub_exclus&id=$la_rub&col=".($col+1), true);
+					$url = generer_url_ecrire("ajax_page", "fonction=plonger&rac=$rac&exclus=$rub_exclus&id=$la_rub&col=".($col+1), true);
 					$onClick .= "charger_id_url('$url',"
 					. "'".$rac."_col_".($col+1)
 					."', 'slide_horizontal(\'".$rac."_principal\', \'"
@@ -177,7 +174,7 @@ function mini_nav ($sel, $rac="",$fonction="", $rub_exclus=0, $aff_racine=false)
 		$ondbClick .= "findObj('selection_rubrique').style.display='none';";
 	}
 
-	$onClick .= "charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=aff_rub&rac=$rac&exclus=$rub_exclus&id=0&col=1", true) . "', '".$rac."_col_1');";
+	$onClick .= "charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=plonger&rac=$rac&exclus=$rub_exclus&id=0&col=1", true) . "', '".$rac."_col_1');";
 
 	$ret .= "<div class='arial11 petite-rubrique' onclick=\"$onClick\" ondblclick=\"$ondbClick$onClick\" style='background-image: url(" . _DIR_IMG_PACK . "racine-site-12.gif); background-color: white; border: 1px solid $couleur_foncee; border-bottom: 0px; width: 134px;'><div class='pashighlight'>";
 	$ret .= _T("info_racine_site");
diff --git a/ecrire/inc/minipres.php b/ecrire/inc/minipres.php
index 8f166e40f6..23d1ae760a 100644
--- a/ecrire/inc/minipres.php
+++ b/ecrire/inc/minipres.php
@@ -119,13 +119,22 @@ function info_copyright() {
 
 }
 
-// normalement il faudrait definir inc_info.php, mais pour mettre juste ca:
+// normalement il faudrait creer inc/info.php, mais pour mettre juste ca:
 
 function exec_info_dist() {
 	global $connect_statut;
 	if ($connect_statut == '0minirezo') phpinfo();
 }
 
+// idem faudrait creer inc/ajax_test, mais c'est si court.
+// Tester si Ajax fonctionne pour ce brouteur
+// (si on arrive la c'est que c'est bon, donc poser le cookie)
+
+function inc_ajax_test_dist()
+{
+	spip_setcookie('spip_accepte_ajax', 1);
+}
+
 // Afficher le bouton "preview" dans l'espace public
 function afficher_bouton_preview() {
 		$x = _T('previsualisation');
diff --git a/ecrire/inc/mots.php b/ecrire/inc/mots.php
index b50e13958e..446e62197d 100644
--- a/ecrire/inc/mots.php
+++ b/ecrire/inc/mots.php
@@ -539,7 +539,7 @@ function afficher_groupe_mots($id_groupe) {
 	$hash = "0x".substr(md5($connect_id_auteur.$jjscript), 0, 16);
 	$tmp_var = substr($hash, 2, 6);
 			
-	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
+	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=memoriser&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
 
 	$select = 'id_mot, titre, ' . creer_objet_multi ("titre", $spip_lang);
 	$from = 'spip_mots';
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index ca6c0464cf..9ae77d0a45 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -743,7 +743,7 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 	$hash = "0x".substr(md5($connect_id_auteur.$jjscript), 0, 16);
 
 	$tmp_var = substr($hash, 2, 6);
-	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page","fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
+	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page","fonction=memoriser&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
 
 	if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
 	$tous_id = array();
@@ -783,7 +783,7 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 
 			if ($afficher_trad) {
 				$texte_img .= http_img_pack("searching.gif", "*", "style='visibility: hidden; float: $spip_lang_right' id = 'img_$div_trad'");
-				$texte_img .= "<div style='float: $spip_lang_right;'><a href=\"javascript:charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=sql&id_ajax_fonc=$id_ajax_trad"). "','$div_trad');\"><img src='". _DIR_IMG_PACK . "langues-12.gif' /></a></div>";
+				$texte_img .= "<div style='float: $spip_lang_right;'><a href=\"javascript:charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=memoriser&id_ajax_fonc=$id_ajax_trad"). "','$div_trad');\"><img src='". _DIR_IMG_PACK . "langues-12.gif' /></a></div>";
 			}
 			bandeau_titre_boite2($texte_img.$titre_table, "article-24.gif");
 
@@ -972,7 +972,7 @@ function afficher_articles_trad($titre_table, $requete, $afficher_visites = fals
 	$jjscript = (serialize($jjscript));
 	$hash = "0x".substr(md5($connect_id_auteur.$jjscript), 0, 16);
 	$tmp_var = substr($hash, 2, 6);	
-	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", 'fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::') . "','$tmp_var')";
+	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", 'fonction=memoriser&id_ajax_fonc=::id_ajax_fonc::::deb::') . "','$tmp_var')";
 
 	$tous_id = array();
 	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
@@ -1005,7 +1005,7 @@ function afficher_articles_trad($titre_table, $requete, $afficher_visites = fals
 			
 			$texte_img .= http_img_pack("searching.gif", "*", "style='visibility: hidden; float: $spip_lang_right' id = 'img_$div_trad'");
 
-			$texte_img .= "<div style='float: $spip_lang_right;'><a href=\"javascript:charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=sql&id_ajax_fonc=$id_ajax_trad") . "','$div_trad');\"><img src='". _DIR_IMG_PACK . "langues-off-12.gif' /></a></div>";
+			$texte_img .= "<div style='float: $spip_lang_right;'><a href=\"javascript:charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=memoriser&id_ajax_fonc=$id_ajax_trad") . "','$div_trad');\"><img src='". _DIR_IMG_PACK . "langues-off-12.gif' /></a></div>";
 
 			bandeau_titre_boite2($texte_img.$titre_table, "article-24.gif");
 
@@ -2199,7 +2199,7 @@ if (true /*$bandeau_colore*/) {
 //		echo "<a href='" . generer_url_ecrire("articles_tous","") . "' class='icone26' onMouseOver=\"changestyle('bandeautoutsite','visibility','visible');\">" .
 //		  http_img_pack("tout-site.png", "", "width='26' height='20'") . "</a>";
 
-		echo "<a href='" . generer_url_ecrire("articles_tous") . "' class='icone26' onmouseover=\"changestyle('bandeautoutsite','visibility','visible'); charger_id_url_si_vide('" . generer_url_ecrire("ajax_page", "fonction=aff_nav_recherche&id=$id_rubrique") . "','nav-recherche');\">",
+		echo "<a href='" . generer_url_ecrire("articles_tous") . "' class='icone26' onmouseover=\"changestyle('bandeautoutsite','visibility','visible'); charger_id_url_si_vide('" . generer_url_ecrire("ajax_page", "fonction=naviguer&id=$id_rubrique") . "','nav-recherche');\">",
 		  http_img_pack("tout-site.png", "", "width='26' height='20'") . "</a>";
 		if ($id_rubrique > 0) echo "<a href='" . generer_url_ecrire("brouteur","id_rubrique=$id_rubrique") . "' class='icone26' onmouseover=\"changestyle('bandeaunavrapide','visibility','visible');\">" .
 		  http_img_pack("naviguer-site.png", "", "width='26' height='20'") ."</a>";
diff --git a/ecrire/index.php b/ecrire/index.php
index ad991dfe0c..36082d6295 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -182,7 +182,25 @@ else
 		verifie_include_plugins();
 	}
 
-$var_f = charger_fonction($exec);
-$var_f();
-
+if ($exec != 'ajax_page') {
+	$var_f = charger_fonction($exec);
+	$var_f();
+ } else {
+	$var_f = 'ajax_' . _request('fonction');
+	$var_f = charger_fonction($var_f, 'inc');
+	
+// recuperer le resulat pour reencodage et envoi du prefixe
+// (attention: ca peut envoyer des entetes ==> envoyer le prefixe apres)
+	$r = $var_f(); 
+
+	include_spip('inc/charsets');
+	$charset = $GLOBALS['meta']["charset"];
+
+// Curieux: le content-type bloque MSIE!
+//		@header('Content-type: text/html; charset=$charset');
+
+	echo "<"."?xml version='1.0' encoding='$charset'?".">\n";
+# gerer un charset minimaliste en convertissant tout en unicode &#xxx;
+	echo charset2unicode($r, 'AUTO', true);
+ }
 ?>
-- 
GitLab