From 61ee350875051f95befe6fabcffe35695df0d510 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Fri, 29 Mar 2013 08:55:52 +0000
Subject: [PATCH] Report de r20355 : Report oublie et tardif de r15574 :
 nettoyer_uri() cache son resultat dans une static. On introduit un argument
 permettant de la reseter a une valeur fournie url_de_base() cache son
 resultat dans un tableau static, indexe en fonction de la globale
 profondeur_url : on introduit un argument qui permet : - en passant une
 valeur entiere, de calculer l'url pour cette profondeur - en passant un
 array(), de reinitialiser la static en cache a cette valeur - en passant
 false, de recuperer la static

si aucune valeur n'est fournie, c'est la globale profondeur_url qui est utilisee, comme auparavant.

Ces deux modifications permettent de sauvegarder/restaurer le contexte de l'url dans laquelle une page est calculee (pour un calcul differe)
+ PHPDoc sur les deux fonctions
---
 ecrire/inc/utils.php | 52 +++++++++++++++++++++++++++++---------------
 1 file changed, 34 insertions(+), 18 deletions(-)

diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index d12bbe0fa3..879100fefb 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -465,14 +465,18 @@ function ancre_url($url, $ancre) {
 	return $url . (strlen($ancre) ? '#'. $ancre : '');
 }
 
-//
-// pour le nom du cache, les types_urls et self
-//
-// http://doc.spip.org/@nettoyer_uri
-function nettoyer_uri()
+/**
+ * pour le nom du cache, les types_urls et self
+ * http://doc.spip.org/@nettoyer_uri
+ *
+ * @param string|null $reset
+ * @return string
+ */
+function nettoyer_uri($reset = null)
 {
 	static $done = false;
 	static $propre = '';
+	if (!is_null($reset)) return $propre=$reset;
 	if ($done) return $propre;
 	$done = true;
 
@@ -1416,20 +1420,32 @@ function test_valeur_serveur($truc) {
 //
 // Fonctions de fabrication des URL des scripts de Spip
 //
-
-// l'URL de base du site, sans se fier a meta(adresse_site) qui
-// peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
-// Note : la globale $profondeur_url doit etre initialisee de maniere a
-// indiquer le nombre de sous-repertoires de l'url courante par rapport a la
-// racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
-// la racine 0. Sur url/perso/ elle vaut 2
-// http://doc.spip.org/@url_de_base
-function url_de_base() {
+/**
+ * l'URL de base du site, sans se fier a meta(adresse_site) qui
+ * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
+ * Note : la globale $profondeur_url doit etre initialisee de maniere a
+ * indiquer le nombre de sous-repertoires de l'url courante par rapport a la
+ * racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
+ * la racine 0. Sur url/perso/ elle vaut 2
+ * http://doc.spip.org/@url_de_base
+ *
+ * @param int|boo|array $profondeur
+ *    si non renseignee : retourne l'url pour la profondeur $GLOBALS['profondeur_url']
+ *    si int : indique que l'on veut l'url pour la prondeur indiquee
+ *    si bool : retourne le tableau static complet
+ *    si array : reinitialise le tableau static complet avec la valeur fournie
+ * @return string|array
+ */
+function url_de_base($profondeur=null) {
 
 	static $url = array();
+	if (is_array($profondeur)) return $url = $profondeur;
+	if ($profondeur===false) return $url;
+
+	if (is_null($profondeur)) $profondeur = $GLOBALS['profondeur_url'];
 
-	if (isset($url[$GLOBALS['profondeur_url']]))
-		return $url[$GLOBALS['profondeur_url']];
+	if (isset($url[$profondeur]))
+		return $url[$profondeur];
 
 	$http = (
 		(isset($_SERVER["SCRIPT_URI"]) AND
@@ -1456,9 +1472,9 @@ function url_de_base() {
 		}
 	}
 
-	$url[$GLOBALS['profondeur_url']] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$GLOBALS['profondeur_url']);
+	$url[$profondeur] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$profondeur);
 
-	return $url[$GLOBALS['profondeur_url']];
+	return $url[$profondeur];
 }
 /**
  * fonction testable de construction d'une url appelee par url_de_base()
-- 
GitLab