From aa56bb18aed48b52b7b7d41df68c0be52092b1a9 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 28 May 2007 12:56:19 +0000
Subject: [PATCH] modifie le prototype de self() de facon a nous debarrasser de
 la construction str_replace('&amp;', '&', self()) et la remplacer par self(&)

le cas self(true) ne servait qu'en une seule occasion
---
 ecrire/balise/formulaire_admin.php       |  2 +-
 ecrire/balise/formulaire_inscription.php |  4 +++-
 ecrire/balise/formulaire_site.php        |  2 +-
 ecrire/balise/login_public.php           |  2 +-
 ecrire/balise/menu_lang_ecrire.php       |  3 ++-
 ecrire/inc/filtres.php                   |  4 ++--
 ecrire/inc/forum.php                     |  2 +-
 ecrire/inc/utils.php                     |  6 +++++-
 ecrire/public.php                        | 10 ++++++----
 ecrire/public/balises.php                |  2 +-
 10 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/ecrire/balise/formulaire_admin.php b/ecrire/balise/formulaire_admin.php
index 22caea8224..f8f35c8e50 100644
--- a/ecrire/balise/formulaire_admin.php
+++ b/ecrire/balise/formulaire_admin.php
@@ -156,7 +156,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 	// Preparer le #ENV des boutons
 	$env = array(
 		'ecrire' => $ecrire,
-		'action' => self(),
+		'action' => self('&'),
 		'divclass' => $float,
 		'lang' => $lang,
 		'calcul' => (_request('var_mode') ? 'recalcul' : 'calcul'),
diff --git a/ecrire/balise/formulaire_inscription.php b/ecrire/balise/formulaire_inscription.php
index 782b089c27..906188070b 100644
--- a/ecrire/balise/formulaire_inscription.php
+++ b/ecrire/balise/formulaire_inscription.php
@@ -78,7 +78,9 @@ function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id=0) {
 				'commentaire' => $commentaire,
 				'nom_inscription' => _request('nom_inscription'),
 				'mail_inscription' => _request('mail_inscription'),
-				'self' => str_replace('&amp;','&',(self()))));
+				'self' => self('&')
+			)
+		);
 }
 
 // http://doc.spip.org/@test_mode_inscription
diff --git a/ecrire/balise/formulaire_site.php b/ecrire/balise/formulaire_site.php
index 0d88f15089..a697bda0c4 100644
--- a/ecrire/balise/formulaire_site.php
+++ b/ecrire/balise/formulaire_site.php
@@ -62,7 +62,7 @@ function balise_FORMULAIRE_SITE_dyn($id_rubrique) {
 
 	return array('formulaires/site', $GLOBALS['delais'],
 		array(
-			'self' => str_replace('&amp;', '&', self()),
+			'self' => self('&'),
 			'message_ok' => $message_ok,
 			'message_erreur' => $message_erreur,
 			'nom_site' => $nom,
diff --git a/ecrire/balise/login_public.php b/ecrire/balise/login_public.php
index 1d14c52b00..9cca3625e1 100644
--- a/ecrire/balise/login_public.php
+++ b/ecrire/balise/login_public.php
@@ -172,7 +172,7 @@ function login_pour_tous($login, $cible, $action) {
 					'echec_visiteur' => $echec_visiteur,
 					'login' => $login,
 					'login_alt' => (isset($login_alt) ? $login_alt : $login),
-					'self' => str_replace('&amp;', '&', self()),
+					'self' => self('&'),
 					'rester_connecte' => $rester_connecte
 					)
 				)
diff --git a/ecrire/balise/menu_lang_ecrire.php b/ecrire/balise/menu_lang_ecrire.php
index 5f630de55c..a880a50a68 100644
--- a/ecrire/balise/menu_lang_ecrire.php
+++ b/ecrire/balise/menu_lang_ecrire.php
@@ -52,7 +52,8 @@ function menu_lang_pour_tous($nom, $default) {
 	if (!$opt)
 		return '';
 
-	$cible = str_replace('&amp;', '&', parametre_url(self( /* racine */ true), 'lang' , '')); # lien a partir de /
+	# lien a partir de /
+	$cible = parametre_url(self('&', /* racine */ true), 'lang' , '', '&');
 	$post = generer_url_action('converser', 'redirect='. rawurlencode($cible), '&');
 
 	return array('formulaires/menu_lang',
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index e3d652c436..c5f3a4ff38 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -1027,7 +1027,7 @@ function agenda_affiche($i)
 	$sinon = array_shift($args);
 	$type = array_shift($args);
 	if (!$nb){ 
-		return http_calendrier_init('', ($type != 'periode') ? $type : 'mois', '', '', str_replace('&amp;', '&', self()), $sinon);
+		return http_calendrier_init('', ($type != 'periode') ? $type : 'mois', '', '', self('&'), $sinon);
 	}	
 	$agenda = agenda_memo(0);
 	$evt = array();
@@ -1058,7 +1058,7 @@ function agenda_affiche($i)
 		$evt = array('', $evt, $min, $max);
 		$type = 'mois';
 	}
-	return http_calendrier_init($start, $type, '', '', str_replace('&amp;', '&', self()), $evt);
+	return http_calendrier_init($start, $type, '', '', self('&'), $evt);
 }
 
 //
diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php
index 06411a4bf1..78ba0699ed 100644
--- a/ecrire/inc/forum.php
+++ b/ecrire/inc/forum.php
@@ -120,7 +120,7 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref
 			return;
 	}
 
-	$lien = str_replace('&amp;', '&', self()) . "#id$id_forum";
+	$lien = self('&') . "#id$id_forum";
 	$boutons ='';
 	if ($suppression)
 	  $boutons .= icone_inline(_T('icone_supprimer_message'), generer_action_auteur('instituer_forum',"$id_forum-$suppression", _DIR_RESTREINT_ABS . $lien),
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 3d1ad11b13..f3af945afb 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -443,7 +443,7 @@ function nettoyer_uri() {
 // les trucs inutiles
 //
 // http://doc.spip.org/@self
-function self($root = false) {
+function self($amp = '&amp;', $root = false) {
 	$url = nettoyer_uri();
 	if (!$root)
 		$url = preg_replace(',^[^?]*/,', '', $url);
@@ -465,6 +465,10 @@ function self($root = false) {
 	// eviter les hacks
 	$url = htmlspecialchars($url);
 
+	// &amp; ?
+	if ($amp != '&amp;')
+		$url = str_replace('&amp;', $amp, $url);
+
 	// Si c'est vide, donner './'
 	$url = preg_replace(',^$,', './', $url);
 
diff --git a/ecrire/public.php b/ecrire/public.php
index e17ef8f403..bd2a66ab39 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -123,8 +123,7 @@ if (defined('_INC_PUBLIC')) {
 
 	if ($var_preview AND $html) {
 		include_spip('inc/minipres'); // pour http_img_pack
-		$x = _T('previsualisation');
-		$page['texte'] .= '<div class="spip_large" style="
+		$x = '<div class="spip_large" style="
 		display: block;
 		color: #eeeeee;
 		background-color: #111111;
@@ -135,8 +134,11 @@ if (defined('_INC_PUBLIC')) {
 		left: 0px;
 		position: absolute;
 		">' 
-		. http_img_pack('naviguer-site.png', $x, '')
-		. '&nbsp;' . majuscules($x) . '</div>';
+		. http_img_pack('naviguer-site.png', _T('previsualisation'), '')
+		. '&nbsp;' . majuscules(_T('previsualisation')) . '</div>';
+		if (!$pos = strpos($page['texte'], '</body>'))
+			$pos = strlen($page['texte']);
+		$page['texte'] = substr_replace($page['texte'], $x, $pos, 0);
 	}
 
 	// est-on admin ?
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 3089b1a84d..11e08e6e9d 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -908,7 +908,7 @@ function balise_PARAMETRES_FORUM_dist($p) {
 // http://www.spip.net/@self
 // http://doc.spip.org/@balise_SELF_dist
 function balise_SELF_dist($p) {
-	$p->code = 'quote_amp(self())';
+	$p->code = 'self()';
 	$p->interdire_scripts = false;
 	return $p;
 }
-- 
GitLab