Completed
Push — spip-3.0 ( 1797f4...52731c )
by cam
09:29
created
ecrire/install/etape_chmod.php 1 patch
Indentation   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -23,39 +23,39 @@  discard block
 block discarded – undo
23 23
 //
24 24
 // http://doc.spip.org/@test_ecrire
25 25
 function test_ecrire($my_dir) {
26
-	static $chmod = 0;
26
+    static $chmod = 0;
27 27
 	
28
-	$ok = false;
29
-	$script = @file_exists('spip_loader.php') ? 'spip_loader.php' : $_SERVER['PHP_SELF'];
30
-	$self = basename($script);
31
-	$uid = @fileowner('.');
32
-	$uid2 = @fileowner($self);
33
-	$gid = @filegroup('.');
34
-	$gid2 = @filegroup($self);
35
-	$perms = @fileperms($self);
36
-
37
-	// Comparer l'appartenance d'un fichier cree par PHP
38
-	// avec celle du script et du repertoire courant
39
-	if(!$chmod) {
40
-		@rmdir('test');
41
-		spip_unlink('test'); // effacer au cas ou
42
-		@touch('test');
43
-		if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid)
44
-			$chmod = 0700;
45
-		else if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid)
46
-			$chmod = 0770;
47
-		else
48
-			$chmod = 0777;
49
-		// Appliquer de plus les droits d'acces du script
50
-		if ($perms > 0) {
51
-			$perms = ($perms & 0777) | (($perms & 0444) >> 2);
52
-			$chmod |= $perms;
53
-		}
54
-		spip_unlink('test');
55
-	}
56
-	$ok = is_dir($my_dir) && is_writable($my_dir);
57
-
58
-	return $ok ? $chmod : false;
28
+    $ok = false;
29
+    $script = @file_exists('spip_loader.php') ? 'spip_loader.php' : $_SERVER['PHP_SELF'];
30
+    $self = basename($script);
31
+    $uid = @fileowner('.');
32
+    $uid2 = @fileowner($self);
33
+    $gid = @filegroup('.');
34
+    $gid2 = @filegroup($self);
35
+    $perms = @fileperms($self);
36
+
37
+    // Comparer l'appartenance d'un fichier cree par PHP
38
+    // avec celle du script et du repertoire courant
39
+    if(!$chmod) {
40
+        @rmdir('test');
41
+        spip_unlink('test'); // effacer au cas ou
42
+        @touch('test');
43
+        if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid)
44
+            $chmod = 0700;
45
+        else if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid)
46
+            $chmod = 0770;
47
+        else
48
+            $chmod = 0777;
49
+        // Appliquer de plus les droits d'acces du script
50
+        if ($perms > 0) {
51
+            $perms = ($perms & 0777) | (($perms & 0444) >> 2);
52
+            $chmod |= $perms;
53
+        }
54
+        spip_unlink('test');
55
+    }
56
+    $ok = is_dir($my_dir) && is_writable($my_dir);
57
+
58
+    return $ok ? $chmod : false;
59 59
 }
60 60
 
61 61
 //
@@ -66,73 +66,73 @@  discard block
 block discarded – undo
66 66
 // http://doc.spip.org/@install_etape_chmod_dist
67 67
 function install_etape_chmod_dist()
68 68
 {
69
-	global $test_dirs;
70
-	$test_dir =  _request('test_dir');
71
-	$chmod = 0;
72
-
73
-	if ($test_dir) {
74
-		if (substr($test_dir,-1)!=='/') $test_dir .= '/';
75
-		if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE  . $test_dir;
76
-	} else {
77
-		if (!_FILE_CONNECT) {
78
-			$test_dirs[] = _DIR_CONNECT;
79
-			$test_dirs[] = _DIR_CHMOD;
80
-		}
81
-	}
82
-
83
-	$bad_dirs = array();
84
-	$absent_dirs  = array();;
85
-
86
-	while (list(, $my_dir) = each($test_dirs)) {
87
-		$test = test_ecrire($my_dir);
88
-		if (!$test) {
89
-			$m = preg_replace(',^' . _DIR_RACINE . ',', '',$my_dir);
90
-			if (@file_exists($my_dir)) {
91
-				$bad_dirs["<li>".$m."</li>"] = 1;
92
-			} else
93
-				$absent_dirs["<li>".$m."</li>"] = 1;
94
-		} else $chmod = max($chmod, $test);
95
-	}
96
-
97
-	if ($bad_dirs OR $absent_dirs) {
98
-
99
-	if (!_FILE_CONNECT) {
100
-		$titre = _T('dirs_preliminaire');
101
-		$continuer = ' '._T('dirs_commencer') . '.';
102
-	} else
103
-		$titre = _T('dirs_probleme_droits');
104
-
105
-
106
-	$res = "<div align='right'>". menu_langues('var_lang_ecrire')."</div>\n";
107
-
108
-	if ($bad_dirs) {
109
-		$res .=
110
-		  _T('dirs_repertoires_suivants',
111
-		     array('bad_dirs' => join("\n", array_keys($bad_dirs)))) .
112
-		  	"<b>". _T('login_recharger')."</b>.";
113
-	}
114
-
115
-	if ($absent_dirs) {
116
-	  	$res .=
117
-			_T('dirs_repertoires_absents',
118
-			   array('bad_dirs' => join("\n", array_keys($absent_dirs)))) .
119
-			"<b>". _T('login_recharger')."</b>.";
120
-	}
121
-	$res = "<p>" . $continuer  . $res . aide ("install0", true) . "</p>";
122
-
123
-	$t = _T('login_recharger');
124
-	$t = (!$test_dir ? '' :
125
-		"<input type='hidden' name='test_dir' value='" . spip_htmlspecialchars($test_dir, ENT_QUOTES) . "' />")
126
-	. "<input type='hidden' name='etape' value='chmod' />"
127
-	. "<div style='text-align: right'><input type='submit' value='" . attribut_html($t) . "' /></div>";
128
-
129
-	echo minipres($titre, $res . generer_form_ecrire('install',  $t));
130
-
131
-	} else {
132
-		$deja = (_FILE_CONNECT AND analyse_fichier_connection(_FILE_CONNECT));
133
-		if (!$deja)
134
-			redirige_url_ecrire("install", "etape=1&chmod=".$chmod);
135
-		else	redirige_url_ecrire();
136
-	}
69
+    global $test_dirs;
70
+    $test_dir =  _request('test_dir');
71
+    $chmod = 0;
72
+
73
+    if ($test_dir) {
74
+        if (substr($test_dir,-1)!=='/') $test_dir .= '/';
75
+        if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE  . $test_dir;
76
+    } else {
77
+        if (!_FILE_CONNECT) {
78
+            $test_dirs[] = _DIR_CONNECT;
79
+            $test_dirs[] = _DIR_CHMOD;
80
+        }
81
+    }
82
+
83
+    $bad_dirs = array();
84
+    $absent_dirs  = array();;
85
+
86
+    while (list(, $my_dir) = each($test_dirs)) {
87
+        $test = test_ecrire($my_dir);
88
+        if (!$test) {
89
+            $m = preg_replace(',^' . _DIR_RACINE . ',', '',$my_dir);
90
+            if (@file_exists($my_dir)) {
91
+                $bad_dirs["<li>".$m."</li>"] = 1;
92
+            } else
93
+                $absent_dirs["<li>".$m."</li>"] = 1;
94
+        } else $chmod = max($chmod, $test);
95
+    }
96
+
97
+    if ($bad_dirs OR $absent_dirs) {
98
+
99
+    if (!_FILE_CONNECT) {
100
+        $titre = _T('dirs_preliminaire');
101
+        $continuer = ' '._T('dirs_commencer') . '.';
102
+    } else
103
+        $titre = _T('dirs_probleme_droits');
104
+
105
+
106
+    $res = "<div align='right'>". menu_langues('var_lang_ecrire')."</div>\n";
107
+
108
+    if ($bad_dirs) {
109
+        $res .=
110
+            _T('dirs_repertoires_suivants',
111
+                array('bad_dirs' => join("\n", array_keys($bad_dirs)))) .
112
+                "<b>". _T('login_recharger')."</b>.";
113
+    }
114
+
115
+    if ($absent_dirs) {
116
+            $res .=
117
+            _T('dirs_repertoires_absents',
118
+                array('bad_dirs' => join("\n", array_keys($absent_dirs)))) .
119
+            "<b>". _T('login_recharger')."</b>.";
120
+    }
121
+    $res = "<p>" . $continuer  . $res . aide ("install0", true) . "</p>";
122
+
123
+    $t = _T('login_recharger');
124
+    $t = (!$test_dir ? '' :
125
+        "<input type='hidden' name='test_dir' value='" . spip_htmlspecialchars($test_dir, ENT_QUOTES) . "' />")
126
+    . "<input type='hidden' name='etape' value='chmod' />"
127
+    . "<div style='text-align: right'><input type='submit' value='" . attribut_html($t) . "' /></div>";
128
+
129
+    echo minipres($titre, $res . generer_form_ecrire('install',  $t));
130
+
131
+    } else {
132
+        $deja = (_FILE_CONNECT AND analyse_fichier_connection(_FILE_CONNECT));
133
+        if (!$deja)
134
+            redirige_url_ecrire("install", "etape=1&chmod=".$chmod);
135
+        else	redirige_url_ecrire();
136
+    }
137 137
 }
138 138
 ?>
Please login to merge, or discard this patch.
ecrire/inc/utils.php 1 patch
Indentation   +1520 added lines, -1521 removed lines patch added patch discarded remove patch
@@ -30,47 +30,47 @@  discard block
 block discarded – undo
30 30
  * @return string
31 31
  */
32 32
 function charger_fonction($nom, $dossier='exec', $continue=false) {
33
-	static $echecs = array();
33
+    static $echecs = array();
34 34
 
35
-	if (strlen($dossier) AND substr($dossier,-1) != '/') $dossier .= '/';
36
-	$f = str_replace('/','_',$dossier) . $nom;
35
+    if (strlen($dossier) AND substr($dossier,-1) != '/') $dossier .= '/';
36
+    $f = str_replace('/','_',$dossier) . $nom;
37 37
 
38
-	if (function_exists($f))
39
-		return $f;
40
-	if (function_exists($g = $f . '_dist'))
41
-		return $g;
38
+    if (function_exists($f))
39
+        return $f;
40
+    if (function_exists($g = $f . '_dist'))
41
+        return $g;
42 42
 
43
-	if (isset($echecs[$f])) return $echecs[$f];
44
-	// Sinon charger le fichier de declaration si plausible
43
+    if (isset($echecs[$f])) return $echecs[$f];
44
+    // Sinon charger le fichier de declaration si plausible
45 45
 
46
-	if (!preg_match(',^\w+$,', $f)){
47
-		if ($continue) return false; //appel interne, on passe
48
-		include_spip('inc/minipres');
49
-		echo minipres();
50
-		exit;
51
-	}
46
+    if (!preg_match(',^\w+$,', $f)){
47
+        if ($continue) return false; //appel interne, on passe
48
+        include_spip('inc/minipres');
49
+        echo minipres();
50
+        exit;
51
+    }
52 52
 
53
-	// passer en minuscules (cf les balises de formulaires)
54
-	// et inclure le fichier
55
-	if (!$inc = include_spip($dossier.($d = strtolower($nom)))
56
-		// si le fichier truc/machin/nom.php n'existe pas,
57
-		// la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
58
-		AND strlen(dirname($dossier)) AND dirname($dossier)!='.')
59
-		include_spip(substr($dossier,0,-1));
60
-	if (function_exists($f)) return $f;
61
-	if (function_exists($g)) return $g;
53
+    // passer en minuscules (cf les balises de formulaires)
54
+    // et inclure le fichier
55
+    if (!$inc = include_spip($dossier.($d = strtolower($nom)))
56
+        // si le fichier truc/machin/nom.php n'existe pas,
57
+        // la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
58
+        AND strlen(dirname($dossier)) AND dirname($dossier)!='.')
59
+        include_spip(substr($dossier,0,-1));
60
+    if (function_exists($f)) return $f;
61
+    if (function_exists($g)) return $g;
62 62
 
63
-	if ($continue) return $echecs[$f] = false;
63
+    if ($continue) return $echecs[$f] = false;
64 64
 
65
-	// Echec : message d'erreur
66
-	spip_log("fonction $nom ($f ou $g) indisponible" .
67
-		($inc ? "" : " (fichier $d absent de $dossier)"));
65
+    // Echec : message d'erreur
66
+    spip_log("fonction $nom ($f ou $g) indisponible" .
67
+        ($inc ? "" : " (fichier $d absent de $dossier)"));
68 68
 
69
-	include_spip('inc/minipres');
70
-	echo minipres(_T('forum_titre_erreur'),
71
-		 _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')),
72
-		array('all_inline'=>true,'status'=>404));
73
-	exit;
69
+    include_spip('inc/minipres');
70
+    echo minipres(_T('forum_titre_erreur'),
71
+            _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')),
72
+        array('all_inline'=>true,'status'=>404));
73
+    exit;
74 74
 }
75 75
 
76 76
 /**
@@ -79,12 +79,12 @@  discard block
 block discarded – undo
79 79
  * @return bool
80 80
  */
81 81
 function include_once_check($file){
82
-	if (file_exists($file)) {include_once $file;return true;}
83
-	$crash = (isset($GLOBALS['meta']['message_crash_plugins'])?unserialize($GLOBALS['meta']['message_crash_plugins']):'');
84
-	$crash = ($crash?$crash:array());
85
-	$crash[$file] = true;
86
-	ecrire_meta('message_crash_plugins',serialize($crash));
87
-	return false;
82
+    if (file_exists($file)) {include_once $file;return true;}
83
+    $crash = (isset($GLOBALS['meta']['message_crash_plugins'])?unserialize($GLOBALS['meta']['message_crash_plugins']):'');
84
+    $crash = ($crash?$crash:array());
85
+    $crash[$file] = true;
86
+    ecrire_meta('message_crash_plugins',serialize($crash));
87
+    return false;
88 88
 }
89 89
 
90 90
 //
@@ -92,12 +92,12 @@  discard block
 block discarded – undo
92 92
 //
93 93
 // http://doc.spip.org/@include_spip
94 94
 function include_spip($f, $include = true) {
95
-	return find_in_path($f . '.php', '', $include);
95
+    return find_in_path($f . '.php', '', $include);
96 96
 }
97 97
 
98 98
 
99 99
 function require_spip($f) {
100
-	return find_in_path($f . '.php', '', 'required');
100
+    return find_in_path($f . '.php', '', 'required');
101 101
 }
102 102
 
103 103
 // un pipeline est lie a une action et une valeur
@@ -114,59 +114,59 @@  discard block
 block discarded – undo
114 114
 // on passe $val par reference pour limiter les allocations memoire
115 115
 // http://doc.spip.org/@minipipe
116 116
 function minipipe($fonc,&$val){
117
-	// fonction
118
-	if (function_exists($fonc))
119
-		$val = call_user_func($fonc, $val);
120
-	// Class::Methode
121
-	else if (preg_match("/^(\w*)::(\w*)$/S", $fonc, $regs)
122
-	AND $methode = array($regs[1], $regs[2])
123
-	AND is_callable($methode))
124
-		$val = call_user_func($methode, $val);
125
-	else {
126
-		spip_log("Erreur - '$fonc' non definie !");
127
-	}
128
-	return $val;
117
+    // fonction
118
+    if (function_exists($fonc))
119
+        $val = call_user_func($fonc, $val);
120
+    // Class::Methode
121
+    else if (preg_match("/^(\w*)::(\w*)$/S", $fonc, $regs)
122
+    AND $methode = array($regs[1], $regs[2])
123
+    AND is_callable($methode))
124
+        $val = call_user_func($methode, $val);
125
+    else {
126
+        spip_log("Erreur - '$fonc' non definie !");
127
+    }
128
+    return $val;
129 129
 }
130 130
 
131 131
 // chargement du pipeline sous la forme d'un fichier php prepare
132 132
 // http://doc.spip.org/@pipeline
133 133
 function pipeline($action, $val=null) {
134
-	static $charger;
135
-
136
-	// chargement initial des fonctions mises en cache, ou generation du cache
137
-	if (!$charger) {
138
-		if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) {
139
-			include_spip('inc/plugin');
140
-			// generer les fichiers php precompiles
141
-			// de chargement des plugins et des pipelines
142
-			actualise_plugins_actifs();
143
-			if (!($ok = @is_readable($charger)))
144
-				spip_log("fichier $charger pas cree");
145
-		}
146
-
147
-		if ($ok) {
148
-			include_once $charger;
149
-		}
150
-	}
151
-
152
-	// appliquer notre fonction si elle existe
153
-	$fonc = 'execute_pipeline_'.strtolower($action);
154
-	if (function_exists($fonc)) {
155
-		$val = $fonc($val);
156
-	}
157
-	// plantage ?
158
-	else {
159
-		spip_log("fonction $fonc absente : pipeline desactive",_LOG_ERREUR);
160
-	}
161
-
162
-	// si le flux est une table avec 2 cle args&data
163
-	// on ne ressort du pipe que les donnees dans 'data'
164
-	// array_key_exists pour php 4.1.0
165
-	if (is_array($val)
166
-	  AND count($val)==2
167
-	  AND (array_key_exists('data',$val)))
168
-		$val = $val['data'];
169
-	return $val;
134
+    static $charger;
135
+
136
+    // chargement initial des fonctions mises en cache, ou generation du cache
137
+    if (!$charger) {
138
+        if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) {
139
+            include_spip('inc/plugin');
140
+            // generer les fichiers php precompiles
141
+            // de chargement des plugins et des pipelines
142
+            actualise_plugins_actifs();
143
+            if (!($ok = @is_readable($charger)))
144
+                spip_log("fichier $charger pas cree");
145
+        }
146
+
147
+        if ($ok) {
148
+            include_once $charger;
149
+        }
150
+    }
151
+
152
+    // appliquer notre fonction si elle existe
153
+    $fonc = 'execute_pipeline_'.strtolower($action);
154
+    if (function_exists($fonc)) {
155
+        $val = $fonc($val);
156
+    }
157
+    // plantage ?
158
+    else {
159
+        spip_log("fonction $fonc absente : pipeline desactive",_LOG_ERREUR);
160
+    }
161
+
162
+    // si le flux est une table avec 2 cle args&data
163
+    // on ne ressort du pipe que les donnees dans 'data'
164
+    // array_key_exists pour php 4.1.0
165
+    if (is_array($val)
166
+      AND count($val)==2
167
+      AND (array_key_exists('data',$val)))
168
+        $val = $val['data'];
169
+    return $val;
170 170
 }
171 171
 
172 172
 /**
@@ -187,38 +187,38 @@  discard block
 block discarded – undo
187 187
  * @param string $logsuf  ## inutile !! a supprimer ?
188 188
  */
189 189
 function spip_log($message=NULL, $name=NULL) {
190
-	static $pre = array();
191
-	static $log;
192
-	preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string) $name, $regs);
193
-	if (!isset($regs[1]) OR !$logname = $regs[1])
194
-		$logname = null;
195
-	if (!isset($regs[2]) OR !$niveau = $regs[2])
196
-		$niveau = _LOG_INFO;
197
-
198
-	if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) {
199
-		if (!$pre){
200
-			$pre = array(
201
-				_LOG_HS=>'HS:',
202
-				_LOG_ALERTE_ROUGE=>'ALERTE:',
203
-				_LOG_CRITIQUE=>'CRITIQUE:',
204
-				_LOG_ERREUR=>'ERREUR:',
205
-				_LOG_AVERTISSEMENT=>'WARNING:',
206
-				_LOG_INFO_IMPORTANTE=>'!INFO:',
207
-				_LOG_INFO=>'info:',
208
-				_LOG_DEBUG=>'debug:');
209
-			$log = charger_fonction('log', 'inc');
210
-		}
211
-		if (!is_string($message)) $message = var_export($message, true);
212
-		$log($pre[$niveau].' '.$message, $logname);
213
-	}
190
+    static $pre = array();
191
+    static $log;
192
+    preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string) $name, $regs);
193
+    if (!isset($regs[1]) OR !$logname = $regs[1])
194
+        $logname = null;
195
+    if (!isset($regs[2]) OR !$niveau = $regs[2])
196
+        $niveau = _LOG_INFO;
197
+
198
+    if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) {
199
+        if (!$pre){
200
+            $pre = array(
201
+                _LOG_HS=>'HS:',
202
+                _LOG_ALERTE_ROUGE=>'ALERTE:',
203
+                _LOG_CRITIQUE=>'CRITIQUE:',
204
+                _LOG_ERREUR=>'ERREUR:',
205
+                _LOG_AVERTISSEMENT=>'WARNING:',
206
+                _LOG_INFO_IMPORTANTE=>'!INFO:',
207
+                _LOG_INFO=>'info:',
208
+                _LOG_DEBUG=>'debug:');
209
+            $log = charger_fonction('log', 'inc');
210
+        }
211
+        if (!is_string($message)) $message = var_export($message, true);
212
+        $log($pre[$niveau].' '.$message, $logname);
213
+    }
214 214
 }
215 215
 
216 216
 //
217 217
 // Enregistrement des journaux
218 218
 //
219 219
 function journal($phrase, $opt = array()) {
220
-	$journal = charger_fonction('journal', 'inc');
221
-	$journal($phrase, $opt);
220
+    $journal = charger_fonction('journal', 'inc');
221
+    $journal($phrase, $opt);
222 222
 }
223 223
 
224 224
 // Renvoie le _GET ou le _POST emis par l'utilisateur
@@ -226,50 +226,50 @@  discard block
 block discarded – undo
226 226
 // http://doc.spip.org/@_request
227 227
 function _request($var, $c=false) {
228 228
 
229
-	if (is_array($c))
230
-		return isset($c[$var]) ? $c[$var] : NULL;
231
-
232
-	if (isset($_GET[$var])) $a = $_GET[$var];
233
-	elseif (isset($_POST[$var])) $a = $_POST[$var];
234
-	else return NULL;
235
-
236
-	// Si on est en ajax et en POST tout a ete encode
237
-	// via encodeURIComponent, il faut donc repasser
238
-	// dans le charset local...
239
-	if (defined('_AJAX')
240
-	AND _AJAX
241
-	AND isset($GLOBALS['meta']['charset'])
242
-	AND $GLOBALS['meta']['charset'] != 'utf-8'
243
-	AND is_string($a)
244
-	// check rapide mais pas fiable
245
-	AND preg_match(',[\x80-\xFF],', $a)
246
-	// check fiable
247
-	AND include_spip('inc/charsets')
248
-	AND is_utf8($a)
249
-	) {
250
-		return importer_charset($a, 'utf-8');
251
-	}
252
-
253
-	return $a;
229
+    if (is_array($c))
230
+        return isset($c[$var]) ? $c[$var] : NULL;
231
+
232
+    if (isset($_GET[$var])) $a = $_GET[$var];
233
+    elseif (isset($_POST[$var])) $a = $_POST[$var];
234
+    else return NULL;
235
+
236
+    // Si on est en ajax et en POST tout a ete encode
237
+    // via encodeURIComponent, il faut donc repasser
238
+    // dans le charset local...
239
+    if (defined('_AJAX')
240
+    AND _AJAX
241
+    AND isset($GLOBALS['meta']['charset'])
242
+    AND $GLOBALS['meta']['charset'] != 'utf-8'
243
+    AND is_string($a)
244
+    // check rapide mais pas fiable
245
+    AND preg_match(',[\x80-\xFF],', $a)
246
+    // check fiable
247
+    AND include_spip('inc/charsets')
248
+    AND is_utf8($a)
249
+    ) {
250
+        return importer_charset($a, 'utf-8');
251
+    }
252
+
253
+    return $a;
254 254
 }
255 255
 
256 256
 // Methode set de la fonction _request()
257 257
 // Attention au cas ou l'on fait set_request('truc', NULL);
258 258
 // http://doc.spip.org/@set_request
259 259
 function set_request($var, $val = NULL, $c=false) {
260
-	if (is_array($c)) {
261
-		unset($c[$var]);
262
-		if ($val !== NULL)
263
-			$c[$var] = $val;
264
-		return $c;
265
-	}
260
+    if (is_array($c)) {
261
+        unset($c[$var]);
262
+        if ($val !== NULL)
263
+            $c[$var] = $val;
264
+        return $c;
265
+    }
266 266
 
267
-	unset($_GET[$var]);
268
-	unset($_POST[$var]);
269
-	if ($val !== NULL)
270
-		$_GET[$var] = $val;
267
+    unset($_GET[$var]);
268
+    unset($_POST[$var]);
269
+    if ($val !== NULL)
270
+        $_GET[$var] = $val;
271 271
 
272
-	return false; # n'affecte pas $c
272
+    return false; # n'affecte pas $c
273 273
 }
274 274
 
275 275
 
@@ -278,23 +278,22 @@  discard block
 block discarded – undo
278 278
  * 
279 279
  * On est sur le web, on exclut certains protocoles, 
280 280
  * notamment 'file://', 'php://' et d'autres…
281
-
282 281
  * @param string $url
283 282
  * @return bool
284 283
  */
285 284
 function tester_url_absolue($url) {
286
-	$url = trim($url);
287
-	if (preg_match(";^([a-z]{3,7}:)?//;Uims", $url, $m)) {
288
-		if (
289
-			isset($m[1])
290
-			and $p = strtolower(rtrim($m[1], ':'))
291
-			and in_array($p, array('file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'))
292
-		  ) {
293
-			return false;
294
-		}
295
-		return true;
296
-	}
297
-	return false;
285
+    $url = trim($url);
286
+    if (preg_match(";^([a-z]{3,7}:)?//;Uims", $url, $m)) {
287
+        if (
288
+            isset($m[1])
289
+            and $p = strtolower(rtrim($m[1], ':'))
290
+            and in_array($p, array('file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'))
291
+            ) {
292
+            return false;
293
+        }
294
+        return true;
295
+    }
296
+    return false;
298 297
 }
299 298
 
300 299
 /**
@@ -313,71 +312,71 @@  discard block
 block discarded – undo
313 312
  * @return string
314 313
  */
315 314
 function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
316
-	// requete erronnee : plusieurs variable dans $c et aucun $v
317
-	if (strpos($c,"|")!==false AND is_null($v))
318
-		return null;
319
-
320
-	// lever l'#ancre
321
-	if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
322
-		$url = $r[1];
323
-		$ancre = $r[2];
324
-	} else
325
-		$ancre = '';
326
-
327
-	// eclater
328
-	$url = preg_split(',[?]|&amp;|&,', $url);
329
-
330
-	// recuperer la base
331
-	$a = array_shift($url);
332
-	if (!$a) $a= './';
333
-
334
-	$regexp = ',^(' . str_replace('[]','\[\]',$c) . '[[]?[]]?)(=.*)?$,';
335
-	$ajouts = array_flip(explode('|',$c));
336
-	$u = is_array($v) ? $v : rawurlencode($v);
337
-	$testv = (is_array($v)?count($v):strlen($v));
338
-	// lire les variables et agir
339
-	foreach ($url as $n => $val) {
340
-		if (preg_match($regexp, urldecode($val), $r)) {
341
-			if ($v === NULL) {
342
-				return $r[2]?substr($r[2],1):'';
343
-			}
344
-			// suppression
345
-			elseif (!$testv) {
346
-				unset($url[$n]);
347
-			}
348
-	// Ajout. Pour une variable, remplacer au meme endroit,
349
-	// pour un tableau ce sera fait dans la prochaine boucle
350
-			elseif (substr($r[1],-2) != '[]') {
351
-				$url[$n] = $r[1].'='.$u;
352
-				unset($ajouts[$r[1]]);
353
-			}
354
-		}
355
-	}
356
-
357
-	// traiter les parametres pas encore trouves
358
-	if ($v === NULL
359
-	AND $args = func_get_args()
360
-	AND count($args)==2)
361
-		return $v;
362
-	elseif ($testv) {
363
-		foreach($ajouts as $k => $n) {
364
-		  if (!is_array($v))
365
-		    $url[] = $k .'=' . $u;
366
-		  else {
367
-		  	$id = (substr($k,-2) == '[]') ? $k : ($k ."[]");
368
-		    foreach ($v as $w) $url[]= $id .'=' . $w;
369
-		  }
370
-		}
371
-	}
372
-
373
-	// eliminer les vides
374
-	$url = array_filter($url);
375
-
376
-	// recomposer l'adresse
377
-	if ($url)
378
-		$a .= '?' . join($sep, $url);
379
-
380
-	return $a . $ancre;
315
+    // requete erronnee : plusieurs variable dans $c et aucun $v
316
+    if (strpos($c,"|")!==false AND is_null($v))
317
+        return null;
318
+
319
+    // lever l'#ancre
320
+    if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
321
+        $url = $r[1];
322
+        $ancre = $r[2];
323
+    } else
324
+        $ancre = '';
325
+
326
+    // eclater
327
+    $url = preg_split(',[?]|&amp;|&,', $url);
328
+
329
+    // recuperer la base
330
+    $a = array_shift($url);
331
+    if (!$a) $a= './';
332
+
333
+    $regexp = ',^(' . str_replace('[]','\[\]',$c) . '[[]?[]]?)(=.*)?$,';
334
+    $ajouts = array_flip(explode('|',$c));
335
+    $u = is_array($v) ? $v : rawurlencode($v);
336
+    $testv = (is_array($v)?count($v):strlen($v));
337
+    // lire les variables et agir
338
+    foreach ($url as $n => $val) {
339
+        if (preg_match($regexp, urldecode($val), $r)) {
340
+            if ($v === NULL) {
341
+                return $r[2]?substr($r[2],1):'';
342
+            }
343
+            // suppression
344
+            elseif (!$testv) {
345
+                unset($url[$n]);
346
+            }
347
+    // Ajout. Pour une variable, remplacer au meme endroit,
348
+    // pour un tableau ce sera fait dans la prochaine boucle
349
+            elseif (substr($r[1],-2) != '[]') {
350
+                $url[$n] = $r[1].'='.$u;
351
+                unset($ajouts[$r[1]]);
352
+            }
353
+        }
354
+    }
355
+
356
+    // traiter les parametres pas encore trouves
357
+    if ($v === NULL
358
+    AND $args = func_get_args()
359
+    AND count($args)==2)
360
+        return $v;
361
+    elseif ($testv) {
362
+        foreach($ajouts as $k => $n) {
363
+            if (!is_array($v))
364
+            $url[] = $k .'=' . $u;
365
+            else {
366
+                $id = (substr($k,-2) == '[]') ? $k : ($k ."[]");
367
+            foreach ($v as $w) $url[]= $id .'=' . $w;
368
+            }
369
+        }
370
+    }
371
+
372
+    // eliminer les vides
373
+    $url = array_filter($url);
374
+
375
+    // recomposer l'adresse
376
+    if ($url)
377
+        $a .= '?' . join($sep, $url);
378
+
379
+    return $a . $ancre;
381 380
 }
382 381
 
383 382
 // Prend une URL et lui ajoute/retire une ancre apres l'avoir nettoyee
@@ -385,17 +384,17 @@  discard block
 block discarded – undo
385 384
 // et on remplace ceux a l'interieur ou au bout par -
386 385
 // http://doc.spip.org/@ancre_url
387 386
 function ancre_url($url, $ancre) {
388
-	// lever l'#ancre
389
-	if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
390
-		$url = $r[1];
391
-	}
392
-	if (preg_match('/[^-_a-zA-Z0-9]+/S',$ancre)){
393
-		if (!function_exists('translitteration'))
394
-			include_spip('inc/charsets');
395
-		$ancre = preg_replace(array('/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'), array('', '-'),
396
-						translitteration($ancre));
397
-	}
398
-	return $url . (strlen($ancre) ? '#'. $ancre : '');
387
+    // lever l'#ancre
388
+    if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
389
+        $url = $r[1];
390
+    }
391
+    if (preg_match('/[^-_a-zA-Z0-9]+/S',$ancre)){
392
+        if (!function_exists('translitteration'))
393
+            include_spip('inc/charsets');
394
+        $ancre = preg_replace(array('/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'), array('', '-'),
395
+                        translitteration($ancre));
396
+    }
397
+    return $url . (strlen($ancre) ? '#'. $ancre : '');
399 398
 }
400 399
 
401 400
 /**
@@ -407,21 +406,21 @@  discard block
 block discarded – undo
407 406
  */
408 407
 function nettoyer_uri($reset = null)
409 408
 {
410
-	static $done = false;
411
-	static $propre = '';
412
-	if (!is_null($reset)) return $propre=$reset;
413
-	if ($done) return $propre;
414
-	$done = true;
409
+    static $done = false;
410
+    static $propre = '';
411
+    if (!is_null($reset)) return $propre=$reset;
412
+    if ($done) return $propre;
413
+    $done = true;
415 414
 
416
-	$uri1 = $GLOBALS['REQUEST_URI'];
417
-	do {
418
-		$uri = $uri1;
419
-		$uri1 = preg_replace
420
-			(',([?&])(PHPSESSID|(var_[^=&]*))=[^&]*(&|$),i',
421
-			'\1', $uri);
422
-	} while ($uri<>$uri1);
415
+    $uri1 = $GLOBALS['REQUEST_URI'];
416
+    do {
417
+        $uri = $uri1;
418
+        $uri1 = preg_replace
419
+            (',([?&])(PHPSESSID|(var_[^=&]*))=[^&]*(&|$),i',
420
+            '\1', $uri);
421
+    } while ($uri<>$uri1);
423 422
 
424
-	return $propre = (preg_replace(',[?&]$,', '', $uri1));
423
+    return $propre = (preg_replace(',[?&]$,', '', $uri1));
425 424
 }
426 425
 
427 426
 
@@ -435,49 +434,49 @@  discard block
 block discarded – undo
435 434
  *    URL vers soi-même
436 435
 **/
437 436
 function self($amp = '&amp;', $root = false) {
438
-	$url = nettoyer_uri();
439
-	if (!$root
440
-		AND (
441
-			// si pas de profondeur on peut tronquer
442
-			$GLOBALS['profondeur_url']<(_DIR_RESTREINT?1:2)
443
-			// sinon c'est OK si _SET_HTML_BASE a ete force a false
444
-			OR (defined('_SET_HTML_BASE') AND !_SET_HTML_BASE))
445
-		)
446
-		$url = preg_replace(',^[^?]*/,', '', $url);
447
-	// ajouter le cas echeant les variables _POST['id_...']
448
-	foreach ($_POST as $v => $c)
449
-		if (substr($v,0,3) == 'id_')
450
-			$url = parametre_url($url, $v, $c, '&');
451
-
452
-	// supprimer les variables sans interet
453
-	if (test_espace_prive()) {
454
-		$url = preg_replace (',([?&])('
455
-		.'lang|show_docs|'
456
-		.'changer_lang|var_lang|action)=[^&]*,i', '\1', $url);
457
-		$url = preg_replace(',([?&])[&]+,', '\1', $url);
458
-		$url = preg_replace(',[&]$,', '\1', $url);
459
-	}
460
-
461
-	// eviter les hacks
462
-	include_spip('inc/filtres_mini');
463
-	$url = spip_htmlspecialchars($url);
437
+    $url = nettoyer_uri();
438
+    if (!$root
439
+        AND (
440
+            // si pas de profondeur on peut tronquer
441
+            $GLOBALS['profondeur_url']<(_DIR_RESTREINT?1:2)
442
+            // sinon c'est OK si _SET_HTML_BASE a ete force a false
443
+            OR (defined('_SET_HTML_BASE') AND !_SET_HTML_BASE))
444
+        )
445
+        $url = preg_replace(',^[^?]*/,', '', $url);
446
+    // ajouter le cas echeant les variables _POST['id_...']
447
+    foreach ($_POST as $v => $c)
448
+        if (substr($v,0,3) == 'id_')
449
+            $url = parametre_url($url, $v, $c, '&');
450
+
451
+    // supprimer les variables sans interet
452
+    if (test_espace_prive()) {
453
+        $url = preg_replace (',([?&])('
454
+        .'lang|show_docs|'
455
+        .'changer_lang|var_lang|action)=[^&]*,i', '\1', $url);
456
+        $url = preg_replace(',([?&])[&]+,', '\1', $url);
457
+        $url = preg_replace(',[&]$,', '\1', $url);
458
+    }
459
+
460
+    // eviter les hacks
461
+    include_spip('inc/filtres_mini');
462
+    $url = spip_htmlspecialchars($url);
464 463
 	
465
-	$url = str_replace(array("'", '"', '<', '[', ']'), array('%27', '%22', '%3C', '%5B', '%5D'), $url);
464
+    $url = str_replace(array("'", '"', '<', '[', ']'), array('%27', '%22', '%3C', '%5B', '%5D'), $url);
466 465
 
467
-	// &amp; ?
468
-	if ($amp != '&amp;')
469
-		$url = str_replace('&amp;', $amp, $url);
466
+    // &amp; ?
467
+    if ($amp != '&amp;')
468
+        $url = str_replace('&amp;', $amp, $url);
470 469
 
471
-	// Si ca demarre par ? ou vide, donner './'
472
-	$url = preg_replace(',^([?].*)?$,', './\1', $url);
470
+    // Si ca demarre par ? ou vide, donner './'
471
+    $url = preg_replace(',^([?].*)?$,', './\1', $url);
473 472
 
474
-	return $url;
473
+    return $url;
475 474
 }
476 475
 
477 476
 // Indique si on est dans l'espace prive
478 477
 // http://doc.spip.org/@test_espace_prive
479 478
 function test_espace_prive() {
480
-	return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false;
479
+    return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false;
481 480
 }
482 481
 
483 482
 /**
@@ -488,7 +487,7 @@  discard block
 block discarded – undo
488 487
  * @return bool
489 488
  */
490 489
 function test_plugin_actif($plugin){
491
-	return ($plugin AND defined('_DIR_PLUGIN_'.strtoupper($plugin)))? true:false;
490
+    return ($plugin AND defined('_DIR_PLUGIN_'.strtoupper($plugin)))? true:false;
492 491
 }
493 492
 
494 493
 /**
@@ -503,49 +502,49 @@  discard block
 block discarded – undo
503 502
  * @return mixed|string
504 503
  */
505 504
 function _T($texte, $args=array(), $options=array()) {
506
-	static $traduire=false ;
507
-	$o = array('class'=>'', 'force'=>true);
508
-	if ($options){
509
-		// support de l'ancien argument $class
510
-		if (is_string($options))
511
-			$options = array('class'=>$options);
512
-		$o = array_merge($o,$options);
513
-	}
514
-
515
- 	if (!$traduire) {
516
-		$traduire = charger_fonction('traduire', 'inc');
517
-		include_spip('inc/lang');
518
-	}
505
+    static $traduire=false ;
506
+    $o = array('class'=>'', 'force'=>true);
507
+    if ($options){
508
+        // support de l'ancien argument $class
509
+        if (is_string($options))
510
+            $options = array('class'=>$options);
511
+        $o = array_merge($o,$options);
512
+    }
513
+
514
+        if (!$traduire) {
515
+        $traduire = charger_fonction('traduire', 'inc');
516
+        include_spip('inc/lang');
517
+    }
519 518
 	
520
-	// On peut passer explicitement la langue dans le tableau
521
-	// On utilise le même nom de variable que la globale
522
-	if (isset($args['spip_lang'])){
523
-		$lang = $args['spip_lang'];
524
-		// On l'enleve pour ne pas le passer au remplacement
525
-		unset($args['spip_lang']);
526
-	}
527
-	// Sinon on prend la langue du contexte
528
-	else {
529
-		$lang = $GLOBALS['spip_lang'];
530
-	}
531
-	$text = $traduire($texte, $lang);
519
+    // On peut passer explicitement la langue dans le tableau
520
+    // On utilise le même nom de variable que la globale
521
+    if (isset($args['spip_lang'])){
522
+        $lang = $args['spip_lang'];
523
+        // On l'enleve pour ne pas le passer au remplacement
524
+        unset($args['spip_lang']);
525
+    }
526
+    // Sinon on prend la langue du contexte
527
+    else {
528
+        $lang = $GLOBALS['spip_lang'];
529
+    }
530
+    $text = $traduire($texte, $lang);
532 531
 
533
-	if (!strlen($text)){
534
-		if (!$o['force'])
535
-			return '';
532
+    if (!strlen($text)){
533
+        if (!$o['force'])
534
+            return '';
536 535
 
537
-		$text = $texte;
536
+        $text = $texte;
538 537
 
539
-		// pour les chaines non traduites, assurer un service minimum
540
-		if (!$GLOBALS['test_i18n'] AND (_request('var_mode') != 'traduction'))
541
-			$text = str_replace('_', ' ',
542
-				 (($n = strpos($text,':')) === false ? $texte :
543
-					substr($texte, $n+1)));
544
-		$o['class'] = null;
538
+        // pour les chaines non traduites, assurer un service minimum
539
+        if (!$GLOBALS['test_i18n'] AND (_request('var_mode') != 'traduction'))
540
+            $text = str_replace('_', ' ',
541
+                    (($n = strpos($text,':')) === false ? $texte :
542
+                    substr($texte, $n+1)));
543
+        $o['class'] = null;
545 544
 
546
-	}
545
+    }
547 546
 
548
-	return _L($text, $args, $o['class']);
547
+    return _L($text, $args, $o['class']);
549 548
 
550 549
 }
551 550
 
@@ -553,34 +552,34 @@  discard block
 block discarded – undo
553 552
 // Aussi appelee quand une chaine n'est pas encore dans les fichiers de langue
554 553
 // http://doc.spip.org/@_L
555 554
 function _L($text, $args=array(), $class=null) {
556
-	$f = $text;
557
-	if (is_array($args)) {
558
-		foreach ($args as $name => $value) {
559
-			if ($class)
560
-				$value = "<span class='$class'>$value</span>";
561
-			$t = str_replace ("@$name@", $value, $text);
562
-			if ($text !== $t) {unset($args[$name]); $text = $t;}
563
-		}
564
-		// Si des variables n'ont pas ete inserees, le signaler
565
-		// (chaines de langues pas a jour)
566
-		if ($args) spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)),_LOG_DEBUG);
567
-	}
568
-
569
-	if (($GLOBALS['test_i18n'] OR (_request('var_mode') == 'traduction')) AND $class===null)
570
-		return "<span class=debug-traduction-erreur>$text</span>";
571
-	else
572
-		return $text;
555
+    $f = $text;
556
+    if (is_array($args)) {
557
+        foreach ($args as $name => $value) {
558
+            if ($class)
559
+                $value = "<span class='$class'>$value</span>";
560
+            $t = str_replace ("@$name@", $value, $text);
561
+            if ($text !== $t) {unset($args[$name]); $text = $t;}
562
+        }
563
+        // Si des variables n'ont pas ete inserees, le signaler
564
+        // (chaines de langues pas a jour)
565
+        if ($args) spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)),_LOG_DEBUG);
566
+    }
567
+
568
+    if (($GLOBALS['test_i18n'] OR (_request('var_mode') == 'traduction')) AND $class===null)
569
+        return "<span class=debug-traduction-erreur>$text</span>";
570
+    else
571
+        return $text;
573 572
 }
574 573
 
575 574
 // Afficher "ecrire/data/" au lieu de "data/" dans les messages
576 575
 // ou tmp/ au lieu de ../tmp/
577 576
 // http://doc.spip.org/@joli_repertoire
578 577
 function joli_repertoire($rep) {
579
-	$a = substr($rep,0,1);
580
-	if ($a<>'.' AND $a<>'/')
581
-		$rep = (_DIR_RESTREINT?'':_DIR_RESTREINT_ABS).$rep;
582
-	$rep = preg_replace(',(^\.\.\/),', '', $rep);
583
-	return $rep;
578
+    $a = substr($rep,0,1);
579
+    if ($a<>'.' AND $a<>'/')
580
+        $rep = (_DIR_RESTREINT?'':_DIR_RESTREINT_ABS).$rep;
581
+    $rep = preg_replace(',(^\.\.\/),', '', $rep);
582
+    return $rep;
584 583
 }
585 584
 
586 585
 
@@ -589,27 +588,27 @@  discard block
 block discarded – undo
589 588
 //
590 589
 // http://doc.spip.org/@spip_timer
591 590
 function spip_timer($t='rien', $raw = false) {
592
-	static $time;
593
-	$a=time(); $b=microtime();
594
-	// microtime peut contenir les microsecondes et le temps
595
-	$b=explode(' ',$b);
596
-	if (count($b)==2) $a = end($b); // plus precis !
597
-	$b = reset($b);
598
-	if (!isset($time[$t])) {
599
-		$time[$t] = $a + $b;
600
-	} else {
601
-		$p = ($a + $b - $time[$t]) * 1000;
602
-		unset($time[$t]);
591
+    static $time;
592
+    $a=time(); $b=microtime();
593
+    // microtime peut contenir les microsecondes et le temps
594
+    $b=explode(' ',$b);
595
+    if (count($b)==2) $a = end($b); // plus precis !
596
+    $b = reset($b);
597
+    if (!isset($time[$t])) {
598
+        $time[$t] = $a + $b;
599
+    } else {
600
+        $p = ($a + $b - $time[$t]) * 1000;
601
+        unset($time[$t]);
603 602
 #			echo "'$p'";exit;
604
-		if ($raw) return $p;
605
-		if ($p < 1000)
606
-			$s = '';
607
-		else {
608
-			$s = sprintf("%d ", $x = floor($p/1000));
609
-			$p -= ($x*1000);
610
-		}
611
-		return $s . sprintf($s?"%07.3f ms":"%.3f ms", $p);
612
-	}
603
+        if ($raw) return $p;
604
+        if ($p < 1000)
605
+            $s = '';
606
+        else {
607
+            $s = sprintf("%d ", $x = floor($p/1000));
608
+            $p -= ($x*1000);
609
+        }
610
+        return $s . sprintf($s?"%07.3f ms":"%.3f ms", $p);
611
+    }
613 612
 }
614 613
 
615 614
 
@@ -617,16 +616,16 @@  discard block
 block discarded – undo
617 616
 // sinon renvoie True et le date sauf si ca n'est pas souhaite
618 617
 // http://doc.spip.org/@spip_touch
619 618
 function spip_touch($fichier, $duree=0, $touch=true) {
620
-	if ($duree) {
621
-		clearstatcache();
622
-		if ((@$f=filemtime($fichier)) AND ($f >= time() - $duree))
623
-			return false;
624
-	}
625
-	if ($touch!==false) {
626
-		if (!@touch($fichier)) { spip_unlink($fichier); @touch($fichier); };
627
-		@chmod($fichier, _SPIP_CHMOD & ~0111);
628
-	}
629
-	return true;
619
+    if ($duree) {
620
+        clearstatcache();
621
+        if ((@$f=filemtime($fichier)) AND ($f >= time() - $duree))
622
+            return false;
623
+    }
624
+    if ($touch!==false) {
625
+        if (!@touch($fichier)) { spip_unlink($fichier); @touch($fichier); };
626
+        @chmod($fichier, _SPIP_CHMOD & ~0111);
627
+    }
628
+    return true;
630 629
 }
631 630
 
632 631
 // Ce declencheur de tache de fond, de l'espace prive (cf inc_presentation)
@@ -638,11 +637,11 @@  discard block
 block discarded – undo
638 637
 
639 638
 // http://doc.spip.org/@action_cron
640 639
 function action_cron() {
641
-	include_spip('inc/headers');
642
-	http_status(204); // No Content
643
-	header("Connection: close");
644
-	define('_DIRECT_CRON_FORCE',true);
645
-	cron();
640
+    include_spip('inc/headers');
641
+    http_status(204); // No Content
642
+    header("Connection: close");
643
+    define('_DIRECT_CRON_FORCE',true);
644
+    cron();
646 645
 }
647 646
 
648 647
 /**
@@ -662,19 +661,19 @@  discard block
 block discarded – undo
662 661
  * @return bool
663 662
  */
664 663
 function cron ($taches=array(), $taches_old= array()) {
665
-	// si pas en mode cron force, laisser tomber.
666
-	if (!defined('_DIRECT_CRON_FORCE')) return false;
667
-	if (!is_array($taches)) $taches = $taches_old; // compat anciens appels
668
-	// si taches a inserer en base et base inaccessible, laisser tomber
669
-	// sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
670
-	// queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
671
-	// et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
672
-	if ($taches AND count($taches) AND !spip_connect())  return false;
673
-	spip_log("cron !",'jq'._LOG_DEBUG);
674
-	if ($genie = charger_fonction('genie', 'inc', true)) {
675
-		return $genie($taches);
676
-	}
677
-	return false;
664
+    // si pas en mode cron force, laisser tomber.
665
+    if (!defined('_DIRECT_CRON_FORCE')) return false;
666
+    if (!is_array($taches)) $taches = $taches_old; // compat anciens appels
667
+    // si taches a inserer en base et base inaccessible, laisser tomber
668
+    // sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
669
+    // queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
670
+    // et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
671
+    if ($taches AND count($taches) AND !spip_connect())  return false;
672
+    spip_log("cron !",'jq'._LOG_DEBUG);
673
+    if ($genie = charger_fonction('genie', 'inc', true)) {
674
+        return $genie($taches);
675
+    }
676
+    return false;
678 677
 }
679 678
 
680 679
 /**
@@ -700,8 +699,8 @@  discard block
 block discarded – undo
700 699
  *	id of job
701 700
  */
702 701
 function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) {
703
-	include_spip('inc/queue');
704
-	return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority);
702
+    include_spip('inc/queue');
703
+    return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority);
705 704
 }
706 705
 
707 706
 /**
@@ -711,8 +710,8 @@  discard block
 block discarded – undo
711 710
  * @return bool
712 711
  */
713 712
 function job_queue_remove($id_job){
714
-	include_spip('inc/queue');
715
-	return queue_remove_job($id_job);
713
+    include_spip('inc/queue');
714
+    return queue_remove_job($id_job);
716 715
 }
717 716
 
718 717
 /**
@@ -724,8 +723,8 @@  discard block
 block discarded – undo
724 723
  *  or an array of simple array to link multiples objet in one time
725 724
  */
726 725
 function job_queue_link($id_job,$objets){
727
-	include_spip('inc/queue');
728
-	return queue_link_job($id_job,$objets);
726
+    include_spip('inc/queue');
727
+    return queue_link_job($id_job,$objets);
729 728
 }
730 729
 
731 730
 
@@ -742,62 +741,62 @@  discard block
 block discarded – undo
742 741
  * @return int
743 742
  */
744 743
 function queue_sleep_time_to_next_job($force=null) {
745
-	static $queue_next_job_time = -1;
746
-	if ($force===true)
747
-		$queue_next_job_time = -1;
748
-	elseif ($force)
749
-		$queue_next_job_time = $force;
750
-
751
-	if ($queue_next_job_time==-1) {
752
-		define('_JQ_NEXT_JOB_TIME_FILENAME',_DIR_TMP . "job_queue_next.txt");
753
-		// utiliser un cache memoire si dispo
754
-		if (include_spip('inc/memoization') AND defined('_MEMOIZE_MEMORY') AND _MEMOIZE_MEMORY) {
755
-			$queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME);
756
-		}
757
-		else {
758
-			$queue_next_job_time = null;
759
-			if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu))
760
-				$queue_next_job_time = intval($contenu);
761
-		}
762
-	}
763
-
764
-	if (is_null($queue_next_job_time))
765
-		return null;
766
-	if (!$_SERVER['REQUEST_TIME'])
767
-		$_SERVER['REQUEST_TIME'] = time();
768
-	return $queue_next_job_time-$_SERVER['REQUEST_TIME'];
744
+    static $queue_next_job_time = -1;
745
+    if ($force===true)
746
+        $queue_next_job_time = -1;
747
+    elseif ($force)
748
+        $queue_next_job_time = $force;
749
+
750
+    if ($queue_next_job_time==-1) {
751
+        define('_JQ_NEXT_JOB_TIME_FILENAME',_DIR_TMP . "job_queue_next.txt");
752
+        // utiliser un cache memoire si dispo
753
+        if (include_spip('inc/memoization') AND defined('_MEMOIZE_MEMORY') AND _MEMOIZE_MEMORY) {
754
+            $queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME);
755
+        }
756
+        else {
757
+            $queue_next_job_time = null;
758
+            if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu))
759
+                $queue_next_job_time = intval($contenu);
760
+        }
761
+    }
762
+
763
+    if (is_null($queue_next_job_time))
764
+        return null;
765
+    if (!$_SERVER['REQUEST_TIME'])
766
+        $_SERVER['REQUEST_TIME'] = time();
767
+    return $queue_next_job_time-$_SERVER['REQUEST_TIME'];
769 768
 }
770 769
 
771 770
 
772 771
 // transformation XML des "&" en "&amp;"
773 772
 // http://doc.spip.org/@quote_amp
774 773
 function quote_amp($u) {
775
-	return preg_replace(
776
-		"/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,5};)/i",
777
-		"&amp;",$u);
774
+    return preg_replace(
775
+        "/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,5};)/i",
776
+        "&amp;",$u);
778 777
 }
779 778
 
780 779
 // Production d'une balise Script valide
781 780
 // http://doc.spip.org/@http_script
782 781
 function http_script($script, $src='', $noscript='') {
783
-	static $done = array();
784
-
785
-	if ($src && !isset($done[$src])){
786
-		$done[$src] = true;
787
-		$src = find_in_path($src, _JAVASCRIPT);
788
-		$src = " src='$src'";
789
-	}
790
-	else $src = '';
791
-	if ($script)
792
-		$script = ("/*<![CDATA[*/\n" .
793
-		preg_replace(',</([^>]*)>,','<\/\1>', $script) .
794
-		"/*]]>*/");
795
-	if ($noscript)
796
-		$noscript = "<noscript>\n\t$noscript\n</noscript>\n";
797
-
798
-	return ($src OR $script OR $noscript)
799
-	? "<script type='text/javascript'$src>$script</script>$noscript"
800
-	: '';
782
+    static $done = array();
783
+
784
+    if ($src && !isset($done[$src])){
785
+        $done[$src] = true;
786
+        $src = find_in_path($src, _JAVASCRIPT);
787
+        $src = " src='$src'";
788
+    }
789
+    else $src = '';
790
+    if ($script)
791
+        $script = ("/*<![CDATA[*/\n" .
792
+        preg_replace(',</([^>]*)>,','<\/\1>', $script) .
793
+        "/*]]>*/");
794
+    if ($noscript)
795
+        $noscript = "<noscript>\n\t$noscript\n</noscript>\n";
796
+
797
+    return ($src OR $script OR $noscript)
798
+    ? "<script type='text/javascript'$src>$script</script>$noscript"
799
+    : '';
801 800
 }
802 801
 
803 802
 // Transforme n'importe quel champ en une chaine utilisable
@@ -805,7 +804,7 @@  discard block
 block discarded – undo
805 804
 // < ? php $x = '[(#TEXTE|texte_script)]'; ? >
806 805
 // http://doc.spip.org/@texte_script
807 806
 function texte_script($texte) {
808
-	return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte));
807
+    return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte));
809 808
 }
810 809
 
811 810
 // Chaque appel a cette fonction ajoute un repertoire en tete du chemin courant (path)
@@ -816,107 +815,107 @@  discard block
 block discarded – undo
816 815
 // Exception: si un $dossier_squelette est defini, il reste en tete, pour raison historique
817 816
 // http://doc.spip.org/@_chemin
818 817
 function _chemin($dir_path=NULL){
819
-	static $path_base = NULL;
820
-	static $path_full = NULL;
821
-	if ($path_base==NULL){
822
-		// Chemin standard depuis l'espace public
823
-		$path = defined('_SPIP_PATH') ? _SPIP_PATH :
824
-			_DIR_RACINE.':'.
825
-			_DIR_RACINE.'squelettes-dist/:'.
826
-			_DIR_RACINE.'prive/:'.
827
-			_DIR_RESTREINT;
828
-		// Ajouter squelettes/
829
-		if (@is_dir(_DIR_RACINE.'squelettes'))
830
-			$path = _DIR_RACINE.'squelettes/:' . $path;
831
-		foreach (explode(':', $path) as $dir) {
832
-			if (strlen($dir) AND substr($dir,-1) != '/')
833
-				$dir .= "/";
834
-			$path_base[] = $dir;
835
-		}
836
-		$path_full = $path_base;
837
-		// Et le(s) dossier(s) des squelettes nommes
838
-		if (strlen($GLOBALS['dossier_squelettes']))
839
-			foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d)
840
-				array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
841
-		$GLOBALS['path_sig'] = md5(serialize($path_full));
842
-	}
843
-	if ($dir_path===NULL) return $path_full;
844
-
845
-	if (strlen($dir_path)){
846
-		$tete = "";
847
-		if (reset($path_base)==_DIR_RACINE.'squelettes/')
848
-			$tete = array_shift($path_base);
849
-		$dirs = array_reverse(explode(':',$dir_path));
850
-		foreach($dirs as $dir_path){
851
-				#if ($dir_path{0}!='/')
852
-				#	$dir_path = $dir_path;
853
-				if (substr($dir_path,-1) != '/')
854
-					$dir_path .= "/";
855
-				if (!in_array($dir_path,$path_base))
856
-					array_unshift($path_base,$dir_path);
857
-		}
858
-		if (strlen($tete))
859
-			array_unshift($path_base,$tete);
860
-	}
861
-	$path_full = $path_base;
862
-	// Et le(s) dossier(s) des squelettes nommes
863
-	if (strlen($GLOBALS['dossier_squelettes']))
864
-		foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d)
865
-			array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
866
-
867
-	$GLOBALS['path_sig'] = md5(serialize($path_full));
868
-	return $path_full;
818
+    static $path_base = NULL;
819
+    static $path_full = NULL;
820
+    if ($path_base==NULL){
821
+        // Chemin standard depuis l'espace public
822
+        $path = defined('_SPIP_PATH') ? _SPIP_PATH :
823
+            _DIR_RACINE.':'.
824
+            _DIR_RACINE.'squelettes-dist/:'.
825
+            _DIR_RACINE.'prive/:'.
826
+            _DIR_RESTREINT;
827
+        // Ajouter squelettes/
828
+        if (@is_dir(_DIR_RACINE.'squelettes'))
829
+            $path = _DIR_RACINE.'squelettes/:' . $path;
830
+        foreach (explode(':', $path) as $dir) {
831
+            if (strlen($dir) AND substr($dir,-1) != '/')
832
+                $dir .= "/";
833
+            $path_base[] = $dir;
834
+        }
835
+        $path_full = $path_base;
836
+        // Et le(s) dossier(s) des squelettes nommes
837
+        if (strlen($GLOBALS['dossier_squelettes']))
838
+            foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d)
839
+                array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
840
+        $GLOBALS['path_sig'] = md5(serialize($path_full));
841
+    }
842
+    if ($dir_path===NULL) return $path_full;
843
+
844
+    if (strlen($dir_path)){
845
+        $tete = "";
846
+        if (reset($path_base)==_DIR_RACINE.'squelettes/')
847
+            $tete = array_shift($path_base);
848
+        $dirs = array_reverse(explode(':',$dir_path));
849
+        foreach($dirs as $dir_path){
850
+                #if ($dir_path{0}!='/')
851
+                #	$dir_path = $dir_path;
852
+                if (substr($dir_path,-1) != '/')
853
+                    $dir_path .= "/";
854
+                if (!in_array($dir_path,$path_base))
855
+                    array_unshift($path_base,$dir_path);
856
+        }
857
+        if (strlen($tete))
858
+            array_unshift($path_base,$tete);
859
+    }
860
+    $path_full = $path_base;
861
+    // Et le(s) dossier(s) des squelettes nommes
862
+    if (strlen($GLOBALS['dossier_squelettes']))
863
+        foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d)
864
+            array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
865
+
866
+    $GLOBALS['path_sig'] = md5(serialize($path_full));
867
+    return $path_full;
869 868
 }
870 869
 
871 870
 // http://doc.spip.org/@creer_chemin
872 871
 function creer_chemin() {
873
-	$path_a = _chemin();
874
-	static $c = '';
872
+    $path_a = _chemin();
873
+    static $c = '';
875 874
 
876
-	// on calcule le chemin si le dossier skel a change
877
-	if ($c != $GLOBALS['dossier_squelettes']) {
878
-		// assurer le non plantage lors de la montee de version :
879
-		$c = $GLOBALS['dossier_squelettes'];
880
-		$path_a = _chemin(''); // forcer un recalcul du chemin
881
-	}
882
-	return $path_a;
875
+    // on calcule le chemin si le dossier skel a change
876
+    if ($c != $GLOBALS['dossier_squelettes']) {
877
+        // assurer le non plantage lors de la montee de version :
878
+        $c = $GLOBALS['dossier_squelettes'];
879
+        $path_a = _chemin(''); // forcer un recalcul du chemin
880
+    }
881
+    return $path_a;
883 882
 }
884 883
 
885 884
 
886 885
 function lister_themes_prives(){
887
-	static $themes = null;
888
-	if (is_null($themes)){
889
-		// si pas encore definie
890
-		if (!defined('_SPIP_THEME_PRIVE'))
891
-			define('_SPIP_THEME_PRIVE', 'spip');
892
-		$themes = array(_SPIP_THEME_PRIVE);
893
-		// lors d'une installation neuve, prefs n'est pas definie.
894
-		if (isset($GLOBALS['visiteur_session']['prefs'])) {
895
-			$prefs = $GLOBALS['visiteur_session']['prefs'];
896
-		} else {
897
-			$prefs = array();
898
-		}
899
-		if (is_string($prefs))
900
-			$prefs = unserialize($GLOBALS['visiteur_session']['prefs']);
901
-		if (
902
-			((isset($prefs['theme']) AND $theme = $prefs['theme'])
903
-			OR (isset($GLOBALS['theme_prive_defaut']) AND $theme = $GLOBALS['theme_prive_defaut']))
904
-			AND $theme != _SPIP_THEME_PRIVE)
905
-			array_unshift($themes,$theme); // placer le theme choisi en tete
906
-	}
907
-	return $themes;
886
+    static $themes = null;
887
+    if (is_null($themes)){
888
+        // si pas encore definie
889
+        if (!defined('_SPIP_THEME_PRIVE'))
890
+            define('_SPIP_THEME_PRIVE', 'spip');
891
+        $themes = array(_SPIP_THEME_PRIVE);
892
+        // lors d'une installation neuve, prefs n'est pas definie.
893
+        if (isset($GLOBALS['visiteur_session']['prefs'])) {
894
+            $prefs = $GLOBALS['visiteur_session']['prefs'];
895
+        } else {
896
+            $prefs = array();
897
+        }
898
+        if (is_string($prefs))
899
+            $prefs = unserialize($GLOBALS['visiteur_session']['prefs']);
900
+        if (
901
+            ((isset($prefs['theme']) AND $theme = $prefs['theme'])
902
+            OR (isset($GLOBALS['theme_prive_defaut']) AND $theme = $GLOBALS['theme_prive_defaut']))
903
+            AND $theme != _SPIP_THEME_PRIVE)
904
+            array_unshift($themes,$theme); // placer le theme choisi en tete
905
+    }
906
+    return $themes;
908 907
 }
909 908
 
910 909
 function find_in_theme($file, $subdir='', $include=false){
911
-	static $themefiles=array();
912
-	if (isset($themefiles["$subdir$file"])) return $themefiles["$subdir$file"];
913
-	$themes = lister_themes_prives();
914
-	foreach($themes as $theme){
915
-		if ($f = find_in_path($file,"prive/themes/$theme/$subdir",$include))
916
-			return $themefiles["$subdir$file"] = $f;
917
-	}
918
-	spip_log("$file introuvable dans le theme prive ".reset($themes),'theme');
919
-	return $themefiles["$subdir$file"] = "";
910
+    static $themefiles=array();
911
+    if (isset($themefiles["$subdir$file"])) return $themefiles["$subdir$file"];
912
+    $themes = lister_themes_prives();
913
+    foreach($themes as $theme){
914
+        if ($f = find_in_path($file,"prive/themes/$theme/$subdir",$include))
915
+            return $themefiles["$subdir$file"] = $f;
916
+    }
917
+    spip_log("$file introuvable dans le theme prive ".reset($themes),'theme');
918
+    return $themefiles["$subdir$file"] = "";
920 919
 }
921 920
 
922 921
 // Cherche une image dans les dossiers images
@@ -926,22 +925,22 @@  discard block
 block discarded – undo
926 925
 // dans _DIR_IMG_PACK
927 926
 // http://doc.spip.org/@chemin_image
928 927
 function chemin_image($icone){
929
-	static $icone_renommer;
930
-	// gerer le cas d'un double appel en evitant de refaire le travail inutilement
931
-	if (strpos($icone,"/")!==false AND file_exists($icone)) return $icone;
928
+    static $icone_renommer;
929
+    // gerer le cas d'un double appel en evitant de refaire le travail inutilement
930
+    if (strpos($icone,"/")!==false AND file_exists($icone)) return $icone;
932 931
 	
933
-	// si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct
934
-	if (preg_match(',[.](png|gif|jpg)$,',$icone) AND $f = find_in_theme("images/$icone"))
935
-		return $f;
936
-	// sinon passer par le module de renommage
937
-	if (is_null($icone_renommer))
938
-		$icone_renommer = charger_fonction('icone_renommer','inc',true);
939
-	if ($icone_renommer){
940
-		list($icone,$fonction) = $icone_renommer($icone,"");
941
-		if (file_exists($icone))
942
-			return $icone;
943
-	}
944
-	return find_in_path ($icone, _NOM_IMG_PACK);
932
+    // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct
933
+    if (preg_match(',[.](png|gif|jpg)$,',$icone) AND $f = find_in_theme("images/$icone"))
934
+        return $f;
935
+    // sinon passer par le module de renommage
936
+    if (is_null($icone_renommer))
937
+        $icone_renommer = charger_fonction('icone_renommer','inc',true);
938
+    if ($icone_renommer){
939
+        list($icone,$fonction) = $icone_renommer($icone,"");
940
+        if (file_exists($icone))
941
+            return $icone;
942
+    }
943
+    return find_in_path ($icone, _NOM_IMG_PACK);
945 944
 }
946 945
 
947 946
 //
@@ -953,109 +952,109 @@  discard block
 block discarded – undo
953 952
 
954 953
 // http://doc.spip.org/@find_in_path
955 954
 function find_in_path ($file, $dirname='', $include=false) {
956
-	static $dirs=array();
957
-	static $inc = array(); # cf http://trac.rezo.net/trac/spip/changeset/14743
958
-	static $c = '';
959
-
960
-	// on calcule le chemin si le dossier skel a change
961
-	if ($c != $GLOBALS['dossier_squelettes']){
962
-		// assurer le non plantage lors de la montee de version :
963
-		$c = $GLOBALS['dossier_squelettes'];
964
-		creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig
965
-	}
966
-
967
-	if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) {
968
-		if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])
969
-			return false;
970
-		if ($include AND !isset($inc[$dirname][$file])) {
971
-			include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
972
-			$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
973
-		}
974
-		return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
975
-	}
976
-
977
-	$a = strrpos($file,'/');
978
-	if ($a !== false) {
979
-		$dirname .= substr($file, 0, ++$a);
980
-		$file = substr($file, $a);
981
-	}
982
-
983
-	foreach(creer_chemin() as $dir) {
984
-		if (!isset($dirs[$a = $dir . $dirname]))
985
-			$dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a) ;
986
-		if ($dirs[$a]) {
987
-			if (file_exists(_ROOT_CWD . ($a .= $file))) {
988
-				if ($include AND !isset($inc[$dirname][$file])) {
989
-					include_once _ROOT_CWD . $a;
990
-					$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
991
-				}
992
-				if (!defined('_SAUVER_CHEMIN')){
993
-					// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
994
-					if (is_null($GLOBALS['path_files'])) return $a;
995
-					define('_SAUVER_CHEMIN', true);
996
-				}
997
-				return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
998
-			}
999
-		}
1000
-	}
1001
-
1002
-	if ($include){
1003
-		spip_log("include_spip $dirname$file non trouve");
1004
-		if ($include==='required'){
1005
-			echo '<pre>',
1006
-			"<strong>Erreur Fatale</strong><br />";
1007
-			if (function_exists('debug_print_backtrace'))
1008
-				echo debug_print_backtrace();
1009
-			echo '</pre>';
1010
-			die("Erreur interne: ne peut inclure $dirname$file");
1011
-		}
1012
-	}
1013
-
1014
-	if (!defined('_SAUVER_CHEMIN')){
1015
-		// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1016
-		if (is_null($GLOBALS['path_files'])) return false;
1017
-		define('_SAUVER_CHEMIN', true);
1018
-	}
1019
-	return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
955
+    static $dirs=array();
956
+    static $inc = array(); # cf http://trac.rezo.net/trac/spip/changeset/14743
957
+    static $c = '';
958
+
959
+    // on calcule le chemin si le dossier skel a change
960
+    if ($c != $GLOBALS['dossier_squelettes']){
961
+        // assurer le non plantage lors de la montee de version :
962
+        $c = $GLOBALS['dossier_squelettes'];
963
+        creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig
964
+    }
965
+
966
+    if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) {
967
+        if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])
968
+            return false;
969
+        if ($include AND !isset($inc[$dirname][$file])) {
970
+            include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
971
+            $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
972
+        }
973
+        return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
974
+    }
975
+
976
+    $a = strrpos($file,'/');
977
+    if ($a !== false) {
978
+        $dirname .= substr($file, 0, ++$a);
979
+        $file = substr($file, $a);
980
+    }
981
+
982
+    foreach(creer_chemin() as $dir) {
983
+        if (!isset($dirs[$a = $dir . $dirname]))
984
+            $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a) ;
985
+        if ($dirs[$a]) {
986
+            if (file_exists(_ROOT_CWD . ($a .= $file))) {
987
+                if ($include AND !isset($inc[$dirname][$file])) {
988
+                    include_once _ROOT_CWD . $a;
989
+                    $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
990
+                }
991
+                if (!defined('_SAUVER_CHEMIN')){
992
+                    // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
993
+                    if (is_null($GLOBALS['path_files'])) return $a;
994
+                    define('_SAUVER_CHEMIN', true);
995
+                }
996
+                return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
997
+            }
998
+        }
999
+    }
1000
+
1001
+    if ($include){
1002
+        spip_log("include_spip $dirname$file non trouve");
1003
+        if ($include==='required'){
1004
+            echo '<pre>',
1005
+            "<strong>Erreur Fatale</strong><br />";
1006
+            if (function_exists('debug_print_backtrace'))
1007
+                echo debug_print_backtrace();
1008
+            echo '</pre>';
1009
+            die("Erreur interne: ne peut inclure $dirname$file");
1010
+        }
1011
+    }
1012
+
1013
+    if (!defined('_SAUVER_CHEMIN')){
1014
+        // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1015
+        if (is_null($GLOBALS['path_files'])) return false;
1016
+        define('_SAUVER_CHEMIN', true);
1017
+    }
1018
+    return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
1020 1019
 }
1021 1020
 
1022 1021
 function clear_path_cache(){
1023
-	$GLOBALS['path_files'] = array();
1024
-	spip_unlink(_CACHE_CHEMIN);
1022
+    $GLOBALS['path_files'] = array();
1023
+    spip_unlink(_CACHE_CHEMIN);
1025 1024
 }
1026 1025
 function load_path_cache(){
1027
-	// charger le path des plugins
1028
-	if (@is_readable(_CACHE_PLUGINS_PATH)){
1029
-		include_once(_CACHE_PLUGINS_PATH);
1030
-	}
1031
-	$GLOBALS['path_files'] = array();
1032
-	// si le visiteur est admin,
1033
-	// on ne recharge pas le cache pour forcer sa mise a jour
1034
-	if (
1035
-		// la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier
1036
-		//AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
1037
-		// utiliser le cookie est un pis aller qui marche 'en general'
1038
-		// on blinde par un second test au moment de la lecture de la session
1039
-		// !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
1040
-		// et en ignorant ce cache en cas de recalcul explicite
1041
-		!_request('var_mode')
1042
-		){
1043
-		// on essaye de lire directement sans verrou pour aller plus vite
1044
-		if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)){
1045
-			// mais si semble corrompu on relit avec un verrou
1046
-			if (!$GLOBALS['path_files']=unserialize($contenu)){
1047
-				lire_fichier(_CACHE_CHEMIN,$contenu);
1048
-				if (!$GLOBALS['path_files']=unserialize($contenu))
1049
-					$GLOBALS['path_files'] = array();
1050
-			}
1051
-		}
1052
-	}
1026
+    // charger le path des plugins
1027
+    if (@is_readable(_CACHE_PLUGINS_PATH)){
1028
+        include_once(_CACHE_PLUGINS_PATH);
1029
+    }
1030
+    $GLOBALS['path_files'] = array();
1031
+    // si le visiteur est admin,
1032
+    // on ne recharge pas le cache pour forcer sa mise a jour
1033
+    if (
1034
+        // la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier
1035
+        //AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
1036
+        // utiliser le cookie est un pis aller qui marche 'en general'
1037
+        // on blinde par un second test au moment de la lecture de la session
1038
+        // !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
1039
+        // et en ignorant ce cache en cas de recalcul explicite
1040
+        !_request('var_mode')
1041
+        ){
1042
+        // on essaye de lire directement sans verrou pour aller plus vite
1043
+        if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)){
1044
+            // mais si semble corrompu on relit avec un verrou
1045
+            if (!$GLOBALS['path_files']=unserialize($contenu)){
1046
+                lire_fichier(_CACHE_CHEMIN,$contenu);
1047
+                if (!$GLOBALS['path_files']=unserialize($contenu))
1048
+                    $GLOBALS['path_files'] = array();
1049
+            }
1050
+        }
1051
+    }
1053 1052
 }
1054 1053
 
1055 1054
 function save_path_cache(){
1056
-	if (defined('_SAUVER_CHEMIN')
1057
-		AND _SAUVER_CHEMIN)
1058
-		ecrire_fichier(_CACHE_CHEMIN,serialize($GLOBALS['path_files']));
1055
+    if (defined('_SAUVER_CHEMIN')
1056
+        AND _SAUVER_CHEMIN)
1057
+        ecrire_fichier(_CACHE_CHEMIN,serialize($GLOBALS['path_files']));
1059 1058
 }
1060 1059
 
1061 1060
 
@@ -1071,25 +1070,25 @@  discard block
 block discarded – undo
1071 1070
  */
1072 1071
 // http://doc.spip.org/@find_all_in_path
1073 1072
 function find_all_in_path($dir,$pattern, $recurs=false){
1074
-	$liste_fichiers=array();
1075
-	$maxfiles = 10000;
1076
-
1077
-	// Parcourir le chemin
1078
-	foreach (creer_chemin() as $d) {
1079
-		$f = $d.$dir;
1080
-		if (@is_dir($f)){
1081
-			$liste = preg_files($f,$pattern,$maxfiles-count($liste_fichiers),$recurs===true?array():$recurs);
1082
-			foreach($liste as $chemin){
1083
-				$nom = basename($chemin);
1084
-				// ne prendre que les fichiers pas deja trouves
1085
-				// car find_in_path prend le premier qu'il trouve,
1086
-				// les autres sont donc masques
1087
-				if (!isset($liste_fichiers[$nom]))
1088
-					$liste_fichiers[$nom] = $chemin;
1089
-			}
1090
-		}
1091
-	}
1092
-	return $liste_fichiers;
1073
+    $liste_fichiers=array();
1074
+    $maxfiles = 10000;
1075
+
1076
+    // Parcourir le chemin
1077
+    foreach (creer_chemin() as $d) {
1078
+        $f = $d.$dir;
1079
+        if (@is_dir($f)){
1080
+            $liste = preg_files($f,$pattern,$maxfiles-count($liste_fichiers),$recurs===true?array():$recurs);
1081
+            foreach($liste as $chemin){
1082
+                $nom = basename($chemin);
1083
+                // ne prendre que les fichiers pas deja trouves
1084
+                // car find_in_path prend le premier qu'il trouve,
1085
+                // les autres sont donc masques
1086
+                if (!isset($liste_fichiers[$nom]))
1087
+                    $liste_fichiers[$nom] = $chemin;
1088
+            }
1089
+        }
1090
+    }
1091
+    return $liste_fichiers;
1093 1092
 }
1094 1093
 
1095 1094
 // predicat sur les scripts de ecrire qui n'authentifient pas par cookie
@@ -1097,9 +1096,9 @@  discard block
 block discarded – undo
1097 1096
 // http://doc.spip.org/@autoriser_sans_cookie
1098 1097
 function autoriser_sans_cookie($nom)
1099 1098
 {
1100
-  static $autsanscookie = array('install', 'base_repair');
1101
-  $nom = preg_replace('/.php[3]?$/', '', basename($nom));
1102
-  return in_array($nom, $autsanscookie);
1099
+    static $autsanscookie = array('install', 'base_repair');
1100
+    $nom = preg_replace('/.php[3]?$/', '', basename($nom));
1101
+    return in_array($nom, $autsanscookie);
1103 1102
 }
1104 1103
 
1105 1104
 /**
@@ -1128,112 +1127,112 @@  discard block
 block discarded – undo
1128 1127
  */
1129 1128
 function generer_url_entite($id='', $entite='', $args='', $ancre='', $public=NULL, $type=NULL)
1130 1129
 {
1131
-	if ($public === NULL) $public = !test_espace_prive();
1132
-	$entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
1133
-
1134
-	if (!$public) {
1135
-		if (!$entite) return '';
1136
-		if (!function_exists('generer_url_ecrire_objet'))
1137
-			include_spip('inc/urls');
1138
-		$res = generer_url_ecrire_objet($entite,$id, $args, $ancre, false);
1139
-	} else {
1140
-		if ($type === NULL) {
1141
-			$type = ($GLOBALS['type_urls'] === 'page'
1142
-				AND $GLOBALS['meta']['type_urls'])
1143
-			?  $GLOBALS['meta']['type_urls']
1144
-			:  $GLOBALS['type_urls']; // pour SPIP <2
1145
-		}
1146
-
1147
-		$f = charger_fonction($type, 'urls', true);
1148
-		// se rabattre sur les urls page si les urls perso non dispo
1149
-		if (!$f) $f = charger_fonction('page', 'urls', true);
1150
-
1151
-		// si $entite='', on veut la fonction de passage URL ==> id
1152
-		// sinon on veut effectuer le passage id ==> URL
1153
-		if (!$entite) return $f;
1154
-
1155
-		// mais d'abord il faut tester le cas des urls sur une
1156
-		// base distante
1157
-		if (is_string($public)
1158
-		AND $g = charger_fonction('connect', 'urls', true))
1159
-			$f = $g;
1160
-
1161
-		$res = $f(intval($id), $entite, $args, $ancre, $public);
1162
-
1163
-	}
1164
-	if ($res) return $res;
1165
-	// Sinon c'est un raccourci ou compat SPIP < 2
1166
-	if (!function_exists($f = 'generer_url_' . $entite)) {
1167
-		if (!function_exists($f .= '_dist')) $f = '';
1168
-	}
1169
-	if ($f) {
1170
-		$url = $f($id, $args, $ancre);
1171
-		if (strlen($args))
1172
-			$url .= strstr($url, '?')
1173
-				? '&amp;'.$args
1174
-				: '?'.$args;
1175
-		return $url;
1176
-	}
1177
-	// On a ete gentil mais la ....
1178
-	spip_log("generer_url_entite: entite $entite ($f) inconnue $type $public");
1179
-	return '';
1130
+    if ($public === NULL) $public = !test_espace_prive();
1131
+    $entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
1132
+
1133
+    if (!$public) {
1134
+        if (!$entite) return '';
1135
+        if (!function_exists('generer_url_ecrire_objet'))
1136
+            include_spip('inc/urls');
1137
+        $res = generer_url_ecrire_objet($entite,$id, $args, $ancre, false);
1138
+    } else {
1139
+        if ($type === NULL) {
1140
+            $type = ($GLOBALS['type_urls'] === 'page'
1141
+                AND $GLOBALS['meta']['type_urls'])
1142
+            ?  $GLOBALS['meta']['type_urls']
1143
+            :  $GLOBALS['type_urls']; // pour SPIP <2
1144
+        }
1145
+
1146
+        $f = charger_fonction($type, 'urls', true);
1147
+        // se rabattre sur les urls page si les urls perso non dispo
1148
+        if (!$f) $f = charger_fonction('page', 'urls', true);
1149
+
1150
+        // si $entite='', on veut la fonction de passage URL ==> id
1151
+        // sinon on veut effectuer le passage id ==> URL
1152
+        if (!$entite) return $f;
1153
+
1154
+        // mais d'abord il faut tester le cas des urls sur une
1155
+        // base distante
1156
+        if (is_string($public)
1157
+        AND $g = charger_fonction('connect', 'urls', true))
1158
+            $f = $g;
1159
+
1160
+        $res = $f(intval($id), $entite, $args, $ancre, $public);
1161
+
1162
+    }
1163
+    if ($res) return $res;
1164
+    // Sinon c'est un raccourci ou compat SPIP < 2
1165
+    if (!function_exists($f = 'generer_url_' . $entite)) {
1166
+        if (!function_exists($f .= '_dist')) $f = '';
1167
+    }
1168
+    if ($f) {
1169
+        $url = $f($id, $args, $ancre);
1170
+        if (strlen($args))
1171
+            $url .= strstr($url, '?')
1172
+                ? '&amp;'.$args
1173
+                : '?'.$args;
1174
+        return $url;
1175
+    }
1176
+    // On a ete gentil mais la ....
1177
+    spip_log("generer_url_entite: entite $entite ($f) inconnue $type $public");
1178
+    return '';
1180 1179
 }
1181 1180
 
1182 1181
 function generer_url_ecrire_entite_edit($id, $entite, $args='', $ancre=''){
1183
-	$exec = objet_info($entite,'url_edit');
1184
-	$url = generer_url_ecrire($exec,$args);
1185
-	if (intval($id))
1186
-		$url = parametre_url($url,id_table_objet($entite),$id);
1187
-	else
1188
-		$url = parametre_url($url,'new','oui');
1189
-	if ($ancre)
1190
-		$url = ancre_url($url,$ancre);
1191
-	return $url;
1182
+    $exec = objet_info($entite,'url_edit');
1183
+    $url = generer_url_ecrire($exec,$args);
1184
+    if (intval($id))
1185
+        $url = parametre_url($url,id_table_objet($entite),$id);
1186
+    else
1187
+        $url = parametre_url($url,'new','oui');
1188
+    if ($ancre)
1189
+        $url = ancre_url($url,$ancre);
1190
+    return $url;
1192 1191
 }
1193 1192
 
1194 1193
 // http://doc.spip.org/@urls_connect_dist
1195 1194
 function urls_connect_dist($i, &$entite, $args='', $ancre='', $public=null) {
1196
-	include_spip('base/connect_sql');
1197
-	$id_type = id_table_objet($entite,$public);
1198
-	return _DIR_RACINE . get_spip_script('./')
1199
-	  . "?"._SPIP_PAGE."=$entite&$id_type=$i&connect=$public"
1200
-	  . (!$args ? '' : "&$args")
1201
-	  . (!$ancre ? '' : "#$ancre");
1195
+    include_spip('base/connect_sql');
1196
+    $id_type = id_table_objet($entite,$public);
1197
+    return _DIR_RACINE . get_spip_script('./')
1198
+        . "?"._SPIP_PAGE."=$entite&$id_type=$i&connect=$public"
1199
+        . (!$args ? '' : "&$args")
1200
+        . (!$ancre ? '' : "#$ancre");
1202 1201
 }
1203 1202
 
1204 1203
 
1205 1204
 // Transformer les caracteres utf8 d'une URL (farsi par ex) selon la RFC 1738
1206 1205
 function urlencode_1738($url) {
1207
-	if (preg_match(',[^\x00-\x7E],sS', $url)){
1208
-		$uri = '';
1209
-		for ($i=0; $i < strlen($url); $i++) {
1210
-			if (ord($a = $url[$i]) > 127)
1211
-				$a = rawurlencode($a);
1212
-			$uri .= $a;
1213
-		}
1214
-		$url = $uri;
1215
-	}
1216
-	return quote_amp($url);
1206
+    if (preg_match(',[^\x00-\x7E],sS', $url)){
1207
+        $uri = '';
1208
+        for ($i=0; $i < strlen($url); $i++) {
1209
+            if (ord($a = $url[$i]) > 127)
1210
+                $a = rawurlencode($a);
1211
+            $uri .= $a;
1212
+        }
1213
+        $url = $uri;
1214
+    }
1215
+    return quote_amp($url);
1217 1216
 }
1218 1217
 
1219 1218
 // http://doc.spip.org/@generer_url_entite_absolue
1220 1219
 function generer_url_entite_absolue($id='', $entite='', $args='', $ancre='', $connect=NULL)
1221 1220
 {
1222
-	if (!$connect) $connect = true;
1223
-	$h = generer_url_entite($id, $entite, $args, $ancre, $connect);
1224
-	if (!preg_match(',^\w+:,', $h)) {
1225
-		include_spip('inc/filtres_mini');
1226
-		$h = url_absolue($h);
1227
-	}
1228
-	return  $h;
1221
+    if (!$connect) $connect = true;
1222
+    $h = generer_url_entite($id, $entite, $args, $ancre, $connect);
1223
+    if (!preg_match(',^\w+:,', $h)) {
1224
+        include_spip('inc/filtres_mini');
1225
+        $h = url_absolue($h);
1226
+    }
1227
+    return  $h;
1229 1228
 }
1230 1229
 
1231 1230
 // Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines
1232 1231
 // variables d'environnement comme $_SERVER[HTTPS] ou ini_get(register_globals)
1233 1232
 // http://doc.spip.org/@test_valeur_serveur
1234 1233
 function test_valeur_serveur($truc) {
1235
-	if (!$truc) return false;
1236
-	return (strtolower($truc) !== 'off');
1234
+    if (!$truc) return false;
1235
+    return (strtolower($truc) !== 'off');
1237 1236
 }
1238 1237
 
1239 1238
 //
@@ -1258,51 +1257,51 @@  discard block
 block discarded – undo
1258 1257
  */
1259 1258
 function url_de_base($profondeur=null) {
1260 1259
 
1261
-	static $url = array();
1262
-	if (is_array($profondeur)) return $url = $profondeur;
1263
-	if ($profondeur===false) return $url;
1264
-
1265
-	if (is_null($profondeur)) $profondeur = $GLOBALS['profondeur_url'];
1266
-
1267
-	if (isset($url[$profondeur]))
1268
-		return $url[$profondeur];
1269
-
1270
-	$http = (
1271
-		(isset($_SERVER["SCRIPT_URI"]) AND
1272
-			substr($_SERVER["SCRIPT_URI"],0,5) == 'https')
1273
-		OR (isset($_SERVER['HTTPS']) AND
1274
-		    test_valeur_serveur($_SERVER['HTTPS']))
1275
-	) ? 'https' : 'http';
1276
-	// note : HTTP_HOST contient le :port si necessaire
1277
-	$host = $_SERVER['HTTP_HOST'];
1278
-	// si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
1279
-	if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
1280
-		$host = $GLOBALS['meta']['adresse_site'];
1281
-		if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
1282
-			$http = $scheme;
1283
-			$host = str_replace("{$scheme}://", '', $host);
1284
-		}
1285
-	}
1286
-	if (isset($_SERVER['SERVER_PORT'])
1287
-		AND $port=$_SERVER['SERVER_PORT']
1288
-		AND strpos($host,":")==false){
1289
-		if ($http=="http" AND $port!=80) $host.=":$port";
1290
-		if ($http=="https" AND $port!=443) $host.=":$port";
1291
-	}
1292
-	if (!$GLOBALS['REQUEST_URI']){
1293
-		if (isset($_SERVER['REQUEST_URI'])) {
1294
-			$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
1295
-		} else {
1296
-			$GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF'];
1297
-			if ($_SERVER['QUERY_STRING']
1298
-			AND !strpos($_SERVER['REQUEST_URI'], '?'))
1299
-				$GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
1300
-		}
1301
-	}
1302
-
1303
-	$url[$profondeur] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$profondeur);
1304
-
1305
-	return $url[$profondeur];
1260
+    static $url = array();
1261
+    if (is_array($profondeur)) return $url = $profondeur;
1262
+    if ($profondeur===false) return $url;
1263
+
1264
+    if (is_null($profondeur)) $profondeur = $GLOBALS['profondeur_url'];
1265
+
1266
+    if (isset($url[$profondeur]))
1267
+        return $url[$profondeur];
1268
+
1269
+    $http = (
1270
+        (isset($_SERVER["SCRIPT_URI"]) AND
1271
+            substr($_SERVER["SCRIPT_URI"],0,5) == 'https')
1272
+        OR (isset($_SERVER['HTTPS']) AND
1273
+            test_valeur_serveur($_SERVER['HTTPS']))
1274
+    ) ? 'https' : 'http';
1275
+    // note : HTTP_HOST contient le :port si necessaire
1276
+    $host = $_SERVER['HTTP_HOST'];
1277
+    // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
1278
+    if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
1279
+        $host = $GLOBALS['meta']['adresse_site'];
1280
+        if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
1281
+            $http = $scheme;
1282
+            $host = str_replace("{$scheme}://", '', $host);
1283
+        }
1284
+    }
1285
+    if (isset($_SERVER['SERVER_PORT'])
1286
+        AND $port=$_SERVER['SERVER_PORT']
1287
+        AND strpos($host,":")==false){
1288
+        if ($http=="http" AND $port!=80) $host.=":$port";
1289
+        if ($http=="https" AND $port!=443) $host.=":$port";
1290
+    }
1291
+    if (!$GLOBALS['REQUEST_URI']){
1292
+        if (isset($_SERVER['REQUEST_URI'])) {
1293
+            $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
1294
+        } else {
1295
+            $GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF'];
1296
+            if ($_SERVER['QUERY_STRING']
1297
+            AND !strpos($_SERVER['REQUEST_URI'], '?'))
1298
+                $GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
1299
+        }
1300
+    }
1301
+
1302
+    $url[$profondeur] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$profondeur);
1303
+
1304
+    return $url[$profondeur];
1306 1305
 }
1307 1306
 /**
1308 1307
  * fonction testable de construction d'une url appelee par url_de_base()
@@ -1313,25 +1312,25 @@  discard block
 block discarded – undo
1313 1312
  * @return string
1314 1313
  */
1315 1314
 function url_de_($http,$host,$request,$prof=0){
1316
-	$prof = max($prof,0);
1315
+    $prof = max($prof,0);
1317 1316
 
1318
-	$myself = ltrim($request,'/');
1319
-	# supprimer la chaine de GET
1320
-	list($myself) = explode('?', $myself);
1321
-	// vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
1322
-	// protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
1323
-	if (strpos($myself,'://') !== false) {
1324
-		$myself = explode('://',$myself);
1325
-		array_shift($myself);
1326
-		$myself = implode('://',$myself);
1327
-		$myself = explode('/',$myself);
1328
-		array_shift($myself);
1329
-		$myself = implode('/',$myself);
1330
-	}
1331
-	$url = join('/', array_slice(explode('/', $myself), 0, -1-$prof)).'/';
1317
+    $myself = ltrim($request,'/');
1318
+    # supprimer la chaine de GET
1319
+    list($myself) = explode('?', $myself);
1320
+    // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
1321
+    // protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
1322
+    if (strpos($myself,'://') !== false) {
1323
+        $myself = explode('://',$myself);
1324
+        array_shift($myself);
1325
+        $myself = implode('://',$myself);
1326
+        $myself = explode('/',$myself);
1327
+        array_shift($myself);
1328
+        $myself = implode('/',$myself);
1329
+    }
1330
+    $url = join('/', array_slice(explode('/', $myself), 0, -1-$prof)).'/';
1332 1331
 
1333
-	$url = $http.'://'.rtrim($host,'/').'/'.ltrim($url,'/');
1334
-	return $url;
1332
+    $url = $http.'://'.rtrim($host,'/').'/'.ltrim($url,'/');
1333
+    return $url;
1335 1334
 }
1336 1335
 
1337 1336
 
@@ -1345,25 +1344,25 @@  discard block
 block discarded – undo
1345 1344
 
1346 1345
 // http://doc.spip.org/@generer_url_ecrire
1347 1346
 function generer_url_ecrire($script='', $args="", $no_entities=false, $rel=false) {
1348
-	if (!$rel)
1349
-		$rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
1350
-	else if (!is_string($rel))
1351
-		$rel = _DIR_RESTREINT ? _DIR_RESTREINT :
1352
-			('./'  . _SPIP_ECRIRE_SCRIPT);
1347
+    if (!$rel)
1348
+        $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
1349
+    else if (!is_string($rel))
1350
+        $rel = _DIR_RESTREINT ? _DIR_RESTREINT :
1351
+            ('./'  . _SPIP_ECRIRE_SCRIPT);
1353 1352
 
1354
-	@list($script, $ancre) = explode('#', $script);
1355
-	if ($script AND ($script<>'accueil' OR $rel))
1356
-		$args = "?exec=$script" . (!$args ? '' : "&$args");
1357
-	elseif ($args)
1358
-		$args ="?$args";
1359
-	if ($ancre) $args .= "#$ancre";
1360
-	return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
1353
+    @list($script, $ancre) = explode('#', $script);
1354
+    if ($script AND ($script<>'accueil' OR $rel))
1355
+        $args = "?exec=$script" . (!$args ? '' : "&$args");
1356
+    elseif ($args)
1357
+        $args ="?$args";
1358
+    if ($ancre) $args .= "#$ancre";
1359
+    return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
1361 1360
 }
1362 1361
 
1363 1362
 // http://doc.spip.org/@generer_url_retour
1364 1363
 function generer_url_retour($script, $args="")
1365 1364
 {
1366
-	return rawurlencode(generer_url_ecrire($script, $args, true, true));
1365
+    return rawurlencode(generer_url_ecrire($script, $args, true, true));
1367 1366
 }
1368 1367
 
1369 1368
 //
@@ -1374,42 +1373,42 @@  discard block
 block discarded – undo
1374 1373
 // dans le cas de '', un $default = './' peut servir (comme dans urls/page.php)
1375 1374
 // http://doc.spip.org/@get_spip_script
1376 1375
 function get_spip_script($default='') {
1377
-	# cas define('_SPIP_SCRIPT', '');
1378
-	if (_SPIP_SCRIPT)
1379
-		return _SPIP_SCRIPT;
1380
-	else
1381
-		return $default;
1376
+    # cas define('_SPIP_SCRIPT', '');
1377
+    if (_SPIP_SCRIPT)
1378
+        return _SPIP_SCRIPT;
1379
+    else
1380
+        return $default;
1382 1381
 }
1383 1382
 
1384 1383
 // http://doc.spip.org/@generer_url_public
1385 1384
 function generer_url_public($script='', $args="", $no_entities=false, $rel=true, $action='') {
1386
-	// si le script est une action (spip_pass, spip_inscription),
1387
-	// standardiser vers la nouvelle API
1385
+    // si le script est une action (spip_pass, spip_inscription),
1386
+    // standardiser vers la nouvelle API
1388 1387
 
1389
-	if (!$action) $action = get_spip_script();
1390
-	if ($script)
1391
-		$action = parametre_url($action, _SPIP_PAGE, $script, '&');
1388
+    if (!$action) $action = get_spip_script();
1389
+    if ($script)
1390
+        $action = parametre_url($action, _SPIP_PAGE, $script, '&');
1392 1391
 
1393
-	if ($args) {
1394
-		if (is_array($args)) {
1395
-			$r = '';
1396
-			foreach($args as $k => $v) $r .= '&' . $k . '=' . $v;
1397
-			$args = substr($r,1);
1398
-		}
1399
-		$action .=
1400
-			(strpos($action, '?') !== false ? '&' : '?') . $args;
1401
-	}
1402
-	if (!$no_entities)
1403
-		$action = quote_amp($action);
1392
+    if ($args) {
1393
+        if (is_array($args)) {
1394
+            $r = '';
1395
+            foreach($args as $k => $v) $r .= '&' . $k . '=' . $v;
1396
+            $args = substr($r,1);
1397
+        }
1398
+        $action .=
1399
+            (strpos($action, '?') !== false ? '&' : '?') . $args;
1400
+    }
1401
+    if (!$no_entities)
1402
+        $action = quote_amp($action);
1404 1403
 
1405
-	// ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
1406
-	return ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(),'/') . preg_replace(",^/[.]/,","/","/$action"));
1404
+    // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
1405
+    return ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(),'/') . preg_replace(",^/[.]/,","/","/$action"));
1407 1406
 }
1408 1407
 
1409 1408
 // http://doc.spip.org/@generer_url_prive
1410 1409
 function generer_url_prive($script, $args="", $no_entities=false) {
1411 1410
 
1412
-	return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS .  'prive.php');
1411
+    return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS .  'prive.php');
1413 1412
 }
1414 1413
 
1415 1414
 // Pour les formulaires en methode POST,
@@ -1419,21 +1418,21 @@  discard block
 block discarded – undo
1419 1418
 
1420 1419
 // http://doc.spip.org/@generer_form_ecrire
1421 1420
 function generer_form_ecrire($script, $corps, $atts='', $submit='') {
1422
-	global $spip_lang_right;
1421
+    global $spip_lang_right;
1423 1422
 
1424
-	$script1 = explode('&', $script);
1425
-	$script1 = reset($script1);
1423
+    $script1 = explode('&', $script);
1424
+    $script1 = reset($script1);
1426 1425
 
1427
-	return "<form action='"
1428
-	. ($script ? generer_url_ecrire($script) : '')
1429
-	. "' "
1430
-	. ($atts ? $atts : " method='post'")
1431
-	.  "><div>\n"
1432
-	. "<input type='hidden' name='exec' value='$script1' />"
1433
-	. $corps
1434
-	. (!$submit ? '' :
1435
-	     ("<div style='text-align: $spip_lang_right'><input class='fondo' type='submit' value=\"".entites_html($submit)."\" /></div>"))
1436
-	. "</div></form>\n";
1426
+    return "<form action='"
1427
+    . ($script ? generer_url_ecrire($script) : '')
1428
+    . "' "
1429
+    . ($atts ? $atts : " method='post'")
1430
+    .  "><div>\n"
1431
+    . "<input type='hidden' name='exec' value='$script1' />"
1432
+    . $corps
1433
+    . (!$submit ? '' :
1434
+         ("<div style='text-align: $spip_lang_right'><input class='fondo' type='submit' value=\"".entites_html($submit)."\" /></div>"))
1435
+    . "</div></form>\n";
1437 1436
 }
1438 1437
 
1439 1438
 /**
@@ -1451,37 +1450,37 @@  discard block
 block discarded – undo
1451 1450
  * @return string
1452 1451
  */
1453 1452
 function generer_form_action($script, $corps, $atts='', $public=false) {
1454
-	// si l'on est dans l'espace prive, on garde dans l'url
1455
-	// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
1456
-	// ou non de proceder a l'authentification (cas typique de l'install par exemple)
1457
-	$h = (_DIR_RACINE AND !$public)
1458
-	? generer_url_ecrire(_request('exec'))
1459
-	: generer_url_public();
1460
-
1461
-	return "\n<form action='" .
1462
-	  $h .
1463
-	  "'" .
1464
-	  $atts .
1465
-	  ">\n" .
1466
-	  "<div>" .
1467
-  	  "\n<input type='hidden' name='action' value='$script' />" .
1468
-	  $corps .
1469
-	  "</div></form>";
1453
+    // si l'on est dans l'espace prive, on garde dans l'url
1454
+    // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
1455
+    // ou non de proceder a l'authentification (cas typique de l'install par exemple)
1456
+    $h = (_DIR_RACINE AND !$public)
1457
+    ? generer_url_ecrire(_request('exec'))
1458
+    : generer_url_public();
1459
+
1460
+    return "\n<form action='" .
1461
+        $h .
1462
+        "'" .
1463
+        $atts .
1464
+        ">\n" .
1465
+        "<div>" .
1466
+        "\n<input type='hidden' name='action' value='$script' />" .
1467
+        $corps .
1468
+        "</div></form>";
1470 1469
 }
1471 1470
 
1472 1471
 // http://doc.spip.org/@generer_url_action
1473 1472
 function generer_url_action($script, $args="", $no_entities=false , $public = false) {
1474
-	// si l'on est dans l'espace prive, on garde dans l'url
1475
-	// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
1476
-	// ou non de proceder a l'authentification (cas typique de l'install par exemple)
1477
-	$url = (_DIR_RACINE  AND !$public)
1478
-	  ? generer_url_ecrire(_request('exec'))
1479
-	  :  generer_url_public('','',false,false);
1480
-	$url = parametre_url($url,'action',$script);
1481
-	if ($args) $url .= quote_amp('&'.$args);
1473
+    // si l'on est dans l'espace prive, on garde dans l'url
1474
+    // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
1475
+    // ou non de proceder a l'authentification (cas typique de l'install par exemple)
1476
+    $url = (_DIR_RACINE  AND !$public)
1477
+      ? generer_url_ecrire(_request('exec'))
1478
+      :  generer_url_public('','',false,false);
1479
+    $url = parametre_url($url,'action',$script);
1480
+    if ($args) $url .= quote_amp('&'.$args);
1482 1481
 
1483
-	if ($no_entities) $url = str_replace('&amp;','&',$url);
1484
-	return $url;
1482
+    if ($no_entities) $url = str_replace('&amp;','&',$url);
1483
+    return $url;
1485 1484
 }
1486 1485
 
1487 1486
 
@@ -1494,8 +1493,8 @@  discard block
 block discarded – undo
1494 1493
  * @param string $ta
1495 1494
  */
1496 1495
 function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
1497
-	spip_initialisation_core($pi,$pa,$ti,$ta);
1498
-	spip_initialisation_suite();
1496
+    spip_initialisation_core($pi,$pa,$ti,$ta);
1497
+    spip_initialisation_suite();
1499 1498
 }
1500 1499
 
1501 1500
 /**
@@ -1513,235 +1512,235 @@  discard block
 block discarded – undo
1513 1512
  * @param string $ta
1514 1513
  */
1515 1514
 function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
1516
-	static $too_late = 0;
1517
-	if ($too_late++) return;
1515
+    static $too_late = 0;
1516
+    if ($too_late++) return;
1518 1517
 	
1519
-	// Declaration des repertoires
1518
+    // Declaration des repertoires
1520 1519
 
1521
-	// le nom du repertoire plugins/ activables/desactivables
1522
-	if (!defined('_DIR_PLUGINS')) define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
1520
+    // le nom du repertoire plugins/ activables/desactivables
1521
+    if (!defined('_DIR_PLUGINS')) define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
1523 1522
 
1524
-	// le nom du repertoire des extensions/ permanentes du core, toujours actives
1525
-	if (!defined('_DIR_PLUGINS_DIST')) define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/");
1523
+    // le nom du repertoire des extensions/ permanentes du core, toujours actives
1524
+    if (!defined('_DIR_PLUGINS_DIST')) define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/");
1526 1525
 
1527
-	// le nom du repertoire des librairies
1528
-	if (!defined('_DIR_LIB')) define('_DIR_LIB', _DIR_RACINE . "lib/");
1526
+    // le nom du repertoire des librairies
1527
+    if (!defined('_DIR_LIB')) define('_DIR_LIB', _DIR_RACINE . "lib/");
1529 1528
 	
1530
-	if (!defined('_DIR_IMG')) define('_DIR_IMG', $pa);
1531
-	if (!defined('_DIR_LOGOS')) define('_DIR_LOGOS', $pa);
1532
-	if (!defined('_DIR_IMG_ICONES')) define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/");
1533
-
1534
-	if (!defined('_DIR_DUMP')) define('_DIR_DUMP', $ti . "dump/");
1535
-	if (!defined('_DIR_SESSIONS')) define('_DIR_SESSIONS', $ti . "sessions/");
1536
-	if (!defined('_DIR_TRANSFERT')) define('_DIR_TRANSFERT', $ti . "upload/");
1537
-	if (!defined('_DIR_CACHE')) define('_DIR_CACHE', $ti . "cache/");
1538
-	if (!defined('_DIR_CACHE_XML')) define('_DIR_CACHE_XML', _DIR_CACHE . "xml/");
1539
-	if (!defined('_DIR_SKELS')) define('_DIR_SKELS',  _DIR_CACHE . "skel/");
1540
-	if (!defined('_DIR_AIDE')) define('_DIR_AIDE',  _DIR_CACHE . "aide/");
1541
-	if (!defined('_DIR_TMP')) define('_DIR_TMP', $ti);
1542
-
1543
-	if (!defined('_DIR_VAR')) define('_DIR_VAR', $ta);
1544
-
1545
-	if (!defined('_DIR_ETC')) define('_DIR_ETC', $pi);
1546
-	if (!defined('_DIR_CONNECT')) define('_DIR_CONNECT', $pi);
1547
-	if (!defined('_DIR_CHMOD')) define('_DIR_CHMOD', $pi);
1548
-
1549
-	if (!isset($GLOBALS['test_dirs']))
1550
-	  // Pas $pi car il est bon de le mettre hors ecriture apres intstall
1551
-	  // il sera rajoute automatiquement si besoin a l'etape 2 de l'install
1552
-		$GLOBALS['test_dirs'] =  array($pa, $ti, $ta);
1553
-
1554
-	// Declaration des fichiers
1555
-
1556
-	if (!defined('_CACHE_PLUGINS_PATH')) define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php");
1557
-	if (!defined('_CACHE_PLUGINS_OPT')) define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php");
1558
-	if (!defined('_CACHE_PLUGINS_FCT')) define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php");
1559
-	if (!defined('_CACHE_PIPELINES')) define('_CACHE_PIPELINES',  _DIR_CACHE."charger_pipelines.php");
1560
-	if (!defined('_CACHE_CHEMIN')) define('_CACHE_CHEMIN',  _DIR_CACHE."chemin.txt");
1561
-
1562
-	# attention .php obligatoire pour ecrire_fichier_securise
1563
-	if (!defined('_FILE_META')) define('_FILE_META', $ti . 'meta_cache.php');
1564
-	if (!defined('_DIR_LOG')) define('_DIR_LOG', _DIR_TMP . 'log/');
1565
-	if (!defined('_FILE_LOG')) define('_FILE_LOG', 'spip');
1566
-	if (!defined('_FILE_LOG_SUFFIX')) define('_FILE_LOG_SUFFIX', '.log');
1567
-
1568
-	// Le fichier de connexion a la base de donnees
1569
-	// tient compte des anciennes versions (inc_connect...)
1570
-	if (!defined('_FILE_CONNECT_INS')) define('_FILE_CONNECT_INS', 'connect');
1571
-	if (!defined('_FILE_CONNECT')) define('_FILE_CONNECT',
1572
-		(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
1573
-	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
1574
-	:	false)));
1575
-
1576
-	// Le fichier de reglages des droits
1577
-	if (!defined('_FILE_CHMOD_INS')) define('_FILE_CHMOD_INS', 'chmod');
1578
-	if (!defined('_FILE_CHMOD')) define('_FILE_CHMOD',
1579
-		(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
1580
-	:	false));
1581
-
1582
-	if (!defined('_FILE_LDAP')) define('_FILE_LDAP', 'ldap.php');
1583
-
1584
-	if (!defined('_FILE_TMP_SUFFIX')) define('_FILE_TMP_SUFFIX', '.tmp.php');
1585
-	if (!defined('_FILE_CONNECT_TMP')) define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
1586
-	if (!defined('_FILE_CHMOD_TMP')) define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
1587
-
1588
-	// Definition des droits d'acces en ecriture
1589
-	if (!defined('_SPIP_CHMOD') AND _FILE_CHMOD)
1590
-		include_once _FILE_CHMOD;
1591
-
1592
-	// Se mefier des fichiers mal remplis!
1593
-	if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', 0777);
1594
-
1595
-	// Le charset par defaut lors de l'installation
1596
-	if (!defined('_DEFAULT_CHARSET')) define('_DEFAULT_CHARSET', 'utf-8');
1597
-	if (!defined('_ROOT_PLUGINS')) define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/");
1598
-	if (!defined('_ROOT_PLUGINS_DIST')) define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/");
1599
-	if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE,'',_DIR_PLUGINS_SUPPL));
1600
-
1601
-	// La taille des Log
1602
-	if (!defined('_MAX_LOG')) define('_MAX_LOG', 100);
1603
-
1604
-	// Sommes-nous dans l'empire du Mal ?
1605
-	// (ou sous le signe du Pingouin, ascendant GNU ?)
1606
-	if (strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false){
1607
-		if (!defined('_OS_SERVEUR')) define('_OS_SERVEUR', 'windows');
1608
-		if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',1); // utiliser le flock php
1609
-	}
1610
-	else {
1611
-		if (!defined('_OS_SERVEUR')) define('_OS_SERVEUR', '');
1612
-		if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',1); // utiliser le flock php
1613
-		#if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
1614
-	}
1615
-
1616
-	// Langue par defaut
1617
-	if (!defined('_LANGUE_PAR_DEFAUT')) define('_LANGUE_PAR_DEFAUT','fr');
1618
-
1619
-	// PHP_VERSION_ID dispo depuis PHP 5.2.7
1620
-	if (!defined('PHP_VERSION_ID')) {
1621
-	   $version = explode('.',PHP_VERSION);
1622
-	   define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
1623
-	}
1624
-
1625
-	//
1626
-	// Module de lecture/ecriture/suppression de fichiers utilisant flock()
1627
-	// (non surchargeable en l'etat ; attention si on utilise include_spip()
1628
-	// pour le rendre surchargeable, on va provoquer un reecriture
1629
-	// systematique du noyau ou une baisse de perfs => a etudier)
1630
-	include_once _ROOT_RESTREINT . 'inc/flock.php';
1631
-
1632
-	// charger tout de suite le path et son cache
1633
-	load_path_cache();
1634
-
1635
-	// *********** traiter les variables ************
1636
-
1637
-	//
1638
-	// Securite
1639
-	//
1640
-
1641
-	// Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
1642
-	if (isset($_REQUEST['GLOBALS'])) die();
1643
-	// nettoyer les magic quotes \' et les caracteres nuls %00
1644
-	spip_desinfecte($_GET);
1645
-	spip_desinfecte($_POST);
1646
-	spip_desinfecte($_COOKIE);
1647
-	spip_desinfecte($_REQUEST);
1648
-
1649
-	// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
1650
-	if (PHP_VERSION_ID<50300) {
1651
-		@set_magic_quotes_runtime(0);
1652
-	}
1653
-
1654
-	// Si les variables sont passees en global par le serveur,
1655
-	// il faut faire quelques verifications de base
1656
-	$avertir_register_globals = false;
1657
-	if (test_valeur_serveur(@ini_get('register_globals'))) {
1658
-		// ne pas desinfecter les globales en profondeur car elle contient aussi les
1659
-		// precedentes, qui seraient desinfectees 2 fois.
1660
-		spip_desinfecte($GLOBALS,false);
1661
-		if (include_spip('inc/php3'))
1662
-			spip_register_globals(true);
1663
-
1664
-		$avertir_register_globals = true;
1665
-	}
1666
-
1667
-	// appliquer le cookie_prefix
1668
-	if ($GLOBALS['cookie_prefix'] != 'spip') {
1669
-		include_spip('inc/cookie');
1670
-		recuperer_cookies_spip($GLOBALS['cookie_prefix']);
1671
-	}
1672
-
1673
-	//
1674
-	// Capacites php (en fonction de la version)
1675
-	//
1676
-	$GLOBALS['flag_ob'] = (function_exists("ob_start")
1677
-		&& function_exists("ini_get")
1678
-		&& !strstr(@ini_get('disable_functions'), 'ob_'));
1679
-	$GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
1680
-	$GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != "");
1681
-	$GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
1682
-		(get_cfg_var('upload_max_filesize') > 0));
1683
-
1684
-
1685
-	// Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
1686
-	if (isset($_SERVER['REQUEST_URI'])) {
1687
-		$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
1688
-	} else {
1689
-		$GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF'];
1690
-		if ($_SERVER['QUERY_STRING']
1691
-		AND !strpos($_SERVER['REQUEST_URI'], '?'))
1692
-			$GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
1693
-	}
1694
-
1695
-	// Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
1696
-	if (!defined('_RENOUVELLE_ALEA')) define('_RENOUVELLE_ALEA', 12 * 3600);
1697
-
1698
-	// charger les meta si possible et renouveller l'alea au besoin
1699
-	// charge aussi effacer_meta et ecrire_meta
1700
-	$inc_meta = charger_fonction('meta', 'inc');
1701
-	$inc_meta();
1702
-
1703
-	// on a pas pu le faire plus tot
1704
-	if  ($avertir_register_globals)
1705
-		avertir_auteurs("register_globals",_L("Probl&egrave;me de s&eacute;curit&eacute; : register_globals=on; dans php.ini &agrave; corriger."));
1706
-
1707
-	// nombre de repertoires depuis la racine
1708
-	// on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
1709
-	// ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
1710
-	// le calcul est faux)
1711
-	if (!_DIR_RESTREINT)
1712
-		$GLOBALS['profondeur_url'] = 1;
1713
-	else {
1714
-		$uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
1715
-		$uri_ref = $_SERVER["SCRIPT_NAME"];
1716
-		if (!$uri_ref
1717
-			// si on est appele avec un autre ti, on est sans doute en mutu
1718
-			// si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
1719
-			// a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
1720
-			// s'en remettre a l'adresse du site. alea jacta est.
1721
-			OR $ti!==_NOM_TEMPORAIRES_INACCESSIBLES){
1722
-
1723
-			if (isset($GLOBALS['meta']['adresse_site'])) {
1724
-				$uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
1725
-				$uri_ref = $uri_ref['path'].'/';
1726
-			}
1727
-		  else
1728
-			  $uri_ref = "";
1729
-		}
1730
-		if (!$uri OR !$uri_ref)
1731
-			$GLOBALS['profondeur_url'] = 0;
1732
-		else {
1733
-			$GLOBALS['profondeur_url'] = max(0,
1734
-				substr_count($uri[0], '/')
1735
-				- substr_count($uri_ref,'/'));
1736
-		}
1737
-	}
1738
-	// s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
1739
-	if (_FILE_CONNECT) {
1740
-		if (verifier_visiteur()=='0minirezo'
1741
-			// si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
1742
-		  AND !isset($_COOKIE['spip_admin']))
1743
-			clear_path_cache();
1744
-	}
1529
+    if (!defined('_DIR_IMG')) define('_DIR_IMG', $pa);
1530
+    if (!defined('_DIR_LOGOS')) define('_DIR_LOGOS', $pa);
1531
+    if (!defined('_DIR_IMG_ICONES')) define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/");
1532
+
1533
+    if (!defined('_DIR_DUMP')) define('_DIR_DUMP', $ti . "dump/");
1534
+    if (!defined('_DIR_SESSIONS')) define('_DIR_SESSIONS', $ti . "sessions/");
1535
+    if (!defined('_DIR_TRANSFERT')) define('_DIR_TRANSFERT', $ti . "upload/");
1536
+    if (!defined('_DIR_CACHE')) define('_DIR_CACHE', $ti . "cache/");
1537
+    if (!defined('_DIR_CACHE_XML')) define('_DIR_CACHE_XML', _DIR_CACHE . "xml/");
1538
+    if (!defined('_DIR_SKELS')) define('_DIR_SKELS',  _DIR_CACHE . "skel/");
1539
+    if (!defined('_DIR_AIDE')) define('_DIR_AIDE',  _DIR_CACHE . "aide/");
1540
+    if (!defined('_DIR_TMP')) define('_DIR_TMP', $ti);
1541
+
1542
+    if (!defined('_DIR_VAR')) define('_DIR_VAR', $ta);
1543
+
1544
+    if (!defined('_DIR_ETC')) define('_DIR_ETC', $pi);
1545
+    if (!defined('_DIR_CONNECT')) define('_DIR_CONNECT', $pi);
1546
+    if (!defined('_DIR_CHMOD')) define('_DIR_CHMOD', $pi);
1547
+
1548
+    if (!isset($GLOBALS['test_dirs']))
1549
+        // Pas $pi car il est bon de le mettre hors ecriture apres intstall
1550
+        // il sera rajoute automatiquement si besoin a l'etape 2 de l'install
1551
+        $GLOBALS['test_dirs'] =  array($pa, $ti, $ta);
1552
+
1553
+    // Declaration des fichiers
1554
+
1555
+    if (!defined('_CACHE_PLUGINS_PATH')) define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php");
1556
+    if (!defined('_CACHE_PLUGINS_OPT')) define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php");
1557
+    if (!defined('_CACHE_PLUGINS_FCT')) define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php");
1558
+    if (!defined('_CACHE_PIPELINES')) define('_CACHE_PIPELINES',  _DIR_CACHE."charger_pipelines.php");
1559
+    if (!defined('_CACHE_CHEMIN')) define('_CACHE_CHEMIN',  _DIR_CACHE."chemin.txt");
1560
+
1561
+    # attention .php obligatoire pour ecrire_fichier_securise
1562
+    if (!defined('_FILE_META')) define('_FILE_META', $ti . 'meta_cache.php');
1563
+    if (!defined('_DIR_LOG')) define('_DIR_LOG', _DIR_TMP . 'log/');
1564
+    if (!defined('_FILE_LOG')) define('_FILE_LOG', 'spip');
1565
+    if (!defined('_FILE_LOG_SUFFIX')) define('_FILE_LOG_SUFFIX', '.log');
1566
+
1567
+    // Le fichier de connexion a la base de donnees
1568
+    // tient compte des anciennes versions (inc_connect...)
1569
+    if (!defined('_FILE_CONNECT_INS')) define('_FILE_CONNECT_INS', 'connect');
1570
+    if (!defined('_FILE_CONNECT')) define('_FILE_CONNECT',
1571
+        (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
1572
+    :	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
1573
+    :	false)));
1574
+
1575
+    // Le fichier de reglages des droits
1576
+    if (!defined('_FILE_CHMOD_INS')) define('_FILE_CHMOD_INS', 'chmod');
1577
+    if (!defined('_FILE_CHMOD')) define('_FILE_CHMOD',
1578
+        (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
1579
+    :	false));
1580
+
1581
+    if (!defined('_FILE_LDAP')) define('_FILE_LDAP', 'ldap.php');
1582
+
1583
+    if (!defined('_FILE_TMP_SUFFIX')) define('_FILE_TMP_SUFFIX', '.tmp.php');
1584
+    if (!defined('_FILE_CONNECT_TMP')) define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
1585
+    if (!defined('_FILE_CHMOD_TMP')) define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
1586
+
1587
+    // Definition des droits d'acces en ecriture
1588
+    if (!defined('_SPIP_CHMOD') AND _FILE_CHMOD)
1589
+        include_once _FILE_CHMOD;
1590
+
1591
+    // Se mefier des fichiers mal remplis!
1592
+    if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', 0777);
1593
+
1594
+    // Le charset par defaut lors de l'installation
1595
+    if (!defined('_DEFAULT_CHARSET')) define('_DEFAULT_CHARSET', 'utf-8');
1596
+    if (!defined('_ROOT_PLUGINS')) define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/");
1597
+    if (!defined('_ROOT_PLUGINS_DIST')) define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/");
1598
+    if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE,'',_DIR_PLUGINS_SUPPL));
1599
+
1600
+    // La taille des Log
1601
+    if (!defined('_MAX_LOG')) define('_MAX_LOG', 100);
1602
+
1603
+    // Sommes-nous dans l'empire du Mal ?
1604
+    // (ou sous le signe du Pingouin, ascendant GNU ?)
1605
+    if (strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false){
1606
+        if (!defined('_OS_SERVEUR')) define('_OS_SERVEUR', 'windows');
1607
+        if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',1); // utiliser le flock php
1608
+    }
1609
+    else {
1610
+        if (!defined('_OS_SERVEUR')) define('_OS_SERVEUR', '');
1611
+        if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',1); // utiliser le flock php
1612
+        #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
1613
+    }
1614
+
1615
+    // Langue par defaut
1616
+    if (!defined('_LANGUE_PAR_DEFAUT')) define('_LANGUE_PAR_DEFAUT','fr');
1617
+
1618
+    // PHP_VERSION_ID dispo depuis PHP 5.2.7
1619
+    if (!defined('PHP_VERSION_ID')) {
1620
+        $version = explode('.',PHP_VERSION);
1621
+        define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
1622
+    }
1623
+
1624
+    //
1625
+    // Module de lecture/ecriture/suppression de fichiers utilisant flock()
1626
+    // (non surchargeable en l'etat ; attention si on utilise include_spip()
1627
+    // pour le rendre surchargeable, on va provoquer un reecriture
1628
+    // systematique du noyau ou une baisse de perfs => a etudier)
1629
+    include_once _ROOT_RESTREINT . 'inc/flock.php';
1630
+
1631
+    // charger tout de suite le path et son cache
1632
+    load_path_cache();
1633
+
1634
+    // *********** traiter les variables ************
1635
+
1636
+    //
1637
+    // Securite
1638
+    //
1639
+
1640
+    // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
1641
+    if (isset($_REQUEST['GLOBALS'])) die();
1642
+    // nettoyer les magic quotes \' et les caracteres nuls %00
1643
+    spip_desinfecte($_GET);
1644
+    spip_desinfecte($_POST);
1645
+    spip_desinfecte($_COOKIE);
1646
+    spip_desinfecte($_REQUEST);
1647
+
1648
+    // Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
1649
+    if (PHP_VERSION_ID<50300) {
1650
+        @set_magic_quotes_runtime(0);
1651
+    }
1652
+
1653
+    // Si les variables sont passees en global par le serveur,
1654
+    // il faut faire quelques verifications de base
1655
+    $avertir_register_globals = false;
1656
+    if (test_valeur_serveur(@ini_get('register_globals'))) {
1657
+        // ne pas desinfecter les globales en profondeur car elle contient aussi les
1658
+        // precedentes, qui seraient desinfectees 2 fois.
1659
+        spip_desinfecte($GLOBALS,false);
1660
+        if (include_spip('inc/php3'))
1661
+            spip_register_globals(true);
1662
+
1663
+        $avertir_register_globals = true;
1664
+    }
1665
+
1666
+    // appliquer le cookie_prefix
1667
+    if ($GLOBALS['cookie_prefix'] != 'spip') {
1668
+        include_spip('inc/cookie');
1669
+        recuperer_cookies_spip($GLOBALS['cookie_prefix']);
1670
+    }
1671
+
1672
+    //
1673
+    // Capacites php (en fonction de la version)
1674
+    //
1675
+    $GLOBALS['flag_ob'] = (function_exists("ob_start")
1676
+        && function_exists("ini_get")
1677
+        && !strstr(@ini_get('disable_functions'), 'ob_'));
1678
+    $GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
1679
+    $GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != "");
1680
+    $GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
1681
+        (get_cfg_var('upload_max_filesize') > 0));
1682
+
1683
+
1684
+    // Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
1685
+    if (isset($_SERVER['REQUEST_URI'])) {
1686
+        $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
1687
+    } else {
1688
+        $GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF'];
1689
+        if ($_SERVER['QUERY_STRING']
1690
+        AND !strpos($_SERVER['REQUEST_URI'], '?'))
1691
+            $GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
1692
+    }
1693
+
1694
+    // Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
1695
+    if (!defined('_RENOUVELLE_ALEA')) define('_RENOUVELLE_ALEA', 12 * 3600);
1696
+
1697
+    // charger les meta si possible et renouveller l'alea au besoin
1698
+    // charge aussi effacer_meta et ecrire_meta
1699
+    $inc_meta = charger_fonction('meta', 'inc');
1700
+    $inc_meta();
1701
+
1702
+    // on a pas pu le faire plus tot
1703
+    if  ($avertir_register_globals)
1704
+        avertir_auteurs("register_globals",_L("Probl&egrave;me de s&eacute;curit&eacute; : register_globals=on; dans php.ini &agrave; corriger."));
1705
+
1706
+    // nombre de repertoires depuis la racine
1707
+    // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
1708
+    // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
1709
+    // le calcul est faux)
1710
+    if (!_DIR_RESTREINT)
1711
+        $GLOBALS['profondeur_url'] = 1;
1712
+    else {
1713
+        $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
1714
+        $uri_ref = $_SERVER["SCRIPT_NAME"];
1715
+        if (!$uri_ref
1716
+            // si on est appele avec un autre ti, on est sans doute en mutu
1717
+            // si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
1718
+            // a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
1719
+            // s'en remettre a l'adresse du site. alea jacta est.
1720
+            OR $ti!==_NOM_TEMPORAIRES_INACCESSIBLES){
1721
+
1722
+            if (isset($GLOBALS['meta']['adresse_site'])) {
1723
+                $uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
1724
+                $uri_ref = $uri_ref['path'].'/';
1725
+            }
1726
+            else
1727
+                $uri_ref = "";
1728
+        }
1729
+        if (!$uri OR !$uri_ref)
1730
+            $GLOBALS['profondeur_url'] = 0;
1731
+        else {
1732
+            $GLOBALS['profondeur_url'] = max(0,
1733
+                substr_count($uri[0], '/')
1734
+                - substr_count($uri_ref,'/'));
1735
+        }
1736
+    }
1737
+    // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
1738
+    if (_FILE_CONNECT) {
1739
+        if (verifier_visiteur()=='0minirezo'
1740
+            // si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
1741
+          AND !isset($_COOKIE['spip_admin']))
1742
+            clear_path_cache();
1743
+    }
1745 1744
 
1746 1745
 }
1747 1746
 
@@ -1751,205 +1750,205 @@  discard block
 block discarded – undo
1751 1750
  *
1752 1751
  */
1753 1752
 function spip_initialisation_suite() {
1754
-	static $too_late = 0;
1755
-	if ($too_late++) return;
1753
+    static $too_late = 0;
1754
+    if ($too_late++) return;
1756 1755
 
1757
-	// taille mini des login
1758
-	if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4);
1756
+    // taille mini des login
1757
+    if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4);
1759 1758
 
1760
-	// la taille maxi des logos (0 : pas de limite)
1761
-	if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
1762
-	if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
1763
-	if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
1759
+    // la taille maxi des logos (0 : pas de limite)
1760
+    if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
1761
+    if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
1762
+    if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
1764 1763
 
1765
-	if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
1764
+    if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
1766 1765
 
1767
-	if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
1768
-	if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
1769
-	if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
1770
-	if (!defined('_PASS_LONGUEUR_MINI')) define('_PASS_LONGUEUR_MINI',6);
1766
+    if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
1767
+    if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
1768
+    if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
1769
+    if (!defined('_PASS_LONGUEUR_MINI')) define('_PASS_LONGUEUR_MINI',6);
1771 1770
 
1772 1771
 
1773
-	// Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
1772
+    // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
1774 1773
         if (!defined('_IMG_QUALITE')) define('_IMG_QUALITE', 85); # valeur par defaut
1775 1774
         if (!defined('_IMG_GD_QUALITE')) define('_IMG_GD_QUALITE', _IMG_QUALITE); # surcharge pour la lib GD
1776 1775
         if (!defined('_IMG_CONVERT_QUALITE')) define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); # surcharge pour imagick en ligne de commande
1777
-	// Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
1776
+    // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
1778 1777
         if (!defined('_IMG_IMAGICK_QUALITE')) define('_IMG_IMAGICK_QUALITE', 75); # surcharge pour imagick en PHP
1779 1778
 
1780
-	if (!defined('_COPIE_LOCALE_MAX_SIZE')) define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet
1781
-
1782
-	// qq chaines standard
1783
-	if (!defined('_ACCESS_FILE_NAME')) define('_ACCESS_FILE_NAME', '.htaccess');
1784
-	if (!defined('_AUTH_USER_FILE')) define('_AUTH_USER_FILE', '.htpasswd');
1785
-	if (!defined('_SPIP_DUMP')) define('_SPIP_DUMP', 'dump@nom_site@@[email protected]');
1786
-	if (!defined('_CACHE_RUBRIQUES')) define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
1787
-	if (!defined('_CACHE_RUBRIQUES_MAX')) define('_CACHE_RUBRIQUES_MAX', 500);
1788
-
1789
-	if (!defined('_EXTENSION_SQUELETTES')) define('_EXTENSION_SQUELETTES', 'html');
1790
-
1791
-	if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE',
1792
-		// "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
1793
-		//"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n");
1794
-		//"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n");
1795
-	       // "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n");
1796
-		"<!DOCTYPE html>\n");
1797
-	if (!defined('_DOCTYPE_AIDE')) define('_DOCTYPE_AIDE',
1798
-	       "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
1799
-
1800
-	// L'adresse de base du site ; on peut mettre '' si la racine est geree par
1801
-	// le script de l'espace public, alias  index.php
1802
-	if (!defined('_SPIP_SCRIPT')) define('_SPIP_SCRIPT', 'spip.php');
1803
-	// argument page, personalisable en cas de conflit avec un autre script
1804
-	if (!defined('_SPIP_PAGE')) define('_SPIP_PAGE', 'page');
1805
-
1806
-	// le script de l'espace prive
1807
-	// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
1808
-	// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
1809
-	// meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html
1810
-
1811
-	if (!defined('_SPIP_ECRIRE_SCRIPT')) define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
1812
-	       preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ?
1813
-	       'index.php' : '');
1814
-
1815
-
1816
-	if (!defined('_SPIP_AJAX'))
1817
-		define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
1818
-			? 1
1819
-		       : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
1820
-
1821
-	// La requete est-elle en ajax ?
1822
-	if (!defined('_AJAX')) define('_AJAX',
1823
-		(isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
1824
-		OR @$_REQUEST['var_ajax_redir'] # redirection 302 apres ajax jQuery
1825
-		OR @$_REQUEST['var_ajaxcharset'] # compat ascendante pour plugins
1826
-		OR @$_REQUEST['var_ajax'] # forms ajax & inclure ajax de spip
1827
-		)
1828
-		AND !@$_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
1829
-	);
1830
-
1831
-	# nombre de pixels maxi pour calcul de la vignette avec gd
1832
-	# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
1833
-	# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
1834
-	if (!defined('_IMG_GD_MAX_PIXELS')) define('_IMG_GD_MAX_PIXELS',
1835
-		(isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)
1836
-		 ? $GLOBALS['meta']['max_taille_vignettes']
1837
-		 : 0);
1838
-
1839
-	if (!defined('_MEMORY_LIMIT_MIN')) define('_MEMORY_LIMIT_MIN',10); // en Mo
1840
-	// si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
1841
-	// on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
1842
-	// il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
1843
-	if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){
1844
-		if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
1845
-			$unit = strtolower(substr($memory,strlen($memory/1),1));
1846
-			switch($unit) {
1847
-				// Le modifieur 'G' est disponible depuis PHP 5.1.0
1848
-				case 'g': $memory *= 1024;
1849
-				case 'm': $memory *= 1024;
1850
-				case 'k': $memory *= 1024;
1851
-			}
1852
-			if ($memory<_MEMORY_LIMIT_MIN*1024*1024){
1853
-				ini_set('memory_limit',$m=_MEMORY_LIMIT_MIN.'M');
1854
-				if (trim(ini_get('memory_limit'))!=$m){
1855
-					if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
1856
-				}
1857
-			}
1858
-		}
1859
-		else
1860
-			if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
1861
-	}
1862
-	// Protocoles a normaliser dans les chaines de langues
1863
-	if (!defined('_PROTOCOLES_STD'))
1864
-		define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
1865
-
1866
-	init_var_mode();
1779
+    if (!defined('_COPIE_LOCALE_MAX_SIZE')) define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet
1780
+
1781
+    // qq chaines standard
1782
+    if (!defined('_ACCESS_FILE_NAME')) define('_ACCESS_FILE_NAME', '.htaccess');
1783
+    if (!defined('_AUTH_USER_FILE')) define('_AUTH_USER_FILE', '.htpasswd');
1784
+    if (!defined('_SPIP_DUMP')) define('_SPIP_DUMP', 'dump@nom_site@@[email protected]');
1785
+    if (!defined('_CACHE_RUBRIQUES')) define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
1786
+    if (!defined('_CACHE_RUBRIQUES_MAX')) define('_CACHE_RUBRIQUES_MAX', 500);
1787
+
1788
+    if (!defined('_EXTENSION_SQUELETTES')) define('_EXTENSION_SQUELETTES', 'html');
1789
+
1790
+    if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE',
1791
+        // "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
1792
+        //"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n");
1793
+        //"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n");
1794
+            // "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n");
1795
+        "<!DOCTYPE html>\n");
1796
+    if (!defined('_DOCTYPE_AIDE')) define('_DOCTYPE_AIDE',
1797
+            "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
1798
+
1799
+    // L'adresse de base du site ; on peut mettre '' si la racine est geree par
1800
+    // le script de l'espace public, alias  index.php
1801
+    if (!defined('_SPIP_SCRIPT')) define('_SPIP_SCRIPT', 'spip.php');
1802
+    // argument page, personalisable en cas de conflit avec un autre script
1803
+    if (!defined('_SPIP_PAGE')) define('_SPIP_PAGE', 'page');
1804
+
1805
+    // le script de l'espace prive
1806
+    // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
1807
+    // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
1808
+    // meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html
1809
+
1810
+    if (!defined('_SPIP_ECRIRE_SCRIPT')) define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
1811
+            preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ?
1812
+           'index.php' : '');
1813
+
1814
+
1815
+    if (!defined('_SPIP_AJAX'))
1816
+        define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
1817
+            ? 1
1818
+               : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
1819
+
1820
+    // La requete est-elle en ajax ?
1821
+    if (!defined('_AJAX')) define('_AJAX',
1822
+        (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
1823
+        OR @$_REQUEST['var_ajax_redir'] # redirection 302 apres ajax jQuery
1824
+        OR @$_REQUEST['var_ajaxcharset'] # compat ascendante pour plugins
1825
+        OR @$_REQUEST['var_ajax'] # forms ajax & inclure ajax de spip
1826
+        )
1827
+        AND !@$_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
1828
+    );
1829
+
1830
+    # nombre de pixels maxi pour calcul de la vignette avec gd
1831
+    # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
1832
+    # les configurations limitees en memoire ont un seuil plutot vers 1MPixel
1833
+    if (!defined('_IMG_GD_MAX_PIXELS')) define('_IMG_GD_MAX_PIXELS',
1834
+        (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)
1835
+         ? $GLOBALS['meta']['max_taille_vignettes']
1836
+         : 0);
1837
+
1838
+    if (!defined('_MEMORY_LIMIT_MIN')) define('_MEMORY_LIMIT_MIN',10); // en Mo
1839
+    // si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
1840
+    // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
1841
+    // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
1842
+    if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){
1843
+        if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
1844
+            $unit = strtolower(substr($memory,strlen($memory/1),1));
1845
+            switch($unit) {
1846
+                // Le modifieur 'G' est disponible depuis PHP 5.1.0
1847
+                case 'g': $memory *= 1024;
1848
+                case 'm': $memory *= 1024;
1849
+                case 'k': $memory *= 1024;
1850
+            }
1851
+            if ($memory<_MEMORY_LIMIT_MIN*1024*1024){
1852
+                ini_set('memory_limit',$m=_MEMORY_LIMIT_MIN.'M');
1853
+                if (trim(ini_get('memory_limit'))!=$m){
1854
+                    if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
1855
+                }
1856
+            }
1857
+        }
1858
+        else
1859
+            if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
1860
+    }
1861
+    // Protocoles a normaliser dans les chaines de langues
1862
+    if (!defined('_PROTOCOLES_STD'))
1863
+        define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
1864
+
1865
+    init_var_mode();
1867 1866
 }
1868 1867
 
1869 1868
 // Reperer les variables d'URL qui conditionnent la perennite du cache, des urls
1870 1869
 // ou d'autres petit caches (trouver_table, css et js compactes ...)
1871 1870
 // http://doc.spip.org/@init_var_mode
1872 1871
 function init_var_mode(){
1873
-	static $done = false;
1874
-	if (!$done) {
1875
-
1876
-		if (isset($_GET['var_mode'])) {
1877
-			// tout le monde peut calcul/recalcul
1878
-			if ($_GET['var_mode'] == 'calcul'
1879
-			OR $_GET['var_mode'] == 'recalcul') {
1880
-				if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
1881
-			}
1882
-			// preview, debug, blocs, urls et images necessitent une autorisation
1883
-			else if (in_array($_GET['var_mode'],array('preview','debug','inclure','urls','images','traduction'))) {
1884
-				include_spip('inc/autoriser');
1885
-				if (autoriser(
1886
-					($_GET['var_mode'] == 'preview')
1887
-						? 'previsualiser'
1888
-						: 'debug'
1889
-				)) {
1890
-					switch($_GET['var_mode']){
1891
-						case 'traduction':
1892
-							// forcer le calcul pour passer dans traduire
1893
-							if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1894
-							// et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
1895
-							if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1896
-							break;
1897
-						case 'preview':
1898
-							// basculer sur les criteres de preview dans les boucles
1899
-							if (!defined('_VAR_PREVIEW')) define('_VAR_PREVIEW',true);
1900
-							// forcer le calcul
1901
-							if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1902
-							// et ne pas enregistrer de cache
1903
-							if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1904
-							break;
1905
-						case 'inclure':
1906
-							// forcer le compilo et ignorer les caches existants
1907
-							if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1908
-							if (!defined('_VAR_INCLURE')) define('_VAR_INCLURE',true);
1909
-							// et ne pas enregistrer de cache
1910
-							if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1911
-							break;
1912
-						case 'urls':
1913
-							// forcer le compilo et ignorer les caches existants
1914
-							if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1915
-							if (!defined('_VAR_URLS')) define('_VAR_URLS',true);
1916
-							break;
1917
-						case 'images':
1918
-							// forcer le compilo et ignorer les caches existants
1919
-							if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1920
-							// indiquer qu'on doit recalculer les images
1921
-							if (!defined('_VAR_IMAGES')) define('_VAR_IMAGES',true);
1922
-							break;
1923
-						case 'debug':
1924
-							if (!defined('_VAR_MODE')) define('_VAR_MODE','debug');
1925
-							// et ne pas enregistrer de cache
1926
-							if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1927
-							break;
1928
-						default :
1929
-							if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
1930
-							break;
1931
-					}
1932
-          if (isset($GLOBALS['visiteur_session']['nom']))
1933
-					spip_log($GLOBALS['visiteur_session']['nom']
1934
-						. " "._VAR_MODE);
1935
-				}
1936
-				// pas autorise ?
1937
-				else {
1938
-					// si on n'est pas connecte on se redirige
1939
-					if (!$GLOBALS['visiteur_session']) {
1940
-						include_spip('inc/headers');
1941
-						redirige_par_entete(generer_url_public('login',
1942
-						'url='.rawurlencode(
1943
-						parametre_url(self(), 'var_mode', $_GET['var_mode'], '&')
1944
-						), true));
1945
-					}
1946
-					// sinon tant pis
1947
-				}
1948
-			}
1949
-			if (!defined('_VAR_MODE')) define('_VAR_MODE',false);
1950
-		}
1951
-		$done = true;
1952
-	}
1872
+    static $done = false;
1873
+    if (!$done) {
1874
+
1875
+        if (isset($_GET['var_mode'])) {
1876
+            // tout le monde peut calcul/recalcul
1877
+            if ($_GET['var_mode'] == 'calcul'
1878
+            OR $_GET['var_mode'] == 'recalcul') {
1879
+                if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
1880
+            }
1881
+            // preview, debug, blocs, urls et images necessitent une autorisation
1882
+            else if (in_array($_GET['var_mode'],array('preview','debug','inclure','urls','images','traduction'))) {
1883
+                include_spip('inc/autoriser');
1884
+                if (autoriser(
1885
+                    ($_GET['var_mode'] == 'preview')
1886
+                        ? 'previsualiser'
1887
+                        : 'debug'
1888
+                )) {
1889
+                    switch($_GET['var_mode']){
1890
+                        case 'traduction':
1891
+                            // forcer le calcul pour passer dans traduire
1892
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1893
+                            // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
1894
+                            if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1895
+                            break;
1896
+                        case 'preview':
1897
+                            // basculer sur les criteres de preview dans les boucles
1898
+                            if (!defined('_VAR_PREVIEW')) define('_VAR_PREVIEW',true);
1899
+                            // forcer le calcul
1900
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1901
+                            // et ne pas enregistrer de cache
1902
+                            if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1903
+                            break;
1904
+                        case 'inclure':
1905
+                            // forcer le compilo et ignorer les caches existants
1906
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1907
+                            if (!defined('_VAR_INCLURE')) define('_VAR_INCLURE',true);
1908
+                            // et ne pas enregistrer de cache
1909
+                            if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1910
+                            break;
1911
+                        case 'urls':
1912
+                            // forcer le compilo et ignorer les caches existants
1913
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1914
+                            if (!defined('_VAR_URLS')) define('_VAR_URLS',true);
1915
+                            break;
1916
+                        case 'images':
1917
+                            // forcer le compilo et ignorer les caches existants
1918
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
1919
+                            // indiquer qu'on doit recalculer les images
1920
+                            if (!defined('_VAR_IMAGES')) define('_VAR_IMAGES',true);
1921
+                            break;
1922
+                        case 'debug':
1923
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE','debug');
1924
+                            // et ne pas enregistrer de cache
1925
+                            if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
1926
+                            break;
1927
+                        default :
1928
+                            if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
1929
+                            break;
1930
+                    }
1931
+            if (isset($GLOBALS['visiteur_session']['nom']))
1932
+                    spip_log($GLOBALS['visiteur_session']['nom']
1933
+                        . " "._VAR_MODE);
1934
+                }
1935
+                // pas autorise ?
1936
+                else {
1937
+                    // si on n'est pas connecte on se redirige
1938
+                    if (!$GLOBALS['visiteur_session']) {
1939
+                        include_spip('inc/headers');
1940
+                        redirige_par_entete(generer_url_public('login',
1941
+                        'url='.rawurlencode(
1942
+                        parametre_url(self(), 'var_mode', $_GET['var_mode'], '&')
1943
+                        ), true));
1944
+                    }
1945
+                    // sinon tant pis
1946
+                }
1947
+            }
1948
+            if (!defined('_VAR_MODE')) define('_VAR_MODE',false);
1949
+        }
1950
+        $done = true;
1951
+    }
1953 1952
 }
1954 1953
 
1955 1954
 // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ;
@@ -1957,84 +1956,84 @@  discard block
 block discarded – undo
1957 1956
 // la commande is_readable('chemin/vers/fichier/interdit%00truc_normal')
1958 1957
 // http://doc.spip.org/@spip_desinfecte
1959 1958
 function spip_desinfecte(&$t,$deep = true) {
1960
-	static $magic_quotes;
1961
-	if (!isset($magic_quotes))
1962
-		$magic_quotes = @get_magic_quotes_gpc();
1963
-
1964
-	foreach ($t as $key => $val) {
1965
-		if (is_string($t[$key])) {
1966
-			if ($magic_quotes)
1967
-				$t[$key] = stripslashes($t[$key]);
1968
-			$t[$key] = str_replace(chr(0), '-', $t[$key]);
1969
-		}
1970
-		// traiter aussi les "texte_plus" de article_edit
1971
-		else if ($deep AND is_array($t[$key]) AND $key!=='GLOBALS')
1972
-			spip_desinfecte($t[$key],$deep);
1973
-	}
1959
+    static $magic_quotes;
1960
+    if (!isset($magic_quotes))
1961
+        $magic_quotes = @get_magic_quotes_gpc();
1962
+
1963
+    foreach ($t as $key => $val) {
1964
+        if (is_string($t[$key])) {
1965
+            if ($magic_quotes)
1966
+                $t[$key] = stripslashes($t[$key]);
1967
+            $t[$key] = str_replace(chr(0), '-', $t[$key]);
1968
+        }
1969
+        // traiter aussi les "texte_plus" de article_edit
1970
+        else if ($deep AND is_array($t[$key]) AND $key!=='GLOBALS')
1971
+            spip_desinfecte($t[$key],$deep);
1972
+    }
1974 1973
 }
1975 1974
 
1976 1975
 //  retourne le statut du visiteur s'il s'annonce
1977 1976
 
1978 1977
 // http://doc.spip.org/@verifier_visiteur
1979 1978
 function verifier_visiteur() {
1980
-	// Rq: pour que cette fonction marche depuis mes_options
1981
-	// il faut forcer l'init si ce n'est fait
1982
-	// mais on risque de perturber des plugins en initialisant trop tot
1983
-	// certaines constantes
1984
-	@spip_initialisation_core(
1985
-		(_DIR_RACINE  . _NOM_PERMANENTS_INACCESSIBLES),
1986
-		(_DIR_RACINE  . _NOM_PERMANENTS_ACCESSIBLES),
1987
-		(_DIR_RACINE  . _NOM_TEMPORAIRES_INACCESSIBLES),
1988
-		(_DIR_RACINE  . _NOM_TEMPORAIRES_ACCESSIBLES)
1989
-	);
1990
-
1991
-	// Demarrer une session NON AUTHENTIFIEE si on donne son nom
1992
-	// dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
1993
-	// Attention on separe bien session_nom et nom, pour eviter
1994
-	// les melanges entre donnees SQL et variables plus aleatoires
1995
-	$variables_session = array('session_nom', 'session_email');
1996
-	foreach($variables_session as $var) {
1997
-		if (_request($var) !== null) {
1998
-			$init = true;
1999
-			break;
2000
-		}
2001
-	}
2002
-	if (isset($init)) {
2003
-		#@spip_initialisation_suite();
2004
-		$session = charger_fonction('session', 'inc');
2005
-		$session();
2006
-		include_spip('inc/texte');
2007
-		foreach($variables_session as $var)
2008
-			if (($a = _request($var)) !== null)
2009
-				$GLOBALS['visiteur_session'][$var] = safehtml($a);
2010
-		if (!isset($GLOBALS['visiteur_session']['id_auteur']))
2011
-			$GLOBALS['visiteur_session']['id_auteur'] = 0;
2012
-		$session($GLOBALS['visiteur_session']);
2013
-		return 0;
2014
-	}
2015
-
2016
-	$h = (isset($_SERVER['PHP_AUTH_USER'])  AND !$GLOBALS['ignore_auth_http']);
2017
-	if ($h OR isset($_COOKIE['spip_session']) OR isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session'])) {
2018
-
2019
-		$session = charger_fonction('session', 'inc');
2020
-		if ($session()) {
2021
-			return $GLOBALS['visiteur_session']['statut'];
2022
-		}
2023
-		if ($h  AND isset($_SERVER['PHP_AUTH_PW'])) {
2024
-			include_spip('inc/auth');
2025
-			$h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
2026
-		}
2027
-		if ($h) {
2028
-			$GLOBALS['visiteur_session'] = $h;
2029
-			return $GLOBALS['visiteur_session']['statut'];
2030
-		}
2031
-	}
2032
-
2033
-	// au moins son navigateur nous dit la langue preferee de cet inconnu
2034
-	include_spip('inc/lang');
2035
-	utiliser_langue_visiteur();
2036
-
2037
-	return false;
1979
+    // Rq: pour que cette fonction marche depuis mes_options
1980
+    // il faut forcer l'init si ce n'est fait
1981
+    // mais on risque de perturber des plugins en initialisant trop tot
1982
+    // certaines constantes
1983
+    @spip_initialisation_core(
1984
+        (_DIR_RACINE  . _NOM_PERMANENTS_INACCESSIBLES),
1985
+        (_DIR_RACINE  . _NOM_PERMANENTS_ACCESSIBLES),
1986
+        (_DIR_RACINE  . _NOM_TEMPORAIRES_INACCESSIBLES),
1987
+        (_DIR_RACINE  . _NOM_TEMPORAIRES_ACCESSIBLES)
1988
+    );
1989
+
1990
+    // Demarrer une session NON AUTHENTIFIEE si on donne son nom
1991
+    // dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
1992
+    // Attention on separe bien session_nom et nom, pour eviter
1993
+    // les melanges entre donnees SQL et variables plus aleatoires
1994
+    $variables_session = array('session_nom', 'session_email');
1995
+    foreach($variables_session as $var) {
1996
+        if (_request($var) !== null) {
1997
+            $init = true;
1998
+            break;
1999
+        }
2000
+    }
2001
+    if (isset($init)) {
2002
+        #@spip_initialisation_suite();
2003
+        $session = charger_fonction('session', 'inc');
2004
+        $session();
2005
+        include_spip('inc/texte');
2006
+        foreach($variables_session as $var)
2007
+            if (($a = _request($var)) !== null)
2008
+                $GLOBALS['visiteur_session'][$var] = safehtml($a);
2009
+        if (!isset($GLOBALS['visiteur_session']['id_auteur']))
2010
+            $GLOBALS['visiteur_session']['id_auteur'] = 0;
2011
+        $session($GLOBALS['visiteur_session']);
2012
+        return 0;
2013
+    }
2014
+
2015
+    $h = (isset($_SERVER['PHP_AUTH_USER'])  AND !$GLOBALS['ignore_auth_http']);
2016
+    if ($h OR isset($_COOKIE['spip_session']) OR isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session'])) {
2017
+
2018
+        $session = charger_fonction('session', 'inc');
2019
+        if ($session()) {
2020
+            return $GLOBALS['visiteur_session']['statut'];
2021
+        }
2022
+        if ($h  AND isset($_SERVER['PHP_AUTH_PW'])) {
2023
+            include_spip('inc/auth');
2024
+            $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
2025
+        }
2026
+        if ($h) {
2027
+            $GLOBALS['visiteur_session'] = $h;
2028
+            return $GLOBALS['visiteur_session']['statut'];
2029
+        }
2030
+    }
2031
+
2032
+    // au moins son navigateur nous dit la langue preferee de cet inconnu
2033
+    include_spip('inc/lang');
2034
+    utiliser_langue_visiteur();
2035
+
2036
+    return false;
2038 2037
 }
2039 2038
 
2040 2039
 // selectionne la langue donnee en argument et memorise la courante
@@ -2046,18 +2045,18 @@  discard block
 block discarded – undo
2046 2045
 
2047 2046
 // http://doc.spip.org/@lang_select
2048 2047
 function lang_select ($lang=NULL) {
2049
-	static $pile_langues = array();
2050
-	if (!function_exists('changer_langue'))
2051
-		include_spip('inc/lang');
2052
-	if ($lang === NULL)
2053
-		$lang = array_pop($pile_langues);
2054
-	else {
2055
-		array_push($pile_langues, $GLOBALS['spip_lang']);
2056
-	}
2057
-	if (isset($GLOBALS['spip_lang']) AND $lang == $GLOBALS['spip_lang'])
2058
-		return $lang;
2059
-	changer_langue($lang);
2060
-	return $lang;
2048
+    static $pile_langues = array();
2049
+    if (!function_exists('changer_langue'))
2050
+        include_spip('inc/lang');
2051
+    if ($lang === NULL)
2052
+        $lang = array_pop($pile_langues);
2053
+    else {
2054
+        array_push($pile_langues, $GLOBALS['spip_lang']);
2055
+    }
2056
+    if (isset($GLOBALS['spip_lang']) AND $lang == $GLOBALS['spip_lang'])
2057
+        return $lang;
2058
+    changer_langue($lang);
2059
+    return $lang;
2061 2060
 }
2062 2061
 
2063 2062
 
@@ -2070,18 +2069,18 @@  discard block
 block discarded – undo
2070 2069
 // de fichier cache
2071 2070
 // http://doc.spip.org/@spip_session
2072 2071
 function spip_session($force = false) {
2073
-	static $session;
2074
-	if ($force OR !isset($session)) {
2075
-		$s = pipeline('definir_session',
2076
-			$GLOBALS['visiteur_session']
2077
-			? serialize($GLOBALS['visiteur_session'])
2078
-				. '_' . @$_COOKIE['spip_session']
2079
-			: ''
2080
-		);
2081
-		$session = $s ? substr(md5($s), 0, 8) : '';
2082
-	}
2083
-	#spip_log('session: '.$session);
2084
-	return $session;
2072
+    static $session;
2073
+    if ($force OR !isset($session)) {
2074
+        $s = pipeline('definir_session',
2075
+            $GLOBALS['visiteur_session']
2076
+            ? serialize($GLOBALS['visiteur_session'])
2077
+                . '_' . @$_COOKIE['spip_session']
2078
+            : ''
2079
+        );
2080
+        $session = $s ? substr(md5($s), 0, 8) : '';
2081
+    }
2082
+    #spip_log('session: '.$session);
2083
+    return $session;
2085 2084
 }
2086 2085
 
2087 2086
 
@@ -2098,18 +2097,18 @@  discard block
 block discarded – undo
2098 2097
 **/
2099 2098
 // http://doc.spip.org/@aide
2100 2099
 function aide($aide='', $distante = false) {
2101
-		$aider = charger_fonction('aider', 'inc', true);
2102
-	return $aider ?  $aider($aide, '', array(), $distante) : '';
2100
+        $aider = charger_fonction('aider', 'inc', true);
2101
+    return $aider ?  $aider($aide, '', array(), $distante) : '';
2103 2102
 }
2104 2103
 
2105 2104
 // normalement il faudrait creer exec/info.php, mais pour mettre juste ca:
2106 2105
 // http://doc.spip.org/@exec_info_dist
2107 2106
 function exec_info_dist() {
2108
-	global $connect_statut;
2109
-	if ($connect_statut == '0minirezo')
2110
-		phpinfo();
2111
-	else
2112
-		echo "pas admin";
2107
+    global $connect_statut;
2108
+    if ($connect_statut == '0minirezo')
2109
+        phpinfo();
2110
+    else
2111
+        echo "pas admin";
2113 2112
 }
2114 2113
 
2115 2114
 /**
@@ -2129,12 +2128,12 @@  discard block
 block discarded – undo
2129 2128
  * 		- string si $message à false.
2130 2129
 **/
2131 2130
 function erreur_squelette($message='', $lieu='') {
2132
-	$debusquer = charger_fonction('debusquer', 'public');
2133
-	if (is_array($lieu)) {
2134
-		include_spip('public/compiler');
2135
-		$lieu = reconstruire_contexte_compil($lieu);
2136
-	}
2137
-	return $debusquer($message, $lieu);
2131
+    $debusquer = charger_fonction('debusquer', 'public');
2132
+    if (is_array($lieu)) {
2133
+        include_spip('public/compiler');
2134
+        $lieu = reconstruire_contexte_compil($lieu);
2135
+    }
2136
+    return $debusquer($message, $lieu);
2138 2137
 }
2139 2138
 
2140 2139
 /**
@@ -2169,67 +2168,67 @@  discard block
 block discarded – undo
2169 2168
  * 		ou tableau d'information sur le squelette.
2170 2169
  */
2171 2170
 function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='') {
2172
-	if (!function_exists('evaluer_fond'))
2173
-		include_spip('public/assembler');
2174
-	// assurer la compat avec l'ancienne syntaxe
2175
-	// (trim etait le 3eme argument, par defaut a true)
2176
-	if (!is_array($options)) $options = array('trim'=>$options);
2177
-	if (!isset($options['trim'])) $options['trim']=true;
2178
-
2179
-	if (isset($contexte['connect'])){
2180
-		$connect = ($connect ? $connect : $contexte['connect']);
2181
-		unset($contexte['connect']);
2182
-	}
2183
-
2184
-	$texte = "";
2185
-	$pages = array();
2186
-	$lang_select = '';
2187
-	if (!isset($options['etoile']) OR !$options['etoile']){
2188
-		// Si on a inclus sans fixer le critere de lang, on prend la langue courante
2189
-		if (!isset($contexte['lang']))
2190
-			$contexte['lang'] = $GLOBALS['spip_lang'];
2191
-
2192
-		if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) {
2193
-			$lang_select = lang_select($contexte['lang']);
2194
-		}
2195
-	}
2196
-
2197
-	@$GLOBALS['_INC_PUBLIC']++;
2198
-
2199
-	foreach(is_array($fond) ? $fond : array($fond) as $f){
2200
-		$page = evaluer_fond($f, $contexte, $connect);
2201
-		if ($page === '') {
2202
-			$c = isset($options['compil']) ? $options['compil'] :'';
2203
-			$a = array('fichier'=>$fond);
2204
-			$erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
2205
-			erreur_squelette($erreur, $c);
2206
-			// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
2207
-			$page = array('texte' => '', 'erreur' => $erreur);
2208
-		}
2209
-
2210
-		$page = pipeline('recuperer_fond',array(
2211
-			'args'=>array('fond'=>$f,'contexte'=>$contexte,'options'=>$options,'connect'=>$connect),
2212
-			'data'=>$page
2213
-		));
2214
-		if (isset($options['ajax']) AND $options['ajax']){
2215
-			if (!function_exists('encoder_contexte_ajax'))
2216
-				include_spip('inc/filtres');
2217
-			$page['texte'] = encoder_contexte_ajax(array_merge($contexte,array('fond'=>$f)),'',$page['texte'], $options['ajax']);
2218
-		}
2219
-
2220
-		if (isset($options['raw']) AND $options['raw'])
2221
-			$pages[] = $page;
2222
-		else
2223
-			$texte .= $options['trim'] ? rtrim($page['texte']) : $page['texte'];
2224
-	}
2225
-
2226
-	$GLOBALS['_INC_PUBLIC']--;
2227
-
2228
-	if ($lang_select) lang_select();
2229
-	if (isset($options['raw']) AND $options['raw'])
2230
-		return is_array($fond)?$pages:reset($pages);
2231
-	else
2232
-		return $options['trim'] ? ltrim($texte) : $texte;
2171
+    if (!function_exists('evaluer_fond'))
2172
+        include_spip('public/assembler');
2173
+    // assurer la compat avec l'ancienne syntaxe
2174
+    // (trim etait le 3eme argument, par defaut a true)
2175
+    if (!is_array($options)) $options = array('trim'=>$options);
2176
+    if (!isset($options['trim'])) $options['trim']=true;
2177
+
2178
+    if (isset($contexte['connect'])){
2179
+        $connect = ($connect ? $connect : $contexte['connect']);
2180
+        unset($contexte['connect']);
2181
+    }
2182
+
2183
+    $texte = "";
2184
+    $pages = array();
2185
+    $lang_select = '';
2186
+    if (!isset($options['etoile']) OR !$options['etoile']){
2187
+        // Si on a inclus sans fixer le critere de lang, on prend la langue courante
2188
+        if (!isset($contexte['lang']))
2189
+            $contexte['lang'] = $GLOBALS['spip_lang'];
2190
+
2191
+        if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) {
2192
+            $lang_select = lang_select($contexte['lang']);
2193
+        }
2194
+    }
2195
+
2196
+    @$GLOBALS['_INC_PUBLIC']++;
2197
+
2198
+    foreach(is_array($fond) ? $fond : array($fond) as $f){
2199
+        $page = evaluer_fond($f, $contexte, $connect);
2200
+        if ($page === '') {
2201
+            $c = isset($options['compil']) ? $options['compil'] :'';
2202
+            $a = array('fichier'=>$fond);
2203
+            $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
2204
+            erreur_squelette($erreur, $c);
2205
+            // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
2206
+            $page = array('texte' => '', 'erreur' => $erreur);
2207
+        }
2208
+
2209
+        $page = pipeline('recuperer_fond',array(
2210
+            'args'=>array('fond'=>$f,'contexte'=>$contexte,'options'=>$options,'connect'=>$connect),
2211
+            'data'=>$page
2212
+        ));
2213
+        if (isset($options['ajax']) AND $options['ajax']){
2214
+            if (!function_exists('encoder_contexte_ajax'))
2215
+                include_spip('inc/filtres');
2216
+            $page['texte'] = encoder_contexte_ajax(array_merge($contexte,array('fond'=>$f)),'',$page['texte'], $options['ajax']);
2217
+        }
2218
+
2219
+        if (isset($options['raw']) AND $options['raw'])
2220
+            $pages[] = $page;
2221
+        else
2222
+            $texte .= $options['trim'] ? rtrim($page['texte']) : $page['texte'];
2223
+    }
2224
+
2225
+    $GLOBALS['_INC_PUBLIC']--;
2226
+
2227
+    if ($lang_select) lang_select();
2228
+    if (isset($options['raw']) AND $options['raw'])
2229
+        return is_array($fond)?$pages:reset($pages);
2230
+    else
2231
+        return $options['trim'] ? ltrim($texte) : $texte;
2233 2232
 }
2234 2233
 
2235 2234
 /**
@@ -2239,7 +2238,7 @@  discard block
 block discarded – undo
2239 2238
  * @return string
2240 2239
  */
2241 2240
 function trouve_modele($nom) {
2242
-	return trouver_fond($nom,'modeles/');
2241
+    return trouver_fond($nom,'modeles/');
2243 2242
 }
2244 2243
 
2245 2244
 /**
@@ -2255,54 +2254,54 @@  discard block
 block discarded – undo
2255 2254
  * @return array|string
2256 2255
  */
2257 2256
 function trouver_fond($nom, $dir='', $pathinfo = false) {
2258
-	$f = find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir?rtrim($dir,'/').'/':'');
2259
-	if (!$pathinfo) return $f;
2260
-	// renvoyer un tableau detaille si $pathinfo==true
2261
-	$p = pathinfo($f);
2262
-	if (!isset($p['extension']) OR !$p['extension']) {
2263
-		$p['extension'] = _EXTENSION_SQUELETTES;
2264
-	}
2265
-	if (!isset($p['extension']) OR !$p['filename']) {
2266
-		$p['filename'] = ($p['basename']?substr($p['basename'],0,-strlen($p['extension'])-1):'');
2267
-	}
2268
-	$p['fond'] = ($f?substr($f,0,-strlen($p['extension'])-1):'');
2269
-	return $p;
2257
+    $f = find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir?rtrim($dir,'/').'/':'');
2258
+    if (!$pathinfo) return $f;
2259
+    // renvoyer un tableau detaille si $pathinfo==true
2260
+    $p = pathinfo($f);
2261
+    if (!isset($p['extension']) OR !$p['extension']) {
2262
+        $p['extension'] = _EXTENSION_SQUELETTES;
2263
+    }
2264
+    if (!isset($p['extension']) OR !$p['filename']) {
2265
+        $p['filename'] = ($p['basename']?substr($p['basename'],0,-strlen($p['extension'])-1):'');
2266
+    }
2267
+    $p['fond'] = ($f?substr($f,0,-strlen($p['extension'])-1):'');
2268
+    return $p;
2270 2269
 }
2271 2270
 
2272 2271
 function tester_url_ecrire($nom){
2273
-	static $exec=array();
2274
-	if (isset($exec[$nom])) return $exec[$nom];
2275
-	// tester si c'est une page en squelette
2276
-	if (trouver_fond($nom, 'prive/squelettes/contenu/'))
2277
-		return $exec[$nom] = 'fond';
2278
-	// compat skels orthogonaux version precedente
2279
-	elseif (trouver_fond($nom, 'prive/exec/'))
2280
-		return $exec[$nom] = 'fond_monobloc';
2281
-	// echafaudage d'un fond !
2282
-	elseif(include_spip('public/styliser_par_z') AND z_echafaudable($nom))
2283
-		return $exec[$nom] = 'fond';
2284
-	// attention, il ne faut pas inclure l'exec ici
2285
-	// car sinon #URL_ECRIRE provoque des inclusions
2286
-	// et des define intrusifs potentiels
2287
-	return $exec[$nom] = ((find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:'');
2272
+    static $exec=array();
2273
+    if (isset($exec[$nom])) return $exec[$nom];
2274
+    // tester si c'est une page en squelette
2275
+    if (trouver_fond($nom, 'prive/squelettes/contenu/'))
2276
+        return $exec[$nom] = 'fond';
2277
+    // compat skels orthogonaux version precedente
2278
+    elseif (trouver_fond($nom, 'prive/exec/'))
2279
+        return $exec[$nom] = 'fond_monobloc';
2280
+    // echafaudage d'un fond !
2281
+    elseif(include_spip('public/styliser_par_z') AND z_echafaudable($nom))
2282
+        return $exec[$nom] = 'fond';
2283
+    // attention, il ne faut pas inclure l'exec ici
2284
+    // car sinon #URL_ECRIRE provoque des inclusions
2285
+    // et des define intrusifs potentiels
2286
+    return $exec[$nom] = ((find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:'');
2288 2287
 }
2289 2288
 
2290 2289
 // Charger dynamiquement une extension php
2291 2290
 // http://doc.spip.org/@charger_php_extension
2292 2291
 function charger_php_extension($module) {
2293
-	if (extension_loaded($module)) {
2294
-		return true;
2295
-	} else {
2296
-		$charger_php_extension = charger_fonction('charger_php_extension','inc');
2297
-		return $charger_php_extension($module);
2298
-	}
2292
+    if (extension_loaded($module)) {
2293
+        return true;
2294
+    } else {
2295
+        $charger_php_extension = charger_fonction('charger_php_extension','inc');
2296
+        return $charger_php_extension($module);
2297
+    }
2299 2298
 }
2300 2299
 
2301 2300
 // Renvoie TRUE si et seulement si la configuration autorise
2302 2301
 // le code HTML5 sur le site public
2303 2302
 function html5_permis() {
2304 2303
         return (isset($GLOBALS['meta']['version_html_max'])
2305
-		AND ('html5' == $GLOBALS['meta']['version_html_max']));
2304
+        AND ('html5' == $GLOBALS['meta']['version_html_max']));
2306 2305
 }
2307 2306
 
2308 2307
 /*
@@ -2313,7 +2312,7 @@  discard block
 block discarded – undo
2313 2312
 // Fonction depreciee
2314 2313
 // http://doc.spip.org/@lire_meta
2315 2314
 function lire_meta($nom) {
2316
-	return $GLOBALS['meta'][$nom];
2315
+    return $GLOBALS['meta'][$nom];
2317 2316
 }
2318 2317
 
2319 2318
 // Fonction depreciee
@@ -2323,15 +2322,15 @@  discard block
 block discarded – undo
2323 2322
 // Fonction depreciee, cf. http://doc.spip.org/@sql_fetch
2324 2323
 // http://doc.spip.org/@spip_fetch_array
2325 2324
 function spip_fetch_array($r, $t=NULL) {
2326
-	if (!isset($t)) {
2327
-		if ($r) return sql_fetch($r);
2328
-	} else {
2329
-		if ($t=='SPIP_NUM') $t = MYSQL_NUM;
2330
-		if ($t=='SPIP_BOTH') $t = MYSQL_BOTH;
2331
-		if ($t=='SPIP_ASSOC') $t = MYSQL_ASSOC;
2332
-		spip_log("appel deprecie de spip_fetch_array(..., $t)", 'vieilles_defs');
2333
-		if ($r) return mysql_fetch_array($r, $t);
2334
-	}
2325
+    if (!isset($t)) {
2326
+        if ($r) return sql_fetch($r);
2327
+    } else {
2328
+        if ($t=='SPIP_NUM') $t = MYSQL_NUM;
2329
+        if ($t=='SPIP_BOTH') $t = MYSQL_BOTH;
2330
+        if ($t=='SPIP_ASSOC') $t = MYSQL_ASSOC;
2331
+        spip_log("appel deprecie de spip_fetch_array(..., $t)", 'vieilles_defs');
2332
+        if ($r) return mysql_fetch_array($r, $t);
2333
+    }
2335 2334
 }
2336 2335
 
2337 2336
 /**
@@ -2345,14 +2344,14 @@  discard block
 block discarded – undo
2345 2344
  * @param string $statut
2346 2345
  */
2347 2346
 function avertir_auteurs($nom,$message, $statut=''){
2348
-	$alertes = $GLOBALS['meta']['message_alertes_auteurs'];
2349
-	if (!$alertes
2350
-		OR !is_array($alertes = unserialize($alertes)))
2351
-		$alertes = array();
2352
-
2353
-	if (!isset($alertes[$statut]))
2354
-		$alertes[$statut] = array();
2355
-	$alertes[$statut][$nom] = $message;
2356
-	ecrire_meta("message_alertes_auteurs",serialize($alertes));
2347
+    $alertes = $GLOBALS['meta']['message_alertes_auteurs'];
2348
+    if (!$alertes
2349
+        OR !is_array($alertes = unserialize($alertes)))
2350
+        $alertes = array();
2351
+
2352
+    if (!isset($alertes[$statut]))
2353
+        $alertes[$statut] = array();
2354
+    $alertes[$statut][$nom] = $message;
2355
+    ecrire_meta("message_alertes_auteurs",serialize($alertes));
2357 2356
 }
2358 2357
 ?>
Please login to merge, or discard this patch.
ecrire/inc/lang_liste.php 1 patch
Indentation   +196 added lines, -196 removed lines patch added patch discarded remove patch
@@ -22,202 +22,202 @@
 block discarded – undo
22 22
 if (!defined('_ECRIRE_INC_VERSION')) return;
23 23
 
24 24
 $GLOBALS['codes_langues'] = array(
25
-	'aa' => "Afar",
26
-	'ab' => "Abkhazian",
27
-	'af' => "Afrikaans",
28
-	'am' => "Amharic",
29
-	'an' => "Aragon&#233;s",
30
-	'ar' => "&#1593;&#1585;&#1576;&#1610;",
31
-	'as' => "Assamese",
32
-	'ast' => "asturianu",
33
-	'ay' => "Aymara",
34
-	'az' => "Az&#601;rbaycan dili",
35
-	'ba' => "Bashkir",
36
-	'be' => "&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1072;&#1103;",
37
-	'ber_tam' => "Tamazigh",
38
-	'ber_tam_tfng' => "Tamazigh tifinagh",
39
-	'bg' => "&#1073;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;",
40
-	'bh' => "Bihari",
41
-	'bi' => "Bislama",
42
-	'bm' => "Bambara",
43
-	'bn' => "Bengali; Bangla",
44
-	'bo' => "Tibetan",
45
-	'br' => "brezhoneg",
46
-	'bs' => "bosanski",
47
-	'ca' => "catal&#224;",
48
-	'co' => "corsu",
49
-	'cpf' => "Kr&eacute;ol r&eacute;yon&eacute;",
50
-	'cpf_dom' => "Krey&ograve;l",
51
-	'cpf_hat' => "Krey&ograve;l (Peyi Dayiti)",
52
-	'cs' => "&#269;e&#353;tina",
53
-	'cy' => "Cymraeg",	# welsh, gallois
54
-	'da' => "dansk",
55
-	'de' => "Deutsch",
56
-	'dz' => "Bhutani",
57
-	'el' => "&#949;&#955;&#955;&#951;&#957;&#953;&#954;&#940;",
58
-	'en' => "English",
59
-	'en_hx' => "H4ck3R",
60
-	'en_sm' => "Smurf",
61
-	'eo' => "Esperanto",
62
-	'es' => "Espa&#241;ol",
63
-	'es_co' => "Colombiano",
64
-	'es_mx_pop' => "Mexicano a lo g&#252;ey",
65
-	'et' => "eesti",
66
-	'eu' => "euskara",
67
-	'fa' => "&#1601;&#1575;&#1585;&#1587;&#1609;",
68
-	'ff' => "Fulah", // peul
69
-	'fi' => "suomi",
70
-	'fj' => "Fiji",
71
-	'fo' => "f&#248;royskt",
72
-	'fon' => "fongb&egrave;",
73
-	'fr' => "fran&#231;ais",
74
-	'fr_fem' => "fran&#231;ais f&#233;minin",
75
-	'fr_sc' => "schtroumpf",
76
-	'fr_lpc' => "langue parl&#233;e compl&#233;t&#233;e",
77
-	'fr_lsf' => "langue des signes fran&#231;aise",
78
-	'fr_spl' => "fran&#231;ais simplifi&#233;",
79
-	'fr_tu' => "fran&#231;ais copain",
80
-	'fy' => "Frisian",
81
-	'ga' => "Irish",
82
-	'gd' => "Scots Gaelic",
83
-	'gl' => "galego",
84
-	'gn' => "Guarani",
85
-	'grc' => "&#7944;&#961;&#967;&#945;&#943;&#945; &#7961;&#955;&#955;&#951;&#957;&#953;&#954;&#942;", // grec ancien
86
-	'gu' => "Gujarati",
87
-	'ha' => "Hausa",
88
-	'hac' => "&#1705;-&#1607;&#1734;&#1585;&#1575;&#1605;&#1740;", //"Kurdish-Horami"
89
-	'hbo' => "&#1506;&#1489;&#1512;&#1497;&#1514;&#1470;&#1492;&#1514;&#1504;&#1498;", // hebreu classique ou biblique
90
-	'he' => "&#1506;&#1489;&#1512;&#1497;&#1514;",
91
-	'hi' => "&#2361;&#2367;&#2306;&#2342;&#2368;",
92
-	'hr' => "hrvatski",
93
-	'hu' => "magyar",
94
-	'hy' => "&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398;",// Arménien
95
-	'ia' => "Interlingua",
96
-	'id' => "Indonesia",
97
-	'ie' => "Interlingue",
98
-	'ik' => "Inupiak",
99
-	'is' => "&#237;slenska",
100
-	'it' => "italiano",
101
-	'it_fem' => "italiana",
102
-	'iu' => "Inuktitut",
103
-	'ja' => "&#26085;&#26412;&#35486;",
104
-	'jv' => "Javanese",
105
-	'ka' => "&#4325;&#4304;&#4320;&#4311;&#4323;&#4314;&#4312;",
106
-	'kk' => "&#1179;&#1072;&#1079;&#1072;&#1179;&#32;&#1090;&#1110;&#1083;&#1110;", // Kazakh
107
-	'kl' => "kalaallisut",
108
-	'km' => "&#6039;&#6070;&#6047;&#6070;&#6017;&#6098;&#6040;&#6082;&#6042;",// Khmer
109
-	'kn' => "Kannada",
110
-	'ko' => "&#54620;&#44397;&#50612;",
111
-	'kok' => "&#2325;&#2379;&#2306;&#2325;&#2339;&#2368;", // Konkani
112
-	'ks' => "Kashmiri",
113
-	'ku' => "&#1705;&#1608;&#1585;&#1583;&#1740;",
114
-	'ky' => "Kirghiz",
115
-	'la' => "lingua latina",
116
-	'lb' => "L&euml;tzebuergesch",
117
-	'ln' => "Lingala",
118
-	'lo' => "&#3742;&#3762;&#3754;&#3762;&#3749;&#3762;&#3751;", # lao
119
-	'lt' => "lietuvi&#371;",
120
-	'lu' => "luba-katanga",
121
-	'lv' => "latvie&#353;u",
122
-	'man' => "mandingue", # a traduire en mandingue
123
-	'mfv' => "manjak", # ISO-639-3
124
-	'mg' => "Malagasy",
125
-	'mi' => "Maori",
126
-	'mk' => "&#1084;&#1072;&#1082;&#1077;&#1076;&#1086;&#1085;&#1089;&#1082;&#1080; &#1112;&#1072;&#1079;&#1080;&#1082;",
127
-	'ml' => "Malayalam",
128
-	'mn' => "Монгол хэл",
129
-	'mo' => "Moldavian",
130
-	'mos' => "Mor&eacute;",
131
-	'mr' => "&#2350;&#2352;&#2366;&#2336;&#2368;",
132
-	'ms' => "Bahasa Malaysia",
133
-	'mt' => "Maltese",
134
-	'my' => "Burmese",
135
-	'na' => "Nauru",
136
-	'nap' => "napulitano",
137
-	'ne' => "Nepali",
138
-	'nqo' => "N'ko", // www.manden.org
139
-	'nl' => "Nederlands",
140
-	'no' => "norsk",
141
-	'nb' => "norsk bokm&aring;l",
142
-	'nn' => "norsk nynorsk",
143
-	'oc' => "&ograve;c",
144
-	'oc_lnc' => "&ograve;c lengadocian",
145
-	'oc_ni' => "&ograve;c ni&ccedil;ard",
146
-	'oc_ni_la' => "&ograve;c ni&ccedil;ard (larg)",
147
-	'oc_ni_mis' => "&ograve;c nissart (mistralenc)",
148
-	'oc_prv' => "&ograve;c proven&ccedil;au",
149
-	'oc_gsc' => "&ograve;c gascon",
150
-	'oc_lms' => "&ograve;c lemosin",
151
-	'oc_auv' => "&ograve;c auvernhat",
152
-	'oc_va' => "&ograve;c vivaroaupenc",
153
-	'om' => "(Afan) Oromo",
154
-	'or' => "Oriya",
155
-	'pa' => "Punjabi",
156
-	'pbb' => 'Nasa Yuwe',
157
-	'pl' => "polski",
158
-	'prs' => "&#1583;&#1585;&#1740;", // ISO-639-3 Dari (Afghanistan)
159
-	'ps' => "&#1662;&#1690;&#1578;&#1608;",
160
-	'pt' => "Portugu&#234;s",
161
-	'pt_br' => "Portugu&#234;s do Brasil",
162
-	'qu' => "Quechua",
163
-	'rm' => "Rhaeto-Romance",
164
-	'rn' => "Kirundi",
165
-	'ro' => "rom&#226;n&#259;",
166
-	'roa' => "ch'ti",
167
-	'ru' => "&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;",
168
-	'rw' => "Kinyarwanda",
169
-	'sa' => "&#2360;&#2306;&#2360;&#2381;&#2325;&#2371;&#2340;",
170
-	'sc' => "sardu",
171
-	'scn' => "sicilianu",
172
-	'sd' => "Sindhi",
173
-	'sg' => "Sangho",
174
-	'sh' => "srpskohrvastski",
175
-	'sh_latn' => 'srpskohrvastski',
176
-	'sh_cyrl' => '&#1057;&#1088;&#1087;&#1089;&#1082;&#1086;&#1093;&#1088;&#1074;&#1072;&#1090;&#1089;&#1082;&#1080;',
177
-	'si' => "Sinhalese",
178
-	'sk' => "sloven&#269;ina",	// (Slovakia)
179
-	'sl' => "sloven&#353;&#269;ina",	// (Slovenia)
180
-	'sm' => "Samoan",
181
-	'sn' => "Shona",
182
-	'so' => "Somali",
183
-	'sq' => "shqip",
184
-	'sr' => "&#1089;&#1088;&#1087;&#1089;&#1082;&#1080;",
185
-	'src' => 'sardu logudor&#233;su', // sarde cf 'sc'
186
-	'sro' => 'sardu campidan&#233;su',
187
-	'ss' => "Siswati",
188
-	'st' => "Sesotho",
189
-	'su' => "Sundanese",
190
-	'sv' => "svenska",
191
-	'sw' => "Kiswahili",
192
-	'ta' => "&#2980;&#2990;&#3007;&#2996;&#3021;", // Tamil
193
-	'te' => "Telugu",
194
-	'tg' => "Tajik",
195
-	'th' => "&#3652;&#3607;&#3618;",
196
-	'ti' => "Tigrinya",
197
-	'tk' => "Turkmen",
198
-	'tl' => "Tagalog",
199
-	'tn' => "Setswana",
200
-	'to' => "Tonga",
201
-	'tr' => "T&#252;rk&#231;e",
202
-	'ts' => "Tsonga",
203
-	'tt' => "&#1058;&#1072;&#1090;&#1072;&#1088;",
204
-	'tw' => "Twi",
205
-	'ty' => "reo m&#257;`ohi", // tahitien
206
-	'ug' => "Uighur",
207
-	'uk' => "&#1091;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;",
208
-	'ur' => "&#1649;&#1585;&#1583;&#1608;",
209
-	'uz' => "O'zbekcha",
210
-	'vi' => "Ti&#7871;ng Vi&#7879;t",
211
-	'vo' => "Volapuk",
212
-	'wa' => "walon",
213
-	'wo' => "Wolof",
214
-	'xh' => "Xhosa",
215
-	'yi' => "Yiddish",
216
-	'yo' => "Yoruba",
217
-	'za' => "Zhuang",
218
-	'zh' => "&#20013;&#25991;", // chinois (ecriture simplifiee)
219
-	'zh_tw' => "&#21488;&#28771;&#20013;&#25991;", // chinois taiwan (ecr. traditionnelle)
220
-	'zu' => "Zulu"
25
+    'aa' => "Afar",
26
+    'ab' => "Abkhazian",
27
+    'af' => "Afrikaans",
28
+    'am' => "Amharic",
29
+    'an' => "Aragon&#233;s",
30
+    'ar' => "&#1593;&#1585;&#1576;&#1610;",
31
+    'as' => "Assamese",
32
+    'ast' => "asturianu",
33
+    'ay' => "Aymara",
34
+    'az' => "Az&#601;rbaycan dili",
35
+    'ba' => "Bashkir",
36
+    'be' => "&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1072;&#1103;",
37
+    'ber_tam' => "Tamazigh",
38
+    'ber_tam_tfng' => "Tamazigh tifinagh",
39
+    'bg' => "&#1073;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;",
40
+    'bh' => "Bihari",
41
+    'bi' => "Bislama",
42
+    'bm' => "Bambara",
43
+    'bn' => "Bengali; Bangla",
44
+    'bo' => "Tibetan",
45
+    'br' => "brezhoneg",
46
+    'bs' => "bosanski",
47
+    'ca' => "catal&#224;",
48
+    'co' => "corsu",
49
+    'cpf' => "Kr&eacute;ol r&eacute;yon&eacute;",
50
+    'cpf_dom' => "Krey&ograve;l",
51
+    'cpf_hat' => "Krey&ograve;l (Peyi Dayiti)",
52
+    'cs' => "&#269;e&#353;tina",
53
+    'cy' => "Cymraeg",	# welsh, gallois
54
+    'da' => "dansk",
55
+    'de' => "Deutsch",
56
+    'dz' => "Bhutani",
57
+    'el' => "&#949;&#955;&#955;&#951;&#957;&#953;&#954;&#940;",
58
+    'en' => "English",
59
+    'en_hx' => "H4ck3R",
60
+    'en_sm' => "Smurf",
61
+    'eo' => "Esperanto",
62
+    'es' => "Espa&#241;ol",
63
+    'es_co' => "Colombiano",
64
+    'es_mx_pop' => "Mexicano a lo g&#252;ey",
65
+    'et' => "eesti",
66
+    'eu' => "euskara",
67
+    'fa' => "&#1601;&#1575;&#1585;&#1587;&#1609;",
68
+    'ff' => "Fulah", // peul
69
+    'fi' => "suomi",
70
+    'fj' => "Fiji",
71
+    'fo' => "f&#248;royskt",
72
+    'fon' => "fongb&egrave;",
73
+    'fr' => "fran&#231;ais",
74
+    'fr_fem' => "fran&#231;ais f&#233;minin",
75
+    'fr_sc' => "schtroumpf",
76
+    'fr_lpc' => "langue parl&#233;e compl&#233;t&#233;e",
77
+    'fr_lsf' => "langue des signes fran&#231;aise",
78
+    'fr_spl' => "fran&#231;ais simplifi&#233;",
79
+    'fr_tu' => "fran&#231;ais copain",
80
+    'fy' => "Frisian",
81
+    'ga' => "Irish",
82
+    'gd' => "Scots Gaelic",
83
+    'gl' => "galego",
84
+    'gn' => "Guarani",
85
+    'grc' => "&#7944;&#961;&#967;&#945;&#943;&#945; &#7961;&#955;&#955;&#951;&#957;&#953;&#954;&#942;", // grec ancien
86
+    'gu' => "Gujarati",
87
+    'ha' => "Hausa",
88
+    'hac' => "&#1705;-&#1607;&#1734;&#1585;&#1575;&#1605;&#1740;", //"Kurdish-Horami"
89
+    'hbo' => "&#1506;&#1489;&#1512;&#1497;&#1514;&#1470;&#1492;&#1514;&#1504;&#1498;", // hebreu classique ou biblique
90
+    'he' => "&#1506;&#1489;&#1512;&#1497;&#1514;",
91
+    'hi' => "&#2361;&#2367;&#2306;&#2342;&#2368;",
92
+    'hr' => "hrvatski",
93
+    'hu' => "magyar",
94
+    'hy' => "&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398;",// Arménien
95
+    'ia' => "Interlingua",
96
+    'id' => "Indonesia",
97
+    'ie' => "Interlingue",
98
+    'ik' => "Inupiak",
99
+    'is' => "&#237;slenska",
100
+    'it' => "italiano",
101
+    'it_fem' => "italiana",
102
+    'iu' => "Inuktitut",
103
+    'ja' => "&#26085;&#26412;&#35486;",
104
+    'jv' => "Javanese",
105
+    'ka' => "&#4325;&#4304;&#4320;&#4311;&#4323;&#4314;&#4312;",
106
+    'kk' => "&#1179;&#1072;&#1079;&#1072;&#1179;&#32;&#1090;&#1110;&#1083;&#1110;", // Kazakh
107
+    'kl' => "kalaallisut",
108
+    'km' => "&#6039;&#6070;&#6047;&#6070;&#6017;&#6098;&#6040;&#6082;&#6042;",// Khmer
109
+    'kn' => "Kannada",
110
+    'ko' => "&#54620;&#44397;&#50612;",
111
+    'kok' => "&#2325;&#2379;&#2306;&#2325;&#2339;&#2368;", // Konkani
112
+    'ks' => "Kashmiri",
113
+    'ku' => "&#1705;&#1608;&#1585;&#1583;&#1740;",
114
+    'ky' => "Kirghiz",
115
+    'la' => "lingua latina",
116
+    'lb' => "L&euml;tzebuergesch",
117
+    'ln' => "Lingala",
118
+    'lo' => "&#3742;&#3762;&#3754;&#3762;&#3749;&#3762;&#3751;", # lao
119
+    'lt' => "lietuvi&#371;",
120
+    'lu' => "luba-katanga",
121
+    'lv' => "latvie&#353;u",
122
+    'man' => "mandingue", # a traduire en mandingue
123
+    'mfv' => "manjak", # ISO-639-3
124
+    'mg' => "Malagasy",
125
+    'mi' => "Maori",
126
+    'mk' => "&#1084;&#1072;&#1082;&#1077;&#1076;&#1086;&#1085;&#1089;&#1082;&#1080; &#1112;&#1072;&#1079;&#1080;&#1082;",
127
+    'ml' => "Malayalam",
128
+    'mn' => "Монгол хэл",
129
+    'mo' => "Moldavian",
130
+    'mos' => "Mor&eacute;",
131
+    'mr' => "&#2350;&#2352;&#2366;&#2336;&#2368;",
132
+    'ms' => "Bahasa Malaysia",
133
+    'mt' => "Maltese",
134
+    'my' => "Burmese",
135
+    'na' => "Nauru",
136
+    'nap' => "napulitano",
137
+    'ne' => "Nepali",
138
+    'nqo' => "N'ko", // www.manden.org
139
+    'nl' => "Nederlands",
140
+    'no' => "norsk",
141
+    'nb' => "norsk bokm&aring;l",
142
+    'nn' => "norsk nynorsk",
143
+    'oc' => "&ograve;c",
144
+    'oc_lnc' => "&ograve;c lengadocian",
145
+    'oc_ni' => "&ograve;c ni&ccedil;ard",
146
+    'oc_ni_la' => "&ograve;c ni&ccedil;ard (larg)",
147
+    'oc_ni_mis' => "&ograve;c nissart (mistralenc)",
148
+    'oc_prv' => "&ograve;c proven&ccedil;au",
149
+    'oc_gsc' => "&ograve;c gascon",
150
+    'oc_lms' => "&ograve;c lemosin",
151
+    'oc_auv' => "&ograve;c auvernhat",
152
+    'oc_va' => "&ograve;c vivaroaupenc",
153
+    'om' => "(Afan) Oromo",
154
+    'or' => "Oriya",
155
+    'pa' => "Punjabi",
156
+    'pbb' => 'Nasa Yuwe',
157
+    'pl' => "polski",
158
+    'prs' => "&#1583;&#1585;&#1740;", // ISO-639-3 Dari (Afghanistan)
159
+    'ps' => "&#1662;&#1690;&#1578;&#1608;",
160
+    'pt' => "Portugu&#234;s",
161
+    'pt_br' => "Portugu&#234;s do Brasil",
162
+    'qu' => "Quechua",
163
+    'rm' => "Rhaeto-Romance",
164
+    'rn' => "Kirundi",
165
+    'ro' => "rom&#226;n&#259;",
166
+    'roa' => "ch'ti",
167
+    'ru' => "&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;",
168
+    'rw' => "Kinyarwanda",
169
+    'sa' => "&#2360;&#2306;&#2360;&#2381;&#2325;&#2371;&#2340;",
170
+    'sc' => "sardu",
171
+    'scn' => "sicilianu",
172
+    'sd' => "Sindhi",
173
+    'sg' => "Sangho",
174
+    'sh' => "srpskohrvastski",
175
+    'sh_latn' => 'srpskohrvastski',
176
+    'sh_cyrl' => '&#1057;&#1088;&#1087;&#1089;&#1082;&#1086;&#1093;&#1088;&#1074;&#1072;&#1090;&#1089;&#1082;&#1080;',
177
+    'si' => "Sinhalese",
178
+    'sk' => "sloven&#269;ina",	// (Slovakia)
179
+    'sl' => "sloven&#353;&#269;ina",	// (Slovenia)
180
+    'sm' => "Samoan",
181
+    'sn' => "Shona",
182
+    'so' => "Somali",
183
+    'sq' => "shqip",
184
+    'sr' => "&#1089;&#1088;&#1087;&#1089;&#1082;&#1080;",
185
+    'src' => 'sardu logudor&#233;su', // sarde cf 'sc'
186
+    'sro' => 'sardu campidan&#233;su',
187
+    'ss' => "Siswati",
188
+    'st' => "Sesotho",
189
+    'su' => "Sundanese",
190
+    'sv' => "svenska",
191
+    'sw' => "Kiswahili",
192
+    'ta' => "&#2980;&#2990;&#3007;&#2996;&#3021;", // Tamil
193
+    'te' => "Telugu",
194
+    'tg' => "Tajik",
195
+    'th' => "&#3652;&#3607;&#3618;",
196
+    'ti' => "Tigrinya",
197
+    'tk' => "Turkmen",
198
+    'tl' => "Tagalog",
199
+    'tn' => "Setswana",
200
+    'to' => "Tonga",
201
+    'tr' => "T&#252;rk&#231;e",
202
+    'ts' => "Tsonga",
203
+    'tt' => "&#1058;&#1072;&#1090;&#1072;&#1088;",
204
+    'tw' => "Twi",
205
+    'ty' => "reo m&#257;`ohi", // tahitien
206
+    'ug' => "Uighur",
207
+    'uk' => "&#1091;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;",
208
+    'ur' => "&#1649;&#1585;&#1583;&#1608;",
209
+    'uz' => "O'zbekcha",
210
+    'vi' => "Ti&#7871;ng Vi&#7879;t",
211
+    'vo' => "Volapuk",
212
+    'wa' => "walon",
213
+    'wo' => "Wolof",
214
+    'xh' => "Xhosa",
215
+    'yi' => "Yiddish",
216
+    'yo' => "Yoruba",
217
+    'za' => "Zhuang",
218
+    'zh' => "&#20013;&#25991;", // chinois (ecriture simplifiee)
219
+    'zh_tw' => "&#21488;&#28771;&#20013;&#25991;", // chinois taiwan (ecr. traditionnelle)
220
+    'zu' => "Zulu"
221 221
 
222 222
 );
223 223
 
Please login to merge, or discard this patch.
ecrire/inc/texte.php 1 patch
Indentation   +163 added lines, -163 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 
23 23
 // Raccourcis dependant du sens de la langue
24 24
 function definir_raccourcis_alineas(){
25
-	return array('','');
25
+    return array('','');
26 26
 }
27 27
 
28 28
 
@@ -31,7 +31,7 @@  discard block
 block discarded – undo
31 31
 //
32 32
 // http://doc.spip.org/@traiter_tableau
33 33
 function traiter_tableau($bloc) {
34
-	return $bloc;
34
+    return $bloc;
35 35
 }
36 36
 
37 37
 
@@ -40,23 +40,23 @@  discard block
 block discarded – undo
40 40
 //
41 41
 // http://doc.spip.org/@traiter_listes
42 42
 function traiter_listes ($texte) {
43
-	return $texte;
43
+    return $texte;
44 44
 }
45 45
 
46 46
 // Nettoie un texte, traite les raccourcis autre qu'URL, la typo, etc.
47 47
 // http://doc.spip.org/@traiter_raccourcis
48 48
 function traiter_raccourcis($letexte) {
49 49
 
50
-	// Appeler les fonctions de pre_traitement
51
-	$letexte = pipeline('pre_propre', $letexte);
50
+    // Appeler les fonctions de pre_traitement
51
+    $letexte = pipeline('pre_propre', $letexte);
52 52
 
53
-	// APPELER ICI UN PIPELINE traiter_raccourcis ?
54
-	// $letexte = pipeline('traiter_raccourcis', $letexte);
53
+    // APPELER ICI UN PIPELINE traiter_raccourcis ?
54
+    // $letexte = pipeline('traiter_raccourcis', $letexte);
55 55
 
56
-	// Appeler les fonctions de post-traitement
57
-	$letexte = pipeline('post_propre', $letexte);
56
+    // Appeler les fonctions de post-traitement
57
+    $letexte = pipeline('post_propre', $letexte);
58 58
 
59
-	return $letexte;
59
+    return $letexte;
60 60
 }
61 61
 
62 62
 /*************************************************************************************************************************
@@ -66,12 +66,12 @@  discard block
 block discarded – undo
66 66
 // afficher joliment les <script>
67 67
 // http://doc.spip.org/@echappe_js
68 68
 function echappe_js($t,$class=' class="echappe-js"') {
69
-	if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER))
70
-	foreach ($r as $regs)
71
-		$t = str_replace($regs[0],
72
-			"<code$class>".nl2br(spip_htmlspecialchars($regs[0])).'</code>',
73
-			$t);
74
-	return $t;
69
+    if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER))
70
+    foreach ($r as $regs)
71
+        $t = str_replace($regs[0],
72
+            "<code$class>".nl2br(spip_htmlspecialchars($regs[0])).'</code>',
73
+            $t);
74
+    return $t;
75 75
 }
76 76
 
77 77
 
@@ -101,50 +101,50 @@  discard block
 block discarded – undo
101 101
  *     Code protégé
102 102
 **/
103 103
 function interdire_scripts($arg, $mode_filtre=null) {
104
-	// on memorise le resultat sur les arguments non triviaux
105
-	static $dejavu = array();
106
-
107
-	// Attention, si ce n'est pas une chaine, laisser intact
108
-	if (!$arg OR !is_string($arg) OR !strstr($arg, '<')) return $arg; 
109
-
110
-	if (is_null($mode_filtre) or !in_array($mode_filtre, array(-1, 0, 1))) {
111
-		$mode_filtre = $GLOBALS['filtrer_javascript'];
112
-	}
113
-
114
-	if (isset($dejavu[$mode_filtre][$arg])) {
115
-		return $dejavu[$mode_filtre][$arg];
116
-	}
117
-
118
-	// echapper les tags asp/php
119
-	$t = str_replace('<'.'%', '&lt;%', $arg);
120
-
121
-	// echapper le php
122
-	$t = str_replace('<'.'?', '&lt;?', $t);
123
-
124
-	// echapper le < script language=php >
125
-	$t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
126
-
127
-	// Pour le js, trois modes : parano (-1), prive (0), ok (1)
128
-	switch ($mode_filtre) {
129
-		case 0:
130
-			if (!_DIR_RESTREINT)
131
-				$t = echappe_js($t);
132
-			break;
133
-		case -1:
134
-			$t = echappe_js($t);
135
-			break;
136
-	}
137
-
138
-	// pas de <base href /> svp !
139
-	$t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
140
-
141
-	// Reinserer les echappements des modeles
142
-	if (defined('_PROTEGE_JS_MODELES'))
143
-		$t = echappe_retour($t,"javascript"._PROTEGE_JS_MODELES);
144
-	if (defined('_PROTEGE_PHP_MODELES'))
145
-		$t = echappe_retour($t,"php"._PROTEGE_PHP_MODELES);
146
-
147
-	return $dejavu[$mode_filtre][$arg] = $t;
104
+    // on memorise le resultat sur les arguments non triviaux
105
+    static $dejavu = array();
106
+
107
+    // Attention, si ce n'est pas une chaine, laisser intact
108
+    if (!$arg OR !is_string($arg) OR !strstr($arg, '<')) return $arg; 
109
+
110
+    if (is_null($mode_filtre) or !in_array($mode_filtre, array(-1, 0, 1))) {
111
+        $mode_filtre = $GLOBALS['filtrer_javascript'];
112
+    }
113
+
114
+    if (isset($dejavu[$mode_filtre][$arg])) {
115
+        return $dejavu[$mode_filtre][$arg];
116
+    }
117
+
118
+    // echapper les tags asp/php
119
+    $t = str_replace('<'.'%', '&lt;%', $arg);
120
+
121
+    // echapper le php
122
+    $t = str_replace('<'.'?', '&lt;?', $t);
123
+
124
+    // echapper le < script language=php >
125
+    $t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
126
+
127
+    // Pour le js, trois modes : parano (-1), prive (0), ok (1)
128
+    switch ($mode_filtre) {
129
+        case 0:
130
+            if (!_DIR_RESTREINT)
131
+                $t = echappe_js($t);
132
+            break;
133
+        case -1:
134
+            $t = echappe_js($t);
135
+            break;
136
+    }
137
+
138
+    // pas de <base href /> svp !
139
+    $t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
140
+
141
+    // Reinserer les echappements des modeles
142
+    if (defined('_PROTEGE_JS_MODELES'))
143
+        $t = echappe_retour($t,"javascript"._PROTEGE_JS_MODELES);
144
+    if (defined('_PROTEGE_PHP_MODELES'))
145
+        $t = echappe_retour($t,"php"._PROTEGE_PHP_MODELES);
146
+
147
+    return $dejavu[$mode_filtre][$arg] = $t;
148 148
 }
149 149
 
150 150
 // Typographie generale
@@ -152,54 +152,54 @@  discard block
 block discarded – undo
152 152
 
153 153
 // http://doc.spip.org/@typo
154 154
 function typo($letexte, $echapper=true, $connect=null, $env=array()) {
155
-	// Plus vite !
156
-	if (!$letexte) return $letexte;
157
-
158
-	// les appels directs a cette fonction depuis le php de l'espace
159
-	// prive etant historiquement ecrit sans argment $connect
160
-	// on utilise la presence de celui-ci pour distinguer les cas
161
-	// ou il faut passer interdire_script explicitement
162
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
163
-	// ne seront pas perturbes
164
-	$interdire_script = false;
165
-	if (is_null($connect)){
166
-		$connect = '';
167
-		$interdire_script = true;
168
-		$env['espace_prive'] = 1;
169
-	}
170
-
171
-	// Echapper les codes <html> etc
172
-	if ($echapper)
173
-		$letexte = echappe_html($letexte, 'TYPO');
174
-
175
-	//
176
-	// Installer les modeles, notamment images et documents ;
177
-	//
178
-	// NOTE : propre() ne passe pas par ici mais directement par corriger_typo
179
-	// cf. inc/lien
180
-
181
-	$letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect, null, $env);
182
-	if ($letexte != $mem) $echapper = true;
183
-	unset($mem);
184
-
185
-	$letexte = corriger_typo($letexte);
186
-	$letexte = echapper_faux_tags($letexte);
187
-
188
-	// reintegrer les echappements
189
-	if ($echapper)
190
-		$letexte = echappe_retour($letexte, 'TYPO');
191
-
192
-	// Dans les appels directs hors squelette, securiser ici aussi
193
-	if ($interdire_script)
194
-		$letexte = interdire_scripts($letexte);
195
-
196
-	// Dans l'espace prive on se mefie de tout contenu dangereux
197
-	// https://core.spip.net/issues/3371
198
-	if (isset($env['espace_prive']) AND $env['espace_prive']){
199
-		$letexte = echapper_html_suspect($letexte);
200
-	}
201
-
202
-	return $letexte;
155
+    // Plus vite !
156
+    if (!$letexte) return $letexte;
157
+
158
+    // les appels directs a cette fonction depuis le php de l'espace
159
+    // prive etant historiquement ecrit sans argment $connect
160
+    // on utilise la presence de celui-ci pour distinguer les cas
161
+    // ou il faut passer interdire_script explicitement
162
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
163
+    // ne seront pas perturbes
164
+    $interdire_script = false;
165
+    if (is_null($connect)){
166
+        $connect = '';
167
+        $interdire_script = true;
168
+        $env['espace_prive'] = 1;
169
+    }
170
+
171
+    // Echapper les codes <html> etc
172
+    if ($echapper)
173
+        $letexte = echappe_html($letexte, 'TYPO');
174
+
175
+    //
176
+    // Installer les modeles, notamment images et documents ;
177
+    //
178
+    // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
179
+    // cf. inc/lien
180
+
181
+    $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect, null, $env);
182
+    if ($letexte != $mem) $echapper = true;
183
+    unset($mem);
184
+
185
+    $letexte = corriger_typo($letexte);
186
+    $letexte = echapper_faux_tags($letexte);
187
+
188
+    // reintegrer les echappements
189
+    if ($echapper)
190
+        $letexte = echappe_retour($letexte, 'TYPO');
191
+
192
+    // Dans les appels directs hors squelette, securiser ici aussi
193
+    if ($interdire_script)
194
+        $letexte = interdire_scripts($letexte);
195
+
196
+    // Dans l'espace prive on se mefie de tout contenu dangereux
197
+    // https://core.spip.net/issues/3371
198
+    if (isset($env['espace_prive']) AND $env['espace_prive']){
199
+        $letexte = echapper_html_suspect($letexte);
200
+    }
201
+
202
+    return $letexte;
203 203
 }
204 204
 
205 205
 // Correcteur typographique
@@ -211,46 +211,46 @@  discard block
 block discarded – undo
211 211
 // http://doc.spip.org/@corriger_typo
212 212
 function corriger_typo($letexte, $lang='') {
213 213
 
214
-	// Plus vite !
215
-	if (!$letexte) return $letexte;
214
+    // Plus vite !
215
+    if (!$letexte) return $letexte;
216 216
 
217
-	$letexte = pipeline('pre_typo', $letexte);
217
+    $letexte = pipeline('pre_typo', $letexte);
218 218
 
219
-	// Caracteres de controle "illegaux"
220
-	$letexte = corriger_caracteres($letexte);
219
+    // Caracteres de controle "illegaux"
220
+    $letexte = corriger_caracteres($letexte);
221 221
 
222
-	// Proteger les caracteres typographiques a l'interieur des tags html
223
-	if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
224
-		foreach ($regs as $reg) {
225
-			$insert = $reg[0];
226
-			// hack: on transforme les caracteres a proteger en les remplacant
227
-			// par des caracteres "illegaux". (cf corriger_caracteres())
228
-			$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
229
-			$letexte = str_replace($reg[0], $insert, $letexte);
230
-		}
231
-	}
222
+    // Proteger les caracteres typographiques a l'interieur des tags html
223
+    if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
224
+        foreach ($regs as $reg) {
225
+            $insert = $reg[0];
226
+            // hack: on transforme les caracteres a proteger en les remplacant
227
+            // par des caracteres "illegaux". (cf corriger_caracteres())
228
+            $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
229
+            $letexte = str_replace($reg[0], $insert, $letexte);
230
+        }
231
+    }
232 232
 
233
-	// trouver les blocs multi et les traiter a part
234
-	$letexte = extraire_multi($e = $letexte, $lang, true);
235
-	$e = ($e === $letexte);
233
+    // trouver les blocs multi et les traiter a part
234
+    $letexte = extraire_multi($e = $letexte, $lang, true);
235
+    $e = ($e === $letexte);
236 236
 
237
-	// Charger & appliquer les fonctions de typographie
238
-	$typographie = charger_fonction(lang_typo($lang), 'typographie');
239
-	$letexte = $typographie($letexte);
237
+    // Charger & appliquer les fonctions de typographie
238
+    $typographie = charger_fonction(lang_typo($lang), 'typographie');
239
+    $letexte = $typographie($letexte);
240 240
 
241
-	// Les citations en une autre langue, s'il y a lieu
242
-	if (!$e) $letexte = echappe_retour($letexte, 'multi');
241
+    // Les citations en une autre langue, s'il y a lieu
242
+    if (!$e) $letexte = echappe_retour($letexte, 'multi');
243 243
 
244
-	// Retablir les caracteres proteges
245
-	$letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
244
+    // Retablir les caracteres proteges
245
+    $letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
246 246
 
247
-	// pipeline
248
-	$letexte = pipeline('post_typo', $letexte);
247
+    // pipeline
248
+    $letexte = pipeline('post_typo', $letexte);
249 249
 
250
-	# un message pour abs_url - on est passe en mode texte
251
-	$GLOBALS['mode_abs_url'] = 'texte';
250
+    # un message pour abs_url - on est passe en mode texte
251
+    $GLOBALS['mode_abs_url'] = 'texte';
252 252
 
253
-	return $letexte;
253
+    return $letexte;
254 254
 }
255 255
 
256 256
 
@@ -266,43 +266,43 @@  discard block
 block discarded – undo
266 266
 // http://doc.spip.org/@paragrapher
267 267
 // /!\ appelee dans inc/filtres et public/composer
268 268
 function paragrapher($letexte, $forcer=true) {
269
-	return $letexte;
269
+    return $letexte;
270 270
 }
271 271
 
272 272
 // Harmonise les retours chariots et mange les paragraphes html
273 273
 // http://doc.spip.org/@traiter_retours_chariots
274 274
 // ne sert plus
275 275
 function traiter_retours_chariots($letexte) {
276
-	$letexte = preg_replace(",\r\n?,S", "\n", $letexte);
277
-	$letexte = preg_replace(",<p[>[:space:]],iS", "\n\n\\0", $letexte);
278
-	$letexte = preg_replace(",</p[>[:space:]],iS", "\\0\n\n", $letexte);
279
-	return $letexte;
276
+    $letexte = preg_replace(",\r\n?,S", "\n", $letexte);
277
+    $letexte = preg_replace(",<p[>[:space:]],iS", "\n\n\\0", $letexte);
278
+    $letexte = preg_replace(",</p[>[:space:]],iS", "\\0\n\n", $letexte);
279
+    return $letexte;
280 280
 }
281 281
 
282 282
 
283 283
 // Filtre a appliquer aux champs du type #TEXTE*
284 284
 // http://doc.spip.org/@propre
285 285
 function propre($t, $connect=null, $env=array()) {
286
-	// les appels directs a cette fonction depuis le php de l'espace
287
-	// prive etant historiquement ecrits sans argment $connect
288
-	// on utilise la presence de celui-ci pour distinguer les cas
289
-	// ou il faut passer interdire_script explicitement
290
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
291
-	// ne seront pas perturbes
292
-	$interdire_script = false;
293
-	if (is_null($connect)){
294
-		$connect = '';
295
-		$interdire_script = true;
296
-	}
297
-
298
-	if (!$t) return strval($t);
299
-
300
-	$t = echappe_html($t);
301
-	$t = expanser_liens($t,$connect, $env);
302
-	$t = traiter_raccourcis($t);
303
-	$t = echappe_retour_modeles($t, $interdire_script);
304
-
305
-	return $t;
286
+    // les appels directs a cette fonction depuis le php de l'espace
287
+    // prive etant historiquement ecrits sans argment $connect
288
+    // on utilise la presence de celui-ci pour distinguer les cas
289
+    // ou il faut passer interdire_script explicitement
290
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
291
+    // ne seront pas perturbes
292
+    $interdire_script = false;
293
+    if (is_null($connect)){
294
+        $connect = '';
295
+        $interdire_script = true;
296
+    }
297
+
298
+    if (!$t) return strval($t);
299
+
300
+    $t = echappe_html($t);
301
+    $t = expanser_liens($t,$connect, $env);
302
+    $t = traiter_raccourcis($t);
303
+    $t = echappe_retour_modeles($t, $interdire_script);
304
+
305
+    return $t;
306 306
 }
307 307
 
308 308
 ?>
Please login to merge, or discard this patch.
ecrire/inc/rechercher.php 1 patch
Indentation   +275 added lines, -275 removed lines patch added patch discarded remove patch
@@ -18,21 +18,21 @@  discard block
 block discarded – undo
18 18
 // avec un poids pour le score
19 19
 // http://doc.spip.org/@liste_des_champs
20 20
 function liste_des_champs() {
21
-	static $liste=null;
22
-	if (is_null($liste)) {
23
-		$liste = array();
24
-		// recuperer les tables_objets_sql declarees
25
-		include_spip('base/objets');
26
-		$tables_objets = lister_tables_objets_sql();
27
-		foreach($tables_objets as $t=>$infos){
28
-			if ($infos['rechercher_champs']){
29
-				$liste[$infos['type']] = $infos['rechercher_champs'];
30
-			}
31
-		}
32
-		// puis passer dans le pipeline
33
-		$liste = pipeline('rechercher_liste_des_champs', $liste);
34
-	}
35
-	return $liste;
21
+    static $liste=null;
22
+    if (is_null($liste)) {
23
+        $liste = array();
24
+        // recuperer les tables_objets_sql declarees
25
+        include_spip('base/objets');
26
+        $tables_objets = lister_tables_objets_sql();
27
+        foreach($tables_objets as $t=>$infos){
28
+            if ($infos['rechercher_champs']){
29
+                $liste[$infos['type']] = $infos['rechercher_champs'];
30
+            }
31
+        }
32
+        // puis passer dans le pipeline
33
+        $liste = pipeline('rechercher_liste_des_champs', $liste);
34
+    }
35
+    return $liste;
36 36
 }
37 37
 
38 38
 
@@ -40,162 +40,162 @@  discard block
 block discarded – undo
40 40
 // en ne regardant que le titre ou le nom
41 41
 // http://doc.spip.org/@liste_des_jointures
42 42
 function liste_des_jointures() {
43
-	static $liste=null;
44
-	if (is_null($liste)) {
45
-		$liste = array();
46
-		// recuperer les tables_objets_sql declarees
47
-		include_spip('base/objets');
48
-		$tables_objets = lister_tables_objets_sql();
49
-		foreach($tables_objets as $t=>$infos){
50
-			if ($infos['rechercher_jointures']){
51
-				$liste[$infos['type']] = $infos['rechercher_jointures'];
52
-			}
53
-		}
54
-		// puis passer dans le pipeline
55
-		$liste = pipeline('rechercher_liste_des_jointures', $liste);
56
-	}
57
-	return $liste;
43
+    static $liste=null;
44
+    if (is_null($liste)) {
45
+        $liste = array();
46
+        // recuperer les tables_objets_sql declarees
47
+        include_spip('base/objets');
48
+        $tables_objets = lister_tables_objets_sql();
49
+        foreach($tables_objets as $t=>$infos){
50
+            if ($infos['rechercher_jointures']){
51
+                $liste[$infos['type']] = $infos['rechercher_jointures'];
52
+            }
53
+        }
54
+        // puis passer dans le pipeline
55
+        $liste = pipeline('rechercher_liste_des_jointures', $liste);
56
+    }
57
+    return $liste;
58 58
 }
59 59
 
60 60
 function expression_recherche($recherche, $options) {
61
-	// ne calculer qu'une seule fois l'expression par hit
62
-	// (meme si utilisee dans plusieurs boucles)
63
-	static $expression = array();
64
-	$key = serialize(array($recherche, $options['preg_flags']));
65
-	if (isset($expression[$key])) {
66
-		return $expression[$key];
67
-	}
68
-
69
-	$u = $GLOBALS['meta']['pcre_u'];
70
-	if ($u and strpos($options['preg_flags'], $u) === false) {
71
-		$options['preg_flags'] .= $u;
72
-	}
73
-	include_spip('inc/charsets');
74
-	$recherche = trim($recherche);
75
-
76
-	$is_preg = false;
77
-	if (substr($recherche, 0, 1) == '/' and substr($recherche, -1, 1) == '/' and strlen($recherche) > 2) {
78
-		// c'est une preg
79
-		$recherche_trans = translitteration($recherche);
80
-		$preg = $recherche_trans . $options['preg_flags'];
81
-		$is_preg = true;
82
-	} else {
83
-		// s'il y a plusieurs mots il faut les chercher tous : oblige REGEXP,
84
-		// sauf ceux de moins de 4 lettres (on supprime ainsi 'le', 'les', 'un',
85
-		// 'une', 'des' ...)
86
-
87
-		// attention : plusieurs mots entre guillemets sont a rechercher tels quels
88
-		$recherche_trans = $recherche_mod = $recherche;
89
-
90
-		// les expressions entre " " sont un mot a chercher tel quel
91
-		// -> on remplace les espaces par un \x1 et on enleve les guillemets
92
-		if (preg_match(',["][^"]+["],Uims', $recherche_mod, $matches)) {
93
-			foreach ($matches as $match) {
94
-				$word = preg_replace(",\s+,Uims", "\x1", $match);
95
-				$word = trim($word, '"');
96
-				$recherche_mod = str_replace($match, $word, $recherche_mod);
97
-			}
98
-		}
99
-
100
-		if (preg_match(",\s+," . $u, $recherche_mod)) {
101
-			$is_preg = true;
102
-
103
-			$recherche_inter = '|';
104
-			$recherche_mots = explode(' ', $recherche_mod);
105
-			$min_long = defined('_RECHERCHE_MIN_CAR') ? _RECHERCHE_MIN_CAR : 4;
106
-			foreach ($recherche_mots as $mot) {
107
-				if (strlen($mot) >= $min_long) {
108
-					// echapper les caracteres de regexp qui sont eventuellement dans la recherche
109
-					$recherche_inter .= preg_quote($mot) . ' ';
110
-				}
111
-			}
112
-			$recherche_inter = str_replace("\x1", '\s', $recherche_inter);
113
-
114
-			// mais on cherche quand même l'expression complète, même si elle
115
-			// comporte des mots de moins de quatre lettres
116
-			$recherche = rtrim(preg_quote($recherche) . preg_replace(',\s+,' . $u, '|', $recherche_inter), '|');
117
-			$recherche_trans = translitteration($recherche);
118
-		}
119
-
120
-		$preg = '/' . str_replace('/', '\\/', $recherche_trans) . '/' . $options['preg_flags'];
121
-	}
122
-
123
-	// Si la chaine est inactive, on va utiliser LIKE pour aller plus vite
124
-	// ou si l'expression reguliere est invalide
125
-	if (!$is_preg
126
-		or (@preg_match($preg, '') === false)
127
-	) {
128
-		$methode = 'LIKE';
129
-		$u = $GLOBALS['meta']['pcre_u'];
130
-
131
-		// echapper les % et _
132
-		$q = str_replace(array('%', '_'), array('\%', '\_'), trim($recherche));
133
-
134
-		// eviter les parentheses et autres caractères qui interferent avec pcre par la suite (dans le preg_match_all) s'il y a des reponses
135
-		$recherche = preg_quote($recherche, '/');
136
-		$recherche_trans = translitteration($recherche);
137
-		$recherche_mod = $recherche_trans;
138
-
139
-		// les expressions entre " " sont un mot a chercher tel quel
140
-		// -> on remplace les espaces par un _ et on enleve les guillemets
141
-		// corriger le like dans le $q
142
-		if (preg_match(',["][^"]+["],Uims', $q, $matches)) {
143
-			foreach ($matches as $match) {
144
-				$word = preg_replace(",\s+,Uims", "_", $match);
145
-				$word = trim($word, '"');
146
-				$q = str_replace($match, $word, $q);
147
-			}
148
-		}
149
-		// corriger la regexp
150
-		if (preg_match(',["][^"]+["],Uims', $recherche_mod, $matches)) {
151
-			foreach ($matches as $match) {
152
-				$word = preg_replace(",\s+,Uims", "[\s]", $match);
153
-				$word = trim($word, '"');
154
-				$recherche_mod = str_replace($match, $word, $recherche_mod);
155
-			}
156
-		}
157
-		$q = sql_quote(
158
-			"%"
159
-			. preg_replace(",\s+," . $u, "%", $q)
160
-			. "%"
161
-		);
162
-
163
-		$preg = '/' . preg_replace(",\s+," . $u, ".+", trim($recherche_mod)) . '/' . $options['preg_flags'];
164
-
165
-	} else {
166
-		$methode = 'REGEXP';
167
-		$q = sql_quote(trim($recherche, '/'));
168
-	}
169
-
170
-	// tous les caracteres transliterables de $q sont remplaces par un joker
171
-	// permet de matcher en SQL meme si on est sensible aux accents (SQLite)
172
-	$q_t = $q;
173
-	for ($i = 0; $i < spip_strlen($q); $i++) {
174
-		$char = spip_substr($q, $i, 1);
175
-		if (!is_ascii($char)
176
-			and $char_t = translitteration($char)
177
-			and $char_t !== $char
178
-		) {
179
-			$q_t = str_replace($char, $is_preg ? "." : "_", $q_t);
180
-		}
181
-	}
182
-
183
-	$q = $q_t;
184
-
185
-	// fix : SQLite 3 est sensible aux accents, on jokerise les caracteres
186
-	// les plus frequents qui peuvent etre accentues
187
-	// (oui c'est tres dicustable...)
188
-	if (isset($GLOBALS['connexions'][$options['serveur'] ? $options['serveur'] : 0]['type'])
189
-		and strncmp($GLOBALS['connexions'][$options['serveur'] ? $options['serveur'] : 0]['type'], 'sqlite', 6) == 0
190
-	) {
191
-		$q_t = strtr($q, "aeuioc", $is_preg ? "......" : "______");
192
-		// si il reste au moins un char significatif...
193
-		if (preg_match(",[^'%_.],", $q_t)) {
194
-			$q = $q_t;
195
-		}
196
-	}
197
-
198
-	return $expression[$key] = array($methode, $q, $preg);
61
+    // ne calculer qu'une seule fois l'expression par hit
62
+    // (meme si utilisee dans plusieurs boucles)
63
+    static $expression = array();
64
+    $key = serialize(array($recherche, $options['preg_flags']));
65
+    if (isset($expression[$key])) {
66
+        return $expression[$key];
67
+    }
68
+
69
+    $u = $GLOBALS['meta']['pcre_u'];
70
+    if ($u and strpos($options['preg_flags'], $u) === false) {
71
+        $options['preg_flags'] .= $u;
72
+    }
73
+    include_spip('inc/charsets');
74
+    $recherche = trim($recherche);
75
+
76
+    $is_preg = false;
77
+    if (substr($recherche, 0, 1) == '/' and substr($recherche, -1, 1) == '/' and strlen($recherche) > 2) {
78
+        // c'est une preg
79
+        $recherche_trans = translitteration($recherche);
80
+        $preg = $recherche_trans . $options['preg_flags'];
81
+        $is_preg = true;
82
+    } else {
83
+        // s'il y a plusieurs mots il faut les chercher tous : oblige REGEXP,
84
+        // sauf ceux de moins de 4 lettres (on supprime ainsi 'le', 'les', 'un',
85
+        // 'une', 'des' ...)
86
+
87
+        // attention : plusieurs mots entre guillemets sont a rechercher tels quels
88
+        $recherche_trans = $recherche_mod = $recherche;
89
+
90
+        // les expressions entre " " sont un mot a chercher tel quel
91
+        // -> on remplace les espaces par un \x1 et on enleve les guillemets
92
+        if (preg_match(',["][^"]+["],Uims', $recherche_mod, $matches)) {
93
+            foreach ($matches as $match) {
94
+                $word = preg_replace(",\s+,Uims", "\x1", $match);
95
+                $word = trim($word, '"');
96
+                $recherche_mod = str_replace($match, $word, $recherche_mod);
97
+            }
98
+        }
99
+
100
+        if (preg_match(",\s+," . $u, $recherche_mod)) {
101
+            $is_preg = true;
102
+
103
+            $recherche_inter = '|';
104
+            $recherche_mots = explode(' ', $recherche_mod);
105
+            $min_long = defined('_RECHERCHE_MIN_CAR') ? _RECHERCHE_MIN_CAR : 4;
106
+            foreach ($recherche_mots as $mot) {
107
+                if (strlen($mot) >= $min_long) {
108
+                    // echapper les caracteres de regexp qui sont eventuellement dans la recherche
109
+                    $recherche_inter .= preg_quote($mot) . ' ';
110
+                }
111
+            }
112
+            $recherche_inter = str_replace("\x1", '\s', $recherche_inter);
113
+
114
+            // mais on cherche quand même l'expression complète, même si elle
115
+            // comporte des mots de moins de quatre lettres
116
+            $recherche = rtrim(preg_quote($recherche) . preg_replace(',\s+,' . $u, '|', $recherche_inter), '|');
117
+            $recherche_trans = translitteration($recherche);
118
+        }
119
+
120
+        $preg = '/' . str_replace('/', '\\/', $recherche_trans) . '/' . $options['preg_flags'];
121
+    }
122
+
123
+    // Si la chaine est inactive, on va utiliser LIKE pour aller plus vite
124
+    // ou si l'expression reguliere est invalide
125
+    if (!$is_preg
126
+        or (@preg_match($preg, '') === false)
127
+    ) {
128
+        $methode = 'LIKE';
129
+        $u = $GLOBALS['meta']['pcre_u'];
130
+
131
+        // echapper les % et _
132
+        $q = str_replace(array('%', '_'), array('\%', '\_'), trim($recherche));
133
+
134
+        // eviter les parentheses et autres caractères qui interferent avec pcre par la suite (dans le preg_match_all) s'il y a des reponses
135
+        $recherche = preg_quote($recherche, '/');
136
+        $recherche_trans = translitteration($recherche);
137
+        $recherche_mod = $recherche_trans;
138
+
139
+        // les expressions entre " " sont un mot a chercher tel quel
140
+        // -> on remplace les espaces par un _ et on enleve les guillemets
141
+        // corriger le like dans le $q
142
+        if (preg_match(',["][^"]+["],Uims', $q, $matches)) {
143
+            foreach ($matches as $match) {
144
+                $word = preg_replace(",\s+,Uims", "_", $match);
145
+                $word = trim($word, '"');
146
+                $q = str_replace($match, $word, $q);
147
+            }
148
+        }
149
+        // corriger la regexp
150
+        if (preg_match(',["][^"]+["],Uims', $recherche_mod, $matches)) {
151
+            foreach ($matches as $match) {
152
+                $word = preg_replace(",\s+,Uims", "[\s]", $match);
153
+                $word = trim($word, '"');
154
+                $recherche_mod = str_replace($match, $word, $recherche_mod);
155
+            }
156
+        }
157
+        $q = sql_quote(
158
+            "%"
159
+            . preg_replace(",\s+," . $u, "%", $q)
160
+            . "%"
161
+        );
162
+
163
+        $preg = '/' . preg_replace(",\s+," . $u, ".+", trim($recherche_mod)) . '/' . $options['preg_flags'];
164
+
165
+    } else {
166
+        $methode = 'REGEXP';
167
+        $q = sql_quote(trim($recherche, '/'));
168
+    }
169
+
170
+    // tous les caracteres transliterables de $q sont remplaces par un joker
171
+    // permet de matcher en SQL meme si on est sensible aux accents (SQLite)
172
+    $q_t = $q;
173
+    for ($i = 0; $i < spip_strlen($q); $i++) {
174
+        $char = spip_substr($q, $i, 1);
175
+        if (!is_ascii($char)
176
+            and $char_t = translitteration($char)
177
+            and $char_t !== $char
178
+        ) {
179
+            $q_t = str_replace($char, $is_preg ? "." : "_", $q_t);
180
+        }
181
+    }
182
+
183
+    $q = $q_t;
184
+
185
+    // fix : SQLite 3 est sensible aux accents, on jokerise les caracteres
186
+    // les plus frequents qui peuvent etre accentues
187
+    // (oui c'est tres dicustable...)
188
+    if (isset($GLOBALS['connexions'][$options['serveur'] ? $options['serveur'] : 0]['type'])
189
+        and strncmp($GLOBALS['connexions'][$options['serveur'] ? $options['serveur'] : 0]['type'], 'sqlite', 6) == 0
190
+    ) {
191
+        $q_t = strtr($q, "aeuioc", $is_preg ? "......" : "______");
192
+        // si il reste au moins un char significatif...
193
+        if (preg_match(",[^'%_.],", $q_t)) {
194
+            $q = $q_t;
195
+        }
196
+    }
197
+
198
+    return $expression[$key] = array($methode, $q, $preg);
199 199
 }
200 200
 
201 201
 
@@ -208,119 +208,119 @@  discard block
 block discarded – undo
208 208
 // On peut passer les tables, ou une chaine listant les tables souhaitees
209 209
 // http://doc.spip.org/@recherche_en_base
210 210
 function recherche_en_base($recherche='', $tables=NULL, $options=array(), $serveur='') {
211
-	include_spip('base/abstract_sql');
212
-
213
-	if (!is_array($tables)) {
214
-		$liste = liste_des_champs();
215
-
216
-		if (is_string($tables)
217
-		AND $tables != '') {
218
-			$toutes = array();
219
-			foreach(explode(',', $tables) as $t)
220
-				if (isset($liste[$t]))
221
-					$toutes[$t] = $liste[$t];
222
-			$tables = $toutes;
223
-			unset($toutes);
224
-		} else
225
-			$tables = $liste;
226
-	}
227
-
228
-	if (!strlen($recherche) OR !count($tables))
229
-		return array();
230
-
231
-	include_spip('inc/autoriser');
232
-
233
-	// options par defaut
234
-	$options = array_merge(array(
235
-		'preg_flags' => 'UimsS',
236
-		'toutvoir' => false,
237
-		'champs' => false,
238
-		'score' => false,
239
-		'matches' => false,
240
-		'jointures' => false,
241
-		'serveur' => $serveur
242
-		),
243
-		$options
244
-	);
245
-
246
-	$results = array();
247
-
248
-	// Utiliser l'iterateur (DATA:recherche)
249
-	// pour recuperer les couples (id_objet, score)
250
-	// Le resultat est au format { 
251
-	//      id1 = { 'score' => x, attrs => { } },
252
-	//      id2 = { 'score' => x, attrs => { } },
253
-	// }
254
-	include_spip('inc/memoization');
255
-	foreach ($tables as $table => $champs) {
256
-		# lock via memoization, si dispo
257
-		if (function_exists('cache_lock'))
258
-			cache_lock($lock = 'recherche '.$table.' '.$recherche);
259
-
260
-		spip_timer('rech');
261
-
262
-		// TODO: ici plutot charger un iterateur via l'API iterateurs
263
-		include_spip('inc/recherche_to_array');
264
-		$to_array = charger_fonction('recherche_to_array', 'inc');
265
-		$results[$table] = $to_array($recherche,
266
-			array_merge($options, array('table' => $table, 'champs' => $champs))
267
-		);
268
-		##var_dump($results[$table]);
269
-
270
-
271
-		spip_log("recherche $table ($recherche) : ".count($results[$table])." resultats ".spip_timer('rech'),'recherche');
272
-
273
-		if (isset($lock))
274
-			cache_unlock($lock);
275
-	}
276
-
277
-	return $results;
211
+    include_spip('base/abstract_sql');
212
+
213
+    if (!is_array($tables)) {
214
+        $liste = liste_des_champs();
215
+
216
+        if (is_string($tables)
217
+        AND $tables != '') {
218
+            $toutes = array();
219
+            foreach(explode(',', $tables) as $t)
220
+                if (isset($liste[$t]))
221
+                    $toutes[$t] = $liste[$t];
222
+            $tables = $toutes;
223
+            unset($toutes);
224
+        } else
225
+            $tables = $liste;
226
+    }
227
+
228
+    if (!strlen($recherche) OR !count($tables))
229
+        return array();
230
+
231
+    include_spip('inc/autoriser');
232
+
233
+    // options par defaut
234
+    $options = array_merge(array(
235
+        'preg_flags' => 'UimsS',
236
+        'toutvoir' => false,
237
+        'champs' => false,
238
+        'score' => false,
239
+        'matches' => false,
240
+        'jointures' => false,
241
+        'serveur' => $serveur
242
+        ),
243
+        $options
244
+    );
245
+
246
+    $results = array();
247
+
248
+    // Utiliser l'iterateur (DATA:recherche)
249
+    // pour recuperer les couples (id_objet, score)
250
+    // Le resultat est au format { 
251
+    //      id1 = { 'score' => x, attrs => { } },
252
+    //      id2 = { 'score' => x, attrs => { } },
253
+    // }
254
+    include_spip('inc/memoization');
255
+    foreach ($tables as $table => $champs) {
256
+        # lock via memoization, si dispo
257
+        if (function_exists('cache_lock'))
258
+            cache_lock($lock = 'recherche '.$table.' '.$recherche);
259
+
260
+        spip_timer('rech');
261
+
262
+        // TODO: ici plutot charger un iterateur via l'API iterateurs
263
+        include_spip('inc/recherche_to_array');
264
+        $to_array = charger_fonction('recherche_to_array', 'inc');
265
+        $results[$table] = $to_array($recherche,
266
+            array_merge($options, array('table' => $table, 'champs' => $champs))
267
+        );
268
+        ##var_dump($results[$table]);
269
+
270
+
271
+        spip_log("recherche $table ($recherche) : ".count($results[$table])." resultats ".spip_timer('rech'),'recherche');
272
+
273
+        if (isset($lock))
274
+            cache_unlock($lock);
275
+    }
276
+
277
+    return $results;
278 278
 }
279 279
 
280 280
 
281 281
 // Effectue une recherche sur toutes les tables de la base de donnees
282 282
 // http://doc.spip.org/@remplace_en_base
283 283
 function remplace_en_base($recherche='', $remplace=NULL, $tables=NULL, $options=array()) {
284
-	include_spip('inc/modifier');
285
-
286
-	// options par defaut
287
-	$options = array_merge(array(
288
-		'preg_flags' => 'UimsS',
289
-		'toutmodifier' => false
290
-		),
291
-		$options
292
-	);
293
-	$options['champs'] = true;
294
-
295
-
296
-	if (!is_array($tables))
297
-		$tables = liste_des_champs();
298
-
299
-	$results = recherche_en_base($recherche, $tables, $options);
300
-
301
-	$preg = '/'.str_replace('/', '\\/', $recherche).'/' . $options['preg_flags'];
302
-
303
-	foreach ($results as $table => $r) {
304
-		$_id_table = id_table_objet($table);
305
-		foreach ($r as $id => $x) {
306
-			if ($options['toutmodifier']
307
-			OR autoriser('modifier', $table, $id)) {
308
-				$modifs = array();
309
-				foreach ($x['champs'] as $key => $val) {
310
-					if ($key == $_id_table) next;
311
-					$repl = preg_replace($preg, $remplace, $val);
312
-					if ($repl <> $val)
313
-						$modifs[$key] = $repl;
314
-				}
315
-				if ($modifs)
316
-					objet_modifier_champs($table, $id,
317
-						array(
318
-							'champs' => array_keys($modifs),
319
-						),
320
-						$modifs);
321
-			}
322
-		}
323
-	}
284
+    include_spip('inc/modifier');
285
+
286
+    // options par defaut
287
+    $options = array_merge(array(
288
+        'preg_flags' => 'UimsS',
289
+        'toutmodifier' => false
290
+        ),
291
+        $options
292
+    );
293
+    $options['champs'] = true;
294
+
295
+
296
+    if (!is_array($tables))
297
+        $tables = liste_des_champs();
298
+
299
+    $results = recherche_en_base($recherche, $tables, $options);
300
+
301
+    $preg = '/'.str_replace('/', '\\/', $recherche).'/' . $options['preg_flags'];
302
+
303
+    foreach ($results as $table => $r) {
304
+        $_id_table = id_table_objet($table);
305
+        foreach ($r as $id => $x) {
306
+            if ($options['toutmodifier']
307
+            OR autoriser('modifier', $table, $id)) {
308
+                $modifs = array();
309
+                foreach ($x['champs'] as $key => $val) {
310
+                    if ($key == $_id_table) next;
311
+                    $repl = preg_replace($preg, $remplace, $val);
312
+                    if ($repl <> $val)
313
+                        $modifs[$key] = $repl;
314
+                }
315
+                if ($modifs)
316
+                    objet_modifier_champs($table, $id,
317
+                        array(
318
+                            'champs' => array_keys($modifs),
319
+                        ),
320
+                        $modifs);
321
+            }
322
+        }
323
+    }
324 324
 }
325 325
 
326 326
 ?>
Please login to merge, or discard this patch.
ecrire/inc/presentation_mini.php 1 patch
Indentation   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -33,10 +33,10 @@  discard block
 block discarded – undo
33 33
  * @return void
34 34
 **/
35 35
 function echo_log($f, $ret) {
36
-	spip_log("Page " . self() . " function $f: echo ".substr($ret,0,50)."...",'echo');
37
-	echo
38
-	(_SIGNALER_ECHOS?"#Echo par $f#" :"")
39
-		. $ret;
36
+    spip_log("Page " . self() . " function $f: echo ".substr($ret,0,50)."...",'echo');
37
+    echo
38
+    (_SIGNALER_ECHOS?"#Echo par $f#" :"")
39
+        . $ret;
40 40
 }
41 41
 
42 42
 /**
@@ -74,10 +74,10 @@  discard block
 block discarded – undo
74 74
  * @return string Code HTML
75 75
  */
76 76
 function creer_colonne_droite(){
77
-	static $deja_colonne_droite;
78
-	if ($GLOBALS['spip_ecran']!='large' OR $deja_colonne_droite) return '';
79
-	$deja_colonne_droite = true;
80
-	return "\n</div><div id='extra' class='lat' role='complementary'>";
77
+    static $deja_colonne_droite;
78
+    if ($GLOBALS['spip_ecran']!='large' OR $deja_colonne_droite) return '';
79
+    $deja_colonne_droite = true;
80
+    return "\n</div><div id='extra' class='lat' role='complementary'>";
81 81
 }
82 82
 
83 83
 /**
@@ -85,129 +85,129 @@  discard block
 block discarded – undo
85 85
  * @return string Code HTML
86 86
  */
87 87
 function debut_droite() {
88
-	return liste_objets_bloques(_request('exec'))
89
-	  . creer_colonne_droite()
90
-	  . "</div>"
91
-	  . "\n<div id='contenu'>";
88
+    return liste_objets_bloques(_request('exec'))
89
+        . creer_colonne_droite()
90
+        . "</div>"
91
+        . "\n<div id='contenu'>";
92 92
 }
93 93
 
94 94
 // http://doc.spip.org/@liste_articles_bloques
95 95
 function liste_objets_bloques($exec,$contexte=array(),$auteur=null){
96
-	$res = '';
97
-	if ($GLOBALS['meta']["articles_modif"] != "non") {
98
-		include_spip('inc/drapeau_edition');
99
-		if (is_null($auteur))
100
-			$auteur = $GLOBALS['visiteur_session'];
101
-		if ($en_cours=trouver_objet_exec($exec)
102
-			AND $en_cours['edition']
103
-			AND $type = $en_cours['type']
104
-		  AND ($id = $contexte[$en_cours['id_table_objet']] OR $id = _request($en_cours['id_table_objet']))) {
105
-			// marquer le fait que l'objet est ouvert en edition par toto
106
-			// a telle date ; une alerte sera donnee aux autres redacteurs
107
-			signale_edition ($id,  $auteur, $type);
108
-		}
109
-
110
-		$objets_ouverts = liste_drapeau_edition($auteur['id_auteur']);
111
-		if (count($objets_ouverts)) {
112
-			$res .= recuperer_fond('prive/objets/liste/objets-en-edition',array(),array('ajax'=>true));
113
-		}
114
-	}
115
-	return $res;
96
+    $res = '';
97
+    if ($GLOBALS['meta']["articles_modif"] != "non") {
98
+        include_spip('inc/drapeau_edition');
99
+        if (is_null($auteur))
100
+            $auteur = $GLOBALS['visiteur_session'];
101
+        if ($en_cours=trouver_objet_exec($exec)
102
+            AND $en_cours['edition']
103
+            AND $type = $en_cours['type']
104
+          AND ($id = $contexte[$en_cours['id_table_objet']] OR $id = _request($en_cours['id_table_objet']))) {
105
+            // marquer le fait que l'objet est ouvert en edition par toto
106
+            // a telle date ; une alerte sera donnee aux autres redacteurs
107
+            signale_edition ($id,  $auteur, $type);
108
+        }
109
+
110
+        $objets_ouverts = liste_drapeau_edition($auteur['id_auteur']);
111
+        if (count($objets_ouverts)) {
112
+            $res .= recuperer_fond('prive/objets/liste/objets-en-edition',array(),array('ajax'=>true));
113
+        }
114
+    }
115
+    return $res;
116 116
 }
117 117
 
118 118
 // Fin de page de l'interface privee.
119 119
 // Elle comporte une image invisible declenchant une tache de fond
120 120
 // http://doc.spip.org/@fin_page
121 121
 function fin_page(){
122
-	include_spip('inc/pipelines');
123
-	// avec &var_profile=1 on a le tableau de mesures SQL
124
-	$debug = ((_request('exec') !== 'valider_xml')
125
-		AND ((_request('var_mode') == 'debug')
126
-			OR (isset($GLOBALS['tableau_des_temps']) AND $GLOBALS['tableau_des_temps'])
127
-			AND isset($_COOKIE['spip_admin'])));
128
-	$t = '</div><div id="pied"><div class="largeur">'
129
-	. recuperer_fond('prive/squelettes/inclure/pied')
130
-	. "</div>"
131
-	. "</div></div>" // cf. div#page et div.largeur ouvertes dans conmmencer_page()
132
-	. ($debug?erreur_squelette():'')
133
-	. "</body></html>\n";
134
-	return f_queue($t);
122
+    include_spip('inc/pipelines');
123
+    // avec &var_profile=1 on a le tableau de mesures SQL
124
+    $debug = ((_request('exec') !== 'valider_xml')
125
+        AND ((_request('var_mode') == 'debug')
126
+            OR (isset($GLOBALS['tableau_des_temps']) AND $GLOBALS['tableau_des_temps'])
127
+            AND isset($_COOKIE['spip_admin'])));
128
+    $t = '</div><div id="pied"><div class="largeur">'
129
+    . recuperer_fond('prive/squelettes/inclure/pied')
130
+    . "</div>"
131
+    . "</div></div>" // cf. div#page et div.largeur ouvertes dans conmmencer_page()
132
+    . ($debug?erreur_squelette():'')
133
+    . "</body></html>\n";
134
+    return f_queue($t);
135 135
 }
136 136
 
137 137
 function html_tests_js(){
138
-	if (_SPIP_AJAX AND !defined('_TESTER_NOSCRIPT')) {
139
-	  // pour le pied de page (deja defini si on est validation XML)
140
-		define('_TESTER_NOSCRIPT',
141
-			"<noscript>\n<div style='display:none;'><img src='"
142
-		        . generer_url_ecrire('test_ajax', 'js=-1')
143
-		        . "' width='1' height='1' alt='' /></div></noscript>\n");
144
-	}
145
-	return
146
-		(defined('_SESSION_REJOUER') ? _SESSION_REJOUER : '')
147
-	. (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : '');
138
+    if (_SPIP_AJAX AND !defined('_TESTER_NOSCRIPT')) {
139
+        // pour le pied de page (deja defini si on est validation XML)
140
+        define('_TESTER_NOSCRIPT',
141
+            "<noscript>\n<div style='display:none;'><img src='"
142
+                . generer_url_ecrire('test_ajax', 'js=-1')
143
+                . "' width='1' height='1' alt='' /></div></noscript>\n");
144
+    }
145
+    return
146
+        (defined('_SESSION_REJOUER') ? _SESSION_REJOUER : '')
147
+    . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : '');
148 148
 }
149 149
 
150 150
 function info_maj_spip(){
151 151
 
152
-	$maj = $GLOBALS['meta']['info_maj_spip'];
153
-	if (!$maj)
154
-		return "";
152
+    $maj = $GLOBALS['meta']['info_maj_spip'];
153
+    if (!$maj)
154
+        return "";
155 155
 
156
-	$maj = explode('|',$maj);
157
-	// c'est une ancienne notif, on a fait la maj depuis !
158
-	if ($GLOBALS['spip_version_branche']!==reset($maj))
159
-		return "";
156
+    $maj = explode('|',$maj);
157
+    // c'est une ancienne notif, on a fait la maj depuis !
158
+    if ($GLOBALS['spip_version_branche']!==reset($maj))
159
+        return "";
160 160
 
161
-	if (!autoriser('webmestre'))
162
-		return "";
161
+    if (!autoriser('webmestre'))
162
+        return "";
163 163
 
164
-	array_shift($maj);
165
-	$maj = implode('|',$maj);
164
+    array_shift($maj);
165
+    $maj = implode('|',$maj);
166 166
 
167
-	return "$maj<br />";
167
+    return "$maj<br />";
168 168
 }
169 169
 
170 170
 // http://doc.spip.org/@info_copyright
171 171
 function info_copyright() {
172
-	global $spip_version_affichee, $spip_lang;
173
-
174
-	$version = $spip_version_affichee;
175
-
176
-	//
177
-	// Mention, le cas echeant, de la revision SVN courante
178
-	//
179
-	if ($svn_revision = version_svn_courante(_DIR_RACINE)) {
180
-		$version .= ' ' . (($svn_revision < 0) ? 'SVN ':'')
181
-		. "[<a href='http://core.spip.net/projects/spip/repository/revisions/"
182
-		. abs($svn_revision) . "' target=\"_blank\" rel=\"noopener noreferrer\">"
183
-		. abs($svn_revision) . "</a>]";
184
-	}
185
-
186
-	// et la version de l'ecran de securite
187
-	$secu = defined('_ECRAN_SECURITE')
188
-		? "<br />"._T('ecran_securite',array('version'=>_ECRAN_SECURITE))
189
-		: '';
190
-
191
-	return _T('info_copyright',
192
-		   array('spip' => "<b>SPIP $version</b> ",
193
-			 'lien_gpl' =>
194
-			 "<a href='". generer_url_ecrire("aide", "aide=licence&var_lang=$spip_lang") . "' onclick=\"window.open(this.href, 'spip_aide', 'scrollbars=yes,resizable=yes,width=740,height=580'); return false;\">" . _T('info_copyright_gpl')."</a>"))
195
-		. $secu;
172
+    global $spip_version_affichee, $spip_lang;
173
+
174
+    $version = $spip_version_affichee;
175
+
176
+    //
177
+    // Mention, le cas echeant, de la revision SVN courante
178
+    //
179
+    if ($svn_revision = version_svn_courante(_DIR_RACINE)) {
180
+        $version .= ' ' . (($svn_revision < 0) ? 'SVN ':'')
181
+        . "[<a href='http://core.spip.net/projects/spip/repository/revisions/"
182
+        . abs($svn_revision) . "' target=\"_blank\" rel=\"noopener noreferrer\">"
183
+        . abs($svn_revision) . "</a>]";
184
+    }
185
+
186
+    // et la version de l'ecran de securite
187
+    $secu = defined('_ECRAN_SECURITE')
188
+        ? "<br />"._T('ecran_securite',array('version'=>_ECRAN_SECURITE))
189
+        : '';
190
+
191
+    return _T('info_copyright',
192
+            array('spip' => "<b>SPIP $version</b> ",
193
+                'lien_gpl' =>
194
+                "<a href='". generer_url_ecrire("aide", "aide=licence&var_lang=$spip_lang") . "' onclick=\"window.open(this.href, 'spip_aide', 'scrollbars=yes,resizable=yes,width=740,height=580'); return false;\">" . _T('info_copyright_gpl')."</a>"))
195
+        . $secu;
196 196
 
197 197
 }
198 198
 
199 199
 // http://doc.spip.org/@formulaire_recherche
200 200
 function formulaire_recherche($page, $complement=""){
201
-	$recherche = _request('recherche');
202
-	$recherche_aff = entites_html($recherche);
203
-	if (!strlen($recherche)) {
204
-		$recherche_aff = _T('info_rechercher');
205
-		$onfocus = " onfocus=\"this.value='';\"";
206
-	} else $onfocus = '';
207
-
208
-	$form = '<input type="text" size="10" value="'.$recherche_aff.'" name="recherche" class="recherche" accesskey="r"' . $onfocus . ' />';
209
-	$form .= "<input type='image' src='" . chemin_image('rechercher-20.png') . "' name='submit' class='submit' alt='"._T('info_rechercher')."' />";
210
-	return "<div class='spip_recherche'>".generer_form_ecrire($page, $form . $complement, " method='get'")."</div>";
201
+    $recherche = _request('recherche');
202
+    $recherche_aff = entites_html($recherche);
203
+    if (!strlen($recherche)) {
204
+        $recherche_aff = _T('info_rechercher');
205
+        $onfocus = " onfocus=\"this.value='';\"";
206
+    } else $onfocus = '';
207
+
208
+    $form = '<input type="text" size="10" value="'.$recherche_aff.'" name="recherche" class="recherche" accesskey="r"' . $onfocus . ' />';
209
+    $form .= "<input type='image' src='" . chemin_image('rechercher-20.png') . "' name='submit' class='submit' alt='"._T('info_rechercher')."' />";
210
+    return "<div class='spip_recherche'>".generer_form_ecrire($page, $form . $complement, " method='get'")."</div>";
211 211
 }
212 212
 
213 213
 ?>
Please login to merge, or discard this patch.
ecrire/inc/informer.php 1 patch
Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -17,57 +17,57 @@
 block discarded – undo
17 17
 // http://doc.spip.org/@inc_informer_dist
18 18
 function inc_informer_dist($id, $col, $exclus, $rac, $type, $do='aff')
19 19
 {
20
-	include_spip('inc/texte');
21
-	if ($type == "rubrique") {
22
-		$row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = " . intval($id));
23
-		if ($row) {
24
-			$titre = typo($row["titre"]);
25
-			$descriptif = propre($row["descriptif"]);
26
-		} else {
27
-			$titre = _T('info_racine_site');
28
-		}
29
-	} else
30
-		$titre = '';
20
+    include_spip('inc/texte');
21
+    if ($type == "rubrique") {
22
+        $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = " . intval($id));
23
+        if ($row) {
24
+            $titre = typo($row["titre"]);
25
+            $descriptif = propre($row["descriptif"]);
26
+        } else {
27
+            $titre = _T('info_racine_site');
28
+        }
29
+    } else
30
+        $titre = '';
31 31
 
32
-	$res = '';
33
-	if ($type == "rubrique" AND $GLOBALS['spip_display'] != 1 AND isset($GLOBALS['meta']['image_process']))
34
-	  if ($GLOBALS['meta']['image_process'] != "non") {
35
-		$chercher_logo = charger_fonction('chercher_logo', 'inc');
36
-		if ($res = $chercher_logo($id, 'id_rubrique', 'on'))  {
37
-			list($fid, $dir, $nom, $format) = $res;
38
-			include_spip('inc/filtres_images_mini');
39
-			$res = image_reduire("<img src='$fid' alt='' />", 100, 48);
40
-			if ($res)
41
-				$res =  "<div style='float: ".$GLOBALS['spip_lang_right']."; margin-".$GLOBALS['spip_lang_right'].": -5px; margin-top: -5px;'>$res</div>";
42
-		}
43
-	}
32
+    $res = '';
33
+    if ($type == "rubrique" AND $GLOBALS['spip_display'] != 1 AND isset($GLOBALS['meta']['image_process']))
34
+        if ($GLOBALS['meta']['image_process'] != "non") {
35
+        $chercher_logo = charger_fonction('chercher_logo', 'inc');
36
+        if ($res = $chercher_logo($id, 'id_rubrique', 'on'))  {
37
+            list($fid, $dir, $nom, $format) = $res;
38
+            include_spip('inc/filtres_images_mini');
39
+            $res = image_reduire("<img src='$fid' alt='' />", 100, 48);
40
+            if ($res)
41
+                $res =  "<div style='float: ".$GLOBALS['spip_lang_right']."; margin-".$GLOBALS['spip_lang_right'].": -5px; margin-top: -5px;'>$res</div>";
42
+        }
43
+    }
44 44
 
45
-	$rac = spip_htmlentities($rac, ENT_QUOTES);
46
-	$do = spip_htmlentities($do, ENT_QUOTES);
47
-	$id = intval($id);
45
+    $rac = spip_htmlentities($rac, ENT_QUOTES);
46
+    $do = spip_htmlentities($do, ENT_QUOTES);
47
+    $id = intval($id);
48 48
 
49 49
 # ce lien provoque la selection (directe) de la rubrique cliquee
50 50
 # et l'affichage de son titre dans le bandeau
51
-	$titre = strtr(str_replace("'", "&#8217;",
52
-			str_replace('"', "&#34;", textebrut($titre))),
53
-		       "\n\r", "  ");
51
+    $titre = strtr(str_replace("'", "&#8217;",
52
+            str_replace('"', "&#34;", textebrut($titre))),
53
+                "\n\r", "  ");
54 54
 
55
-	$js_func = $do . '_selection_titre';
56
-	return "<div style='display: none;'>"
57
-	. "<input type='text' id='".$rac."_sel' value='$id' />"
58
-	. "<input type='text' id='".$rac."_sel2' value=\""
59
-	. entites_html($titre)
60
-	. "\" />"
61
-	. "</div>"
62
-	. "<div class='informer' style='padding: 5px; border-top: 0px;'>"
63
-	. (!$res ? '' : $res)
64
-	. "<p><b>".safehtml($titre)."</b></p>"
65
-	. (!$descriptif ? '' : "<div>".safehtml($descriptif)."</div>")
66
-	. "<div style='text-align: ".$GLOBALS['spip_lang_right'].";'>"
67
-	. "<input type='submit' class='fondo' value='"
68
-	. _T('bouton_choisir')
69
-	. "'\nonclick=\"$js_func('$titre',$id,'selection_rubrique','id_parent'); return false;\" />"
70
-	.  "</div>"
71
-	.  "</div>";
55
+    $js_func = $do . '_selection_titre';
56
+    return "<div style='display: none;'>"
57
+    . "<input type='text' id='".$rac."_sel' value='$id' />"
58
+    . "<input type='text' id='".$rac."_sel2' value=\""
59
+    . entites_html($titre)
60
+    . "\" />"
61
+    . "</div>"
62
+    . "<div class='informer' style='padding: 5px; border-top: 0px;'>"
63
+    . (!$res ? '' : $res)
64
+    . "<p><b>".safehtml($titre)."</b></p>"
65
+    . (!$descriptif ? '' : "<div>".safehtml($descriptif)."</div>")
66
+    . "<div style='text-align: ".$GLOBALS['spip_lang_right'].";'>"
67
+    . "<input type='submit' class='fondo' value='"
68
+    . _T('bouton_choisir')
69
+    . "'\nonclick=\"$js_func('$titre',$id,'selection_rubrique','id_parent'); return false;\" />"
70
+    .  "</div>"
71
+    .  "</div>";
72 72
 }
73 73
 ?>
Please login to merge, or discard this patch.
ecrire/inc/chercher_rubrique.php 1 patch
Indentation   +137 added lines, -137 removed lines patch added patch discarded remove patch
@@ -24,18 +24,18 @@  discard block
 block discarded – undo
24 24
 // $idem : en mode rubrique = la rubrique soi-meme
25 25
 // http://doc.spip.org/@inc_chercher_rubrique_dist
26 26
 function inc_chercher_rubrique_dist ($id_rubrique, $type, $restreint, $idem=0, $do='aff') {
27
-	if (sql_countsel('spip_rubriques')<1)
28
-		return '';
27
+    if (sql_countsel('spip_rubriques')<1)
28
+        return '';
29 29
 
30
-	// Mode sans Ajax :
31
-	// - soit parce que le cookie ajax n'est pas la
32
-	// - soit parce qu'il y a peu de rubriques
33
-	if (_SPIP_AJAX < 1
34
-	OR $type == 'breve'
35
-	OR sql_countsel('spip_rubriques') < _SPIP_SELECT_RUBRIQUES)
36
-		return selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem);
30
+    // Mode sans Ajax :
31
+    // - soit parce que le cookie ajax n'est pas la
32
+    // - soit parce qu'il y a peu de rubriques
33
+    if (_SPIP_AJAX < 1
34
+    OR $type == 'breve'
35
+    OR sql_countsel('spip_rubriques') < _SPIP_SELECT_RUBRIQUES)
36
+        return selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem);
37 37
 
38
-	else return selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem, $do);
38
+    else return selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem, $do);
39 39
 
40 40
 }
41 41
 
@@ -44,119 +44,119 @@  discard block
 block discarded – undo
44 44
 
45 45
 // http://doc.spip.org/@style_menu_rubriques
46 46
 function style_menu_rubriques($i) {
47
-	global $browser_name, $spip_lang_left;
48
-
49
-	$espace = '';
50
-	if (preg_match(",mozilla,i", $browser_name)) {
51
-		$style = "padding-$spip_lang_left: 16px; "
52
-		. "margin-$spip_lang_left: ".(($i-1)*16)."px;";
53
-	} else {
54
-		$style = '';
55
-		for ($count = 0; $count <= $i; $count ++)
56
-			$espace .= "&nbsp;&nbsp;&nbsp;&nbsp;";
57
-	}
58
-	if ($i ==1)
59
-		$espace= "";
60
-	$class = "niveau_$i";
61
-	return array($class,$style,$espace);
47
+    global $browser_name, $spip_lang_left;
48
+
49
+    $espace = '';
50
+    if (preg_match(",mozilla,i", $browser_name)) {
51
+        $style = "padding-$spip_lang_left: 16px; "
52
+        . "margin-$spip_lang_left: ".(($i-1)*16)."px;";
53
+    } else {
54
+        $style = '';
55
+        for ($count = 0; $count <= $i; $count ++)
56
+            $espace .= "&nbsp;&nbsp;&nbsp;&nbsp;";
57
+    }
58
+    if ($i ==1)
59
+        $espace= "";
60
+    $class = "niveau_$i";
61
+    return array($class,$style,$espace);
62 62
 }
63 63
 
64 64
 // http://doc.spip.org/@sous_menu_rubriques
65 65
 function sous_menu_rubriques($id_rubrique, $root, $niv, &$data, &$enfants, $exclus, $restreint, $type) {
66
-	static $decalage_secteur;
66
+    static $decalage_secteur;
67 67
 
68
-	// Si on a demande l'exclusion ne pas descendre dans la rubrique courante
69
-	if ($exclus > 0
70
-	AND $root == $exclus) return '';
68
+    // Si on a demande l'exclusion ne pas descendre dans la rubrique courante
69
+    if ($exclus > 0
70
+    AND $root == $exclus) return '';
71 71
 
72
-	// en fonction du niveau faire un affichage plus ou moins kikoo
72
+    // en fonction du niveau faire un affichage plus ou moins kikoo
73 73
 
74
-	// selected ?
75
-	$selected = ($root == $id_rubrique) ? ' selected="selected"' : '';
74
+    // selected ?
75
+    $selected = ($root == $id_rubrique) ? ' selected="selected"' : '';
76 76
 
77
-	// le style en fonction de la profondeur
78
-	list($class, $style, $espace) = style_menu_rubriques($niv);
77
+    // le style en fonction de la profondeur
78
+    list($class, $style, $espace) = style_menu_rubriques($niv);
79 79
 
80
-	$class .= " selec_rub";
80
+    $class .= " selec_rub";
81 81
 
82
-	// creer l'<option> pour la rubrique $root
82
+    // creer l'<option> pour la rubrique $root
83 83
 
84
-	if (isset($data[$root])) # pas de racine sauf pour les rubriques
85
-	{
86
-		$r = "<option$selected value='$root' class='$class' style='$style'>$espace"
87
-		.$data[$root]
88
-		.'</option>'."\n";
89
-	} else 	$r = '';
84
+    if (isset($data[$root])) # pas de racine sauf pour les rubriques
85
+    {
86
+        $r = "<option$selected value='$root' class='$class' style='$style'>$espace"
87
+        .$data[$root]
88
+        .'</option>'."\n";
89
+    } else 	$r = '';
90 90
 	
91
-	// et le sous-menu pour ses enfants
92
-	$sous = '';
93
-	if (isset($enfants[$root]))
94
-		foreach ($enfants[$root] as $sousrub)
95
-			$sous .= sous_menu_rubriques($id_rubrique, $sousrub,
96
-				$niv+1, $data, $enfants, $exclus, $restreint, $type);
97
-
98
-	// si l'objet a deplacer est publie, verifier qu'on a acces aux rubriques
99
-	if ($restreint AND $root!=$id_rubrique AND !autoriser('publierdans','rubrique',$root))
100
-		return $sous;
101
-
102
-	// et voila le travail
103
-	return $r.$sous;
91
+    // et le sous-menu pour ses enfants
92
+    $sous = '';
93
+    if (isset($enfants[$root]))
94
+        foreach ($enfants[$root] as $sousrub)
95
+            $sous .= sous_menu_rubriques($id_rubrique, $sousrub,
96
+                $niv+1, $data, $enfants, $exclus, $restreint, $type);
97
+
98
+    // si l'objet a deplacer est publie, verifier qu'on a acces aux rubriques
99
+    if ($restreint AND $root!=$id_rubrique AND !autoriser('publierdans','rubrique',$root))
100
+        return $sous;
101
+
102
+    // et voila le travail
103
+    return $r.$sous;
104 104
 }
105 105
 
106 106
 // Le selecteur de rubriques en mode classique (menu)
107 107
 // http://doc.spip.org/@selecteur_rubrique_html
108 108
 function selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem=0) {
109
-	$data = array();
110
-	if ($type == 'rubrique' AND autoriser('publierdans','rubrique',0))
111
-		$data[0] = _T('info_racine_site');
112
-	# premier choix = neant
113
-	# si auteur (rubriques restreintes)
114
-	# ou si creation avec id_rubrique=0
115
-	elseif ($type == 'auteur' OR !$id_rubrique)
116
-		$data[0] = '&nbsp;';
117
-
118
-	//
119
-	// creer une structure contenant toute l'arborescence
120
-	//
121
-
122
-	include_spip('base/abstract_sql');
123
-	$q = sql_select("id_rubrique, id_parent, titre, statut, lang, langue_choisie", "spip_rubriques", ($type == 'breve' ?  ' id_parent=0 ' : ''), '', "0+titre,titre");
124
-	while ($r = sql_fetch($q)) {
125
-		if (autoriser('voir','rubrique',$r['id_rubrique'])){
126
-			// titre largeur maxi a 50
127
-			$titre = couper(supprimer_tags(typo($r['titre']))." ", 50);
128
-			if ($GLOBALS['meta']['multi_rubriques'] == 'oui'
129
-			AND ($r['langue_choisie'] == "oui" OR $r['id_parent'] == 0))
130
-				$titre .= ' ['.traduire_nom_langue($r['lang']).']';
131
-			$data[$r['id_rubrique']] = $titre;
132
-			$enfants[$r['id_parent']][] = $r['id_rubrique'];
133
-			if ($id_rubrique == $r['id_rubrique']) $id_parent = $r['id_parent'];
134
-		}
135
-	}
136
-
137
-	// si une seule rubrique comme choix possible,
138
-	// inutile de mettre le selecteur sur un choix vide par defaut
139
-	// sauf si le selecteur s'adresse a une rubrique puisque on peut la mettre a la racine dans ce cas
140
-	if (count($data)==2
141
-	  AND isset($data[0])
142
-	  AND !in_array($type,array('auteur','rubrique'))
143
-	  AND !$id_rubrique)
144
-		unset($data[0]);
145
-
146
-
147
-	$opt = sous_menu_rubriques($id_rubrique,0, 0,$data,$enfants,$idem, $restreint, $type);
148
-	$att = " id='id_parent' name='id_parent'\nclass='selecteur_parent verdana1'";
149
-
150
-	if (preg_match(',^<option[^<>]*value=.(\d*).[^<>]*>([^<]*)</option>$,',$opt,$r))
151
-	  $r = "<input$att type='hidden' value='" . $r[1] . "' />" . $r[2] ;
152
-	else 
153
-	  $r = "<select".$att." size='1'>\n$opt</select>\n";
154
-
155
-	# message pour neuneus (a supprimer ?)
109
+    $data = array();
110
+    if ($type == 'rubrique' AND autoriser('publierdans','rubrique',0))
111
+        $data[0] = _T('info_racine_site');
112
+    # premier choix = neant
113
+    # si auteur (rubriques restreintes)
114
+    # ou si creation avec id_rubrique=0
115
+    elseif ($type == 'auteur' OR !$id_rubrique)
116
+        $data[0] = '&nbsp;';
117
+
118
+    //
119
+    // creer une structure contenant toute l'arborescence
120
+    //
121
+
122
+    include_spip('base/abstract_sql');
123
+    $q = sql_select("id_rubrique, id_parent, titre, statut, lang, langue_choisie", "spip_rubriques", ($type == 'breve' ?  ' id_parent=0 ' : ''), '', "0+titre,titre");
124
+    while ($r = sql_fetch($q)) {
125
+        if (autoriser('voir','rubrique',$r['id_rubrique'])){
126
+            // titre largeur maxi a 50
127
+            $titre = couper(supprimer_tags(typo($r['titre']))." ", 50);
128
+            if ($GLOBALS['meta']['multi_rubriques'] == 'oui'
129
+            AND ($r['langue_choisie'] == "oui" OR $r['id_parent'] == 0))
130
+                $titre .= ' ['.traduire_nom_langue($r['lang']).']';
131
+            $data[$r['id_rubrique']] = $titre;
132
+            $enfants[$r['id_parent']][] = $r['id_rubrique'];
133
+            if ($id_rubrique == $r['id_rubrique']) $id_parent = $r['id_parent'];
134
+        }
135
+    }
136
+
137
+    // si une seule rubrique comme choix possible,
138
+    // inutile de mettre le selecteur sur un choix vide par defaut
139
+    // sauf si le selecteur s'adresse a une rubrique puisque on peut la mettre a la racine dans ce cas
140
+    if (count($data)==2
141
+      AND isset($data[0])
142
+      AND !in_array($type,array('auteur','rubrique'))
143
+      AND !$id_rubrique)
144
+        unset($data[0]);
145
+
146
+
147
+    $opt = sous_menu_rubriques($id_rubrique,0, 0,$data,$enfants,$idem, $restreint, $type);
148
+    $att = " id='id_parent' name='id_parent'\nclass='selecteur_parent verdana1'";
149
+
150
+    if (preg_match(',^<option[^<>]*value=.(\d*).[^<>]*>([^<]*)</option>$,',$opt,$r))
151
+        $r = "<input$att type='hidden' value='" . $r[1] . "' />" . $r[2] ;
152
+    else 
153
+        $r = "<select".$att." size='1'>\n$opt</select>\n";
154
+
155
+    # message pour neuneus (a supprimer ?)
156 156
 #	if ($type != 'auteur' AND $type != 'breve')
157 157
 #		$r .= "\n<br />"._T('texte_rappel_selection_champs');
158 158
 
159
-	return $r;
159
+    return $r;
160 160
 }
161 161
 
162 162
 /**
@@ -179,23 +179,23 @@  discard block
 block discarded – undo
179 179
  */
180 180
 function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0, $do) {
181 181
 
182
-	if ($id_rubrique) {
183
-		$titre = sql_getfetsel("titre", "spip_rubriques", "id_rubrique=".intval($id_rubrique));
184
-	} else if ($type == 'auteur')
185
-		$titre = '&nbsp;';
186
-	else
187
-		$titre = _T('info_racine_site');
182
+    if ($id_rubrique) {
183
+        $titre = sql_getfetsel("titre", "spip_rubriques", "id_rubrique=".intval($id_rubrique));
184
+    } else if ($type == 'auteur')
185
+        $titre = '&nbsp;';
186
+    else
187
+        $titre = _T('info_racine_site');
188 188
 
189
-	$titre = str_replace('&amp;', '&', entites_html(textebrut(typo($titre))));
190
-	$init = " disabled='disabled' type='text' value=\"" . $titre . "\"\nstyle='width:300px;'";
189
+    $titre = str_replace('&amp;', '&', entites_html(textebrut(typo($titre))));
190
+    $init = " disabled='disabled' type='text' value=\"" . $titre . "\"\nstyle='width:300px;'";
191 191
 
192
-	$url = generer_url_ecrire('selectionner',"id=$id_rubrique&type=$type&do=$do"
193
-	. (!$idem ? '' : "&exclus=$idem")
194
-	. ($restreint ? "" : "&racine=oui")
195
-	. (isset($GLOBALS['var_profile']) ? '&var_profile=1' : ''));
192
+    $url = generer_url_ecrire('selectionner',"id=$id_rubrique&type=$type&do=$do"
193
+    . (!$idem ? '' : "&exclus=$idem")
194
+    . ($restreint ? "" : "&racine=oui")
195
+    . (isset($GLOBALS['var_profile']) ? '&var_profile=1' : ''));
196 196
 
197 197
 
198
-	return construire_selecteur($url, '', 'selection_rubrique', 'id_parent', $init, $id_rubrique);
198
+    return construire_selecteur($url, '', 'selection_rubrique', 'id_parent', $init, $id_rubrique);
199 199
 }
200 200
 
201 201
 // construit un bloc comportant une icone clicable avec image animee a cote
@@ -206,26 +206,26 @@  discard block
 block discarded – undo
206 206
 
207 207
 // http://doc.spip.org/@construire_selecteur
208 208
 function construire_selecteur($url, $js, $idom, $name, $init='', $id=0){
209
-	$icone = (strpos($idom, 'auteur')!==false) ? 'auteur-24.png' : 'rechercher-20.png';
210
-	return
211
-	"<div class='rubrique_actuelle'><a href='#' onclick=\""
212
-	.  $js
213
-	. "return charger_node_url_si_vide('"
214
-	. $url
215
-	. "', this.parentNode.nextSibling, this.nextSibling,'',event)\" title='"._T('titre_image_selecteur')."'><img src='"
216
-	. chemin_image($icone)
217
-	. "'\nstyle='vertical-align: middle;' alt='"._T('titre_image_selecteur')."' /></a><img src='"
218
-	. chemin_image('searching.gif') 
219
-	. "' id='img_"
220
-	.  $idom
221
-	. "'\nstyle='visibility: hidden;' alt='*' />"
222
-	. "<input id='titreparent' name='titreparent'"
223
-	. $init
224
-	. " />" 
225
-	. "<input type='hidden' id='$name' name='$name' value='"
226
-	. $id
227
-	. "' /><div class='nettoyeur'></div></div><div id='"
228
-	. $idom
229
-	. "'\nstyle='display: none;'></div>";
209
+    $icone = (strpos($idom, 'auteur')!==false) ? 'auteur-24.png' : 'rechercher-20.png';
210
+    return
211
+    "<div class='rubrique_actuelle'><a href='#' onclick=\""
212
+    .  $js
213
+    . "return charger_node_url_si_vide('"
214
+    . $url
215
+    . "', this.parentNode.nextSibling, this.nextSibling,'',event)\" title='"._T('titre_image_selecteur')."'><img src='"
216
+    . chemin_image($icone)
217
+    . "'\nstyle='vertical-align: middle;' alt='"._T('titre_image_selecteur')."' /></a><img src='"
218
+    . chemin_image('searching.gif') 
219
+    . "' id='img_"
220
+    .  $idom
221
+    . "'\nstyle='visibility: hidden;' alt='*' />"
222
+    . "<input id='titreparent' name='titreparent'"
223
+    . $init
224
+    . " />" 
225
+    . "<input type='hidden' id='$name' name='$name' value='"
226
+    . $id
227
+    . "' /><div class='nettoyeur'></div></div><div id='"
228
+    . $idom
229
+    . "'\nstyle='display: none;'></div>";
230 230
 }
231 231
 ?>
Please login to merge, or discard this patch.
ecrire/public/assembler.php 1 patch
Indentation   +464 added lines, -464 removed lines patch added patch discarded remove patch
@@ -22,132 +22,132 @@  discard block
 block discarded – undo
22 22
 // http://doc.spip.org/@assembler
23 23
 function assembler($fond, $connect='') {
24 24
 
25
-	// flag_preserver est modifie ici, et utilise en globale
26
-	// use_cache sert a informer le bouton d'admin pr savoir s'il met un *
27
-	// contexte est utilise en globale dans le formulaire d'admin
28
-	global $flag_preserver, $use_cache, $contexte;
29
-
30
-	$contexte = calculer_contexte();
31
-	$page = array('contexte_implicite'=>calculer_contexte_implicite());
32
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(',\.[a-zA-Z0-9]*$,', '', preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));
33
-	// Cette fonction est utilisee deux fois
34
-	$cacher = charger_fonction('cacher', 'public', true);
35
-	// Les quatre derniers parametres sont modifies par la fonction:
36
-	// emplacement, validite, et, s'il est valide, contenu & age
37
-	if ($cacher)
38
-		$res = $cacher($GLOBALS['contexte'], $use_cache, $chemin_cache, $page, $lastmodified);
39
-	else
40
-		$use_cache = -1;
41
-	// Si un resultat est retourne, c'est un message d'impossibilite
42
-	if ($res) {return array('texte' => $res);}
43
-
44
-	if (!$chemin_cache || !$lastmodified) $lastmodified = time();
45
-
46
-	$headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
47
-	$calculer_page = true;
48
-
49
-	// Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
50
-	// une perennite valide a meme reponse qu'une requete HEAD (par defaut les
51
-	// pages sont dynamiques)
52
-	if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
53
-	AND (!defined('_VAR_MODE') OR !_VAR_MODE)
54
-	AND $chemin_cache
55
-	AND isset($page['entetes'])
56
-	AND isset($page['entetes']['Cache-Control'])
57
-	AND strstr($page['entetes']['Cache-Control'],'max-age=')
58
-	AND !strstr($_SERVER['SERVER_SOFTWARE'],'IIS/')
59
-	) {
60
-		$since = preg_replace('/;.*/', '',
61
-			$_SERVER['HTTP_IF_MODIFIED_SINCE']);
62
-		$since = str_replace('GMT', '', $since);
63
-		if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) {
64
-			$page['status'] = 304;
65
-			$headers_only = true;
66
-			$calculer_page = false;
67
-		}
68
-	}
69
-
70
-	// Si requete HEAD ou Last-modified compatible, ignorer le texte
71
-	// et pas de content-type (pour contrer le bouton admin de inc-public)
72
-	if (!$calculer_page) {
73
-		$page['texte'] = "";
74
-	} else {
75
-		// si la page est prise dans le cache
76
-		if (!$use_cache)  {
77
-			// Informer les boutons d'admin du contexte
78
-			// (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
79
-			$contexte = $page['contexte'];
80
-
81
-			// vider les globales url propres qui ne doivent plus etre utilisees en cas
82
-			// d'inversion url => objet
83
-			// plus necessaire si on utilise bien la fonction urls_decoder_url
84
-			#unset($_SERVER['REDIRECT_url_propre']);
85
-			#unset($_ENV['url_propre']);
86
-		}
87
-		else {
88
-			// Compat ascendante :
89
-			// 1. $contexte est global
90
-			// (a evacuer car urls_decoder_url gere ce probleme ?)
91
-			// et calculer la page
92
-			if (!test_espace_prive()) {
93
-				include_spip('inc/urls');
94
-				list($fond,$contexte,$url_redirect) = urls_decoder_url(nettoyer_uri(),$fond,$contexte,true);
95
-			}
96
-			// squelette par defaut
97
-			if (!strlen($fond))
98
-				$fond = 'sommaire';
99
-
100
-			// produire la page : peut mettre a jour $lastmodified
101
-			$produire_page = charger_fonction('produire_page','public');
102
-			$page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, NULL, $page, $lastmodified, $connect);
103
-			if ($page === '') {
104
-				$erreur = _T('info_erreur_squelette2',
105
-					array('fichier'=>spip_htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES));
106
-				erreur_squelette($erreur);
107
-				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
108
-				$page = array('texte' => '', 'erreur' => $erreur);
109
-			}
110
-		}
111
-
112
-		if ($page AND $chemin_cache) $page['cache'] = $chemin_cache;
113
-
114
-		auto_content_type($page);
115
-
116
-		$flag_preserver |=  headers_sent();
117
-
118
-		// Definir les entetes si ce n'est fait 
119
-		if (!$flag_preserver) {
120
-			if ($GLOBALS['flag_ob']) {
121
-				// Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
122
-				if (trim($page['texte']) === ''
123
-				AND _VAR_MODE != 'debug'
124
-				AND !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
125
-				) {
126
-					$contexte['fond_erreur'] = $fond;
127
-				  $page = message_page_indisponible($page, $contexte);
128
-				}
129
-				// pas de cache client en mode 'observation'
130
-				if (defined('_VAR_MODE') AND _VAR_MODE) {
131
-					$page['entetes']["Cache-Control"]= "no-cache,must-revalidate";
132
-					$page['entetes']["Pragma"] = "no-cache";
133
-				}
134
-			}
135
-		}
136
-	}
137
-
138
-	// Entete Last-Modified:
139
-	// eviter d'etre incoherent en envoyant un lastmodified identique
140
-	// a celui qu'on a refuse d'honorer plus haut (cf. #655)
141
-	if ($lastmodified
142
-	AND !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
143
-	AND !isset($page['entetes']["Last-Modified"]))
144
-		$page['entetes']["Last-Modified"]=gmdate("D, d M Y H:i:s", $lastmodified)." GMT";
145
-
146
-	// fermer la connexion apres les headers si requete HEAD
147
-	if ($headers_only)
148
-		$page['entetes']["Connection"] = "close";
149
-
150
-	return $page;
25
+    // flag_preserver est modifie ici, et utilise en globale
26
+    // use_cache sert a informer le bouton d'admin pr savoir s'il met un *
27
+    // contexte est utilise en globale dans le formulaire d'admin
28
+    global $flag_preserver, $use_cache, $contexte;
29
+
30
+    $contexte = calculer_contexte();
31
+    $page = array('contexte_implicite'=>calculer_contexte_implicite());
32
+    $page['contexte_implicite']['cache'] = $fond . preg_replace(',\.[a-zA-Z0-9]*$,', '', preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));
33
+    // Cette fonction est utilisee deux fois
34
+    $cacher = charger_fonction('cacher', 'public', true);
35
+    // Les quatre derniers parametres sont modifies par la fonction:
36
+    // emplacement, validite, et, s'il est valide, contenu & age
37
+    if ($cacher)
38
+        $res = $cacher($GLOBALS['contexte'], $use_cache, $chemin_cache, $page, $lastmodified);
39
+    else
40
+        $use_cache = -1;
41
+    // Si un resultat est retourne, c'est un message d'impossibilite
42
+    if ($res) {return array('texte' => $res);}
43
+
44
+    if (!$chemin_cache || !$lastmodified) $lastmodified = time();
45
+
46
+    $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
47
+    $calculer_page = true;
48
+
49
+    // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
50
+    // une perennite valide a meme reponse qu'une requete HEAD (par defaut les
51
+    // pages sont dynamiques)
52
+    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
53
+    AND (!defined('_VAR_MODE') OR !_VAR_MODE)
54
+    AND $chemin_cache
55
+    AND isset($page['entetes'])
56
+    AND isset($page['entetes']['Cache-Control'])
57
+    AND strstr($page['entetes']['Cache-Control'],'max-age=')
58
+    AND !strstr($_SERVER['SERVER_SOFTWARE'],'IIS/')
59
+    ) {
60
+        $since = preg_replace('/;.*/', '',
61
+            $_SERVER['HTTP_IF_MODIFIED_SINCE']);
62
+        $since = str_replace('GMT', '', $since);
63
+        if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) {
64
+            $page['status'] = 304;
65
+            $headers_only = true;
66
+            $calculer_page = false;
67
+        }
68
+    }
69
+
70
+    // Si requete HEAD ou Last-modified compatible, ignorer le texte
71
+    // et pas de content-type (pour contrer le bouton admin de inc-public)
72
+    if (!$calculer_page) {
73
+        $page['texte'] = "";
74
+    } else {
75
+        // si la page est prise dans le cache
76
+        if (!$use_cache)  {
77
+            // Informer les boutons d'admin du contexte
78
+            // (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
79
+            $contexte = $page['contexte'];
80
+
81
+            // vider les globales url propres qui ne doivent plus etre utilisees en cas
82
+            // d'inversion url => objet
83
+            // plus necessaire si on utilise bien la fonction urls_decoder_url
84
+            #unset($_SERVER['REDIRECT_url_propre']);
85
+            #unset($_ENV['url_propre']);
86
+        }
87
+        else {
88
+            // Compat ascendante :
89
+            // 1. $contexte est global
90
+            // (a evacuer car urls_decoder_url gere ce probleme ?)
91
+            // et calculer la page
92
+            if (!test_espace_prive()) {
93
+                include_spip('inc/urls');
94
+                list($fond,$contexte,$url_redirect) = urls_decoder_url(nettoyer_uri(),$fond,$contexte,true);
95
+            }
96
+            // squelette par defaut
97
+            if (!strlen($fond))
98
+                $fond = 'sommaire';
99
+
100
+            // produire la page : peut mettre a jour $lastmodified
101
+            $produire_page = charger_fonction('produire_page','public');
102
+            $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, NULL, $page, $lastmodified, $connect);
103
+            if ($page === '') {
104
+                $erreur = _T('info_erreur_squelette2',
105
+                    array('fichier'=>spip_htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES));
106
+                erreur_squelette($erreur);
107
+                // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
108
+                $page = array('texte' => '', 'erreur' => $erreur);
109
+            }
110
+        }
111
+
112
+        if ($page AND $chemin_cache) $page['cache'] = $chemin_cache;
113
+
114
+        auto_content_type($page);
115
+
116
+        $flag_preserver |=  headers_sent();
117
+
118
+        // Definir les entetes si ce n'est fait 
119
+        if (!$flag_preserver) {
120
+            if ($GLOBALS['flag_ob']) {
121
+                // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
122
+                if (trim($page['texte']) === ''
123
+                AND _VAR_MODE != 'debug'
124
+                AND !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
125
+                ) {
126
+                    $contexte['fond_erreur'] = $fond;
127
+                    $page = message_page_indisponible($page, $contexte);
128
+                }
129
+                // pas de cache client en mode 'observation'
130
+                if (defined('_VAR_MODE') AND _VAR_MODE) {
131
+                    $page['entetes']["Cache-Control"]= "no-cache,must-revalidate";
132
+                    $page['entetes']["Pragma"] = "no-cache";
133
+                }
134
+            }
135
+        }
136
+    }
137
+
138
+    // Entete Last-Modified:
139
+    // eviter d'etre incoherent en envoyant un lastmodified identique
140
+    // a celui qu'on a refuse d'honorer plus haut (cf. #655)
141
+    if ($lastmodified
142
+    AND !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
143
+    AND !isset($page['entetes']["Last-Modified"]))
144
+        $page['entetes']["Last-Modified"]=gmdate("D, d M Y H:i:s", $lastmodified)." GMT";
145
+
146
+    // fermer la connexion apres les headers si requete HEAD
147
+    if ($headers_only)
148
+        $page['entetes']["Connection"] = "close";
149
+
150
+    return $page;
151 151
 }
152 152
 
153 153
 //
@@ -160,17 +160,17 @@  discard block
 block discarded – undo
160 160
 // http://doc.spip.org/@calculer_contexte
161 161
 function calculer_contexte() {
162 162
 
163
-	$contexte = array();
164
-	foreach($_GET as $var => $val) {
165
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES,$var))
166
-			$contexte[$var] = $val;
167
-	}
168
-	foreach($_POST as $var => $val) {
169
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES,$var))
170
-			$contexte[$var] = $val;
171
-	}
172
-
173
-	return $contexte;
163
+    $contexte = array();
164
+    foreach($_GET as $var => $val) {
165
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES,$var))
166
+            $contexte[$var] = $val;
167
+    }
168
+    foreach($_POST as $var => $val) {
169
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES,$var))
170
+            $contexte[$var] = $val;
171
+    }
172
+
173
+    return $contexte;
174 174
 }
175 175
 
176 176
 /**
@@ -181,20 +181,20 @@  discard block
 block discarded – undo
181 181
  * @return array
182 182
  */
183 183
 function calculer_contexte_implicite(){
184
-	static $notes = null;
185
-	if (is_null($notes))
186
-		$notes = charger_fonction('notes','inc',true);
187
-	$contexte_implicite = array(
188
-		'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
189
-		'host' => $_SERVER['HTTP_HOST'],
190
-		'https' => (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : ''),
191
-		'espace' => test_espace_prive(),
192
-		'marqueur' => (isset($GLOBALS['marqueur']) ?  $GLOBALS['marqueur'] : ''),
193
-		'marqueur_skel' => (isset($GLOBALS['marqueur_skel']) ?  $GLOBALS['marqueur_skel'] : ''),
194
-		'notes' => $notes?$notes('','contexter_cache'):'',
195
-		'spip_version_code' => $GLOBALS['spip_version_code'],
196
-	);
197
-	return $contexte_implicite;
184
+    static $notes = null;
185
+    if (is_null($notes))
186
+        $notes = charger_fonction('notes','inc',true);
187
+    $contexte_implicite = array(
188
+        'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
189
+        'host' => $_SERVER['HTTP_HOST'],
190
+        'https' => (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : ''),
191
+        'espace' => test_espace_prive(),
192
+        'marqueur' => (isset($GLOBALS['marqueur']) ?  $GLOBALS['marqueur'] : ''),
193
+        'marqueur_skel' => (isset($GLOBALS['marqueur_skel']) ?  $GLOBALS['marqueur_skel'] : ''),
194
+        'notes' => $notes?$notes('','contexter_cache'):'',
195
+        'spip_version_code' => $GLOBALS['spip_version_code'],
196
+    );
197
+    return $contexte_implicite;
198 198
 }
199 199
 
200 200
 //
@@ -204,47 +204,47 @@  discard block
 block discarded – undo
204 204
 // http://doc.spip.org/@auto_content_type
205 205
 function auto_content_type($page)
206 206
 {
207
-	global $flag_preserver;
208
-	if (!isset($flag_preserver))
209
-	  {
210
-	    $flag_preserver = ($page && preg_match("/header\s*\(\s*.content\-type:/isx",$page['texte']) || (isset($page['entetes']['Content-Type'])));
211
-	  }
207
+    global $flag_preserver;
208
+    if (!isset($flag_preserver))
209
+        {
210
+        $flag_preserver = ($page && preg_match("/header\s*\(\s*.content\-type:/isx",$page['texte']) || (isset($page['entetes']['Content-Type'])));
211
+        }
212 212
 }
213 213
 
214 214
 // http://doc.spip.org/@inclure_page
215 215
 function inclure_page($fond, $contexte, $connect='') {
216
-	static $cacher, $produire_page;
217
-	global $lastmodified;
218
-
219
-	// enlever le fond de contexte inclus car sinon il prend la main
220
-	// dans les sous inclusions -> boucle infinie d'inclusion identique
221
-	// (cette precaution n'est probablement plus utile)
222
-	unset($contexte['fond']);
223
-	$page = array('contexte_implicite'=>calculer_contexte_implicite());
224
-	$page['contexte_implicite']['cache'] = $fond;
225
-	if (is_null($cacher))
226
-		$cacher = charger_fonction('cacher', 'public', true);
227
-	// Les quatre derniers parametres sont modifies par la fonction:
228
-	// emplacement, validite, et, s'il est valide, contenu & age
229
-	if ($cacher)
230
-		$res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
231
-	else
232
-		$use_cache = -1;
233
-	// $res = message d'erreur : on sort de la
234
-	if ($res) {return array('texte' => $res);}
235
-
236
-	// Si use_cache ne vaut pas 0, la page doit etre calculee
237
-	// produire la page : peut mettre a jour $lastinclude
238
-	// le contexte_cache envoye a cacher() a ete conserve et est passe a produire
239
-	if ($use_cache) {
240
-		if (is_null($produire_page))
241
-			$produire_page = charger_fonction('produire_page','public');
242
-		$page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
243
-	}
244
-	// dans tous les cas, mettre a jour $lastmodified
245
-	$lastmodified = max($lastmodified, $lastinclude);
246
-
247
-	return $page;
216
+    static $cacher, $produire_page;
217
+    global $lastmodified;
218
+
219
+    // enlever le fond de contexte inclus car sinon il prend la main
220
+    // dans les sous inclusions -> boucle infinie d'inclusion identique
221
+    // (cette precaution n'est probablement plus utile)
222
+    unset($contexte['fond']);
223
+    $page = array('contexte_implicite'=>calculer_contexte_implicite());
224
+    $page['contexte_implicite']['cache'] = $fond;
225
+    if (is_null($cacher))
226
+        $cacher = charger_fonction('cacher', 'public', true);
227
+    // Les quatre derniers parametres sont modifies par la fonction:
228
+    // emplacement, validite, et, s'il est valide, contenu & age
229
+    if ($cacher)
230
+        $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
231
+    else
232
+        $use_cache = -1;
233
+    // $res = message d'erreur : on sort de la
234
+    if ($res) {return array('texte' => $res);}
235
+
236
+    // Si use_cache ne vaut pas 0, la page doit etre calculee
237
+    // produire la page : peut mettre a jour $lastinclude
238
+    // le contexte_cache envoye a cacher() a ete conserve et est passe a produire
239
+    if ($use_cache) {
240
+        if (is_null($produire_page))
241
+            $produire_page = charger_fonction('produire_page','public');
242
+        $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
243
+    }
244
+    // dans tous les cas, mettre a jour $lastmodified
245
+    $lastmodified = max($lastmodified, $lastinclude);
246
+
247
+    return $page;
248 248
 }
249 249
 
250 250
 /**
@@ -262,25 +262,25 @@  discard block
 block discarded – undo
262 262
  * @return array
263 263
  */
264 264
 function public_produire_page_dist($fond, $contexte, $use_cache, $chemin_cache, $contexte_cache, &$page, &$lastinclude, $connect=''){
265
-	static $parametrer,$cacher;
266
-	if (!$parametrer)
267
-		$parametrer = charger_fonction('parametrer', 'public');
268
-	$page = $parametrer($fond, $contexte, $chemin_cache, $connect);
269
-	// et on l'enregistre sur le disque
270
-	if ($chemin_cache
271
-	AND $use_cache>-1
272
-	AND is_array($page)
273
-	AND count($page)
274
-	AND $page['entetes']['X-Spip-Cache'] > 0){
275
-		if (is_null($cacher))
276
-			$cacher = charger_fonction('cacher', 'public', true);
277
-		$lastinclude = time();
278
-		if ($cacher)
279
-			$cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
280
-		else
281
-			$use_cache = -1;
282
-	}
283
-	return $page;
265
+    static $parametrer,$cacher;
266
+    if (!$parametrer)
267
+        $parametrer = charger_fonction('parametrer', 'public');
268
+    $page = $parametrer($fond, $contexte, $chemin_cache, $connect);
269
+    // et on l'enregistre sur le disque
270
+    if ($chemin_cache
271
+    AND $use_cache>-1
272
+    AND is_array($page)
273
+    AND count($page)
274
+    AND $page['entetes']['X-Spip-Cache'] > 0){
275
+        if (is_null($cacher))
276
+            $cacher = charger_fonction('cacher', 'public', true);
277
+        $lastinclude = time();
278
+        if ($cacher)
279
+            $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
280
+        else
281
+            $use_cache = -1;
282
+    }
283
+    return $page;
284 284
 }
285 285
 
286 286
 
@@ -296,11 +296,11 @@  discard block
 block discarded – undo
296 296
 
297 297
 function inserer_balise_dynamique($contexte_exec, $contexte_compil)
298 298
 {
299
-	if (!is_array($contexte_exec))
300
-		echo $contexte_exec; // message d'erreur etc
301
-	else {
302
-		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
303
-	}
299
+    if (!is_array($contexte_exec))
300
+        echo $contexte_exec; // message d'erreur etc
301
+    else {
302
+        inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
303
+    }
304 304
 }
305 305
 
306 306
 // Attention, un appel explicite a cette fonction suppose certains include
@@ -309,204 +309,204 @@  discard block
 block discarded – undo
309 309
 // http://doc.spip.org/@inclure_balise_dynamique
310 310
 function inclure_balise_dynamique($texte, $echo=true, $contexte_compil=array())
311 311
 {
312
-	if (is_array($texte)) {
313
-
314
-		list($fond, $delainc, $contexte_inclus) = $texte;
315
-
316
-		// delais a l'ancienne, c'est pratiquement mort
317
-		$d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : NULL;
318
-		$GLOBALS['delais'] = $delainc;
319
-
320
-		$page = recuperer_fond($fond,$contexte_inclus,array('trim'=>false, 'raw' => true, 'compil' => $contexte_compil));
321
-
322
-		$texte = $page['texte'];
323
-
324
-		$GLOBALS['delais'] = $d;
325
-		// Faire remonter les entetes
326
-		if (is_array($page['entetes'])) {
327
-			// mais pas toutes
328
-			unset($page['entetes']['X-Spip-Cache']);
329
-			unset($page['entetes']['Content-Type']);
330
-			if (isset($GLOBALS['page']) AND is_array($GLOBALS['page'])) {
331
-				if (!is_array($GLOBALS['page']['entetes']))
332
-					$GLOBALS['page']['entetes'] = array();
333
-				$GLOBALS['page']['entetes'] = 
334
-					array_merge($GLOBALS['page']['entetes'],$page['entetes']);
335
-			}
336
-		}
337
-		// _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
338
-		if (isset($page['contexte']['_pipelines'])
339
-		  AND is_array($page['contexte']['_pipelines'])
340
-			AND count($page['contexte']['_pipelines'])) {
341
-			foreach($page['contexte']['_pipelines'] as $pipe=>$args){
342
-				$args['contexte'] = $page['contexte'];
343
-				unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
344
-				$texte = pipeline(
345
-					$pipe,
346
-					array(
347
-						'data'=>$texte,
348
-						'args'=>$args
349
-					),
350
-					false
351
-				);
352
-			}
353
-		}
354
-	}
355
-
356
-	if (defined('_VAR_MODE') AND _VAR_MODE == 'debug') {
357
-		// compatibilite : avant on donnait le numero de ligne ou rien.
358
-		$ligne =  intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
359
-		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
360
-	}
361
-	if ($echo)
362
-		echo $texte;
363
-	else
364
-		return $texte;
312
+    if (is_array($texte)) {
313
+
314
+        list($fond, $delainc, $contexte_inclus) = $texte;
315
+
316
+        // delais a l'ancienne, c'est pratiquement mort
317
+        $d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : NULL;
318
+        $GLOBALS['delais'] = $delainc;
319
+
320
+        $page = recuperer_fond($fond,$contexte_inclus,array('trim'=>false, 'raw' => true, 'compil' => $contexte_compil));
321
+
322
+        $texte = $page['texte'];
323
+
324
+        $GLOBALS['delais'] = $d;
325
+        // Faire remonter les entetes
326
+        if (is_array($page['entetes'])) {
327
+            // mais pas toutes
328
+            unset($page['entetes']['X-Spip-Cache']);
329
+            unset($page['entetes']['Content-Type']);
330
+            if (isset($GLOBALS['page']) AND is_array($GLOBALS['page'])) {
331
+                if (!is_array($GLOBALS['page']['entetes']))
332
+                    $GLOBALS['page']['entetes'] = array();
333
+                $GLOBALS['page']['entetes'] = 
334
+                    array_merge($GLOBALS['page']['entetes'],$page['entetes']);
335
+            }
336
+        }
337
+        // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
338
+        if (isset($page['contexte']['_pipelines'])
339
+          AND is_array($page['contexte']['_pipelines'])
340
+            AND count($page['contexte']['_pipelines'])) {
341
+            foreach($page['contexte']['_pipelines'] as $pipe=>$args){
342
+                $args['contexte'] = $page['contexte'];
343
+                unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
344
+                $texte = pipeline(
345
+                    $pipe,
346
+                    array(
347
+                        'data'=>$texte,
348
+                        'args'=>$args
349
+                    ),
350
+                    false
351
+                );
352
+            }
353
+        }
354
+    }
355
+
356
+    if (defined('_VAR_MODE') AND _VAR_MODE == 'debug') {
357
+        // compatibilite : avant on donnait le numero de ligne ou rien.
358
+        $ligne =  intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
359
+        $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
360
+    }
361
+    if ($echo)
362
+        echo $texte;
363
+    else
364
+        return $texte;
365 365
 
366 366
 }
367 367
 
368 368
 // http://doc.spip.org/@message_page_indisponible
369 369
 function message_page_indisponible ($page, $contexte) {
370
-	static $deja = false;
371
-	if ($deja) return "erreur";
372
-	$codes = array(
373
-		'404' => '404 Not Found',
374
-		'503' => '503 Service Unavailable',
375
-	);
376
-
377
-	$contexte['status'] = ($page !== false) ? '404' : '503';
378
-	$contexte['code'] = $codes[$contexte['status']];
379
-	$contexte['fond'] = '404'; // gere les 2 erreurs
380
-	if (!isset($contexte['lang']))
381
-		$contexte['lang'] = $GLOBALS['spip_lang'];
382
-
383
-	$deja = true;
384
-	// passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
385
-	// ex restriction d'acces => 401
386
-	$contexte = pipeline('page_indisponible',$contexte);
387
-
388
-	// produire la page d'erreur
389
-	$page = inclure_page($contexte['fond'], $contexte);
390
-	if (!$page)
391
-		$page = inclure_page('404', $contexte);
392
-	$page['status'] = $contexte['status'];
393
-
394
-	return $page;
370
+    static $deja = false;
371
+    if ($deja) return "erreur";
372
+    $codes = array(
373
+        '404' => '404 Not Found',
374
+        '503' => '503 Service Unavailable',
375
+    );
376
+
377
+    $contexte['status'] = ($page !== false) ? '404' : '503';
378
+    $contexte['code'] = $codes[$contexte['status']];
379
+    $contexte['fond'] = '404'; // gere les 2 erreurs
380
+    if (!isset($contexte['lang']))
381
+        $contexte['lang'] = $GLOBALS['spip_lang'];
382
+
383
+    $deja = true;
384
+    // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
385
+    // ex restriction d'acces => 401
386
+    $contexte = pipeline('page_indisponible',$contexte);
387
+
388
+    // produire la page d'erreur
389
+    $page = inclure_page($contexte['fond'], $contexte);
390
+    if (!$page)
391
+        $page = inclure_page('404', $contexte);
392
+    $page['status'] = $contexte['status'];
393
+
394
+    return $page;
395 395
 }
396 396
 
397 397
 // temporairement ici : a mettre dans le futur inc/modeles
398 398
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
399 399
 // http://doc.spip.org/@creer_contexte_de_modele
400 400
 function creer_contexte_de_modele($args) {
401
-	$contexte = array();
402
-	foreach ($args as $var=>$val) {
403
-		if (is_int($var)){ // argument pas formate
404
-			if (in_array($val, array('left', 'right', 'center'))) {
405
-				$var = 'align';
406
-				$contexte[$var] = $val;
407
-			} else {
408
-				$args = explode('=', $val);
409
-				if (count($args)>=2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
410
-					$contexte[trim($args[0])] = substr($val,strlen($args[0])+1);
411
-				else // notation abregee
412
-					$contexte[trim($val)] = trim($val);
413
-			}
414
-		}
415
-		else
416
-			$contexte[$var] = $val;
417
-	}
418
-
419
-	return $contexte;
401
+    $contexte = array();
402
+    foreach ($args as $var=>$val) {
403
+        if (is_int($var)){ // argument pas formate
404
+            if (in_array($val, array('left', 'right', 'center'))) {
405
+                $var = 'align';
406
+                $contexte[$var] = $val;
407
+            } else {
408
+                $args = explode('=', $val);
409
+                if (count($args)>=2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
410
+                    $contexte[trim($args[0])] = substr($val,strlen($args[0])+1);
411
+                else // notation abregee
412
+                    $contexte[trim($val)] = trim($val);
413
+            }
414
+        }
415
+        else
416
+            $contexte[$var] = $val;
417
+    }
418
+
419
+    return $contexte;
420 420
 }
421 421
 
422 422
 // Calcule le modele et retourne la mini-page ainsi calculee
423 423
 // http://doc.spip.org/@inclure_modele
424 424
 function inclure_modele($type, $id, $params, $lien, $connect='', $env=array()) {
425 425
 
426
-	static $compteur;
427
-	if (++$compteur>10) return ''; # ne pas boucler indefiniment
428
-
429
-	$type = strtolower($type);
430
-
431
-	$fond = $class = '';
432
-
433
-	$params = array_filter(explode('|', $params));
434
-	if ($params) {
435
-		list(,$soustype) = each($params);
436
-		$soustype = strtolower(trim($soustype));
437
-		if (in_array($soustype,
438
-		array('left', 'right', 'center', 'ajax'))) {
439
-			list(,$soustype) = each($params);
440
-			$soustype = strtolower($soustype);
441
-		}
442
-
443
-		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
444
-			if (!trouve_modele($fond = ($type.'_'.$soustype))) {
445
-				$fond = '';
446
-				$class = $soustype;
447
-			}
448
-			// enlever le sous type des params
449
-			$params = array_diff($params,array($soustype));
450
-		}
451
-	}
452
-
453
-	// Si ca marche pas en precisant le sous-type, prendre le type
454
-	if (!$fond AND !trouve_modele($fond = $type)){
455
-		spip_log("Modele $type introuvable",_LOG_INFO_IMPORTANTE);
456
-		return false;
457
-	}
458
-	$fond = 'modeles/'.$fond;
459
-	// Creer le contexte
460
-	$contexte = $env;
461
-	$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
462
-
463
-	// Le numero du modele est mis dans l'environnement
464
-	// d'une part sous l'identifiant "id"
465
-	// et d'autre part sous l'identifiant de la cle primaire
466
-	// par la fonction id_table_objet,
467
-	// (<article1> =>> article =>> id_article =>> id_article=1)
468
-	$_id = id_table_objet($type);
469
-	$contexte['id'] = $contexte[$_id] = $id;
470
-
471
-	if (isset($class))
472
-		$contexte['class'] = $class;
473
-
474
-	// Si un lien a ete passe en parametre, ex: [<modele1>->url]
475
-	if ($lien) {
476
-		# un eventuel guillemet (") sera reechappe par #ENV
477
-		$contexte['lien'] = str_replace("&quot;",'"', $lien['href']);
478
-		$contexte['lien_class'] = $lien['class'];
479
-		$contexte['lien_mime'] = $lien['mime'];
480
-		$contexte['lien_title'] = $lien['title'];
481
-		$contexte['lien_hreflang'] = $lien['hreflang'];
482
-	}
483
-
484
-	// Traiter les parametres
485
-	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
486
-	$arg_list = creer_contexte_de_modele($params);
487
-	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
488
-	$contexte = array_merge($contexte,$arg_list);
489
-
490
-
491
-	// Appliquer le modele avec le contexte
492
-	$retour = recuperer_fond($fond, $contexte, array(), $connect);
493
-
494
-
495
-	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
496
-	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
497
-	// sinon, s'il y a un lien, on l'ajoute classiquement
498
-	if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')).' ',
499
-	'spip_lien_ok')) {
500
-		$retour = inserer_attribut($retour, 'class',
501
-			trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
502
-	} else if ($lien)
503
-		$retour = "<a href='".$lien['href']."' class='".$lien['class']."'>".$retour."</a>";
504
-
505
-	$compteur--;
506
-
507
-	return  (isset($arg_list['ajax'])AND $arg_list['ajax']=='ajax')
508
-	? encoder_contexte_ajax($contexte,'',$retour)
509
-	: $retour; 
426
+    static $compteur;
427
+    if (++$compteur>10) return ''; # ne pas boucler indefiniment
428
+
429
+    $type = strtolower($type);
430
+
431
+    $fond = $class = '';
432
+
433
+    $params = array_filter(explode('|', $params));
434
+    if ($params) {
435
+        list(,$soustype) = each($params);
436
+        $soustype = strtolower(trim($soustype));
437
+        if (in_array($soustype,
438
+        array('left', 'right', 'center', 'ajax'))) {
439
+            list(,$soustype) = each($params);
440
+            $soustype = strtolower($soustype);
441
+        }
442
+
443
+        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
444
+            if (!trouve_modele($fond = ($type.'_'.$soustype))) {
445
+                $fond = '';
446
+                $class = $soustype;
447
+            }
448
+            // enlever le sous type des params
449
+            $params = array_diff($params,array($soustype));
450
+        }
451
+    }
452
+
453
+    // Si ca marche pas en precisant le sous-type, prendre le type
454
+    if (!$fond AND !trouve_modele($fond = $type)){
455
+        spip_log("Modele $type introuvable",_LOG_INFO_IMPORTANTE);
456
+        return false;
457
+    }
458
+    $fond = 'modeles/'.$fond;
459
+    // Creer le contexte
460
+    $contexte = $env;
461
+    $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
462
+
463
+    // Le numero du modele est mis dans l'environnement
464
+    // d'une part sous l'identifiant "id"
465
+    // et d'autre part sous l'identifiant de la cle primaire
466
+    // par la fonction id_table_objet,
467
+    // (<article1> =>> article =>> id_article =>> id_article=1)
468
+    $_id = id_table_objet($type);
469
+    $contexte['id'] = $contexte[$_id] = $id;
470
+
471
+    if (isset($class))
472
+        $contexte['class'] = $class;
473
+
474
+    // Si un lien a ete passe en parametre, ex: [<modele1>->url]
475
+    if ($lien) {
476
+        # un eventuel guillemet (") sera reechappe par #ENV
477
+        $contexte['lien'] = str_replace("&quot;",'"', $lien['href']);
478
+        $contexte['lien_class'] = $lien['class'];
479
+        $contexte['lien_mime'] = $lien['mime'];
480
+        $contexte['lien_title'] = $lien['title'];
481
+        $contexte['lien_hreflang'] = $lien['hreflang'];
482
+    }
483
+
484
+    // Traiter les parametres
485
+    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
486
+    $arg_list = creer_contexte_de_modele($params);
487
+    $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
488
+    $contexte = array_merge($contexte,$arg_list);
489
+
490
+
491
+    // Appliquer le modele avec le contexte
492
+    $retour = recuperer_fond($fond, $contexte, array(), $connect);
493
+
494
+
495
+    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
496
+    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
497
+    // sinon, s'il y a un lien, on l'ajoute classiquement
498
+    if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')).' ',
499
+    'spip_lien_ok')) {
500
+        $retour = inserer_attribut($retour, 'class',
501
+            trim(str_replace(' spip_lien_ok ', ' ', " $classes ")));
502
+    } else if ($lien)
503
+        $retour = "<a href='".$lien['href']."' class='".$lien['class']."'>".$retour."</a>";
504
+
505
+    $compteur--;
506
+
507
+    return  (isset($arg_list['ajax'])AND $arg_list['ajax']=='ajax')
508
+    ? encoder_contexte_ajax($contexte,'',$retour)
509
+    : $retour; 
510 510
 }
511 511
 
512 512
 // Un inclure_page qui marche aussi pour l'espace prive
@@ -516,81 +516,81 @@  discard block
 block discarded – undo
516 516
 // http://doc.spip.org/@evaluer_fond
517 517
 function evaluer_fond ($fond, $contexte=array(), $connect=null) {
518 518
 
519
-	$page = inclure_page($fond, $contexte, $connect);
519
+    $page = inclure_page($fond, $contexte, $connect);
520 520
 
521
-	if (!$page) return $page;
522
-	// eval $page et affecte $res
523
-	include _ROOT_RESTREINT."public/evaluer_page.php";
521
+    if (!$page) return $page;
522
+    // eval $page et affecte $res
523
+    include _ROOT_RESTREINT."public/evaluer_page.php";
524 524
 	
525
-	// Lever un drapeau (global) si le fond utilise #SESSION
526
-	// a destination de public/parametrer
527
-	// pour remonter vers les inclusions appelantes
528
-	// il faut bien lever ce drapeau apres avoir evalue le fond
529
-	// pour ne pas faire descendre le flag vers les inclusions appelees
530
-	if (isset($page['invalideurs'])
531
-	AND isset($page['invalideurs']['session']))
532
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
533
-
534
-	return $page;
525
+    // Lever un drapeau (global) si le fond utilise #SESSION
526
+    // a destination de public/parametrer
527
+    // pour remonter vers les inclusions appelantes
528
+    // il faut bien lever ce drapeau apres avoir evalue le fond
529
+    // pour ne pas faire descendre le flag vers les inclusions appelees
530
+    if (isset($page['invalideurs'])
531
+    AND isset($page['invalideurs']['session']))
532
+        $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
533
+
534
+    return $page;
535 535
 }
536 536
 
537 537
 
538 538
 // http://doc.spip.org/@page_base_href
539 539
 function page_base_href(&$texte){
540
-	static $set_html_base = null;
541
-	if (is_null($set_html_base)){
542
-		if (!defined('_SET_HTML_BASE'))
543
-			// si la profondeur est superieure a 1
544
-			// est que ce n'est pas une url page ni une url action
545
-			// activer par defaut
546
-			$set_html_base = ((
547
-				$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT?1:2)
548
-				AND _request(_SPIP_PAGE) !== 'login'
549
-				AND !_request('action'))?true:false);
550
-		else
551
-			$set_html_base = _SET_HTML_BASE;
552
-	}
553
-
554
-	if ($set_html_base
555
-	  AND isset($GLOBALS['html']) AND $GLOBALS['html']
556
-	  AND $GLOBALS['profondeur_url']>0
557
-	  AND ($poshead = strpos($texte,'</head>'))!==FALSE){
558
-		$head = substr($texte,0,$poshead);
559
-		$insert = false;
560
-		if (strpos($head, '<base')===false) 
561
-			$insert = true;
562
-		else {
563
-			// si aucun <base ...> n'a de href c'est bon quand meme !
564
-			$insert = true;
565
-			include_spip('inc/filtres');
566
-			$bases = extraire_balises($head,'base');
567
-			foreach ($bases as $base)
568
-				if (extraire_attribut($base,'href'))
569
-					$insert = false;
570
-		}
571
-		if ($insert) {
572
-			include_spip('inc/filtres_mini');
573
-			// ajouter un base qui reglera tous les liens relatifs
574
-			$base = url_absolue('./');
575
-			$bbase = "\n<base href=\"$base\" />";
576
-			if (($pos = strpos($head, '<head>')) !== false)
577
-				$head = substr_replace($head, $bbase, $pos+6, 0);
578
-			elseif(preg_match(",<head[^>]*>,i",$head,$r)){
579
-				$head = str_replace($r[0], $r[0].$bbase, $head);
580
-			}
581
-			$texte = $head . substr($texte,$poshead);
582
-			// gerer les ancres
583
-			$base = $_SERVER['REQUEST_URI'];
584
-			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
585
-			if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
586
-				$base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
587
-			}
588
-			if (strpos($texte,"href='#")!==false)
589
-				$texte = str_replace("href='#","href='$base#",$texte);
590
-			if (strpos($texte, "href=\"#")!==false)
591
-				$texte = str_replace("href=\"#","href=\"$base#",$texte);
592
-		}
593
-	}
540
+    static $set_html_base = null;
541
+    if (is_null($set_html_base)){
542
+        if (!defined('_SET_HTML_BASE'))
543
+            // si la profondeur est superieure a 1
544
+            // est que ce n'est pas une url page ni une url action
545
+            // activer par defaut
546
+            $set_html_base = ((
547
+                $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT?1:2)
548
+                AND _request(_SPIP_PAGE) !== 'login'
549
+                AND !_request('action'))?true:false);
550
+        else
551
+            $set_html_base = _SET_HTML_BASE;
552
+    }
553
+
554
+    if ($set_html_base
555
+      AND isset($GLOBALS['html']) AND $GLOBALS['html']
556
+      AND $GLOBALS['profondeur_url']>0
557
+      AND ($poshead = strpos($texte,'</head>'))!==FALSE){
558
+        $head = substr($texte,0,$poshead);
559
+        $insert = false;
560
+        if (strpos($head, '<base')===false) 
561
+            $insert = true;
562
+        else {
563
+            // si aucun <base ...> n'a de href c'est bon quand meme !
564
+            $insert = true;
565
+            include_spip('inc/filtres');
566
+            $bases = extraire_balises($head,'base');
567
+            foreach ($bases as $base)
568
+                if (extraire_attribut($base,'href'))
569
+                    $insert = false;
570
+        }
571
+        if ($insert) {
572
+            include_spip('inc/filtres_mini');
573
+            // ajouter un base qui reglera tous les liens relatifs
574
+            $base = url_absolue('./');
575
+            $bbase = "\n<base href=\"$base\" />";
576
+            if (($pos = strpos($head, '<head>')) !== false)
577
+                $head = substr_replace($head, $bbase, $pos+6, 0);
578
+            elseif(preg_match(",<head[^>]*>,i",$head,$r)){
579
+                $head = str_replace($r[0], $r[0].$bbase, $head);
580
+            }
581
+            $texte = $head . substr($texte,$poshead);
582
+            // gerer les ancres
583
+            $base = $_SERVER['REQUEST_URI'];
584
+            // pas de guillemets ni < dans l'URL qu'on insere dans le HTML
585
+            if (strpos($base,"'") or strpos($base,'"') or strpos($base,'<')) {
586
+                $base = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $base);
587
+            }
588
+            if (strpos($texte,"href='#")!==false)
589
+                $texte = str_replace("href='#","href='$base#",$texte);
590
+            if (strpos($texte, "href=\"#")!==false)
591
+                $texte = str_replace("href=\"#","href=\"$base#",$texte);
592
+        }
593
+    }
594 594
 }
595 595
 
596 596
 
@@ -598,9 +598,9 @@  discard block
 block discarded – undo
598 598
 // et demarrent par X-Spip-...
599 599
 // http://doc.spip.org/@envoyer_entetes
600 600
 function envoyer_entetes($entetes) {
601
-	foreach ($entetes as $k => $v)
602
-	#	if (strncmp($k, 'X-Spip-', 7))
603
-			@header(strlen($v)?"$k: $v":$k); 
601
+    foreach ($entetes as $k => $v)
602
+    #	if (strncmp($k, 'X-Spip-', 7))
603
+            @header(strlen($v)?"$k: $v":$k); 
604 604
 }
605 605
 
606 606
 ?>
Please login to merge, or discard this patch.