From 7517b77864da407b5b96d2e8103ed5d55a09b489 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 19 Sep 2008 06:31:00 +0000
Subject: [PATCH] =?UTF-8?q?Appliquer=20la=20solution=20[12716]=C2=A0=C3=A0?=
 =?UTF-8?q?=20[12689].?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/presentation.php |  6 +--
 ecrire/inc/urls.php         | 79 ++++++++++++++++++++-----------------
 ecrire/inc/utils.php        |  8 ++++
 3 files changed, 52 insertions(+), 41 deletions(-)

diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index 313791fcca..aa590524a1 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -1137,14 +1137,10 @@ function voir_en_ligne ($type, $id, $statut=false, $image='racine-24.gif', $af =
 	else
 		return '';
 
-	$h = generer_url_entite($id, $type, "var_mode=$en_ligne", '', true);
+	$h = generer_url_entite_absolue($id, $type, "var_mode=$en_ligne", '', true);
 
 	$h = str_replace('&', '&amp;', $h);
 
-	// Forcer l'URL absolue si ce n'est fait.
-	if (!preg_match(',^\w+:,', $h))
-		$h = url_absolue(_DIR_RACINE . $h);
-
 	return $inline  
 	  ? icone_inline($message, $h, $image, "rien.gif", $GLOBALS['spip_lang_left'])
 	: icone_horizontale($message, $h, $image, "rien.gif",$af);
diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php
index e25405cc29..f3bacecb1d 100644
--- a/ecrire/inc/urls.php
+++ b/ecrire/inc/urls.php
@@ -16,82 +16,89 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // des items des tables SQL principales, selon le statut de publication
 
 // http://doc.spip.org/@generer_url_ecrire_article
-function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_article($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_article=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_articles', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'article', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('articles', $a) . ($ancre ? "#$ancre" : '');
+	$h = ($statut == 'publie' OR $connect)
+	? generer_url_entite_absolue($id, 'article', $args, $ancre, $connect)
+	: (generer_url_ecrire('articles', $a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_rubrique
-function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_rubrique($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_rubrique=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_rubriques', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'rubrique', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('naviguer',$a) . ($ancre ? "#$ancre" : '');
+	$h = ($statut == 'publie' OR $connect)
+	? generer_url_entite_absolue($id, 'rubrique', $args, $ancre, $connect)
+	: (generer_url_ecrire('naviguer',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_breve
-function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_breve($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_breve=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_breves', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'breve', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('breves_voir',$a) . ($ancre ? "#$ancre" : '');
+	$h = ($statut == 'publie' OR $connect)
+	?  generer_url_entite_absolue($id, 'breve', $args, $ancre, $connect)
+	: (generer_url_ecrire('breves_voir',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_mot
-function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_mot($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_mot=" . intval($id);
-	if ($suite) $a .= "&$suite";
-	if (!$statut) {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'mot', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('mots_edit',$a) . ($ancre ? "#$ancre" : '');
+	$h = (!$statut OR $connect)
+	?  generer_url_entite_absolue($id, 'mot', $args, $ancre, $connect)
+	: (generer_url_ecrire('mots_edit',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_site
-function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_site($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_syndic=" . intval($id);
-	if ($suite) $a .= "&$suite";
-	if (!$statut) {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'site', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('sites',$a) . ($ancre ? "#$ancre" : '');
+	$h = (!$statut OR $connect)
+	?  generer_url_entite_absolue($id, 'site', $args, $ancre, $connect)
+	: (generer_url_ecrire('sites',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_auteur
-function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_auteur($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_auteur=" . intval($id);
-	if ($suite) $a .= "&$suite";
-	if (!$statut) {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'auteur', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('auteur_infos',$a) . ($ancre ? "#$ancre" : '');
+	$h = (!$statut OR $connect)
+	?  generer_url_entite_absolue($id, 'auteur', $args, $ancre, $connect)
+	: (generer_url_ecrire('auteur_infos',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_forum
-function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_forum($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_forum=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_forum', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'forum', $suite, $ancre, true)));
-	}  else return generer_url_ecrire('controle_forum', "debut_id_forum=$id");
+	$h = ($statut == 'publie' OR $connect)
+	?  generer_url_entite_absolue($id, 'forum', $args, $ancre, $connect)
+	: (generer_url_ecrire('controle_forum', "debut_id_forum=$id" . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_document
-function generer_url_ecrire_document($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_document($id, $args='', $ancre='', $statut='', $connect='') {
 	include_spip('inc/documents');
 	return generer_url_document_dist($id);
 }
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 0a254f5770..30df63fe93 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -768,6 +768,14 @@ function generer_url_entite($id='', $entite='', $args='', $ancre='', $public=NUL
 	return '';
 }
 
+function generer_url_entite_absolue($id='', $entite='', $args='', $ancre='', $connect=NULL)
+{
+	if (!$connect) $connect = true;
+	$h = generer_url_entite($id, $entite, $args, $ancre, $connect);
+	if (!preg_match(',^\w+:,', $h)) $h = url_absolue(_DIR_RACINE . $h);
+	return  $h;
+}
+
 // Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines
 // variables d'environnement comme $_SERVER[HTTPS] ou ini_get(register_globals)
 // http://doc.spip.org/@test_valeur_serveur
-- 
GitLab