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