Completed
Push — master ( 24fa88...8e96c3 )
by cam
01:06
created
ecrire/public/assembler.php 1 patch
Indentation   +632 added lines, -632 removed lines patch added patch discarded remove patch
@@ -20,180 +20,180 @@  discard block
 block discarded – undo
20 20
  **/
21 21
 
22 22
 if (!defined('_ECRIRE_INC_VERSION')) {
23
-	return;
23
+    return;
24 24
 }
25 25
 
26 26
 // En cas de modification, il faut aussi actualiser la regexp de nettoyer_uri_var() dans inc/utils.php
27 27
 if (!defined('_CONTEXTE_IGNORE_VARIABLES')) {
28
-	define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
28
+    define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
29 29
 }
30 30
 
31 31
 function assembler($fond, string $connect = '') {
32 32
 
33
-	$chemin_cache = null;
34
-	$lastmodified = null;
35
-	$res = null;
36
-	// flag_preserver est modifie ici, et utilise en globale
37
-	// use_cache sert a informer le bouton d'admin pr savoir s'il met un *
38
-	// contexte est utilise en globale dans le formulaire d'admin
39
-
40
-	$GLOBALS['contexte'] = calculer_contexte();
41
-	$page = ['contexte_implicite' => calculer_contexte_implicite()];
42
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(
43
-		',\.[a-zA-Z0-9]*$,',
44
-		'',
45
-		preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
46
-	);
47
-	// Cette fonction est utilisee deux fois
48
-	$cacher = charger_fonction('cacher', 'public', true);
49
-	// Les quatre derniers parametres sont modifies par la fonction:
50
-	// emplacement, validite, et, s'il est valide, contenu & age
51
-	if ($cacher) {
52
-		$res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
53
-	} else {
54
-		$GLOBALS['use_cache'] = -1;
55
-	}
56
-	// Si un resultat est retourne, c'est un message d'impossibilite
57
-	if ($res) {
58
-		return ['texte' => $res];
59
-	}
60
-
61
-	if (!$chemin_cache || !$lastmodified) {
62
-		$lastmodified = time();
63
-	}
64
-
65
-	$headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
66
-	$calculer_page = true;
67
-
68
-	// Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
69
-	// une perennite valide a meme reponse qu'une requete HEAD (par defaut les
70
-	// pages sont dynamiques)
71
-	if (
72
-		isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
73
-		and (!defined('_VAR_MODE') or !_VAR_MODE)
74
-		and $chemin_cache
75
-		and isset($page['entetes'])
76
-		and isset($page['entetes']['Cache-Control'])
77
-		and strstr($page['entetes']['Cache-Control'], 'max-age=')
78
-		and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
79
-	) {
80
-		$since = preg_replace(
81
-			'/;.*/',
82
-			'',
83
-			$_SERVER['HTTP_IF_MODIFIED_SINCE']
84
-		);
85
-		$since = str_replace('GMT', '', $since);
86
-		if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) {
87
-			$page['status'] = 304;
88
-			$headers_only = true;
89
-			$calculer_page = false;
90
-		}
91
-	}
92
-
93
-	// Si requete HEAD ou Last-modified compatible, ignorer le texte
94
-	// et pas de content-type (pour contrer le bouton admin de inc-public)
95
-	if (!$calculer_page) {
96
-		$page['texte'] = '';
97
-	} else {
98
-		// si la page est prise dans le cache
99
-		if (!$GLOBALS['use_cache']) {
100
-			// Informer les boutons d'admin du contexte
101
-			// (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
102
-			$GLOBALS['contexte'] = $page['contexte'];
103
-
104
-			// vider les globales url propres qui ne doivent plus etre utilisees en cas
105
-			// d'inversion url => objet
106
-			// plus necessaire si on utilise bien la fonction urls_decoder_url
107
-			#unset($_SERVER['REDIRECT_url_propre']);
108
-			#unset($_ENV['url_propre']);
109
-		} else {
110
-			// Compat ascendante :
111
-			// 1. $contexte est global
112
-			// (a evacuer car urls_decoder_url gere ce probleme ?)
113
-			// et calculer la page
114
-			if (!test_espace_prive()) {
115
-				include_spip('inc/urls');
116
-				[$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url(
117
-					nettoyer_uri(),
118
-					$fond,
119
-					$GLOBALS['contexte'],
120
-					true
121
-				);
122
-			}
123
-			// squelette par defaut
124
-			if (!strlen($fond ?? '')) {
125
-				$fond = 'sommaire';
126
-			}
127
-
128
-			// produire la page : peut mettre a jour $lastmodified
129
-			$produire_page = charger_fonction('produire_page', 'public');
130
-			$page = $produire_page(
131
-				$fond,
132
-				$GLOBALS['contexte'],
133
-				$GLOBALS['use_cache'],
134
-				$chemin_cache,
135
-				null,
136
-				$page,
137
-				$lastmodified,
138
-				$connect
139
-			);
140
-			if ($page === '') {
141
-				$erreur = _T(
142
-					'info_erreur_squelette2',
143
-					['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
144
-				);
145
-				erreur_squelette($erreur);
146
-				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
147
-				$page = ['texte' => '', 'erreur' => $erreur];
148
-			}
149
-		}
150
-
151
-		if ($page and $chemin_cache) {
152
-			$page['cache'] = $chemin_cache;
153
-		}
154
-
155
-		auto_content_type($page);
156
-
157
-		$GLOBALS['flag_preserver'] |= headers_sent();
158
-
159
-		// Definir les entetes si ce n'est fait
160
-		if (!$GLOBALS['flag_preserver']) {
161
-			if ($GLOBALS['flag_ob']) {
162
-				// Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
163
-				if (
164
-					trim($page['texte']) === ''
165
-					and _VAR_MODE != 'debug'
166
-					and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
167
-				) {
168
-					$GLOBALS['contexte']['fond_erreur'] = $fond;
169
-					$page = message_page_indisponible($page, $GLOBALS['contexte']);
170
-				}
171
-				// pas de cache client en mode 'observation'
172
-				if (defined('_VAR_MODE') and _VAR_MODE) {
173
-					$page['entetes']['Cache-Control'] = 'no-cache,must-revalidate';
174
-					$page['entetes']['Pragma'] = 'no-cache';
175
-				}
176
-			}
177
-		}
178
-	}
179
-
180
-	// Entete Last-Modified:
181
-	// eviter d'etre incoherent en envoyant un lastmodified identique
182
-	// a celui qu'on a refuse d'honorer plus haut (cf. #655)
183
-	if (
184
-		$lastmodified
185
-		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
186
-		and !isset($page['entetes']['Last-Modified'])
187
-	) {
188
-		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
189
-	}
190
-
191
-	// fermer la connexion apres les headers si requete HEAD
192
-	if ($headers_only) {
193
-		$page['entetes']['Connection'] = 'close';
194
-	}
195
-
196
-	return $page;
33
+    $chemin_cache = null;
34
+    $lastmodified = null;
35
+    $res = null;
36
+    // flag_preserver est modifie ici, et utilise en globale
37
+    // use_cache sert a informer le bouton d'admin pr savoir s'il met un *
38
+    // contexte est utilise en globale dans le formulaire d'admin
39
+
40
+    $GLOBALS['contexte'] = calculer_contexte();
41
+    $page = ['contexte_implicite' => calculer_contexte_implicite()];
42
+    $page['contexte_implicite']['cache'] = $fond . preg_replace(
43
+        ',\.[a-zA-Z0-9]*$,',
44
+        '',
45
+        preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
46
+    );
47
+    // Cette fonction est utilisee deux fois
48
+    $cacher = charger_fonction('cacher', 'public', true);
49
+    // Les quatre derniers parametres sont modifies par la fonction:
50
+    // emplacement, validite, et, s'il est valide, contenu & age
51
+    if ($cacher) {
52
+        $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
53
+    } else {
54
+        $GLOBALS['use_cache'] = -1;
55
+    }
56
+    // Si un resultat est retourne, c'est un message d'impossibilite
57
+    if ($res) {
58
+        return ['texte' => $res];
59
+    }
60
+
61
+    if (!$chemin_cache || !$lastmodified) {
62
+        $lastmodified = time();
63
+    }
64
+
65
+    $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
66
+    $calculer_page = true;
67
+
68
+    // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
69
+    // une perennite valide a meme reponse qu'une requete HEAD (par defaut les
70
+    // pages sont dynamiques)
71
+    if (
72
+        isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
73
+        and (!defined('_VAR_MODE') or !_VAR_MODE)
74
+        and $chemin_cache
75
+        and isset($page['entetes'])
76
+        and isset($page['entetes']['Cache-Control'])
77
+        and strstr($page['entetes']['Cache-Control'], 'max-age=')
78
+        and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
79
+    ) {
80
+        $since = preg_replace(
81
+            '/;.*/',
82
+            '',
83
+            $_SERVER['HTTP_IF_MODIFIED_SINCE']
84
+        );
85
+        $since = str_replace('GMT', '', $since);
86
+        if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) {
87
+            $page['status'] = 304;
88
+            $headers_only = true;
89
+            $calculer_page = false;
90
+        }
91
+    }
92
+
93
+    // Si requete HEAD ou Last-modified compatible, ignorer le texte
94
+    // et pas de content-type (pour contrer le bouton admin de inc-public)
95
+    if (!$calculer_page) {
96
+        $page['texte'] = '';
97
+    } else {
98
+        // si la page est prise dans le cache
99
+        if (!$GLOBALS['use_cache']) {
100
+            // Informer les boutons d'admin du contexte
101
+            // (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
102
+            $GLOBALS['contexte'] = $page['contexte'];
103
+
104
+            // vider les globales url propres qui ne doivent plus etre utilisees en cas
105
+            // d'inversion url => objet
106
+            // plus necessaire si on utilise bien la fonction urls_decoder_url
107
+            #unset($_SERVER['REDIRECT_url_propre']);
108
+            #unset($_ENV['url_propre']);
109
+        } else {
110
+            // Compat ascendante :
111
+            // 1. $contexte est global
112
+            // (a evacuer car urls_decoder_url gere ce probleme ?)
113
+            // et calculer la page
114
+            if (!test_espace_prive()) {
115
+                include_spip('inc/urls');
116
+                [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url(
117
+                    nettoyer_uri(),
118
+                    $fond,
119
+                    $GLOBALS['contexte'],
120
+                    true
121
+                );
122
+            }
123
+            // squelette par defaut
124
+            if (!strlen($fond ?? '')) {
125
+                $fond = 'sommaire';
126
+            }
127
+
128
+            // produire la page : peut mettre a jour $lastmodified
129
+            $produire_page = charger_fonction('produire_page', 'public');
130
+            $page = $produire_page(
131
+                $fond,
132
+                $GLOBALS['contexte'],
133
+                $GLOBALS['use_cache'],
134
+                $chemin_cache,
135
+                null,
136
+                $page,
137
+                $lastmodified,
138
+                $connect
139
+            );
140
+            if ($page === '') {
141
+                $erreur = _T(
142
+                    'info_erreur_squelette2',
143
+                    ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
144
+                );
145
+                erreur_squelette($erreur);
146
+                // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
147
+                $page = ['texte' => '', 'erreur' => $erreur];
148
+            }
149
+        }
150
+
151
+        if ($page and $chemin_cache) {
152
+            $page['cache'] = $chemin_cache;
153
+        }
154
+
155
+        auto_content_type($page);
156
+
157
+        $GLOBALS['flag_preserver'] |= headers_sent();
158
+
159
+        // Definir les entetes si ce n'est fait
160
+        if (!$GLOBALS['flag_preserver']) {
161
+            if ($GLOBALS['flag_ob']) {
162
+                // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
163
+                if (
164
+                    trim($page['texte']) === ''
165
+                    and _VAR_MODE != 'debug'
166
+                    and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
167
+                ) {
168
+                    $GLOBALS['contexte']['fond_erreur'] = $fond;
169
+                    $page = message_page_indisponible($page, $GLOBALS['contexte']);
170
+                }
171
+                // pas de cache client en mode 'observation'
172
+                if (defined('_VAR_MODE') and _VAR_MODE) {
173
+                    $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate';
174
+                    $page['entetes']['Pragma'] = 'no-cache';
175
+                }
176
+            }
177
+        }
178
+    }
179
+
180
+    // Entete Last-Modified:
181
+    // eviter d'etre incoherent en envoyant un lastmodified identique
182
+    // a celui qu'on a refuse d'honorer plus haut (cf. #655)
183
+    if (
184
+        $lastmodified
185
+        and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
186
+        and !isset($page['entetes']['Last-Modified'])
187
+    ) {
188
+        $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
189
+    }
190
+
191
+    // fermer la connexion apres les headers si requete HEAD
192
+    if ($headers_only) {
193
+        $page['entetes']['Connection'] = 'close';
194
+    }
195
+
196
+    return $page;
197 197
 }
198 198
 
199 199
 /**
@@ -210,19 +210,19 @@  discard block
 block discarded – undo
210 210
  */
211 211
 function calculer_contexte() {
212 212
 
213
-	$contexte = [];
214
-	foreach ($_GET as $var => $val) {
215
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
216
-			$contexte[$var] = $val;
217
-		}
218
-	}
219
-	foreach ($_POST as $var => $val) {
220
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
221
-			$contexte[$var] = $val;
222
-		}
223
-	}
224
-
225
-	return $contexte;
213
+    $contexte = [];
214
+    foreach ($_GET as $var => $val) {
215
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
216
+            $contexte[$var] = $val;
217
+        }
218
+    }
219
+    foreach ($_POST as $var => $val) {
220
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
221
+            $contexte[$var] = $val;
222
+        }
223
+    }
224
+
225
+    return $contexte;
226 226
 }
227 227
 
228 228
 /**
@@ -233,25 +233,25 @@  discard block
 block discarded – undo
233 233
  * @return array
234 234
  */
235 235
 function calculer_contexte_implicite() {
236
-	static $notes = null;
237
-	if (is_null($notes)) {
238
-		$notes = charger_fonction('notes', 'inc', true);
239
-	}
240
-	$contexte_implicite = [
241
-		'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
242
-		'host' => ($_SERVER['HTTP_HOST'] ?? null),
243
-		'https' => ($_SERVER['HTTPS'] ?? ''),
244
-		'espace' => test_espace_prive(),
245
-		'marqueur' => ($GLOBALS['marqueur'] ?? ''),
246
-		'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''),
247
-		'notes' => $notes ? $notes('', 'contexter_cache') : '',
248
-		'spip_version_code' => $GLOBALS['spip_version_code'],
249
-	];
250
-	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
251
-		$contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
252
-	}
253
-
254
-	return $contexte_implicite;
236
+    static $notes = null;
237
+    if (is_null($notes)) {
238
+        $notes = charger_fonction('notes', 'inc', true);
239
+    }
240
+    $contexte_implicite = [
241
+        'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
242
+        'host' => ($_SERVER['HTTP_HOST'] ?? null),
243
+        'https' => ($_SERVER['HTTPS'] ?? ''),
244
+        'espace' => test_espace_prive(),
245
+        'marqueur' => ($GLOBALS['marqueur'] ?? ''),
246
+        'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''),
247
+        'notes' => $notes ? $notes('', 'contexter_cache') : '',
248
+        'spip_version_code' => $GLOBALS['spip_version_code'],
249
+    ];
250
+    if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
251
+        $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
252
+    }
253
+
254
+    return $contexte_implicite;
255 255
 }
256 256
 
257 257
 //
@@ -260,55 +260,55 @@  discard block
 block discarded – undo
260 260
 
261 261
 function auto_content_type($page) {
262 262
 
263
-	if (!isset($GLOBALS['flag_preserver'])) {
264
-		$GLOBALS['flag_preserver'] = ($page && preg_match(
265
-			'/header\s*\(\s*.content\-type:/isx',
266
-			$page['texte']
267
-		) || (isset($page['entetes']['Content-Type'])));
268
-	}
263
+    if (!isset($GLOBALS['flag_preserver'])) {
264
+        $GLOBALS['flag_preserver'] = ($page && preg_match(
265
+            '/header\s*\(\s*.content\-type:/isx',
266
+            $page['texte']
267
+        ) || (isset($page['entetes']['Content-Type'])));
268
+    }
269 269
 }
270 270
 
271 271
 function inclure_page($fond, $contexte, string $connect = '') {
272
-	$use_cache = null;
273
-	$chemin_cache = null;
274
-	$lastinclude = null;
275
-	$res = null;
276
-	static $cacher, $produire_page;
277
-
278
-	// enlever le fond de contexte inclus car sinon il prend la main
279
-	// dans les sous inclusions -> boucle infinie d'inclusion identique
280
-	// (cette precaution n'est probablement plus utile)
281
-	unset($contexte['fond']);
282
-	$page = ['contexte_implicite' => calculer_contexte_implicite()];
283
-	$page['contexte_implicite']['cache'] = $fond;
284
-	if (is_null($cacher)) {
285
-		$cacher = charger_fonction('cacher', 'public', true);
286
-	}
287
-	// Les quatre derniers parametres sont modifies par la fonction:
288
-	// emplacement, validite, et, s'il est valide, contenu & age
289
-	if ($cacher) {
290
-		$res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
291
-	} else {
292
-		$use_cache = -1;
293
-	}
294
-	// $res = message d'erreur : on sort de la
295
-	if ($res) {
296
-		return ['texte' => $res];
297
-	}
298
-
299
-	// Si use_cache ne vaut pas 0, la page doit etre calculee
300
-	// produire la page : peut mettre a jour $lastinclude
301
-	// le contexte_cache envoye a cacher() a ete conserve et est passe a produire
302
-	if ($use_cache) {
303
-		if (is_null($produire_page)) {
304
-			$produire_page = charger_fonction('produire_page', 'public');
305
-		}
306
-		$page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
307
-	}
308
-	// dans tous les cas, mettre a jour $GLOBALS['lastmodified']
309
-	$GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude);
310
-
311
-	return $page;
272
+    $use_cache = null;
273
+    $chemin_cache = null;
274
+    $lastinclude = null;
275
+    $res = null;
276
+    static $cacher, $produire_page;
277
+
278
+    // enlever le fond de contexte inclus car sinon il prend la main
279
+    // dans les sous inclusions -> boucle infinie d'inclusion identique
280
+    // (cette precaution n'est probablement plus utile)
281
+    unset($contexte['fond']);
282
+    $page = ['contexte_implicite' => calculer_contexte_implicite()];
283
+    $page['contexte_implicite']['cache'] = $fond;
284
+    if (is_null($cacher)) {
285
+        $cacher = charger_fonction('cacher', 'public', true);
286
+    }
287
+    // Les quatre derniers parametres sont modifies par la fonction:
288
+    // emplacement, validite, et, s'il est valide, contenu & age
289
+    if ($cacher) {
290
+        $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
291
+    } else {
292
+        $use_cache = -1;
293
+    }
294
+    // $res = message d'erreur : on sort de la
295
+    if ($res) {
296
+        return ['texte' => $res];
297
+    }
298
+
299
+    // Si use_cache ne vaut pas 0, la page doit etre calculee
300
+    // produire la page : peut mettre a jour $lastinclude
301
+    // le contexte_cache envoye a cacher() a ete conserve et est passe a produire
302
+    if ($use_cache) {
303
+        if (is_null($produire_page)) {
304
+            $produire_page = charger_fonction('produire_page', 'public');
305
+        }
306
+        $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
307
+    }
308
+    // dans tous les cas, mettre a jour $GLOBALS['lastmodified']
309
+    $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude);
310
+
311
+    return $page;
312 312
 }
313 313
 
314 314
 /**
@@ -326,41 +326,41 @@  discard block
 block discarded – undo
326 326
  * @return array
327 327
  */
328 328
 function public_produire_page_dist(
329
-	$fond,
330
-	$contexte,
331
-	$use_cache,
332
-	$chemin_cache,
333
-	$contexte_cache,
334
-	&$page,
335
-	&$lastinclude,
336
-	$connect = ''
329
+    $fond,
330
+    $contexte,
331
+    $use_cache,
332
+    $chemin_cache,
333
+    $contexte_cache,
334
+    &$page,
335
+    &$lastinclude,
336
+    $connect = ''
337 337
 ) {
338
-	static $parametrer, $cacher;
339
-	if (!$parametrer) {
340
-		$parametrer = charger_fonction('parametrer', 'public');
341
-	}
342
-	$page = $parametrer($fond, $contexte, $chemin_cache, $connect);
343
-	// et on l'enregistre sur le disque
344
-	if (
345
-		$chemin_cache
346
-		and $use_cache > -1
347
-		and is_array($page)
348
-		and count($page)
349
-		and isset($page['entetes']['X-Spip-Cache'])
350
-		and $page['entetes']['X-Spip-Cache'] > 0
351
-	) {
352
-		if (is_null($cacher)) {
353
-			$cacher = charger_fonction('cacher', 'public', true);
354
-		}
355
-		$lastinclude = time();
356
-		if ($cacher) {
357
-			$cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
358
-		} else {
359
-			$use_cache = -1;
360
-		}
361
-	}
362
-
363
-	return $page;
338
+    static $parametrer, $cacher;
339
+    if (!$parametrer) {
340
+        $parametrer = charger_fonction('parametrer', 'public');
341
+    }
342
+    $page = $parametrer($fond, $contexte, $chemin_cache, $connect);
343
+    // et on l'enregistre sur le disque
344
+    if (
345
+        $chemin_cache
346
+        and $use_cache > -1
347
+        and is_array($page)
348
+        and count($page)
349
+        and isset($page['entetes']['X-Spip-Cache'])
350
+        and $page['entetes']['X-Spip-Cache'] > 0
351
+    ) {
352
+        if (is_null($cacher)) {
353
+            $cacher = charger_fonction('cacher', 'public', true);
354
+        }
355
+        $lastinclude = time();
356
+        if ($cacher) {
357
+            $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
358
+        } else {
359
+            $use_cache = -1;
360
+        }
361
+    }
362
+
363
+    return $page;
364 364
 }
365 365
 
366 366
 // Fonction inseree par le compilateur dans le code compile.
@@ -374,14 +374,14 @@  discard block
 block discarded – undo
374 374
 // 4: langue
375 375
 
376 376
 function inserer_balise_dynamique($contexte_exec, $contexte_compil) {
377
-	arguments_balise_dyn_depuis_modele(null, 'reset');
378
-
379
-	if (!is_array($contexte_exec)) {
380
-		echo $contexte_exec;
381
-	} // message d'erreur etc
382
-	else {
383
-		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
384
-	}
377
+    arguments_balise_dyn_depuis_modele(null, 'reset');
378
+
379
+    if (!is_array($contexte_exec)) {
380
+        echo $contexte_exec;
381
+    } // message d'erreur etc
382
+    else {
383
+        inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
384
+    }
385 385
 }
386 386
 
387 387
 /**
@@ -394,98 +394,98 @@  discard block
 block discarded – undo
394 394
  * @return string
395 395
  */
396 396
 function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = []) {
397
-	if (is_array($texte)) {
398
-		[$fond, $delainc, $contexte_inclus] = $texte;
399
-
400
-		// delais a l'ancienne, c'est pratiquement mort
401
-		$d = $GLOBALS['delais'] ?? null;
402
-		$GLOBALS['delais'] = $delainc;
403
-
404
-		$page = recuperer_fond(
405
-			$fond,
406
-			$contexte_inclus,
407
-			['trim' => false, 'raw' => true, 'compil' => $contexte_compil]
408
-		);
409
-
410
-		$texte = $page['texte'];
411
-
412
-		$GLOBALS['delais'] = $d;
413
-		// Faire remonter les entetes
414
-		if (is_array($page['entetes'])) {
415
-			// mais pas toutes
416
-			unset($page['entetes']['X-Spip-Cache']);
417
-			unset($page['entetes']['Content-Type']);
418
-			if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
419
-				if (!is_array($GLOBALS['page']['entetes'])) {
420
-					$GLOBALS['page']['entetes'] = [];
421
-				}
422
-				$GLOBALS['page']['entetes'] =
423
-					array_merge($GLOBALS['page']['entetes'], $page['entetes']);
424
-			}
425
-		}
426
-		// _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
427
-		if (
428
-			isset($page['contexte']['_pipelines'])
429
-			and is_array($page['contexte']['_pipelines'])
430
-			and count($page['contexte']['_pipelines'])
431
-		) {
432
-			foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
433
-				$args['contexte'] = $page['contexte'];
434
-				unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
435
-				$texte = pipeline(
436
-					$pipe,
437
-					[
438
-						'data' => $texte,
439
-						'args' => $args
440
-					]
441
-				);
442
-			}
443
-		}
444
-	}
445
-
446
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
447
-		// compatibilite : avant on donnait le numero de ligne ou rien.
448
-		$ligne = intval($contexte_compil[3] ?? $contexte_compil);
449
-		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
450
-	}
451
-	if ($echo) {
452
-		echo $texte;
453
-	} else {
454
-		return $texte;
455
-	}
397
+    if (is_array($texte)) {
398
+        [$fond, $delainc, $contexte_inclus] = $texte;
399
+
400
+        // delais a l'ancienne, c'est pratiquement mort
401
+        $d = $GLOBALS['delais'] ?? null;
402
+        $GLOBALS['delais'] = $delainc;
403
+
404
+        $page = recuperer_fond(
405
+            $fond,
406
+            $contexte_inclus,
407
+            ['trim' => false, 'raw' => true, 'compil' => $contexte_compil]
408
+        );
409
+
410
+        $texte = $page['texte'];
411
+
412
+        $GLOBALS['delais'] = $d;
413
+        // Faire remonter les entetes
414
+        if (is_array($page['entetes'])) {
415
+            // mais pas toutes
416
+            unset($page['entetes']['X-Spip-Cache']);
417
+            unset($page['entetes']['Content-Type']);
418
+            if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
419
+                if (!is_array($GLOBALS['page']['entetes'])) {
420
+                    $GLOBALS['page']['entetes'] = [];
421
+                }
422
+                $GLOBALS['page']['entetes'] =
423
+                    array_merge($GLOBALS['page']['entetes'], $page['entetes']);
424
+            }
425
+        }
426
+        // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
427
+        if (
428
+            isset($page['contexte']['_pipelines'])
429
+            and is_array($page['contexte']['_pipelines'])
430
+            and count($page['contexte']['_pipelines'])
431
+        ) {
432
+            foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
433
+                $args['contexte'] = $page['contexte'];
434
+                unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
435
+                $texte = pipeline(
436
+                    $pipe,
437
+                    [
438
+                        'data' => $texte,
439
+                        'args' => $args
440
+                    ]
441
+                );
442
+            }
443
+        }
444
+    }
445
+
446
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
447
+        // compatibilite : avant on donnait le numero de ligne ou rien.
448
+        $ligne = intval($contexte_compil[3] ?? $contexte_compil);
449
+        $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
450
+    }
451
+    if ($echo) {
452
+        echo $texte;
453
+    } else {
454
+        return $texte;
455
+    }
456 456
 }
457 457
 
458 458
 function message_page_indisponible($page, $contexte) {
459
-	static $deja = false;
460
-	if ($deja) {
461
-		return 'erreur';
462
-	}
463
-	$codes = [
464
-		'404' => '404 Not Found',
465
-		'503' => '503 Service Unavailable',
466
-	];
467
-
468
-	$contexte['status'] = ($page !== false) ? '404' : '503';
469
-	$contexte['code'] = $codes[$contexte['status']];
470
-	$contexte['fond'] = '404'; // gere les 2 erreurs
471
-	if (!isset($contexte['lang'])) {
472
-		include_spip('inc/lang');
473
-		$contexte['lang'] = $GLOBALS['spip_lang'];
474
-	}
475
-
476
-	$deja = true;
477
-	// passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
478
-	// ex restriction d'acces => 401
479
-	$contexte = pipeline('page_indisponible', $contexte);
480
-
481
-	// produire la page d'erreur
482
-	$page = inclure_page($contexte['fond'], $contexte);
483
-	if (!$page) {
484
-		$page = inclure_page('404', $contexte);
485
-	}
486
-	$page['status'] = $contexte['status'];
487
-
488
-	return $page;
459
+    static $deja = false;
460
+    if ($deja) {
461
+        return 'erreur';
462
+    }
463
+    $codes = [
464
+        '404' => '404 Not Found',
465
+        '503' => '503 Service Unavailable',
466
+    ];
467
+
468
+    $contexte['status'] = ($page !== false) ? '404' : '503';
469
+    $contexte['code'] = $codes[$contexte['status']];
470
+    $contexte['fond'] = '404'; // gere les 2 erreurs
471
+    if (!isset($contexte['lang'])) {
472
+        include_spip('inc/lang');
473
+        $contexte['lang'] = $GLOBALS['spip_lang'];
474
+    }
475
+
476
+    $deja = true;
477
+    // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
478
+    // ex restriction d'acces => 401
479
+    $contexte = pipeline('page_indisponible', $contexte);
480
+
481
+    // produire la page d'erreur
482
+    $page = inclure_page($contexte['fond'], $contexte);
483
+    if (!$page) {
484
+        $page = inclure_page('404', $contexte);
485
+    }
486
+    $page['status'] = $contexte['status'];
487
+
488
+    return $page;
489 489
 }
490 490
 
491 491
 /**
@@ -497,44 +497,44 @@  discard block
 block discarded – undo
497 497
  * @return mixed
498 498
  */
499 499
 function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') {
500
-	static $balise_dyn_appellee_par_modele = null;
501
-	switch ($operation) {
502
-		case 'read':
503
-			return $balise_dyn_appellee_par_modele;
504
-		case 'reset':
505
-			$balise_dyn_appellee_par_modele = null;
506
-			return null;
507
-		case 'set':
508
-		default:
509
-			$balise_dyn_appellee_par_modele = $arg;
510
-			return $arg;
511
-	}
500
+    static $balise_dyn_appellee_par_modele = null;
501
+    switch ($operation) {
502
+        case 'read':
503
+            return $balise_dyn_appellee_par_modele;
504
+        case 'reset':
505
+            $balise_dyn_appellee_par_modele = null;
506
+            return null;
507
+        case 'set':
508
+        default:
509
+            $balise_dyn_appellee_par_modele = $arg;
510
+            return $arg;
511
+    }
512 512
 }
513 513
 
514 514
 // temporairement ici : a mettre dans le futur inc/modeles
515 515
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
516 516
 function creer_contexte_de_modele($args) {
517
-	$contexte = [];
518
-	foreach ($args as $var => $val) {
519
-		if (is_int($var)) { // argument pas formate
520
-			if (in_array($val, ['left', 'right', 'center'])) {
521
-				$var = 'align';
522
-				$contexte[$var] = $val;
523
-			} else {
524
-				$args = explode('=', $val);
525
-				if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args
526
-				$contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
527
-				} else // notation abregee
528
-				{
529
-					$contexte[trim($val)] = trim($val);
530
-				}
531
-			}
532
-		} else {
533
-			$contexte[$var] = $val;
534
-		}
535
-	}
536
-
537
-	return $contexte;
517
+    $contexte = [];
518
+    foreach ($args as $var => $val) {
519
+        if (is_int($var)) { // argument pas formate
520
+            if (in_array($val, ['left', 'right', 'center'])) {
521
+                $var = 'align';
522
+                $contexte[$var] = $val;
523
+            } else {
524
+                $args = explode('=', $val);
525
+                if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args
526
+                $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
527
+                } else // notation abregee
528
+                {
529
+                    $contexte[trim($val)] = trim($val);
530
+                }
531
+            }
532
+        } else {
533
+            $contexte[$var] = $val;
534
+        }
535
+    }
536
+
537
+    return $contexte;
538 538
 }
539 539
 
540 540
 /**
@@ -549,43 +549,43 @@  discard block
 block discarded – undo
549 549
  * @return string
550 550
  */
551 551
 function styliser_modele($modele, $id, $contexte = null) {
552
-	static $styliseurs = null;
553
-	if (is_null($styliseurs)) {
554
-		$tables_objet = lister_tables_objets_sql();
555
-		foreach ($tables_objet as $table => $desc) {
556
-			if (
557
-				isset($desc['modeles']) and $desc['modeles']
558
-				and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
559
-				and function_exists($desc['modeles_styliser'])
560
-			) {
561
-				$primary = id_table_objet($table);
562
-				foreach ($desc['modeles'] as $m) {
563
-					$styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
564
-				}
565
-			}
566
-		}
567
-	}
568
-
569
-	if (isset($styliseurs[$modele])) {
570
-		$styliseur = $styliseurs[$modele]['callback'];
571
-		$primary = $styliseurs[$modele]['primary'];
572
-		if (is_null($id) and $contexte) {
573
-			if (isset($contexte['id'])) {
574
-				$id = $contexte['id'];
575
-			} elseif (isset($contexte[$primary])) {
576
-				$id = $contexte[$primary];
577
-			}
578
-		}
579
-		if (is_null($id)) {
580
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581
-			erreur_squelette($msg);
582
-			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583
-			$id = 0;
584
-		}
585
-		$modele = $styliseur($modele, $id);
586
-	}
587
-
588
-	return $modele;
552
+    static $styliseurs = null;
553
+    if (is_null($styliseurs)) {
554
+        $tables_objet = lister_tables_objets_sql();
555
+        foreach ($tables_objet as $table => $desc) {
556
+            if (
557
+                isset($desc['modeles']) and $desc['modeles']
558
+                and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
559
+                and function_exists($desc['modeles_styliser'])
560
+            ) {
561
+                $primary = id_table_objet($table);
562
+                foreach ($desc['modeles'] as $m) {
563
+                    $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
564
+                }
565
+            }
566
+        }
567
+    }
568
+
569
+    if (isset($styliseurs[$modele])) {
570
+        $styliseur = $styliseurs[$modele]['callback'];
571
+        $primary = $styliseurs[$modele]['primary'];
572
+        if (is_null($id) and $contexte) {
573
+            if (isset($contexte['id'])) {
574
+                $id = $contexte['id'];
575
+            } elseif (isset($contexte[$primary])) {
576
+                $id = $contexte[$primary];
577
+            }
578
+        }
579
+        if (is_null($id)) {
580
+            $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581
+            erreur_squelette($msg);
582
+            // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583
+            $id = 0;
584
+        }
585
+        $modele = $styliseur($modele, $id);
586
+    }
587
+
588
+    return $modele;
589 589
 }
590 590
 
591 591
 /**
@@ -602,102 +602,102 @@  discard block
 block discarded – undo
602 602
  */
603 603
 function inclure_modele($type, $id, $params, $lien, string $connect = '', $env = []) {
604 604
 
605
-	static $compteur;
606
-	if (++$compteur > 10) {
607
-		return '';
608
-	} # ne pas boucler indefiniment
609
-
610
-	$type = strtolower($type);
611
-	$type = styliser_modele($type, $id);
612
-
613
-	$fond = $class = '';
614
-
615
-	$params = array_filter(explode('|', $params));
616
-	if ($params) {
617
-		$soustype = current($params);
618
-		$soustype = strtolower(trim($soustype));
619
-		if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) {
620
-			$soustype = next($params);
621
-			$soustype = strtolower($soustype);
622
-		}
623
-
624
-		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
626
-				$fond = '';
627
-				$class = $soustype;
628
-			}
629
-			// enlever le sous type des params
630
-			$params = array_diff($params, [$soustype]);
631
-		}
632
-	}
633
-
634
-	// Si ca marche pas en precisant le sous-type, prendre le type
635
-	if (!$fond and !trouve_modele($fond = $type)) {
636
-		spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
637
-
638
-		return false;
639
-	}
640
-	$fond = 'modeles/' . $fond;
641
-	// Creer le contexte
642
-	$contexte = $env;
643
-	$contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
644
-
645
-	// Le numero du modele est mis dans l'environnement
646
-	// d'une part sous l'identifiant "id"
647
-	// et d'autre part sous l'identifiant de la cle primaire
648
-	// par la fonction id_table_objet,
649
-	// (<article1> =>> article =>> id_article =>> id_article=1)
650
-	$_id = id_table_objet($type);
651
-	$contexte['id'] = $contexte[$_id] = $id;
652
-
653
-	if (isset($class)) {
654
-		$contexte['class'] = $class;
655
-	}
656
-
657
-	// Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
658
-	if ($lien) {
659
-		# un eventuel guillemet (") sera reechappe par #ENV
660
-		$contexte['lien'] = str_replace('&quot;', '"', $lien['href']);
661
-		$contexte['lien_class'] = $lien['class'];
662
-		$contexte['lien_mime'] = $lien['mime'];
663
-		$contexte['lien_title'] = $lien['title'];
664
-		$contexte['lien_hreflang'] = $lien['hreflang'];
665
-	}
666
-
667
-	// Traiter les parametres
668
-	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
669
-	$arg_list = creer_contexte_de_modele($params);
670
-	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
671
-	$contexte = array_merge($contexte, $arg_list);
672
-
673
-	// Appliquer le modele avec le contexte
674
-	$retour = recuperer_fond($fond, $contexte, [], $connect);
675
-
676
-	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
677
-	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
678
-	// sinon, s'il y a un lien, on l'ajoute classiquement
679
-	if (
680
-		strstr(
681
-			' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
682
-			'spip_lien_ok'
683
-		)
684
-	) {
685
-		$retour = inserer_attribut(
686
-			$retour,
687
-			'class',
688
-			trim(str_replace(' spip_lien_ok ', ' ', " $classes "))
689
-		);
690
-	} else {
691
-		if ($lien) {
692
-			$retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . '</a>';
693
-		}
694
-	}
695
-
696
-	$compteur--;
697
-
698
-	return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
699
-		? encoder_contexte_ajax($contexte, '', $retour)
700
-		: $retour;
605
+    static $compteur;
606
+    if (++$compteur > 10) {
607
+        return '';
608
+    } # ne pas boucler indefiniment
609
+
610
+    $type = strtolower($type);
611
+    $type = styliser_modele($type, $id);
612
+
613
+    $fond = $class = '';
614
+
615
+    $params = array_filter(explode('|', $params));
616
+    if ($params) {
617
+        $soustype = current($params);
618
+        $soustype = strtolower(trim($soustype));
619
+        if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) {
620
+            $soustype = next($params);
621
+            $soustype = strtolower($soustype);
622
+        }
623
+
624
+        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
+            if (!trouve_modele($fond = ($type . '_' . $soustype))) {
626
+                $fond = '';
627
+                $class = $soustype;
628
+            }
629
+            // enlever le sous type des params
630
+            $params = array_diff($params, [$soustype]);
631
+        }
632
+    }
633
+
634
+    // Si ca marche pas en precisant le sous-type, prendre le type
635
+    if (!$fond and !trouve_modele($fond = $type)) {
636
+        spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
637
+
638
+        return false;
639
+    }
640
+    $fond = 'modeles/' . $fond;
641
+    // Creer le contexte
642
+    $contexte = $env;
643
+    $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
644
+
645
+    // Le numero du modele est mis dans l'environnement
646
+    // d'une part sous l'identifiant "id"
647
+    // et d'autre part sous l'identifiant de la cle primaire
648
+    // par la fonction id_table_objet,
649
+    // (<article1> =>> article =>> id_article =>> id_article=1)
650
+    $_id = id_table_objet($type);
651
+    $contexte['id'] = $contexte[$_id] = $id;
652
+
653
+    if (isset($class)) {
654
+        $contexte['class'] = $class;
655
+    }
656
+
657
+    // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
658
+    if ($lien) {
659
+        # un eventuel guillemet (") sera reechappe par #ENV
660
+        $contexte['lien'] = str_replace('&quot;', '"', $lien['href']);
661
+        $contexte['lien_class'] = $lien['class'];
662
+        $contexte['lien_mime'] = $lien['mime'];
663
+        $contexte['lien_title'] = $lien['title'];
664
+        $contexte['lien_hreflang'] = $lien['hreflang'];
665
+    }
666
+
667
+    // Traiter les parametres
668
+    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
669
+    $arg_list = creer_contexte_de_modele($params);
670
+    $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
671
+    $contexte = array_merge($contexte, $arg_list);
672
+
673
+    // Appliquer le modele avec le contexte
674
+    $retour = recuperer_fond($fond, $contexte, [], $connect);
675
+
676
+    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
677
+    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
678
+    // sinon, s'il y a un lien, on l'ajoute classiquement
679
+    if (
680
+        strstr(
681
+            ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
682
+            'spip_lien_ok'
683
+        )
684
+    ) {
685
+        $retour = inserer_attribut(
686
+            $retour,
687
+            'class',
688
+            trim(str_replace(' spip_lien_ok ', ' ', " $classes "))
689
+        );
690
+    } else {
691
+        if ($lien) {
692
+            $retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . '</a>';
693
+        }
694
+    }
695
+
696
+    $compteur--;
697
+
698
+    return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
699
+        ? encoder_contexte_ajax($contexte, '', $retour)
700
+        : $retour;
701 701
 }
702 702
 
703 703
 // Un inclure_page qui marche aussi pour l'espace prive
@@ -706,105 +706,105 @@  discard block
 block discarded – undo
706 706
 // 	recuperer_fond($fond,$contexte,array('raw'=>true))
707 707
 function evaluer_fond($fond, $contexte = [], string $connect = '') {
708 708
 
709
-	$page = inclure_page($fond, $contexte, $connect);
710
-
711
-	if (!$page) {
712
-		return $page;
713
-	}
714
-	// eval $page et affecte $res
715
-	include _ROOT_RESTREINT . 'public/evaluer_page.php';
716
-
717
-	// Lever un drapeau (global) si le fond utilise #SESSION
718
-	// a destination de public/parametrer
719
-	// pour remonter vers les inclusions appelantes
720
-	// il faut bien lever ce drapeau apres avoir evalue le fond
721
-	// pour ne pas faire descendre le flag vers les inclusions appelees
722
-	if (
723
-		isset($page['invalideurs'])
724
-		and isset($page['invalideurs']['session'])
725
-	) {
726
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
727
-	}
728
-
729
-	return $page;
709
+    $page = inclure_page($fond, $contexte, $connect);
710
+
711
+    if (!$page) {
712
+        return $page;
713
+    }
714
+    // eval $page et affecte $res
715
+    include _ROOT_RESTREINT . 'public/evaluer_page.php';
716
+
717
+    // Lever un drapeau (global) si le fond utilise #SESSION
718
+    // a destination de public/parametrer
719
+    // pour remonter vers les inclusions appelantes
720
+    // il faut bien lever ce drapeau apres avoir evalue le fond
721
+    // pour ne pas faire descendre le flag vers les inclusions appelees
722
+    if (
723
+        isset($page['invalideurs'])
724
+        and isset($page['invalideurs']['session'])
725
+    ) {
726
+        $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
727
+    }
728
+
729
+    return $page;
730 730
 }
731 731
 
732 732
 
733 733
 function page_base_href(&$texte) {
734
-	static $set_html_base = null;
735
-	if (is_null($set_html_base)) {
736
-		if (!defined('_SET_HTML_BASE')) {
737
-			// si la profondeur est superieure a 1
738
-			// est que ce n'est pas une url page ni une url action
739
-			// activer par defaut
740
-		$set_html_base = ((
741
-				$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
742
-				and _request(_SPIP_PAGE) !== 'login'
743
-				and !_request('action')) ? true : false);
744
-		} else {
745
-			$set_html_base = _SET_HTML_BASE;
746
-		}
747
-	}
748
-
749
-	if (
750
-		$set_html_base
751
-		and isset($GLOBALS['html']) and $GLOBALS['html']
752
-		and $GLOBALS['profondeur_url'] > 0
753
-		and ($poshead = strpos($texte, '</head>')) !== false
754
-	) {
755
-		$head = substr($texte, 0, $poshead);
756
-		$insert = false;
757
-		$href_base = false;
758
-		if (strpos($head, '<base') === false) {
759
-			$insert = true;
760
-		} else {
761
-			// si aucun <base ...> n'a de href il faut en inserer un
762
-			// sinon juste re-ecrire les ancres si besoin
763
-			$insert = true;
764
-			include_spip('inc/filtres');
765
-			$bases = extraire_balises($head, 'base');
766
-			foreach ($bases as $base) {
767
-				if ($href_base = extraire_attribut($base, 'href')) {
768
-					$insert = false;
769
-					break;
770
-				}
771
-			}
772
-		}
773
-
774
-		if ($insert) {
775
-			include_spip('inc/filtres_mini');
776
-			// ajouter un base qui reglera tous les liens relatifs
777
-			$href_base = url_absolue('./');
778
-			$base = "\n<base href=\"$href_base\" />";
779
-			if (($pos = strpos($head, '<head>')) !== false) {
780
-				$head = substr_replace($head, $base, $pos + 6, 0);
781
-			} elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
-				$head = str_replace($r[0], $r[0] . $base, $head);
783
-			}
784
-			$texte = $head . substr($texte, $poshead);
785
-		}
786
-		if ($href_base) {
787
-			// gerer les ancres
788
-			$base = $_SERVER['REQUEST_URI'];
789
-			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790
-			if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
-				$base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
792
-			}
793
-			if (strpos($texte, "href='#") !== false) {
794
-				$texte = str_replace("href='#", "href='$base#", $texte);
795
-			}
796
-			if (strpos($texte, 'href="#') !== false) {
797
-				$texte = str_replace('href="#', "href=\"$base#", $texte);
798
-			}
799
-		}
800
-	}
734
+    static $set_html_base = null;
735
+    if (is_null($set_html_base)) {
736
+        if (!defined('_SET_HTML_BASE')) {
737
+            // si la profondeur est superieure a 1
738
+            // est que ce n'est pas une url page ni une url action
739
+            // activer par defaut
740
+        $set_html_base = ((
741
+                $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
742
+                and _request(_SPIP_PAGE) !== 'login'
743
+                and !_request('action')) ? true : false);
744
+        } else {
745
+            $set_html_base = _SET_HTML_BASE;
746
+        }
747
+    }
748
+
749
+    if (
750
+        $set_html_base
751
+        and isset($GLOBALS['html']) and $GLOBALS['html']
752
+        and $GLOBALS['profondeur_url'] > 0
753
+        and ($poshead = strpos($texte, '</head>')) !== false
754
+    ) {
755
+        $head = substr($texte, 0, $poshead);
756
+        $insert = false;
757
+        $href_base = false;
758
+        if (strpos($head, '<base') === false) {
759
+            $insert = true;
760
+        } else {
761
+            // si aucun <base ...> n'a de href il faut en inserer un
762
+            // sinon juste re-ecrire les ancres si besoin
763
+            $insert = true;
764
+            include_spip('inc/filtres');
765
+            $bases = extraire_balises($head, 'base');
766
+            foreach ($bases as $base) {
767
+                if ($href_base = extraire_attribut($base, 'href')) {
768
+                    $insert = false;
769
+                    break;
770
+                }
771
+            }
772
+        }
773
+
774
+        if ($insert) {
775
+            include_spip('inc/filtres_mini');
776
+            // ajouter un base qui reglera tous les liens relatifs
777
+            $href_base = url_absolue('./');
778
+            $base = "\n<base href=\"$href_base\" />";
779
+            if (($pos = strpos($head, '<head>')) !== false) {
780
+                $head = substr_replace($head, $base, $pos + 6, 0);
781
+            } elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
+                $head = str_replace($r[0], $r[0] . $base, $head);
783
+            }
784
+            $texte = $head . substr($texte, $poshead);
785
+        }
786
+        if ($href_base) {
787
+            // gerer les ancres
788
+            $base = $_SERVER['REQUEST_URI'];
789
+            // pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790
+            if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
+                $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
792
+            }
793
+            if (strpos($texte, "href='#") !== false) {
794
+                $texte = str_replace("href='#", "href='$base#", $texte);
795
+            }
796
+            if (strpos($texte, 'href="#') !== false) {
797
+                $texte = str_replace('href="#', "href=\"$base#", $texte);
798
+            }
799
+        }
800
+    }
801 801
 }
802 802
 
803 803
 
804 804
 // Envoyer les entetes, en retenant ceux qui sont a usage interne
805 805
 // et demarrent par X-Spip-...
806 806
 function envoyer_entetes($entetes) {
807
-	foreach ($entetes as $k => $v) { #	if (strncmp($k, 'X-Spip-', 7))
808
-	@header(strlen($v) ? "$k: $v" : $k);
809
-	}
807
+    foreach ($entetes as $k => $v) { #	if (strncmp($k, 'X-Spip-', 7))
808
+    @header(strlen($v) ? "$k: $v" : $k);
809
+    }
810 810
 }
Please login to merge, or discard this patch.