Completed
Push — master ( fbaedc...039a69 )
by cam
04:49
created
ecrire/public/parametrer.php 2 patches
Indentation   +241 added lines, -241 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_fichiers_fonctions();
@@ -31,177 +31,177 @@  discard block
 block discarded – undo
31 31
 
32 32
 // https://code.spip.net/@public_parametrer_dist
33 33
 function public_parametrer_dist($fond, $contexte = '', $cache = '', $connect = '') {
34
-	static $composer, $styliser, $notes = null;
35
-	$page = tester_redirection($fond, $contexte, $connect);
36
-	if ($page) {
37
-		return $page;
38
-	}
39
-
40
-	if (isset($contexte['lang'])) {
41
-		$lang = $contexte['lang'];
42
-	} elseif (!isset($lang)) {
43
-		$lang = $GLOBALS['meta']['langue_site'];
44
-	}
45
-
46
-	$select = ((!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang']) and $lang <> $GLOBALS['spip_lang']);
47
-	if ($select) {
48
-		$select = lang_select($lang);
49
-	}
50
-
51
-	$debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
52
-
53
-	if (!$styliser) {
54
-		$styliser = charger_fonction('styliser', 'public');
55
-	}
56
-	list($skel, $mime_type, $gram, $sourcefile) =
57
-		$styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
58
-
59
-	if ($skel) {
60
-
61
-		// sauver le nom de l'eventuel squelette en cours d'execution
62
-		// (recursion possible a cause des modeles)
63
-		if ($debug) {
64
-			$courant = @$GLOBALS['debug_objets']['courant'];
65
-			$GLOBALS['debug_objets']['contexte'][$sourcefile] = $contexte;
66
-		}
67
-
68
-		// charger le squelette en specifiant les langages cibles et source
69
-		// au cas il faudrait le compiler (source posterieure au resultat)
70
-
71
-		if (!$composer) {
72
-			$composer = charger_fonction('composer', 'public');
73
-		}
74
-		$fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect);
75
-	} else {
76
-		$fonc = '';
77
-	}
78
-
79
-	if (!$fonc) { // squelette inconnu (==='') ou faux (===false)
80
-		$page = $fonc;
81
-	} else {
82
-		// Preparer l'appel de la fonction principale du squelette 
83
-
84
-		spip_timer($a = 'calcul page ' . rand(0, 1000));
85
-
86
-		// On cree un marqueur de notes unique lie a cette composition
87
-		// et on enregistre l'etat courant des globales de notes...
88
-		if (is_null($notes)) {
89
-			$notes = charger_fonction('notes', 'inc', true);
90
-		}
91
-		if ($notes) {
92
-			$notes('', 'empiler');
93
-		}
94
-
95
-		// Rajouter d'office ces deux parametres
96
-		// (mais vaudrait mieux que le compilateur sache le simuler
97
-		// car ca interdit l'usage de criteres conditionnels dessus).
98
-		if (!isset($contexte['date'])) {
99
-			$contexte['date'] = date("Y-m-d H:i:s");
100
-			$contexte['date_default'] = true;
101
-		} else {
102
-			$contexte['date'] = normaliser_date($contexte['date'], true);
103
-		}
104
-
105
-		if (!isset($contexte['date_redac'])) {
106
-			$contexte['date_redac'] = date("Y-m-d H:i:s");
107
-			$contexte['date_redac_default'] = true;
108
-		} else {
109
-			$contexte['date_redac'] = normaliser_date($contexte['date_redac'], true);
110
-		}
111
-
112
-		// Passer le nom du cache pour produire sa destruction automatique
113
-		try {
114
-			$page = $fonc(array('cache' => $cache), array($contexte));
115
-		} catch (Throwable $e) {
116
-			$msg = _T('zbug_erreur_execution_page') . " $sourcefile";
117
-			$full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
118
-			$full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
119
-			$corps = "<pre>$msg</pre>";
120
-			$page = analyse_resultat_skel($fond, array('cache' => $cache), $corps, $sourcefile);
121
-			erreur_squelette($full_msg);
122
-			unset($msg, $full_msg, $corps);
123
-		}
124
-
125
-		// Restituer les globales de notes telles qu'elles etaient avant l'appel
126
-		// Si l'inclus n'a pas affiche ses notes, tant pis (elles *doivent*
127
-		// etre dans son resultat, autrement elles ne seraient pas prises en
128
-		// compte a chaque calcul d'un texte contenant un modele, mais seulement
129
-		// quand le modele serait calcule, et on aurait des resultats incoherents)
130
-		if ($notes) {
131
-			$notes('', 'depiler');
132
-		}
133
-
134
-		// reinjecter en dynamique la pile des notes
135
-		// si il y a des inclure dynamiques
136
-		// si la pile n'est pas vide
137
-		// la generalisation de cette injection permettrait de corriger le point juste au dessus
138
-		// en faisant remonter les notes a l'incluant (A tester et valider avant application)
139
-		if ($notes) {
140
-			$page['notes'] = $notes('', 'sauver_etat');
141
-		}
142
-
143
-		// spip_log: un joli contexte
144
-		$infos = presenter_contexte(array_filter($contexte));
145
-
146
-		$profile = spip_timer($a);
147
-		spip_log("calcul ($profile) [$skel] $infos"
148
-			. ' (' . strlen($page['texte']) . ' octets)');
149
-
150
-		if (defined('_CALCUL_PROFILER') AND intval($profile)>_CALCUL_PROFILER){
151
-			spip_log("calcul ($profile) [$skel] $infos"
152
-				.' ('.strlen($page['texte']).' octets) | '.$_SERVER['REQUEST_URI'],"profiler"._LOG_AVERTISSEMENT);
153
-		}
154
-
155
-		if ($debug) {
156
-			// si c'est ce que demande le debusqueur, lui passer la main
157
-			$t = strlen($page['texte']) ? $page['texte'] : " ";
158
-			$GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
159
-			$GLOBALS['debug_objets']['courant'] = $courant;
160
-			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
161
-			if ($GLOBALS['debug_objets']['sourcefile']
162
-				and (_request('var_mode_objet') == $fonc)
163
-				and (_request('var_mode_affiche') == 'resultat')
164
-			) {
165
-				erreur_squelette();
166
-			}
167
-		}
168
-		// Si #CACHE{} n'etait pas la, le mettre a $delais
169
-		if (!isset($page['entetes']['X-Spip-Cache'])) {
170
-			// Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
171
-			// si aucun #CACHE{} spécifié
172
-			// le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
173
-			// entre public et prive
174
-			if (test_espace_prive() or strncmp($fond, 'modeles/', 8) == 0) {
175
-				$page['entetes']['X-Spip-Cache'] = 0;
176
-			} else {
177
-				$page['entetes']['X-Spip-Cache'] = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : 36000;
178
-			}
179
-		}
180
-
181
-		$page['contexte'] = $contexte;
182
-
183
-		// faire remonter le fichier source
184
-		static $js_inclus = false;
185
-		if (defined('_VAR_INCLURE') and _VAR_INCLURE) {
186
-			$page['sourcefile'] = $sourcefile;
187
-			$page['texte'] =
188
-				"<div class='inclure_blocs'><h6>" . $page['sourcefile'] . "</h6>" . $page['texte'] . "</div>"
189
-				. ($js_inclus ? "" : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
190
-			$js_inclus = true;
191
-		}
192
-
193
-		// Si un modele contenait #SESSION, on note l'info dans $page
194
-		if (isset($GLOBALS['cache_utilise_session'])) {
195
-			$page['invalideurs']['session'] = $GLOBALS['cache_utilise_session'];
196
-			unset($GLOBALS['cache_utilise_session']);
197
-		}
198
-	}
199
-
200
-	if ($select) {
201
-		lang_select();
202
-	}
203
-
204
-	return $page;
34
+    static $composer, $styliser, $notes = null;
35
+    $page = tester_redirection($fond, $contexte, $connect);
36
+    if ($page) {
37
+        return $page;
38
+    }
39
+
40
+    if (isset($contexte['lang'])) {
41
+        $lang = $contexte['lang'];
42
+    } elseif (!isset($lang)) {
43
+        $lang = $GLOBALS['meta']['langue_site'];
44
+    }
45
+
46
+    $select = ((!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang']) and $lang <> $GLOBALS['spip_lang']);
47
+    if ($select) {
48
+        $select = lang_select($lang);
49
+    }
50
+
51
+    $debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
52
+
53
+    if (!$styliser) {
54
+        $styliser = charger_fonction('styliser', 'public');
55
+    }
56
+    list($skel, $mime_type, $gram, $sourcefile) =
57
+        $styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
58
+
59
+    if ($skel) {
60
+
61
+        // sauver le nom de l'eventuel squelette en cours d'execution
62
+        // (recursion possible a cause des modeles)
63
+        if ($debug) {
64
+            $courant = @$GLOBALS['debug_objets']['courant'];
65
+            $GLOBALS['debug_objets']['contexte'][$sourcefile] = $contexte;
66
+        }
67
+
68
+        // charger le squelette en specifiant les langages cibles et source
69
+        // au cas il faudrait le compiler (source posterieure au resultat)
70
+
71
+        if (!$composer) {
72
+            $composer = charger_fonction('composer', 'public');
73
+        }
74
+        $fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect);
75
+    } else {
76
+        $fonc = '';
77
+    }
78
+
79
+    if (!$fonc) { // squelette inconnu (==='') ou faux (===false)
80
+        $page = $fonc;
81
+    } else {
82
+        // Preparer l'appel de la fonction principale du squelette 
83
+
84
+        spip_timer($a = 'calcul page ' . rand(0, 1000));
85
+
86
+        // On cree un marqueur de notes unique lie a cette composition
87
+        // et on enregistre l'etat courant des globales de notes...
88
+        if (is_null($notes)) {
89
+            $notes = charger_fonction('notes', 'inc', true);
90
+        }
91
+        if ($notes) {
92
+            $notes('', 'empiler');
93
+        }
94
+
95
+        // Rajouter d'office ces deux parametres
96
+        // (mais vaudrait mieux que le compilateur sache le simuler
97
+        // car ca interdit l'usage de criteres conditionnels dessus).
98
+        if (!isset($contexte['date'])) {
99
+            $contexte['date'] = date("Y-m-d H:i:s");
100
+            $contexte['date_default'] = true;
101
+        } else {
102
+            $contexte['date'] = normaliser_date($contexte['date'], true);
103
+        }
104
+
105
+        if (!isset($contexte['date_redac'])) {
106
+            $contexte['date_redac'] = date("Y-m-d H:i:s");
107
+            $contexte['date_redac_default'] = true;
108
+        } else {
109
+            $contexte['date_redac'] = normaliser_date($contexte['date_redac'], true);
110
+        }
111
+
112
+        // Passer le nom du cache pour produire sa destruction automatique
113
+        try {
114
+            $page = $fonc(array('cache' => $cache), array($contexte));
115
+        } catch (Throwable $e) {
116
+            $msg = _T('zbug_erreur_execution_page') . " $sourcefile";
117
+            $full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
118
+            $full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
119
+            $corps = "<pre>$msg</pre>";
120
+            $page = analyse_resultat_skel($fond, array('cache' => $cache), $corps, $sourcefile);
121
+            erreur_squelette($full_msg);
122
+            unset($msg, $full_msg, $corps);
123
+        }
124
+
125
+        // Restituer les globales de notes telles qu'elles etaient avant l'appel
126
+        // Si l'inclus n'a pas affiche ses notes, tant pis (elles *doivent*
127
+        // etre dans son resultat, autrement elles ne seraient pas prises en
128
+        // compte a chaque calcul d'un texte contenant un modele, mais seulement
129
+        // quand le modele serait calcule, et on aurait des resultats incoherents)
130
+        if ($notes) {
131
+            $notes('', 'depiler');
132
+        }
133
+
134
+        // reinjecter en dynamique la pile des notes
135
+        // si il y a des inclure dynamiques
136
+        // si la pile n'est pas vide
137
+        // la generalisation de cette injection permettrait de corriger le point juste au dessus
138
+        // en faisant remonter les notes a l'incluant (A tester et valider avant application)
139
+        if ($notes) {
140
+            $page['notes'] = $notes('', 'sauver_etat');
141
+        }
142
+
143
+        // spip_log: un joli contexte
144
+        $infos = presenter_contexte(array_filter($contexte));
145
+
146
+        $profile = spip_timer($a);
147
+        spip_log("calcul ($profile) [$skel] $infos"
148
+            . ' (' . strlen($page['texte']) . ' octets)');
149
+
150
+        if (defined('_CALCUL_PROFILER') AND intval($profile)>_CALCUL_PROFILER){
151
+            spip_log("calcul ($profile) [$skel] $infos"
152
+                .' ('.strlen($page['texte']).' octets) | '.$_SERVER['REQUEST_URI'],"profiler"._LOG_AVERTISSEMENT);
153
+        }
154
+
155
+        if ($debug) {
156
+            // si c'est ce que demande le debusqueur, lui passer la main
157
+            $t = strlen($page['texte']) ? $page['texte'] : " ";
158
+            $GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
159
+            $GLOBALS['debug_objets']['courant'] = $courant;
160
+            $GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
161
+            if ($GLOBALS['debug_objets']['sourcefile']
162
+                and (_request('var_mode_objet') == $fonc)
163
+                and (_request('var_mode_affiche') == 'resultat')
164
+            ) {
165
+                erreur_squelette();
166
+            }
167
+        }
168
+        // Si #CACHE{} n'etait pas la, le mettre a $delais
169
+        if (!isset($page['entetes']['X-Spip-Cache'])) {
170
+            // Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
171
+            // si aucun #CACHE{} spécifié
172
+            // le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
173
+            // entre public et prive
174
+            if (test_espace_prive() or strncmp($fond, 'modeles/', 8) == 0) {
175
+                $page['entetes']['X-Spip-Cache'] = 0;
176
+            } else {
177
+                $page['entetes']['X-Spip-Cache'] = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : 36000;
178
+            }
179
+        }
180
+
181
+        $page['contexte'] = $contexte;
182
+
183
+        // faire remonter le fichier source
184
+        static $js_inclus = false;
185
+        if (defined('_VAR_INCLURE') and _VAR_INCLURE) {
186
+            $page['sourcefile'] = $sourcefile;
187
+            $page['texte'] =
188
+                "<div class='inclure_blocs'><h6>" . $page['sourcefile'] . "</h6>" . $page['texte'] . "</div>"
189
+                . ($js_inclus ? "" : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
190
+            $js_inclus = true;
191
+        }
192
+
193
+        // Si un modele contenait #SESSION, on note l'info dans $page
194
+        if (isset($GLOBALS['cache_utilise_session'])) {
195
+            $page['invalideurs']['session'] = $GLOBALS['cache_utilise_session'];
196
+            unset($GLOBALS['cache_utilise_session']);
197
+        }
198
+    }
199
+
200
+    if ($select) {
201
+        lang_select();
202
+    }
203
+
204
+    return $page;
205 205
 }
206 206
 
207 207
 /** 
@@ -210,33 +210,33 @@  discard block
 block discarded – undo
210 210
  * @return string
211 211
 */
212 212
 function presenter_contexte($contexte, $profondeur_max = 1, $max_lines = 0) {
213
-	$infos = array();
214
-	$line = 0;
215
-	foreach ($contexte as $var => $val) {
216
-		$line++;
217
-		if ($max_lines and $max_lines < $line) {
218
-			$infos[] = '…';
219
-			break;
220
-		}
221
-		if (is_array($val)) {
222
-			if ($profondeur_max > 0) {
223
-				$val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
224
-			} else {
225
-				$val = 'array:' . count($val);
226
-			}
227
-		} elseif (is_object($val)) {
228
-			$val = get_class($val);
229
-		} elseif (strlen("$val") > 30) {
230
-			$val = substr("$val", 0, 29) . '…';
231
-			if (strstr($val, ' ')) {
232
-				$val = "'$val'";
233
-			}
234
-		} elseif (strstr($val, ' ')) {
235
-			$val = "'$val'";
236
-		}
237
-		$infos[] = $var . '=' . $val;
238
-	}
239
-	return join(', ', $infos);
213
+    $infos = array();
214
+    $line = 0;
215
+    foreach ($contexte as $var => $val) {
216
+        $line++;
217
+        if ($max_lines and $max_lines < $line) {
218
+            $infos[] = '…';
219
+            break;
220
+        }
221
+        if (is_array($val)) {
222
+            if ($profondeur_max > 0) {
223
+                $val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
224
+            } else {
225
+                $val = 'array:' . count($val);
226
+            }
227
+        } elseif (is_object($val)) {
228
+            $val = get_class($val);
229
+        } elseif (strlen("$val") > 30) {
230
+            $val = substr("$val", 0, 29) . '…';
231
+            if (strstr($val, ' ')) {
232
+                $val = "'$val'";
233
+            }
234
+        } elseif (strstr($val, ' ')) {
235
+            $val = "'$val'";
236
+        }
237
+        $infos[] = $var . '=' . $val;
238
+    }
239
+    return join(', ', $infos);
240 240
 }
241 241
 
242 242
 
@@ -253,11 +253,11 @@  discard block
 block discarded – undo
253 253
  * @return array|bool
254 254
  */
255 255
 function tester_redirection($fond, $contexte, $connect) {
256
-	static $tester_redirection = null;
257
-	if (is_null($tester_redirection)) {
258
-		$tester_redirection = charger_fonction('tester_redirection', 'public');
259
-	}
260
-	return $tester_redirection($fond, $contexte, $connect);
256
+    static $tester_redirection = null;
257
+    if (is_null($tester_redirection)) {
258
+        $tester_redirection = charger_fonction('tester_redirection', 'public');
259
+    }
260
+    return $tester_redirection($fond, $contexte, $connect);
261 261
 }
262 262
 
263 263
 
@@ -273,41 +273,41 @@  discard block
 block discarded – undo
273 273
  * @return array|bool
274 274
  */
275 275
 function public_tester_redirection_dist($fond, $contexte, $connect) {
276
-	if ($fond == 'article'
277
-		and !empty($contexte['id_article'])
278
-		and $id_article = intval($contexte['id_article'])
279
-	) {
280
-		include_spip('public/quete'); // pour quete_virtuel et ses dependances
281
-		$m = quete_virtuel($id_article, $connect);
282
-		if (strlen($m)) {
283
-			include_spip('inc/texte');
284
-			// les navigateurs pataugent si l'URL est vide
285
-			if ($url = virtuel_redirige($m, true)) {
286
-				// passer en url absolue car cette redirection pourra
287
-				// etre utilisee dans un contexte d'url qui change
288
-				// y compris url arbo
289
-				$status = 302;
290
-				if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
291
-					$status = _STATUS_REDIRECTION_VIRTUEL;
292
-				}
293
-				if (!preg_match(',^\w+:,', $url)) {
294
-					include_spip('inc/filtres_mini');
295
-					$url = url_absolue($url);
296
-				}
297
-				$url = str_replace('&amp;', '&', $url);
298
-
299
-				return array(
300
-					'texte' => "<"
301
-						. "?php include_spip('inc/headers');redirige_par_entete('"
302
-						. texte_script($url)
303
-						. "','',$status);"
304
-						. "?" . ">",
305
-					'process_ins' => 'php',
306
-					'status' => $status
307
-				);
308
-			}
309
-		}
310
-	}
311
-
312
-	return false;
276
+    if ($fond == 'article'
277
+        and !empty($contexte['id_article'])
278
+        and $id_article = intval($contexte['id_article'])
279
+    ) {
280
+        include_spip('public/quete'); // pour quete_virtuel et ses dependances
281
+        $m = quete_virtuel($id_article, $connect);
282
+        if (strlen($m)) {
283
+            include_spip('inc/texte');
284
+            // les navigateurs pataugent si l'URL est vide
285
+            if ($url = virtuel_redirige($m, true)) {
286
+                // passer en url absolue car cette redirection pourra
287
+                // etre utilisee dans un contexte d'url qui change
288
+                // y compris url arbo
289
+                $status = 302;
290
+                if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
291
+                    $status = _STATUS_REDIRECTION_VIRTUEL;
292
+                }
293
+                if (!preg_match(',^\w+:,', $url)) {
294
+                    include_spip('inc/filtres_mini');
295
+                    $url = url_absolue($url);
296
+                }
297
+                $url = str_replace('&amp;', '&', $url);
298
+
299
+                return array(
300
+                    'texte' => "<"
301
+                        . "?php include_spip('inc/headers');redirige_par_entete('"
302
+                        . texte_script($url)
303
+                        . "','',$status);"
304
+                        . "?" . ">",
305
+                    'process_ins' => 'php',
306
+                    'status' => $status
307
+                );
308
+            }
309
+        }
310
+    }
311
+
312
+    return false;
313 313
 }
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
 	} else {
82 82
 		// Preparer l'appel de la fonction principale du squelette 
83 83
 
84
-		spip_timer($a = 'calcul page ' . rand(0, 1000));
84
+		spip_timer($a = 'calcul page '.rand(0, 1000));
85 85
 
86 86
 		// On cree un marqueur de notes unique lie a cette composition
87 87
 		// et on enregistre l'etat courant des globales de notes...
@@ -113,8 +113,8 @@  discard block
 block discarded – undo
113 113
 		try {
114 114
 			$page = $fonc(array('cache' => $cache), array($contexte));
115 115
 		} catch (Throwable $e) {
116
-			$msg = _T('zbug_erreur_execution_page') . " $sourcefile";
117
-			$full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
116
+			$msg = _T('zbug_erreur_execution_page')." $sourcefile";
117
+			$full_msg = $msg.' | File '.$e->getFile().' Line '.$e->getLine().' : '.$e->getMessage();
118 118
 			$full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
119 119
 			$corps = "<pre>$msg</pre>";
120 120
 			$page = analyse_resultat_skel($fond, array('cache' => $cache), $corps, $sourcefile);
@@ -145,17 +145,17 @@  discard block
 block discarded – undo
145 145
 
146 146
 		$profile = spip_timer($a);
147 147
 		spip_log("calcul ($profile) [$skel] $infos"
148
-			. ' (' . strlen($page['texte']) . ' octets)');
148
+			. ' ('.strlen($page['texte']).' octets)');
149 149
 
150
-		if (defined('_CALCUL_PROFILER') AND intval($profile)>_CALCUL_PROFILER){
150
+		if (defined('_CALCUL_PROFILER') AND intval($profile) > _CALCUL_PROFILER) {
151 151
 			spip_log("calcul ($profile) [$skel] $infos"
152
-				.' ('.strlen($page['texte']).' octets) | '.$_SERVER['REQUEST_URI'],"profiler"._LOG_AVERTISSEMENT);
152
+				.' ('.strlen($page['texte']).' octets) | '.$_SERVER['REQUEST_URI'], "profiler"._LOG_AVERTISSEMENT);
153 153
 		}
154 154
 
155 155
 		if ($debug) {
156 156
 			// si c'est ce que demande le debusqueur, lui passer la main
157 157
 			$t = strlen($page['texte']) ? $page['texte'] : " ";
158
-			$GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
158
+			$GLOBALS['debug_objets']['resultat'][$fonc.'tout'] = $t;
159 159
 			$GLOBALS['debug_objets']['courant'] = $courant;
160 160
 			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
161 161
 			if ($GLOBALS['debug_objets']['sourcefile']
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
 		if (defined('_VAR_INCLURE') and _VAR_INCLURE) {
186 186
 			$page['sourcefile'] = $sourcefile;
187 187
 			$page['texte'] =
188
-				"<div class='inclure_blocs'><h6>" . $page['sourcefile'] . "</h6>" . $page['texte'] . "</div>"
188
+				"<div class='inclure_blocs'><h6>".$page['sourcefile']."</h6>".$page['texte']."</div>"
189 189
 				. ($js_inclus ? "" : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
190 190
 			$js_inclus = true;
191 191
 		}
@@ -220,21 +220,21 @@  discard block
 block discarded – undo
220 220
 		}
221 221
 		if (is_array($val)) {
222 222
 			if ($profondeur_max > 0) {
223
-				$val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
223
+				$val = 'array:'.count($val).'('.presenter_contexte($val, $profondeur_max - 1, 3).')';
224 224
 			} else {
225
-				$val = 'array:' . count($val);
225
+				$val = 'array:'.count($val);
226 226
 			}
227 227
 		} elseif (is_object($val)) {
228 228
 			$val = get_class($val);
229 229
 		} elseif (strlen("$val") > 30) {
230
-			$val = substr("$val", 0, 29) . '…';
230
+			$val = substr("$val", 0, 29).'…';
231 231
 			if (strstr($val, ' ')) {
232 232
 				$val = "'$val'";
233 233
 			}
234 234
 		} elseif (strstr($val, ' ')) {
235 235
 			$val = "'$val'";
236 236
 		}
237
-		$infos[] = $var . '=' . $val;
237
+		$infos[] = $var.'='.$val;
238 238
 	}
239 239
 	return join(', ', $infos);
240 240
 }
@@ -301,7 +301,7 @@  discard block
 block discarded – undo
301 301
 						. "?php include_spip('inc/headers');redirige_par_entete('"
302 302
 						. texte_script($url)
303 303
 						. "','',$status);"
304
-						. "?" . ">",
304
+						. "?".">",
305 305
 					'process_ins' => 'php',
306 306
 					'status' => $status
307 307
 				);
Please login to merge, or discard this patch.
ecrire/public/composer.php 2 patches
Indentation   +725 added lines, -725 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  **/
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 include_spip('inc/texte');
@@ -43,229 +43,229 @@  discard block
 block discarded – undo
43 43
 // https://code.spip.net/@public_composer_dist
44 44
 function public_composer_dist($squelette, $mime_type, $gram, $source, $connect = '') {
45 45
 
46
-	$nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
47
-
48
-	//  si deja en memoire (INCLURE  a repetition) c'est bon.
49
-	if (function_exists($nom)) {
50
-		return $nom;
51
-	}
52
-
53
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
54
-		$GLOBALS['debug_objets']['courant'] = $nom;
55
-	}
56
-
57
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
58
-
59
-	// si squelette est deja compile et perenne, le charger
60
-	if (!squelette_obsolete($phpfile, $source)) {
61
-		include_once $phpfile;
62
-		#if (!squelette_obsolete($phpfile, $source)
63
-		#  AND lire_fichier ($phpfile, $skel_code,
64
-		#  array('critique' => 'oui', 'phpcheck' => 'oui'))){
65
-		## eval('?'.'>'.$skel_code);
66
-		#	 spip_log($skel_code, 'comp')
67
-		#}
68
-	}
69
-
70
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
71
-		include_once $lib;
72
-	}
73
-
74
-	// tester si le eval ci-dessus a mis le squelette en memoire
75
-
76
-	if (function_exists($nom)) {
77
-		return $nom;
78
-	}
79
-
80
-	// charger le source, si possible, et compiler 
81
-	$skel_code = '';
82
-	if (lire_fichier($source, $skel)) {
83
-		$compiler = charger_fonction('compiler', 'public');
84
-		$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
85
-	}
86
-
87
-	// Ne plus rien faire si le compilateur n'a pas pu operer.
88
-	if (!$skel_code) {
89
-		return false;
90
-	}
91
-
92
-	foreach ($skel_code as $id => $boucle) {
93
-		$f = $boucle->return;
94
-		try {
95
-			eval("return true; $f ;");
96
-		} catch (\ParseError $e) {
97
-			// Code syntaxiquement faux (critere etc mal programme')
98
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
99
-			erreur_squelette($msg, $boucle);
100
-			// continuer pour trouver d'autres fautes eventuelles
101
-			// mais prevenir que c'est mort
102
-			$nom = '';
103
-		}
104
-
105
-		// Contexte de compil inutile a present
106
-		// (mais la derniere valeur de $boucle est utilisee ci-dessous)
107
-		$skel_code[$id] = $f;
108
-	}
109
-
110
-	$code = '';
111
-	if ($nom) {
112
-		// Si le code est bon, concatener et mettre en cache
113
-		if (function_exists($nom)) {
114
-			$code = squelette_traduit($skel, $source, $phpfile, $skel_code);
115
-		} else {
116
-			// code semantiquement faux: bug du compilateur
117
-			// $boucle est en fait ici la fct principale du squelette
118
-			$msg = _T('zbug_erreur_compilation');
119
-			erreur_squelette($msg, $boucle);
120
-			$nom = '';
121
-		}
122
-	}
123
-
124
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
125
-
126
-		// Tracer ce qui vient d'etre compile
127
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
128
-
129
-		// si c'est ce que demande le debusqueur, lui passer la main
130
-		if ($GLOBALS['debug_objets']['sourcefile']
131
-			and (_request('var_mode_objet') == $nom)
132
-			and (_request('var_mode_affiche') == 'code')
133
-		) {
134
-			erreur_squelette();
135
-		}
136
-	}
137
-
138
-	return $nom ? $nom : false;
46
+    $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
47
+
48
+    //  si deja en memoire (INCLURE  a repetition) c'est bon.
49
+    if (function_exists($nom)) {
50
+        return $nom;
51
+    }
52
+
53
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
54
+        $GLOBALS['debug_objets']['courant'] = $nom;
55
+    }
56
+
57
+    $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
58
+
59
+    // si squelette est deja compile et perenne, le charger
60
+    if (!squelette_obsolete($phpfile, $source)) {
61
+        include_once $phpfile;
62
+        #if (!squelette_obsolete($phpfile, $source)
63
+        #  AND lire_fichier ($phpfile, $skel_code,
64
+        #  array('critique' => 'oui', 'phpcheck' => 'oui'))){
65
+        ## eval('?'.'>'.$skel_code);
66
+        #	 spip_log($skel_code, 'comp')
67
+        #}
68
+    }
69
+
70
+    if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
71
+        include_once $lib;
72
+    }
73
+
74
+    // tester si le eval ci-dessus a mis le squelette en memoire
75
+
76
+    if (function_exists($nom)) {
77
+        return $nom;
78
+    }
79
+
80
+    // charger le source, si possible, et compiler 
81
+    $skel_code = '';
82
+    if (lire_fichier($source, $skel)) {
83
+        $compiler = charger_fonction('compiler', 'public');
84
+        $skel_code = $compiler($skel, $nom, $gram, $source, $connect);
85
+    }
86
+
87
+    // Ne plus rien faire si le compilateur n'a pas pu operer.
88
+    if (!$skel_code) {
89
+        return false;
90
+    }
91
+
92
+    foreach ($skel_code as $id => $boucle) {
93
+        $f = $boucle->return;
94
+        try {
95
+            eval("return true; $f ;");
96
+        } catch (\ParseError $e) {
97
+            // Code syntaxiquement faux (critere etc mal programme')
98
+            $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
99
+            erreur_squelette($msg, $boucle);
100
+            // continuer pour trouver d'autres fautes eventuelles
101
+            // mais prevenir que c'est mort
102
+            $nom = '';
103
+        }
104
+
105
+        // Contexte de compil inutile a present
106
+        // (mais la derniere valeur de $boucle est utilisee ci-dessous)
107
+        $skel_code[$id] = $f;
108
+    }
109
+
110
+    $code = '';
111
+    if ($nom) {
112
+        // Si le code est bon, concatener et mettre en cache
113
+        if (function_exists($nom)) {
114
+            $code = squelette_traduit($skel, $source, $phpfile, $skel_code);
115
+        } else {
116
+            // code semantiquement faux: bug du compilateur
117
+            // $boucle est en fait ici la fct principale du squelette
118
+            $msg = _T('zbug_erreur_compilation');
119
+            erreur_squelette($msg, $boucle);
120
+            $nom = '';
121
+        }
122
+    }
123
+
124
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
125
+
126
+        // Tracer ce qui vient d'etre compile
127
+        $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
128
+
129
+        // si c'est ce que demande le debusqueur, lui passer la main
130
+        if ($GLOBALS['debug_objets']['sourcefile']
131
+            and (_request('var_mode_objet') == $nom)
132
+            and (_request('var_mode_affiche') == 'code')
133
+        ) {
134
+            erreur_squelette();
135
+        }
136
+    }
137
+
138
+    return $nom ? $nom : false;
139 139
 }
140 140
 
141 141
 function squelette_traduit($squelette, $sourcefile, $phpfile, $boucles) {
142 142
 
143
-	// Le dernier index est '' (fonction principale)
144
-	$noms = substr(join(', ', array_keys($boucles)), 0, -2);
145
-	if (CODE_COMMENTE) {
146
-		$code = "
143
+    // Le dernier index est '' (fonction principale)
144
+    $noms = substr(join(', ', array_keys($boucles)), 0, -2);
145
+    if (CODE_COMMENTE) {
146
+        $code = "
147 147
 /*
148 148
  * Squelette : $sourcefile
149 149
  * Date :      " . gmdate("D, d M Y H:i:s", @filemtime($sourcefile)) . " GMT
150 150
  * Compile :   " . gmdate("D, d M Y H:i:s", time()) . " GMT
151 151
  * " . (!$boucles ? "Pas de boucle" : ("Boucles :   " . $noms)) . "
152 152
  */ ";
153
-	}
153
+    }
154 154
 
155
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n?" . '>';
156
-	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
157
-		ecrire_fichier($phpfile, $code);
158
-	}
155
+    $code = '<' . "?php\n" . $code . join('', $boucles) . "\n?" . '>';
156
+    if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
157
+        ecrire_fichier($phpfile, $code);
158
+    }
159 159
 
160
-	return $code;
160
+    return $code;
161 161
 }
162 162
 
163 163
 // Le squelette compile est-il trop vieux ?
164 164
 // https://code.spip.net/@squelette_obsolete
165 165
 function squelette_obsolete($skel, $squelette) {
166
-	static $date_change = null;
167
-	// ne verifier la date de mes_fonctions et mes_options qu'une seule fois
168
-	// par hit
169
-	if (is_null($date_change)) {
170
-		if (@file_exists($fonc = 'mes_fonctions.php')) {
171
-			$date_change = @filemtime($fonc);
172
-		} # compatibilite
173
-		if (defined('_FILE_OPTIONS')) {
174
-			$date_change = max($date_change, @filemtime(_FILE_OPTIONS));
175
-		}
176
-	}
177
-
178
-	return (
179
-		(defined('_VAR_MODE') and in_array(_VAR_MODE, array('recalcul', 'preview', 'debug')))
180
-		or !@file_exists($skel)
181
-		or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
182
-			> ($date = @filemtime($skel)))
183
-		or ($date_change > $date)
184
-	);
166
+    static $date_change = null;
167
+    // ne verifier la date de mes_fonctions et mes_options qu'une seule fois
168
+    // par hit
169
+    if (is_null($date_change)) {
170
+        if (@file_exists($fonc = 'mes_fonctions.php')) {
171
+            $date_change = @filemtime($fonc);
172
+        } # compatibilite
173
+        if (defined('_FILE_OPTIONS')) {
174
+            $date_change = max($date_change, @filemtime(_FILE_OPTIONS));
175
+        }
176
+    }
177
+
178
+    return (
179
+        (defined('_VAR_MODE') and in_array(_VAR_MODE, array('recalcul', 'preview', 'debug')))
180
+        or !@file_exists($skel)
181
+        or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
182
+            > ($date = @filemtime($skel)))
183
+        or ($date_change > $date)
184
+    );
185 185
 }
186 186
 
187 187
 // Activer l'invalideur de session
188 188
 // https://code.spip.net/@invalideur_session
189 189
 function invalideur_session(&$Cache, $code = null) {
190
-	$Cache['session'] = spip_session();
190
+    $Cache['session'] = spip_session();
191 191
 
192
-	return $code;
192
+    return $code;
193 193
 }
194 194
 
195 195
 
196 196
 // https://code.spip.net/@analyse_resultat_skel
197 197
 function analyse_resultat_skel($nom, $cache, $corps, $source = '') {
198
-	static $filtres = array();
199
-	$headers = array();
200
-
201
-	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
202
-	// note: on essaie d'attrapper aussi certains de ces entetes codes
203
-	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
204
-	if (stripos($corps, 'header') !== false
205
-		and preg_match_all(
206
-			'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
207
-			$corps, $regs, PREG_SET_ORDER)
208
-	) {
209
-		foreach ($regs as $r) {
210
-			$corps = str_replace($r[0], '', $corps);
211
-			# $j = Content-Type, et pas content-TYPE.
212
-			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
213
-
214
-			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
215
-				$headers[$j] .= "|" . $r[3];
216
-			} else {
217
-				$headers[$j] = $r[3];
218
-			}
219
-		}
220
-	}
221
-	// S'agit-il d'un resultat constant ou contenant du code php
222
-	$process_ins = (
223
-		strpos($corps, '<' . '?') === false
224
-		or
225
-		(strpos($corps, '<' . '?xml') !== false and
226
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
227
-	)
228
-		? 'html'
229
-		: 'php';
230
-
231
-	$skel = array(
232
-		'squelette' => $nom,
233
-		'source' => $source,
234
-		'process_ins' => $process_ins,
235
-		'invalideurs' => $cache,
236
-		'entetes' => $headers,
237
-		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
238
-	);
239
-
240
-	// traiter #FILTRE{} et filtres
241
-	if (!isset($filtres[$nom])) {
242
-		$filtres[$nom] = pipeline('declarer_filtres_squelettes', array('args' => $skel, 'data' => array()));
243
-	}
244
-	$filtres_headers = array();
245
-	if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
246
-		$filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
247
-		unset($headers['X-Spip-Filtre']);
248
-	}
249
-	if (count($filtres[$nom]) or count($filtres_headers)) {
250
-		include_spip('public/sandbox');
251
-		$corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
252
-
253
-		if ($process_ins == 'html') {
254
-			$skel['process_ins'] = (
255
-				strpos($corps, '<' . '?') === false
256
-				or
257
-				(strpos($corps, '<' . '?xml') !== false and
258
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
259
-			)
260
-				? 'html'
261
-				: 'php';
262
-		}
263
-	}
264
-
265
-	$skel['entetes'] = $headers;
266
-	$skel['texte'] = $corps;
267
-
268
-	return $skel;
198
+    static $filtres = array();
199
+    $headers = array();
200
+
201
+    // Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
202
+    // note: on essaie d'attrapper aussi certains de ces entetes codes
203
+    // "a la main" dans les squelettes, mais evidemment sans exhaustivite
204
+    if (stripos($corps, 'header') !== false
205
+        and preg_match_all(
206
+            '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
207
+            $corps, $regs, PREG_SET_ORDER)
208
+    ) {
209
+        foreach ($regs as $r) {
210
+            $corps = str_replace($r[0], '', $corps);
211
+            # $j = Content-Type, et pas content-TYPE.
212
+            $j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
213
+
214
+            if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
215
+                $headers[$j] .= "|" . $r[3];
216
+            } else {
217
+                $headers[$j] = $r[3];
218
+            }
219
+        }
220
+    }
221
+    // S'agit-il d'un resultat constant ou contenant du code php
222
+    $process_ins = (
223
+        strpos($corps, '<' . '?') === false
224
+        or
225
+        (strpos($corps, '<' . '?xml') !== false and
226
+            strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
227
+    )
228
+        ? 'html'
229
+        : 'php';
230
+
231
+    $skel = array(
232
+        'squelette' => $nom,
233
+        'source' => $source,
234
+        'process_ins' => $process_ins,
235
+        'invalideurs' => $cache,
236
+        'entetes' => $headers,
237
+        'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
238
+    );
239
+
240
+    // traiter #FILTRE{} et filtres
241
+    if (!isset($filtres[$nom])) {
242
+        $filtres[$nom] = pipeline('declarer_filtres_squelettes', array('args' => $skel, 'data' => array()));
243
+    }
244
+    $filtres_headers = array();
245
+    if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
246
+        $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
247
+        unset($headers['X-Spip-Filtre']);
248
+    }
249
+    if (count($filtres[$nom]) or count($filtres_headers)) {
250
+        include_spip('public/sandbox');
251
+        $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
252
+
253
+        if ($process_ins == 'html') {
254
+            $skel['process_ins'] = (
255
+                strpos($corps, '<' . '?') === false
256
+                or
257
+                (strpos($corps, '<' . '?xml') !== false and
258
+                    strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
259
+            )
260
+                ? 'html'
261
+                : 'php';
262
+        }
263
+    }
264
+
265
+    $skel['entetes'] = $headers;
266
+    $skel['texte'] = $corps;
267
+
268
+    return $skel;
269 269
 }
270 270
 
271 271
 //
@@ -279,7 +279,7 @@  discard block
 block discarded – undo
279 279
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
280 280
 if ($lang_select) lang_select();
281 281
 ?'
282
-	. '>');
282
+    . '>');
283 283
 
284 284
 /**
285 285
  * Synthétise une balise dynamique : crée l'appel à l'inclusion
@@ -299,33 +299,33 @@  discard block
 block discarded – undo
299 299
  *     Code PHP pour inclure le squelette de la balise dynamique
300 300
  **/
301 301
 function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
302
-	if (
303
-		strncmp($file, "/", 1) !== 0 
304
-		// pas de lien symbolique sous Windows
305
-		and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false)
306
-	) {
307
-		$file = './" . _DIR_RACINE . "' . $file;
308
-	}
309
-
310
-	$lang = $context_compil[4];
311
-	if (preg_match(",\W,", $lang)) {
312
-		$lang = '';
313
-	}
314
-
315
-	$args = array_map('argumenter_squelette', $args);
316
-	if (!empty($context_compil['appel_php_depuis_modele'])) {
317
-		$args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
318
-	}
319
-	$args = join(', ', $args);
320
-
321
-	$r = sprintf(CODE_INCLURE_BALISE,
322
-		$file,
323
-		$lang,
324
-		$nom,
325
-		$args,
326
-		join(', ', array_map('_q', $context_compil)));
327
-
328
-	return $r;
302
+    if (
303
+        strncmp($file, "/", 1) !== 0 
304
+        // pas de lien symbolique sous Windows
305
+        and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false)
306
+    ) {
307
+        $file = './" . _DIR_RACINE . "' . $file;
308
+    }
309
+
310
+    $lang = $context_compil[4];
311
+    if (preg_match(",\W,", $lang)) {
312
+        $lang = '';
313
+    }
314
+
315
+    $args = array_map('argumenter_squelette', $args);
316
+    if (!empty($context_compil['appel_php_depuis_modele'])) {
317
+        $args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
318
+    }
319
+    $args = join(', ', $args);
320
+
321
+    $r = sprintf(CODE_INCLURE_BALISE,
322
+        $file,
323
+        $lang,
324
+        $nom,
325
+        $args,
326
+        join(', ', array_map('_q', $context_compil)));
327
+
328
+    return $r;
329 329
 }
330 330
 
331 331
 /**
@@ -343,18 +343,18 @@  discard block
 block discarded – undo
343 343
  **/
344 344
 function argumenter_squelette($v) {
345 345
 
346
-	if (is_object($v)) {
347
-		return var_export($v, true);
348
-	} elseif (!is_array($v)) {
349
-		return "'" . texte_script($v) . "'";
350
-	} else {
351
-		$out = array();
352
-		foreach ($v as $k => $val) {
353
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
354
-		}
355
-
356
-		return 'array(' . join(", ", $out) . ')';
357
-	}
346
+    if (is_object($v)) {
347
+        return var_export($v, true);
348
+    } elseif (!is_array($v)) {
349
+        return "'" . texte_script($v) . "'";
350
+    } else {
351
+        $out = array();
352
+        foreach ($v as $k => $val) {
353
+            $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
354
+        }
355
+
356
+        return 'array(' . join(", ", $out) . ')';
357
+    }
358 358
 }
359 359
 
360 360
 
@@ -385,85 +385,85 @@  discard block
 block discarded – undo
385 385
  *     Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique
386 386
  **/
387 387
 function executer_balise_dynamique($nom, $args, $context_compil) {
388
-	/** @var string Nom de la balise à charger (balise demandée ou balise générique) */
389
-	$nom_balise = $nom;
390
-	/** @var string Nom de la balise générique (si utilisée) */
391
-	$nom_balise_generique = "";
392
-
393
-	$appel_php_depuis_modele = false;
394
-	if (is_array($context_compil)
395
-	  and !is_numeric($context_compil[3])
396
-	  and empty($context_compil[0])
397
-		and empty($context_compil[1])
398
-		and empty($context_compil[2])
399
-		and empty($context_compil[3])) {
400
-		$appel_php_depuis_modele = true;
401
-	}
402
-
403
-	if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
404
-		// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
405
-		if ($balise_generique = chercher_balise_generique($nom)) {
406
-			// injecter en premier arg le nom de la balise 
407
-			array_unshift($args, $nom);
408
-			$nom_balise_generique = $balise_generique['nom_generique'];
409
-			$fonction_balise = $balise_generique['fonction_generique'];
410
-			$nom_balise = $nom_balise_generique;
411
-		}
412
-		unset($balise_generique);
413
-	}
414
-
415
-	if (!$fonction_balise) {
416
-		$msg = array('zbug_balise_inexistante', array('from' => 'CVT', 'balise' => $nom));
417
-		erreur_squelette($msg, $context_compil);
418
-
419
-		return '';
420
-	}
421
-
422
-	// retrouver le fichier qui a déclaré la fonction
423
-	// même si la fonction dynamique est déclarée dans un fichier de fonctions.
424
-	// Attention sous windows, getFileName() retourne un antislash. 
425
-	$reflector = new ReflectionFunction($fonction_balise);
426
-	$file = str_replace('\\', '/', $reflector->getFileName());
427
-	if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
428
-		$file = substr($file, strlen(_ROOT_RACINE));
429
-	}
430
-
431
-	// Y a-t-il une fonction de traitement des arguments ?
432
-	$f = 'balise_' . $nom_balise . '_stat';
433
-
434
-	$r = !function_exists($f) ? $args : $f($args, $context_compil);
435
-
436
-	if (!is_array($r)) {
437
-		return $r;
438
-	}
439
-
440
-	// verifier que la fonction dyn est la, 
441
-	// sinon se replier sur la generique si elle existe
442
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
443
-		if (
444
-			$balise_generique = chercher_balise_generique($nom)
445
-			and $nom_balise_generique = $balise_generique['nom_generique']
446
-			and $file = include_spip("balise/" . strtolower($nom_balise_generique))
447
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
448
-		) {
449
-			// et lui injecter en premier arg le nom de la balise 
450
-			array_unshift($r, $nom);
451
-			$nom_balise = $nom_balise_generique;
452
-			if (!_DIR_RESTREINT) {
453
-				$file = _DIR_RESTREINT_ABS . $file;
454
-			}
455
-		} else {
456
-			$msg = array('zbug_balise_inexistante', array('from' => 'CVT', 'balise' => $nom));
457
-			erreur_squelette($msg, $context_compil);
458
-
459
-			return '';
460
-		}
461
-	}
462
-
463
-	if ($appel_php_depuis_modele) {
464
-		$context_compil['appel_php_depuis_modele'] = true;
465
-	}
466
-	return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
388
+    /** @var string Nom de la balise à charger (balise demandée ou balise générique) */
389
+    $nom_balise = $nom;
390
+    /** @var string Nom de la balise générique (si utilisée) */
391
+    $nom_balise_generique = "";
392
+
393
+    $appel_php_depuis_modele = false;
394
+    if (is_array($context_compil)
395
+      and !is_numeric($context_compil[3])
396
+      and empty($context_compil[0])
397
+        and empty($context_compil[1])
398
+        and empty($context_compil[2])
399
+        and empty($context_compil[3])) {
400
+        $appel_php_depuis_modele = true;
401
+    }
402
+
403
+    if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
404
+        // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
405
+        if ($balise_generique = chercher_balise_generique($nom)) {
406
+            // injecter en premier arg le nom de la balise 
407
+            array_unshift($args, $nom);
408
+            $nom_balise_generique = $balise_generique['nom_generique'];
409
+            $fonction_balise = $balise_generique['fonction_generique'];
410
+            $nom_balise = $nom_balise_generique;
411
+        }
412
+        unset($balise_generique);
413
+    }
414
+
415
+    if (!$fonction_balise) {
416
+        $msg = array('zbug_balise_inexistante', array('from' => 'CVT', 'balise' => $nom));
417
+        erreur_squelette($msg, $context_compil);
418
+
419
+        return '';
420
+    }
421
+
422
+    // retrouver le fichier qui a déclaré la fonction
423
+    // même si la fonction dynamique est déclarée dans un fichier de fonctions.
424
+    // Attention sous windows, getFileName() retourne un antislash. 
425
+    $reflector = new ReflectionFunction($fonction_balise);
426
+    $file = str_replace('\\', '/', $reflector->getFileName());
427
+    if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
428
+        $file = substr($file, strlen(_ROOT_RACINE));
429
+    }
430
+
431
+    // Y a-t-il une fonction de traitement des arguments ?
432
+    $f = 'balise_' . $nom_balise . '_stat';
433
+
434
+    $r = !function_exists($f) ? $args : $f($args, $context_compil);
435
+
436
+    if (!is_array($r)) {
437
+        return $r;
438
+    }
439
+
440
+    // verifier que la fonction dyn est la, 
441
+    // sinon se replier sur la generique si elle existe
442
+    if (!function_exists('balise_' . $nom_balise . '_dyn')) {
443
+        if (
444
+            $balise_generique = chercher_balise_generique($nom)
445
+            and $nom_balise_generique = $balise_generique['nom_generique']
446
+            and $file = include_spip("balise/" . strtolower($nom_balise_generique))
447
+            and function_exists('balise_' . $nom_balise_generique . '_dyn')
448
+        ) {
449
+            // et lui injecter en premier arg le nom de la balise 
450
+            array_unshift($r, $nom);
451
+            $nom_balise = $nom_balise_generique;
452
+            if (!_DIR_RESTREINT) {
453
+                $file = _DIR_RESTREINT_ABS . $file;
454
+            }
455
+        } else {
456
+            $msg = array('zbug_balise_inexistante', array('from' => 'CVT', 'balise' => $nom));
457
+            erreur_squelette($msg, $context_compil);
458
+
459
+            return '';
460
+        }
461
+    }
462
+
463
+    if ($appel_php_depuis_modele) {
464
+        $context_compil['appel_php_depuis_modele'] = true;
465
+    }
466
+    return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
467 467
 
468 468
 }
469 469
 
@@ -479,23 +479,23 @@  discard block
 block discarded – undo
479 479
  * @return array|null
480 480
  */
481 481
 function chercher_balise_generique($nom) {
482
-	if (false === strpos($nom, "_")) {
483
-		return null;
484
-	}
485
-	$nom_generique = $nom;
486
-	while (false !== ($p = strrpos($nom_generique, "_"))) {
487
-		$nom_generique = substr($nom_generique, 0, $p + 1);
488
-		$fonction_generique = charger_fonction($nom_generique, 'balise', true);
489
-		if ($fonction_generique) {
490
-			return [
491
-				'nom' => $nom,
492
-				'nom_generique' => $nom_generique,
493
-				'fonction_generique' => $fonction_generique,
494
-			];
495
-		}
496
-		$nom_generique = substr($nom_generique, 0, -1);
497
-	}
498
-	return null;
482
+    if (false === strpos($nom, "_")) {
483
+        return null;
484
+    }
485
+    $nom_generique = $nom;
486
+    while (false !== ($p = strrpos($nom_generique, "_"))) {
487
+        $nom_generique = substr($nom_generique, 0, $p + 1);
488
+        $fonction_generique = charger_fonction($nom_generique, 'balise', true);
489
+        if ($fonction_generique) {
490
+            return [
491
+                'nom' => $nom,
492
+                'nom_generique' => $nom_generique,
493
+                'fonction_generique' => $fonction_generique,
494
+            ];
495
+        }
496
+        $nom_generique = substr($nom_generique, 0, -1);
497
+    }
498
+    return null;
499 499
 }
500 500
 
501 501
 
@@ -519,27 +519,27 @@  discard block
 block discarded – undo
519 519
  * @return null;
520 520
  **/
521 521
 function lang_select_public($lang, $lang_select, $titre = null) {
522
-	// Cas 1. forcer_lang = true et pas de critere {lang_select}
523
-	if (isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
524
-		and $lang_select !== 'oui'
525
-	) {
526
-		$lang = $GLOBALS['spip_lang'];
527
-	} // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
528
-	elseif (!strlen($lang)) {
529
-		$lang = $GLOBALS['spip_lang'];
530
-	} // Cas 3. l'objet est multilingue !
531
-	elseif ($lang_select !== 'oui'
532
-		and strlen($titre) > 10
533
-		and strpos($titre, '<multi>') !== false
534
-		and strpos(echappe_html($titre), '<multi>') !== false
535
-	) {
536
-		$lang = $GLOBALS['spip_lang'];
537
-	}
538
-
539
-	// faire un lang_select() eventuellement sur la langue inchangee
540
-	lang_select($lang);
541
-
542
-	return;
522
+    // Cas 1. forcer_lang = true et pas de critere {lang_select}
523
+    if (isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
524
+        and $lang_select !== 'oui'
525
+    ) {
526
+        $lang = $GLOBALS['spip_lang'];
527
+    } // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
528
+    elseif (!strlen($lang)) {
529
+        $lang = $GLOBALS['spip_lang'];
530
+    } // Cas 3. l'objet est multilingue !
531
+    elseif ($lang_select !== 'oui'
532
+        and strlen($titre) > 10
533
+        and strpos($titre, '<multi>') !== false
534
+        and strpos(echappe_html($titre), '<multi>') !== false
535
+    ) {
536
+        $lang = $GLOBALS['spip_lang'];
537
+    }
538
+
539
+    // faire un lang_select() eventuellement sur la langue inchangee
540
+    lang_select($lang);
541
+
542
+    return;
543 543
 }
544 544
 
545 545
 
@@ -547,21 +547,21 @@  discard block
 block discarded – undo
547 547
 // il faut le nettoyer car il pourrait etre injecte en SQL
548 548
 // https://code.spip.net/@nettoyer_env_doublons
549 549
 function nettoyer_env_doublons($envd) {
550
-	foreach ($envd as $table => $liste) {
551
-		$n = '';
552
-		foreach (explode(',', $liste) as $val) {
553
-			if ($a = intval($val) and $val === strval($a)) {
554
-				$n .= ',' . $val;
555
-			}
556
-		}
557
-		if (strlen($n)) {
558
-			$envd[$table] = $n;
559
-		} else {
560
-			unset($envd[$table]);
561
-		}
562
-	}
563
-
564
-	return $envd;
550
+    foreach ($envd as $table => $liste) {
551
+        $n = '';
552
+        foreach (explode(',', $liste) as $val) {
553
+            if ($a = intval($val) and $val === strval($a)) {
554
+                $n .= ',' . $val;
555
+            }
556
+        }
557
+        if (strlen($n)) {
558
+            $envd[$table] = $n;
559
+        } else {
560
+            unset($envd[$table]);
561
+        }
562
+    }
563
+
564
+    return $envd;
565 565
 }
566 566
 
567 567
 /**
@@ -580,21 +580,21 @@  discard block
 block discarded – undo
580 580
  *     Opérateur trouvé (SELF ou SUBSELECT) sinon false.
581 581
  **/
582 582
 function match_self($w) {
583
-	if (is_string($w)) {
584
-		return false;
585
-	}
586
-	if (is_array($w)) {
587
-		if (in_array(reset($w), array("SELF", "SUBSELECT"))) {
588
-			return $w;
589
-		}
590
-		foreach (array_filter($w, 'is_array') as $sw) {
591
-			if ($m = match_self($sw)) {
592
-				return $m;
593
-			}
594
-		}
595
-	}
596
-
597
-	return false;
583
+    if (is_string($w)) {
584
+        return false;
585
+    }
586
+    if (is_array($w)) {
587
+        if (in_array(reset($w), array("SELF", "SUBSELECT"))) {
588
+            return $w;
589
+        }
590
+        foreach (array_filter($w, 'is_array') as $sw) {
591
+            if ($m = match_self($sw)) {
592
+                return $m;
593
+            }
594
+        }
595
+    }
596
+
597
+    return false;
598 598
 }
599 599
 
600 600
 /**
@@ -610,16 +610,16 @@  discard block
 block discarded – undo
610 610
  *     est remplacée par son code.
611 611
  **/
612 612
 function remplace_sous_requete($w, $sousrequete) {
613
-	if (is_array($w)) {
614
-		if (in_array(reset($w), array("SELF", "SUBSELECT"))) {
615
-			return $sousrequete;
616
-		}
617
-		foreach ($w as $k => $sw) {
618
-			$w[$k] = remplace_sous_requete($sw, $sousrequete);
619
-		}
620
-	}
621
-
622
-	return $w;
613
+    if (is_array($w)) {
614
+        if (in_array(reset($w), array("SELF", "SUBSELECT"))) {
615
+            return $sousrequete;
616
+        }
617
+        foreach ($w as $k => $sw) {
618
+            $w[$k] = remplace_sous_requete($sw, $sousrequete);
619
+        }
620
+    }
621
+
622
+    return $w;
623 623
 }
624 624
 
625 625
 /**
@@ -633,17 +633,17 @@  discard block
 block discarded – undo
633 633
  *     - Conditions avec des sous requêtes
634 634
  **/
635 635
 function trouver_sous_requetes($where) {
636
-	$where_simples = array();
637
-	$where_sous = array();
638
-	foreach ($where as $k => $w) {
639
-		if (match_self($w)) {
640
-			$where_sous[$k] = $w;
641
-		} else {
642
-			$where_simples[$k] = $w;
643
-		}
644
-	}
645
-
646
-	return array($where_simples, $where_sous);
636
+    $where_simples = array();
637
+    $where_sous = array();
638
+    foreach ($where as $k => $w) {
639
+        if (match_self($w)) {
640
+            $where_sous[$k] = $w;
641
+        } else {
642
+            $where_simples[$k] = $w;
643
+        }
644
+    }
645
+
646
+    return array($where_simples, $where_sous);
647 647
 }
648 648
 
649 649
 
@@ -669,270 +669,270 @@  discard block
 block discarded – undo
669 669
  * @return resource
670 670
  */
671 671
 function calculer_select(
672
-	$select = array(),
673
-	$from = array(),
674
-	$from_type = array(),
675
-	$where = array(),
676
-	$join = array(),
677
-	$groupby = array(),
678
-	$orderby = array(),
679
-	$limit = '',
680
-	$having = array(),
681
-	$table = '',
682
-	$id = '',
683
-	$serveur = '',
684
-	$requeter = true
672
+    $select = array(),
673
+    $from = array(),
674
+    $from_type = array(),
675
+    $where = array(),
676
+    $join = array(),
677
+    $groupby = array(),
678
+    $orderby = array(),
679
+    $limit = '',
680
+    $having = array(),
681
+    $table = '',
682
+    $id = '',
683
+    $serveur = '',
684
+    $requeter = true
685 685
 ) {
686 686
 
687
-	// retirer les criteres vides:
688
-	// {X ?} avec X absent de l'URL
689
-	// {par #ENV{X}} avec X absent de l'URL
690
-	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
691
-	$menage = false;
692
-	foreach ($where as $k => $v) {
693
-		if (is_array($v)) {
694
-			if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
695
-				$op = false;
696
-			} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
697
-				$op = false;
698
-			} else {
699
-				$op = $v[0] ? $v[0] : $v;
700
-			}
701
-		} else {
702
-			$op = $v;
703
-		}
704
-		if ((!$op) or ($op == 1) or ($op == '0=0')) {
705
-			unset($where[$k]);
706
-			$menage = true;
707
-		}
708
-	}
709
-
710
-	// evacuer les eventuels groupby vide issus d'un calcul dynamique
711
-	$groupby = array_diff($groupby, array(''));
712
-
713
-	// remplacer les sous requetes recursives au calcul
714
-	list($where_simples, $where_sous) = trouver_sous_requetes($where);
715
-	foreach ($where_sous as $k => $w) {
716
-		$menage = true;
717
-		// on recupere la sous requete 
718
-		$sous = match_self($w);
719
-		if ($sous[0] == 'SELF') {
720
-			// c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
721
-			array_push($where_simples, $sous[2]);
722
-			$wheresub = array(
723
-				$sous[2],
724
-				'0=0'
725
-			); // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
726
-			$jsub = $join;
727
-			// trouver les jointures utiles a
728
-			// reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
729
-			// ie L1.objet='article'
730
-			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
731
-			$i = 0;
732
-			do {
733
-				$where[$k] = remplace_sous_requete($w, "(" . calculer_select(
734
-						array($sous[1] . " AS id"),
735
-						$from,
736
-						$from_type,
737
-						$wheresub,
738
-						$jsub,
739
-						array(), array(), '',
740
-						$having, $table, $id, $serveur, false) . ")");
741
-				if (!$i) {
742
-					$i = 1;
743
-					$wherestring = calculer_where_to_string($where[$k]);
744
-					foreach ($join as $cle => $wj) {
745
-						if (count($wj) == 4
746
-							and strpos($wherestring, "{$cle}.") !== false
747
-						) {
748
-							$i = 0;
749
-							$wheresub[] = $wj[3];
750
-							unset($jsub[$cle][3]);
751
-						}
752
-					}
753
-				}
754
-			} while ($i++ < 1);
755
-		}
756
-		if ($sous[0] == 'SUBSELECT') {
757
-			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
758
-			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
759
-			$where[$k] = remplace_sous_requete($w, "(" . calculer_select(
760
-					$sous[1], # select
761
-					$sous[2], #from
762
-					array(), #from_type
763
-					$sous[3] ? (is_array($sous[3]) ? $sous[3] : array($sous[3])) : array(),
764
-					#where, qui peut etre de la forme string comme dans sql_select
765
-					array(), #join
766
-					$sous[4] ? $sous[4] : array(), #groupby
767
-					$sous[5] ? $sous[5] : array(), #orderby
768
-					$sous[6], #limit
769
-					$sous[7] ? $sous[7] : array(), #having
770
-					$table, $id, $serveur, false
771
-				) . ")");
772
-		}
773
-		array_pop($where_simples);
774
-	}
775
-
776
-	foreach ($having as $k => $v) {
777
-		if ((!$v) or ($v == 1) or ($v == '0=0')) {
778
-			unset($having[$k]);
779
-		}
780
-	}
781
-
782
-	// Installer les jointures.
783
-	// Retirer celles seulement utiles aux criteres finalement absents mais
784
-	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
785
-	// si elle est seulement utile a Ln+1 elle meme inutile
786
-
787
-	$afrom = array();
788
-	$equiv = array();
789
-	$k = count($join);
790
-	foreach (array_reverse($join, true) as $cledef => $j) {
791
-		$cle = $cledef;
792
-		// le format de join est :
793
-		// array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
794
-		$join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
795
-		if (count($join[$cle]) == 2) {
796
-			$join[$cle][] = $join[$cle][1];
797
-		}
798
-		if (count($join[$cle]) == 3) {
799
-			$join[$cle][] = '';
800
-		}
801
-		list($t, $c, $carr, $and) = $join[$cle];
802
-		// si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
803
-		// pour compat avec ancienne convention
804
-		if (is_numeric($cle)) {
805
-			$cle = "L$k";
806
-		}
807
-		$cle_where_lie = "JOIN-$cle";
808
-		if (!$menage
809
-			or isset($afrom[$cle])
810
-			or calculer_jointnul($cle, $select)
811
-			or calculer_jointnul($cle, array_diff_key($join, array($cle => $join[$cle])))
812
-			or calculer_jointnul($cle, $having)
813
-			or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
814
-		) {
815
-			// corriger les references non explicites dans select
816
-			// ou groupby
817
-			foreach ($select as $i => $s) {
818
-				if ($s == $c) {
819
-					$select[$i] = "$cle.$c AS $c";
820
-					break;
821
-				}
822
-			}
823
-			foreach ($groupby as $i => $g) {
824
-				if ($g == $c) {
825
-					$groupby[$i] = "$cle.$c";
826
-					break;
827
-				}
828
-			}
829
-			// on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
830
-			// sans recours a preg_match
831
-			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
832
-			$afrom[$t][$cle] = array(
833
-				"\n" .
834
-				(isset($from_type[$cle]) ? $from_type[$cle] : "INNER") . " JOIN",
835
-				$from[$cle],
836
-				"AS $cle",
837
-				"ON (",
838
-				"$cle.$c",
839
-				"=",
840
-				"$t.$carr",
841
-				($and ? "AND " . $and : "") .
842
-				")"
843
-			);
844
-			if (isset($afrom[$cle])) {
845
-				$afrom[$t] = $afrom[$t] + $afrom[$cle];
846
-				unset($afrom[$cle]);
847
-			}
848
-			$equiv[] = $carr;
849
-		} else {
850
-			unset($join[$cledef]);
851
-			if (isset($where_simples[$cle_where_lie])) {
852
-				unset($where_simples[$cle_where_lie]);
853
-				unset($where[$cle_where_lie]);
854
-			}
855
-		}
856
-		unset($from[$cle]);
857
-		$k--;
858
-	}
859
-
860
-	if (count($afrom)) {
861
-		// Regarder si la table principale ne sert finalement a rien comme dans
862
-		//<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
863
-		//<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
864
-		//<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
865
-		// ou dans
866
-		//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
867
-		// qui comporte plusieurs jointures
868
-		// ou dans
869
-		// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
870
-		// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
871
-		// penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
872
-		// <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
873
-		// penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
874
-		// <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
875
-
876
-		$t = key($from);
877
-		$c = current($from);
878
-		reset($from);
879
-		$e = '/\b(' . "$t\\." . join("|" . $t . '\.', $equiv) . ')\b/';
880
-		if (!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
881
-				calculer_jointnul($t, $select, $e) or
882
-				calculer_jointnul($t, $join, $e) or
883
-				calculer_jointnul($t, $where, $e) or
884
-				calculer_jointnul($t, $orderby, $e) or
885
-				calculer_jointnul($t, $groupby, $e) or
886
-				calculer_jointnul($t, $having, $e))
887
-			&& count($afrom[$t])
888
-		) {
889
-			$nfrom = reset($afrom[$t]);
890
-			$nt = key($afrom[$t]);
891
-			unset($from[$t]);
892
-			$from[$nt] = $nfrom[1];
893
-			unset($afrom[$t][$nt]);
894
-			$afrom[$nt] = $afrom[$t];
895
-			unset($afrom[$t]);
896
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
897
-			$t = $nfrom[4];
898
-			$alias = "";
899
-			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
900
-			$oldcle = explode('.', $nfrom[6]);
901
-			$oldcle = end($oldcle);
902
-			$newcle = explode('.', $nfrom[4]);
903
-			$newcle = end($newcle);
904
-			if ($newcle != $oldcle) {
905
-				// si l'ancienne cle etait deja dans le select avec un AS
906
-				// reprendre simplement ce AS
907
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
908
-				if (preg_match($as, implode(',', $select), $m)) {
909
-					$alias = "";
910
-				} else {
911
-					$alias = ", " . $nfrom[4] . " AS $oldcle";
912
-				}
913
-			}
914
-			$select = remplacer_jointnul($t . $alias, $select, $e);
915
-			$join = remplacer_jointnul($t, $join, $e);
916
-			$where = remplacer_jointnul($t, $where, $e);
917
-			$having = remplacer_jointnul($t, $having, $e);
918
-			$groupby = remplacer_jointnul($t, $groupby, $e);
919
-			$orderby = remplacer_jointnul($t, $orderby, $e);
920
-		}
921
-		$from = reinjecte_joint($afrom, $from);
922
-	}
923
-	if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
924
-		$wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
925
-		$GLOBALS['debug'] = array();
926
-		if ($wasdebug) {
927
-			$GLOBALS['debug']['debug'] = true;
928
-		}
929
-	}
930
-	$GLOBALS['debug']['aucasou'] = array($table, $id, $serveur, $requeter);
931
-	$r = sql_select($select, $from, $where,
932
-		$groupby, array_filter($orderby), $limit, $having, $serveur, $requeter);
933
-	unset($GLOBALS['debug']['aucasou']);
934
-
935
-	return $r;
687
+    // retirer les criteres vides:
688
+    // {X ?} avec X absent de l'URL
689
+    // {par #ENV{X}} avec X absent de l'URL
690
+    // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
691
+    $menage = false;
692
+    foreach ($where as $k => $v) {
693
+        if (is_array($v)) {
694
+            if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
695
+                $op = false;
696
+            } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
697
+                $op = false;
698
+            } else {
699
+                $op = $v[0] ? $v[0] : $v;
700
+            }
701
+        } else {
702
+            $op = $v;
703
+        }
704
+        if ((!$op) or ($op == 1) or ($op == '0=0')) {
705
+            unset($where[$k]);
706
+            $menage = true;
707
+        }
708
+    }
709
+
710
+    // evacuer les eventuels groupby vide issus d'un calcul dynamique
711
+    $groupby = array_diff($groupby, array(''));
712
+
713
+    // remplacer les sous requetes recursives au calcul
714
+    list($where_simples, $where_sous) = trouver_sous_requetes($where);
715
+    foreach ($where_sous as $k => $w) {
716
+        $menage = true;
717
+        // on recupere la sous requete 
718
+        $sous = match_self($w);
719
+        if ($sous[0] == 'SELF') {
720
+            // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
721
+            array_push($where_simples, $sous[2]);
722
+            $wheresub = array(
723
+                $sous[2],
724
+                '0=0'
725
+            ); // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
726
+            $jsub = $join;
727
+            // trouver les jointures utiles a
728
+            // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
729
+            // ie L1.objet='article'
730
+            // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
731
+            $i = 0;
732
+            do {
733
+                $where[$k] = remplace_sous_requete($w, "(" . calculer_select(
734
+                        array($sous[1] . " AS id"),
735
+                        $from,
736
+                        $from_type,
737
+                        $wheresub,
738
+                        $jsub,
739
+                        array(), array(), '',
740
+                        $having, $table, $id, $serveur, false) . ")");
741
+                if (!$i) {
742
+                    $i = 1;
743
+                    $wherestring = calculer_where_to_string($where[$k]);
744
+                    foreach ($join as $cle => $wj) {
745
+                        if (count($wj) == 4
746
+                            and strpos($wherestring, "{$cle}.") !== false
747
+                        ) {
748
+                            $i = 0;
749
+                            $wheresub[] = $wj[3];
750
+                            unset($jsub[$cle][3]);
751
+                        }
752
+                    }
753
+                }
754
+            } while ($i++ < 1);
755
+        }
756
+        if ($sous[0] == 'SUBSELECT') {
757
+            // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
758
+            array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
759
+            $where[$k] = remplace_sous_requete($w, "(" . calculer_select(
760
+                    $sous[1], # select
761
+                    $sous[2], #from
762
+                    array(), #from_type
763
+                    $sous[3] ? (is_array($sous[3]) ? $sous[3] : array($sous[3])) : array(),
764
+                    #where, qui peut etre de la forme string comme dans sql_select
765
+                    array(), #join
766
+                    $sous[4] ? $sous[4] : array(), #groupby
767
+                    $sous[5] ? $sous[5] : array(), #orderby
768
+                    $sous[6], #limit
769
+                    $sous[7] ? $sous[7] : array(), #having
770
+                    $table, $id, $serveur, false
771
+                ) . ")");
772
+        }
773
+        array_pop($where_simples);
774
+    }
775
+
776
+    foreach ($having as $k => $v) {
777
+        if ((!$v) or ($v == 1) or ($v == '0=0')) {
778
+            unset($having[$k]);
779
+        }
780
+    }
781
+
782
+    // Installer les jointures.
783
+    // Retirer celles seulement utiles aux criteres finalement absents mais
784
+    // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
785
+    // si elle est seulement utile a Ln+1 elle meme inutile
786
+
787
+    $afrom = array();
788
+    $equiv = array();
789
+    $k = count($join);
790
+    foreach (array_reverse($join, true) as $cledef => $j) {
791
+        $cle = $cledef;
792
+        // le format de join est :
793
+        // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
794
+        $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
795
+        if (count($join[$cle]) == 2) {
796
+            $join[$cle][] = $join[$cle][1];
797
+        }
798
+        if (count($join[$cle]) == 3) {
799
+            $join[$cle][] = '';
800
+        }
801
+        list($t, $c, $carr, $and) = $join[$cle];
802
+        // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
803
+        // pour compat avec ancienne convention
804
+        if (is_numeric($cle)) {
805
+            $cle = "L$k";
806
+        }
807
+        $cle_where_lie = "JOIN-$cle";
808
+        if (!$menage
809
+            or isset($afrom[$cle])
810
+            or calculer_jointnul($cle, $select)
811
+            or calculer_jointnul($cle, array_diff_key($join, array($cle => $join[$cle])))
812
+            or calculer_jointnul($cle, $having)
813
+            or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
814
+        ) {
815
+            // corriger les references non explicites dans select
816
+            // ou groupby
817
+            foreach ($select as $i => $s) {
818
+                if ($s == $c) {
819
+                    $select[$i] = "$cle.$c AS $c";
820
+                    break;
821
+                }
822
+            }
823
+            foreach ($groupby as $i => $g) {
824
+                if ($g == $c) {
825
+                    $groupby[$i] = "$cle.$c";
826
+                    break;
827
+                }
828
+            }
829
+            // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
830
+            // sans recours a preg_match
831
+            // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
832
+            $afrom[$t][$cle] = array(
833
+                "\n" .
834
+                (isset($from_type[$cle]) ? $from_type[$cle] : "INNER") . " JOIN",
835
+                $from[$cle],
836
+                "AS $cle",
837
+                "ON (",
838
+                "$cle.$c",
839
+                "=",
840
+                "$t.$carr",
841
+                ($and ? "AND " . $and : "") .
842
+                ")"
843
+            );
844
+            if (isset($afrom[$cle])) {
845
+                $afrom[$t] = $afrom[$t] + $afrom[$cle];
846
+                unset($afrom[$cle]);
847
+            }
848
+            $equiv[] = $carr;
849
+        } else {
850
+            unset($join[$cledef]);
851
+            if (isset($where_simples[$cle_where_lie])) {
852
+                unset($where_simples[$cle_where_lie]);
853
+                unset($where[$cle_where_lie]);
854
+            }
855
+        }
856
+        unset($from[$cle]);
857
+        $k--;
858
+    }
859
+
860
+    if (count($afrom)) {
861
+        // Regarder si la table principale ne sert finalement a rien comme dans
862
+        //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
863
+        //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
864
+        //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
865
+        // ou dans
866
+        //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
867
+        // qui comporte plusieurs jointures
868
+        // ou dans
869
+        // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
870
+        // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
871
+        // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
872
+        // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
873
+        // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
874
+        // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
875
+
876
+        $t = key($from);
877
+        $c = current($from);
878
+        reset($from);
879
+        $e = '/\b(' . "$t\\." . join("|" . $t . '\.', $equiv) . ')\b/';
880
+        if (!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
881
+                calculer_jointnul($t, $select, $e) or
882
+                calculer_jointnul($t, $join, $e) or
883
+                calculer_jointnul($t, $where, $e) or
884
+                calculer_jointnul($t, $orderby, $e) or
885
+                calculer_jointnul($t, $groupby, $e) or
886
+                calculer_jointnul($t, $having, $e))
887
+            && count($afrom[$t])
888
+        ) {
889
+            $nfrom = reset($afrom[$t]);
890
+            $nt = key($afrom[$t]);
891
+            unset($from[$t]);
892
+            $from[$nt] = $nfrom[1];
893
+            unset($afrom[$t][$nt]);
894
+            $afrom[$nt] = $afrom[$t];
895
+            unset($afrom[$t]);
896
+            $e = '/\b' . preg_quote($nfrom[6]) . '\b/';
897
+            $t = $nfrom[4];
898
+            $alias = "";
899
+            // verifier que les deux cles sont homonymes, sinon installer un alias dans le select
900
+            $oldcle = explode('.', $nfrom[6]);
901
+            $oldcle = end($oldcle);
902
+            $newcle = explode('.', $nfrom[4]);
903
+            $newcle = end($newcle);
904
+            if ($newcle != $oldcle) {
905
+                // si l'ancienne cle etait deja dans le select avec un AS
906
+                // reprendre simplement ce AS
907
+                $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
908
+                if (preg_match($as, implode(',', $select), $m)) {
909
+                    $alias = "";
910
+                } else {
911
+                    $alias = ", " . $nfrom[4] . " AS $oldcle";
912
+                }
913
+            }
914
+            $select = remplacer_jointnul($t . $alias, $select, $e);
915
+            $join = remplacer_jointnul($t, $join, $e);
916
+            $where = remplacer_jointnul($t, $where, $e);
917
+            $having = remplacer_jointnul($t, $having, $e);
918
+            $groupby = remplacer_jointnul($t, $groupby, $e);
919
+            $orderby = remplacer_jointnul($t, $orderby, $e);
920
+        }
921
+        $from = reinjecte_joint($afrom, $from);
922
+    }
923
+    if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
924
+        $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
925
+        $GLOBALS['debug'] = array();
926
+        if ($wasdebug) {
927
+            $GLOBALS['debug']['debug'] = true;
928
+        }
929
+    }
930
+    $GLOBALS['debug']['aucasou'] = array($table, $id, $serveur, $requeter);
931
+    $r = sql_select($select, $from, $where,
932
+        $groupby, array_filter($orderby), $limit, $having, $serveur, $requeter);
933
+    unset($GLOBALS['debug']['aucasou']);
934
+
935
+    return $r;
936 936
 }
937 937
 
938 938
 /**
@@ -943,20 +943,20 @@  discard block
 block discarded – undo
943 943
  * @return string
944 944
  */
945 945
 function calculer_where_to_string($v, $join = 'AND') {
946
-	if (empty($v)) {
947
-		return '';
948
-	}
949
-
950
-	if (!is_array($v)) {
951
-		return $v;
952
-	} else {
953
-		$exp = "";
954
-		if (strtoupper($join) === 'AND') {
955
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
956
-		} else {
957
-			return $exp . join($join, $v);
958
-		}
959
-	}
946
+    if (empty($v)) {
947
+        return '';
948
+    }
949
+
950
+    if (!is_array($v)) {
951
+        return $v;
952
+    } else {
953
+        $exp = "";
954
+        if (strtoupper($join) === 'AND') {
955
+            return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
956
+        } else {
957
+            return $exp . join($join, $v);
958
+        }
959
+    }
960 960
 }
961 961
 
962 962
 
@@ -964,62 +964,62 @@  discard block
 block discarded – undo
964 964
 
965 965
 // https://code.spip.net/@calculer_jointnul
966 966
 function calculer_jointnul($cle, $exp, $equiv = '') {
967
-	if (!is_array($exp)) {
968
-		if ($equiv) {
969
-			$exp = preg_replace($equiv, '', $exp);
970
-		}
971
-
972
-		return preg_match("/\\b$cle\\./", $exp);
973
-	} else {
974
-		foreach ($exp as $v) {
975
-			if (calculer_jointnul($cle, $v, $equiv)) {
976
-				return true;
977
-			}
978
-		}
979
-
980
-		return false;
981
-	}
967
+    if (!is_array($exp)) {
968
+        if ($equiv) {
969
+            $exp = preg_replace($equiv, '', $exp);
970
+        }
971
+
972
+        return preg_match("/\\b$cle\\./", $exp);
973
+    } else {
974
+        foreach ($exp as $v) {
975
+            if (calculer_jointnul($cle, $v, $equiv)) {
976
+                return true;
977
+            }
978
+        }
979
+
980
+        return false;
981
+    }
982 982
 }
983 983
 
984 984
 // https://code.spip.net/@reinjecte_joint
985 985
 function reinjecte_joint($afrom, $from) {
986
-	$from_synth = array();
987
-	foreach ($from as $k => $v) {
988
-		$from_synth[$k] = $from[$k];
989
-		if (isset($afrom[$k])) {
990
-			foreach ($afrom[$k] as $kk => $vv) {
991
-				$afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
992
-			}
993
-			$from_synth["$k@"] = implode(' ', $afrom[$k]);
994
-			unset($afrom[$k]);
995
-		}
996
-	}
997
-
998
-	return $from_synth;
986
+    $from_synth = array();
987
+    foreach ($from as $k => $v) {
988
+        $from_synth[$k] = $from[$k];
989
+        if (isset($afrom[$k])) {
990
+            foreach ($afrom[$k] as $kk => $vv) {
991
+                $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
992
+            }
993
+            $from_synth["$k@"] = implode(' ', $afrom[$k]);
994
+            unset($afrom[$k]);
995
+        }
996
+    }
997
+
998
+    return $from_synth;
999 999
 }
1000 1000
 
1001 1001
 // https://code.spip.net/@remplacer_jointnul
1002 1002
 function remplacer_jointnul($cle, $exp, $equiv = '') {
1003
-	if (!is_array($exp)) {
1004
-		return preg_replace($equiv, $cle, $exp);
1005
-	} else {
1006
-		foreach ($exp as $k => $v) {
1007
-			$exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1008
-		}
1009
-
1010
-		return $exp;
1011
-	}
1003
+    if (!is_array($exp)) {
1004
+        return preg_replace($equiv, $cle, $exp);
1005
+    } else {
1006
+        foreach ($exp as $k => $v) {
1007
+            $exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1008
+        }
1009
+
1010
+        return $exp;
1011
+    }
1012 1012
 }
1013 1013
 
1014 1014
 // calcul du nom du squelette
1015 1015
 // https://code.spip.net/@calculer_nom_fonction_squel
1016 1016
 function calculer_nom_fonction_squel($skel, $mime_type = 'html', $connect = '') {
1017
-	// ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1018
-	if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1019
-		$skel = substr($skel, strlen(_DIR_RACINE));
1020
-	}
1021
-
1022
-	return $mime_type
1023
-	. (!$connect ? '' : preg_replace('/\W/', "_", $connect)) . '_'
1024
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1017
+    // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1018
+    if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1019
+        $skel = substr($skel, strlen(_DIR_RACINE));
1020
+    }
1021
+
1022
+    return $mime_type
1023
+    . (!$connect ? '' : preg_replace('/\W/', "_", $connect)) . '_'
1024
+    . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1025 1025
 }
Please login to merge, or discard this patch.
Spacing   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -54,7 +54,7 @@  discard block
 block discarded – undo
54 54
 		$GLOBALS['debug_objets']['courant'] = $nom;
55 55
 	}
56 56
 
57
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
57
+	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true).$nom.'.php';
58 58
 
59 59
 	// si squelette est deja compile et perenne, le charger
60 60
 	if (!squelette_obsolete($phpfile, $source)) {
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
 		#}
68 68
 	}
69 69
 
70
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
70
+	if (file_exists($lib = $squelette.'_fonctions'.'.php')) {
71 71
 		include_once $lib;
72 72
 	}
73 73
 
@@ -95,7 +95,7 @@  discard block
 block discarded – undo
95 95
 			eval("return true; $f ;");
96 96
 		} catch (\ParseError $e) {
97 97
 			// Code syntaxiquement faux (critere etc mal programme')
98
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
98
+			$msg = _T('zbug_erreur_compilation').' | Line '.$e->getLine().' : '.$e->getMessage();
99 99
 			erreur_squelette($msg, $boucle);
100 100
 			// continuer pour trouver d'autres fautes eventuelles
101 101
 			// mais prevenir que c'est mort
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
 	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
125 125
 
126 126
 		// Tracer ce qui vient d'etre compile
127
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
127
+		$GLOBALS['debug_objets']['code'][$nom.'tout'] = $code;
128 128
 
129 129
 		// si c'est ce que demande le debusqueur, lui passer la main
130 130
 		if ($GLOBALS['debug_objets']['sourcefile']
@@ -146,13 +146,13 @@  discard block
 block discarded – undo
146 146
 		$code = "
147 147
 /*
148 148
  * Squelette : $sourcefile
149
- * Date :      " . gmdate("D, d M Y H:i:s", @filemtime($sourcefile)) . " GMT
150
- * Compile :   " . gmdate("D, d M Y H:i:s", time()) . " GMT
151
- * " . (!$boucles ? "Pas de boucle" : ("Boucles :   " . $noms)) . "
149
+ * Date :      ".gmdate("D, d M Y H:i:s", @filemtime($sourcefile))." GMT
150
+ * Compile :   " . gmdate("D, d M Y H:i:s", time())." GMT
151
+ * " . (!$boucles ? "Pas de boucle" : ("Boucles :   ".$noms))."
152 152
  */ ";
153 153
 	}
154 154
 
155
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n?" . '>';
155
+	$code = '<'."?php\n".$code.join('', $boucles)."\n?".'>';
156 156
 	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
157 157
 		ecrire_fichier($phpfile, $code);
158 158
 	}
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
 			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
213 213
 
214 214
 			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
215
-				$headers[$j] .= "|" . $r[3];
215
+				$headers[$j] .= "|".$r[3];
216 216
 			} else {
217 217
 				$headers[$j] = $r[3];
218 218
 			}
@@ -220,10 +220,10 @@  discard block
 block discarded – undo
220 220
 	}
221 221
 	// S'agit-il d'un resultat constant ou contenant du code php
222 222
 	$process_ins = (
223
-		strpos($corps, '<' . '?') === false
223
+		strpos($corps, '<'.'?') === false
224 224
 		or
225
-		(strpos($corps, '<' . '?xml') !== false and
226
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
225
+		(strpos($corps, '<'.'?xml') !== false and
226
+			strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
227 227
 	)
228 228
 		? 'html'
229 229
 		: 'php';
@@ -252,10 +252,10 @@  discard block
 block discarded – undo
252 252
 
253 253
 		if ($process_ins == 'html') {
254 254
 			$skel['process_ins'] = (
255
-				strpos($corps, '<' . '?') === false
255
+				strpos($corps, '<'.'?') === false
256 256
 				or
257
-				(strpos($corps, '<' . '?xml') !== false and
258
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
257
+				(strpos($corps, '<'.'?xml') !== false and
258
+					strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
259 259
 			)
260 260
 				? 'html'
261 261
 				: 'php';
@@ -273,7 +273,7 @@  discard block
 block discarded – undo
273 273
 //
274 274
 
275 275
 /** Code PHP pour inclure une balise dynamique à l'exécution d'une page */
276
-define('CODE_INCLURE_BALISE', '<' . '?php 
276
+define('CODE_INCLURE_BALISE', '<'.'?php 
277 277
 include_once("%s");
278 278
 if ($lang_select = "%s") $lang_select = lang_select($lang_select);
279 279
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
@@ -304,7 +304,7 @@  discard block
 block discarded – undo
304 304
 		// pas de lien symbolique sous Windows
305 305
 		and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false)
306 306
 	) {
307
-		$file = './" . _DIR_RACINE . "' . $file;
307
+		$file = './" . _DIR_RACINE . "'.$file;
308 308
 	}
309 309
 
310 310
 	$lang = $context_compil[4];
@@ -346,14 +346,14 @@  discard block
 block discarded – undo
346 346
 	if (is_object($v)) {
347 347
 		return var_export($v, true);
348 348
 	} elseif (!is_array($v)) {
349
-		return "'" . texte_script($v) . "'";
349
+		return "'".texte_script($v)."'";
350 350
 	} else {
351 351
 		$out = array();
352 352
 		foreach ($v as $k => $val) {
353
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
353
+			$out [] = argumenter_squelette($k).'=>'.argumenter_squelette($val);
354 354
 		}
355 355
 
356
-		return 'array(' . join(", ", $out) . ')';
356
+		return 'array('.join(", ", $out).')';
357 357
 	}
358 358
 }
359 359
 
@@ -429,7 +429,7 @@  discard block
 block discarded – undo
429 429
 	}
430 430
 
431 431
 	// Y a-t-il une fonction de traitement des arguments ?
432
-	$f = 'balise_' . $nom_balise . '_stat';
432
+	$f = 'balise_'.$nom_balise.'_stat';
433 433
 
434 434
 	$r = !function_exists($f) ? $args : $f($args, $context_compil);
435 435
 
@@ -439,18 +439,18 @@  discard block
 block discarded – undo
439 439
 
440 440
 	// verifier que la fonction dyn est la, 
441 441
 	// sinon se replier sur la generique si elle existe
442
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
442
+	if (!function_exists('balise_'.$nom_balise.'_dyn')) {
443 443
 		if (
444 444
 			$balise_generique = chercher_balise_generique($nom)
445 445
 			and $nom_balise_generique = $balise_generique['nom_generique']
446
-			and $file = include_spip("balise/" . strtolower($nom_balise_generique))
447
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
446
+			and $file = include_spip("balise/".strtolower($nom_balise_generique))
447
+			and function_exists('balise_'.$nom_balise_generique.'_dyn')
448 448
 		) {
449 449
 			// et lui injecter en premier arg le nom de la balise 
450 450
 			array_unshift($r, $nom);
451 451
 			$nom_balise = $nom_balise_generique;
452 452
 			if (!_DIR_RESTREINT) {
453
-				$file = _DIR_RESTREINT_ABS . $file;
453
+				$file = _DIR_RESTREINT_ABS.$file;
454 454
 			}
455 455
 		} else {
456 456
 			$msg = array('zbug_balise_inexistante', array('from' => 'CVT', 'balise' => $nom));
@@ -551,7 +551,7 @@  discard block
 block discarded – undo
551 551
 		$n = '';
552 552
 		foreach (explode(',', $liste) as $val) {
553 553
 			if ($a = intval($val) and $val === strval($a)) {
554
-				$n .= ',' . $val;
554
+				$n .= ','.$val;
555 555
 			}
556 556
 		}
557 557
 		if (strlen($n)) {
@@ -730,14 +730,14 @@  discard block
 block discarded – undo
730 730
 			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
731 731
 			$i = 0;
732 732
 			do {
733
-				$where[$k] = remplace_sous_requete($w, "(" . calculer_select(
734
-						array($sous[1] . " AS id"),
733
+				$where[$k] = remplace_sous_requete($w, "(".calculer_select(
734
+						array($sous[1]." AS id"),
735 735
 						$from,
736 736
 						$from_type,
737 737
 						$wheresub,
738 738
 						$jsub,
739 739
 						array(), array(), '',
740
-						$having, $table, $id, $serveur, false) . ")");
740
+						$having, $table, $id, $serveur, false).")");
741 741
 				if (!$i) {
742 742
 					$i = 1;
743 743
 					$wherestring = calculer_where_to_string($where[$k]);
@@ -756,7 +756,7 @@  discard block
 block discarded – undo
756 756
 		if ($sous[0] == 'SUBSELECT') {
757 757
 			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
758 758
 			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
759
-			$where[$k] = remplace_sous_requete($w, "(" . calculer_select(
759
+			$where[$k] = remplace_sous_requete($w, "(".calculer_select(
760 760
 					$sous[1], # select
761 761
 					$sous[2], #from
762 762
 					array(), #from_type
@@ -768,7 +768,7 @@  discard block
 block discarded – undo
768 768
 					$sous[6], #limit
769 769
 					$sous[7] ? $sous[7] : array(), #having
770 770
 					$table, $id, $serveur, false
771
-				) . ")");
771
+				).")");
772 772
 		}
773 773
 		array_pop($where_simples);
774 774
 	}
@@ -830,15 +830,15 @@  discard block
 block discarded – undo
830 830
 			// sans recours a preg_match
831 831
 			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
832 832
 			$afrom[$t][$cle] = array(
833
-				"\n" .
834
-				(isset($from_type[$cle]) ? $from_type[$cle] : "INNER") . " JOIN",
833
+				"\n".
834
+				(isset($from_type[$cle]) ? $from_type[$cle] : "INNER")." JOIN",
835 835
 				$from[$cle],
836 836
 				"AS $cle",
837 837
 				"ON (",
838 838
 				"$cle.$c",
839 839
 				"=",
840 840
 				"$t.$carr",
841
-				($and ? "AND " . $and : "") .
841
+				($and ? "AND ".$and : "").
842 842
 				")"
843 843
 			);
844 844
 			if (isset($afrom[$cle])) {
@@ -876,7 +876,7 @@  discard block
 block discarded – undo
876 876
 		$t = key($from);
877 877
 		$c = current($from);
878 878
 		reset($from);
879
-		$e = '/\b(' . "$t\\." . join("|" . $t . '\.', $equiv) . ')\b/';
879
+		$e = '/\b('."$t\\.".join("|".$t.'\.', $equiv).')\b/';
880 880
 		if (!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
881 881
 				calculer_jointnul($t, $select, $e) or
882 882
 				calculer_jointnul($t, $join, $e) or
@@ -893,7 +893,7 @@  discard block
 block discarded – undo
893 893
 			unset($afrom[$t][$nt]);
894 894
 			$afrom[$nt] = $afrom[$t];
895 895
 			unset($afrom[$t]);
896
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
896
+			$e = '/\b'.preg_quote($nfrom[6]).'\b/';
897 897
 			$t = $nfrom[4];
898 898
 			$alias = "";
899 899
 			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
@@ -904,14 +904,14 @@  discard block
 block discarded – undo
904 904
 			if ($newcle != $oldcle) {
905 905
 				// si l'ancienne cle etait deja dans le select avec un AS
906 906
 				// reprendre simplement ce AS
907
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
907
+				$as = '/\b'.preg_quote($nfrom[6]).'\s+(AS\s+\w+)\b/';
908 908
 				if (preg_match($as, implode(',', $select), $m)) {
909 909
 					$alias = "";
910 910
 				} else {
911
-					$alias = ", " . $nfrom[4] . " AS $oldcle";
911
+					$alias = ", ".$nfrom[4]." AS $oldcle";
912 912
 				}
913 913
 			}
914
-			$select = remplacer_jointnul($t . $alias, $select, $e);
914
+			$select = remplacer_jointnul($t.$alias, $select, $e);
915 915
 			$join = remplacer_jointnul($t, $join, $e);
916 916
 			$where = remplacer_jointnul($t, $where, $e);
917 917
 			$having = remplacer_jointnul($t, $having, $e);
@@ -952,9 +952,9 @@  discard block
 block discarded – undo
952 952
 	} else {
953 953
 		$exp = "";
954 954
 		if (strtoupper($join) === 'AND') {
955
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
955
+			return $exp.join(" $join ", array_map('calculer_where_to_string', $v));
956 956
 		} else {
957
-			return $exp . join($join, $v);
957
+			return $exp.join($join, $v);
958 958
 		}
959 959
 	}
960 960
 }
@@ -1020,6 +1020,6 @@  discard block
 block discarded – undo
1020 1020
 	}
1021 1021
 
1022 1022
 	return $mime_type
1023
-	. (!$connect ? '' : preg_replace('/\W/', "_", $connect)) . '_'
1024
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1023
+	. (!$connect ? '' : preg_replace('/\W/', "_", $connect)).'_'
1024
+	. md5($GLOBALS['spip_version_code'].' * '.$skel.(isset($GLOBALS['marqueur_skel']) ? '*'.$GLOBALS['marqueur_skel'] : ''));
1025 1025
 }
Please login to merge, or discard this patch.