Completed
Pull Request — master (#33)
by
unknown
10:00 queued 04:31
created
ecrire/inc/utils.php 1 patch
Indentation   +2119 added lines, -2120 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
 
@@ -48,63 +48,63 @@  discard block
 block discarded – undo
48 48
  *     Nom de la fonction, ou false.
49 49
  */
50 50
 function charger_fonction($nom, $dossier = 'exec', $continue = false) {
51
-	static $echecs = array();
52
-
53
-	if (strlen($dossier) and substr($dossier, -1) != '/') {
54
-		$dossier .= '/';
55
-	}
56
-	$f = str_replace('/', '_', $dossier) . $nom;
57
-
58
-	if (function_exists($f)) {
59
-		return $f;
60
-	}
61
-	if (function_exists($g = $f . '_dist')) {
62
-		return $g;
63
-	}
64
-
65
-	if (isset($echecs[$f])) {
66
-		return $echecs[$f];
67
-	}
68
-	// Sinon charger le fichier de declaration si plausible
69
-
70
-	if (!preg_match(',^\w+$,', $f)) {
71
-		if ($continue) {
72
-			return false;
73
-		} //appel interne, on passe
74
-		include_spip('inc/minipres');
75
-		echo minipres();
76
-		exit;
77
-	}
78
-
79
-	// passer en minuscules (cf les balises de formulaires)
80
-	// et inclure le fichier
81
-	if (!$inc = include_spip($dossier . ($d = strtolower($nom)))
82
-		// si le fichier truc/machin/nom.php n'existe pas,
83
-		// la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
84
-		and strlen(dirname($dossier)) and dirname($dossier) != '.'
85
-	) {
86
-		include_spip(substr($dossier, 0, -1));
87
-	}
88
-	if (function_exists($f)) {
89
-		return $f;
90
-	}
91
-	if (function_exists($g)) {
92
-		return $g;
93
-	}
94
-
95
-	if ($continue) {
96
-		return $echecs[$f] = false;
97
-	}
98
-
99
-	// Echec : message d'erreur
100
-	spip_log("fonction $nom ($f ou $g) indisponible" .
101
-		($inc ? "" : " (fichier $d absent de $dossier)"));
102
-
103
-	include_spip('inc/minipres');
104
-	echo minipres(_T('forum_titre_erreur'),
105
-		_T('fichier_introuvable', array('fichier' => '<b>' . spip_htmlentities($d) . '</b>')),
106
-		array('all_inline'=>true,'status'=>404));
107
-	exit;
51
+    static $echecs = array();
52
+
53
+    if (strlen($dossier) and substr($dossier, -1) != '/') {
54
+        $dossier .= '/';
55
+    }
56
+    $f = str_replace('/', '_', $dossier) . $nom;
57
+
58
+    if (function_exists($f)) {
59
+        return $f;
60
+    }
61
+    if (function_exists($g = $f . '_dist')) {
62
+        return $g;
63
+    }
64
+
65
+    if (isset($echecs[$f])) {
66
+        return $echecs[$f];
67
+    }
68
+    // Sinon charger le fichier de declaration si plausible
69
+
70
+    if (!preg_match(',^\w+$,', $f)) {
71
+        if ($continue) {
72
+            return false;
73
+        } //appel interne, on passe
74
+        include_spip('inc/minipres');
75
+        echo minipres();
76
+        exit;
77
+    }
78
+
79
+    // passer en minuscules (cf les balises de formulaires)
80
+    // et inclure le fichier
81
+    if (!$inc = include_spip($dossier . ($d = strtolower($nom)))
82
+        // si le fichier truc/machin/nom.php n'existe pas,
83
+        // la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
84
+        and strlen(dirname($dossier)) and dirname($dossier) != '.'
85
+    ) {
86
+        include_spip(substr($dossier, 0, -1));
87
+    }
88
+    if (function_exists($f)) {
89
+        return $f;
90
+    }
91
+    if (function_exists($g)) {
92
+        return $g;
93
+    }
94
+
95
+    if ($continue) {
96
+        return $echecs[$f] = false;
97
+    }
98
+
99
+    // Echec : message d'erreur
100
+    spip_log("fonction $nom ($f ou $g) indisponible" .
101
+        ($inc ? "" : " (fichier $d absent de $dossier)"));
102
+
103
+    include_spip('inc/minipres');
104
+    echo minipres(_T('forum_titre_erreur'),
105
+        _T('fichier_introuvable', array('fichier' => '<b>' . spip_htmlentities($d) . '</b>')),
106
+        array('all_inline'=>true,'status'=>404));
107
+    exit;
108 108
 }
109 109
 
110 110
 /**
@@ -114,17 +114,17 @@  discard block
 block discarded – undo
114 114
  * @return bool
115 115
  */
116 116
 function include_once_check($file) {
117
-	if (file_exists($file)) {
118
-		include_once $file;
117
+    if (file_exists($file)) {
118
+        include_once $file;
119 119
 
120
-		return true;
121
-	}
122
-	$crash = (isset($GLOBALS['meta']['message_crash_plugins']) ? unserialize($GLOBALS['meta']['message_crash_plugins']) : '');
123
-	$crash = ($crash ? $crash : array());
124
-	$crash[$file] = true;
125
-	ecrire_meta('message_crash_plugins', serialize($crash));
120
+        return true;
121
+    }
122
+    $crash = (isset($GLOBALS['meta']['message_crash_plugins']) ? unserialize($GLOBALS['meta']['message_crash_plugins']) : '');
123
+    $crash = ($crash ? $crash : array());
124
+    $crash[$file] = true;
125
+    ecrire_meta('message_crash_plugins', serialize($crash));
126 126
 
127
-	return false;
127
+    return false;
128 128
 }
129 129
 
130 130
 
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
  *     - string : chemin du fichier trouvé
149 149
  **/
150 150
 function include_spip($f, $include = true) {
151
-	return find_in_path($f . '.php', '', $include);
151
+    return find_in_path($f . '.php', '', $include);
152 152
 }
153 153
 
154 154
 /**
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
  *     - string : chemin du fichier trouvé
169 169
  **/
170 170
 function require_spip($f) {
171
-	return find_in_path($f . '.php', '', 'required');
171
+    return find_in_path($f . '.php', '', 'required');
172 172
 }
173 173
 
174 174
 /**
@@ -194,22 +194,22 @@  discard block
 block discarded – undo
194 194
  *     Les paramètres du pipeline modifiés
195 195
  **/
196 196
 function minipipe($fonc, &$val) {
197
-	// fonction
198
-	if (function_exists($fonc)) {
199
-		$val = call_user_func($fonc, $val);
200
-	} // Class::Methode
201
-	else {
202
-		if (preg_match("/^(\w*)::(\w*)$/S", $fonc, $regs)
203
-			and $methode = array($regs[1], $regs[2])
204
-			and is_callable($methode)
205
-		) {
206
-			$val = call_user_func($methode, $val);
207
-		} else {
208
-			spip_log("Erreur - '$fonc' non definie !");
209
-		}
210
-	}
197
+    // fonction
198
+    if (function_exists($fonc)) {
199
+        $val = call_user_func($fonc, $val);
200
+    } // Class::Methode
201
+    else {
202
+        if (preg_match("/^(\w*)::(\w*)$/S", $fonc, $regs)
203
+            and $methode = array($regs[1], $regs[2])
204
+            and is_callable($methode)
205
+        ) {
206
+            $val = call_user_func($methode, $val);
207
+        } else {
208
+            spip_log("Erreur - '$fonc' non definie !");
209
+        }
210
+    }
211 211
 
212
-	return $val;
212
+    return $val;
213 213
 }
214 214
 
215 215
 /**
@@ -240,45 +240,45 @@  discard block
 block discarded – undo
240 240
  *     Résultat
241 241
  */
242 242
 function pipeline($action, $val = null) {
243
-	static $charger;
244
-
245
-	// chargement initial des fonctions mises en cache, ou generation du cache
246
-	if (!$charger) {
247
-		if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) {
248
-			include_spip('inc/plugin');
249
-			// generer les fichiers php precompiles
250
-			// de chargement des plugins et des pipelines
251
-			actualise_plugins_actifs();
252
-			if (!($ok = @is_readable($charger))) {
253
-				spip_log("fichier $charger pas cree");
254
-			}
255
-		}
256
-
257
-		if ($ok) {
258
-			include_once $charger;
259
-		}
260
-	}
261
-
262
-	// appliquer notre fonction si elle existe
263
-	$fonc = 'execute_pipeline_' . strtolower($action);
264
-	if (function_exists($fonc)) {
265
-		$val = $fonc($val);
266
-	} // plantage ?
267
-	else {
268
-		spip_log("fonction $fonc absente : pipeline desactive", _LOG_ERREUR);
269
-	}
270
-
271
-	// si le flux est une table avec 2 cle args&data
272
-	// on ne ressort du pipe que les donnees dans 'data'
273
-	// array_key_exists pour php 4.1.0
274
-	if (is_array($val)
275
-		and count($val) == 2
276
-		and (array_key_exists('data', $val))
277
-	) {
278
-		$val = $val['data'];
279
-	}
280
-
281
-	return $val;
243
+    static $charger;
244
+
245
+    // chargement initial des fonctions mises en cache, ou generation du cache
246
+    if (!$charger) {
247
+        if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) {
248
+            include_spip('inc/plugin');
249
+            // generer les fichiers php precompiles
250
+            // de chargement des plugins et des pipelines
251
+            actualise_plugins_actifs();
252
+            if (!($ok = @is_readable($charger))) {
253
+                spip_log("fichier $charger pas cree");
254
+            }
255
+        }
256
+
257
+        if ($ok) {
258
+            include_once $charger;
259
+        }
260
+    }
261
+
262
+    // appliquer notre fonction si elle existe
263
+    $fonc = 'execute_pipeline_' . strtolower($action);
264
+    if (function_exists($fonc)) {
265
+        $val = $fonc($val);
266
+    } // plantage ?
267
+    else {
268
+        spip_log("fonction $fonc absente : pipeline desactive", _LOG_ERREUR);
269
+    }
270
+
271
+    // si le flux est une table avec 2 cle args&data
272
+    // on ne ressort du pipe que les donnees dans 'data'
273
+    // array_key_exists pour php 4.1.0
274
+    if (is_array($val)
275
+        and count($val) == 2
276
+        and (array_key_exists('data', $val))
277
+    ) {
278
+        $val = $val['data'];
279
+    }
280
+
281
+    return $val;
282 282
 }
283 283
 
284 284
 /**
@@ -322,35 +322,35 @@  discard block
 block discarded – undo
322 322
  *     paramètre est planté pour cause de compatibilité ascendante.
323 323
  */
324 324
 function spip_log($message = null, $name = null) {
325
-	static $pre = array();
326
-	static $log;
327
-	preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs);
328
-	if (!isset($regs[1]) or !$logname = $regs[1]) {
329
-		$logname = null;
330
-	}
331
-	if (!isset($regs[2]) or !$niveau = $regs[2]) {
332
-		$niveau = _LOG_INFO;
333
-	}
334
-
335
-	if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) {
336
-		if (!$pre) {
337
-			$pre = array(
338
-				_LOG_HS => 'HS:',
339
-				_LOG_ALERTE_ROUGE => 'ALERTE:',
340
-				_LOG_CRITIQUE => 'CRITIQUE:',
341
-				_LOG_ERREUR => 'ERREUR:',
342
-				_LOG_AVERTISSEMENT => 'WARNING:',
343
-				_LOG_INFO_IMPORTANTE => '!INFO:',
344
-				_LOG_INFO => 'info:',
345
-				_LOG_DEBUG => 'debug:'
346
-			);
347
-			$log = charger_fonction('log', 'inc');
348
-		}
349
-		if (!is_string($message)) {
350
-			$message = print_r($message, true);
351
-		}
352
-		$log($pre[$niveau] . ' ' . $message, $logname);
353
-	}
325
+    static $pre = array();
326
+    static $log;
327
+    preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs);
328
+    if (!isset($regs[1]) or !$logname = $regs[1]) {
329
+        $logname = null;
330
+    }
331
+    if (!isset($regs[2]) or !$niveau = $regs[2]) {
332
+        $niveau = _LOG_INFO;
333
+    }
334
+
335
+    if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) {
336
+        if (!$pre) {
337
+            $pre = array(
338
+                _LOG_HS => 'HS:',
339
+                _LOG_ALERTE_ROUGE => 'ALERTE:',
340
+                _LOG_CRITIQUE => 'CRITIQUE:',
341
+                _LOG_ERREUR => 'ERREUR:',
342
+                _LOG_AVERTISSEMENT => 'WARNING:',
343
+                _LOG_INFO_IMPORTANTE => '!INFO:',
344
+                _LOG_INFO => 'info:',
345
+                _LOG_DEBUG => 'debug:'
346
+            );
347
+            $log = charger_fonction('log', 'inc');
348
+        }
349
+        if (!is_string($message)) {
350
+            $message = print_r($message, true);
351
+        }
352
+        $log($pre[$niveau] . ' ' . $message, $logname);
353
+    }
354 354
 }
355 355
 
356 356
 /**
@@ -361,8 +361,8 @@  discard block
 block discarded – undo
361 361
  * @param array $opt Tableau d'options
362 362
  **/
363 363
 function journal($phrase, $opt = array()) {
364
-	$journal = charger_fonction('journal', 'inc');
365
-	$journal($phrase, $opt);
364
+    $journal = charger_fonction('journal', 'inc');
365
+    $journal($phrase, $opt);
366 366
 }
367 367
 
368 368
 
@@ -381,36 +381,36 @@  discard block
 block discarded – undo
381 381
  **/
382 382
 function _request($var, $c = false) {
383 383
 
384
-	if (is_array($c)) {
385
-		return isset($c[$var]) ? $c[$var] : null;
386
-	}
384
+    if (is_array($c)) {
385
+        return isset($c[$var]) ? $c[$var] : null;
386
+    }
387 387
 
388
-	if (isset($_GET[$var])) {
389
-		$a = $_GET[$var];
390
-	} elseif (isset($_POST[$var])) {
391
-		$a = $_POST[$var];
392
-	} else {
393
-		return null;
394
-	}
388
+    if (isset($_GET[$var])) {
389
+        $a = $_GET[$var];
390
+    } elseif (isset($_POST[$var])) {
391
+        $a = $_POST[$var];
392
+    } else {
393
+        return null;
394
+    }
395 395
 
396
-	// Si on est en ajax et en POST tout a ete encode
397
-	// via encodeURIComponent, il faut donc repasser
398
-	// dans le charset local...
399
-	if (defined('_AJAX')
400
-		and _AJAX
401
-		and isset($GLOBALS['meta']['charset'])
402
-		and $GLOBALS['meta']['charset'] != 'utf-8'
403
-		and is_string($a)
404
-		// check rapide mais pas fiable
405
-		and preg_match(',[\x80-\xFF],', $a)
406
-		// check fiable
407
-		and include_spip('inc/charsets')
408
-		and is_utf8($a)
409
-	) {
410
-		return importer_charset($a, 'utf-8');
411
-	}
396
+    // Si on est en ajax et en POST tout a ete encode
397
+    // via encodeURIComponent, il faut donc repasser
398
+    // dans le charset local...
399
+    if (defined('_AJAX')
400
+        and _AJAX
401
+        and isset($GLOBALS['meta']['charset'])
402
+        and $GLOBALS['meta']['charset'] != 'utf-8'
403
+        and is_string($a)
404
+        // check rapide mais pas fiable
405
+        and preg_match(',[\x80-\xFF],', $a)
406
+        // check fiable
407
+        and include_spip('inc/charsets')
408
+        and is_utf8($a)
409
+    ) {
410
+        return importer_charset($a, 'utf-8');
411
+    }
412 412
 
413
-	return $a;
413
+    return $a;
414 414
 }
415 415
 
416 416
 
@@ -428,22 +428,22 @@  discard block
 block discarded – undo
428 428
  *     - false sinon
429 429
  **/
430 430
 function set_request($var, $val = null, $c = false) {
431
-	if (is_array($c)) {
432
-		unset($c[$var]);
433
-		if ($val !== null) {
434
-			$c[$var] = $val;
435
-		}
431
+    if (is_array($c)) {
432
+        unset($c[$var]);
433
+        if ($val !== null) {
434
+            $c[$var] = $val;
435
+        }
436 436
 
437
-		return $c;
438
-	}
437
+        return $c;
438
+    }
439 439
 
440
-	unset($_GET[$var]);
441
-	unset($_POST[$var]);
442
-	if ($val !== null) {
443
-		$_GET[$var] = $val;
444
-	}
440
+    unset($_GET[$var]);
441
+    unset($_POST[$var]);
442
+    if ($val !== null) {
443
+        $_GET[$var] = $val;
444
+    }
445 445
 
446
-	return false; # n'affecte pas $c
446
+    return false; # n'affecte pas $c
447 447
 }
448 448
 
449 449
 
@@ -452,23 +452,22 @@  discard block
 block discarded – undo
452 452
  * 
453 453
  * On est sur le web, on exclut certains protocoles, 
454 454
  * notamment 'file://', 'php://' et d'autres…
455
-
456 455
  * @param string $url
457 456
  * @return bool
458 457
  */
459 458
 function tester_url_absolue($url) {
460
-	$url = trim($url);
461
-	if (preg_match(";^([a-z]{3,7}:)?//;Uims", $url, $m)) {
462
-		if (
463
-			isset($m[1])
464
-			and $p = strtolower(rtrim($m[1], ':'))
465
-			and in_array($p, array('file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'))
466
-		  ) {
467
-			return false;
468
-		}
469
-		return true;
470
-	}
471
-	return false;
459
+    $url = trim($url);
460
+    if (preg_match(";^([a-z]{3,7}:)?//;Uims", $url, $m)) {
461
+        if (
462
+            isset($m[1])
463
+            and $p = strtolower(rtrim($m[1], ':'))
464
+            and in_array($p, array('file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'))
465
+            ) {
466
+            return false;
467
+        }
468
+        return true;
469
+    }
470
+    return false;
472 471
 }
473 472
 
474 473
 /**
@@ -490,94 +489,94 @@  discard block
 block discarded – undo
490 489
  * @return string URL
491 490
  */
492 491
 function parametre_url($url, $c, $v = null, $sep = '&amp;') {
493
-	// requete erronnee : plusieurs variable dans $c et aucun $v
494
-	if (strpos($c, "|") !== false and is_null($v)) {
495
-		return null;
496
-	}
497
-
498
-	// lever l'#ancre
499
-	if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
500
-		$url = $r[1];
501
-		$ancre = $r[2];
502
-	} else {
503
-		$ancre = '';
504
-	}
505
-
506
-	// eclater
507
-	$url = preg_split(',[?]|&amp;|&,', $url);
508
-
509
-	// recuperer la base
510
-	$a = array_shift($url);
511
-	if (!$a) {
512
-		$a = './';
513
-	}
514
-
515
-	$regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,';
516
-	$ajouts = array_flip(explode('|', $c));
517
-	$u = is_array($v) ? $v : rawurlencode($v);
518
-	$testv = (is_array($v) ? count($v) : strlen($v));
519
-	$v_read = null;
520
-	// lire les variables et agir
521
-	foreach ($url as $n => $val) {
522
-		if (preg_match($regexp, urldecode($val), $r)) {
523
-			$r = array_pad($r, 3, null);
524
-			if ($v === null) {
525
-				// c'est un tableau, on memorise les valeurs
526
-				if (substr($r[1], -2) == "[]") {
527
-					if (!$v_read) {
528
-						$v_read = array();
529
-					}
530
-					$v_read[] = $r[2] ? substr($r[2], 1) : '';
531
-				} // c'est un scalaire, on retourne direct
532
-				else {
533
-					return $r[2] ? substr($r[2], 1) : '';
534
-				}
535
-			} // suppression
536
-			elseif (!$testv) {
537
-				unset($url[$n]);
538
-			}
539
-			// Ajout. Pour une variable, remplacer au meme endroit,
540
-			// pour un tableau ce sera fait dans la prochaine boucle
541
-			elseif (substr($r[1], -2) != '[]') {
542
-				$url[$n] = $r[1] . '=' . $u;
543
-				unset($ajouts[$r[1]]);
544
-			}
545
-			// Pour les tableaux on laisse tomber les valeurs de
546
-			// départ, on remplira à l'étape suivante
547
-			else {
548
-				unset($url[$n]);
549
-			}
550
-		}
551
-	}
552
-
553
-	// traiter les parametres pas encore trouves
554
-	if ($v === null
555
-		and $args = func_get_args()
556
-		and count($args) == 2
557
-	) {
558
-		return $v_read; // rien trouve ou un tableau
559
-	} elseif ($testv) {
560
-		foreach ($ajouts as $k => $n) {
561
-			if (!is_array($v)) {
562
-				$url[] = $k . '=' . $u;
563
-			} else {
564
-				$id = (substr($k, -2) == '[]') ? $k : ($k . "[]");
565
-				foreach ($v as $w) {
566
-					$url[] = $id . '=' . (is_array($w) ? 'Array' : $w);
567
-				}
568
-			}
569
-		}
570
-	}
571
-
572
-	// eliminer les vides
573
-	$url = array_filter($url);
574
-
575
-	// recomposer l'adresse
576
-	if ($url) {
577
-		$a .= '?' . join($sep, $url);
578
-	}
579
-
580
-	return $a . $ancre;
492
+    // requete erronnee : plusieurs variable dans $c et aucun $v
493
+    if (strpos($c, "|") !== false and is_null($v)) {
494
+        return null;
495
+    }
496
+
497
+    // lever l'#ancre
498
+    if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
499
+        $url = $r[1];
500
+        $ancre = $r[2];
501
+    } else {
502
+        $ancre = '';
503
+    }
504
+
505
+    // eclater
506
+    $url = preg_split(',[?]|&amp;|&,', $url);
507
+
508
+    // recuperer la base
509
+    $a = array_shift($url);
510
+    if (!$a) {
511
+        $a = './';
512
+    }
513
+
514
+    $regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,';
515
+    $ajouts = array_flip(explode('|', $c));
516
+    $u = is_array($v) ? $v : rawurlencode($v);
517
+    $testv = (is_array($v) ? count($v) : strlen($v));
518
+    $v_read = null;
519
+    // lire les variables et agir
520
+    foreach ($url as $n => $val) {
521
+        if (preg_match($regexp, urldecode($val), $r)) {
522
+            $r = array_pad($r, 3, null);
523
+            if ($v === null) {
524
+                // c'est un tableau, on memorise les valeurs
525
+                if (substr($r[1], -2) == "[]") {
526
+                    if (!$v_read) {
527
+                        $v_read = array();
528
+                    }
529
+                    $v_read[] = $r[2] ? substr($r[2], 1) : '';
530
+                } // c'est un scalaire, on retourne direct
531
+                else {
532
+                    return $r[2] ? substr($r[2], 1) : '';
533
+                }
534
+            } // suppression
535
+            elseif (!$testv) {
536
+                unset($url[$n]);
537
+            }
538
+            // Ajout. Pour une variable, remplacer au meme endroit,
539
+            // pour un tableau ce sera fait dans la prochaine boucle
540
+            elseif (substr($r[1], -2) != '[]') {
541
+                $url[$n] = $r[1] . '=' . $u;
542
+                unset($ajouts[$r[1]]);
543
+            }
544
+            // Pour les tableaux on laisse tomber les valeurs de
545
+            // départ, on remplira à l'étape suivante
546
+            else {
547
+                unset($url[$n]);
548
+            }
549
+        }
550
+    }
551
+
552
+    // traiter les parametres pas encore trouves
553
+    if ($v === null
554
+        and $args = func_get_args()
555
+        and count($args) == 2
556
+    ) {
557
+        return $v_read; // rien trouve ou un tableau
558
+    } elseif ($testv) {
559
+        foreach ($ajouts as $k => $n) {
560
+            if (!is_array($v)) {
561
+                $url[] = $k . '=' . $u;
562
+            } else {
563
+                $id = (substr($k, -2) == '[]') ? $k : ($k . "[]");
564
+                foreach ($v as $w) {
565
+                    $url[] = $id . '=' . (is_array($w) ? 'Array' : $w);
566
+                }
567
+            }
568
+        }
569
+    }
570
+
571
+    // eliminer les vides
572
+    $url = array_filter($url);
573
+
574
+    // recomposer l'adresse
575
+    if ($url) {
576
+        $a .= '?' . join($sep, $url);
577
+    }
578
+
579
+    return $a . $ancre;
581 580
 }
582 581
 
583 582
 /**
@@ -595,21 +594,21 @@  discard block
 block discarded – undo
595 594
  * @return string
596 595
  */
597 596
 function ancre_url($url, $ancre) {
598
-	// lever l'#ancre
599
-	if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
600
-		$url = $r[1];
601
-	}
602
-	if (preg_match('/[^-_a-zA-Z0-9]+/S', $ancre)) {
603
-		if (!function_exists('translitteration')) {
604
-			include_spip('inc/charsets');
605
-		}
606
-		$ancre = preg_replace(
607
-			array('/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'),
608
-			array('', '-'),
609
-			translitteration($ancre)
610
-		);
611
-	}
612
-	return $url . (strlen($ancre) ? '#' . $ancre : '');
597
+    // lever l'#ancre
598
+    if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
599
+        $url = $r[1];
600
+    }
601
+    if (preg_match('/[^-_a-zA-Z0-9]+/S', $ancre)) {
602
+        if (!function_exists('translitteration')) {
603
+            include_spip('inc/charsets');
604
+        }
605
+        $ancre = preg_replace(
606
+            array('/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'),
607
+            array('', '-'),
608
+            translitteration($ancre)
609
+        );
610
+    }
611
+    return $url . (strlen($ancre) ? '#' . $ancre : '');
613 612
 }
614 613
 
615 614
 /**
@@ -619,16 +618,16 @@  discard block
 block discarded – undo
619 618
  * @return string
620 619
  */
621 620
 function nettoyer_uri($reset = null) {
622
-	static $done = false;
623
-	static $propre = '';
624
-	if (!is_null($reset)) {
625
-		return $propre = $reset;
626
-	}
627
-	if ($done) {
628
-		return $propre;
629
-	}
630
-	$done = true;
631
-	return $propre = nettoyer_uri_var($GLOBALS['REQUEST_URI']);
621
+    static $done = false;
622
+    static $propre = '';
623
+    if (!is_null($reset)) {
624
+        return $propre = $reset;
625
+    }
626
+    if ($done) {
627
+        return $propre;
628
+    }
629
+    $done = true;
630
+    return $propre = nettoyer_uri_var($GLOBALS['REQUEST_URI']);
632 631
 }
633 632
 
634 633
 /**
@@ -640,13 +639,13 @@  discard block
 block discarded – undo
640 639
  * @return string
641 640
  */
642 641
 function nettoyer_uri_var($request_uri) {
643
-	$uri1 = $request_uri;
644
-	do {
645
-		$uri = $uri1;
646
-		$uri1 = preg_replace(',([?&])(var_[^=&]*|PHPSESSID|fbclid|utm_[^=&]*)=[^&]*(&|$),i',
647
-			'\1', $uri);
648
-	} while ($uri <> $uri1);
649
-	return preg_replace(',[?&]$,', '', $uri1);
642
+    $uri1 = $request_uri;
643
+    do {
644
+        $uri = $uri1;
645
+        $uri1 = preg_replace(',([?&])(var_[^=&]*|PHPSESSID|fbclid|utm_[^=&]*)=[^&]*(&|$),i',
646
+            '\1', $uri);
647
+    } while ($uri <> $uri1);
648
+    return preg_replace(',[?&]$,', '', $uri1);
650 649
 }
651 650
 
652 651
 
@@ -660,47 +659,47 @@  discard block
 block discarded – undo
660 659
  *    URL vers soi-même
661 660
  **/
662 661
 function self($amp = '&amp;', $root = false) {
663
-	$url = nettoyer_uri();
664
-	if (!$root
665
-		and (
666
-			// si pas de profondeur on peut tronquer
667
-			$GLOBALS['profondeur_url'] < (_DIR_RESTREINT ? 1 : 2)
668
-			// sinon c'est OK si _SET_HTML_BASE a ete force a false
669
-			or (defined('_SET_HTML_BASE') and !_SET_HTML_BASE))
670
-	) {
671
-		$url = preg_replace(',^[^?]*/,', '', $url);
672
-	}
673
-	// ajouter le cas echeant les variables _POST['id_...']
674
-	foreach ($_POST as $v => $c) {
675
-		if (substr($v, 0, 3) == 'id_') {
676
-			$url = parametre_url($url, $v, $c, '&');
677
-		}
678
-	}
679
-
680
-	// supprimer les variables sans interet
681
-	if (test_espace_prive()) {
682
-		$url = preg_replace(',([?&])('
683
-			. 'lang|show_docs|'
684
-			. 'changer_lang|var_lang|action)=[^&]*,i', '\1', $url);
685
-		$url = preg_replace(',([?&])[&]+,', '\1', $url);
686
-		$url = preg_replace(',[&]$,', '\1', $url);
687
-	}
688
-
689
-	// eviter les hacks
690
-	include_spip('inc/filtres_mini');
691
-	$url = spip_htmlspecialchars($url);
662
+    $url = nettoyer_uri();
663
+    if (!$root
664
+        and (
665
+            // si pas de profondeur on peut tronquer
666
+            $GLOBALS['profondeur_url'] < (_DIR_RESTREINT ? 1 : 2)
667
+            // sinon c'est OK si _SET_HTML_BASE a ete force a false
668
+            or (defined('_SET_HTML_BASE') and !_SET_HTML_BASE))
669
+    ) {
670
+        $url = preg_replace(',^[^?]*/,', '', $url);
671
+    }
672
+    // ajouter le cas echeant les variables _POST['id_...']
673
+    foreach ($_POST as $v => $c) {
674
+        if (substr($v, 0, 3) == 'id_') {
675
+            $url = parametre_url($url, $v, $c, '&');
676
+        }
677
+    }
678
+
679
+    // supprimer les variables sans interet
680
+    if (test_espace_prive()) {
681
+        $url = preg_replace(',([?&])('
682
+            . 'lang|show_docs|'
683
+            . 'changer_lang|var_lang|action)=[^&]*,i', '\1', $url);
684
+        $url = preg_replace(',([?&])[&]+,', '\1', $url);
685
+        $url = preg_replace(',[&]$,', '\1', $url);
686
+    }
687
+
688
+    // eviter les hacks
689
+    include_spip('inc/filtres_mini');
690
+    $url = spip_htmlspecialchars($url);
692 691
 	
693
-	$url = str_replace(array("'", '"', '<', '[', ']', ':'), array('%27', '%22', '%3C', '%5B', '%5D', '%3A'), $url);
692
+    $url = str_replace(array("'", '"', '<', '[', ']', ':'), array('%27', '%22', '%3C', '%5B', '%5D', '%3A'), $url);
694 693
 
695
-	// &amp; ?
696
-	if ($amp != '&amp;') {
697
-		$url = str_replace('&amp;', $amp, $url);
698
-	}
694
+    // &amp; ?
695
+    if ($amp != '&amp;') {
696
+        $url = str_replace('&amp;', $amp, $url);
697
+    }
699 698
 
700
-	// Si ca demarre par ? ou vide, donner './'
701
-	$url = preg_replace(',^([?].*)?$,', './\1', $url);
699
+    // Si ca demarre par ? ou vide, donner './'
700
+    $url = preg_replace(',^([?].*)?$,', './\1', $url);
702 701
 
703
-	return $url;
702
+    return $url;
704 703
 }
705 704
 
706 705
 
@@ -711,7 +710,7 @@  discard block
 block discarded – undo
711 710
  *     true si c'est le cas, false sinon.
712 711
  */
713 712
 function test_espace_prive() {
714
-	return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false;
713
+    return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false;
715 714
 }
716 715
 
717 716
 /**
@@ -721,7 +720,7 @@  discard block
 block discarded – undo
721 720
  * @return bool
722 721
  */
723 722
 function test_plugin_actif($plugin) {
724
-	return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false;
723
+    return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false;
725 724
 }
726 725
 
727 726
 /**
@@ -752,51 +751,51 @@  discard block
 block discarded – undo
752 751
  *     Texte
753 752
  */
754 753
 function _T($texte, $args = array(), $options = array()) {
755
-	static $traduire = false;
756
-	$o = array('class' => '', 'force' => true, 'sanitize' => true);
757
-	if ($options) {
758
-		// support de l'ancien argument $class
759
-		if (is_string($options)) {
760
-			$options = array('class' => $options);
761
-		}
762
-		$o = array_merge($o, $options);
763
-	}
754
+    static $traduire = false;
755
+    $o = array('class' => '', 'force' => true, 'sanitize' => true);
756
+    if ($options) {
757
+        // support de l'ancien argument $class
758
+        if (is_string($options)) {
759
+            $options = array('class' => $options);
760
+        }
761
+        $o = array_merge($o, $options);
762
+    }
764 763
 
765
-	if (!$traduire) {
766
-		$traduire = charger_fonction('traduire', 'inc');
767
-		include_spip('inc/lang');
768
-	}
764
+    if (!$traduire) {
765
+        $traduire = charger_fonction('traduire', 'inc');
766
+        include_spip('inc/lang');
767
+    }
769 768
 
770
-	// On peut passer explicitement la langue dans le tableau
771
-	// On utilise le même nom de variable que la globale
772
-	if (isset($args['spip_lang'])) {
773
-		$lang = $args['spip_lang'];
774
-		// On l'enleve pour ne pas le passer au remplacement
775
-		unset($args['spip_lang']);
776
-	} // Sinon on prend la langue du contexte
777
-	else {
778
-		$lang = $GLOBALS['spip_lang'];
779
-	}
780
-	$text = $traduire($texte, $lang);
769
+    // On peut passer explicitement la langue dans le tableau
770
+    // On utilise le même nom de variable que la globale
771
+    if (isset($args['spip_lang'])) {
772
+        $lang = $args['spip_lang'];
773
+        // On l'enleve pour ne pas le passer au remplacement
774
+        unset($args['spip_lang']);
775
+    } // Sinon on prend la langue du contexte
776
+    else {
777
+        $lang = $GLOBALS['spip_lang'];
778
+    }
779
+    $text = $traduire($texte, $lang);
781 780
 
782
-	if (!strlen($text)) {
783
-		if (!$o['force']) {
784
-			return '';
785
-		}
781
+    if (!strlen($text)) {
782
+        if (!$o['force']) {
783
+            return '';
784
+        }
786 785
 
787
-		$text = $texte;
786
+        $text = $texte;
788 787
 
789
-		// pour les chaines non traduites, assurer un service minimum
790
-		if (!$GLOBALS['test_i18n'] and (_request('var_mode') != 'traduction')) {
791
-			$text = str_replace('_', ' ',
792
-				(($n = strpos($text, ':')) === false ? $texte :
793
-					substr($texte, $n + 1)));
794
-		}
795
-		$o['class'] = null;
788
+        // pour les chaines non traduites, assurer un service minimum
789
+        if (!$GLOBALS['test_i18n'] and (_request('var_mode') != 'traduction')) {
790
+            $text = str_replace('_', ' ',
791
+                (($n = strpos($text, ':')) === false ? $texte :
792
+                    substr($texte, $n + 1)));
793
+        }
794
+        $o['class'] = null;
796 795
 
797
-	}
796
+    }
798 797
 
799
-	return _L($text, $args, $o);
798
+    return _L($text, $args, $o);
800 799
 
801 800
 }
802 801
 
@@ -824,54 +823,54 @@  discard block
 block discarded – undo
824 823
  *     Texte
825 824
  */
826 825
 function _L($text, $args = array(), $options = array()) {
827
-	$f = $text;
828
-	$defaut_options = array(
829
-		'class' => null,
830
-		'sanitize' => true,
831
-	);
832
-	// support de l'ancien argument $class
833
-	if ($options and is_string($options)) {
834
-		$options = array('class' => $options);
835
-	}
836
-	if (is_array($options)) {
837
-		$options += $defaut_options;
838
-	} else {
839
-		$options = $defaut_options;
840
-	}
841
-
842
-	if (is_array($args)) {
843
-		if (!function_exists('interdire_scripts')) {
844
-			include_spip('inc/texte');
845
-		}
846
-		if (!function_exists('echapper_html_suspect')) {
847
-			include_spip('inc/texte_mini');
848
-		}
849
-		foreach ($args as $name => $value) {
850
-			if ($options['sanitize']) {
851
-				$value = echapper_html_suspect($value);
852
-				$value = interdire_scripts($value, -1);
853
-			}
854
-			if (!empty($options['class'])) {
855
-				$value = "<span class='".$options['class']."'>$value</span>";
856
-			}
857
-			$t = str_replace("@$name@", $value, $text);
858
-			if ($text !== $t) {
859
-				unset($args[$name]);
860
-				$text = $t;
861
-			}
862
-		}
863
-		// Si des variables n'ont pas ete inserees, le signaler
864
-		// (chaines de langues pas a jour)
865
-		if ($args) {
866
-			spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG);
867
-		}
868
-	}
869
-
870
-	if (($GLOBALS['test_i18n'] or (_request('var_mode') == 'traduction')) and is_null($options['class'])) {
871
-		return "<span class=debug-traduction-erreur>$text</span>";
872
-	} else {
873
-		return $text;
874
-	}
826
+    $f = $text;
827
+    $defaut_options = array(
828
+        'class' => null,
829
+        'sanitize' => true,
830
+    );
831
+    // support de l'ancien argument $class
832
+    if ($options and is_string($options)) {
833
+        $options = array('class' => $options);
834
+    }
835
+    if (is_array($options)) {
836
+        $options += $defaut_options;
837
+    } else {
838
+        $options = $defaut_options;
839
+    }
840
+
841
+    if (is_array($args)) {
842
+        if (!function_exists('interdire_scripts')) {
843
+            include_spip('inc/texte');
844
+        }
845
+        if (!function_exists('echapper_html_suspect')) {
846
+            include_spip('inc/texte_mini');
847
+        }
848
+        foreach ($args as $name => $value) {
849
+            if ($options['sanitize']) {
850
+                $value = echapper_html_suspect($value);
851
+                $value = interdire_scripts($value, -1);
852
+            }
853
+            if (!empty($options['class'])) {
854
+                $value = "<span class='".$options['class']."'>$value</span>";
855
+            }
856
+            $t = str_replace("@$name@", $value, $text);
857
+            if ($text !== $t) {
858
+                unset($args[$name]);
859
+                $text = $t;
860
+            }
861
+        }
862
+        // Si des variables n'ont pas ete inserees, le signaler
863
+        // (chaines de langues pas a jour)
864
+        if ($args) {
865
+            spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG);
866
+        }
867
+    }
868
+
869
+    if (($GLOBALS['test_i18n'] or (_request('var_mode') == 'traduction')) and is_null($options['class'])) {
870
+        return "<span class=debug-traduction-erreur>$text</span>";
871
+    } else {
872
+        return $text;
873
+    }
875 874
 }
876 875
 
877 876
 
@@ -885,13 +884,13 @@  discard block
 block discarded – undo
885 884
  * @return string
886 885
  */
887 886
 function joli_repertoire($rep) {
888
-	$a = substr($rep, 0, 1);
889
-	if ($a <> '.' and $a <> '/') {
890
-		$rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep;
891
-	}
892
-	$rep = preg_replace(',(^\.\.\/),', '', $rep);
887
+    $a = substr($rep, 0, 1);
888
+    if ($a <> '.' and $a <> '/') {
889
+        $rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep;
890
+    }
891
+    $rep = preg_replace(',(^\.\.\/),', '', $rep);
893 892
 
894
-	return $rep;
893
+    return $rep;
895 894
 }
896 895
 
897 896
 
@@ -916,33 +915,33 @@  discard block
 block discarded – undo
916 915
  * @return float|int|string|void
917 916
  */
918 917
 function spip_timer($t = 'rien', $raw = false) {
919
-	static $time;
920
-	$a = time();
921
-	$b = microtime();
922
-	// microtime peut contenir les microsecondes et le temps
923
-	$b = explode(' ', $b);
924
-	if (count($b) == 2) {
925
-		$a = end($b);
926
-	} // plus precis !
927
-	$b = reset($b);
928
-	if (!isset($time[$t])) {
929
-		$time[$t] = $a + $b;
930
-	} else {
931
-		$p = ($a + $b - $time[$t]) * 1000;
932
-		unset($time[$t]);
918
+    static $time;
919
+    $a = time();
920
+    $b = microtime();
921
+    // microtime peut contenir les microsecondes et le temps
922
+    $b = explode(' ', $b);
923
+    if (count($b) == 2) {
924
+        $a = end($b);
925
+    } // plus precis !
926
+    $b = reset($b);
927
+    if (!isset($time[$t])) {
928
+        $time[$t] = $a + $b;
929
+    } else {
930
+        $p = ($a + $b - $time[$t]) * 1000;
931
+        unset($time[$t]);
933 932
 #			echo "'$p'";exit;
934
-		if ($raw) {
935
-			return $p;
936
-		}
937
-		if ($p < 1000) {
938
-			$s = '';
939
-		} else {
940
-			$s = sprintf("%d ", $x = floor($p / 1000));
941
-			$p -= ($x * 1000);
942
-		}
933
+        if ($raw) {
934
+            return $p;
935
+        }
936
+        if ($p < 1000) {
937
+            $s = '';
938
+        } else {
939
+            $s = sprintf("%d ", $x = floor($p / 1000));
940
+            $p -= ($x * 1000);
941
+        }
943 942
 
944
-		return $s . sprintf($s ? "%07.3f ms" : "%.3f ms", $p);
945
-	}
943
+        return $s . sprintf($s ? "%07.3f ms" : "%.3f ms", $p);
944
+    }
946 945
 }
947 946
 
948 947
 
@@ -950,21 +949,21 @@  discard block
 block discarded – undo
950 949
 // sinon renvoie True et le date sauf si ca n'est pas souhaite
951 950
 // http://code.spip.net/@spip_touch
952 951
 function spip_touch($fichier, $duree = 0, $touch = true) {
953
-	if ($duree) {
954
-		clearstatcache();
955
-		if ((@$f = filemtime($fichier)) and ($f >= time() - $duree)) {
956
-			return false;
957
-		}
958
-	}
959
-	if ($touch !== false) {
960
-		if (!@touch($fichier)) {
961
-			spip_unlink($fichier);
962
-			@touch($fichier);
963
-		};
964
-		@chmod($fichier, _SPIP_CHMOD & ~0111);
965
-	}
952
+    if ($duree) {
953
+        clearstatcache();
954
+        if ((@$f = filemtime($fichier)) and ($f >= time() - $duree)) {
955
+            return false;
956
+        }
957
+    }
958
+    if ($touch !== false) {
959
+        if (!@touch($fichier)) {
960
+            spip_unlink($fichier);
961
+            @touch($fichier);
962
+        };
963
+        @chmod($fichier, _SPIP_CHMOD & ~0111);
964
+    }
966 965
 
967
-	return true;
966
+    return true;
968 967
 }
969 968
 
970 969
 
@@ -976,11 +975,11 @@  discard block
 block discarded – undo
976 975
  * @uses cron()
977 976
  **/
978 977
 function action_cron() {
979
-	include_spip('inc/headers');
980
-	http_status(204); // No Content
981
-	header("Connection: close");
982
-	define('_DIRECT_CRON_FORCE', true);
983
-	cron();
978
+    include_spip('inc/headers');
979
+    http_status(204); // No Content
980
+    header("Connection: close");
981
+    define('_DIRECT_CRON_FORCE', true);
982
+    cron();
984 983
 }
985 984
 
986 985
 /**
@@ -996,26 +995,26 @@  discard block
 block discarded – undo
996 995
  *     True si la tache a pu être effectuée
997 996
  */
998 997
 function cron($taches = array(), $taches_old = array()) {
999
-	// si pas en mode cron force, laisser tomber.
1000
-	if (!defined('_DIRECT_CRON_FORCE')) {
1001
-		return false;
1002
-	}
1003
-	if (!is_array($taches)) {
1004
-		$taches = $taches_old;
1005
-	} // compat anciens appels
1006
-	// si taches a inserer en base et base inaccessible, laisser tomber
1007
-	// sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
1008
-	// queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
1009
-	// et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
1010
-	if ($taches and count($taches) and !spip_connect()) {
1011
-		return false;
1012
-	}
1013
-	spip_log("cron !", 'jq' . _LOG_DEBUG);
1014
-	if ($genie = charger_fonction('genie', 'inc', true)) {
1015
-		return $genie($taches);
1016
-	}
1017
-
1018
-	return false;
998
+    // si pas en mode cron force, laisser tomber.
999
+    if (!defined('_DIRECT_CRON_FORCE')) {
1000
+        return false;
1001
+    }
1002
+    if (!is_array($taches)) {
1003
+        $taches = $taches_old;
1004
+    } // compat anciens appels
1005
+    // si taches a inserer en base et base inaccessible, laisser tomber
1006
+    // sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
1007
+    // queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
1008
+    // et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
1009
+    if ($taches and count($taches) and !spip_connect()) {
1010
+        return false;
1011
+    }
1012
+    spip_log("cron !", 'jq' . _LOG_DEBUG);
1013
+    if ($genie = charger_fonction('genie', 'inc', true)) {
1014
+        return $genie($taches);
1015
+    }
1016
+
1017
+    return false;
1019 1018
 }
1020 1019
 
1021 1020
 /**
@@ -1047,17 +1046,17 @@  discard block
 block discarded – undo
1047 1046
  *     Le numéro de travail ajouté ou `0` si aucun travail n’a été ajouté.
1048 1047
  */
1049 1048
 function job_queue_add(
1050
-	$function,
1051
-	$description,
1052
-	$arguments = array(),
1053
-	$file = '',
1054
-	$no_duplicate = false,
1055
-	$time = 0,
1056
-	$priority = 0
1049
+    $function,
1050
+    $description,
1051
+    $arguments = array(),
1052
+    $file = '',
1053
+    $no_duplicate = false,
1054
+    $time = 0,
1055
+    $priority = 0
1057 1056
 ) {
1058
-	include_spip('inc/queue');
1057
+    include_spip('inc/queue');
1059 1058
 
1060
-	return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority);
1059
+    return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority);
1061 1060
 }
1062 1061
 
1063 1062
 /**
@@ -1068,9 +1067,9 @@  discard block
 block discarded – undo
1068 1067
  * @return bool
1069 1068
  */
1070 1069
 function job_queue_remove($id_job) {
1071
-	include_spip('inc/queue');
1070
+    include_spip('inc/queue');
1072 1071
 
1073
-	return queue_remove_job($id_job);
1072
+    return queue_remove_job($id_job);
1074 1073
 }
1075 1074
 
1076 1075
 /**
@@ -1083,9 +1082,9 @@  discard block
 block discarded – undo
1083 1082
  *     or an array of simple array to link multiples objet in one time
1084 1083
  */
1085 1084
 function job_queue_link($id_job, $objets) {
1086
-	include_spip('inc/queue');
1085
+    include_spip('inc/queue');
1087 1086
 
1088
-	return queue_link_job($id_job, $objets);
1087
+    return queue_link_job($id_job, $objets);
1089 1088
 }
1090 1089
 
1091 1090
 
@@ -1105,36 +1104,36 @@  discard block
 block discarded – undo
1105 1104
  *  - `null` si la queue n'est pas encore initialisée
1106 1105
  */
1107 1106
 function queue_sleep_time_to_next_job($force = null) {
1108
-	static $queue_next_job_time = -1;
1109
-	if ($force === true) {
1110
-		$queue_next_job_time = -1;
1111
-	} elseif ($force) {
1112
-		$queue_next_job_time = $force;
1113
-	}
1114
-
1115
-	if ($queue_next_job_time == -1) {
1116
-		if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) {
1117
-			define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . "job_queue_next.txt");
1118
-		}
1119
-		// utiliser un cache memoire si dispo
1120
-		if (function_exists("cache_get") and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
1121
-			$queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME);
1122
-		} else {
1123
-			$queue_next_job_time = null;
1124
-			if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu)) {
1125
-				$queue_next_job_time = intval($contenu);
1126
-			}
1127
-		}
1128
-	}
1129
-
1130
-	if (is_null($queue_next_job_time)) {
1131
-		return null;
1132
-	}
1133
-	if (!$_SERVER['REQUEST_TIME']) {
1134
-		$_SERVER['REQUEST_TIME'] = time();
1135
-	}
1136
-
1137
-	return $queue_next_job_time - $_SERVER['REQUEST_TIME'];
1107
+    static $queue_next_job_time = -1;
1108
+    if ($force === true) {
1109
+        $queue_next_job_time = -1;
1110
+    } elseif ($force) {
1111
+        $queue_next_job_time = $force;
1112
+    }
1113
+
1114
+    if ($queue_next_job_time == -1) {
1115
+        if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) {
1116
+            define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . "job_queue_next.txt");
1117
+        }
1118
+        // utiliser un cache memoire si dispo
1119
+        if (function_exists("cache_get") and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
1120
+            $queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME);
1121
+        } else {
1122
+            $queue_next_job_time = null;
1123
+            if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu)) {
1124
+                $queue_next_job_time = intval($contenu);
1125
+            }
1126
+        }
1127
+    }
1128
+
1129
+    if (is_null($queue_next_job_time)) {
1130
+        return null;
1131
+    }
1132
+    if (!$_SERVER['REQUEST_TIME']) {
1133
+        $_SERVER['REQUEST_TIME'] = time();
1134
+    }
1135
+
1136
+    return $queue_next_job_time - $_SERVER['REQUEST_TIME'];
1138 1137
 }
1139 1138
 
1140 1139
 
@@ -1146,9 +1145,9 @@  discard block
 block discarded – undo
1146 1145
  * @return string
1147 1146
  */
1148 1147
 function quote_amp($u) {
1149
-	return preg_replace(
1150
-		"/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,6};)/i",
1151
-		"&amp;", $u);
1148
+    return preg_replace(
1149
+        "/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,6};)/i",
1150
+        "&amp;", $u);
1152 1151
 }
1153 1152
 
1154 1153
 
@@ -1171,27 +1170,27 @@  discard block
 block discarded – undo
1171 1170
  *     Balise HTML `<script>` et son contenu
1172 1171
  **/
1173 1172
 function http_script($script, $src = '', $noscript = '') {
1174
-	static $done = array();
1173
+    static $done = array();
1175 1174
 
1176
-	if ($src && !isset($done[$src])) {
1177
-		$done[$src] = true;
1178
-		$src = find_in_path($src, _JAVASCRIPT);
1179
-		$src = " src='$src'";
1180
-	} else {
1181
-		$src = '';
1182
-	}
1183
-	if ($script) {
1184
-		$script = ("/*<![CDATA[*/\n" .
1185
-			preg_replace(',</([^>]*)>,', '<\/\1>', $script) .
1186
-			"/*]]>*/");
1187
-	}
1188
-	if ($noscript) {
1189
-		$noscript = "<noscript>\n\t$noscript\n</noscript>\n";
1190
-	}
1175
+    if ($src && !isset($done[$src])) {
1176
+        $done[$src] = true;
1177
+        $src = find_in_path($src, _JAVASCRIPT);
1178
+        $src = " src='$src'";
1179
+    } else {
1180
+        $src = '';
1181
+    }
1182
+    if ($script) {
1183
+        $script = ("/*<![CDATA[*/\n" .
1184
+            preg_replace(',</([^>]*)>,', '<\/\1>', $script) .
1185
+            "/*]]>*/");
1186
+    }
1187
+    if ($noscript) {
1188
+        $noscript = "<noscript>\n\t$noscript\n</noscript>\n";
1189
+    }
1191 1190
 
1192
-	return ($src or $script or $noscript)
1193
-		? "<script type='text/javascript'$src>$script</script>$noscript"
1194
-		: '';
1191
+    return ($src or $script or $noscript)
1192
+        ? "<script type='text/javascript'$src>$script</script>$noscript"
1193
+        : '';
1195 1194
 }
1196 1195
 
1197 1196
 
@@ -1226,7 +1225,7 @@  discard block
 block discarded – undo
1226 1225
  *     Texte échappé
1227 1226
  **/
1228 1227
 function texte_script($texte) {
1229
-	return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte));
1228
+    return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte));
1230 1229
 }
1231 1230
 
1232 1231
 
@@ -1263,69 +1262,69 @@  discard block
 block discarded – undo
1263 1262
  *     Liste des chemins, par ordre de priorité.
1264 1263
  **/
1265 1264
 function _chemin($dir_path = null) {
1266
-	static $path_base = null;
1267
-	static $path_full = null;
1268
-	if ($path_base == null) {
1269
-		// Chemin standard depuis l'espace public
1270
-		$path = defined('_SPIP_PATH') ? _SPIP_PATH :
1271
-			_DIR_RACINE . ':' .
1272
-			_DIR_RACINE . 'squelettes-dist/:' .
1273
-			_DIR_RACINE . 'prive/:' .
1274
-			_DIR_RESTREINT;
1275
-		// Ajouter squelettes/
1276
-		if (@is_dir(_DIR_RACINE . 'squelettes')) {
1277
-			$path = _DIR_RACINE . 'squelettes/:' . $path;
1278
-		}
1279
-		foreach (explode(':', $path) as $dir) {
1280
-			if (strlen($dir) and substr($dir, -1) != '/') {
1281
-				$dir .= "/";
1282
-			}
1283
-			$path_base[] = $dir;
1284
-		}
1285
-		$path_full = $path_base;
1286
-		// Et le(s) dossier(s) des squelettes nommes
1287
-		if (strlen($GLOBALS['dossier_squelettes'])) {
1288
-			foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1289
-				array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
1290
-			}
1291
-		}
1292
-		$GLOBALS['path_sig'] = md5(serialize($path_full));
1293
-	}
1294
-	if ($dir_path === null) {
1295
-		return $path_full;
1296
-	}
1297
-
1298
-	if (strlen($dir_path)) {
1299
-		$tete = "";
1300
-		if (reset($path_base) == _DIR_RACINE . 'squelettes/') {
1301
-			$tete = array_shift($path_base);
1302
-		}
1303
-		$dirs = array_reverse(explode(':', $dir_path));
1304
-		foreach ($dirs as $dir_path) {
1305
-			#if ($dir_path{0}!='/')
1306
-			#	$dir_path = $dir_path;
1307
-			if (substr($dir_path, -1) != '/') {
1308
-				$dir_path .= "/";
1309
-			}
1310
-			if (!in_array($dir_path, $path_base)) {
1311
-				array_unshift($path_base, $dir_path);
1312
-			}
1313
-		}
1314
-		if (strlen($tete)) {
1315
-			array_unshift($path_base, $tete);
1316
-		}
1317
-	}
1318
-	$path_full = $path_base;
1319
-	// Et le(s) dossier(s) des squelettes nommes
1320
-	if (strlen($GLOBALS['dossier_squelettes'])) {
1321
-		foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1322
-			array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/');
1323
-		}
1324
-	}
1325
-
1326
-	$GLOBALS['path_sig'] = md5(serialize($path_full));
1327
-
1328
-	return $path_full;
1265
+    static $path_base = null;
1266
+    static $path_full = null;
1267
+    if ($path_base == null) {
1268
+        // Chemin standard depuis l'espace public
1269
+        $path = defined('_SPIP_PATH') ? _SPIP_PATH :
1270
+            _DIR_RACINE . ':' .
1271
+            _DIR_RACINE . 'squelettes-dist/:' .
1272
+            _DIR_RACINE . 'prive/:' .
1273
+            _DIR_RESTREINT;
1274
+        // Ajouter squelettes/
1275
+        if (@is_dir(_DIR_RACINE . 'squelettes')) {
1276
+            $path = _DIR_RACINE . 'squelettes/:' . $path;
1277
+        }
1278
+        foreach (explode(':', $path) as $dir) {
1279
+            if (strlen($dir) and substr($dir, -1) != '/') {
1280
+                $dir .= "/";
1281
+            }
1282
+            $path_base[] = $dir;
1283
+        }
1284
+        $path_full = $path_base;
1285
+        // Et le(s) dossier(s) des squelettes nommes
1286
+        if (strlen($GLOBALS['dossier_squelettes'])) {
1287
+            foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1288
+                array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
1289
+            }
1290
+        }
1291
+        $GLOBALS['path_sig'] = md5(serialize($path_full));
1292
+    }
1293
+    if ($dir_path === null) {
1294
+        return $path_full;
1295
+    }
1296
+
1297
+    if (strlen($dir_path)) {
1298
+        $tete = "";
1299
+        if (reset($path_base) == _DIR_RACINE . 'squelettes/') {
1300
+            $tete = array_shift($path_base);
1301
+        }
1302
+        $dirs = array_reverse(explode(':', $dir_path));
1303
+        foreach ($dirs as $dir_path) {
1304
+            #if ($dir_path{0}!='/')
1305
+            #	$dir_path = $dir_path;
1306
+            if (substr($dir_path, -1) != '/') {
1307
+                $dir_path .= "/";
1308
+            }
1309
+            if (!in_array($dir_path, $path_base)) {
1310
+                array_unshift($path_base, $dir_path);
1311
+            }
1312
+        }
1313
+        if (strlen($tete)) {
1314
+            array_unshift($path_base, $tete);
1315
+        }
1316
+    }
1317
+    $path_full = $path_base;
1318
+    // Et le(s) dossier(s) des squelettes nommes
1319
+    if (strlen($GLOBALS['dossier_squelettes'])) {
1320
+        foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1321
+            array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/');
1322
+        }
1323
+    }
1324
+
1325
+    $GLOBALS['path_sig'] = md5(serialize($path_full));
1326
+
1327
+    return $path_full;
1329 1328
 }
1330 1329
 
1331 1330
 /**
@@ -1338,63 +1337,63 @@  discard block
 block discarded – undo
1338 1337
  * @return array Liste de chemins
1339 1338
  **/
1340 1339
 function creer_chemin() {
1341
-	$path_a = _chemin();
1342
-	static $c = '';
1340
+    $path_a = _chemin();
1341
+    static $c = '';
1343 1342
 
1344
-	// on calcule le chemin si le dossier skel a change
1345
-	if ($c != $GLOBALS['dossier_squelettes']) {
1346
-		// assurer le non plantage lors de la montee de version :
1347
-		$c = $GLOBALS['dossier_squelettes'];
1348
-		$path_a = _chemin(''); // forcer un recalcul du chemin
1349
-	}
1343
+    // on calcule le chemin si le dossier skel a change
1344
+    if ($c != $GLOBALS['dossier_squelettes']) {
1345
+        // assurer le non plantage lors de la montee de version :
1346
+        $c = $GLOBALS['dossier_squelettes'];
1347
+        $path_a = _chemin(''); // forcer un recalcul du chemin
1348
+    }
1350 1349
 
1351
-	return $path_a;
1350
+    return $path_a;
1352 1351
 }
1353 1352
 
1354 1353
 
1355 1354
 function lister_themes_prives() {
1356
-	static $themes = null;
1357
-	if (is_null($themes)) {
1358
-		// si pas encore definie
1359
-		if (!defined('_SPIP_THEME_PRIVE')) {
1360
-			define('_SPIP_THEME_PRIVE', 'spip');
1361
-		}
1362
-		$themes = array(_SPIP_THEME_PRIVE);
1363
-		// lors d'une installation neuve, prefs n'est pas definie.
1364
-		if (isset($GLOBALS['visiteur_session']['prefs'])) {
1365
-			$prefs = $GLOBALS['visiteur_session']['prefs'];
1366
-		} else {
1367
-			$prefs = array();
1368
-		}
1369
-		if (is_string($prefs)) {
1370
-			$prefs = unserialize($GLOBALS['visiteur_session']['prefs']);
1371
-		}
1372
-		if (
1373
-			((isset($prefs['theme']) and $theme = $prefs['theme'])
1374
-				or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut']))
1375
-			and $theme != _SPIP_THEME_PRIVE
1376
-		) {
1377
-			array_unshift($themes, $theme);
1378
-		} // placer le theme choisi en tete
1379
-	}
1380
-
1381
-	return $themes;
1355
+    static $themes = null;
1356
+    if (is_null($themes)) {
1357
+        // si pas encore definie
1358
+        if (!defined('_SPIP_THEME_PRIVE')) {
1359
+            define('_SPIP_THEME_PRIVE', 'spip');
1360
+        }
1361
+        $themes = array(_SPIP_THEME_PRIVE);
1362
+        // lors d'une installation neuve, prefs n'est pas definie.
1363
+        if (isset($GLOBALS['visiteur_session']['prefs'])) {
1364
+            $prefs = $GLOBALS['visiteur_session']['prefs'];
1365
+        } else {
1366
+            $prefs = array();
1367
+        }
1368
+        if (is_string($prefs)) {
1369
+            $prefs = unserialize($GLOBALS['visiteur_session']['prefs']);
1370
+        }
1371
+        if (
1372
+            ((isset($prefs['theme']) and $theme = $prefs['theme'])
1373
+                or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut']))
1374
+            and $theme != _SPIP_THEME_PRIVE
1375
+        ) {
1376
+            array_unshift($themes, $theme);
1377
+        } // placer le theme choisi en tete
1378
+    }
1379
+
1380
+    return $themes;
1382 1381
 }
1383 1382
 
1384 1383
 function find_in_theme($file, $subdir = '', $include = false) {
1385
-	static $themefiles = array();
1386
-	if (isset($themefiles["$subdir$file"])) {
1387
-		return $themefiles["$subdir$file"];
1388
-	}
1389
-	$themes = lister_themes_prives();
1390
-	foreach ($themes as $theme) {
1391
-		if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) {
1392
-			return $themefiles["$subdir$file"] = $f;
1393
-		}
1394
-	}
1395
-	spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme');
1384
+    static $themefiles = array();
1385
+    if (isset($themefiles["$subdir$file"])) {
1386
+        return $themefiles["$subdir$file"];
1387
+    }
1388
+    $themes = lister_themes_prives();
1389
+    foreach ($themes as $theme) {
1390
+        if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) {
1391
+            return $themefiles["$subdir$file"] = $f;
1392
+        }
1393
+    }
1394
+    spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme');
1396 1395
 
1397
-	return $themefiles["$subdir$file"] = "";
1396
+    return $themefiles["$subdir$file"] = "";
1398 1397
 }
1399 1398
 
1400 1399
 
@@ -1418,28 +1417,28 @@  discard block
 block discarded – undo
1418 1417
  *     sinon chaîne vide.
1419 1418
  **/
1420 1419
 function chemin_image($icone) {
1421
-	static $icone_renommer;
1422
-	// gerer le cas d'un double appel en evitant de refaire le travail inutilement
1423
-	if (strpos($icone, "/") !== false and file_exists($icone)) {
1424
-		return $icone;
1425
-	}
1426
-
1427
-	// si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct
1428
-	if (preg_match(',[.](png|gif|jpg)$,', $icone) and $f = find_in_theme("images/$icone")) {
1429
-		return $f;
1430
-	}
1431
-	// sinon passer par le module de renommage
1432
-	if (is_null($icone_renommer)) {
1433
-		$icone_renommer = charger_fonction('icone_renommer', 'inc', true);
1434
-	}
1435
-	if ($icone_renommer) {
1436
-		list($icone, $fonction) = $icone_renommer($icone, "");
1437
-		if (file_exists($icone)) {
1438
-			return $icone;
1439
-		}
1440
-	}
1441
-
1442
-	return find_in_path($icone, _NOM_IMG_PACK);
1420
+    static $icone_renommer;
1421
+    // gerer le cas d'un double appel en evitant de refaire le travail inutilement
1422
+    if (strpos($icone, "/") !== false and file_exists($icone)) {
1423
+        return $icone;
1424
+    }
1425
+
1426
+    // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct
1427
+    if (preg_match(',[.](png|gif|jpg)$,', $icone) and $f = find_in_theme("images/$icone")) {
1428
+        return $f;
1429
+    }
1430
+    // sinon passer par le module de renommage
1431
+    if (is_null($icone_renommer)) {
1432
+        $icone_renommer = charger_fonction('icone_renommer', 'inc', true);
1433
+    }
1434
+    if ($icone_renommer) {
1435
+        list($icone, $fonction) = $icone_renommer($icone, "");
1436
+        if (file_exists($icone)) {
1437
+            return $icone;
1438
+        }
1439
+    }
1440
+
1441
+    return find_in_path($icone, _NOM_IMG_PACK);
1443 1442
 }
1444 1443
 
1445 1444
 //
@@ -1477,123 +1476,123 @@  discard block
 block discarded – undo
1477 1476
  *     - false : fichier introuvable
1478 1477
  **/
1479 1478
 function find_in_path($file, $dirname = '', $include = false) {
1480
-	static $dirs = array();
1481
-	static $inc = array(); # cf http://trac.rezo.net/trac/spip/changeset/14743
1482
-	static $c = '';
1483
-
1484
-	// on calcule le chemin si le dossier skel a change
1485
-	if ($c != $GLOBALS['dossier_squelettes']) {
1486
-		// assurer le non plantage lors de la montee de version :
1487
-		$c = $GLOBALS['dossier_squelettes'];
1488
-		creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig
1489
-	}
1490
-
1491
-	if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) {
1492
-		if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) {
1493
-			return false;
1494
-		}
1495
-		if ($include and !isset($inc[$dirname][$file])) {
1496
-			include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1497
-			$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1498
-		}
1499
-
1500
-		return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1501
-	}
1502
-
1503
-	$a = strrpos($file, '/');
1504
-	if ($a !== false) {
1505
-		$dirname .= substr($file, 0, ++$a);
1506
-		$file = substr($file, $a);
1507
-	}
1508
-
1509
-	foreach (creer_chemin() as $dir) {
1510
-		if (!isset($dirs[$a = $dir . $dirname])) {
1511
-			$dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a);
1512
-		}
1513
-		if ($dirs[$a]) {
1514
-			if (file_exists(_ROOT_CWD . ($a .= $file))) {
1515
-				if ($include and !isset($inc[$dirname][$file])) {
1516
-					include_once _ROOT_CWD . $a;
1517
-					$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1518
-				}
1519
-				if (!defined('_SAUVER_CHEMIN')) {
1520
-					// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1521
-					if (is_null($GLOBALS['path_files'])) {
1522
-						return $a;
1523
-					}
1524
-					define('_SAUVER_CHEMIN', true);
1525
-				}
1526
-
1527
-				return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
1528
-			}
1529
-		}
1530
-	}
1531
-
1532
-	if ($include) {
1533
-		spip_log("include_spip $dirname$file non trouve");
1534
-		if ($include === 'required') {
1535
-			echo '<pre>',
1536
-			"<strong>Erreur Fatale</strong><br />";
1537
-			if (function_exists('debug_print_backtrace')) {
1538
-				echo debug_print_backtrace();
1539
-			}
1540
-			echo '</pre>';
1541
-			die("Erreur interne: ne peut inclure $dirname$file");
1542
-		}
1543
-	}
1544
-
1545
-	if (!defined('_SAUVER_CHEMIN')) {
1546
-		// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1547
-		if (is_null($GLOBALS['path_files'])) {
1548
-			return false;
1549
-		}
1550
-		define('_SAUVER_CHEMIN', true);
1551
-	}
1552
-
1553
-	return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
1479
+    static $dirs = array();
1480
+    static $inc = array(); # cf http://trac.rezo.net/trac/spip/changeset/14743
1481
+    static $c = '';
1482
+
1483
+    // on calcule le chemin si le dossier skel a change
1484
+    if ($c != $GLOBALS['dossier_squelettes']) {
1485
+        // assurer le non plantage lors de la montee de version :
1486
+        $c = $GLOBALS['dossier_squelettes'];
1487
+        creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig
1488
+    }
1489
+
1490
+    if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) {
1491
+        if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) {
1492
+            return false;
1493
+        }
1494
+        if ($include and !isset($inc[$dirname][$file])) {
1495
+            include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1496
+            $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1497
+        }
1498
+
1499
+        return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1500
+    }
1501
+
1502
+    $a = strrpos($file, '/');
1503
+    if ($a !== false) {
1504
+        $dirname .= substr($file, 0, ++$a);
1505
+        $file = substr($file, $a);
1506
+    }
1507
+
1508
+    foreach (creer_chemin() as $dir) {
1509
+        if (!isset($dirs[$a = $dir . $dirname])) {
1510
+            $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a);
1511
+        }
1512
+        if ($dirs[$a]) {
1513
+            if (file_exists(_ROOT_CWD . ($a .= $file))) {
1514
+                if ($include and !isset($inc[$dirname][$file])) {
1515
+                    include_once _ROOT_CWD . $a;
1516
+                    $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1517
+                }
1518
+                if (!defined('_SAUVER_CHEMIN')) {
1519
+                    // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1520
+                    if (is_null($GLOBALS['path_files'])) {
1521
+                        return $a;
1522
+                    }
1523
+                    define('_SAUVER_CHEMIN', true);
1524
+                }
1525
+
1526
+                return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
1527
+            }
1528
+        }
1529
+    }
1530
+
1531
+    if ($include) {
1532
+        spip_log("include_spip $dirname$file non trouve");
1533
+        if ($include === 'required') {
1534
+            echo '<pre>',
1535
+            "<strong>Erreur Fatale</strong><br />";
1536
+            if (function_exists('debug_print_backtrace')) {
1537
+                echo debug_print_backtrace();
1538
+            }
1539
+            echo '</pre>';
1540
+            die("Erreur interne: ne peut inclure $dirname$file");
1541
+        }
1542
+    }
1543
+
1544
+    if (!defined('_SAUVER_CHEMIN')) {
1545
+        // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1546
+        if (is_null($GLOBALS['path_files'])) {
1547
+            return false;
1548
+        }
1549
+        define('_SAUVER_CHEMIN', true);
1550
+    }
1551
+
1552
+    return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
1554 1553
 }
1555 1554
 
1556 1555
 function clear_path_cache() {
1557
-	$GLOBALS['path_files'] = array();
1558
-	spip_unlink(_CACHE_CHEMIN);
1556
+    $GLOBALS['path_files'] = array();
1557
+    spip_unlink(_CACHE_CHEMIN);
1559 1558
 }
1560 1559
 
1561 1560
 function load_path_cache() {
1562
-	// charger le path des plugins
1563
-	if (@is_readable(_CACHE_PLUGINS_PATH)) {
1564
-		include_once(_CACHE_PLUGINS_PATH);
1565
-	}
1566
-	$GLOBALS['path_files'] = array();
1567
-	// si le visiteur est admin,
1568
-	// on ne recharge pas le cache pour forcer sa mise a jour
1569
-	if (
1570
-		// la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier
1571
-		//AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
1572
-		// utiliser le cookie est un pis aller qui marche 'en general'
1573
-		// on blinde par un second test au moment de la lecture de la session
1574
-		// !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
1575
-		// et en ignorant ce cache en cas de recalcul explicite
1576
-	!_request('var_mode')
1577
-	) {
1578
-		// on essaye de lire directement sans verrou pour aller plus vite
1579
-		if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) {
1580
-			// mais si semble corrompu on relit avec un verrou
1581
-			if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1582
-				lire_fichier(_CACHE_CHEMIN, $contenu);
1583
-				if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1584
-					$GLOBALS['path_files'] = array();
1585
-				}
1586
-			}
1587
-		}
1588
-	}
1561
+    // charger le path des plugins
1562
+    if (@is_readable(_CACHE_PLUGINS_PATH)) {
1563
+        include_once(_CACHE_PLUGINS_PATH);
1564
+    }
1565
+    $GLOBALS['path_files'] = array();
1566
+    // si le visiteur est admin,
1567
+    // on ne recharge pas le cache pour forcer sa mise a jour
1568
+    if (
1569
+        // la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier
1570
+        //AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
1571
+        // utiliser le cookie est un pis aller qui marche 'en general'
1572
+        // on blinde par un second test au moment de la lecture de la session
1573
+        // !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
1574
+        // et en ignorant ce cache en cas de recalcul explicite
1575
+    !_request('var_mode')
1576
+    ) {
1577
+        // on essaye de lire directement sans verrou pour aller plus vite
1578
+        if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) {
1579
+            // mais si semble corrompu on relit avec un verrou
1580
+            if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1581
+                lire_fichier(_CACHE_CHEMIN, $contenu);
1582
+                if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1583
+                    $GLOBALS['path_files'] = array();
1584
+                }
1585
+            }
1586
+        }
1587
+    }
1589 1588
 }
1590 1589
 
1591 1590
 function save_path_cache() {
1592
-	if (defined('_SAUVER_CHEMIN')
1593
-		and _SAUVER_CHEMIN
1594
-	) {
1595
-		ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files']));
1596
-	}
1591
+    if (defined('_SAUVER_CHEMIN')
1592
+        and _SAUVER_CHEMIN
1593
+    ) {
1594
+        ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files']));
1595
+    }
1597 1596
 }
1598 1597
 
1599 1598
 
@@ -1613,33 +1612,33 @@  discard block
 block discarded – undo
1613 1612
  * @return array
1614 1613
  */
1615 1614
 function find_all_in_path($dir, $pattern, $recurs = false) {
1616
-	$liste_fichiers = array();
1617
-	$maxfiles = 10000;
1618
-
1619
-	// cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue
1620
-	// on a pas encore inclus flock.php
1621
-	if (!function_exists('preg_files')) {
1622
-		include_once _ROOT_RESTREINT . 'inc/flock.php';
1623
-	}
1624
-
1625
-	// Parcourir le chemin
1626
-	foreach (creer_chemin() as $d) {
1627
-		$f = $d . $dir;
1628
-		if (@is_dir($f)) {
1629
-			$liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? array() : $recurs);
1630
-			foreach ($liste as $chemin) {
1631
-				$nom = basename($chemin);
1632
-				// ne prendre que les fichiers pas deja trouves
1633
-				// car find_in_path prend le premier qu'il trouve,
1634
-				// les autres sont donc masques
1635
-				if (!isset($liste_fichiers[$nom])) {
1636
-					$liste_fichiers[$nom] = $chemin;
1637
-				}
1638
-			}
1639
-		}
1640
-	}
1641
-
1642
-	return $liste_fichiers;
1615
+    $liste_fichiers = array();
1616
+    $maxfiles = 10000;
1617
+
1618
+    // cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue
1619
+    // on a pas encore inclus flock.php
1620
+    if (!function_exists('preg_files')) {
1621
+        include_once _ROOT_RESTREINT . 'inc/flock.php';
1622
+    }
1623
+
1624
+    // Parcourir le chemin
1625
+    foreach (creer_chemin() as $d) {
1626
+        $f = $d . $dir;
1627
+        if (@is_dir($f)) {
1628
+            $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? array() : $recurs);
1629
+            foreach ($liste as $chemin) {
1630
+                $nom = basename($chemin);
1631
+                // ne prendre que les fichiers pas deja trouves
1632
+                // car find_in_path prend le premier qu'il trouve,
1633
+                // les autres sont donc masques
1634
+                if (!isset($liste_fichiers[$nom])) {
1635
+                    $liste_fichiers[$nom] = $chemin;
1636
+                }
1637
+            }
1638
+        }
1639
+    }
1640
+
1641
+    return $liste_fichiers;
1643 1642
 }
1644 1643
 
1645 1644
 /**
@@ -1648,10 +1647,10 @@  discard block
 block discarded – undo
1648 1647
  * @return bool
1649 1648
  */
1650 1649
 function autoriser_sans_cookie($nom) {
1651
-	static $autsanscookie = array('install', 'base_repair');
1652
-	$nom = preg_replace('/.php[3]?$/', '', basename($nom));
1650
+    static $autsanscookie = array('install', 'base_repair');
1651
+    $nom = preg_replace('/.php[3]?$/', '', basename($nom));
1653 1652
 
1654
-	return in_array($nom, $autsanscookie);
1653
+    return in_array($nom, $autsanscookie);
1655 1654
 }
1656 1655
 
1657 1656
 /**
@@ -1677,99 +1676,99 @@  discard block
 block discarded – undo
1677 1676
  *           (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_url_spip et une fonction generer_url_ecrire_spip)
1678 1677
  */
1679 1678
 function generer_url_entite($id = '', $entite = '', $args = '', $ancre = '', $public = null, $type = null) {
1680
-	if ($public === null) {
1681
-		$public = !test_espace_prive();
1682
-	}
1683
-	$entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
1684
-
1685
-	if (!$public) {
1686
-		if (!$entite) {
1687
-			return '';
1688
-		}
1689
-		if (!function_exists('generer_url_ecrire_objet')) {
1690
-			include_spip('inc/urls');
1691
-		}
1692
-		$res = generer_url_ecrire_objet($entite, $id, $args, $ancre, false);
1693
-	} else {
1694
-		if ($type === null) {
1695
-			$type = (isset($GLOBALS['type_urls']))
1696
-				? $GLOBALS['type_urls'] // pour surcharge via fichier d'options
1697
-				: ((isset($GLOBALS['meta']['type_urls'])) // sinon la config url_etendues
1698
-					? ($GLOBALS['meta']['type_urls']) : "page"); // sinon type "page" par défaut
1699
-		}
1700
-
1701
-		$f = charger_fonction($type, 'urls', true);
1702
-		// se rabattre sur les urls page si les urls perso non dispo
1703
-		if (!$f) {
1704
-			$f = charger_fonction('page', 'urls', true);
1705
-		}
1706
-
1707
-		// si $entite='', on veut la fonction de passage URL ==> id
1708
-		// sinon on veut effectuer le passage id ==> URL
1709
-		if (!$entite) {
1710
-			return $f;
1711
-		}
1712
-
1713
-		// mais d'abord il faut tester le cas des urls sur une
1714
-		// base distante
1715
-		if (is_string($public)
1716
-			and $g = charger_fonction('connect', 'urls', true)
1717
-		) {
1718
-			$f = $g;
1719
-		}
1720
-
1721
-		$res = $f(intval($id), $entite, $args, $ancre, $public);
1722
-
1723
-	}
1724
-	if ($res) {
1725
-		return $res;
1726
-	}
1727
-	// Sinon c'est un raccourci ou compat SPIP < 2
1728
-	if (!function_exists($f = 'generer_url_' . $entite)) {
1729
-		if (!function_exists($f .= '_dist')) {
1730
-			$f = '';
1731
-		}
1732
-	}
1733
-	if ($f) {
1734
-		$url = $f($id, $args, $ancre);
1735
-		if (strlen($args)) {
1736
-			$url .= strstr($url, '?')
1737
-				? '&amp;' . $args
1738
-				: '?' . $args;
1739
-		}
1740
-
1741
-		return $url;
1742
-	}
1743
-	// On a ete gentil mais la ....
1744
-	spip_log("generer_url_entite: entite $entite ($f) inconnue $type $public");
1745
-
1746
-	return '';
1679
+    if ($public === null) {
1680
+        $public = !test_espace_prive();
1681
+    }
1682
+    $entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
1683
+
1684
+    if (!$public) {
1685
+        if (!$entite) {
1686
+            return '';
1687
+        }
1688
+        if (!function_exists('generer_url_ecrire_objet')) {
1689
+            include_spip('inc/urls');
1690
+        }
1691
+        $res = generer_url_ecrire_objet($entite, $id, $args, $ancre, false);
1692
+    } else {
1693
+        if ($type === null) {
1694
+            $type = (isset($GLOBALS['type_urls']))
1695
+                ? $GLOBALS['type_urls'] // pour surcharge via fichier d'options
1696
+                : ((isset($GLOBALS['meta']['type_urls'])) // sinon la config url_etendues
1697
+                    ? ($GLOBALS['meta']['type_urls']) : "page"); // sinon type "page" par défaut
1698
+        }
1699
+
1700
+        $f = charger_fonction($type, 'urls', true);
1701
+        // se rabattre sur les urls page si les urls perso non dispo
1702
+        if (!$f) {
1703
+            $f = charger_fonction('page', 'urls', true);
1704
+        }
1705
+
1706
+        // si $entite='', on veut la fonction de passage URL ==> id
1707
+        // sinon on veut effectuer le passage id ==> URL
1708
+        if (!$entite) {
1709
+            return $f;
1710
+        }
1711
+
1712
+        // mais d'abord il faut tester le cas des urls sur une
1713
+        // base distante
1714
+        if (is_string($public)
1715
+            and $g = charger_fonction('connect', 'urls', true)
1716
+        ) {
1717
+            $f = $g;
1718
+        }
1719
+
1720
+        $res = $f(intval($id), $entite, $args, $ancre, $public);
1721
+
1722
+    }
1723
+    if ($res) {
1724
+        return $res;
1725
+    }
1726
+    // Sinon c'est un raccourci ou compat SPIP < 2
1727
+    if (!function_exists($f = 'generer_url_' . $entite)) {
1728
+        if (!function_exists($f .= '_dist')) {
1729
+            $f = '';
1730
+        }
1731
+    }
1732
+    if ($f) {
1733
+        $url = $f($id, $args, $ancre);
1734
+        if (strlen($args)) {
1735
+            $url .= strstr($url, '?')
1736
+                ? '&amp;' . $args
1737
+                : '?' . $args;
1738
+        }
1739
+
1740
+        return $url;
1741
+    }
1742
+    // On a ete gentil mais la ....
1743
+    spip_log("generer_url_entite: entite $entite ($f) inconnue $type $public");
1744
+
1745
+    return '';
1747 1746
 }
1748 1747
 
1749 1748
 function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = '') {
1750
-	$exec = objet_info($entite, 'url_edit');
1751
-	$url = generer_url_ecrire($exec, $args);
1752
-	if (intval($id)) {
1753
-		$url = parametre_url($url, id_table_objet($entite), $id);
1754
-	} else {
1755
-		$url = parametre_url($url, 'new', 'oui');
1756
-	}
1757
-	if ($ancre) {
1758
-		$url = ancre_url($url, $ancre);
1759
-	}
1749
+    $exec = objet_info($entite, 'url_edit');
1750
+    $url = generer_url_ecrire($exec, $args);
1751
+    if (intval($id)) {
1752
+        $url = parametre_url($url, id_table_objet($entite), $id);
1753
+    } else {
1754
+        $url = parametre_url($url, 'new', 'oui');
1755
+    }
1756
+    if ($ancre) {
1757
+        $url = ancre_url($url, $ancre);
1758
+    }
1760 1759
 
1761
-	return $url;
1760
+    return $url;
1762 1761
 }
1763 1762
 
1764 1763
 // http://code.spip.net/@urls_connect_dist
1765 1764
 function urls_connect_dist($i, &$entite, $args = '', $ancre = '', $public = null) {
1766
-	include_spip('base/connect_sql');
1767
-	$id_type = id_table_objet($entite, $public);
1765
+    include_spip('base/connect_sql');
1766
+    $id_type = id_table_objet($entite, $public);
1768 1767
 
1769
-	return _DIR_RACINE . get_spip_script('./')
1770
-	. "?" . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public"
1771
-	. (!$args ? '' : "&$args")
1772
-	. (!$ancre ? '' : "#$ancre");
1768
+    return _DIR_RACINE . get_spip_script('./')
1769
+    . "?" . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public"
1770
+    . (!$args ? '' : "&$args")
1771
+    . (!$ancre ? '' : "#$ancre");
1773 1772
 }
1774 1773
 
1775 1774
 
@@ -1780,32 +1779,32 @@  discard block
 block discarded – undo
1780 1779
  * @return string
1781 1780
  */
1782 1781
 function urlencode_1738($url) {
1783
-	if (preg_match(',[^\x00-\x7E],sS', $url)) {
1784
-		$uri = '';
1785
-		for ($i = 0; $i < strlen($url); $i++) {
1786
-			if (ord($a = $url[$i]) > 127) {
1787
-				$a = rawurlencode($a);
1788
-			}
1789
-			$uri .= $a;
1790
-		}
1791
-		$url = $uri;
1792
-	}
1782
+    if (preg_match(',[^\x00-\x7E],sS', $url)) {
1783
+        $uri = '';
1784
+        for ($i = 0; $i < strlen($url); $i++) {
1785
+            if (ord($a = $url[$i]) > 127) {
1786
+                $a = rawurlencode($a);
1787
+            }
1788
+            $uri .= $a;
1789
+        }
1790
+        $url = $uri;
1791
+    }
1793 1792
 
1794
-	return quote_amp($url);
1793
+    return quote_amp($url);
1795 1794
 }
1796 1795
 
1797 1796
 // http://code.spip.net/@generer_url_entite_absolue
1798 1797
 function generer_url_entite_absolue($id = '', $entite = '', $args = '', $ancre = '', $connect = null) {
1799
-	if (!$connect) {
1800
-		$connect = true;
1801
-	}
1802
-	$h = generer_url_entite($id, $entite, $args, $ancre, $connect);
1803
-	if (!preg_match(',^\w+:,', $h)) {
1804
-		include_spip('inc/filtres_mini');
1805
-		$h = url_absolue($h);
1806
-	}
1798
+    if (!$connect) {
1799
+        $connect = true;
1800
+    }
1801
+    $h = generer_url_entite($id, $entite, $args, $ancre, $connect);
1802
+    if (!preg_match(',^\w+:,', $h)) {
1803
+        include_spip('inc/filtres_mini');
1804
+        $h = url_absolue($h);
1805
+    }
1807 1806
 
1808
-	return $h;
1807
+    return $h;
1809 1808
 }
1810 1809
 
1811 1810
 
@@ -1821,11 +1820,11 @@  discard block
 block discarded – undo
1821 1820
  *     true si la valeur est considérée active ; false sinon.
1822 1821
  **/
1823 1822
 function test_valeur_serveur($truc) {
1824
-	if (!$truc) {
1825
-		return false;
1826
-	}
1823
+    if (!$truc) {
1824
+        return false;
1825
+    }
1827 1826
 
1828
-	return (strtolower($truc) !== 'off');
1827
+    return (strtolower($truc) !== 'off');
1829 1828
 }
1830 1829
 
1831 1830
 //
@@ -1853,80 +1852,80 @@  discard block
 block discarded – undo
1853 1852
  */
1854 1853
 function url_de_base($profondeur = null) {
1855 1854
 
1856
-	static $url = array();
1857
-	if (is_array($profondeur)) {
1858
-		return $url = $profondeur;
1859
-	}
1860
-	if ($profondeur === false) {
1861
-		return $url;
1862
-	}
1863
-
1864
-	if (is_null($profondeur)) {
1865
-		$profondeur = $GLOBALS['profondeur_url'];
1866
-	}
1867
-
1868
-	if (isset($url[$profondeur])) {
1869
-		return $url[$profondeur];
1870
-	}
1871
-
1872
-	$http = 'http';
1873
-
1874
-	if (
1875
-		isset($_SERVER["SCRIPT_URI"])
1876
-		and substr($_SERVER["SCRIPT_URI"], 0, 5) == 'https'
1877
-	) {
1878
-		$http = 'https';
1879
-	} elseif (
1880
-		isset($_SERVER['HTTPS'])
1881
-		and test_valeur_serveur($_SERVER['HTTPS'])
1882
-	) {
1883
-		$http = 'https';
1884
-	}
1885
-
1886
-	// note : HTTP_HOST contient le :port si necessaire
1887
-	$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null;
1888
-	// si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
1889
-	if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
1890
-		$host = $GLOBALS['meta']['adresse_site'];
1891
-		if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
1892
-			$http = $scheme;
1893
-			$host = str_replace("{$scheme}://", '', $host);
1894
-		}
1895
-	}
1896
-	if (isset($_SERVER['SERVER_PORT'])
1897
-		and $port = $_SERVER['SERVER_PORT']
1898
-		and strpos($host, ":") == false
1899
-	) {
1900
-		if (!defined('_PORT_HTTP_STANDARD')) {
1901
-			define('_PORT_HTTP_STANDARD', '80');
1902
-		}
1903
-		if (!defined('_PORT_HTTPS_STANDARD')) {
1904
-			define('_PORT_HTTPS_STANDARD', '443');
1905
-		}
1906
-		if ($http == "http" and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) {
1907
-			$host .= ":$port";
1908
-		}
1909
-		if ($http == "https" and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) {
1910
-			$host .= ":$port";
1911
-		}
1912
-	}
1913
-
1914
-	if (!$GLOBALS['REQUEST_URI']) {
1915
-		if (isset($_SERVER['REQUEST_URI'])) {
1916
-			$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
1917
-		} else {
1918
-			$GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
1919
-			if (!empty($_SERVER['QUERY_STRING'])
1920
-				and !strpos($_SERVER['REQUEST_URI'], '?')
1921
-			) {
1922
-				$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
1923
-			}
1924
-		}
1925
-	}
1926
-
1927
-	$url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur);
1928
-
1929
-	return $url[$profondeur];
1855
+    static $url = array();
1856
+    if (is_array($profondeur)) {
1857
+        return $url = $profondeur;
1858
+    }
1859
+    if ($profondeur === false) {
1860
+        return $url;
1861
+    }
1862
+
1863
+    if (is_null($profondeur)) {
1864
+        $profondeur = $GLOBALS['profondeur_url'];
1865
+    }
1866
+
1867
+    if (isset($url[$profondeur])) {
1868
+        return $url[$profondeur];
1869
+    }
1870
+
1871
+    $http = 'http';
1872
+
1873
+    if (
1874
+        isset($_SERVER["SCRIPT_URI"])
1875
+        and substr($_SERVER["SCRIPT_URI"], 0, 5) == 'https'
1876
+    ) {
1877
+        $http = 'https';
1878
+    } elseif (
1879
+        isset($_SERVER['HTTPS'])
1880
+        and test_valeur_serveur($_SERVER['HTTPS'])
1881
+    ) {
1882
+        $http = 'https';
1883
+    }
1884
+
1885
+    // note : HTTP_HOST contient le :port si necessaire
1886
+    $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null;
1887
+    // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
1888
+    if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
1889
+        $host = $GLOBALS['meta']['adresse_site'];
1890
+        if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
1891
+            $http = $scheme;
1892
+            $host = str_replace("{$scheme}://", '', $host);
1893
+        }
1894
+    }
1895
+    if (isset($_SERVER['SERVER_PORT'])
1896
+        and $port = $_SERVER['SERVER_PORT']
1897
+        and strpos($host, ":") == false
1898
+    ) {
1899
+        if (!defined('_PORT_HTTP_STANDARD')) {
1900
+            define('_PORT_HTTP_STANDARD', '80');
1901
+        }
1902
+        if (!defined('_PORT_HTTPS_STANDARD')) {
1903
+            define('_PORT_HTTPS_STANDARD', '443');
1904
+        }
1905
+        if ($http == "http" and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) {
1906
+            $host .= ":$port";
1907
+        }
1908
+        if ($http == "https" and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) {
1909
+            $host .= ":$port";
1910
+        }
1911
+    }
1912
+
1913
+    if (!$GLOBALS['REQUEST_URI']) {
1914
+        if (isset($_SERVER['REQUEST_URI'])) {
1915
+            $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
1916
+        } else {
1917
+            $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
1918
+            if (!empty($_SERVER['QUERY_STRING'])
1919
+                and !strpos($_SERVER['REQUEST_URI'], '?')
1920
+            ) {
1921
+                $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
1922
+            }
1923
+        }
1924
+    }
1925
+
1926
+    $url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur);
1927
+
1928
+    return $url[$profondeur];
1930 1929
 }
1931 1930
 
1932 1931
 /**
@@ -1939,26 +1938,26 @@  discard block
 block discarded – undo
1939 1938
  * @return string
1940 1939
  */
1941 1940
 function url_de_($http, $host, $request, $prof = 0) {
1942
-	$prof = max($prof, 0);
1941
+    $prof = max($prof, 0);
1943 1942
 
1944
-	$myself = ltrim($request, '/');
1945
-	# supprimer la chaine de GET
1946
-	list($myself) = explode('?', $myself);
1947
-	// vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
1948
-	// protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
1949
-	if (strpos($myself,'://') !== false) {
1950
-		$myself = explode('://',$myself);
1951
-		array_shift($myself);
1952
-		$myself = implode('://',$myself);
1953
-		$myself = explode('/',$myself);
1954
-		array_shift($myself);
1955
-		$myself = implode('/',$myself);
1956
-	}
1957
-	$url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/';
1943
+    $myself = ltrim($request, '/');
1944
+    # supprimer la chaine de GET
1945
+    list($myself) = explode('?', $myself);
1946
+    // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
1947
+    // protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
1948
+    if (strpos($myself,'://') !== false) {
1949
+        $myself = explode('://',$myself);
1950
+        array_shift($myself);
1951
+        $myself = implode('://',$myself);
1952
+        $myself = explode('/',$myself);
1953
+        array_shift($myself);
1954
+        $myself = implode('/',$myself);
1955
+    }
1956
+    $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/';
1958 1957
 
1959
-	$url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/');
1958
+    $url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/');
1960 1959
 
1961
-	return $url;
1960
+    return $url;
1962 1961
 }
1963 1962
 
1964 1963
 
@@ -1993,26 +1992,26 @@  discard block
 block discarded – undo
1993 1992
  * @return string URL
1994 1993
  **/
1995 1994
 function generer_url_ecrire($script = '', $args = "", $no_entities = false, $rel = false) {
1996
-	if (!$rel) {
1997
-		$rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
1998
-	} else {
1999
-		if (!is_string($rel)) {
2000
-			$rel = _DIR_RESTREINT ? _DIR_RESTREINT :
2001
-				('./' . _SPIP_ECRIRE_SCRIPT);
2002
-		}
2003
-	}
2004
-
2005
-	list($script, $ancre) = array_pad(explode('#', $script), 2, null);
2006
-	if ($script and ($script <> 'accueil' or $rel)) {
2007
-		$args = "?exec=$script" . (!$args ? '' : "&$args");
2008
-	} elseif ($args) {
2009
-		$args = "?$args";
2010
-	}
2011
-	if ($ancre) {
2012
-		$args .= "#$ancre";
2013
-	}
2014
-
2015
-	return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
1995
+    if (!$rel) {
1996
+        $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
1997
+    } else {
1998
+        if (!is_string($rel)) {
1999
+            $rel = _DIR_RESTREINT ? _DIR_RESTREINT :
2000
+                ('./' . _SPIP_ECRIRE_SCRIPT);
2001
+        }
2002
+    }
2003
+
2004
+    list($script, $ancre) = array_pad(explode('#', $script), 2, null);
2005
+    if ($script and ($script <> 'accueil' or $rel)) {
2006
+        $args = "?exec=$script" . (!$args ? '' : "&$args");
2007
+    } elseif ($args) {
2008
+        $args = "?$args";
2009
+    }
2010
+    if ($ancre) {
2011
+        $args .= "#$ancre";
2012
+    }
2013
+
2014
+    return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
2016 2015
 }
2017 2016
 
2018 2017
 //
@@ -2034,12 +2033,12 @@  discard block
 block discarded – undo
2034 2033
  *     Nom du fichier (constante _SPIP_SCRIPT), sinon nom par défaut
2035 2034
  **/
2036 2035
 function get_spip_script($default = '') {
2037
-	# cas define('_SPIP_SCRIPT', '');
2038
-	if (_SPIP_SCRIPT) {
2039
-		return _SPIP_SCRIPT;
2040
-	} else {
2041
-		return $default;
2042
-	}
2036
+    # cas define('_SPIP_SCRIPT', '');
2037
+    if (_SPIP_SCRIPT) {
2038
+        return _SPIP_SCRIPT;
2039
+    } else {
2040
+        return $default;
2041
+    }
2043 2042
 }
2044 2043
 
2045 2044
 /**
@@ -2068,39 +2067,39 @@  discard block
 block discarded – undo
2068 2067
  * @return string URL
2069 2068
  **/
2070 2069
 function generer_url_public($script = '', $args = "", $no_entities = false, $rel = true, $action = '') {
2071
-	// si le script est une action (spip_pass, spip_inscription),
2072
-	// standardiser vers la nouvelle API
2073
-
2074
-	if (!$action) {
2075
-		$action = get_spip_script();
2076
-	}
2077
-	if ($script) {
2078
-		$action = parametre_url($action, _SPIP_PAGE, $script, '&');
2079
-	}
2080
-
2081
-	if ($args) {
2082
-		if (is_array($args)) {
2083
-			$r = '';
2084
-			foreach ($args as $k => $v) {
2085
-				$r .= '&' . $k . '=' . $v;
2086
-			}
2087
-			$args = substr($r, 1);
2088
-		}
2089
-		$action .=
2090
-			(strpos($action, '?') !== false ? '&' : '?') . $args;
2091
-	}
2092
-	if (!$no_entities) {
2093
-		$action = quote_amp($action);
2094
-	}
2095
-
2096
-	// ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
2097
-	return ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(",^/[.]/,", "/", "/$action"));
2070
+    // si le script est une action (spip_pass, spip_inscription),
2071
+    // standardiser vers la nouvelle API
2072
+
2073
+    if (!$action) {
2074
+        $action = get_spip_script();
2075
+    }
2076
+    if ($script) {
2077
+        $action = parametre_url($action, _SPIP_PAGE, $script, '&');
2078
+    }
2079
+
2080
+    if ($args) {
2081
+        if (is_array($args)) {
2082
+            $r = '';
2083
+            foreach ($args as $k => $v) {
2084
+                $r .= '&' . $k . '=' . $v;
2085
+            }
2086
+            $args = substr($r, 1);
2087
+        }
2088
+        $action .=
2089
+            (strpos($action, '?') !== false ? '&' : '?') . $args;
2090
+    }
2091
+    if (!$no_entities) {
2092
+        $action = quote_amp($action);
2093
+    }
2094
+
2095
+    // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
2096
+    return ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(",^/[.]/,", "/", "/$action"));
2098 2097
 }
2099 2098
 
2100 2099
 // http://code.spip.net/@generer_url_prive
2101 2100
 function generer_url_prive($script, $args = "", $no_entities = false) {
2102 2101
 
2103
-	return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php');
2102
+    return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php');
2104 2103
 }
2105 2104
 
2106 2105
 // Pour les formulaires en methode POST,
@@ -2125,19 +2124,19 @@  discard block
 block discarded – undo
2125 2124
  **/
2126 2125
 function generer_form_ecrire($script, $corps, $atts = '', $submit = '') {
2127 2126
 
2128
-	$script1 = explode('&', $script);
2129
-	$script1 = reset($script1);
2127
+    $script1 = explode('&', $script);
2128
+    $script1 = reset($script1);
2130 2129
 
2131
-	return "<form action='"
2132
-	. ($script ? generer_url_ecrire($script) : '')
2133
-	. "' "
2134
-	. ($atts ? $atts : " method='post'")
2135
-	. "><div>\n"
2136
-	. "<input type='hidden' name='exec' value='$script1' />"
2137
-	. $corps
2138
-	. (!$submit ? '' :
2139
-		("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo' type='submit' value=\"" . entites_html($submit) . "\" /></div>"))
2140
-	. "</div></form>\n";
2130
+    return "<form action='"
2131
+    . ($script ? generer_url_ecrire($script) : '')
2132
+    . "' "
2133
+    . ($atts ? $atts : " method='post'")
2134
+    . "><div>\n"
2135
+    . "<input type='hidden' name='exec' value='$script1' />"
2136
+    . $corps
2137
+    . (!$submit ? '' :
2138
+        ("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo' type='submit' value=\"" . entites_html($submit) . "\" /></div>"))
2139
+    . "</div></form>\n";
2141 2140
 }
2142 2141
 
2143 2142
 /**
@@ -2154,22 +2153,22 @@  discard block
 block discarded – undo
2154 2153
  * @return string
2155 2154
  */
2156 2155
 function generer_form_action($script, $corps, $atts = '', $public = false) {
2157
-	// si l'on est dans l'espace prive, on garde dans l'url
2158
-	// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2159
-	// ou non de proceder a l'authentification (cas typique de l'install par exemple)
2160
-	$h = (_DIR_RACINE and !$public)
2161
-		? generer_url_ecrire(_request('exec'))
2162
-		: generer_url_public();
2156
+    // si l'on est dans l'espace prive, on garde dans l'url
2157
+    // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2158
+    // ou non de proceder a l'authentification (cas typique de l'install par exemple)
2159
+    $h = (_DIR_RACINE and !$public)
2160
+        ? generer_url_ecrire(_request('exec'))
2161
+        : generer_url_public();
2163 2162
 
2164
-	return "\n<form action='" .
2165
-	$h .
2166
-	"'" .
2167
-	$atts .
2168
-	">\n" .
2169
-	"<div>" .
2170
-	"\n<input type='hidden' name='action' value='$script' />" .
2171
-	$corps .
2172
-	"</div></form>";
2163
+    return "\n<form action='" .
2164
+    $h .
2165
+    "'" .
2166
+    $atts .
2167
+    ">\n" .
2168
+    "<div>" .
2169
+    "\n<input type='hidden' name='action' value='$script' />" .
2170
+    $corps .
2171
+    "</div></form>";
2173 2172
 }
2174 2173
 
2175 2174
 /**
@@ -2188,22 +2187,22 @@  discard block
 block discarded – undo
2188 2187
  *     URL
2189 2188
  */
2190 2189
 function generer_url_action($script, $args = "", $no_entities = false, $public = false) {
2191
-	// si l'on est dans l'espace prive, on garde dans l'url
2192
-	// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2193
-	// ou non de proceder a l'authentification (cas typique de l'install par exemple)
2194
-	$url = (_DIR_RACINE and !$public)
2195
-		? generer_url_ecrire(_request('exec'))
2196
-		: generer_url_public('', '', false, false);
2197
-	$url = parametre_url($url, 'action', $script);
2198
-	if ($args) {
2199
-		$url .= quote_amp('&' . $args);
2200
-	}
2190
+    // si l'on est dans l'espace prive, on garde dans l'url
2191
+    // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2192
+    // ou non de proceder a l'authentification (cas typique de l'install par exemple)
2193
+    $url = (_DIR_RACINE and !$public)
2194
+        ? generer_url_ecrire(_request('exec'))
2195
+        : generer_url_public('', '', false, false);
2196
+    $url = parametre_url($url, 'action', $script);
2197
+    if ($args) {
2198
+        $url .= quote_amp('&' . $args);
2199
+    }
2201 2200
 
2202
-	if ($no_entities) {
2203
-		$url = str_replace('&amp;', '&', $url);
2204
-	}
2201
+    if ($no_entities) {
2202
+        $url = str_replace('&amp;', '&', $url);
2203
+    }
2205 2204
 
2206
-	return $url;
2205
+    return $url;
2207 2206
 }
2208 2207
 
2209 2208
 
@@ -2216,8 +2215,8 @@  discard block
 block discarded – undo
2216 2215
  * @param string $ta Répertoire temporaire accessible
2217 2216
  */
2218 2217
 function spip_initialisation($pi = null, $pa = null, $ti = null, $ta = null) {
2219
-	spip_initialisation_core($pi, $pa, $ti, $ta);
2220
-	spip_initialisation_suite();
2218
+    spip_initialisation_core($pi, $pa, $ti, $ta);
2219
+    spip_initialisation_suite();
2221 2220
 }
2222 2221
 
2223 2222
 /**
@@ -2237,315 +2236,315 @@  discard block
 block discarded – undo
2237 2236
  * @param string $ta Répertoire temporaire accessible
2238 2237
  */
2239 2238
 function spip_initialisation_core($pi = null, $pa = null, $ti = null, $ta = null) {
2240
-	static $too_late = 0;
2241
-	if ($too_late++) {
2242
-		return;
2243
-	}
2244
-
2245
-	// Declaration des repertoires
2246
-
2247
-	// le nom du repertoire plugins/ activables/desactivables
2248
-	if (!defined('_DIR_PLUGINS')) {
2249
-		define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
2250
-	}
2251
-
2252
-	// le nom du repertoire des extensions/ permanentes du core, toujours actives
2253
-	if (!defined('_DIR_PLUGINS_DIST')) {
2254
-		define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/");
2255
-	}
2256
-
2257
-	// le nom du repertoire des librairies
2258
-	if (!defined('_DIR_LIB')) {
2259
-		define('_DIR_LIB', _DIR_RACINE . "lib/");
2260
-	}
2261
-
2262
-	if (!defined('_DIR_IMG')) {
2263
-		define('_DIR_IMG', $pa);
2264
-	}
2265
-	if (!defined('_DIR_LOGOS')) {
2266
-		define('_DIR_LOGOS', $pa);
2267
-	}
2268
-	if (!defined('_DIR_IMG_ICONES')) {
2269
-		define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/");
2270
-	}
2271
-
2272
-	if (!defined('_DIR_DUMP')) {
2273
-		define('_DIR_DUMP', $ti . "dump/");
2274
-	}
2275
-	if (!defined('_DIR_SESSIONS')) {
2276
-		define('_DIR_SESSIONS', $ti . "sessions/");
2277
-	}
2278
-	if (!defined('_DIR_TRANSFERT')) {
2279
-		define('_DIR_TRANSFERT', $ti . "upload/");
2280
-	}
2281
-	if (!defined('_DIR_CACHE')) {
2282
-		define('_DIR_CACHE', $ti . "cache/");
2283
-	}
2284
-	if (!defined('_DIR_CACHE_XML')) {
2285
-		define('_DIR_CACHE_XML', _DIR_CACHE . "xml/");
2286
-	}
2287
-	if (!defined('_DIR_SKELS')) {
2288
-		define('_DIR_SKELS', _DIR_CACHE . "skel/");
2289
-	}
2290
-	if (!defined('_DIR_AIDE')) {
2291
-		define('_DIR_AIDE', _DIR_CACHE . "aide/");
2292
-	}
2293
-	if (!defined('_DIR_TMP')) {
2294
-		define('_DIR_TMP', $ti);
2295
-	}
2296
-
2297
-	if (!defined('_DIR_VAR')) {
2298
-		define('_DIR_VAR', $ta);
2299
-	}
2300
-
2301
-	if (!defined('_DIR_ETC')) {
2302
-		define('_DIR_ETC', $pi);
2303
-	}
2304
-	if (!defined('_DIR_CONNECT')) {
2305
-		define('_DIR_CONNECT', $pi);
2306
-	}
2307
-	if (!defined('_DIR_CHMOD')) {
2308
-		define('_DIR_CHMOD', $pi);
2309
-	}
2310
-
2311
-	if (!isset($GLOBALS['test_dirs']))
2312
-		// Pas $pi car il est bon de le mettre hors ecriture apres intstall
2313
-		// il sera rajoute automatiquement si besoin a l'etape 2 de l'install
2314
-	{
2315
-		$GLOBALS['test_dirs'] = array($pa, $ti, $ta);
2316
-	}
2317
-
2318
-	// Declaration des fichiers
2319
-
2320
-	if (!defined('_CACHE_PLUGINS_PATH')) {
2321
-		define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php");
2322
-	}
2323
-	if (!defined('_CACHE_PLUGINS_OPT')) {
2324
-		define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php");
2325
-	}
2326
-	if (!defined('_CACHE_PLUGINS_FCT')) {
2327
-		define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php");
2328
-	}
2329
-	if (!defined('_CACHE_PIPELINES')) {
2330
-		define('_CACHE_PIPELINES', _DIR_CACHE . "charger_pipelines.php");
2331
-	}
2332
-	if (!defined('_CACHE_CHEMIN')) {
2333
-		define('_CACHE_CHEMIN', _DIR_CACHE . "chemin.txt");
2334
-	}
2335
-
2336
-	# attention .php obligatoire pour ecrire_fichier_securise
2337
-	if (!defined('_FILE_META')) {
2338
-		define('_FILE_META', $ti . 'meta_cache.php');
2339
-	}
2340
-	if (!defined('_DIR_LOG')) {
2341
-		define('_DIR_LOG', _DIR_TMP . 'log/');
2342
-	}
2343
-	if (!defined('_FILE_LOG')) {
2344
-		define('_FILE_LOG', 'spip');
2345
-	}
2346
-	if (!defined('_FILE_LOG_SUFFIX')) {
2347
-		define('_FILE_LOG_SUFFIX', '.log');
2348
-	}
2349
-
2350
-	// Le fichier de connexion a la base de donnees
2351
-	// tient compte des anciennes versions (inc_connect...)
2352
-	if (!defined('_FILE_CONNECT_INS')) {
2353
-		define('_FILE_CONNECT_INS', 'connect');
2354
-	}
2355
-	if (!defined('_FILE_CONNECT')) {
2356
-		define('_FILE_CONNECT',
2357
-		(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
2358
-			: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
2359
-				: false)));
2360
-	}
2361
-
2362
-	// Le fichier de reglages des droits
2363
-	if (!defined('_FILE_CHMOD_INS')) {
2364
-		define('_FILE_CHMOD_INS', 'chmod');
2365
-	}
2366
-	if (!defined('_FILE_CHMOD')) {
2367
-		define('_FILE_CHMOD',
2368
-		(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
2369
-			: false));
2370
-	}
2371
-
2372
-	if (!defined('_FILE_LDAP')) {
2373
-		define('_FILE_LDAP', 'ldap.php');
2374
-	}
2375
-
2376
-	if (!defined('_FILE_TMP_SUFFIX')) {
2377
-		define('_FILE_TMP_SUFFIX', '.tmp.php');
2378
-	}
2379
-	if (!defined('_FILE_CONNECT_TMP')) {
2380
-		define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
2381
-	}
2382
-	if (!defined('_FILE_CHMOD_TMP')) {
2383
-		define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
2384
-	}
2385
-
2386
-	// Definition des droits d'acces en ecriture
2387
-	if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) {
2388
-		include_once _FILE_CHMOD;
2389
-	}
2390
-
2391
-	// Se mefier des fichiers mal remplis!
2392
-	if (!defined('_SPIP_CHMOD')) {
2393
-		define('_SPIP_CHMOD', 0777);
2394
-	}
2395
-
2396
-	if (!defined('_DEFAULT_CHARSET')) {
2397
-		/** Le charset par défaut lors de l'installation */
2398
-		define('_DEFAULT_CHARSET', 'utf-8');
2399
-	}
2400
-	if (!defined('_ROOT_PLUGINS')) {
2401
-		define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/");
2402
-	}
2403
-	if (!defined('_ROOT_PLUGINS_DIST')) {
2404
-		define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/");
2405
-	}
2406
-	if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
2407
-		define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
2408
-	}
2409
-
2410
-	// La taille des Log
2411
-	if (!defined('_MAX_LOG')) {
2412
-		define('_MAX_LOG', 100);
2413
-	}
2414
-
2415
-	// Sommes-nous dans l'empire du Mal ?
2416
-	// (ou sous le signe du Pingouin, ascendant GNU ?)
2417
-	if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) {
2418
-		if (!defined('_OS_SERVEUR')) {
2419
-			define('_OS_SERVEUR', 'windows');
2420
-		}
2421
-		if (!defined('_SPIP_LOCK_MODE')) {
2422
-			define('_SPIP_LOCK_MODE', 1);
2423
-		} // utiliser le flock php
2424
-	} else {
2425
-		if (!defined('_OS_SERVEUR')) {
2426
-			define('_OS_SERVEUR', '');
2427
-		}
2428
-		if (!defined('_SPIP_LOCK_MODE')) {
2429
-			define('_SPIP_LOCK_MODE', 1);
2430
-		} // utiliser le flock php
2431
-		#if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
2432
-	}
2433
-
2434
-	// Langue par defaut
2435
-	if (!defined('_LANGUE_PAR_DEFAUT')) {
2436
-		define('_LANGUE_PAR_DEFAUT', 'fr');
2437
-	}
2438
-
2439
-	//
2440
-	// Module de lecture/ecriture/suppression de fichiers utilisant flock()
2441
-	// (non surchargeable en l'etat ; attention si on utilise include_spip()
2442
-	// pour le rendre surchargeable, on va provoquer un reecriture
2443
-	// systematique du noyau ou une baisse de perfs => a etudier)
2444
-	include_once _ROOT_RESTREINT . 'inc/flock.php';
2445
-
2446
-	// charger tout de suite le path et son cache
2447
-	load_path_cache();
2448
-
2449
-	// *********** traiter les variables ************
2450
-
2451
-	//
2452
-	// Securite
2453
-	//
2454
-
2455
-	// Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
2456
-	if (isset($_REQUEST['GLOBALS'])) {
2457
-		die();
2458
-	}
2459
-	// nettoyer les magic quotes \' et les caracteres nuls %00
2460
-	spip_desinfecte($_GET);
2461
-	spip_desinfecte($_POST);
2462
-	spip_desinfecte($_COOKIE);
2463
-	spip_desinfecte($_REQUEST);
2464
-
2465
-	// appliquer le cookie_prefix
2466
-	if ($GLOBALS['cookie_prefix'] != 'spip') {
2467
-		include_spip('inc/cookie');
2468
-		recuperer_cookies_spip($GLOBALS['cookie_prefix']);
2469
-	}
2470
-
2471
-	//
2472
-	// Capacites php (en fonction de la version)
2473
-	//
2474
-	$GLOBALS['flag_ob'] = (function_exists("ob_start")
2475
-		&& function_exists("ini_get")
2476
-		&& !strstr(@ini_get('disable_functions'), 'ob_'));
2477
-	$GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
2478
-	$GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != "");
2479
-	$GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
2480
-		(get_cfg_var('upload_max_filesize') > 0));
2481
-
2482
-
2483
-	// Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
2484
-	if (isset($_SERVER['REQUEST_URI'])) {
2485
-		$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
2486
-	} else {
2487
-		$GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
2488
-		if (!empty($_SERVER['QUERY_STRING'])
2489
-			and !strpos($_SERVER['REQUEST_URI'], '?')
2490
-		) {
2491
-			$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2492
-		}
2493
-	}
2494
-
2495
-	// Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
2496
-	if (!defined('_RENOUVELLE_ALEA')) {
2497
-		define('_RENOUVELLE_ALEA', 12 * 3600);
2498
-	}
2499
-	if (!defined('_DUREE_COOKIE_ADMIN')) {
2500
-		define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600);
2501
-	}
2502
-
2503
-	// charger les meta si possible et renouveller l'alea au besoin
2504
-	// charge aussi effacer_meta et ecrire_meta
2505
-	$inc_meta = charger_fonction('meta', 'inc');
2506
-	$inc_meta();
2507
-
2508
-	// nombre de repertoires depuis la racine
2509
-	// on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
2510
-	// ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
2511
-	// le calcul est faux)
2512
-	if (!_DIR_RESTREINT) {
2513
-		$GLOBALS['profondeur_url'] = 1;
2514
-	} else {
2515
-		$uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
2516
-		$uri_ref = $_SERVER["SCRIPT_NAME"];
2517
-		if (!$uri_ref
2518
-			// si on est appele avec un autre ti, on est sans doute en mutu
2519
-			// si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
2520
-			// a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
2521
-			// s'en remettre a l'adresse du site. alea jacta est.
2522
-			or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES
2523
-		) {
2524
-
2525
-			if (isset($GLOBALS['meta']['adresse_site'])) {
2526
-				$uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
2527
-				$uri_ref = (isset($uri_ref['path']) ? $uri_ref['path'] : '') . '/';
2528
-			} else {
2529
-				$uri_ref = "";
2530
-			}
2531
-		}
2532
-		if (!$uri or !$uri_ref) {
2533
-			$GLOBALS['profondeur_url'] = 0;
2534
-		} else {
2535
-			$GLOBALS['profondeur_url'] = max(0,
2536
-				substr_count($uri[0], '/')
2537
-				- substr_count($uri_ref, '/'));
2538
-		}
2539
-	}
2540
-	// s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
2541
-	if (_FILE_CONNECT) {
2542
-		if (verifier_visiteur() == '0minirezo'
2543
-			// si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
2544
-			and !isset($_COOKIE['spip_admin'])
2545
-		) {
2546
-			clear_path_cache();
2547
-		}
2548
-	}
2239
+    static $too_late = 0;
2240
+    if ($too_late++) {
2241
+        return;
2242
+    }
2243
+
2244
+    // Declaration des repertoires
2245
+
2246
+    // le nom du repertoire plugins/ activables/desactivables
2247
+    if (!defined('_DIR_PLUGINS')) {
2248
+        define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
2249
+    }
2250
+
2251
+    // le nom du repertoire des extensions/ permanentes du core, toujours actives
2252
+    if (!defined('_DIR_PLUGINS_DIST')) {
2253
+        define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/");
2254
+    }
2255
+
2256
+    // le nom du repertoire des librairies
2257
+    if (!defined('_DIR_LIB')) {
2258
+        define('_DIR_LIB', _DIR_RACINE . "lib/");
2259
+    }
2260
+
2261
+    if (!defined('_DIR_IMG')) {
2262
+        define('_DIR_IMG', $pa);
2263
+    }
2264
+    if (!defined('_DIR_LOGOS')) {
2265
+        define('_DIR_LOGOS', $pa);
2266
+    }
2267
+    if (!defined('_DIR_IMG_ICONES')) {
2268
+        define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/");
2269
+    }
2270
+
2271
+    if (!defined('_DIR_DUMP')) {
2272
+        define('_DIR_DUMP', $ti . "dump/");
2273
+    }
2274
+    if (!defined('_DIR_SESSIONS')) {
2275
+        define('_DIR_SESSIONS', $ti . "sessions/");
2276
+    }
2277
+    if (!defined('_DIR_TRANSFERT')) {
2278
+        define('_DIR_TRANSFERT', $ti . "upload/");
2279
+    }
2280
+    if (!defined('_DIR_CACHE')) {
2281
+        define('_DIR_CACHE', $ti . "cache/");
2282
+    }
2283
+    if (!defined('_DIR_CACHE_XML')) {
2284
+        define('_DIR_CACHE_XML', _DIR_CACHE . "xml/");
2285
+    }
2286
+    if (!defined('_DIR_SKELS')) {
2287
+        define('_DIR_SKELS', _DIR_CACHE . "skel/");
2288
+    }
2289
+    if (!defined('_DIR_AIDE')) {
2290
+        define('_DIR_AIDE', _DIR_CACHE . "aide/");
2291
+    }
2292
+    if (!defined('_DIR_TMP')) {
2293
+        define('_DIR_TMP', $ti);
2294
+    }
2295
+
2296
+    if (!defined('_DIR_VAR')) {
2297
+        define('_DIR_VAR', $ta);
2298
+    }
2299
+
2300
+    if (!defined('_DIR_ETC')) {
2301
+        define('_DIR_ETC', $pi);
2302
+    }
2303
+    if (!defined('_DIR_CONNECT')) {
2304
+        define('_DIR_CONNECT', $pi);
2305
+    }
2306
+    if (!defined('_DIR_CHMOD')) {
2307
+        define('_DIR_CHMOD', $pi);
2308
+    }
2309
+
2310
+    if (!isset($GLOBALS['test_dirs']))
2311
+        // Pas $pi car il est bon de le mettre hors ecriture apres intstall
2312
+        // il sera rajoute automatiquement si besoin a l'etape 2 de l'install
2313
+    {
2314
+        $GLOBALS['test_dirs'] = array($pa, $ti, $ta);
2315
+    }
2316
+
2317
+    // Declaration des fichiers
2318
+
2319
+    if (!defined('_CACHE_PLUGINS_PATH')) {
2320
+        define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php");
2321
+    }
2322
+    if (!defined('_CACHE_PLUGINS_OPT')) {
2323
+        define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php");
2324
+    }
2325
+    if (!defined('_CACHE_PLUGINS_FCT')) {
2326
+        define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php");
2327
+    }
2328
+    if (!defined('_CACHE_PIPELINES')) {
2329
+        define('_CACHE_PIPELINES', _DIR_CACHE . "charger_pipelines.php");
2330
+    }
2331
+    if (!defined('_CACHE_CHEMIN')) {
2332
+        define('_CACHE_CHEMIN', _DIR_CACHE . "chemin.txt");
2333
+    }
2334
+
2335
+    # attention .php obligatoire pour ecrire_fichier_securise
2336
+    if (!defined('_FILE_META')) {
2337
+        define('_FILE_META', $ti . 'meta_cache.php');
2338
+    }
2339
+    if (!defined('_DIR_LOG')) {
2340
+        define('_DIR_LOG', _DIR_TMP . 'log/');
2341
+    }
2342
+    if (!defined('_FILE_LOG')) {
2343
+        define('_FILE_LOG', 'spip');
2344
+    }
2345
+    if (!defined('_FILE_LOG_SUFFIX')) {
2346
+        define('_FILE_LOG_SUFFIX', '.log');
2347
+    }
2348
+
2349
+    // Le fichier de connexion a la base de donnees
2350
+    // tient compte des anciennes versions (inc_connect...)
2351
+    if (!defined('_FILE_CONNECT_INS')) {
2352
+        define('_FILE_CONNECT_INS', 'connect');
2353
+    }
2354
+    if (!defined('_FILE_CONNECT')) {
2355
+        define('_FILE_CONNECT',
2356
+        (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
2357
+            : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
2358
+                : false)));
2359
+    }
2360
+
2361
+    // Le fichier de reglages des droits
2362
+    if (!defined('_FILE_CHMOD_INS')) {
2363
+        define('_FILE_CHMOD_INS', 'chmod');
2364
+    }
2365
+    if (!defined('_FILE_CHMOD')) {
2366
+        define('_FILE_CHMOD',
2367
+        (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
2368
+            : false));
2369
+    }
2370
+
2371
+    if (!defined('_FILE_LDAP')) {
2372
+        define('_FILE_LDAP', 'ldap.php');
2373
+    }
2374
+
2375
+    if (!defined('_FILE_TMP_SUFFIX')) {
2376
+        define('_FILE_TMP_SUFFIX', '.tmp.php');
2377
+    }
2378
+    if (!defined('_FILE_CONNECT_TMP')) {
2379
+        define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
2380
+    }
2381
+    if (!defined('_FILE_CHMOD_TMP')) {
2382
+        define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
2383
+    }
2384
+
2385
+    // Definition des droits d'acces en ecriture
2386
+    if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) {
2387
+        include_once _FILE_CHMOD;
2388
+    }
2389
+
2390
+    // Se mefier des fichiers mal remplis!
2391
+    if (!defined('_SPIP_CHMOD')) {
2392
+        define('_SPIP_CHMOD', 0777);
2393
+    }
2394
+
2395
+    if (!defined('_DEFAULT_CHARSET')) {
2396
+        /** Le charset par défaut lors de l'installation */
2397
+        define('_DEFAULT_CHARSET', 'utf-8');
2398
+    }
2399
+    if (!defined('_ROOT_PLUGINS')) {
2400
+        define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/");
2401
+    }
2402
+    if (!defined('_ROOT_PLUGINS_DIST')) {
2403
+        define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/");
2404
+    }
2405
+    if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
2406
+        define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
2407
+    }
2408
+
2409
+    // La taille des Log
2410
+    if (!defined('_MAX_LOG')) {
2411
+        define('_MAX_LOG', 100);
2412
+    }
2413
+
2414
+    // Sommes-nous dans l'empire du Mal ?
2415
+    // (ou sous le signe du Pingouin, ascendant GNU ?)
2416
+    if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) {
2417
+        if (!defined('_OS_SERVEUR')) {
2418
+            define('_OS_SERVEUR', 'windows');
2419
+        }
2420
+        if (!defined('_SPIP_LOCK_MODE')) {
2421
+            define('_SPIP_LOCK_MODE', 1);
2422
+        } // utiliser le flock php
2423
+    } else {
2424
+        if (!defined('_OS_SERVEUR')) {
2425
+            define('_OS_SERVEUR', '');
2426
+        }
2427
+        if (!defined('_SPIP_LOCK_MODE')) {
2428
+            define('_SPIP_LOCK_MODE', 1);
2429
+        } // utiliser le flock php
2430
+        #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
2431
+    }
2432
+
2433
+    // Langue par defaut
2434
+    if (!defined('_LANGUE_PAR_DEFAUT')) {
2435
+        define('_LANGUE_PAR_DEFAUT', 'fr');
2436
+    }
2437
+
2438
+    //
2439
+    // Module de lecture/ecriture/suppression de fichiers utilisant flock()
2440
+    // (non surchargeable en l'etat ; attention si on utilise include_spip()
2441
+    // pour le rendre surchargeable, on va provoquer un reecriture
2442
+    // systematique du noyau ou une baisse de perfs => a etudier)
2443
+    include_once _ROOT_RESTREINT . 'inc/flock.php';
2444
+
2445
+    // charger tout de suite le path et son cache
2446
+    load_path_cache();
2447
+
2448
+    // *********** traiter les variables ************
2449
+
2450
+    //
2451
+    // Securite
2452
+    //
2453
+
2454
+    // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
2455
+    if (isset($_REQUEST['GLOBALS'])) {
2456
+        die();
2457
+    }
2458
+    // nettoyer les magic quotes \' et les caracteres nuls %00
2459
+    spip_desinfecte($_GET);
2460
+    spip_desinfecte($_POST);
2461
+    spip_desinfecte($_COOKIE);
2462
+    spip_desinfecte($_REQUEST);
2463
+
2464
+    // appliquer le cookie_prefix
2465
+    if ($GLOBALS['cookie_prefix'] != 'spip') {
2466
+        include_spip('inc/cookie');
2467
+        recuperer_cookies_spip($GLOBALS['cookie_prefix']);
2468
+    }
2469
+
2470
+    //
2471
+    // Capacites php (en fonction de la version)
2472
+    //
2473
+    $GLOBALS['flag_ob'] = (function_exists("ob_start")
2474
+        && function_exists("ini_get")
2475
+        && !strstr(@ini_get('disable_functions'), 'ob_'));
2476
+    $GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
2477
+    $GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != "");
2478
+    $GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
2479
+        (get_cfg_var('upload_max_filesize') > 0));
2480
+
2481
+
2482
+    // Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
2483
+    if (isset($_SERVER['REQUEST_URI'])) {
2484
+        $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
2485
+    } else {
2486
+        $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
2487
+        if (!empty($_SERVER['QUERY_STRING'])
2488
+            and !strpos($_SERVER['REQUEST_URI'], '?')
2489
+        ) {
2490
+            $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2491
+        }
2492
+    }
2493
+
2494
+    // Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
2495
+    if (!defined('_RENOUVELLE_ALEA')) {
2496
+        define('_RENOUVELLE_ALEA', 12 * 3600);
2497
+    }
2498
+    if (!defined('_DUREE_COOKIE_ADMIN')) {
2499
+        define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600);
2500
+    }
2501
+
2502
+    // charger les meta si possible et renouveller l'alea au besoin
2503
+    // charge aussi effacer_meta et ecrire_meta
2504
+    $inc_meta = charger_fonction('meta', 'inc');
2505
+    $inc_meta();
2506
+
2507
+    // nombre de repertoires depuis la racine
2508
+    // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
2509
+    // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
2510
+    // le calcul est faux)
2511
+    if (!_DIR_RESTREINT) {
2512
+        $GLOBALS['profondeur_url'] = 1;
2513
+    } else {
2514
+        $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
2515
+        $uri_ref = $_SERVER["SCRIPT_NAME"];
2516
+        if (!$uri_ref
2517
+            // si on est appele avec un autre ti, on est sans doute en mutu
2518
+            // si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
2519
+            // a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
2520
+            // s'en remettre a l'adresse du site. alea jacta est.
2521
+            or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES
2522
+        ) {
2523
+
2524
+            if (isset($GLOBALS['meta']['adresse_site'])) {
2525
+                $uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
2526
+                $uri_ref = (isset($uri_ref['path']) ? $uri_ref['path'] : '') . '/';
2527
+            } else {
2528
+                $uri_ref = "";
2529
+            }
2530
+        }
2531
+        if (!$uri or !$uri_ref) {
2532
+            $GLOBALS['profondeur_url'] = 0;
2533
+        } else {
2534
+            $GLOBALS['profondeur_url'] = max(0,
2535
+                substr_count($uri[0], '/')
2536
+                - substr_count($uri_ref, '/'));
2537
+        }
2538
+    }
2539
+    // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
2540
+    if (_FILE_CONNECT) {
2541
+        if (verifier_visiteur() == '0minirezo'
2542
+            // si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
2543
+            and !isset($_COOKIE['spip_admin'])
2544
+        ) {
2545
+            clear_path_cache();
2546
+        }
2547
+    }
2549 2548
 
2550 2549
 }
2551 2550
 
@@ -2555,172 +2554,172 @@  discard block
 block discarded – undo
2555 2554
  *
2556 2555
  */
2557 2556
 function spip_initialisation_suite() {
2558
-	static $too_late = 0;
2559
-	if ($too_late++) {
2560
-		return;
2561
-	}
2562
-
2563
-	// taille mini des login
2564
-	if (!defined('_LOGIN_TROP_COURT')) {
2565
-		define('_LOGIN_TROP_COURT', 4);
2566
-	}
2567
-
2568
-	// la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2569
-	#if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
2570
-	#if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
2571
-	#if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
2572
-
2573
-	// la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2574
-	#if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
2575
-	#if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
2576
-	#if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
2577
-	#if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
2578
-
2579
-	if (!defined('_PASS_LONGUEUR_MINI')) {
2580
-		define('_PASS_LONGUEUR_MINI', 6);
2581
-	}
2582
-
2583
-
2584
-	// Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
2585
-	if (!defined('_IMG_QUALITE')) {
2586
-		define('_IMG_QUALITE', 85);
2587
-	} # valeur par defaut
2588
-	if (!defined('_IMG_GD_QUALITE')) {
2589
-		define('_IMG_GD_QUALITE', _IMG_QUALITE);
2590
-	} # surcharge pour la lib GD
2591
-	if (!defined('_IMG_CONVERT_QUALITE')) {
2592
-		define('_IMG_CONVERT_QUALITE', _IMG_QUALITE);
2593
-	} # surcharge pour imagick en ligne de commande
2594
-	// Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
2595
-	if (!defined('_IMG_IMAGICK_QUALITE')) {
2596
-		define('_IMG_IMAGICK_QUALITE', 75);
2597
-	} # surcharge pour imagick en PHP
2598
-
2599
-	if (!defined('_COPIE_LOCALE_MAX_SIZE')) {
2600
-		define('_COPIE_LOCALE_MAX_SIZE', 33554432);
2601
-	} // poids en octet
2602
-
2603
-	// qq chaines standard
2604
-	if (!defined('_ACCESS_FILE_NAME')) {
2605
-		define('_ACCESS_FILE_NAME', '.htaccess');
2606
-	}
2607
-	if (!defined('_AUTH_USER_FILE')) {
2608
-		define('_AUTH_USER_FILE', '.htpasswd');
2609
-	}
2610
-	if (!defined('_SPIP_DUMP')) {
2611
-		define('_SPIP_DUMP', 'dump@nom_site@@[email protected]');
2612
-	}
2613
-	if (!defined('_CACHE_RUBRIQUES')) {
2614
-		/** Fichier cache pour le navigateur de rubrique du bandeau */
2615
-		define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt');
2616
-	}
2617
-	if (!defined('_CACHE_RUBRIQUES_MAX')) {
2618
-		/** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */
2619
-		define('_CACHE_RUBRIQUES_MAX', 500);
2620
-	}
2621
-
2622
-	if (!defined('_EXTENSION_SQUELETTES')) {
2623
-		define('_EXTENSION_SQUELETTES', 'html');
2624
-	}
2625
-
2626
-	if (!defined('_DOCTYPE_ECRIRE')) {
2627
-		/** Définit le doctype de l’espace privé */
2628
-		define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n");
2629
-	}
2630
-	if (!defined('_DOCTYPE_AIDE')) {
2631
-		/** Définit le doctype de l’aide en ligne */
2632
-		define('_DOCTYPE_AIDE',
2633
-		"<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
2634
-	}
2635
-
2636
-	if (!defined('_SPIP_SCRIPT')) {
2637
-		/** L'adresse de base du site ; on peut mettre '' si la racine est gerée par
2638
-		 * le script de l'espace public, alias index.php */
2639
-		define('_SPIP_SCRIPT', 'spip.php');
2640
-	}
2641
-	if (!defined('_SPIP_PAGE')) {
2642
-		/** Argument page, personalisable en cas de conflit avec un autre script */
2643
-		define('_SPIP_PAGE', 'page');
2644
-	}
2645
-
2646
-	// le script de l'espace prive
2647
-	// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
2648
-	// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
2649
-	// meme pb sur thttpd cf. http://forum.spip.net/fr_184153.html
2650
-	if (!defined('_SPIP_ECRIRE_SCRIPT')) {
2651
-		define('_SPIP_ECRIRE_SCRIPT', (empty($_SERVER['SERVER_SOFTWARE']) ? '' :
2652
-			preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE']) ?
2653
-				'index.php' : ''));
2654
-	}
2655
-
2656
-
2657
-	if (!defined('_SPIP_AJAX')) {
2658
-		define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
2659
-			? 1
2660
-			: (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
2661
-	}
2662
-
2663
-	// La requete est-elle en ajax ?
2664
-	if (!defined('_AJAX')) {
2665
-		define('_AJAX',
2666
-			(isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
2667
-				or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery
2668
-				or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins
2669
-				or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip
2670
-			)
2671
-			and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient
2672
-		);
2673
-	}
2674
-
2675
-	# nombre de pixels maxi pour calcul de la vignette avec gd
2676
-	# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
2677
-	# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
2678
-	if (!defined('_IMG_GD_MAX_PIXELS')) {
2679
-		define('_IMG_GD_MAX_PIXELS',
2680
-		(isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes'])
2681
-			? $GLOBALS['meta']['max_taille_vignettes']
2682
-			: 0);
2683
-	}
2684
-
2685
-	if (!defined('_MEMORY_LIMIT_MIN')) {
2686
-		define('_MEMORY_LIMIT_MIN', 16);
2687
-	} // en Mo
2688
-	// si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
2689
-	// on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
2690
-	// il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
2691
-	if (test_espace_prive() and _MEMORY_LIMIT_MIN > 8) {
2692
-		if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
2693
-			$unit = strtolower(substr($memory, -1));
2694
-			$memory = substr($memory, 0, -1);
2695
-			switch ($unit) {
2696
-				// Le modifieur 'G' est disponible depuis PHP 5.1.0
2697
-				case 'g':
2698
-					$memory *= 1024;
2699
-				case 'm':
2700
-					$memory *= 1024;
2701
-				case 'k':
2702
-					$memory *= 1024;
2703
-			}
2704
-			if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) {
2705
-				@ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M');
2706
-				if (trim(ini_get('memory_limit')) != $m) {
2707
-					if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2708
-						define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2709
-					} // evite une page blanche car on ne saura pas calculer la css dans ce hit
2710
-				}
2711
-			}
2712
-		} else {
2713
-			if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2714
-				define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2715
-			}
2716
-		} // evite une page blanche car on ne saura pas calculer la css dans ce hit
2717
-	}
2718
-	// Protocoles a normaliser dans les chaines de langues
2719
-	if (!defined('_PROTOCOLES_STD')) {
2720
-		define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
2721
-	}
2722
-
2723
-	init_var_mode();
2557
+    static $too_late = 0;
2558
+    if ($too_late++) {
2559
+        return;
2560
+    }
2561
+
2562
+    // taille mini des login
2563
+    if (!defined('_LOGIN_TROP_COURT')) {
2564
+        define('_LOGIN_TROP_COURT', 4);
2565
+    }
2566
+
2567
+    // la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2568
+    #if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
2569
+    #if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
2570
+    #if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
2571
+
2572
+    // la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2573
+    #if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
2574
+    #if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
2575
+    #if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
2576
+    #if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
2577
+
2578
+    if (!defined('_PASS_LONGUEUR_MINI')) {
2579
+        define('_PASS_LONGUEUR_MINI', 6);
2580
+    }
2581
+
2582
+
2583
+    // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
2584
+    if (!defined('_IMG_QUALITE')) {
2585
+        define('_IMG_QUALITE', 85);
2586
+    } # valeur par defaut
2587
+    if (!defined('_IMG_GD_QUALITE')) {
2588
+        define('_IMG_GD_QUALITE', _IMG_QUALITE);
2589
+    } # surcharge pour la lib GD
2590
+    if (!defined('_IMG_CONVERT_QUALITE')) {
2591
+        define('_IMG_CONVERT_QUALITE', _IMG_QUALITE);
2592
+    } # surcharge pour imagick en ligne de commande
2593
+    // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
2594
+    if (!defined('_IMG_IMAGICK_QUALITE')) {
2595
+        define('_IMG_IMAGICK_QUALITE', 75);
2596
+    } # surcharge pour imagick en PHP
2597
+
2598
+    if (!defined('_COPIE_LOCALE_MAX_SIZE')) {
2599
+        define('_COPIE_LOCALE_MAX_SIZE', 33554432);
2600
+    } // poids en octet
2601
+
2602
+    // qq chaines standard
2603
+    if (!defined('_ACCESS_FILE_NAME')) {
2604
+        define('_ACCESS_FILE_NAME', '.htaccess');
2605
+    }
2606
+    if (!defined('_AUTH_USER_FILE')) {
2607
+        define('_AUTH_USER_FILE', '.htpasswd');
2608
+    }
2609
+    if (!defined('_SPIP_DUMP')) {
2610
+        define('_SPIP_DUMP', 'dump@nom_site@@[email protected]');
2611
+    }
2612
+    if (!defined('_CACHE_RUBRIQUES')) {
2613
+        /** Fichier cache pour le navigateur de rubrique du bandeau */
2614
+        define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt');
2615
+    }
2616
+    if (!defined('_CACHE_RUBRIQUES_MAX')) {
2617
+        /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */
2618
+        define('_CACHE_RUBRIQUES_MAX', 500);
2619
+    }
2620
+
2621
+    if (!defined('_EXTENSION_SQUELETTES')) {
2622
+        define('_EXTENSION_SQUELETTES', 'html');
2623
+    }
2624
+
2625
+    if (!defined('_DOCTYPE_ECRIRE')) {
2626
+        /** Définit le doctype de l’espace privé */
2627
+        define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n");
2628
+    }
2629
+    if (!defined('_DOCTYPE_AIDE')) {
2630
+        /** Définit le doctype de l’aide en ligne */
2631
+        define('_DOCTYPE_AIDE',
2632
+        "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
2633
+    }
2634
+
2635
+    if (!defined('_SPIP_SCRIPT')) {
2636
+        /** L'adresse de base du site ; on peut mettre '' si la racine est gerée par
2637
+         * le script de l'espace public, alias index.php */
2638
+        define('_SPIP_SCRIPT', 'spip.php');
2639
+    }
2640
+    if (!defined('_SPIP_PAGE')) {
2641
+        /** Argument page, personalisable en cas de conflit avec un autre script */
2642
+        define('_SPIP_PAGE', 'page');
2643
+    }
2644
+
2645
+    // le script de l'espace prive
2646
+    // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
2647
+    // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
2648
+    // meme pb sur thttpd cf. http://forum.spip.net/fr_184153.html
2649
+    if (!defined('_SPIP_ECRIRE_SCRIPT')) {
2650
+        define('_SPIP_ECRIRE_SCRIPT', (empty($_SERVER['SERVER_SOFTWARE']) ? '' :
2651
+            preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE']) ?
2652
+                'index.php' : ''));
2653
+    }
2654
+
2655
+
2656
+    if (!defined('_SPIP_AJAX')) {
2657
+        define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
2658
+            ? 1
2659
+            : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
2660
+    }
2661
+
2662
+    // La requete est-elle en ajax ?
2663
+    if (!defined('_AJAX')) {
2664
+        define('_AJAX',
2665
+            (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
2666
+                or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery
2667
+                or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins
2668
+                or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip
2669
+            )
2670
+            and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient
2671
+        );
2672
+    }
2673
+
2674
+    # nombre de pixels maxi pour calcul de la vignette avec gd
2675
+    # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
2676
+    # les configurations limitees en memoire ont un seuil plutot vers 1MPixel
2677
+    if (!defined('_IMG_GD_MAX_PIXELS')) {
2678
+        define('_IMG_GD_MAX_PIXELS',
2679
+        (isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes'])
2680
+            ? $GLOBALS['meta']['max_taille_vignettes']
2681
+            : 0);
2682
+    }
2683
+
2684
+    if (!defined('_MEMORY_LIMIT_MIN')) {
2685
+        define('_MEMORY_LIMIT_MIN', 16);
2686
+    } // en Mo
2687
+    // si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
2688
+    // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
2689
+    // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
2690
+    if (test_espace_prive() and _MEMORY_LIMIT_MIN > 8) {
2691
+        if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
2692
+            $unit = strtolower(substr($memory, -1));
2693
+            $memory = substr($memory, 0, -1);
2694
+            switch ($unit) {
2695
+                // Le modifieur 'G' est disponible depuis PHP 5.1.0
2696
+                case 'g':
2697
+                    $memory *= 1024;
2698
+                case 'm':
2699
+                    $memory *= 1024;
2700
+                case 'k':
2701
+                    $memory *= 1024;
2702
+            }
2703
+            if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) {
2704
+                @ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M');
2705
+                if (trim(ini_get('memory_limit')) != $m) {
2706
+                    if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2707
+                        define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2708
+                    } // evite une page blanche car on ne saura pas calculer la css dans ce hit
2709
+                }
2710
+            }
2711
+        } else {
2712
+            if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2713
+                define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2714
+            }
2715
+        } // evite une page blanche car on ne saura pas calculer la css dans ce hit
2716
+    }
2717
+    // Protocoles a normaliser dans les chaines de langues
2718
+    if (!defined('_PROTOCOLES_STD')) {
2719
+        define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
2720
+    }
2721
+
2722
+    init_var_mode();
2724 2723
 }
2725 2724
 
2726 2725
 /**
@@ -2754,129 +2753,129 @@  discard block
 block discarded – undo
2754 2753
  * `   var_mode` (calcul ou recalcul).
2755 2754
  */
2756 2755
 function init_var_mode() {
2757
-	static $done = false;
2758
-	if (!$done) {
2759
-
2760
-		if (isset($_GET['var_mode'])) {
2761
-			$var_mode = explode(',', $_GET['var_mode']);
2762
-			// tout le monde peut calcul/recalcul
2763
-			if (!defined('_VAR_MODE')) {
2764
-				if (in_array('recalcul', $var_mode)) {
2765
-					define('_VAR_MODE', 'recalcul');
2766
-				} elseif (in_array('calcul', $var_mode)) {
2767
-					define('_VAR_MODE', 'calcul');
2768
-				}
2769
-			}
2770
-			$var_mode = array_diff($var_mode, array('calcul', 'recalcul'));
2771
-			if ($var_mode) {
2772
-				include_spip('inc/autoriser');
2773
-				// autoriser preview si preview seulement, et sinon autoriser debug
2774
-				if (autoriser(
2775
-					($_GET['var_mode'] == 'preview')
2776
-						? 'previsualiser'
2777
-						: 'debug'
2778
-				)) {
2779
-					if (in_array('traduction', $var_mode)) {
2780
-						// forcer le calcul pour passer dans traduire
2781
-						if (!defined('_VAR_MODE')) {
2782
-							define('_VAR_MODE', 'calcul');
2783
-						}
2784
-						// et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
2785
-						if (!defined('_VAR_NOCACHE')) {
2786
-							define('_VAR_NOCACHE', true);
2787
-						}
2788
-						$var_mode = array_diff($var_mode, array('traduction'));
2789
-					}
2790
-					if (in_array('preview', $var_mode)) {
2791
-						// basculer sur les criteres de preview dans les boucles
2792
-						if (!defined('_VAR_PREVIEW')) {
2793
-							define('_VAR_PREVIEW', true);
2794
-						}
2795
-						// forcer le calcul
2796
-						if (!defined('_VAR_MODE')) {
2797
-							define('_VAR_MODE', 'calcul');
2798
-						}
2799
-						// et ne pas enregistrer de cache
2800
-						if (!defined('_VAR_NOCACHE')) {
2801
-							define('_VAR_NOCACHE', true);
2802
-						}
2803
-						$var_mode = array_diff($var_mode, array('preview'));
2804
-					}
2805
-					if (in_array('inclure', $var_mode)) {
2806
-						// forcer le compilo et ignorer les caches existants
2807
-						if (!defined('_VAR_MODE')) {
2808
-							define('_VAR_MODE', 'calcul');
2809
-						}
2810
-						if (!defined('_VAR_INCLURE')) {
2811
-							define('_VAR_INCLURE', true);
2812
-						}
2813
-						// et ne pas enregistrer de cache
2814
-						if (!defined('_VAR_NOCACHE')) {
2815
-							define('_VAR_NOCACHE', true);
2816
-						}
2817
-						$var_mode = array_diff($var_mode, array('inclure'));
2818
-					}
2819
-					if (in_array('urls', $var_mode)) {
2820
-						// forcer le compilo et ignorer les caches existants
2821
-						if (!defined('_VAR_MODE')) {
2822
-							define('_VAR_MODE', 'calcul');
2823
-						}
2824
-						if (!defined('_VAR_URLS')) {
2825
-							define('_VAR_URLS', true);
2826
-						}
2827
-						$var_mode = array_diff($var_mode, array('urls'));
2828
-					}
2829
-					if (in_array('images', $var_mode)) {
2830
-						// forcer le compilo et ignorer les caches existants
2831
-						if (!defined('_VAR_MODE')) {
2832
-							define('_VAR_MODE', 'calcul');
2833
-						}
2834
-						// indiquer qu'on doit recalculer les images
2835
-						if (!defined('_VAR_IMAGES')) {
2836
-							define('_VAR_IMAGES', true);
2837
-						}
2838
-						$var_mode = array_diff($var_mode, array('images'));
2839
-					}
2840
-					if (in_array('debug', $var_mode)) {
2841
-						if (!defined('_VAR_MODE')) {
2842
-							define('_VAR_MODE', 'debug');
2843
-						}
2844
-						// et ne pas enregistrer de cache
2845
-						if (!defined('_VAR_NOCACHE')) {
2846
-							define('_VAR_NOCACHE', true);
2847
-						}
2848
-						$var_mode = array_diff($var_mode, array('debug'));
2849
-					}
2850
-					if (count($var_mode) and !defined('_VAR_MODE')) {
2851
-						define('_VAR_MODE', reset($var_mode));
2852
-					}
2853
-					if (isset($GLOBALS['visiteur_session']['nom'])) {
2854
-						spip_log($GLOBALS['visiteur_session']['nom']
2855
-							. " " . _VAR_MODE);
2856
-					}
2857
-				} // pas autorise ?
2858
-				else {
2859
-					// si on n'est pas connecte on se redirige
2860
-					if (!$GLOBALS['visiteur_session']) {
2861
-						include_spip('inc/headers');
2862
-						redirige_par_entete(generer_url_public('login',
2863
-							'url=' . rawurlencode(
2864
-								parametre_url(self(), 'var_mode', $_GET['var_mode'], '&')
2865
-							), true));
2866
-					}
2867
-					// sinon tant pis
2868
-				}
2869
-			}
2870
-		}
2871
-		if (!defined('_VAR_MODE')) {
2872
-			/**
2873
-			 * Indique le mode de calcul ou d'affichage de la page.
2874
-			 * @see init_var_mode()
2875
-			 */
2876
-			define('_VAR_MODE', false);
2877
-		}
2878
-		$done = true;
2879
-	}
2756
+    static $done = false;
2757
+    if (!$done) {
2758
+
2759
+        if (isset($_GET['var_mode'])) {
2760
+            $var_mode = explode(',', $_GET['var_mode']);
2761
+            // tout le monde peut calcul/recalcul
2762
+            if (!defined('_VAR_MODE')) {
2763
+                if (in_array('recalcul', $var_mode)) {
2764
+                    define('_VAR_MODE', 'recalcul');
2765
+                } elseif (in_array('calcul', $var_mode)) {
2766
+                    define('_VAR_MODE', 'calcul');
2767
+                }
2768
+            }
2769
+            $var_mode = array_diff($var_mode, array('calcul', 'recalcul'));
2770
+            if ($var_mode) {
2771
+                include_spip('inc/autoriser');
2772
+                // autoriser preview si preview seulement, et sinon autoriser debug
2773
+                if (autoriser(
2774
+                    ($_GET['var_mode'] == 'preview')
2775
+                        ? 'previsualiser'
2776
+                        : 'debug'
2777
+                )) {
2778
+                    if (in_array('traduction', $var_mode)) {
2779
+                        // forcer le calcul pour passer dans traduire
2780
+                        if (!defined('_VAR_MODE')) {
2781
+                            define('_VAR_MODE', 'calcul');
2782
+                        }
2783
+                        // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
2784
+                        if (!defined('_VAR_NOCACHE')) {
2785
+                            define('_VAR_NOCACHE', true);
2786
+                        }
2787
+                        $var_mode = array_diff($var_mode, array('traduction'));
2788
+                    }
2789
+                    if (in_array('preview', $var_mode)) {
2790
+                        // basculer sur les criteres de preview dans les boucles
2791
+                        if (!defined('_VAR_PREVIEW')) {
2792
+                            define('_VAR_PREVIEW', true);
2793
+                        }
2794
+                        // forcer le calcul
2795
+                        if (!defined('_VAR_MODE')) {
2796
+                            define('_VAR_MODE', 'calcul');
2797
+                        }
2798
+                        // et ne pas enregistrer de cache
2799
+                        if (!defined('_VAR_NOCACHE')) {
2800
+                            define('_VAR_NOCACHE', true);
2801
+                        }
2802
+                        $var_mode = array_diff($var_mode, array('preview'));
2803
+                    }
2804
+                    if (in_array('inclure', $var_mode)) {
2805
+                        // forcer le compilo et ignorer les caches existants
2806
+                        if (!defined('_VAR_MODE')) {
2807
+                            define('_VAR_MODE', 'calcul');
2808
+                        }
2809
+                        if (!defined('_VAR_INCLURE')) {
2810
+                            define('_VAR_INCLURE', true);
2811
+                        }
2812
+                        // et ne pas enregistrer de cache
2813
+                        if (!defined('_VAR_NOCACHE')) {
2814
+                            define('_VAR_NOCACHE', true);
2815
+                        }
2816
+                        $var_mode = array_diff($var_mode, array('inclure'));
2817
+                    }
2818
+                    if (in_array('urls', $var_mode)) {
2819
+                        // forcer le compilo et ignorer les caches existants
2820
+                        if (!defined('_VAR_MODE')) {
2821
+                            define('_VAR_MODE', 'calcul');
2822
+                        }
2823
+                        if (!defined('_VAR_URLS')) {
2824
+                            define('_VAR_URLS', true);
2825
+                        }
2826
+                        $var_mode = array_diff($var_mode, array('urls'));
2827
+                    }
2828
+                    if (in_array('images', $var_mode)) {
2829
+                        // forcer le compilo et ignorer les caches existants
2830
+                        if (!defined('_VAR_MODE')) {
2831
+                            define('_VAR_MODE', 'calcul');
2832
+                        }
2833
+                        // indiquer qu'on doit recalculer les images
2834
+                        if (!defined('_VAR_IMAGES')) {
2835
+                            define('_VAR_IMAGES', true);
2836
+                        }
2837
+                        $var_mode = array_diff($var_mode, array('images'));
2838
+                    }
2839
+                    if (in_array('debug', $var_mode)) {
2840
+                        if (!defined('_VAR_MODE')) {
2841
+                            define('_VAR_MODE', 'debug');
2842
+                        }
2843
+                        // et ne pas enregistrer de cache
2844
+                        if (!defined('_VAR_NOCACHE')) {
2845
+                            define('_VAR_NOCACHE', true);
2846
+                        }
2847
+                        $var_mode = array_diff($var_mode, array('debug'));
2848
+                    }
2849
+                    if (count($var_mode) and !defined('_VAR_MODE')) {
2850
+                        define('_VAR_MODE', reset($var_mode));
2851
+                    }
2852
+                    if (isset($GLOBALS['visiteur_session']['nom'])) {
2853
+                        spip_log($GLOBALS['visiteur_session']['nom']
2854
+                            . " " . _VAR_MODE);
2855
+                    }
2856
+                } // pas autorise ?
2857
+                else {
2858
+                    // si on n'est pas connecte on se redirige
2859
+                    if (!$GLOBALS['visiteur_session']) {
2860
+                        include_spip('inc/headers');
2861
+                        redirige_par_entete(generer_url_public('login',
2862
+                            'url=' . rawurlencode(
2863
+                                parametre_url(self(), 'var_mode', $_GET['var_mode'], '&')
2864
+                            ), true));
2865
+                    }
2866
+                    // sinon tant pis
2867
+                }
2868
+            }
2869
+        }
2870
+        if (!defined('_VAR_MODE')) {
2871
+            /**
2872
+             * Indique le mode de calcul ou d'affichage de la page.
2873
+             * @see init_var_mode()
2874
+             */
2875
+            define('_VAR_MODE', false);
2876
+        }
2877
+        $done = true;
2878
+    }
2880 2879
 }
2881 2880
 
2882 2881
 // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ;
@@ -2884,93 +2883,93 @@  discard block
 block discarded – undo
2884 2883
 // la commande is_readable('chemin/vers/fichier/interdit%00truc_normal')
2885 2884
 // http://code.spip.net/@spip_desinfecte
2886 2885
 function spip_desinfecte(&$t, $deep = true) {
2887
-	static $magic_quotes;
2888
-	if (!isset($magic_quotes)) {
2889
-		$magic_quotes = @get_magic_quotes_gpc();
2890
-	}
2891
-
2892
-	foreach ($t as $key => $val) {
2893
-		if (is_string($t[$key])) {
2894
-			if ($magic_quotes) {
2895
-				$t[$key] = stripslashes($t[$key]);
2896
-			}
2897
-			$t[$key] = str_replace(chr(0), '-', $t[$key]);
2898
-		} // traiter aussi les "texte_plus" de article_edit
2899
-		else {
2900
-			if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') {
2901
-				spip_desinfecte($t[$key], $deep);
2902
-			}
2903
-		}
2904
-	}
2886
+    static $magic_quotes;
2887
+    if (!isset($magic_quotes)) {
2888
+        $magic_quotes = @get_magic_quotes_gpc();
2889
+    }
2890
+
2891
+    foreach ($t as $key => $val) {
2892
+        if (is_string($t[$key])) {
2893
+            if ($magic_quotes) {
2894
+                $t[$key] = stripslashes($t[$key]);
2895
+            }
2896
+            $t[$key] = str_replace(chr(0), '-', $t[$key]);
2897
+        } // traiter aussi les "texte_plus" de article_edit
2898
+        else {
2899
+            if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') {
2900
+                spip_desinfecte($t[$key], $deep);
2901
+            }
2902
+        }
2903
+    }
2905 2904
 }
2906 2905
 
2907 2906
 //  retourne le statut du visiteur s'il s'annonce
2908 2907
 
2909 2908
 // http://code.spip.net/@verifier_visiteur
2910 2909
 function verifier_visiteur() {
2911
-	// Rq: pour que cette fonction marche depuis mes_options
2912
-	// il faut forcer l'init si ce n'est fait
2913
-	// mais on risque de perturber des plugins en initialisant trop tot
2914
-	// certaines constantes
2915
-	@spip_initialisation_core(
2916
-		(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES),
2917
-		(_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES),
2918
-		(_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES),
2919
-		(_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES)
2920
-	);
2921
-
2922
-	// Demarrer une session NON AUTHENTIFIEE si on donne son nom
2923
-	// dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
2924
-	// Attention on separe bien session_nom et nom, pour eviter
2925
-	// les melanges entre donnees SQL et variables plus aleatoires
2926
-	$variables_session = array('session_nom', 'session_email');
2927
-	foreach ($variables_session as $var) {
2928
-		if (_request($var) !== null) {
2929
-			$init = true;
2930
-			break;
2931
-		}
2932
-	}
2933
-	if (isset($init)) {
2934
-		#@spip_initialisation_suite();
2935
-		$session = charger_fonction('session', 'inc');
2936
-		$session();
2937
-		include_spip('inc/texte');
2938
-		foreach ($variables_session as $var) {
2939
-			if (($a = _request($var)) !== null) {
2940
-				$GLOBALS['visiteur_session'][$var] = safehtml($a);
2941
-			}
2942
-		}
2943
-		if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
2944
-			$GLOBALS['visiteur_session']['id_auteur'] = 0;
2945
-		}
2946
-		$session($GLOBALS['visiteur_session']);
2947
-
2948
-		return 0;
2949
-	}
2950
-
2951
-	$h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']);
2952
-	if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) {
2953
-
2954
-		$session = charger_fonction('session', 'inc');
2955
-		if ($session()) {
2956
-			return $GLOBALS['visiteur_session']['statut'];
2957
-		}
2958
-		if ($h and isset($_SERVER['PHP_AUTH_PW'])) {
2959
-			include_spip('inc/auth');
2960
-			$h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
2961
-		}
2962
-		if ($h) {
2963
-			$GLOBALS['visiteur_session'] = $h;
2964
-
2965
-			return $GLOBALS['visiteur_session']['statut'];
2966
-		}
2967
-	}
2968
-
2969
-	// au moins son navigateur nous dit la langue preferee de cet inconnu
2970
-	include_spip('inc/lang');
2971
-	utiliser_langue_visiteur();
2972
-
2973
-	return false;
2910
+    // Rq: pour que cette fonction marche depuis mes_options
2911
+    // il faut forcer l'init si ce n'est fait
2912
+    // mais on risque de perturber des plugins en initialisant trop tot
2913
+    // certaines constantes
2914
+    @spip_initialisation_core(
2915
+        (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES),
2916
+        (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES),
2917
+        (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES),
2918
+        (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES)
2919
+    );
2920
+
2921
+    // Demarrer une session NON AUTHENTIFIEE si on donne son nom
2922
+    // dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
2923
+    // Attention on separe bien session_nom et nom, pour eviter
2924
+    // les melanges entre donnees SQL et variables plus aleatoires
2925
+    $variables_session = array('session_nom', 'session_email');
2926
+    foreach ($variables_session as $var) {
2927
+        if (_request($var) !== null) {
2928
+            $init = true;
2929
+            break;
2930
+        }
2931
+    }
2932
+    if (isset($init)) {
2933
+        #@spip_initialisation_suite();
2934
+        $session = charger_fonction('session', 'inc');
2935
+        $session();
2936
+        include_spip('inc/texte');
2937
+        foreach ($variables_session as $var) {
2938
+            if (($a = _request($var)) !== null) {
2939
+                $GLOBALS['visiteur_session'][$var] = safehtml($a);
2940
+            }
2941
+        }
2942
+        if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
2943
+            $GLOBALS['visiteur_session']['id_auteur'] = 0;
2944
+        }
2945
+        $session($GLOBALS['visiteur_session']);
2946
+
2947
+        return 0;
2948
+    }
2949
+
2950
+    $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']);
2951
+    if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) {
2952
+
2953
+        $session = charger_fonction('session', 'inc');
2954
+        if ($session()) {
2955
+            return $GLOBALS['visiteur_session']['statut'];
2956
+        }
2957
+        if ($h and isset($_SERVER['PHP_AUTH_PW'])) {
2958
+            include_spip('inc/auth');
2959
+            $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
2960
+        }
2961
+        if ($h) {
2962
+            $GLOBALS['visiteur_session'] = $h;
2963
+
2964
+            return $GLOBALS['visiteur_session']['statut'];
2965
+        }
2966
+    }
2967
+
2968
+    // au moins son navigateur nous dit la langue preferee de cet inconnu
2969
+    include_spip('inc/lang');
2970
+    utiliser_langue_visiteur();
2971
+
2972
+    return false;
2974 2973
 }
2975 2974
 
2976 2975
 
@@ -2993,21 +2992,21 @@  discard block
 block discarded – undo
2993 2992
  *     - string Langue utilisée.
2994 2993
  **/
2995 2994
 function lang_select($lang = null) {
2996
-	static $pile_langues = array();
2997
-	if (!function_exists('changer_langue')) {
2998
-		include_spip('inc/lang');
2999
-	}
3000
-	if ($lang === null) {
3001
-		$lang = array_pop($pile_langues);
3002
-	} else {
3003
-		array_push($pile_langues, $GLOBALS['spip_lang']);
3004
-	}
3005
-	if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) {
3006
-		return $lang;
3007
-	}
3008
-	changer_langue($lang);
2995
+    static $pile_langues = array();
2996
+    if (!function_exists('changer_langue')) {
2997
+        include_spip('inc/lang');
2998
+    }
2999
+    if ($lang === null) {
3000
+        $lang = array_pop($pile_langues);
3001
+    } else {
3002
+        array_push($pile_langues, $GLOBALS['spip_lang']);
3003
+    }
3004
+    if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) {
3005
+        return $lang;
3006
+    }
3007
+    changer_langue($lang);
3009 3008
 
3010
-	return $lang;
3009
+    return $lang;
3011 3010
 }
3012 3011
 
3013 3012
 /**
@@ -3024,19 +3023,19 @@  discard block
 block discarded – undo
3024 3023
  *     Identifiant de la session
3025 3024
  **/
3026 3025
 function spip_session($force = false) {
3027
-	static $session;
3028
-	if ($force or !isset($session)) {
3029
-		$s = pipeline('definir_session',
3030
-			$GLOBALS['visiteur_session']
3031
-				? serialize($GLOBALS['visiteur_session'])
3032
-				. '_' . @$_COOKIE['spip_session']
3033
-				: ''
3034
-		);
3035
-		$session = $s ? substr(md5($s), 0, 8) : '';
3036
-	}
3026
+    static $session;
3027
+    if ($force or !isset($session)) {
3028
+        $s = pipeline('definir_session',
3029
+            $GLOBALS['visiteur_session']
3030
+                ? serialize($GLOBALS['visiteur_session'])
3031
+                . '_' . @$_COOKIE['spip_session']
3032
+                : ''
3033
+        );
3034
+        $session = $s ? substr(md5($s), 0, 8) : '';
3035
+    }
3037 3036
 
3038
-	#spip_log('session: '.$session);
3039
-	return $session;
3037
+    #spip_log('session: '.$session);
3038
+    return $session;
3040 3039
 }
3041 3040
 
3042 3041
 
@@ -3055,9 +3054,9 @@  discard block
 block discarded – undo
3055 3054
  *    Lien sur une icone d'aide
3056 3055
  **/
3057 3056
 function aider($aide = '', $distante = false) {
3058
-	$aider = charger_fonction('aide', 'inc', true);
3057
+    $aider = charger_fonction('aide', 'inc', true);
3059 3058
 
3060
-	return $aider ? $aider($aide, '', array(), $distante) : '';
3059
+    return $aider ? $aider($aide, '', array(), $distante) : '';
3061 3060
 }
3062 3061
 
3063 3062
 /**
@@ -3067,13 +3066,13 @@  discard block
 block discarded – undo
3067 3066
  */
3068 3067
 function exec_info_dist() {
3069 3068
 
3070
-	include_spip('inc/autoriser');
3071
-	if (autoriser('webmestre')) {
3072
-		phpinfo();
3073
-	} else {
3074
-		include_spip('inc/filtres');
3075
-		sinon_interdire_acces();
3076
-	}
3069
+    include_spip('inc/autoriser');
3070
+    if (autoriser('webmestre')) {
3071
+        phpinfo();
3072
+    } else {
3073
+        include_spip('inc/filtres');
3074
+        sinon_interdire_acces();
3075
+    }
3077 3076
 }
3078 3077
 
3079 3078
 /**
@@ -3093,13 +3092,13 @@  discard block
 block discarded – undo
3093 3092
  *     - string si $message à false.
3094 3093
  **/
3095 3094
 function erreur_squelette($message = '', $lieu = '') {
3096
-	$debusquer = charger_fonction('debusquer', 'public');
3097
-	if (is_array($lieu)) {
3098
-		include_spip('public/compiler');
3099
-		$lieu = reconstruire_contexte_compil($lieu);
3100
-	}
3095
+    $debusquer = charger_fonction('debusquer', 'public');
3096
+    if (is_array($lieu)) {
3097
+        include_spip('public/compiler');
3098
+        $lieu = reconstruire_contexte_compil($lieu);
3099
+    }
3101 3100
 
3102
-	return $debusquer($message, $lieu);
3101
+    return $debusquer($message, $lieu);
3103 3102
 }
3104 3103
 
3105 3104
 /**
@@ -3136,92 +3135,92 @@  discard block
 block discarded – undo
3136 3135
  *     - ou tableau d'information sur le squelette.
3137 3136
  */
3138 3137
 function recuperer_fond($fond, $contexte = array(), $options = array(), $connect = '') {
3139
-	if (!function_exists('evaluer_fond')) {
3140
-		include_spip('public/assembler');
3141
-	}
3142
-	// assurer la compat avec l'ancienne syntaxe
3143
-	// (trim etait le 3eme argument, par defaut a true)
3144
-	if (!is_array($options)) {
3145
-		$options = array('trim' => $options);
3146
-	}
3147
-	if (!isset($options['trim'])) {
3148
-		$options['trim'] = true;
3149
-	}
3150
-
3151
-	if (isset($contexte['connect'])) {
3152
-		$connect = $contexte['connect'];
3153
-		unset($contexte['connect']);
3154
-	}
3155
-
3156
-	$texte = "";
3157
-	$pages = array();
3158
-	$lang_select = '';
3159
-	if (!isset($options['etoile']) or !$options['etoile']) {
3160
-		// Si on a inclus sans fixer le critere de lang, on prend la langue courante
3161
-		if (!isset($contexte['lang'])) {
3162
-			$contexte['lang'] = $GLOBALS['spip_lang'];
3163
-		}
3164
-
3165
-		if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) {
3166
-			$lang_select = lang_select($contexte['lang']);
3167
-		}
3168
-	}
3169
-
3170
-	if (!isset($GLOBALS['_INC_PUBLIC'])) {
3171
-		$GLOBALS['_INC_PUBLIC'] = 0;
3172
-	}
3173
-
3174
-	$GLOBALS['_INC_PUBLIC']++;
3175
-
3176
-
3177
-	foreach (is_array($fond) ? $fond : array($fond) as $f) {
3178
-		$page = evaluer_fond($f, $contexte, $connect);
3179
-		if ($page === '') {
3180
-			$c = isset($options['compil']) ? $options['compil'] : '';
3181
-			$a = array('fichier' => $fond);
3182
-			$erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
3183
-			erreur_squelette($erreur, $c);
3184
-			// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
3185
-			$page = array('texte' => '', 'erreur' => $erreur);
3186
-		}
3187
-
3188
-		$page = pipeline('recuperer_fond', array(
3189
-			'args' => array('fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect),
3190
-			'data' => $page
3191
-		));
3192
-		if (isset($options['ajax']) and $options['ajax']) {
3193
-			if (!function_exists('encoder_contexte_ajax')) {
3194
-				include_spip('inc/filtres');
3195
-			}
3196
-			$page['texte'] = encoder_contexte_ajax(
3197
-				array_merge(
3198
-					$contexte,
3199
-					array('fond' => $f),
3200
-					($connect ? array('connect' => $connect) : array())
3201
-				),
3202
-				'',
3203
-				$page['texte'],
3204
-				$options['ajax']
3205
-			);
3206
-		}
3207
-
3208
-		if (isset($options['raw']) and $options['raw']) {
3209
-			$pages[] = $page;
3210
-		} else {
3211
-			$texte .= $options['trim'] ? rtrim($page['texte']) : $page['texte'];
3212
-		}
3213
-	}
3214
-
3215
-	$GLOBALS['_INC_PUBLIC']--;
3216
-
3217
-	if ($lang_select) {
3218
-		lang_select();
3219
-	}
3220
-	if (isset($options['raw']) and $options['raw']) {
3221
-		return is_array($fond) ? $pages : reset($pages);
3222
-	} else {
3223
-		return $options['trim'] ? ltrim($texte) : $texte;
3224
-	}
3138
+    if (!function_exists('evaluer_fond')) {
3139
+        include_spip('public/assembler');
3140
+    }
3141
+    // assurer la compat avec l'ancienne syntaxe
3142
+    // (trim etait le 3eme argument, par defaut a true)
3143
+    if (!is_array($options)) {
3144
+        $options = array('trim' => $options);
3145
+    }
3146
+    if (!isset($options['trim'])) {
3147
+        $options['trim'] = true;
3148
+    }
3149
+
3150
+    if (isset($contexte['connect'])) {
3151
+        $connect = $contexte['connect'];
3152
+        unset($contexte['connect']);
3153
+    }
3154
+
3155
+    $texte = "";
3156
+    $pages = array();
3157
+    $lang_select = '';
3158
+    if (!isset($options['etoile']) or !$options['etoile']) {
3159
+        // Si on a inclus sans fixer le critere de lang, on prend la langue courante
3160
+        if (!isset($contexte['lang'])) {
3161
+            $contexte['lang'] = $GLOBALS['spip_lang'];
3162
+        }
3163
+
3164
+        if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) {
3165
+            $lang_select = lang_select($contexte['lang']);
3166
+        }
3167
+    }
3168
+
3169
+    if (!isset($GLOBALS['_INC_PUBLIC'])) {
3170
+        $GLOBALS['_INC_PUBLIC'] = 0;
3171
+    }
3172
+
3173
+    $GLOBALS['_INC_PUBLIC']++;
3174
+
3175
+
3176
+    foreach (is_array($fond) ? $fond : array($fond) as $f) {
3177
+        $page = evaluer_fond($f, $contexte, $connect);
3178
+        if ($page === '') {
3179
+            $c = isset($options['compil']) ? $options['compil'] : '';
3180
+            $a = array('fichier' => $fond);
3181
+            $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
3182
+            erreur_squelette($erreur, $c);
3183
+            // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
3184
+            $page = array('texte' => '', 'erreur' => $erreur);
3185
+        }
3186
+
3187
+        $page = pipeline('recuperer_fond', array(
3188
+            'args' => array('fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect),
3189
+            'data' => $page
3190
+        ));
3191
+        if (isset($options['ajax']) and $options['ajax']) {
3192
+            if (!function_exists('encoder_contexte_ajax')) {
3193
+                include_spip('inc/filtres');
3194
+            }
3195
+            $page['texte'] = encoder_contexte_ajax(
3196
+                array_merge(
3197
+                    $contexte,
3198
+                    array('fond' => $f),
3199
+                    ($connect ? array('connect' => $connect) : array())
3200
+                ),
3201
+                '',
3202
+                $page['texte'],
3203
+                $options['ajax']
3204
+            );
3205
+        }
3206
+
3207
+        if (isset($options['raw']) and $options['raw']) {
3208
+            $pages[] = $page;
3209
+        } else {
3210
+            $texte .= $options['trim'] ? rtrim($page['texte']) : $page['texte'];
3211
+        }
3212
+    }
3213
+
3214
+    $GLOBALS['_INC_PUBLIC']--;
3215
+
3216
+    if ($lang_select) {
3217
+        lang_select();
3218
+    }
3219
+    if (isset($options['raw']) and $options['raw']) {
3220
+        return is_array($fond) ? $pages : reset($pages);
3221
+    } else {
3222
+        return $options['trim'] ? ltrim($texte) : $texte;
3223
+    }
3225 3224
 }
3226 3225
 
3227 3226
 /**
@@ -3231,7 +3230,7 @@  discard block
 block discarded – undo
3231 3230
  * @return string
3232 3231
  */
3233 3232
 function trouve_modele($nom) {
3234
-	return trouver_fond($nom, 'modeles/');
3233
+    return trouver_fond($nom, 'modeles/');
3235 3234
 }
3236 3235
 
3237 3236
 /**
@@ -3247,21 +3246,21 @@  discard block
 block discarded – undo
3247 3246
  * @return array|string
3248 3247
  */
3249 3248
 function trouver_fond($nom, $dir = '', $pathinfo = false) {
3250
-	$f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : '');
3251
-	if (!$pathinfo) {
3252
-		return $f;
3253
-	}
3254
-	// renvoyer un tableau detaille si $pathinfo==true
3255
-	$p = pathinfo($f);
3256
-	if (!isset($p['extension']) or !$p['extension']) {
3257
-		$p['extension'] = _EXTENSION_SQUELETTES;
3258
-	}
3259
-	if (!isset($p['extension']) or !$p['filename']) {
3260
-		$p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : '');
3261
-	}
3262
-	$p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : '');
3249
+    $f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : '');
3250
+    if (!$pathinfo) {
3251
+        return $f;
3252
+    }
3253
+    // renvoyer un tableau detaille si $pathinfo==true
3254
+    $p = pathinfo($f);
3255
+    if (!isset($p['extension']) or !$p['extension']) {
3256
+        $p['extension'] = _EXTENSION_SQUELETTES;
3257
+    }
3258
+    if (!isset($p['extension']) or !$p['filename']) {
3259
+        $p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : '');
3260
+    }
3261
+    $p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : '');
3263 3262
 
3264
-	return $p;
3263
+    return $p;
3265 3264
 }
3266 3265
 
3267 3266
 /**
@@ -3282,24 +3281,24 @@  discard block
 block discarded – undo
3282 3281
  *     Nom de l'exec, sinon chaîne vide.
3283 3282
  **/
3284 3283
 function tester_url_ecrire($nom) {
3285
-	static $exec = array();
3286
-	if (isset($exec[$nom])) {
3287
-		return $exec[$nom];
3288
-	}
3289
-	// tester si c'est une page en squelette
3290
-	if (trouver_fond($nom, 'prive/squelettes/contenu/')) {
3291
-		return $exec[$nom] = 'fond';
3292
-	} // compat skels orthogonaux version precedente
3293
-	elseif (trouver_fond($nom, 'prive/exec/')) {
3294
-		return $exec[$nom] = 'fond_monobloc';
3295
-	} // echafaudage d'un fond !
3296
-	elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) {
3297
-		return $exec[$nom] = 'fond';
3298
-	}
3299
-	// attention, il ne faut pas inclure l'exec ici
3300
-	// car sinon #URL_ECRIRE provoque des inclusions
3301
-	// et des define intrusifs potentiels
3302
-	return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : '');
3284
+    static $exec = array();
3285
+    if (isset($exec[$nom])) {
3286
+        return $exec[$nom];
3287
+    }
3288
+    // tester si c'est une page en squelette
3289
+    if (trouver_fond($nom, 'prive/squelettes/contenu/')) {
3290
+        return $exec[$nom] = 'fond';
3291
+    } // compat skels orthogonaux version precedente
3292
+    elseif (trouver_fond($nom, 'prive/exec/')) {
3293
+        return $exec[$nom] = 'fond_monobloc';
3294
+    } // echafaudage d'un fond !
3295
+    elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) {
3296
+        return $exec[$nom] = 'fond';
3297
+    }
3298
+    // attention, il ne faut pas inclure l'exec ici
3299
+    // car sinon #URL_ECRIRE provoque des inclusions
3300
+    // et des define intrusifs potentiels
3301
+    return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : '');
3303 3302
 }
3304 3303
 
3305 3304
 
@@ -3315,10 +3314,10 @@  discard block
 block discarded – undo
3315 3314
  * @return bool true si le module est chargé
3316 3315
  **/
3317 3316
 function charger_php_extension($module) {
3318
-	if (extension_loaded($module)) {
3319
-		return true;
3320
-	}
3321
-	return false;
3317
+    if (extension_loaded($module)) {
3318
+        return true;
3319
+    }
3320
+    return false;
3322 3321
 }
3323 3322
 
3324 3323
 
@@ -3329,8 +3328,8 @@  discard block
 block discarded – undo
3329 3328
  *     true si et seulement si la configuration autorise le code HTML5 sur le site public
3330 3329
  **/
3331 3330
 function html5_permis() {
3332
-	return (isset($GLOBALS['meta']['version_html_max'])
3333
-		and ('html5' == $GLOBALS['meta']['version_html_max']));
3331
+    return (isset($GLOBALS['meta']['version_html_max'])
3332
+        and ('html5' == $GLOBALS['meta']['version_html_max']));
3334 3333
 }
3335 3334
 
3336 3335
 /*
@@ -3348,7 +3347,7 @@  discard block
 block discarded – undo
3348 3347
  * @return mixed Valeur de la meta.
3349 3348
  **/
3350 3349
 function lire_meta($nom) {
3351
-	return isset($GLOBALS['meta'][$nom]) ? $GLOBALS['meta'][$nom] : null;
3350
+    return isset($GLOBALS['meta'][$nom]) ? $GLOBALS['meta'][$nom] : null;
3352 3351
 }
3353 3352
 
3354 3353
 
@@ -3370,128 +3369,128 @@  discard block
 block discarded – undo
3370 3369
  * @param string $statut
3371 3370
  */
3372 3371
 function avertir_auteurs($nom, $message, $statut = '') {
3373
-	$alertes = $GLOBALS['meta']['message_alertes_auteurs'];
3374
-	if (!$alertes
3375
-		or !is_array($alertes = unserialize($alertes))
3376
-	) {
3377
-		$alertes = array();
3378
-	}
3372
+    $alertes = $GLOBALS['meta']['message_alertes_auteurs'];
3373
+    if (!$alertes
3374
+        or !is_array($alertes = unserialize($alertes))
3375
+    ) {
3376
+        $alertes = array();
3377
+    }
3379 3378
 
3380
-	if (!isset($alertes[$statut])) {
3381
-		$alertes[$statut] = array();
3382
-	}
3383
-	$alertes[$statut][$nom] = $message;
3384
-	ecrire_meta("message_alertes_auteurs", serialize($alertes));
3379
+    if (!isset($alertes[$statut])) {
3380
+        $alertes[$statut] = array();
3381
+    }
3382
+    $alertes[$statut][$nom] = $message;
3383
+    ecrire_meta("message_alertes_auteurs", serialize($alertes));
3385 3384
 }
3386 3385
 
3387 3386
 if (PHP_VERSION_ID < 50500) {
3388
-	if (!function_exists('array_column')) {
3389
-		/**
3390
-		 * Returns the values from a single column of the input array, identified by
3391
-		 * the $columnKey.
3392
-		 *
3393
-		 * Optionally, you may provide an $indexKey to index the values in the returned
3394
-		 * array by the values from the $indexKey column in the input array.
3395
-		 *
3396
-		 * @link http://php.net/manual/fr/function.array-column.php
3397
-		 * @link https://github.com/ramsey/array_column/blob/master/src/array_column.php
3398
-		 * @copyright Copyright (c) Ben Ramsey (http://benramsey.com)
3399
-		 * @license http://opensource.org/licenses/MIT MIT
3400
-		 *
3401
-		 * @param array $input A multi-dimensional array (record set) from which to pull
3402
-		 *                     a column of values.
3403
-		 * @param mixed $columnKey The column of values to return. This value may be the
3404
-		 *                         integer key of the column you wish to retrieve, or it
3405
-		 *                         may be the string key name for an associative array.
3406
-		 * @param mixed $indexKey (Optional.) The column to use as the index/keys for
3407
-		 *                        the returned array. This value may be the integer key
3408
-		 *                        of the column, or it may be the string key name.
3409
-		 * @return array
3410
-		 */
3411
-		function array_column($input = null, $columnKey = null, $indexKey = null)
3412
-		{
3413
-			// Using func_get_args() in order to check for proper number of
3414
-			// parameters and trigger errors exactly as the built-in array_column()
3415
-			// does in PHP 5.5.
3416
-			$argc = func_num_args();
3417
-			$params = func_get_args();
3418
-
3419
-			if ($argc < 2) {
3420
-				trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
3421
-				return null;
3422
-			}
3423
-
3424
-			if (!is_array($params[0])) {
3425
-				trigger_error(
3426
-					'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given',
3427
-					E_USER_WARNING
3428
-				);
3429
-				return null;
3430
-			}
3431
-
3432
-			if (!is_int($params[1])
3433
-				&& !is_float($params[1])
3434
-				&& !is_string($params[1])
3435
-				&& $params[1] !== null
3436
-				&& !(is_object($params[1]) && method_exists($params[1], '__toString'))
3437
-			) {
3438
-				trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
3439
-				return false;
3440
-			}
3441
-
3442
-			if (isset($params[2])
3443
-				&& !is_int($params[2])
3444
-				&& !is_float($params[2])
3445
-				&& !is_string($params[2])
3446
-				&& !(is_object($params[2]) && method_exists($params[2], '__toString'))
3447
-			) {
3448
-				trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
3449
-				return false;
3450
-			}
3451
-
3452
-			$paramsInput = $params[0];
3453
-			$paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;
3454
-
3455
-			$paramsIndexKey = null;
3456
-			if (isset($params[2])) {
3457
-				if (is_float($params[2]) || is_int($params[2])) {
3458
-					$paramsIndexKey = (int) $params[2];
3459
-				} else {
3460
-					$paramsIndexKey = (string) $params[2];
3461
-				}
3462
-			}
3463
-
3464
-			$resultArray = array();
3465
-
3466
-			foreach ($paramsInput as $row) {
3467
-				$key = $value = null;
3468
-				$keySet = $valueSet = false;
3469
-
3470
-				if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
3471
-					$keySet = true;
3472
-					$key = (string) $row[$paramsIndexKey];
3473
-				}
3474
-
3475
-				if ($paramsColumnKey === null) {
3476
-					$valueSet = true;
3477
-					$value = $row;
3478
-				} elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
3479
-					$valueSet = true;
3480
-					$value = $row[$paramsColumnKey];
3481
-				}
3482
-
3483
-				if ($valueSet) {
3484
-					if ($keySet) {
3485
-						$resultArray[$key] = $value;
3486
-					} else {
3487
-						$resultArray[] = $value;
3488
-					}
3489
-				}
3490
-
3491
-			}
3492
-
3493
-			return $resultArray;
3494
-		}
3495
-
3496
-	}
3387
+    if (!function_exists('array_column')) {
3388
+        /**
3389
+         * Returns the values from a single column of the input array, identified by
3390
+         * the $columnKey.
3391
+         *
3392
+         * Optionally, you may provide an $indexKey to index the values in the returned
3393
+         * array by the values from the $indexKey column in the input array.
3394
+         *
3395
+         * @link http://php.net/manual/fr/function.array-column.php
3396
+         * @link https://github.com/ramsey/array_column/blob/master/src/array_column.php
3397
+         * @copyright Copyright (c) Ben Ramsey (http://benramsey.com)
3398
+         * @license http://opensource.org/licenses/MIT MIT
3399
+         *
3400
+         * @param array $input A multi-dimensional array (record set) from which to pull
3401
+         *                     a column of values.
3402
+         * @param mixed $columnKey The column of values to return. This value may be the
3403
+         *                         integer key of the column you wish to retrieve, or it
3404
+         *                         may be the string key name for an associative array.
3405
+         * @param mixed $indexKey (Optional.) The column to use as the index/keys for
3406
+         *                        the returned array. This value may be the integer key
3407
+         *                        of the column, or it may be the string key name.
3408
+         * @return array
3409
+         */
3410
+        function array_column($input = null, $columnKey = null, $indexKey = null)
3411
+        {
3412
+            // Using func_get_args() in order to check for proper number of
3413
+            // parameters and trigger errors exactly as the built-in array_column()
3414
+            // does in PHP 5.5.
3415
+            $argc = func_num_args();
3416
+            $params = func_get_args();
3417
+
3418
+            if ($argc < 2) {
3419
+                trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
3420
+                return null;
3421
+            }
3422
+
3423
+            if (!is_array($params[0])) {
3424
+                trigger_error(
3425
+                    'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given',
3426
+                    E_USER_WARNING
3427
+                );
3428
+                return null;
3429
+            }
3430
+
3431
+            if (!is_int($params[1])
3432
+                && !is_float($params[1])
3433
+                && !is_string($params[1])
3434
+                && $params[1] !== null
3435
+                && !(is_object($params[1]) && method_exists($params[1], '__toString'))
3436
+            ) {
3437
+                trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
3438
+                return false;
3439
+            }
3440
+
3441
+            if (isset($params[2])
3442
+                && !is_int($params[2])
3443
+                && !is_float($params[2])
3444
+                && !is_string($params[2])
3445
+                && !(is_object($params[2]) && method_exists($params[2], '__toString'))
3446
+            ) {
3447
+                trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
3448
+                return false;
3449
+            }
3450
+
3451
+            $paramsInput = $params[0];
3452
+            $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;
3453
+
3454
+            $paramsIndexKey = null;
3455
+            if (isset($params[2])) {
3456
+                if (is_float($params[2]) || is_int($params[2])) {
3457
+                    $paramsIndexKey = (int) $params[2];
3458
+                } else {
3459
+                    $paramsIndexKey = (string) $params[2];
3460
+                }
3461
+            }
3462
+
3463
+            $resultArray = array();
3464
+
3465
+            foreach ($paramsInput as $row) {
3466
+                $key = $value = null;
3467
+                $keySet = $valueSet = false;
3468
+
3469
+                if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
3470
+                    $keySet = true;
3471
+                    $key = (string) $row[$paramsIndexKey];
3472
+                }
3473
+
3474
+                if ($paramsColumnKey === null) {
3475
+                    $valueSet = true;
3476
+                    $value = $row;
3477
+                } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
3478
+                    $valueSet = true;
3479
+                    $value = $row[$paramsColumnKey];
3480
+                }
3481
+
3482
+                if ($valueSet) {
3483
+                    if ($keySet) {
3484
+                        $resultArray[$key] = $value;
3485
+                    } else {
3486
+                        $resultArray[] = $value;
3487
+                    }
3488
+                }
3489
+
3490
+            }
3491
+
3492
+            return $resultArray;
3493
+        }
3494
+
3495
+    }
3497 3496
 }
Please login to merge, or discard this patch.
ecrire/public/assembler.php 1 patch
Indentation   +532 added lines, -532 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
 // http://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
 // http://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
 // http://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,12 +346,12 @@  discard block
 block discarded – undo
346 346
 // 4: langue
347 347
 
348 348
 function inserer_balise_dynamique($contexte_exec, $contexte_compil) {
349
-	if (!is_array($contexte_exec)) {
350
-		echo $contexte_exec;
351
-	} // message d'erreur etc
352
-	else {
353
-		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
354
-	}
349
+    if (!is_array($contexte_exec)) {
350
+        echo $contexte_exec;
351
+    } // message d'erreur etc
352
+    else {
353
+        inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
354
+    }
355 355
 }
356 356
 
357 357
 /**
@@ -366,124 +366,124 @@  discard block
 block discarded – undo
366 366
  * @return string
367 367
  */
368 368
 function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = array()) {
369
-	if (is_array($texte)) {
370
-
371
-		list($fond, $delainc, $contexte_inclus) = $texte;
372
-
373
-		// delais a l'ancienne, c'est pratiquement mort
374
-		$d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : null;
375
-		$GLOBALS['delais'] = $delainc;
376
-
377
-		$page = recuperer_fond($fond, $contexte_inclus,
378
-			array('trim' => false, 'raw' => true, 'compil' => $contexte_compil));
379
-
380
-		$texte = $page['texte'];
381
-
382
-		$GLOBALS['delais'] = $d;
383
-		// Faire remonter les entetes
384
-		if (is_array($page['entetes'])) {
385
-			// mais pas toutes
386
-			unset($page['entetes']['X-Spip-Cache']);
387
-			unset($page['entetes']['Content-Type']);
388
-			if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
389
-				if (!is_array($GLOBALS['page']['entetes'])) {
390
-					$GLOBALS['page']['entetes'] = array();
391
-				}
392
-				$GLOBALS['page']['entetes'] =
393
-					array_merge($GLOBALS['page']['entetes'], $page['entetes']);
394
-			}
395
-		}
396
-		// _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
397
-		if (isset($page['contexte']['_pipelines'])
398
-			and is_array($page['contexte']['_pipelines'])
399
-			and count($page['contexte']['_pipelines'])
400
-		) {
401
-			foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
402
-				$args['contexte'] = $page['contexte'];
403
-				unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
404
-				$texte = pipeline(
405
-					$pipe,
406
-					array(
407
-						'data' => $texte,
408
-						'args' => $args
409
-					),
410
-					false
411
-				);
412
-			}
413
-		}
414
-	}
415
-
416
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
417
-		// compatibilite : avant on donnait le numero de ligne ou rien.
418
-		$ligne = intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
419
-		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
420
-	}
421
-	if ($echo) {
422
-		echo $texte;
423
-	} else {
424
-		return $texte;
425
-	}
369
+    if (is_array($texte)) {
370
+
371
+        list($fond, $delainc, $contexte_inclus) = $texte;
372
+
373
+        // delais a l'ancienne, c'est pratiquement mort
374
+        $d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : null;
375
+        $GLOBALS['delais'] = $delainc;
376
+
377
+        $page = recuperer_fond($fond, $contexte_inclus,
378
+            array('trim' => false, 'raw' => true, 'compil' => $contexte_compil));
379
+
380
+        $texte = $page['texte'];
381
+
382
+        $GLOBALS['delais'] = $d;
383
+        // Faire remonter les entetes
384
+        if (is_array($page['entetes'])) {
385
+            // mais pas toutes
386
+            unset($page['entetes']['X-Spip-Cache']);
387
+            unset($page['entetes']['Content-Type']);
388
+            if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
389
+                if (!is_array($GLOBALS['page']['entetes'])) {
390
+                    $GLOBALS['page']['entetes'] = array();
391
+                }
392
+                $GLOBALS['page']['entetes'] =
393
+                    array_merge($GLOBALS['page']['entetes'], $page['entetes']);
394
+            }
395
+        }
396
+        // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
397
+        if (isset($page['contexte']['_pipelines'])
398
+            and is_array($page['contexte']['_pipelines'])
399
+            and count($page['contexte']['_pipelines'])
400
+        ) {
401
+            foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
402
+                $args['contexte'] = $page['contexte'];
403
+                unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
404
+                $texte = pipeline(
405
+                    $pipe,
406
+                    array(
407
+                        'data' => $texte,
408
+                        'args' => $args
409
+                    ),
410
+                    false
411
+                );
412
+            }
413
+        }
414
+    }
415
+
416
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
417
+        // compatibilite : avant on donnait le numero de ligne ou rien.
418
+        $ligne = intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
419
+        $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
420
+    }
421
+    if ($echo) {
422
+        echo $texte;
423
+    } else {
424
+        return $texte;
425
+    }
426 426
 }
427 427
 
428 428
 // http://code.spip.net/@message_page_indisponible
429 429
 function message_page_indisponible($page, $contexte) {
430
-	static $deja = false;
431
-	if ($deja) {
432
-		return "erreur";
433
-	}
434
-	$codes = array(
435
-		'404' => '404 Not Found',
436
-		'503' => '503 Service Unavailable',
437
-	);
438
-
439
-	$contexte['status'] = ($page !== false) ? '404' : '503';
440
-	$contexte['code'] = $codes[$contexte['status']];
441
-	$contexte['fond'] = '404'; // gere les 2 erreurs
442
-	if (!isset($contexte['lang'])) {
443
-		$contexte['lang'] = $GLOBALS['spip_lang'];
444
-	}
445
-
446
-	$deja = true;
447
-	// passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
448
-	// ex restriction d'acces => 401
449
-	$contexte = pipeline('page_indisponible', $contexte);
450
-
451
-	// produire la page d'erreur
452
-	$page = inclure_page($contexte['fond'], $contexte);
453
-	if (!$page) {
454
-		$page = inclure_page('404', $contexte);
455
-	}
456
-	$page['status'] = $contexte['status'];
457
-
458
-	return $page;
430
+    static $deja = false;
431
+    if ($deja) {
432
+        return "erreur";
433
+    }
434
+    $codes = array(
435
+        '404' => '404 Not Found',
436
+        '503' => '503 Service Unavailable',
437
+    );
438
+
439
+    $contexte['status'] = ($page !== false) ? '404' : '503';
440
+    $contexte['code'] = $codes[$contexte['status']];
441
+    $contexte['fond'] = '404'; // gere les 2 erreurs
442
+    if (!isset($contexte['lang'])) {
443
+        $contexte['lang'] = $GLOBALS['spip_lang'];
444
+    }
445
+
446
+    $deja = true;
447
+    // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
448
+    // ex restriction d'acces => 401
449
+    $contexte = pipeline('page_indisponible', $contexte);
450
+
451
+    // produire la page d'erreur
452
+    $page = inclure_page($contexte['fond'], $contexte);
453
+    if (!$page) {
454
+        $page = inclure_page('404', $contexte);
455
+    }
456
+    $page['status'] = $contexte['status'];
457
+
458
+    return $page;
459 459
 }
460 460
 
461 461
 // temporairement ici : a mettre dans le futur inc/modeles
462 462
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
463 463
 // http://code.spip.net/@creer_contexte_de_modele
464 464
 function creer_contexte_de_modele($args) {
465
-	$contexte = array();
466
-	foreach ($args as $var => $val) {
467
-		if (is_int($var)) { // argument pas formate
468
-			if (in_array($val, array('left', 'right', 'center'))) {
469
-				$var = 'align';
470
-				$contexte[$var] = $val;
471
-			} else {
472
-				$args = explode('=', $val);
473
-				if (count($args) >= 2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
474
-				{
475
-					$contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
476
-				} else // notation abregee
477
-				{
478
-					$contexte[trim($val)] = trim($val);
479
-				}
480
-			}
481
-		} else {
482
-			$contexte[$var] = $val;
483
-		}
484
-	}
485
-
486
-	return $contexte;
465
+    $contexte = array();
466
+    foreach ($args as $var => $val) {
467
+        if (is_int($var)) { // argument pas formate
468
+            if (in_array($val, array('left', 'right', 'center'))) {
469
+                $var = 'align';
470
+                $contexte[$var] = $val;
471
+            } else {
472
+                $args = explode('=', $val);
473
+                if (count($args) >= 2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
474
+                {
475
+                    $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
476
+                } else // notation abregee
477
+                {
478
+                    $contexte[trim($val)] = trim($val);
479
+                }
480
+            }
481
+        } else {
482
+            $contexte[$var] = $val;
483
+        }
484
+    }
485
+
486
+    return $contexte;
487 487
 }
488 488
 
489 489
 /**
@@ -502,94 +502,94 @@  discard block
 block discarded – undo
502 502
  */
503 503
 function inclure_modele($type, $id, $params, $lien, $connect = '', $env = array()) {
504 504
 
505
-	static $compteur;
506
-	if (++$compteur > 10) {
507
-		return '';
508
-	} # ne pas boucler indefiniment
509
-
510
-	$type = strtolower($type);
511
-
512
-	$fond = $class = '';
513
-
514
-	$params = array_filter(explode('|', $params));
515
-	if ($params) {
516
-		$soustype = current($params);
517
-		$soustype = strtolower(trim($soustype));
518
-		if (in_array($soustype, array('left', 'right', 'center', 'ajax'))) {
519
-			$soustype = next($params);
520
-			$soustype = strtolower($soustype);
521
-		}
522
-
523
-		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
524
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
525
-				$fond = '';
526
-				$class = $soustype;
527
-			}
528
-			// enlever le sous type des params
529
-			$params = array_diff($params, array($soustype));
530
-		}
531
-	}
532
-
533
-	// Si ca marche pas en precisant le sous-type, prendre le type
534
-	if (!$fond and !trouve_modele($fond = $type)) {
535
-		spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
536
-
537
-		return false;
538
-	}
539
-	$fond = 'modeles/' . $fond;
540
-	// Creer le contexte
541
-	$contexte = $env;
542
-	$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
543
-
544
-	// Le numero du modele est mis dans l'environnement
545
-	// d'une part sous l'identifiant "id"
546
-	// et d'autre part sous l'identifiant de la cle primaire
547
-	// par la fonction id_table_objet,
548
-	// (<article1> =>> article =>> id_article =>> id_article=1)
549
-	$_id = id_table_objet($type);
550
-	$contexte['id'] = $contexte[$_id] = $id;
551
-
552
-	if (isset($class)) {
553
-		$contexte['class'] = $class;
554
-	}
555
-
556
-	// Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
557
-	if ($lien) {
558
-		# un eventuel guillemet (") sera reechappe par #ENV
559
-		$contexte['lien'] = str_replace("&quot;", '"', $lien['href']);
560
-		$contexte['lien_class'] = $lien['class'];
561
-		$contexte['lien_mime'] = $lien['mime'];
562
-		$contexte['lien_title'] = $lien['title'];
563
-		$contexte['lien_hreflang'] = $lien['hreflang'];
564
-	}
565
-
566
-	// Traiter les parametres
567
-	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
568
-	$arg_list = creer_contexte_de_modele($params);
569
-	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
570
-	$contexte = array_merge($contexte, $arg_list);
571
-
572
-	// Appliquer le modele avec le contexte
573
-	$retour = recuperer_fond($fond, $contexte, array(), $connect);
574
-
575
-	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
576
-	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
577
-	// sinon, s'il y a un lien, on l'ajoute classiquement
578
-	if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
579
-		'spip_lien_ok')) {
580
-		$retour = inserer_attribut($retour, 'class',
581
-			trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
582
-	} else {
583
-		if ($lien) {
584
-			$retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . "</a>";
585
-		}
586
-	}
587
-
588
-	$compteur--;
589
-
590
-	return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
591
-		? encoder_contexte_ajax($contexte, '', $retour)
592
-		: $retour;
505
+    static $compteur;
506
+    if (++$compteur > 10) {
507
+        return '';
508
+    } # ne pas boucler indefiniment
509
+
510
+    $type = strtolower($type);
511
+
512
+    $fond = $class = '';
513
+
514
+    $params = array_filter(explode('|', $params));
515
+    if ($params) {
516
+        $soustype = current($params);
517
+        $soustype = strtolower(trim($soustype));
518
+        if (in_array($soustype, array('left', 'right', 'center', 'ajax'))) {
519
+            $soustype = next($params);
520
+            $soustype = strtolower($soustype);
521
+        }
522
+
523
+        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
524
+            if (!trouve_modele($fond = ($type . '_' . $soustype))) {
525
+                $fond = '';
526
+                $class = $soustype;
527
+            }
528
+            // enlever le sous type des params
529
+            $params = array_diff($params, array($soustype));
530
+        }
531
+    }
532
+
533
+    // Si ca marche pas en precisant le sous-type, prendre le type
534
+    if (!$fond and !trouve_modele($fond = $type)) {
535
+        spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
536
+
537
+        return false;
538
+    }
539
+    $fond = 'modeles/' . $fond;
540
+    // Creer le contexte
541
+    $contexte = $env;
542
+    $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
543
+
544
+    // Le numero du modele est mis dans l'environnement
545
+    // d'une part sous l'identifiant "id"
546
+    // et d'autre part sous l'identifiant de la cle primaire
547
+    // par la fonction id_table_objet,
548
+    // (<article1> =>> article =>> id_article =>> id_article=1)
549
+    $_id = id_table_objet($type);
550
+    $contexte['id'] = $contexte[$_id] = $id;
551
+
552
+    if (isset($class)) {
553
+        $contexte['class'] = $class;
554
+    }
555
+
556
+    // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
557
+    if ($lien) {
558
+        # un eventuel guillemet (") sera reechappe par #ENV
559
+        $contexte['lien'] = str_replace("&quot;", '"', $lien['href']);
560
+        $contexte['lien_class'] = $lien['class'];
561
+        $contexte['lien_mime'] = $lien['mime'];
562
+        $contexte['lien_title'] = $lien['title'];
563
+        $contexte['lien_hreflang'] = $lien['hreflang'];
564
+    }
565
+
566
+    // Traiter les parametres
567
+    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
568
+    $arg_list = creer_contexte_de_modele($params);
569
+    $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
570
+    $contexte = array_merge($contexte, $arg_list);
571
+
572
+    // Appliquer le modele avec le contexte
573
+    $retour = recuperer_fond($fond, $contexte, array(), $connect);
574
+
575
+    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
576
+    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
577
+    // sinon, s'il y a un lien, on l'ajoute classiquement
578
+    if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
579
+        'spip_lien_ok')) {
580
+        $retour = inserer_attribut($retour, 'class',
581
+            trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
582
+    } else {
583
+        if ($lien) {
584
+            $retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . "</a>";
585
+        }
586
+    }
587
+
588
+    $compteur--;
589
+
590
+    return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
591
+        ? encoder_contexte_ajax($contexte, '', $retour)
592
+        : $retour;
593 593
 }
594 594
 
595 595
 // Un inclure_page qui marche aussi pour l'espace prive
@@ -599,92 +599,92 @@  discard block
 block discarded – undo
599 599
 // http://code.spip.net/@evaluer_fond
600 600
 function evaluer_fond($fond, $contexte = array(), $connect = null) {
601 601
 
602
-	$page = inclure_page($fond, $contexte, $connect);
603
-
604
-	if (!$page) {
605
-		return $page;
606
-	}
607
-	// eval $page et affecte $res
608
-	include _ROOT_RESTREINT . "public/evaluer_page.php";
609
-
610
-	// Lever un drapeau (global) si le fond utilise #SESSION
611
-	// a destination de public/parametrer
612
-	// pour remonter vers les inclusions appelantes
613
-	// il faut bien lever ce drapeau apres avoir evalue le fond
614
-	// pour ne pas faire descendre le flag vers les inclusions appelees
615
-	if (isset($page['invalideurs'])
616
-		and isset($page['invalideurs']['session'])
617
-	) {
618
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
619
-	}
620
-
621
-	return $page;
602
+    $page = inclure_page($fond, $contexte, $connect);
603
+
604
+    if (!$page) {
605
+        return $page;
606
+    }
607
+    // eval $page et affecte $res
608
+    include _ROOT_RESTREINT . "public/evaluer_page.php";
609
+
610
+    // Lever un drapeau (global) si le fond utilise #SESSION
611
+    // a destination de public/parametrer
612
+    // pour remonter vers les inclusions appelantes
613
+    // il faut bien lever ce drapeau apres avoir evalue le fond
614
+    // pour ne pas faire descendre le flag vers les inclusions appelees
615
+    if (isset($page['invalideurs'])
616
+        and isset($page['invalideurs']['session'])
617
+    ) {
618
+        $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
619
+    }
620
+
621
+    return $page;
622 622
 }
623 623
 
624 624
 
625 625
 // http://code.spip.net/@page_base_href
626 626
 function page_base_href(&$texte) {
627
-	static $set_html_base = null;
628
-	if (is_null($set_html_base)) {
629
-		if (!defined('_SET_HTML_BASE'))
630
-			// si la profondeur est superieure a 1
631
-			// est que ce n'est pas une url page ni une url action
632
-			// activer par defaut
633
-		{
634
-			$set_html_base = ((
635
-				$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
636
-				and _request(_SPIP_PAGE) !== 'login'
637
-				and !_request('action')) ? true : false);
638
-		} else {
639
-			$set_html_base = _SET_HTML_BASE;
640
-		}
641
-	}
642
-
643
-	if ($set_html_base
644
-		and isset($GLOBALS['html']) and $GLOBALS['html']
645
-		and $GLOBALS['profondeur_url'] > 0
646
-		and ($poshead = strpos($texte, '</head>')) !== false
647
-	) {
648
-		$head = substr($texte, 0, $poshead);
649
-		$insert = false;
650
-		if (strpos($head, '<base') === false) {
651
-			$insert = true;
652
-		} else {
653
-			// si aucun <base ...> n'a de href c'est bon quand meme !
654
-			$insert = true;
655
-			include_spip('inc/filtres');
656
-			$bases = extraire_balises($head, 'base');
657
-			foreach ($bases as $base) {
658
-				if (extraire_attribut($base, 'href')) {
659
-					$insert = false;
660
-				}
661
-			}
662
-		}
663
-		if ($insert) {
664
-			include_spip('inc/filtres_mini');
665
-			// ajouter un base qui reglera tous les liens relatifs
666
-			$base = url_absolue('./');
667
-			$bbase = "\n<base href=\"$base\" />";
668
-			if (($pos = strpos($head, '<head>')) !== false) {
669
-				$head = substr_replace($head, $bbase, $pos + 6, 0);
670
-			} elseif (preg_match(",<head[^>]*>,i", $head, $r)) {
671
-				$head = str_replace($r[0], $r[0] . $bbase, $head);
672
-			}
673
-			$texte = $head . substr($texte, $poshead);
674
-			// gerer les ancres
675
-			$base = $_SERVER['REQUEST_URI'];
676
-			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
677
-			if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
678
-				$base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
679
-			}
680
-			if (strpos($texte, "href='#") !== false) {
681
-				$texte = str_replace("href='#", "href='$base#", $texte);
682
-			}
683
-			if (strpos($texte, "href=\"#") !== false) {
684
-				$texte = str_replace("href=\"#", "href=\"$base#", $texte);
685
-			}
686
-		}
687
-	}
627
+    static $set_html_base = null;
628
+    if (is_null($set_html_base)) {
629
+        if (!defined('_SET_HTML_BASE'))
630
+            // si la profondeur est superieure a 1
631
+            // est que ce n'est pas une url page ni une url action
632
+            // activer par defaut
633
+        {
634
+            $set_html_base = ((
635
+                $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
636
+                and _request(_SPIP_PAGE) !== 'login'
637
+                and !_request('action')) ? true : false);
638
+        } else {
639
+            $set_html_base = _SET_HTML_BASE;
640
+        }
641
+    }
642
+
643
+    if ($set_html_base
644
+        and isset($GLOBALS['html']) and $GLOBALS['html']
645
+        and $GLOBALS['profondeur_url'] > 0
646
+        and ($poshead = strpos($texte, '</head>')) !== false
647
+    ) {
648
+        $head = substr($texte, 0, $poshead);
649
+        $insert = false;
650
+        if (strpos($head, '<base') === false) {
651
+            $insert = true;
652
+        } else {
653
+            // si aucun <base ...> n'a de href c'est bon quand meme !
654
+            $insert = true;
655
+            include_spip('inc/filtres');
656
+            $bases = extraire_balises($head, 'base');
657
+            foreach ($bases as $base) {
658
+                if (extraire_attribut($base, 'href')) {
659
+                    $insert = false;
660
+                }
661
+            }
662
+        }
663
+        if ($insert) {
664
+            include_spip('inc/filtres_mini');
665
+            // ajouter un base qui reglera tous les liens relatifs
666
+            $base = url_absolue('./');
667
+            $bbase = "\n<base href=\"$base\" />";
668
+            if (($pos = strpos($head, '<head>')) !== false) {
669
+                $head = substr_replace($head, $bbase, $pos + 6, 0);
670
+            } elseif (preg_match(",<head[^>]*>,i", $head, $r)) {
671
+                $head = str_replace($r[0], $r[0] . $bbase, $head);
672
+            }
673
+            $texte = $head . substr($texte, $poshead);
674
+            // gerer les ancres
675
+            $base = $_SERVER['REQUEST_URI'];
676
+            // pas de guillemets ni < dans l'URL qu'on insere dans le HTML
677
+            if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
678
+                $base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
679
+            }
680
+            if (strpos($texte, "href='#") !== false) {
681
+                $texte = str_replace("href='#", "href='$base#", $texte);
682
+            }
683
+            if (strpos($texte, "href=\"#") !== false) {
684
+                $texte = str_replace("href=\"#", "href=\"$base#", $texte);
685
+            }
686
+        }
687
+    }
688 688
 }
689 689
 
690 690
 
@@ -692,8 +692,8 @@  discard block
 block discarded – undo
692 692
 // et demarrent par X-Spip-...
693 693
 // http://code.spip.net/@envoyer_entetes
694 694
 function envoyer_entetes($entetes) {
695
-	foreach ($entetes as $k => $v) #	if (strncmp($k, 'X-Spip-', 7))
696
-	{
697
-		@header(strlen($v) ? "$k: $v" : $k);
698
-	}
695
+    foreach ($entetes as $k => $v) #	if (strncmp($k, 'X-Spip-', 7))
696
+    {
697
+        @header(strlen($v) ? "$k: $v" : $k);
698
+    }
699 699
 }
Please login to merge, or discard this patch.