From 2649ed77426c76efbf5bd33d034fa0cb6c2f738a Mon Sep 17 00:00:00 2001
From: RastaPopoulos <rastapopoulos@spip.org>
Date: Tue, 24 Nov 2015 12:11:38 +0000
Subject: [PATCH] =?UTF-8?q?On=20ajoute=20un=20fallback=20a=20la=20fonction?=
 =?UTF-8?q?=20url=5Fde=5Fbase()=20avec=20d'utiliser=20adresse=5Fsite=20en?=
 =?UTF-8?q?=20dernier=20recours.=20Cela=20permet=20d'avoir=20une=20URL=20d?=
 =?UTF-8?q?e=20site=20dans=20tous=20les=20cas,=20m=C3=AAme=20quand=20on=20?=
 =?UTF-8?q?ne=20navigue=20pas=20avec=20un=20client=20web=20classique=20(pa?=
 =?UTF-8?q?r=20exemple=20en=20CLI,=20mais=20=C3=A7a=20peut=20=C3=AAtre=20d?=
 =?UTF-8?q?'autres=20types=20d'appel).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/utils.php | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 70fb0705c8..98f778f167 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1524,8 +1524,9 @@ function test_valeur_serveur($truc) {
 /**
  * Calcule l'url de base du site
  *
- * Calcule l'URL de base du site, sans se fier à la méta (adresse_site) qui
- * peut être fausse (sites avec plusieurs noms d’hôtes, déplacements, erreurs)
+ * Calcule l'URL de base du site, en priorité sans se fier à la méta (adresse_site) qui
+ * peut être fausse (sites avec plusieurs noms d’hôtes, déplacements, erreurs).
+ * En dernier recours, lorsqu'on ne trouve rien, on utilise adresse_site comme fallback.
  * 
  * @note
  *     La globale `$profondeur_url` doit être initialisée de manière à
@@ -1561,8 +1562,16 @@ function url_de_base($profondeur = null) {
 		$host = strtr($_SERVER['HTTP_X_FORWARDED_HOST'], "<>?\"' \r\n", '________');
 	}
 	else {
-		# note : HTTP_HOST contient le :port si necessaire
+		// note : HTTP_HOST contient le :port si necessaire
 		$host = $_SERVER['HTTP_HOST'];
+		// si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
+		if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
+			$host = $GLOBALS['meta']['adresse_site'];
+			if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
+				$http = $scheme;
+				$host = str_replace("{$scheme}://", '', $host);
+			}
+		}
 		if (isset($_SERVER['SERVER_PORT'])
 			AND $port=$_SERVER['SERVER_PORT']
 			AND strpos($host,":")==false){
-- 
GitLab