Completed
Push — master ( f0522e...0a11c2 )
by cam
04:47
created
ecrire/public/assembler.php 2 patches
Indentation   +588 added lines, -588 removed lines patch added patch discarded remove patch
@@ -20,155 +20,155 @@  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
 // https://code.spip.net/@assembler
32 32
 function assembler($fond, $connect = '') {
33 33
 
34
-	// flag_preserver est modifie ici, et utilise en globale
35
-	// use_cache sert a informer le bouton d'admin pr savoir s'il met un *
36
-	// contexte est utilise en globale dans le formulaire d'admin
37
-
38
-	$GLOBALS['contexte'] = calculer_contexte();
39
-	$page = array('contexte_implicite' => calculer_contexte_implicite());
40
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(',\.[a-zA-Z0-9]*$,', '',
41
-			preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));
42
-	// Cette fonction est utilisee deux fois
43
-	$cacher = charger_fonction('cacher', 'public', true);
44
-	// Les quatre derniers parametres sont modifies par la fonction:
45
-	// emplacement, validite, et, s'il est valide, contenu & age
46
-	if ($cacher) {
47
-		$res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
48
-	} else {
49
-		$GLOBALS['use_cache'] = -1;
50
-	}
51
-	// Si un resultat est retourne, c'est un message d'impossibilite
52
-	if ($res) {
53
-		return array('texte' => $res);
54
-	}
55
-
56
-	if (!$chemin_cache || !$lastmodified) {
57
-		$lastmodified = time();
58
-	}
59
-
60
-	$headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
61
-	$calculer_page = true;
62
-
63
-	// Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
64
-	// une perennite valide a meme reponse qu'une requete HEAD (par defaut les
65
-	// pages sont dynamiques)
66
-	if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
67
-		and (!defined('_VAR_MODE') or !_VAR_MODE)
68
-		and $chemin_cache
69
-		and isset($page['entetes'])
70
-		and isset($page['entetes']['Cache-Control'])
71
-		and strstr($page['entetes']['Cache-Control'], 'max-age=')
72
-		and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
73
-	) {
74
-		$since = preg_replace('/;.*/', '',
75
-			$_SERVER['HTTP_IF_MODIFIED_SINCE']);
76
-		$since = str_replace('GMT', '', $since);
77
-		if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) {
78
-			$page['status'] = 304;
79
-			$headers_only = true;
80
-			$calculer_page = false;
81
-		}
82
-	}
83
-
84
-	// Si requete HEAD ou Last-modified compatible, ignorer le texte
85
-	// et pas de content-type (pour contrer le bouton admin de inc-public)
86
-	if (!$calculer_page) {
87
-		$page['texte'] = "";
88
-	} else {
89
-		// si la page est prise dans le cache
90
-		if (!$GLOBALS['use_cache']) {
91
-			// Informer les boutons d'admin du contexte
92
-			// (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
93
-			$GLOBALS['contexte'] = $page['contexte'];
94
-
95
-			// vider les globales url propres qui ne doivent plus etre utilisees en cas
96
-			// d'inversion url => objet
97
-			// plus necessaire si on utilise bien la fonction urls_decoder_url
98
-			#unset($_SERVER['REDIRECT_url_propre']);
99
-			#unset($_ENV['url_propre']);
100
-		} else {
101
-			// Compat ascendante :
102
-			// 1. $contexte est global
103
-			// (a evacuer car urls_decoder_url gere ce probleme ?)
104
-			// et calculer la page
105
-			if (!test_espace_prive()) {
106
-				include_spip('inc/urls');
107
-				list($fond, $GLOBALS['contexte'], $url_redirect) = urls_decoder_url(nettoyer_uri(), $fond, $GLOBALS['contexte'],
108
-					true);
109
-			}
110
-			// squelette par defaut
111
-			if (!strlen($fond)) {
112
-				$fond = 'sommaire';
113
-			}
114
-
115
-			// produire la page : peut mettre a jour $lastmodified
116
-			$produire_page = charger_fonction('produire_page', 'public');
117
-			$page = $produire_page($fond, $GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, null, $page,
118
-				$lastmodified, $connect);
119
-			if ($page === '') {
120
-				$erreur = _T('info_erreur_squelette2',
121
-					array('fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES));
122
-				erreur_squelette($erreur);
123
-				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
124
-				$page = array('texte' => '', 'erreur' => $erreur);
125
-			}
126
-		}
127
-
128
-		if ($page and $chemin_cache) {
129
-			$page['cache'] = $chemin_cache;
130
-		}
131
-
132
-		auto_content_type($page);
133
-
134
-		$GLOBALS['flag_preserver'] |= headers_sent();
135
-
136
-		// Definir les entetes si ce n'est fait 
137
-		if (!$GLOBALS['flag_preserver']) {
138
-			if ($GLOBALS['flag_ob']) {
139
-				// Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
140
-				if (trim($page['texte']) === ''
141
-					and _VAR_MODE != 'debug'
142
-					and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
143
-				) {
144
-					$GLOBALS['contexte']['fond_erreur'] = $fond;
145
-					$page = message_page_indisponible($page, $GLOBALS['contexte']);
146
-				}
147
-				// pas de cache client en mode 'observation'
148
-				if (defined('_VAR_MODE') and _VAR_MODE) {
149
-					$page['entetes']["Cache-Control"] = "no-cache,must-revalidate";
150
-					$page['entetes']["Pragma"] = "no-cache";
151
-				}
152
-			}
153
-		}
154
-	}
155
-
156
-	// Entete Last-Modified:
157
-	// eviter d'etre incoherent en envoyant un lastmodified identique
158
-	// a celui qu'on a refuse d'honorer plus haut (cf. #655)
159
-	if ($lastmodified
160
-		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
161
-		and !isset($page['entetes']["Last-Modified"])
162
-	) {
163
-		$page['entetes']["Last-Modified"] = gmdate("D, d M Y H:i:s", $lastmodified) . " GMT";
164
-	}
165
-
166
-	// fermer la connexion apres les headers si requete HEAD
167
-	if ($headers_only) {
168
-		$page['entetes']["Connection"] = "close";
169
-	}
170
-
171
-	return $page;
34
+    // flag_preserver est modifie ici, et utilise en globale
35
+    // use_cache sert a informer le bouton d'admin pr savoir s'il met un *
36
+    // contexte est utilise en globale dans le formulaire d'admin
37
+
38
+    $GLOBALS['contexte'] = calculer_contexte();
39
+    $page = array('contexte_implicite' => calculer_contexte_implicite());
40
+    $page['contexte_implicite']['cache'] = $fond . preg_replace(',\.[a-zA-Z0-9]*$,', '',
41
+            preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));
42
+    // Cette fonction est utilisee deux fois
43
+    $cacher = charger_fonction('cacher', 'public', true);
44
+    // Les quatre derniers parametres sont modifies par la fonction:
45
+    // emplacement, validite, et, s'il est valide, contenu & age
46
+    if ($cacher) {
47
+        $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
48
+    } else {
49
+        $GLOBALS['use_cache'] = -1;
50
+    }
51
+    // Si un resultat est retourne, c'est un message d'impossibilite
52
+    if ($res) {
53
+        return array('texte' => $res);
54
+    }
55
+
56
+    if (!$chemin_cache || !$lastmodified) {
57
+        $lastmodified = time();
58
+    }
59
+
60
+    $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
61
+    $calculer_page = true;
62
+
63
+    // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
64
+    // une perennite valide a meme reponse qu'une requete HEAD (par defaut les
65
+    // pages sont dynamiques)
66
+    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
67
+        and (!defined('_VAR_MODE') or !_VAR_MODE)
68
+        and $chemin_cache
69
+        and isset($page['entetes'])
70
+        and isset($page['entetes']['Cache-Control'])
71
+        and strstr($page['entetes']['Cache-Control'], 'max-age=')
72
+        and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
73
+    ) {
74
+        $since = preg_replace('/;.*/', '',
75
+            $_SERVER['HTTP_IF_MODIFIED_SINCE']);
76
+        $since = str_replace('GMT', '', $since);
77
+        if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) {
78
+            $page['status'] = 304;
79
+            $headers_only = true;
80
+            $calculer_page = false;
81
+        }
82
+    }
83
+
84
+    // Si requete HEAD ou Last-modified compatible, ignorer le texte
85
+    // et pas de content-type (pour contrer le bouton admin de inc-public)
86
+    if (!$calculer_page) {
87
+        $page['texte'] = "";
88
+    } else {
89
+        // si la page est prise dans le cache
90
+        if (!$GLOBALS['use_cache']) {
91
+            // Informer les boutons d'admin du contexte
92
+            // (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
93
+            $GLOBALS['contexte'] = $page['contexte'];
94
+
95
+            // vider les globales url propres qui ne doivent plus etre utilisees en cas
96
+            // d'inversion url => objet
97
+            // plus necessaire si on utilise bien la fonction urls_decoder_url
98
+            #unset($_SERVER['REDIRECT_url_propre']);
99
+            #unset($_ENV['url_propre']);
100
+        } else {
101
+            // Compat ascendante :
102
+            // 1. $contexte est global
103
+            // (a evacuer car urls_decoder_url gere ce probleme ?)
104
+            // et calculer la page
105
+            if (!test_espace_prive()) {
106
+                include_spip('inc/urls');
107
+                list($fond, $GLOBALS['contexte'], $url_redirect) = urls_decoder_url(nettoyer_uri(), $fond, $GLOBALS['contexte'],
108
+                    true);
109
+            }
110
+            // squelette par defaut
111
+            if (!strlen($fond)) {
112
+                $fond = 'sommaire';
113
+            }
114
+
115
+            // produire la page : peut mettre a jour $lastmodified
116
+            $produire_page = charger_fonction('produire_page', 'public');
117
+            $page = $produire_page($fond, $GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, null, $page,
118
+                $lastmodified, $connect);
119
+            if ($page === '') {
120
+                $erreur = _T('info_erreur_squelette2',
121
+                    array('fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES));
122
+                erreur_squelette($erreur);
123
+                // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
124
+                $page = array('texte' => '', 'erreur' => $erreur);
125
+            }
126
+        }
127
+
128
+        if ($page and $chemin_cache) {
129
+            $page['cache'] = $chemin_cache;
130
+        }
131
+
132
+        auto_content_type($page);
133
+
134
+        $GLOBALS['flag_preserver'] |= headers_sent();
135
+
136
+        // Definir les entetes si ce n'est fait 
137
+        if (!$GLOBALS['flag_preserver']) {
138
+            if ($GLOBALS['flag_ob']) {
139
+                // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
140
+                if (trim($page['texte']) === ''
141
+                    and _VAR_MODE != 'debug'
142
+                    and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
143
+                ) {
144
+                    $GLOBALS['contexte']['fond_erreur'] = $fond;
145
+                    $page = message_page_indisponible($page, $GLOBALS['contexte']);
146
+                }
147
+                // pas de cache client en mode 'observation'
148
+                if (defined('_VAR_MODE') and _VAR_MODE) {
149
+                    $page['entetes']["Cache-Control"] = "no-cache,must-revalidate";
150
+                    $page['entetes']["Pragma"] = "no-cache";
151
+                }
152
+            }
153
+        }
154
+    }
155
+
156
+    // Entete Last-Modified:
157
+    // eviter d'etre incoherent en envoyant un lastmodified identique
158
+    // a celui qu'on a refuse d'honorer plus haut (cf. #655)
159
+    if ($lastmodified
160
+        and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
161
+        and !isset($page['entetes']["Last-Modified"])
162
+    ) {
163
+        $page['entetes']["Last-Modified"] = gmdate("D, d M Y H:i:s", $lastmodified) . " GMT";
164
+    }
165
+
166
+    // fermer la connexion apres les headers si requete HEAD
167
+    if ($headers_only) {
168
+        $page['entetes']["Connection"] = "close";
169
+    }
170
+
171
+    return $page;
172 172
 }
173 173
 
174 174
 /**
@@ -187,19 +187,19 @@  discard block
 block discarded – undo
187 187
  */
188 188
 function calculer_contexte() {
189 189
 
190
-	$contexte = array();
191
-	foreach ($_GET as $var => $val) {
192
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
193
-			$contexte[$var] = $val;
194
-		}
195
-	}
196
-	foreach ($_POST as $var => $val) {
197
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
198
-			$contexte[$var] = $val;
199
-		}
200
-	}
201
-
202
-	return $contexte;
190
+    $contexte = array();
191
+    foreach ($_GET as $var => $val) {
192
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
193
+            $contexte[$var] = $val;
194
+        }
195
+    }
196
+    foreach ($_POST as $var => $val) {
197
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
198
+            $contexte[$var] = $val;
199
+        }
200
+    }
201
+
202
+    return $contexte;
203 203
 }
204 204
 
205 205
 /**
@@ -210,25 +210,25 @@  discard block
 block discarded – undo
210 210
  * @return array
211 211
  */
212 212
 function calculer_contexte_implicite() {
213
-	static $notes = null;
214
-	if (is_null($notes)) {
215
-		$notes = charger_fonction('notes', 'inc', true);
216
-	}
217
-	$contexte_implicite = array(
218
-		'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
219
-		'host' => (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null),
220
-		'https' => (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : ''),
221
-		'espace' => test_espace_prive(),
222
-		'marqueur' => (isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] : ''),
223
-		'marqueur_skel' => (isset($GLOBALS['marqueur_skel']) ? $GLOBALS['marqueur_skel'] : ''),
224
-		'notes' => $notes ? $notes('', 'contexter_cache') : '',
225
-		'spip_version_code' => $GLOBALS['spip_version_code'],
226
-	);
227
-	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
228
-		$contexte_implicite['host'] .= "|" . $_SERVER['HTTP_X_FORWARDED_HOST'];
229
-	}
230
-
231
-	return $contexte_implicite;
213
+    static $notes = null;
214
+    if (is_null($notes)) {
215
+        $notes = charger_fonction('notes', 'inc', true);
216
+    }
217
+    $contexte_implicite = array(
218
+        'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
219
+        'host' => (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null),
220
+        'https' => (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : ''),
221
+        'espace' => test_espace_prive(),
222
+        'marqueur' => (isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] : ''),
223
+        'marqueur_skel' => (isset($GLOBALS['marqueur_skel']) ? $GLOBALS['marqueur_skel'] : ''),
224
+        'notes' => $notes ? $notes('', 'contexter_cache') : '',
225
+        'spip_version_code' => $GLOBALS['spip_version_code'],
226
+    );
227
+    if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
228
+        $contexte_implicite['host'] .= "|" . $_SERVER['HTTP_X_FORWARDED_HOST'];
229
+    }
230
+
231
+    return $contexte_implicite;
232 232
 }
233 233
 
234 234
 //
@@ -238,50 +238,50 @@  discard block
 block discarded – undo
238 238
 // https://code.spip.net/@auto_content_type
239 239
 function auto_content_type($page) {
240 240
 
241
-	if (!isset($GLOBALS['flag_preserver'])) {
242
-		$GLOBALS['flag_preserver'] = ($page && preg_match("/header\s*\(\s*.content\-type:/isx",
243
-				$page['texte']) || (isset($page['entetes']['Content-Type'])));
244
-	}
241
+    if (!isset($GLOBALS['flag_preserver'])) {
242
+        $GLOBALS['flag_preserver'] = ($page && preg_match("/header\s*\(\s*.content\-type:/isx",
243
+                $page['texte']) || (isset($page['entetes']['Content-Type'])));
244
+    }
245 245
 }
246 246
 
247 247
 // https://code.spip.net/@inclure_page
248 248
 function inclure_page($fond, $contexte, $connect = '') {
249
-	static $cacher, $produire_page;
250
-
251
-	// enlever le fond de contexte inclus car sinon il prend la main
252
-	// dans les sous inclusions -> boucle infinie d'inclusion identique
253
-	// (cette precaution n'est probablement plus utile)
254
-	unset($contexte['fond']);
255
-	$page = array('contexte_implicite' => calculer_contexte_implicite());
256
-	$page['contexte_implicite']['cache'] = $fond;
257
-	if (is_null($cacher)) {
258
-		$cacher = charger_fonction('cacher', 'public', true);
259
-	}
260
-	// Les quatre derniers parametres sont modifies par la fonction:
261
-	// emplacement, validite, et, s'il est valide, contenu & age
262
-	if ($cacher) {
263
-		$res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
264
-	} else {
265
-		$use_cache = -1;
266
-	}
267
-	// $res = message d'erreur : on sort de la
268
-	if ($res) {
269
-		return array('texte' => $res);
270
-	}
271
-
272
-	// Si use_cache ne vaut pas 0, la page doit etre calculee
273
-	// produire la page : peut mettre a jour $lastinclude
274
-	// le contexte_cache envoye a cacher() a ete conserve et est passe a produire
275
-	if ($use_cache) {
276
-		if (is_null($produire_page)) {
277
-			$produire_page = charger_fonction('produire_page', 'public');
278
-		}
279
-		$page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
280
-	}
281
-	// dans tous les cas, mettre a jour $GLOBALS['lastmodified']
282
-	$GLOBALS['lastmodified'] = max((isset($GLOBALS['lastmodified']) ? $GLOBALS['lastmodified'] : 0), $lastinclude);
283
-
284
-	return $page;
249
+    static $cacher, $produire_page;
250
+
251
+    // enlever le fond de contexte inclus car sinon il prend la main
252
+    // dans les sous inclusions -> boucle infinie d'inclusion identique
253
+    // (cette precaution n'est probablement plus utile)
254
+    unset($contexte['fond']);
255
+    $page = array('contexte_implicite' => calculer_contexte_implicite());
256
+    $page['contexte_implicite']['cache'] = $fond;
257
+    if (is_null($cacher)) {
258
+        $cacher = charger_fonction('cacher', 'public', true);
259
+    }
260
+    // Les quatre derniers parametres sont modifies par la fonction:
261
+    // emplacement, validite, et, s'il est valide, contenu & age
262
+    if ($cacher) {
263
+        $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
264
+    } else {
265
+        $use_cache = -1;
266
+    }
267
+    // $res = message d'erreur : on sort de la
268
+    if ($res) {
269
+        return array('texte' => $res);
270
+    }
271
+
272
+    // Si use_cache ne vaut pas 0, la page doit etre calculee
273
+    // produire la page : peut mettre a jour $lastinclude
274
+    // le contexte_cache envoye a cacher() a ete conserve et est passe a produire
275
+    if ($use_cache) {
276
+        if (is_null($produire_page)) {
277
+            $produire_page = charger_fonction('produire_page', 'public');
278
+        }
279
+        $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
280
+    }
281
+    // dans tous les cas, mettre a jour $GLOBALS['lastmodified']
282
+    $GLOBALS['lastmodified'] = max((isset($GLOBALS['lastmodified']) ? $GLOBALS['lastmodified'] : 0), $lastinclude);
283
+
284
+    return $page;
285 285
 }
286 286
 
287 287
 /**
@@ -299,40 +299,40 @@  discard block
 block discarded – undo
299 299
  * @return array
300 300
  */
301 301
 function public_produire_page_dist(
302
-	$fond,
303
-	$contexte,
304
-	$use_cache,
305
-	$chemin_cache,
306
-	$contexte_cache,
307
-	&$page,
308
-	&$lastinclude,
309
-	$connect = ''
302
+    $fond,
303
+    $contexte,
304
+    $use_cache,
305
+    $chemin_cache,
306
+    $contexte_cache,
307
+    &$page,
308
+    &$lastinclude,
309
+    $connect = ''
310 310
 ) {
311
-	static $parametrer, $cacher;
312
-	if (!$parametrer) {
313
-		$parametrer = charger_fonction('parametrer', 'public');
314
-	}
315
-	$page = $parametrer($fond, $contexte, $chemin_cache, $connect);
316
-	// et on l'enregistre sur le disque
317
-	if ($chemin_cache
318
-		and $use_cache > -1
319
-		and is_array($page)
320
-		and count($page)
321
-		and isset($page['entetes']['X-Spip-Cache'])
322
-		and $page['entetes']['X-Spip-Cache'] > 0
323
-	) {
324
-		if (is_null($cacher)) {
325
-			$cacher = charger_fonction('cacher', 'public', true);
326
-		}
327
-		$lastinclude = time();
328
-		if ($cacher) {
329
-			$cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
330
-		} else {
331
-			$use_cache = -1;
332
-		}
333
-	}
334
-
335
-	return $page;
311
+    static $parametrer, $cacher;
312
+    if (!$parametrer) {
313
+        $parametrer = charger_fonction('parametrer', 'public');
314
+    }
315
+    $page = $parametrer($fond, $contexte, $chemin_cache, $connect);
316
+    // et on l'enregistre sur le disque
317
+    if ($chemin_cache
318
+        and $use_cache > -1
319
+        and is_array($page)
320
+        and count($page)
321
+        and isset($page['entetes']['X-Spip-Cache'])
322
+        and $page['entetes']['X-Spip-Cache'] > 0
323
+    ) {
324
+        if (is_null($cacher)) {
325
+            $cacher = charger_fonction('cacher', 'public', true);
326
+        }
327
+        $lastinclude = time();
328
+        if ($cacher) {
329
+            $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
330
+        } else {
331
+            $use_cache = -1;
332
+        }
333
+    }
334
+
335
+    return $page;
336 336
 }
337 337
 
338 338
 // Fonction inseree par le compilateur dans le code compile.
@@ -346,14 +346,14 @@  discard block
 block discarded – undo
346 346
 // 4: langue
347 347
 
348 348
 function inserer_balise_dynamique($contexte_exec, $contexte_compil) {
349
-	arguments_balise_dyn_depuis_modele(null, 'reset');
350
-
351
-	if (!is_array($contexte_exec)) {
352
-		echo $contexte_exec;
353
-	} // message d'erreur etc
354
-	else {
355
-		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
356
-	}
349
+    arguments_balise_dyn_depuis_modele(null, 'reset');
350
+
351
+    if (!is_array($contexte_exec)) {
352
+        echo $contexte_exec;
353
+    } // message d'erreur etc
354
+    else {
355
+        inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
356
+    }
357 357
 }
358 358
 
359 359
 /**
@@ -368,97 +368,97 @@  discard block
 block discarded – undo
368 368
  * @return string
369 369
  */
370 370
 function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = array()) {
371
-	if (is_array($texte)) {
372
-
373
-		list($fond, $delainc, $contexte_inclus) = $texte;
374
-
375
-		// delais a l'ancienne, c'est pratiquement mort
376
-		$d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : null;
377
-		$GLOBALS['delais'] = $delainc;
378
-
379
-		$page = recuperer_fond($fond, $contexte_inclus,
380
-			array('trim' => false, 'raw' => true, 'compil' => $contexte_compil));
381
-
382
-		$texte = $page['texte'];
383
-
384
-		$GLOBALS['delais'] = $d;
385
-		// Faire remonter les entetes
386
-		if (is_array($page['entetes'])) {
387
-			// mais pas toutes
388
-			unset($page['entetes']['X-Spip-Cache']);
389
-			unset($page['entetes']['Content-Type']);
390
-			if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
391
-				if (!is_array($GLOBALS['page']['entetes'])) {
392
-					$GLOBALS['page']['entetes'] = array();
393
-				}
394
-				$GLOBALS['page']['entetes'] =
395
-					array_merge($GLOBALS['page']['entetes'], $page['entetes']);
396
-			}
397
-		}
398
-		// _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
399
-		if (isset($page['contexte']['_pipelines'])
400
-			and is_array($page['contexte']['_pipelines'])
401
-			and count($page['contexte']['_pipelines'])
402
-		) {
403
-			foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
404
-				$args['contexte'] = $page['contexte'];
405
-				unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
406
-				$texte = pipeline(
407
-					$pipe,
408
-					array(
409
-						'data' => $texte,
410
-						'args' => $args
411
-					),
412
-					false
413
-				);
414
-			}
415
-		}
416
-	}
417
-
418
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
419
-		// compatibilite : avant on donnait le numero de ligne ou rien.
420
-		$ligne = intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
421
-		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
422
-	}
423
-	if ($echo) {
424
-		echo $texte;
425
-	} else {
426
-		return $texte;
427
-	}
371
+    if (is_array($texte)) {
372
+
373
+        list($fond, $delainc, $contexte_inclus) = $texte;
374
+
375
+        // delais a l'ancienne, c'est pratiquement mort
376
+        $d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : null;
377
+        $GLOBALS['delais'] = $delainc;
378
+
379
+        $page = recuperer_fond($fond, $contexte_inclus,
380
+            array('trim' => false, 'raw' => true, 'compil' => $contexte_compil));
381
+
382
+        $texte = $page['texte'];
383
+
384
+        $GLOBALS['delais'] = $d;
385
+        // Faire remonter les entetes
386
+        if (is_array($page['entetes'])) {
387
+            // mais pas toutes
388
+            unset($page['entetes']['X-Spip-Cache']);
389
+            unset($page['entetes']['Content-Type']);
390
+            if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
391
+                if (!is_array($GLOBALS['page']['entetes'])) {
392
+                    $GLOBALS['page']['entetes'] = array();
393
+                }
394
+                $GLOBALS['page']['entetes'] =
395
+                    array_merge($GLOBALS['page']['entetes'], $page['entetes']);
396
+            }
397
+        }
398
+        // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
399
+        if (isset($page['contexte']['_pipelines'])
400
+            and is_array($page['contexte']['_pipelines'])
401
+            and count($page['contexte']['_pipelines'])
402
+        ) {
403
+            foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
404
+                $args['contexte'] = $page['contexte'];
405
+                unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
406
+                $texte = pipeline(
407
+                    $pipe,
408
+                    array(
409
+                        'data' => $texte,
410
+                        'args' => $args
411
+                    ),
412
+                    false
413
+                );
414
+            }
415
+        }
416
+    }
417
+
418
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
419
+        // compatibilite : avant on donnait le numero de ligne ou rien.
420
+        $ligne = intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
421
+        $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
422
+    }
423
+    if ($echo) {
424
+        echo $texte;
425
+    } else {
426
+        return $texte;
427
+    }
428 428
 }
429 429
 
430 430
 // https://code.spip.net/@message_page_indisponible
431 431
 function message_page_indisponible($page, $contexte) {
432
-	static $deja = false;
433
-	if ($deja) {
434
-		return "erreur";
435
-	}
436
-	$codes = array(
437
-		'404' => '404 Not Found',
438
-		'503' => '503 Service Unavailable',
439
-	);
440
-
441
-	$contexte['status'] = ($page !== false) ? '404' : '503';
442
-	$contexte['code'] = $codes[$contexte['status']];
443
-	$contexte['fond'] = '404'; // gere les 2 erreurs
444
-	if (!isset($contexte['lang'])) {
445
-		include_spip('inc/lang');
446
-		$contexte['lang'] = $GLOBALS['spip_lang'];
447
-	}
448
-
449
-	$deja = true;
450
-	// passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
451
-	// ex restriction d'acces => 401
452
-	$contexte = pipeline('page_indisponible', $contexte);
453
-
454
-	// produire la page d'erreur
455
-	$page = inclure_page($contexte['fond'], $contexte);
456
-	if (!$page) {
457
-		$page = inclure_page('404', $contexte);
458
-	}
459
-	$page['status'] = $contexte['status'];
460
-
461
-	return $page;
432
+    static $deja = false;
433
+    if ($deja) {
434
+        return "erreur";
435
+    }
436
+    $codes = array(
437
+        '404' => '404 Not Found',
438
+        '503' => '503 Service Unavailable',
439
+    );
440
+
441
+    $contexte['status'] = ($page !== false) ? '404' : '503';
442
+    $contexte['code'] = $codes[$contexte['status']];
443
+    $contexte['fond'] = '404'; // gere les 2 erreurs
444
+    if (!isset($contexte['lang'])) {
445
+        include_spip('inc/lang');
446
+        $contexte['lang'] = $GLOBALS['spip_lang'];
447
+    }
448
+
449
+    $deja = true;
450
+    // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
451
+    // ex restriction d'acces => 401
452
+    $contexte = pipeline('page_indisponible', $contexte);
453
+
454
+    // produire la page d'erreur
455
+    $page = inclure_page($contexte['fond'], $contexte);
456
+    if (!$page) {
457
+        $page = inclure_page('404', $contexte);
458
+    }
459
+    $page['status'] = $contexte['status'];
460
+
461
+    return $page;
462 462
 }
463 463
 
464 464
 /**
@@ -470,46 +470,46 @@  discard block
 block discarded – undo
470 470
  * @return mixed
471 471
  */
472 472
 function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') {
473
-	static $balise_dyn_appellee_par_modele = null;
474
-	switch ($operation) {
475
-		case 'read':
476
-			return $balise_dyn_appellee_par_modele;
477
-		case 'reset':
478
-			$balise_dyn_appellee_par_modele = null;
479
-			return null;
480
-		case 'set':
481
-		default:
482
-			$balise_dyn_appellee_par_modele = $arg;
483
-			return $arg;
484
-	}
473
+    static $balise_dyn_appellee_par_modele = null;
474
+    switch ($operation) {
475
+        case 'read':
476
+            return $balise_dyn_appellee_par_modele;
477
+        case 'reset':
478
+            $balise_dyn_appellee_par_modele = null;
479
+            return null;
480
+        case 'set':
481
+        default:
482
+            $balise_dyn_appellee_par_modele = $arg;
483
+            return $arg;
484
+    }
485 485
 }
486 486
 
487 487
 // temporairement ici : a mettre dans le futur inc/modeles
488 488
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
489 489
 // https://code.spip.net/@creer_contexte_de_modele
490 490
 function creer_contexte_de_modele($args) {
491
-	$contexte = array();
492
-	foreach ($args as $var => $val) {
493
-		if (is_int($var)) { // argument pas formate
494
-			if (in_array($val, array('left', 'right', 'center'))) {
495
-				$var = 'align';
496
-				$contexte[$var] = $val;
497
-			} else {
498
-				$args = explode('=', $val);
499
-				if (count($args) >= 2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
500
-				{
501
-					$contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
502
-				} else // notation abregee
503
-				{
504
-					$contexte[trim($val)] = trim($val);
505
-				}
506
-			}
507
-		} else {
508
-			$contexte[$var] = $val;
509
-		}
510
-	}
511
-
512
-	return $contexte;
491
+    $contexte = array();
492
+    foreach ($args as $var => $val) {
493
+        if (is_int($var)) { // argument pas formate
494
+            if (in_array($val, array('left', 'right', 'center'))) {
495
+                $var = 'align';
496
+                $contexte[$var] = $val;
497
+            } else {
498
+                $args = explode('=', $val);
499
+                if (count($args) >= 2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
500
+                {
501
+                    $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
502
+                } else // notation abregee
503
+                {
504
+                    $contexte[trim($val)] = trim($val);
505
+                }
506
+            }
507
+        } else {
508
+            $contexte[$var] = $val;
509
+        }
510
+    }
511
+
512
+    return $contexte;
513 513
 }
514 514
 
515 515
 /**
@@ -524,40 +524,40 @@  discard block
 block discarded – undo
524 524
  * @return string
525 525
  */
526 526
 function styliser_modele($modele, $id, $contexte=null) {
527
-	static $styliseurs = null;
528
-	if (is_null($styliseurs)) {
529
-		$tables_objet = lister_tables_objets_sql();
530
-		foreach ($tables_objet as $table => $desc) {
531
-			if (isset($desc['modeles']) and $desc['modeles']
532
-				and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
533
-				and function_exists($desc['modeles_styliser'])) {
534
-				$primary = id_table_objet($table);
535
-				foreach ($desc['modeles'] as $m) {
536
-					$styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
537
-				}
538
-			}
539
-		}
540
-	}
541
-
542
-	if (isset($styliseurs[$modele])) {
543
-		$styliseur = $styliseurs[$modele]['callback'];
544
-		if (is_null($id) and $contexte) {
545
-			if (isset($contexte['id'])) {
546
-				$id = $contexte['id'];
547
-			} elseif (isset($contexte[$primary])) {
548
-				$id = $contexte[$primary];
549
-			}
550
-		}
551
-		if (is_null($id)) {
552
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', array('param' => "id/$primary"));
553
-			erreur_squelette($msg);
554
-			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
555
-			$id = 0;
556
-		}
557
-		$modele = $styliseur($modele, $id);
558
-	}
559
-
560
-	return $modele;
527
+    static $styliseurs = null;
528
+    if (is_null($styliseurs)) {
529
+        $tables_objet = lister_tables_objets_sql();
530
+        foreach ($tables_objet as $table => $desc) {
531
+            if (isset($desc['modeles']) and $desc['modeles']
532
+                and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
533
+                and function_exists($desc['modeles_styliser'])) {
534
+                $primary = id_table_objet($table);
535
+                foreach ($desc['modeles'] as $m) {
536
+                    $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
537
+                }
538
+            }
539
+        }
540
+    }
541
+
542
+    if (isset($styliseurs[$modele])) {
543
+        $styliseur = $styliseurs[$modele]['callback'];
544
+        if (is_null($id) and $contexte) {
545
+            if (isset($contexte['id'])) {
546
+                $id = $contexte['id'];
547
+            } elseif (isset($contexte[$primary])) {
548
+                $id = $contexte[$primary];
549
+            }
550
+        }
551
+        if (is_null($id)) {
552
+            $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', array('param' => "id/$primary"));
553
+            erreur_squelette($msg);
554
+            // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
555
+            $id = 0;
556
+        }
557
+        $modele = $styliseur($modele, $id);
558
+    }
559
+
560
+    return $modele;
561 561
 }
562 562
 
563 563
 /**
@@ -576,95 +576,95 @@  discard block
 block discarded – undo
576 576
  */
577 577
 function inclure_modele($type, $id, $params, $lien, $connect = '', $env = array()) {
578 578
 
579
-	static $compteur;
580
-	if (++$compteur > 10) {
581
-		return '';
582
-	} # ne pas boucler indefiniment
583
-
584
-	$type = strtolower($type);
585
-	$type = styliser_modele($type, $id);
586
-
587
-	$fond = $class = '';
588
-
589
-	$params = array_filter(explode('|', $params));
590
-	if ($params) {
591
-		$soustype = current($params);
592
-		$soustype = strtolower(trim($soustype));
593
-		if (in_array($soustype, array('left', 'right', 'center', 'ajax'))) {
594
-			$soustype = next($params);
595
-			$soustype = strtolower($soustype);
596
-		}
597
-
598
-		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
599
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
600
-				$fond = '';
601
-				$class = $soustype;
602
-			}
603
-			// enlever le sous type des params
604
-			$params = array_diff($params, array($soustype));
605
-		}
606
-	}
607
-
608
-	// Si ca marche pas en precisant le sous-type, prendre le type
609
-	if (!$fond and !trouve_modele($fond = $type)) {
610
-		spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
611
-
612
-		return false;
613
-	}
614
-	$fond = 'modeles/' . $fond;
615
-	// Creer le contexte
616
-	$contexte = $env;
617
-	$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
618
-
619
-	// Le numero du modele est mis dans l'environnement
620
-	// d'une part sous l'identifiant "id"
621
-	// et d'autre part sous l'identifiant de la cle primaire
622
-	// par la fonction id_table_objet,
623
-	// (<article1> =>> article =>> id_article =>> id_article=1)
624
-	$_id = id_table_objet($type);
625
-	$contexte['id'] = $contexte[$_id] = $id;
626
-
627
-	if (isset($class)) {
628
-		$contexte['class'] = $class;
629
-	}
630
-
631
-	// Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
632
-	if ($lien) {
633
-		# un eventuel guillemet (") sera reechappe par #ENV
634
-		$contexte['lien'] = str_replace("&quot;", '"', $lien['href']);
635
-		$contexte['lien_class'] = $lien['class'];
636
-		$contexte['lien_mime'] = $lien['mime'];
637
-		$contexte['lien_title'] = $lien['title'];
638
-		$contexte['lien_hreflang'] = $lien['hreflang'];
639
-	}
640
-
641
-	// Traiter les parametres
642
-	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
643
-	$arg_list = creer_contexte_de_modele($params);
644
-	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
645
-	$contexte = array_merge($contexte, $arg_list);
646
-
647
-	// Appliquer le modele avec le contexte
648
-	$retour = recuperer_fond($fond, $contexte, array(), $connect);
649
-
650
-	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
651
-	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
652
-	// sinon, s'il y a un lien, on l'ajoute classiquement
653
-	if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
654
-		'spip_lien_ok')) {
655
-		$retour = inserer_attribut($retour, 'class',
656
-			trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
657
-	} else {
658
-		if ($lien) {
659
-			$retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . "</a>";
660
-		}
661
-	}
662
-
663
-	$compteur--;
664
-
665
-	return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
666
-		? encoder_contexte_ajax($contexte, '', $retour)
667
-		: $retour;
579
+    static $compteur;
580
+    if (++$compteur > 10) {
581
+        return '';
582
+    } # ne pas boucler indefiniment
583
+
584
+    $type = strtolower($type);
585
+    $type = styliser_modele($type, $id);
586
+
587
+    $fond = $class = '';
588
+
589
+    $params = array_filter(explode('|', $params));
590
+    if ($params) {
591
+        $soustype = current($params);
592
+        $soustype = strtolower(trim($soustype));
593
+        if (in_array($soustype, array('left', 'right', 'center', 'ajax'))) {
594
+            $soustype = next($params);
595
+            $soustype = strtolower($soustype);
596
+        }
597
+
598
+        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
599
+            if (!trouve_modele($fond = ($type . '_' . $soustype))) {
600
+                $fond = '';
601
+                $class = $soustype;
602
+            }
603
+            // enlever le sous type des params
604
+            $params = array_diff($params, array($soustype));
605
+        }
606
+    }
607
+
608
+    // Si ca marche pas en precisant le sous-type, prendre le type
609
+    if (!$fond and !trouve_modele($fond = $type)) {
610
+        spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
611
+
612
+        return false;
613
+    }
614
+    $fond = 'modeles/' . $fond;
615
+    // Creer le contexte
616
+    $contexte = $env;
617
+    $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
618
+
619
+    // Le numero du modele est mis dans l'environnement
620
+    // d'une part sous l'identifiant "id"
621
+    // et d'autre part sous l'identifiant de la cle primaire
622
+    // par la fonction id_table_objet,
623
+    // (<article1> =>> article =>> id_article =>> id_article=1)
624
+    $_id = id_table_objet($type);
625
+    $contexte['id'] = $contexte[$_id] = $id;
626
+
627
+    if (isset($class)) {
628
+        $contexte['class'] = $class;
629
+    }
630
+
631
+    // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
632
+    if ($lien) {
633
+        # un eventuel guillemet (") sera reechappe par #ENV
634
+        $contexte['lien'] = str_replace("&quot;", '"', $lien['href']);
635
+        $contexte['lien_class'] = $lien['class'];
636
+        $contexte['lien_mime'] = $lien['mime'];
637
+        $contexte['lien_title'] = $lien['title'];
638
+        $contexte['lien_hreflang'] = $lien['hreflang'];
639
+    }
640
+
641
+    // Traiter les parametres
642
+    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
643
+    $arg_list = creer_contexte_de_modele($params);
644
+    $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
645
+    $contexte = array_merge($contexte, $arg_list);
646
+
647
+    // Appliquer le modele avec le contexte
648
+    $retour = recuperer_fond($fond, $contexte, array(), $connect);
649
+
650
+    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
651
+    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
652
+    // sinon, s'il y a un lien, on l'ajoute classiquement
653
+    if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
654
+        'spip_lien_ok')) {
655
+        $retour = inserer_attribut($retour, 'class',
656
+            trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
657
+    } else {
658
+        if ($lien) {
659
+            $retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . "</a>";
660
+        }
661
+    }
662
+
663
+    $compteur--;
664
+
665
+    return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
666
+        ? encoder_contexte_ajax($contexte, '', $retour)
667
+        : $retour;
668 668
 }
669 669
 
670 670
 // Un inclure_page qui marche aussi pour l'espace prive
@@ -674,98 +674,98 @@  discard block
 block discarded – undo
674 674
 // https://code.spip.net/@evaluer_fond
675 675
 function evaluer_fond($fond, $contexte = array(), $connect = null) {
676 676
 
677
-	$page = inclure_page($fond, $contexte, $connect);
678
-
679
-	if (!$page) {
680
-		return $page;
681
-	}
682
-	// eval $page et affecte $res
683
-	include _ROOT_RESTREINT . "public/evaluer_page.php";
684
-
685
-	// Lever un drapeau (global) si le fond utilise #SESSION
686
-	// a destination de public/parametrer
687
-	// pour remonter vers les inclusions appelantes
688
-	// il faut bien lever ce drapeau apres avoir evalue le fond
689
-	// pour ne pas faire descendre le flag vers les inclusions appelees
690
-	if (isset($page['invalideurs'])
691
-		and isset($page['invalideurs']['session'])
692
-	) {
693
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
694
-	}
695
-
696
-	return $page;
677
+    $page = inclure_page($fond, $contexte, $connect);
678
+
679
+    if (!$page) {
680
+        return $page;
681
+    }
682
+    // eval $page et affecte $res
683
+    include _ROOT_RESTREINT . "public/evaluer_page.php";
684
+
685
+    // Lever un drapeau (global) si le fond utilise #SESSION
686
+    // a destination de public/parametrer
687
+    // pour remonter vers les inclusions appelantes
688
+    // il faut bien lever ce drapeau apres avoir evalue le fond
689
+    // pour ne pas faire descendre le flag vers les inclusions appelees
690
+    if (isset($page['invalideurs'])
691
+        and isset($page['invalideurs']['session'])
692
+    ) {
693
+        $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
694
+    }
695
+
696
+    return $page;
697 697
 }
698 698
 
699 699
 
700 700
 // https://code.spip.net/@page_base_href
701 701
 function page_base_href(&$texte) {
702
-	static $set_html_base = null;
703
-	if (is_null($set_html_base)) {
704
-		if (!defined('_SET_HTML_BASE'))
705
-			// si la profondeur est superieure a 1
706
-			// est que ce n'est pas une url page ni une url action
707
-			// activer par defaut
708
-		{
709
-			$set_html_base = ((
710
-				$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
711
-				and _request(_SPIP_PAGE) !== 'login'
712
-				and !_request('action')) ? true : false);
713
-		} else {
714
-			$set_html_base = _SET_HTML_BASE;
715
-		}
716
-	}
717
-
718
-	if ($set_html_base
719
-		and isset($GLOBALS['html']) and $GLOBALS['html']
720
-		and $GLOBALS['profondeur_url'] > 0
721
-		and ($poshead = strpos($texte, '</head>')) !== false
722
-	) {
723
-		$head = substr($texte, 0, $poshead);
724
-		$insert = false;
725
-		$href_base = false;
726
-		if (strpos($head, '<base') === false) {
727
-			$insert = true;
728
-		} else {
729
-			// si aucun <base ...> n'a de href il faut en inserer un
730
-			// sinon juste re-ecrire les ancres si besoin
731
-			$insert = true;
732
-			include_spip('inc/filtres');
733
-			$bases = extraire_balises($head, 'base');
734
-			foreach ($bases as $base) {
735
-				if ($href_base = extraire_attribut($base, 'href')) {
736
-					$insert = false;
737
-					break;
738
-				}
739
-			}
740
-		}
741
-
742
-		if ($insert){
743
-			include_spip('inc/filtres_mini');
744
-			// ajouter un base qui reglera tous les liens relatifs
745
-			$href_base = url_absolue('./');
746
-			$base = "\n<base href=\"$href_base\" />";
747
-			if (($pos = strpos($head, '<head>'))!==false){
748
-				$head = substr_replace($head, $base, $pos+6, 0);
749
-			} elseif (preg_match(",<head[^>]*>,i", $head, $r)) {
750
-				$head = str_replace($r[0], $r[0] . $base, $head);
751
-			}
752
-			$texte = $head . substr($texte, $poshead);
753
-		}
754
-		if ($href_base) {
755
-			// gerer les ancres
756
-			$base = $_SERVER['REQUEST_URI'];
757
-			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
758
-			if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
759
-				$base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
760
-			}
761
-			if (strpos($texte, "href='#") !== false) {
762
-				$texte = str_replace("href='#", "href='$base#", $texte);
763
-			}
764
-			if (strpos($texte, "href=\"#") !== false) {
765
-				$texte = str_replace("href=\"#", "href=\"$base#", $texte);
766
-			}
767
-		}
768
-	}
702
+    static $set_html_base = null;
703
+    if (is_null($set_html_base)) {
704
+        if (!defined('_SET_HTML_BASE'))
705
+            // si la profondeur est superieure a 1
706
+            // est que ce n'est pas une url page ni une url action
707
+            // activer par defaut
708
+        {
709
+            $set_html_base = ((
710
+                $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
711
+                and _request(_SPIP_PAGE) !== 'login'
712
+                and !_request('action')) ? true : false);
713
+        } else {
714
+            $set_html_base = _SET_HTML_BASE;
715
+        }
716
+    }
717
+
718
+    if ($set_html_base
719
+        and isset($GLOBALS['html']) and $GLOBALS['html']
720
+        and $GLOBALS['profondeur_url'] > 0
721
+        and ($poshead = strpos($texte, '</head>')) !== false
722
+    ) {
723
+        $head = substr($texte, 0, $poshead);
724
+        $insert = false;
725
+        $href_base = false;
726
+        if (strpos($head, '<base') === false) {
727
+            $insert = true;
728
+        } else {
729
+            // si aucun <base ...> n'a de href il faut en inserer un
730
+            // sinon juste re-ecrire les ancres si besoin
731
+            $insert = true;
732
+            include_spip('inc/filtres');
733
+            $bases = extraire_balises($head, 'base');
734
+            foreach ($bases as $base) {
735
+                if ($href_base = extraire_attribut($base, 'href')) {
736
+                    $insert = false;
737
+                    break;
738
+                }
739
+            }
740
+        }
741
+
742
+        if ($insert){
743
+            include_spip('inc/filtres_mini');
744
+            // ajouter un base qui reglera tous les liens relatifs
745
+            $href_base = url_absolue('./');
746
+            $base = "\n<base href=\"$href_base\" />";
747
+            if (($pos = strpos($head, '<head>'))!==false){
748
+                $head = substr_replace($head, $base, $pos+6, 0);
749
+            } elseif (preg_match(",<head[^>]*>,i", $head, $r)) {
750
+                $head = str_replace($r[0], $r[0] . $base, $head);
751
+            }
752
+            $texte = $head . substr($texte, $poshead);
753
+        }
754
+        if ($href_base) {
755
+            // gerer les ancres
756
+            $base = $_SERVER['REQUEST_URI'];
757
+            // pas de guillemets ni < dans l'URL qu'on insere dans le HTML
758
+            if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
759
+                $base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
760
+            }
761
+            if (strpos($texte, "href='#") !== false) {
762
+                $texte = str_replace("href='#", "href='$base#", $texte);
763
+            }
764
+            if (strpos($texte, "href=\"#") !== false) {
765
+                $texte = str_replace("href=\"#", "href=\"$base#", $texte);
766
+            }
767
+        }
768
+    }
769 769
 }
770 770
 
771 771
 
@@ -773,8 +773,8 @@  discard block
 block discarded – undo
773 773
 // et demarrent par X-Spip-...
774 774
 // https://code.spip.net/@envoyer_entetes
775 775
 function envoyer_entetes($entetes) {
776
-	foreach ($entetes as $k => $v) #	if (strncmp($k, 'X-Spip-', 7))
777
-	{
778
-		@header(strlen($v) ? "$k: $v" : $k);
779
-	}
776
+    foreach ($entetes as $k => $v) #	if (strncmp($k, 'X-Spip-', 7))
777
+    {
778
+        @header(strlen($v) ? "$k: $v" : $k);
779
+    }
780 780
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
 
38 38
 	$GLOBALS['contexte'] = calculer_contexte();
39 39
 	$page = array('contexte_implicite' => calculer_contexte_implicite());
40
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(',\.[a-zA-Z0-9]*$,', '',
40
+	$page['contexte_implicite']['cache'] = $fond.preg_replace(',\.[a-zA-Z0-9]*$,', '',
41 41
 			preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));
42 42
 	// Cette fonction est utilisee deux fois
43 43
 	$cacher = charger_fonction('cacher', 'public', true);
@@ -118,7 +118,7 @@  discard block
 block discarded – undo
118 118
 				$lastmodified, $connect);
119 119
 			if ($page === '') {
120 120
 				$erreur = _T('info_erreur_squelette2',
121
-					array('fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES));
121
+					array('fichier' => spip_htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES));
122 122
 				erreur_squelette($erreur);
123 123
 				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
124 124
 				$page = array('texte' => '', 'erreur' => $erreur);
@@ -160,7 +160,7 @@  discard block
 block discarded – undo
160 160
 		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
161 161
 		and !isset($page['entetes']["Last-Modified"])
162 162
 	) {
163
-		$page['entetes']["Last-Modified"] = gmdate("D, d M Y H:i:s", $lastmodified) . " GMT";
163
+		$page['entetes']["Last-Modified"] = gmdate("D, d M Y H:i:s", $lastmodified)." GMT";
164 164
 	}
165 165
 
166 166
 	// fermer la connexion apres les headers si requete HEAD
@@ -225,7 +225,7 @@  discard block
 block discarded – undo
225 225
 		'spip_version_code' => $GLOBALS['spip_version_code'],
226 226
 	);
227 227
 	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
228
-		$contexte_implicite['host'] .= "|" . $_SERVER['HTTP_X_FORWARDED_HOST'];
228
+		$contexte_implicite['host'] .= "|".$_SERVER['HTTP_X_FORWARDED_HOST'];
229 229
 	}
230 230
 
231 231
 	return $contexte_implicite;
@@ -523,7 +523,7 @@  discard block
 block discarded – undo
523 523
  *   et il ne doit etre utilise que pour trouver le id_xx si pas de $id fourni (cas appel depuis styliser)
524 524
  * @return string
525 525
  */
526
-function styliser_modele($modele, $id, $contexte=null) {
526
+function styliser_modele($modele, $id, $contexte = null) {
527 527
 	static $styliseurs = null;
528 528
 	if (is_null($styliseurs)) {
529 529
 		$tables_objet = lister_tables_objets_sql();
@@ -549,7 +549,7 @@  discard block
 block discarded – undo
549 549
 			}
550 550
 		}
551 551
 		if (is_null($id)) {
552
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', array('param' => "id/$primary"));
552
+			$msg = "modeles/$modele : "._T('zbug_parametres_inclus_incorrects', array('param' => "id/$primary"));
553 553
 			erreur_squelette($msg);
554 554
 			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
555 555
 			$id = 0;
@@ -596,7 +596,7 @@  discard block
 block discarded – undo
596 596
 		}
597 597
 
598 598
 		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
599
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
599
+			if (!trouve_modele($fond = ($type.'_'.$soustype))) {
600 600
 				$fond = '';
601 601
 				$class = $soustype;
602 602
 			}
@@ -611,7 +611,7 @@  discard block
 block discarded – undo
611 611
 
612 612
 		return false;
613 613
 	}
614
-	$fond = 'modeles/' . $fond;
614
+	$fond = 'modeles/'.$fond;
615 615
 	// Creer le contexte
616 616
 	$contexte = $env;
617 617
 	$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
@@ -650,13 +650,13 @@  discard block
 block discarded – undo
650 650
 	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
651 651
 	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
652 652
 	// sinon, s'il y a un lien, on l'ajoute classiquement
653
-	if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
653
+	if (strstr(' '.($classes = extraire_attribut($retour, 'class')).' ',
654 654
 		'spip_lien_ok')) {
655 655
 		$retour = inserer_attribut($retour, 'class',
656 656
 			trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
657 657
 	} else {
658 658
 		if ($lien) {
659
-			$retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . "</a>";
659
+			$retour = "<a href='".$lien['href']."' class='".$lien['class']."'>".$retour."</a>";
660 660
 		}
661 661
 	}
662 662
 
@@ -680,7 +680,7 @@  discard block
 block discarded – undo
680 680
 		return $page;
681 681
 	}
682 682
 	// eval $page et affecte $res
683
-	include _ROOT_RESTREINT . "public/evaluer_page.php";
683
+	include _ROOT_RESTREINT."public/evaluer_page.php";
684 684
 
685 685
 	// Lever un drapeau (global) si le fond utilise #SESSION
686 686
 	// a destination de public/parametrer
@@ -739,24 +739,24 @@  discard block
 block discarded – undo
739 739
 			}
740 740
 		}
741 741
 
742
-		if ($insert){
742
+		if ($insert) {
743 743
 			include_spip('inc/filtres_mini');
744 744
 			// ajouter un base qui reglera tous les liens relatifs
745 745
 			$href_base = url_absolue('./');
746 746
 			$base = "\n<base href=\"$href_base\" />";
747
-			if (($pos = strpos($head, '<head>'))!==false){
748
-				$head = substr_replace($head, $base, $pos+6, 0);
747
+			if (($pos = strpos($head, '<head>')) !== false) {
748
+				$head = substr_replace($head, $base, $pos + 6, 0);
749 749
 			} elseif (preg_match(",<head[^>]*>,i", $head, $r)) {
750
-				$head = str_replace($r[0], $r[0] . $base, $head);
750
+				$head = str_replace($r[0], $r[0].$base, $head);
751 751
 			}
752
-			$texte = $head . substr($texte, $poshead);
752
+			$texte = $head.substr($texte, $poshead);
753 753
 		}
754 754
 		if ($href_base) {
755 755
 			// gerer les ancres
756 756
 			$base = $_SERVER['REQUEST_URI'];
757 757
 			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
758
-			if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
759
-				$base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
758
+			if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
759
+				$base = str_replace(array("'", '"', '<'), array("%27", '%22', '%3C'), $base);
760 760
 			}
761 761
 			if (strpos($texte, "href='#") !== false) {
762 762
 				$texte = str_replace("href='#", "href='$base#", $texte);
Please login to merge, or discard this patch.
ecrire/inc/actions.php 3 patches
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -43,9 +43,9 @@  discard block
 block discarded – undo
43 43
  *     URL, code HTML du formulaire ou tableau (action, arg, hash)
44 44
  */
45 45
 function generer_action_auteur($action, $arg = '', $redirect = '', $mode = false, $att = '', $public = false) {
46
-	$securiser_action = charger_fonction('securiser_action', 'inc');
46
+    $securiser_action = charger_fonction('securiser_action', 'inc');
47 47
 
48
-	return $securiser_action($action, $arg, $redirect, $mode, $att, $public);
48
+    return $securiser_action($action, $arg, $redirect, $mode, $att, $public);
49 49
 }
50 50
 
51 51
 /**
@@ -78,9 +78,9 @@  discard block
 block discarded – undo
78 78
  *     Code HTML du formulaire
79 79
  */
80 80
 function redirige_action_auteur($action, $arg, $ret, $gra = '', $mode = false, $atts = '', $public = false) {
81
-	$r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT) . generer_url_ecrire($ret, $gra, true, true);
81
+    $r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT) . generer_url_ecrire($ret, $gra, true, true);
82 82
 
83
-	return generer_action_auteur($action, $arg, $r, $mode, $atts, $public);
83
+    return generer_action_auteur($action, $arg, $r, $mode, $atts, $public);
84 84
 }
85 85
 
86 86
 /**
@@ -105,9 +105,9 @@  discard block
 block discarded – undo
105 105
  *     URL, code HTML du formulaire ou tableau (action, arg, hash)
106 106
  */
107 107
 function redirige_action_post($action, $arg, $ret, $gra, $corps, $att = '') {
108
-	$r = _DIR_RESTREINT . generer_url_ecrire($ret, $gra, false, true);
108
+    $r = _DIR_RESTREINT . generer_url_ecrire($ret, $gra, false, true);
109 109
 
110
-	return generer_action_auteur($action, $arg, $r, $corps, $att . " method='post'");
110
+    return generer_action_auteur($action, $arg, $r, $corps, $att . " method='post'");
111 111
 }
112 112
 
113 113
 
@@ -122,27 +122,27 @@  discard block
 block discarded – undo
122 122
  *   passer "text/html" comme $content_type
123 123
  */
124 124
 function ajax_retour($corps, $content_type = null) {
125
-	$xml = false;
126
-	if (is_null($content_type) or $content_type === true) {
127
-		$xml = true;
128
-		$content_type = 'text/html';
129
-	} elseif (!$content_type or !is_string($content_type) or strpos($content_type, '/') === false) {
130
-		$content_type = 'text/html';
131
-	}
125
+    $xml = false;
126
+    if (is_null($content_type) or $content_type === true) {
127
+        $xml = true;
128
+        $content_type = 'text/html';
129
+    } elseif (!$content_type or !is_string($content_type) or strpos($content_type, '/') === false) {
130
+        $content_type = 'text/html';
131
+    }
132 132
 
133
-	$e = '';
134
-	if (isset($_COOKIE['spip_admin'])
135
-		and ((_request('var_mode') == 'debug') or !empty($GLOBALS['tableau_des_temps']))
136
-	) {
137
-		$e = erreur_squelette();
138
-	}
133
+    $e = '';
134
+    if (isset($_COOKIE['spip_admin'])
135
+        and ((_request('var_mode') == 'debug') or !empty($GLOBALS['tableau_des_temps']))
136
+    ) {
137
+        $e = erreur_squelette();
138
+    }
139 139
 
140
-	$c = $GLOBALS['meta']['charset'];
141
-	header('Content-Type: ' . $content_type . '; charset=' . $c);
142
-	$debut = (($xml and strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?" . ">\n" : '');
143
-	$fin = '';
140
+    $c = $GLOBALS['meta']['charset'];
141
+    header('Content-Type: ' . $content_type . '; charset=' . $c);
142
+    $debut = (($xml and strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?" . ">\n" : '');
143
+    $fin = '';
144 144
 
145
-	echo $debut.$corps.$fin.$e;
146
-	while (ob_get_level()) ob_end_flush();
147
-	flush();
145
+    echo $debut.$corps.$fin.$e;
146
+    while (ob_get_level()) ob_end_flush();
147
+    flush();
148 148
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
  *     Code HTML du formulaire
79 79
  */
80 80
 function redirige_action_auteur($action, $arg, $ret, $gra = '', $mode = false, $atts = '', $public = false) {
81
-	$r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT) . generer_url_ecrire($ret, $gra, true, true);
81
+	$r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT).generer_url_ecrire($ret, $gra, true, true);
82 82
 
83 83
 	return generer_action_auteur($action, $arg, $r, $mode, $atts, $public);
84 84
 }
@@ -105,9 +105,9 @@  discard block
 block discarded – undo
105 105
  *     URL, code HTML du formulaire ou tableau (action, arg, hash)
106 106
  */
107 107
 function redirige_action_post($action, $arg, $ret, $gra, $corps, $att = '') {
108
-	$r = _DIR_RESTREINT . generer_url_ecrire($ret, $gra, false, true);
108
+	$r = _DIR_RESTREINT.generer_url_ecrire($ret, $gra, false, true);
109 109
 
110
-	return generer_action_auteur($action, $arg, $r, $corps, $att . " method='post'");
110
+	return generer_action_auteur($action, $arg, $r, $corps, $att." method='post'");
111 111
 }
112 112
 
113 113
 
@@ -138,8 +138,8 @@  discard block
 block discarded – undo
138 138
 	}
139 139
 
140 140
 	$c = $GLOBALS['meta']['charset'];
141
-	header('Content-Type: ' . $content_type . '; charset=' . $c);
142
-	$debut = (($xml and strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?" . ">\n" : '');
141
+	header('Content-Type: '.$content_type.'; charset='.$c);
142
+	$debut = (($xml and strlen(trim($corps))) ? '<'."?xml version='1.0' encoding='".$c."'?".">\n" : '');
143 143
 	$fin = '';
144 144
 
145 145
 	echo $debut.$corps.$fin.$e;
Please login to merge, or discard this patch.
Braces   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -143,6 +143,8 @@
 block discarded – undo
143 143
 	$fin = '';
144 144
 
145 145
 	echo $debut.$corps.$fin.$e;
146
-	while (ob_get_level()) ob_end_flush();
146
+	while (ob_get_level()) {
147
+	    ob_end_flush();
148
+	}
147 149
 	flush();
148 150
 }
Please login to merge, or discard this patch.
ecrire/inc/texte_mini.php 1 patch
Indentation   +376 added lines, -376 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 include_spip('inc/filtres');
23 23
 include_spip('inc/lang');
@@ -39,21 +39,21 @@  discard block
 block discarded – undo
39 39
  **/
40 40
 function definir_puce() {
41 41
 
42
-	// Attention au sens, qui n'est pas defini de la meme facon dans
43
-	// l'espace prive (spip_lang est la langue de l'interface, lang_dir
44
-	// celle du texte) et public (spip_lang est la langue du texte)
45
-	$dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
42
+    // Attention au sens, qui n'est pas defini de la meme facon dans
43
+    // l'espace prive (spip_lang est la langue de l'interface, lang_dir
44
+    // celle du texte) et public (spip_lang est la langue du texte)
45
+    $dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
46 46
 
47
-	$p = 'puce' . (test_espace_prive() ? '_prive' : '');
48
-	if ($dir == 'rtl') {
49
-		$p .= '_rtl';
50
-	}
47
+    $p = 'puce' . (test_espace_prive() ? '_prive' : '');
48
+    if ($dir == 'rtl') {
49
+        $p .= '_rtl';
50
+    }
51 51
 
52
-	if (!isset($GLOBALS[$p])) {
53
-		$GLOBALS[$p] = '<span class="spip-puce '.$dir.'"><b>–</b></span>';
54
-	}
52
+    if (!isset($GLOBALS[$p])) {
53
+        $GLOBALS[$p] = '<span class="spip-puce '.$dir.'"><b>–</b></span>';
54
+    }
55 55
 
56
-	return $GLOBALS[$p];
56
+    return $GLOBALS[$p];
57 57
 }
58 58
 
59 59
 
@@ -61,13 +61,13 @@  discard block
 block discarded – undo
61 61
 // dont on souhaite qu'ils provoquent un saut de paragraphe
62 62
 
63 63
 if (!defined('_BALISES_BLOCS')) {
64
-	define('_BALISES_BLOCS',
65
-	'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
66
-	);
64
+    define('_BALISES_BLOCS',
65
+    'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
66
+    );
67 67
 }
68 68
 
69 69
 if (!defined('_BALISES_BLOCS_REGEXP')) {
70
-	define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
70
+    define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
71 71
 }
72 72
 
73 73
 //
@@ -79,26 +79,26 @@  discard block
 block discarded – undo
79 79
 // echappe est un div ou un span
80 80
 // https://code.spip.net/@code_echappement
81 81
 function code_echappement($rempl, $source = '', $no_transform = false, $mode = null) {
82
-	if (!strlen($rempl)) {
83
-		return '';
84
-	}
85
-
86
-	// Tester si on echappe en span ou en div
87
-	if (is_null($mode) or !in_array($mode, array('div', 'span'))) {
88
-		$mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
89
-	}
90
-
91
-	// Decouper en morceaux, base64 a des probleme selon la taille de la pile
92
-	$taille = 30000;
93
-	$return = "";
94
-	for ($i = 0; $i < strlen($rempl); $i += $taille) {
95
-		// Convertir en base64 et cacher dans un attribut
96
-		// utiliser les " pour eviter le re-encodage de ' et &#8217
97
-		$base64 = base64_encode(substr($rempl, $i, $taille));
98
-		$return .= "<$mode class=\"base64$source\" title=\"$base64\"></$mode>";
99
-	}
100
-
101
-	return $return;
82
+    if (!strlen($rempl)) {
83
+        return '';
84
+    }
85
+
86
+    // Tester si on echappe en span ou en div
87
+    if (is_null($mode) or !in_array($mode, array('div', 'span'))) {
88
+        $mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
89
+    }
90
+
91
+    // Decouper en morceaux, base64 a des probleme selon la taille de la pile
92
+    $taille = 30000;
93
+    $return = "";
94
+    for ($i = 0; $i < strlen($rempl); $i += $taille) {
95
+        // Convertir en base64 et cacher dans un attribut
96
+        // utiliser les " pour eviter le re-encodage de ' et &#8217
97
+        $base64 = base64_encode(substr($rempl, $i, $taille));
98
+        $return .= "<$mode class=\"base64$source\" title=\"$base64\"></$mode>";
99
+    }
100
+
101
+    return $return;
102 102
 
103 103
 }
104 104
 
@@ -106,84 +106,84 @@  discard block
 block discarded – undo
106 106
 // Echapper les <html>...</ html>
107 107
 // https://code.spip.net/@traiter_echap_html_dist
108 108
 function traiter_echap_html_dist($regs) {
109
-	return $regs[3];
109
+    return $regs[3];
110 110
 }
111 111
 
112 112
 // Echapper les <pre>...</ pre>
113 113
 function traiter_echap_pre_dist($regs) {
114
-	// echapper les <code> dans <pre>
115
-	$pre = $regs[3];
116
-
117
-	// echapper les < dans <code>
118
-	// on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
119
-	if (strpos($pre, "<") !== false
120
-		and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)){
121
-
122
-		foreach ($matches as $m){
123
-			if ($m[1]==='code'){
124
-				$code = "<code" . $m[2] . ">" . spip_htmlspecialchars($m[3]) . "</code>";
125
-				$pre = str_replace($m[0], $code, $pre);
126
-			}
127
-		}
128
-	}
129
-	return "<pre>$pre</pre>";
114
+    // echapper les <code> dans <pre>
115
+    $pre = $regs[3];
116
+
117
+    // echapper les < dans <code>
118
+    // on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
119
+    if (strpos($pre, "<") !== false
120
+        and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)){
121
+
122
+        foreach ($matches as $m){
123
+            if ($m[1]==='code'){
124
+                $code = "<code" . $m[2] . ">" . spip_htmlspecialchars($m[3]) . "</code>";
125
+                $pre = str_replace($m[0], $code, $pre);
126
+            }
127
+        }
128
+    }
129
+    return "<pre>$pre</pre>";
130 130
 }
131 131
 
132 132
 // Echapper les <code>...</ code>
133 133
 // https://code.spip.net/@traiter_echap_code_dist
134 134
 function traiter_echap_code_dist($regs) {
135
-	list(, , $att, $corps) = $regs;
136
-	$echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
137
-
138
-	// ne pas mettre le <div...> s'il n'y a qu'une ligne
139
-	if (is_int(strpos($echap, "\n"))) {
140
-		// supprimer les sauts de ligne debut/fin
141
-		// (mais pas les espaces => ascii art).
142
-		$echap = preg_replace("/^[\n\r]+|[\n\r]+$/s", "", $echap);
143
-		$echap = nl2br($echap);
144
-		$echap = "<div style='text-align: left;' "
145
-			. "class='spip_code' dir='ltr'><code$att>"
146
-			. $echap . "</code></div>";
147
-	} else {
148
-		$echap = "<code$att class='spip_code' dir='ltr'>" . $echap . "</code>";
149
-	}
150
-
151
-	$echap = str_replace("\t", "&nbsp; &nbsp; &nbsp; &nbsp; ", $echap);
152
-	$echap = str_replace("  ", " &nbsp;", $echap);
153
-
154
-	return $echap;
135
+    list(, , $att, $corps) = $regs;
136
+    $echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
137
+
138
+    // ne pas mettre le <div...> s'il n'y a qu'une ligne
139
+    if (is_int(strpos($echap, "\n"))) {
140
+        // supprimer les sauts de ligne debut/fin
141
+        // (mais pas les espaces => ascii art).
142
+        $echap = preg_replace("/^[\n\r]+|[\n\r]+$/s", "", $echap);
143
+        $echap = nl2br($echap);
144
+        $echap = "<div style='text-align: left;' "
145
+            . "class='spip_code' dir='ltr'><code$att>"
146
+            . $echap . "</code></div>";
147
+    } else {
148
+        $echap = "<code$att class='spip_code' dir='ltr'>" . $echap . "</code>";
149
+    }
150
+
151
+    $echap = str_replace("\t", "&nbsp; &nbsp; &nbsp; &nbsp; ", $echap);
152
+    $echap = str_replace("  ", " &nbsp;", $echap);
153
+
154
+    return $echap;
155 155
 }
156 156
 
157 157
 // Echapper les <cadre>...</ cadre> aka <frame>...</ frame>
158 158
 // https://code.spip.net/@traiter_echap_cadre_dist
159 159
 function traiter_echap_cadre_dist($regs) {
160
-	$echap = trim(entites_html($regs[3]));
161
-	// compter les lignes un peu plus finement qu'avec les \n
162
-	$lignes = explode("\n", trim($echap));
163
-	$n = 0;
164
-	foreach ($lignes as $l) {
165
-		$n += floor(strlen($l) / 60) + 1;
166
-	}
167
-	$n = max($n, 2);
168
-	$echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre' dir='ltr'>$echap</textarea>";
169
-
170
-	return $echap;
160
+    $echap = trim(entites_html($regs[3]));
161
+    // compter les lignes un peu plus finement qu'avec les \n
162
+    $lignes = explode("\n", trim($echap));
163
+    $n = 0;
164
+    foreach ($lignes as $l) {
165
+        $n += floor(strlen($l) / 60) + 1;
166
+    }
167
+    $n = max($n, 2);
168
+    $echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre' dir='ltr'>$echap</textarea>";
169
+
170
+    return $echap;
171 171
 }
172 172
 
173 173
 // https://code.spip.net/@traiter_echap_frame_dist
174 174
 function traiter_echap_frame_dist($regs) {
175
-	return traiter_echap_cadre_dist($regs);
175
+    return traiter_echap_cadre_dist($regs);
176 176
 }
177 177
 
178 178
 // https://code.spip.net/@traiter_echap_script_dist
179 179
 function traiter_echap_script_dist($regs) {
180
-	// rendre joli (et inactif) si c'est un script language=php
181
-	if (preg_match(',<script\b[^>]+php,ims', $regs[0])) {
182
-		return highlight_string($regs[0], true);
183
-	}
180
+    // rendre joli (et inactif) si c'est un script language=php
181
+    if (preg_match(',<script\b[^>]+php,ims', $regs[0])) {
182
+        return highlight_string($regs[0], true);
183
+    }
184 184
 
185
-	// Cas normal : le script passe tel quel
186
-	return $regs[0];
185
+    // Cas normal : le script passe tel quel
186
+    return $regs[0];
187 187
 }
188 188
 
189 189
 define('_PROTEGE_BLOCS', ',<(html|pre|code|cadre|frame|script|style)(\s[^>]*)?>(.*)</\1>,UimsS');
@@ -192,71 +192,71 @@  discard block
 block discarded – undo
192 192
 // - pour $no_transform voir le filtre post_autobr dans inc/filtres
193 193
 // https://code.spip.net/@echappe_html
194 194
 function echappe_html(
195
-	$letexte,
196
-	$source = '',
197
-	$no_transform = false,
198
-	$preg = ''
195
+    $letexte,
196
+    $source = '',
197
+    $no_transform = false,
198
+    $preg = ''
199 199
 ) {
200
-	if (!is_string($letexte) or !strlen($letexte)) {
201
-		return $letexte;
202
-	}
203
-
204
-	// si le texte recu est long PCRE risque d'exploser, on
205
-	// fait donc un mic-mac pour augmenter pcre.backtrack_limit
206
-	if (($len = strlen($letexte)) > 100000) {
207
-		if (!$old = @ini_get('pcre.backtrack_limit')) {
208
-			$old = 100000;
209
-		}
210
-		if ($len > $old) {
211
-			$a = @ini_set('pcre.backtrack_limit', $len);
212
-			spip_log("ini_set pcre.backtrack_limit=$len ($old)");
213
-		}
214
-	}
215
-
216
-	if (($preg or strpos($letexte, "<") !== false)
217
-		and preg_match_all($preg ? $preg : _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER)
218
-	) {
219
-		foreach ($matches as $regs) {
220
-			// echappements tels quels ?
221
-			if ($no_transform) {
222
-				$echap = $regs[0];
223
-			} // sinon les traiter selon le cas
224
-			else {
225
-				if (function_exists($f = 'traiter_echap_' . strtolower($regs[1]))) {
226
-					$echap = $f($regs);
227
-				} else {
228
-					if (function_exists($f = $f . '_dist')) {
229
-						$echap = $f($regs);
230
-					}
231
-				}
232
-			}
233
-
234
-			$p = strpos($letexte, $regs[0]);
235
-			$letexte = substr_replace($letexte, code_echappement($echap, $source, $no_transform), $p, strlen($regs[0]));
236
-		}
237
-	}
238
-
239
-	if ($no_transform) {
240
-		return $letexte;
241
-	}
242
-
243
-	// Echapper le php pour faire joli (ici, c'est pas pour la securite)
244
-	// seulement si on a echappe les <script>
245
-	// (derogatoire car on ne peut pas faire passer < ? ... ? >
246
-	// dans une callback autonommee
247
-	if (strpos($preg ? $preg : _PROTEGE_BLOCS, 'script') !== false) {
248
-		if (strpos($letexte, "<" . "?") !== false and preg_match_all(',<[?].*($|[?]>),UisS',
249
-				$letexte, $matches, PREG_SET_ORDER)
250
-		) {
251
-			foreach ($matches as $regs) {
252
-				$letexte = str_replace($regs[0],
253
-					code_echappement(highlight_string($regs[0], true), $source),
254
-					$letexte);
255
-			}
256
-		}
257
-	}
258
-
259
-	return $letexte;
200
+    if (!is_string($letexte) or !strlen($letexte)) {
201
+        return $letexte;
202
+    }
203
+
204
+    // si le texte recu est long PCRE risque d'exploser, on
205
+    // fait donc un mic-mac pour augmenter pcre.backtrack_limit
206
+    if (($len = strlen($letexte)) > 100000) {
207
+        if (!$old = @ini_get('pcre.backtrack_limit')) {
208
+            $old = 100000;
209
+        }
210
+        if ($len > $old) {
211
+            $a = @ini_set('pcre.backtrack_limit', $len);
212
+            spip_log("ini_set pcre.backtrack_limit=$len ($old)");
213
+        }
214
+    }
215
+
216
+    if (($preg or strpos($letexte, "<") !== false)
217
+        and preg_match_all($preg ? $preg : _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER)
218
+    ) {
219
+        foreach ($matches as $regs) {
220
+            // echappements tels quels ?
221
+            if ($no_transform) {
222
+                $echap = $regs[0];
223
+            } // sinon les traiter selon le cas
224
+            else {
225
+                if (function_exists($f = 'traiter_echap_' . strtolower($regs[1]))) {
226
+                    $echap = $f($regs);
227
+                } else {
228
+                    if (function_exists($f = $f . '_dist')) {
229
+                        $echap = $f($regs);
230
+                    }
231
+                }
232
+            }
233
+
234
+            $p = strpos($letexte, $regs[0]);
235
+            $letexte = substr_replace($letexte, code_echappement($echap, $source, $no_transform), $p, strlen($regs[0]));
236
+        }
237
+    }
238
+
239
+    if ($no_transform) {
240
+        return $letexte;
241
+    }
242
+
243
+    // Echapper le php pour faire joli (ici, c'est pas pour la securite)
244
+    // seulement si on a echappe les <script>
245
+    // (derogatoire car on ne peut pas faire passer < ? ... ? >
246
+    // dans une callback autonommee
247
+    if (strpos($preg ? $preg : _PROTEGE_BLOCS, 'script') !== false) {
248
+        if (strpos($letexte, "<" . "?") !== false and preg_match_all(',<[?].*($|[?]>),UisS',
249
+                $letexte, $matches, PREG_SET_ORDER)
250
+        ) {
251
+            foreach ($matches as $regs) {
252
+                $letexte = str_replace($regs[0],
253
+                    code_echappement(highlight_string($regs[0], true), $source),
254
+                    $letexte);
255
+            }
256
+        }
257
+    }
258
+
259
+    return $letexte;
260 260
 }
261 261
 
262 262
 //
@@ -265,52 +265,52 @@  discard block
 block discarded – undo
265 265
 // par propre() : exemple dans multi et dans typo()
266 266
 // https://code.spip.net/@echappe_retour
267 267
 function echappe_retour($letexte, $source = '', $filtre = "") {
268
-	if (strpos($letexte, "base64$source")) {
269
-		# spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
270
-		$max_prof = 5;
271
-		while (strpos($letexte, "<") !== false
272
-			and
273
-			preg_match_all(',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
274
-				$letexte, $regs, PREG_SET_ORDER)
275
-			and $max_prof--) {
276
-			foreach ($regs as $reg) {
277
-				$rempl = base64_decode(extraire_attribut($reg[0], 'title'));
278
-				// recherche d'attributs supplementaires
279
-				$at = array();
280
-				foreach (array('lang', 'dir') as $attr) {
281
-					if ($a = extraire_attribut($reg[0], $attr)) {
282
-						$at[$attr] = $a;
283
-					}
284
-				}
285
-				if ($at) {
286
-					$rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
287
-					foreach ($at as $attr => $a) {
288
-						$rempl = inserer_attribut($rempl, $attr, $a);
289
-					}
290
-				}
291
-				if ($filtre) {
292
-					$rempl = $filtre($rempl);
293
-				}
294
-				$letexte = str_replace($reg[0], $rempl, $letexte);
295
-			}
296
-		}
297
-	}
298
-
299
-	return $letexte;
268
+    if (strpos($letexte, "base64$source")) {
269
+        # spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
270
+        $max_prof = 5;
271
+        while (strpos($letexte, "<") !== false
272
+            and
273
+            preg_match_all(',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
274
+                $letexte, $regs, PREG_SET_ORDER)
275
+            and $max_prof--) {
276
+            foreach ($regs as $reg) {
277
+                $rempl = base64_decode(extraire_attribut($reg[0], 'title'));
278
+                // recherche d'attributs supplementaires
279
+                $at = array();
280
+                foreach (array('lang', 'dir') as $attr) {
281
+                    if ($a = extraire_attribut($reg[0], $attr)) {
282
+                        $at[$attr] = $a;
283
+                    }
284
+                }
285
+                if ($at) {
286
+                    $rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
287
+                    foreach ($at as $attr => $a) {
288
+                        $rempl = inserer_attribut($rempl, $attr, $a);
289
+                    }
290
+                }
291
+                if ($filtre) {
292
+                    $rempl = $filtre($rempl);
293
+                }
294
+                $letexte = str_replace($reg[0], $rempl, $letexte);
295
+            }
296
+        }
297
+    }
298
+
299
+    return $letexte;
300 300
 }
301 301
 
302 302
 // Reinserer le javascript de confiance (venant des modeles)
303 303
 
304 304
 // https://code.spip.net/@echappe_retour_modeles
305 305
 function echappe_retour_modeles($letexte, $interdire_scripts = false) {
306
-	$letexte = echappe_retour($letexte);
306
+    $letexte = echappe_retour($letexte);
307 307
 
308
-	// Dans les appels directs hors squelette, securiser aussi ici
309
-	if ($interdire_scripts) {
310
-		$letexte = interdire_scripts($letexte);
311
-	}
308
+    // Dans les appels directs hors squelette, securiser aussi ici
309
+    if ($interdire_scripts) {
310
+        $letexte = interdire_scripts($letexte);
311
+    }
312 312
 
313
-	return trim($letexte);
313
+    return trim($letexte);
314 314
 }
315 315
 
316 316
 
@@ -338,130 +338,130 @@  discard block
 block discarded – undo
338 338
  *     Texte coupé
339 339
  **/
340 340
 function couper($texte, $taille = 50, $suite = null) {
341
-	if (!($length = strlen($texte)) or $taille <= 0) {
342
-		return '';
343
-	}
344
-	$offset = 400 + 2 * $taille;
345
-	while ($offset < $length
346
-		and strlen(preg_replace(",<(!--|\w|/)[^>]+>,Uims", "", substr($texte, 0, $offset))) < $taille) {
347
-		$offset = 2 * $offset;
348
-	}
349
-	if ($offset < $length
350
-		&& ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
351
-	) {
352
-		$p_tag_fermant = strpos($texte, '>', $offset);
353
-		if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
354
-			$offset = $p_tag_fermant + 1;
355
-		} // prolonger la coupe jusqu'au tag fermant suivant eventuel
356
-	}
357
-	$texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
358
-
359
-	if (!function_exists('nettoyer_raccourcis_typo')) {
360
-		include_spip('inc/lien');
361
-	}
362
-	$texte = nettoyer_raccourcis_typo($texte);
363
-
364
-	// balises de sauts de ligne et paragraphe
365
-	$texte = preg_replace("/<p( [^>]*)?" . ">/", "\r", $texte);
366
-	$texte = preg_replace("/<br( [^>]*)?" . ">/", "\n", $texte);
367
-
368
-	// on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
369
-	$texte = str_replace("\n\n", "\r", $texte);
370
-
371
-	// supprimer les tags
372
-	$texte = supprimer_tags($texte);
373
-	$texte = trim(str_replace("\n", " ", $texte));
374
-	$texte .= "\n";  // marquer la fin
375
-
376
-	// corriger la longueur de coupe
377
-	// en fonction de la presence de caracteres utf
378
-	if ($GLOBALS['meta']['charset'] == 'utf-8') {
379
-		$long = charset2unicode($texte);
380
-		$long = spip_substr($long, 0, max($taille, 1));
381
-		$nbcharutf = preg_match_all('/(&#[0-9]{3,6};)/S', $long, $matches);
382
-		$taille += $nbcharutf;
383
-	}
384
-
385
-
386
-	// couper au mot precedent
387
-	$long = spip_substr($texte, 0, max($taille - 4, 1));
388
-	$u = $GLOBALS['meta']['pcre_u'];
389
-	$court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
390
-	if (is_null($suite)) {
391
-		$suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
392
-	}
393
-	$points = $suite;
394
-
395
-	// trop court ? ne pas faire de (...)
396
-	if (spip_strlen($court) < max(0.75 * $taille, 2)) {
397
-		$points = '';
398
-		$long = spip_substr($texte, 0, $taille);
399
-		$texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
400
-		// encore trop court ? couper au caractere
401
-		if (spip_strlen($texte) < 0.75 * $taille) {
402
-			$texte = $long;
403
-		}
404
-	} else {
405
-		$texte = $court;
406
-	}
407
-
408
-	if (strpos($texte, "\n"))  // la fin est encore la : c'est qu'on n'a pas de texte de suite
409
-	{
410
-		$points = '';
411
-	}
412
-
413
-	// remettre les paragraphes
414
-	$texte = preg_replace("/\r+/", "\n\n", $texte);
415
-
416
-	// supprimer l'eventuelle entite finale mal coupee
417
-	$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
418
-
419
-	return quote_amp(trim($texte)) . $points;
341
+    if (!($length = strlen($texte)) or $taille <= 0) {
342
+        return '';
343
+    }
344
+    $offset = 400 + 2 * $taille;
345
+    while ($offset < $length
346
+        and strlen(preg_replace(",<(!--|\w|/)[^>]+>,Uims", "", substr($texte, 0, $offset))) < $taille) {
347
+        $offset = 2 * $offset;
348
+    }
349
+    if ($offset < $length
350
+        && ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
351
+    ) {
352
+        $p_tag_fermant = strpos($texte, '>', $offset);
353
+        if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
354
+            $offset = $p_tag_fermant + 1;
355
+        } // prolonger la coupe jusqu'au tag fermant suivant eventuel
356
+    }
357
+    $texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
358
+
359
+    if (!function_exists('nettoyer_raccourcis_typo')) {
360
+        include_spip('inc/lien');
361
+    }
362
+    $texte = nettoyer_raccourcis_typo($texte);
363
+
364
+    // balises de sauts de ligne et paragraphe
365
+    $texte = preg_replace("/<p( [^>]*)?" . ">/", "\r", $texte);
366
+    $texte = preg_replace("/<br( [^>]*)?" . ">/", "\n", $texte);
367
+
368
+    // on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
369
+    $texte = str_replace("\n\n", "\r", $texte);
370
+
371
+    // supprimer les tags
372
+    $texte = supprimer_tags($texte);
373
+    $texte = trim(str_replace("\n", " ", $texte));
374
+    $texte .= "\n";  // marquer la fin
375
+
376
+    // corriger la longueur de coupe
377
+    // en fonction de la presence de caracteres utf
378
+    if ($GLOBALS['meta']['charset'] == 'utf-8') {
379
+        $long = charset2unicode($texte);
380
+        $long = spip_substr($long, 0, max($taille, 1));
381
+        $nbcharutf = preg_match_all('/(&#[0-9]{3,6};)/S', $long, $matches);
382
+        $taille += $nbcharutf;
383
+    }
384
+
385
+
386
+    // couper au mot precedent
387
+    $long = spip_substr($texte, 0, max($taille - 4, 1));
388
+    $u = $GLOBALS['meta']['pcre_u'];
389
+    $court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
390
+    if (is_null($suite)) {
391
+        $suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
392
+    }
393
+    $points = $suite;
394
+
395
+    // trop court ? ne pas faire de (...)
396
+    if (spip_strlen($court) < max(0.75 * $taille, 2)) {
397
+        $points = '';
398
+        $long = spip_substr($texte, 0, $taille);
399
+        $texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
400
+        // encore trop court ? couper au caractere
401
+        if (spip_strlen($texte) < 0.75 * $taille) {
402
+            $texte = $long;
403
+        }
404
+    } else {
405
+        $texte = $court;
406
+    }
407
+
408
+    if (strpos($texte, "\n"))  // la fin est encore la : c'est qu'on n'a pas de texte de suite
409
+    {
410
+        $points = '';
411
+    }
412
+
413
+    // remettre les paragraphes
414
+    $texte = preg_replace("/\r+/", "\n\n", $texte);
415
+
416
+    // supprimer l'eventuelle entite finale mal coupee
417
+    $texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
418
+
419
+    return quote_amp(trim($texte)) . $points;
420 420
 }
421 421
 
422 422
 
423 423
 // https://code.spip.net/@protege_js_modeles
424 424
 function protege_js_modeles($t) {
425
-	if (isset($GLOBALS['visiteur_session'])) {
426
-		if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) {
427
-			if (!defined('_PROTEGE_JS_MODELES')) {
428
-				include_spip('inc/acces');
429
-				define('_PROTEGE_JS_MODELES', creer_uniqid());
430
-			}
431
-			foreach ($r as $regs) {
432
-				$t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
433
-			}
434
-		}
435
-		if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
436
-			if (!defined('_PROTEGE_PHP_MODELES')) {
437
-				include_spip('inc/acces');
438
-				define('_PROTEGE_PHP_MODELES', creer_uniqid());
439
-			}
440
-			foreach ($r as $regs) {
441
-				$t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
442
-			}
443
-		}
444
-	}
445
-
446
-	return $t;
425
+    if (isset($GLOBALS['visiteur_session'])) {
426
+        if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) {
427
+            if (!defined('_PROTEGE_JS_MODELES')) {
428
+                include_spip('inc/acces');
429
+                define('_PROTEGE_JS_MODELES', creer_uniqid());
430
+            }
431
+            foreach ($r as $regs) {
432
+                $t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
433
+            }
434
+        }
435
+        if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
436
+            if (!defined('_PROTEGE_PHP_MODELES')) {
437
+                include_spip('inc/acces');
438
+                define('_PROTEGE_PHP_MODELES', creer_uniqid());
439
+            }
440
+            foreach ($r as $regs) {
441
+                $t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
442
+            }
443
+        }
444
+    }
445
+
446
+    return $t;
447 447
 }
448 448
 
449 449
 
450 450
 function echapper_faux_tags($letexte) {
451
-	if (strpos($letexte, '<') === false) {
452
-		return $letexte;
453
-	}
454
-	$textMatches = preg_split(',(</?[a-z!][^<>]*>),', $letexte, null, PREG_SPLIT_DELIM_CAPTURE);
455
-
456
-	$letexte = "";
457
-	while (count($textMatches)) {
458
-		// un texte a echapper
459
-		$letexte .= str_replace("<", '&lt;', array_shift($textMatches));
460
-		// un tag html qui a servit a faite le split
461
-		$letexte .= array_shift($textMatches);
462
-	}
463
-
464
-	return $letexte;
451
+    if (strpos($letexte, '<') === false) {
452
+        return $letexte;
453
+    }
454
+    $textMatches = preg_split(',(</?[a-z!][^<>]*>),', $letexte, null, PREG_SPLIT_DELIM_CAPTURE);
455
+
456
+    $letexte = "";
457
+    while (count($textMatches)) {
458
+        // un texte a echapper
459
+        $letexte .= str_replace("<", '&lt;', array_shift($textMatches));
460
+        // un tag html qui a servit a faite le split
461
+        $letexte .= array_shift($textMatches);
462
+    }
463
+
464
+    return $letexte;
465 465
 }
466 466
 
467 467
 /**
@@ -474,44 +474,44 @@  discard block
 block discarded – undo
474 474
  * @return string
475 475
  */
476 476
 function echapper_html_suspect($texte, $strict=true) {
477
-	static $echapper_html_suspect;
478
-	if (!$texte or !is_string($texte)) {
479
-		return $texte;
480
-	}
481
-
482
-	if (!isset($echapper_html_suspect)) {
483
-		$echapper_html_suspect = charger_fonction('echapper_html_suspect', 'inc', true);
484
-	}
485
-	// si fonction personalisee, on delegue
486
-	if ($echapper_html_suspect) {
487
-		return $echapper_html_suspect($texte, $strict);
488
-	}
489
-
490
-	if (strpos($texte, '<') === false
491
-	  or strpos($texte, '=') === false) {
492
-		return $texte;
493
-	}
494
-
495
-	// quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
496
-	// car sinon on declenche sur les modeles ou ressources
497
-	if (!$strict and
498
-	  (strpos($texte,'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
499
-	  ){
500
-		return $texte;
501
-	}
502
-
503
-	// on teste sur strlen car safehtml supprime le contenu dangereux
504
-	// mais il peut aussi changer des ' en " sur les attributs html,
505
-	// donc un test d'egalite est trop strict
506
-	if (strlen(safehtml($texte)) !== strlen($texte)) {
507
-		$texte = str_replace("<", "&lt;", $texte);
508
-		if (!function_exists('attribut_html')) {
509
-			include_spip('inc/filtres');
510
-		}
511
-		$texte = "<mark class='danger-js' title='".attribut_html(_T('erreur_contenu_suspect'))."'>⚠️</mark> ".$texte;
512
-	}
513
-
514
-	return $texte;
477
+    static $echapper_html_suspect;
478
+    if (!$texte or !is_string($texte)) {
479
+        return $texte;
480
+    }
481
+
482
+    if (!isset($echapper_html_suspect)) {
483
+        $echapper_html_suspect = charger_fonction('echapper_html_suspect', 'inc', true);
484
+    }
485
+    // si fonction personalisee, on delegue
486
+    if ($echapper_html_suspect) {
487
+        return $echapper_html_suspect($texte, $strict);
488
+    }
489
+
490
+    if (strpos($texte, '<') === false
491
+      or strpos($texte, '=') === false) {
492
+        return $texte;
493
+    }
494
+
495
+    // quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
496
+    // car sinon on declenche sur les modeles ou ressources
497
+    if (!$strict and
498
+      (strpos($texte,'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
499
+        ){
500
+        return $texte;
501
+    }
502
+
503
+    // on teste sur strlen car safehtml supprime le contenu dangereux
504
+    // mais il peut aussi changer des ' en " sur les attributs html,
505
+    // donc un test d'egalite est trop strict
506
+    if (strlen(safehtml($texte)) !== strlen($texte)) {
507
+        $texte = str_replace("<", "&lt;", $texte);
508
+        if (!function_exists('attribut_html')) {
509
+            include_spip('inc/filtres');
510
+        }
511
+        $texte = "<mark class='danger-js' title='".attribut_html(_T('erreur_contenu_suspect'))."'>⚠️</mark> ".$texte;
512
+    }
513
+
514
+    return $texte;
515 515
 }
516 516
 
517 517
 
@@ -532,30 +532,30 @@  discard block
 block discarded – undo
532 532
  *      Texte sécurisé
533 533
  **/
534 534
 function safehtml($t) {
535
-	static $safehtml;
536
-
537
-	if (!$t or !is_string($t)) {
538
-		return $t;
539
-	}
540
-	# attention safehtml nettoie deux ou trois caracteres de plus. A voir
541
-	if (strpos($t, '<') === false) {
542
-		return str_replace("\x00", '', $t);
543
-	}
544
-
545
-	if (!function_exists('interdire_scripts')) {
546
-		include_spip('inc/texte');
547
-	}
548
-	$t = interdire_scripts($t); // jolifier le php
549
-	$t = echappe_js($t);
550
-
551
-	if (!isset($safehtml)) {
552
-		$safehtml = charger_fonction('safehtml', 'inc', true);
553
-	}
554
-	if ($safehtml) {
555
-		$t = $safehtml($t);
556
-	}
557
-
558
-	return interdire_scripts($t); // interdire le php (2 precautions)
535
+    static $safehtml;
536
+
537
+    if (!$t or !is_string($t)) {
538
+        return $t;
539
+    }
540
+    # attention safehtml nettoie deux ou trois caracteres de plus. A voir
541
+    if (strpos($t, '<') === false) {
542
+        return str_replace("\x00", '', $t);
543
+    }
544
+
545
+    if (!function_exists('interdire_scripts')) {
546
+        include_spip('inc/texte');
547
+    }
548
+    $t = interdire_scripts($t); // jolifier le php
549
+    $t = echappe_js($t);
550
+
551
+    if (!isset($safehtml)) {
552
+        $safehtml = charger_fonction('safehtml', 'inc', true);
553
+    }
554
+    if ($safehtml) {
555
+        $t = $safehtml($t);
556
+    }
557
+
558
+    return interdire_scripts($t); // interdire le php (2 precautions)
559 559
 }
560 560
 
561 561
 
@@ -577,10 +577,10 @@  discard block
 block discarded – undo
577 577
  *     Texte sans les modèles d'image
578 578
  **/
579 579
 function supprime_img($letexte, $message = null) {
580
-	if ($message === null) {
581
-		$message = '(' . _T('img_indisponible') . ')';
582
-	}
580
+    if ($message === null) {
581
+        $message = '(' . _T('img_indisponible') . ')';
582
+    }
583 583
 
584
-	return preg_replace(',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
585
-		$message, $letexte);
584
+    return preg_replace(',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
585
+        $message, $letexte);
586 586
 }
Please login to merge, or discard this patch.