Completed
Push — master ( a5da4e...51674a )
by cam
01:27
created
ecrire/public/composer.php 3 patches
Indentation   +768 added lines, -768 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('inc/texte');
@@ -40,234 +40,234 @@  discard block
 block discarded – undo
40 40
 
41 41
 function public_composer_dist($squelette, $mime_type, $gram, $source, string $connect = '') {
42 42
 
43
-	$skel = null;
44
-	$boucle = null;
45
-	$nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
46
-
47
-	//  si deja en memoire (INCLURE  a repetition) c'est bon.
48
-	if (function_exists($nom)) {
49
-		return $nom;
50
-	}
51
-
52
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
53
-		$GLOBALS['debug_objets']['courant'] = $nom;
54
-	}
55
-
56
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
57
-
58
-	// si squelette est deja compile et perenne, le charger
59
-	if (!squelette_obsolete($phpfile, $source)) {
60
-		include_once $phpfile;
61
-		#if (!squelette_obsolete($phpfile, $source)
62
-		#  AND lire_fichier ($phpfile, $skel_code,
63
-		#  array('critique' => 'oui', 'phpcheck' => 'oui'))){
64
-		## eval('?'.'>'.$skel_code);
65
-		#	 spip_log($skel_code, 'comp')
66
-		#}
67
-	}
68
-
69
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
70
-		include_once $lib;
71
-	}
72
-
73
-	// tester si le eval ci-dessus a mis le squelette en memoire
74
-
75
-	if (function_exists($nom)) {
76
-		return $nom;
77
-	}
78
-
79
-	// charger le source, si possible, et compiler
80
-	$skel_code = '';
81
-	if (lire_fichier($source, $skel)) {
82
-		$compiler = charger_fonction('compiler', 'public');
83
-		$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
84
-	}
85
-
86
-	// Ne plus rien faire si le compilateur n'a pas pu operer.
87
-	if (!$skel_code) {
88
-		return false;
89
-	}
90
-
91
-	foreach ($skel_code as $id => $boucle) {
92
-		$f = $boucle->return;
93
-		try {
94
-			eval("return true; $f ;");
95
-		} catch (\ParseError $e) {
96
-			// Code syntaxiquement faux (critere etc mal programme')
97
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
98
-			erreur_squelette($msg, $boucle);
99
-			// continuer pour trouver d'autres fautes eventuelles
100
-			// mais prevenir que c'est mort
101
-			$nom = '';
102
-		}
103
-
104
-		// contexte de compil inutile a present
105
-		// (mais la derniere valeur de $boucle est utilisee ci-dessous)
106
-		$skel_code[$id] = $f;
107
-	}
108
-
109
-	$code = '';
110
-	if ($nom) {
111
-		// Si le code est bon, concatener et mettre en cache
112
-		if (function_exists($nom)) {
113
-			$code = squelette_traduit($skel, $source, $phpfile, $skel_code);
114
-		} else {
115
-			// code semantiquement faux: bug du compilateur
116
-			// $boucle est en fait ici la fct principale du squelette
117
-			$msg = _T('zbug_erreur_compilation');
118
-			erreur_squelette($msg, $boucle);
119
-			$nom = '';
120
-		}
121
-	}
122
-
123
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
124
-		// Tracer ce qui vient d'etre compile
125
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
126
-
127
-		// si c'est ce que demande le debusqueur, lui passer la main
128
-		if (
129
-			$GLOBALS['debug_objets']['sourcefile']
130
-			and (_request('var_mode_objet') == $nom)
131
-			and (_request('var_mode_affiche') == 'code')
132
-		) {
133
-			erreur_squelette();
134
-		}
135
-	}
136
-
137
-	return $nom ?: false;
43
+    $skel = null;
44
+    $boucle = null;
45
+    $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
46
+
47
+    //  si deja en memoire (INCLURE  a repetition) c'est bon.
48
+    if (function_exists($nom)) {
49
+        return $nom;
50
+    }
51
+
52
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
53
+        $GLOBALS['debug_objets']['courant'] = $nom;
54
+    }
55
+
56
+    $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
57
+
58
+    // si squelette est deja compile et perenne, le charger
59
+    if (!squelette_obsolete($phpfile, $source)) {
60
+        include_once $phpfile;
61
+        #if (!squelette_obsolete($phpfile, $source)
62
+        #  AND lire_fichier ($phpfile, $skel_code,
63
+        #  array('critique' => 'oui', 'phpcheck' => 'oui'))){
64
+        ## eval('?'.'>'.$skel_code);
65
+        #	 spip_log($skel_code, 'comp')
66
+        #}
67
+    }
68
+
69
+    if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
70
+        include_once $lib;
71
+    }
72
+
73
+    // tester si le eval ci-dessus a mis le squelette en memoire
74
+
75
+    if (function_exists($nom)) {
76
+        return $nom;
77
+    }
78
+
79
+    // charger le source, si possible, et compiler
80
+    $skel_code = '';
81
+    if (lire_fichier($source, $skel)) {
82
+        $compiler = charger_fonction('compiler', 'public');
83
+        $skel_code = $compiler($skel, $nom, $gram, $source, $connect);
84
+    }
85
+
86
+    // Ne plus rien faire si le compilateur n'a pas pu operer.
87
+    if (!$skel_code) {
88
+        return false;
89
+    }
90
+
91
+    foreach ($skel_code as $id => $boucle) {
92
+        $f = $boucle->return;
93
+        try {
94
+            eval("return true; $f ;");
95
+        } catch (\ParseError $e) {
96
+            // Code syntaxiquement faux (critere etc mal programme')
97
+            $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
98
+            erreur_squelette($msg, $boucle);
99
+            // continuer pour trouver d'autres fautes eventuelles
100
+            // mais prevenir que c'est mort
101
+            $nom = '';
102
+        }
103
+
104
+        // contexte de compil inutile a present
105
+        // (mais la derniere valeur de $boucle est utilisee ci-dessous)
106
+        $skel_code[$id] = $f;
107
+    }
108
+
109
+    $code = '';
110
+    if ($nom) {
111
+        // Si le code est bon, concatener et mettre en cache
112
+        if (function_exists($nom)) {
113
+            $code = squelette_traduit($skel, $source, $phpfile, $skel_code);
114
+        } else {
115
+            // code semantiquement faux: bug du compilateur
116
+            // $boucle est en fait ici la fct principale du squelette
117
+            $msg = _T('zbug_erreur_compilation');
118
+            erreur_squelette($msg, $boucle);
119
+            $nom = '';
120
+        }
121
+    }
122
+
123
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
124
+        // Tracer ce qui vient d'etre compile
125
+        $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
126
+
127
+        // si c'est ce que demande le debusqueur, lui passer la main
128
+        if (
129
+            $GLOBALS['debug_objets']['sourcefile']
130
+            and (_request('var_mode_objet') == $nom)
131
+            and (_request('var_mode_affiche') == 'code')
132
+        ) {
133
+            erreur_squelette();
134
+        }
135
+    }
136
+
137
+    return $nom ?: false;
138 138
 }
139 139
 
140 140
 function squelette_traduit($squelette, $sourcefile, $phpfile, $boucles) {
141 141
 
142
-	$code = null;
143
-	// Le dernier index est '' (fonction principale)
144
-	$noms = substr(join(', ', array_keys($boucles)), 0, -2);
145
-	if (CODE_COMMENTE) {
146
-		$code = "
142
+    $code = null;
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
 function squelette_obsolete($skel, $squelette) {
165
-	static $date_change = null;
166
-	// ne verifier la date de mes_fonctions et mes_options qu'une seule fois
167
-	// par hit
168
-	if (is_null($date_change)) {
169
-		if (@file_exists($fonc = 'mes_fonctions.php')) {
170
-			$date_change = @filemtime($fonc);
171
-		} # compatibilite
172
-		if (defined('_FILE_OPTIONS')) {
173
-			$date_change = max($date_change, @filemtime(_FILE_OPTIONS));
174
-		}
175
-	}
176
-
177
-	return (
178
-		(defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
179
-		or !@file_exists($skel)
180
-		or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
181
-			> ($date = @filemtime($skel)))
182
-		or ($date_change > $date)
183
-	);
165
+    static $date_change = null;
166
+    // ne verifier la date de mes_fonctions et mes_options qu'une seule fois
167
+    // par hit
168
+    if (is_null($date_change)) {
169
+        if (@file_exists($fonc = 'mes_fonctions.php')) {
170
+            $date_change = @filemtime($fonc);
171
+        } # compatibilite
172
+        if (defined('_FILE_OPTIONS')) {
173
+            $date_change = max($date_change, @filemtime(_FILE_OPTIONS));
174
+        }
175
+    }
176
+
177
+    return (
178
+        (defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
179
+        or !@file_exists($skel)
180
+        or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
181
+            > ($date = @filemtime($skel)))
182
+        or ($date_change > $date)
183
+    );
184 184
 }
185 185
 
186 186
 // Activer l'invalideur de session
187 187
 function invalideur_session(&$Cache, $code = null) {
188
-	$Cache['session'] = spip_session();
188
+    $Cache['session'] = spip_session();
189 189
 
190
-	return $code;
190
+    return $code;
191 191
 }
192 192
 
193 193
 
194 194
 function analyse_resultat_skel($nom, $cache, $corps, $source = '') {
195
-	static $filtres = [];
196
-	$headers = [];
197
-	$corps ??= '';
198
-
199
-	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
200
-	// note: on essaie d'attrapper aussi certains de ces entetes codes
201
-	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
202
-	if (
203
-		stripos($corps, 'header') !== false
204
-		and preg_match_all(
205
-			'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
206
-			$corps,
207
-			$regs,
208
-			PREG_SET_ORDER
209
-		)
210
-	) {
211
-		foreach ($regs as $r) {
212
-			$corps = str_replace($r[0], '', $corps);
213
-			# $j = Content-Type, et pas content-TYPE.
214
-			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
215
-
216
-			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
217
-				$headers[$j] .= '|' . $r[3];
218
-			} else {
219
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
220
-			}
221
-		}
222
-	}
223
-	// S'agit-il d'un resultat constant ou contenant du code php
224
-	$process_ins = (
225
-		strpos($corps, '<' . '?') === false
226
-		or
227
-		(strpos($corps, '<' . '?xml') !== false and
228
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
229
-	)
230
-		? 'html'
231
-		: 'php';
232
-
233
-	$skel = [
234
-		'squelette' => $nom,
235
-		'source' => $source,
236
-		'process_ins' => $process_ins,
237
-		'invalideurs' => $cache,
238
-		'entetes' => $headers,
239
-		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
240
-	];
241
-
242
-	// traiter #FILTRE{} et filtres
243
-	if (!isset($filtres[$nom])) {
244
-		$filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
245
-	}
246
-	$filtres_headers = [];
247
-	if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
248
-		$filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
249
-		unset($headers['X-Spip-Filtre']);
250
-	}
251
-	if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
252
-		include_spip('public/sandbox');
253
-		$corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
254
-
255
-		if ($process_ins == 'html') {
256
-			$skel['process_ins'] = (
257
-				strpos($corps, '<' . '?') === false
258
-				or
259
-				(strpos($corps, '<' . '?xml') !== false and
260
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
261
-			)
262
-				? 'html'
263
-				: 'php';
264
-		}
265
-	}
266
-
267
-	$skel['entetes'] = $headers;
268
-	$skel['texte'] = $corps;
269
-
270
-	return $skel;
195
+    static $filtres = [];
196
+    $headers = [];
197
+    $corps ??= '';
198
+
199
+    // Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
200
+    // note: on essaie d'attrapper aussi certains de ces entetes codes
201
+    // "a la main" dans les squelettes, mais evidemment sans exhaustivite
202
+    if (
203
+        stripos($corps, 'header') !== false
204
+        and preg_match_all(
205
+            '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
206
+            $corps,
207
+            $regs,
208
+            PREG_SET_ORDER
209
+        )
210
+    ) {
211
+        foreach ($regs as $r) {
212
+            $corps = str_replace($r[0], '', $corps);
213
+            # $j = Content-Type, et pas content-TYPE.
214
+            $j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
215
+
216
+            if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
217
+                $headers[$j] .= '|' . $r[3];
218
+            } else {
219
+                $headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
220
+            }
221
+        }
222
+    }
223
+    // S'agit-il d'un resultat constant ou contenant du code php
224
+    $process_ins = (
225
+        strpos($corps, '<' . '?') === false
226
+        or
227
+        (strpos($corps, '<' . '?xml') !== false and
228
+            strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
229
+    )
230
+        ? 'html'
231
+        : 'php';
232
+
233
+    $skel = [
234
+        'squelette' => $nom,
235
+        'source' => $source,
236
+        'process_ins' => $process_ins,
237
+        'invalideurs' => $cache,
238
+        'entetes' => $headers,
239
+        'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
240
+    ];
241
+
242
+    // traiter #FILTRE{} et filtres
243
+    if (!isset($filtres[$nom])) {
244
+        $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
245
+    }
246
+    $filtres_headers = [];
247
+    if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
248
+        $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
249
+        unset($headers['X-Spip-Filtre']);
250
+    }
251
+    if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
252
+        include_spip('public/sandbox');
253
+        $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
254
+
255
+        if ($process_ins == 'html') {
256
+            $skel['process_ins'] = (
257
+                strpos($corps, '<' . '?') === false
258
+                or
259
+                (strpos($corps, '<' . '?xml') !== false and
260
+                    strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
261
+            )
262
+                ? 'html'
263
+                : 'php';
264
+        }
265
+    }
266
+
267
+    $skel['entetes'] = $headers;
268
+    $skel['texte'] = $corps;
269
+
270
+    return $skel;
271 271
 }
272 272
 
273 273
 //
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
282 282
 if ($lang_select) lang_select();
283 283
 ?'
284
-	. '>');
284
+    . '>');
285 285
 
286 286
 /**
287 287
  * Synthétise une balise dynamique : crée l'appel à l'inclusion
@@ -301,35 +301,35 @@  discard block
 block discarded – undo
301 301
  *     Code PHP pour inclure le squelette de la balise dynamique
302 302
  **/
303 303
 function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
304
-	if (
305
-		strncmp($file, '/', 1) !== 0
306
-		// pas de lien symbolique sous Windows
307
-		and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
308
-	) {
309
-		$file = './" . _DIR_RACINE . "' . $file;
310
-	}
311
-
312
-	$lang = $context_compil[4];
313
-	if (preg_match(',\W,', $lang)) {
314
-		$lang = '';
315
-	}
316
-
317
-	$args = array_map('argumenter_squelette', $args);
318
-	if (!empty($context_compil['appel_php_depuis_modele'])) {
319
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
320
-	}
321
-	$args = join(', ', $args);
322
-
323
-	$r = sprintf(
324
-		CODE_INCLURE_BALISE,
325
-		$file,
326
-		$lang,
327
-		$nom,
328
-		$args,
329
-		join(', ', array_map('_q', $context_compil))
330
-	);
331
-
332
-	return $r;
304
+    if (
305
+        strncmp($file, '/', 1) !== 0
306
+        // pas de lien symbolique sous Windows
307
+        and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
308
+    ) {
309
+        $file = './" . _DIR_RACINE . "' . $file;
310
+    }
311
+
312
+    $lang = $context_compil[4];
313
+    if (preg_match(',\W,', $lang)) {
314
+        $lang = '';
315
+    }
316
+
317
+    $args = array_map('argumenter_squelette', $args);
318
+    if (!empty($context_compil['appel_php_depuis_modele'])) {
319
+        $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
320
+    }
321
+    $args = join(', ', $args);
322
+
323
+    $r = sprintf(
324
+        CODE_INCLURE_BALISE,
325
+        $file,
326
+        $lang,
327
+        $nom,
328
+        $args,
329
+        join(', ', array_map('_q', $context_compil))
330
+    );
331
+
332
+    return $r;
333 333
 }
334 334
 
335 335
 /**
@@ -347,18 +347,18 @@  discard block
 block discarded – undo
347 347
  **/
348 348
 function argumenter_squelette($v) {
349 349
 
350
-	if (is_object($v)) {
351
-		return var_export($v, true);
352
-	} elseif (!is_array($v)) {
353
-		return "'" . texte_script((string) $v) . "'";
354
-	} else {
355
-		$out = [];
356
-		foreach ($v as $k => $val) {
357
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
358
-		}
359
-
360
-		return 'array(' . join(', ', $out) . ')';
361
-	}
350
+    if (is_object($v)) {
351
+        return var_export($v, true);
352
+    } elseif (!is_array($v)) {
353
+        return "'" . texte_script((string) $v) . "'";
354
+    } else {
355
+        $out = [];
356
+        foreach ($v as $k => $val) {
357
+            $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
358
+        }
359
+
360
+        return 'array(' . join(', ', $out) . ')';
361
+    }
362 362
 }
363 363
 
364 364
 /**
@@ -377,13 +377,13 @@  discard block
 block discarded – undo
377 377
  * @return string
378 378
  */
379 379
 function executer_balise_dynamique_dans_un_modele(...$args) {
380
-	if (test_espace_prive()) {
381
-		return executer_balise_dynamique(...$args);
382
-	}
383
-	else {
384
-		$str_args = base64_encode(serialize($args));
385
-		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
386
-	}
380
+    if (test_espace_prive()) {
381
+        return executer_balise_dynamique(...$args);
382
+    }
383
+    else {
384
+        $str_args = base64_encode(serialize($args));
385
+        return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
386
+    }
387 387
 }
388 388
 
389 389
 
@@ -414,87 +414,87 @@  discard block
 block discarded – undo
414 414
  *     Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique
415 415
  **/
416 416
 function executer_balise_dynamique($nom, $args, $context_compil) {
417
-	/** @var string Nom de la balise à charger (balise demandée ou balise générique) */
418
-	$nom_balise = $nom;
419
-	/** @var string Nom de la balise générique (si utilisée) */
420
-	$nom_balise_generique = '';
421
-
422
-	$appel_php_depuis_modele = false;
423
-	if (
424
-		is_array($context_compil)
425
-		and !is_numeric($context_compil[3])
426
-		and empty($context_compil[0])
427
-		and empty($context_compil[1])
428
-		and empty($context_compil[2])
429
-		and empty($context_compil[3])
430
-	) {
431
-		$appel_php_depuis_modele = true;
432
-	}
433
-
434
-	if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
435
-		// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
436
-		if ($balise_generique = chercher_balise_generique($nom)) {
437
-			// injecter en premier arg le nom de la balise
438
-			array_unshift($args, $nom);
439
-			$nom_balise_generique = $balise_generique['nom_generique'];
440
-			$fonction_balise = $balise_generique['fonction_generique'];
441
-			$nom_balise = $nom_balise_generique;
442
-		}
443
-		unset($balise_generique);
444
-	}
445
-
446
-	if (!$fonction_balise) {
447
-		$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
448
-		erreur_squelette($msg, $context_compil);
449
-
450
-		return '';
451
-	}
452
-
453
-	// retrouver le fichier qui a déclaré la fonction
454
-	// même si la fonction dynamique est déclarée dans un fichier de fonctions.
455
-	// Attention sous windows, getFileName() retourne un antislash.
456
-	$reflector = new ReflectionFunction($fonction_balise);
457
-	$file = str_replace('\\', '/', $reflector->getFileName());
458
-	if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
459
-		$file = substr($file, strlen(_ROOT_RACINE));
460
-	}
461
-
462
-	// Y a-t-il une fonction de traitement des arguments ?
463
-	$f = 'balise_' . $nom_balise . '_stat';
464
-
465
-	$r = !function_exists($f) ? $args : $f($args, $context_compil);
466
-
467
-	if (!is_array($r)) {
468
-		return $r;
469
-	}
470
-
471
-	// verifier que la fonction dyn est la,
472
-	// sinon se replier sur la generique si elle existe
473
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
474
-		if (
475
-			$balise_generique = chercher_balise_generique($nom)
476
-			and $nom_balise_generique = $balise_generique['nom_generique']
477
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
478
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
479
-		) {
480
-			// et lui injecter en premier arg le nom de la balise
481
-			array_unshift($r, $nom);
482
-			$nom_balise = $nom_balise_generique;
483
-			if (!_DIR_RESTREINT) {
484
-				$file = _DIR_RESTREINT_ABS . $file;
485
-			}
486
-		} else {
487
-			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
488
-			erreur_squelette($msg, $context_compil);
489
-
490
-			return '';
491
-		}
492
-	}
493
-
494
-	if ($appel_php_depuis_modele) {
495
-		$context_compil['appel_php_depuis_modele'] = true;
496
-	}
497
-	return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
417
+    /** @var string Nom de la balise à charger (balise demandée ou balise générique) */
418
+    $nom_balise = $nom;
419
+    /** @var string Nom de la balise générique (si utilisée) */
420
+    $nom_balise_generique = '';
421
+
422
+    $appel_php_depuis_modele = false;
423
+    if (
424
+        is_array($context_compil)
425
+        and !is_numeric($context_compil[3])
426
+        and empty($context_compil[0])
427
+        and empty($context_compil[1])
428
+        and empty($context_compil[2])
429
+        and empty($context_compil[3])
430
+    ) {
431
+        $appel_php_depuis_modele = true;
432
+    }
433
+
434
+    if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
435
+        // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
436
+        if ($balise_generique = chercher_balise_generique($nom)) {
437
+            // injecter en premier arg le nom de la balise
438
+            array_unshift($args, $nom);
439
+            $nom_balise_generique = $balise_generique['nom_generique'];
440
+            $fonction_balise = $balise_generique['fonction_generique'];
441
+            $nom_balise = $nom_balise_generique;
442
+        }
443
+        unset($balise_generique);
444
+    }
445
+
446
+    if (!$fonction_balise) {
447
+        $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
448
+        erreur_squelette($msg, $context_compil);
449
+
450
+        return '';
451
+    }
452
+
453
+    // retrouver le fichier qui a déclaré la fonction
454
+    // même si la fonction dynamique est déclarée dans un fichier de fonctions.
455
+    // Attention sous windows, getFileName() retourne un antislash.
456
+    $reflector = new ReflectionFunction($fonction_balise);
457
+    $file = str_replace('\\', '/', $reflector->getFileName());
458
+    if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
459
+        $file = substr($file, strlen(_ROOT_RACINE));
460
+    }
461
+
462
+    // Y a-t-il une fonction de traitement des arguments ?
463
+    $f = 'balise_' . $nom_balise . '_stat';
464
+
465
+    $r = !function_exists($f) ? $args : $f($args, $context_compil);
466
+
467
+    if (!is_array($r)) {
468
+        return $r;
469
+    }
470
+
471
+    // verifier que la fonction dyn est la,
472
+    // sinon se replier sur la generique si elle existe
473
+    if (!function_exists('balise_' . $nom_balise . '_dyn')) {
474
+        if (
475
+            $balise_generique = chercher_balise_generique($nom)
476
+            and $nom_balise_generique = $balise_generique['nom_generique']
477
+            and $file = include_spip('balise/' . strtolower($nom_balise_generique))
478
+            and function_exists('balise_' . $nom_balise_generique . '_dyn')
479
+        ) {
480
+            // et lui injecter en premier arg le nom de la balise
481
+            array_unshift($r, $nom);
482
+            $nom_balise = $nom_balise_generique;
483
+            if (!_DIR_RESTREINT) {
484
+                $file = _DIR_RESTREINT_ABS . $file;
485
+            }
486
+        } else {
487
+            $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
488
+            erreur_squelette($msg, $context_compil);
489
+
490
+            return '';
491
+        }
492
+    }
493
+
494
+    if ($appel_php_depuis_modele) {
495
+        $context_compil['appel_php_depuis_modele'] = true;
496
+    }
497
+    return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
498 498
 }
499 499
 
500 500
 /**
@@ -509,23 +509,23 @@  discard block
 block discarded – undo
509 509
  * @return array|null
510 510
  */
511 511
 function chercher_balise_generique($nom) {
512
-	if (!str_contains($nom, '_')) {
513
-		return null;
514
-	}
515
-	$nom_generique = $nom;
516
-	while (false !== ($p = strrpos($nom_generique, '_'))) {
517
-		$nom_generique = substr($nom_generique, 0, $p + 1);
518
-		$fonction_generique = charger_fonction($nom_generique, 'balise', true);
519
-		if ($fonction_generique) {
520
-			return [
521
-				'nom' => $nom,
522
-				'nom_generique' => $nom_generique,
523
-				'fonction_generique' => $fonction_generique,
524
-			];
525
-		}
526
-		$nom_generique = substr($nom_generique, 0, -1);
527
-	}
528
-	return null;
512
+    if (!str_contains($nom, '_')) {
513
+        return null;
514
+    }
515
+    $nom_generique = $nom;
516
+    while (false !== ($p = strrpos($nom_generique, '_'))) {
517
+        $nom_generique = substr($nom_generique, 0, $p + 1);
518
+        $fonction_generique = charger_fonction($nom_generique, 'balise', true);
519
+        if ($fonction_generique) {
520
+            return [
521
+                'nom' => $nom,
522
+                'nom_generique' => $nom_generique,
523
+                'fonction_generique' => $fonction_generique,
524
+            ];
525
+        }
526
+        $nom_generique = substr($nom_generique, 0, -1);
527
+    }
528
+    return null;
529 529
 }
530 530
 
531 531
 
@@ -549,50 +549,50 @@  discard block
 block discarded – undo
549 549
  * @return null;
550 550
  **/
551 551
 function lang_select_public($lang, $lang_select, $titre = null) {
552
-	// Cas 1. forcer_lang = true et pas de critere {lang_select}
553
-	if (
554
-		isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
555
-		and $lang_select !== 'oui'
556
-	) {
557
-		$lang = $GLOBALS['spip_lang'];
558
-	} // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
559
-	elseif (!strlen($lang)) {
560
-		$lang = $GLOBALS['spip_lang'];
561
-	} // Cas 3. l'objet est multilingue !
562
-	elseif (
563
-		$lang_select !== 'oui'
564
-		and strlen($titre) > 10
565
-		and str_contains($titre, '<multi>')
566
-		and str_contains(echappe_html($titre), '<multi>')
567
-	) {
568
-		$lang = $GLOBALS['spip_lang'];
569
-	}
570
-
571
-	// faire un lang_select() eventuellement sur la langue inchangee
572
-	lang_select($lang);
573
-
574
-	return;
552
+    // Cas 1. forcer_lang = true et pas de critere {lang_select}
553
+    if (
554
+        isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
555
+        and $lang_select !== 'oui'
556
+    ) {
557
+        $lang = $GLOBALS['spip_lang'];
558
+    } // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
559
+    elseif (!strlen($lang)) {
560
+        $lang = $GLOBALS['spip_lang'];
561
+    } // Cas 3. l'objet est multilingue !
562
+    elseif (
563
+        $lang_select !== 'oui'
564
+        and strlen($titre) > 10
565
+        and str_contains($titre, '<multi>')
566
+        and str_contains(echappe_html($titre), '<multi>')
567
+    ) {
568
+        $lang = $GLOBALS['spip_lang'];
569
+    }
570
+
571
+    // faire un lang_select() eventuellement sur la langue inchangee
572
+    lang_select($lang);
573
+
574
+    return;
575 575
 }
576 576
 
577 577
 
578 578
 // Si un tableau &doublons[articles] est passe en parametre,
579 579
 // il faut le nettoyer car il pourrait etre injecte en SQL
580 580
 function nettoyer_env_doublons($envd) {
581
-	foreach ($envd as $table => $liste) {
582
-		$n = '';
583
-		foreach (explode(',', $liste) as $val) {
584
-			if ($a = intval($val) and $val === strval($a)) {
585
-				$n .= ',' . $val;
586
-			}
587
-		}
588
-		if (strlen($n)) {
589
-			$envd[$table] = $n;
590
-		} else {
591
-			unset($envd[$table]);
592
-		}
593
-	}
594
-
595
-	return $envd;
581
+    foreach ($envd as $table => $liste) {
582
+        $n = '';
583
+        foreach (explode(',', $liste) as $val) {
584
+            if ($a = intval($val) and $val === strval($a)) {
585
+                $n .= ',' . $val;
586
+            }
587
+        }
588
+        if (strlen($n)) {
589
+            $envd[$table] = $n;
590
+        } else {
591
+            unset($envd[$table]);
592
+        }
593
+    }
594
+
595
+    return $envd;
596 596
 }
597 597
 
598 598
 /**
@@ -611,21 +611,21 @@  discard block
 block discarded – undo
611 611
  *     Opérateur trouvé (SELF ou SUBSELECT) sinon false.
612 612
  **/
613 613
 function match_self($w) {
614
-	if (is_string($w)) {
615
-		return false;
616
-	}
617
-	if (is_array($w)) {
618
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
619
-			return $w;
620
-		}
621
-		foreach (array_filter($w, 'is_array') as $sw) {
622
-			if ($m = match_self($sw)) {
623
-				return $m;
624
-			}
625
-		}
626
-	}
627
-
628
-	return false;
614
+    if (is_string($w)) {
615
+        return false;
616
+    }
617
+    if (is_array($w)) {
618
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
619
+            return $w;
620
+        }
621
+        foreach (array_filter($w, 'is_array') as $sw) {
622
+            if ($m = match_self($sw)) {
623
+                return $m;
624
+            }
625
+        }
626
+    }
627
+
628
+    return false;
629 629
 }
630 630
 
631 631
 /**
@@ -641,16 +641,16 @@  discard block
 block discarded – undo
641 641
  *     est remplacée par son code.
642 642
  **/
643 643
 function remplace_sous_requete($w, $sousrequete) {
644
-	if (is_array($w)) {
645
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
646
-			return $sousrequete;
647
-		}
648
-		foreach ($w as $k => $sw) {
649
-			$w[$k] = remplace_sous_requete($sw, $sousrequete);
650
-		}
651
-	}
652
-
653
-	return $w;
644
+    if (is_array($w)) {
645
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
646
+            return $sousrequete;
647
+        }
648
+        foreach ($w as $k => $sw) {
649
+            $w[$k] = remplace_sous_requete($sw, $sousrequete);
650
+        }
651
+    }
652
+
653
+    return $w;
654 654
 }
655 655
 
656 656
 /**
@@ -664,17 +664,17 @@  discard block
 block discarded – undo
664 664
  *     - Conditions avec des sous requêtes
665 665
  **/
666 666
 function trouver_sous_requetes($where) {
667
-	$where_simples = [];
668
-	$where_sous = [];
669
-	foreach ($where as $k => $w) {
670
-		if (match_self($w)) {
671
-			$where_sous[$k] = $w;
672
-		} else {
673
-			$where_simples[$k] = $w;
674
-		}
675
-	}
676
-
677
-	return [$where_simples, $where_sous];
667
+    $where_simples = [];
668
+    $where_sous = [];
669
+    foreach ($where as $k => $w) {
670
+        if (match_self($w)) {
671
+            $where_sous[$k] = $w;
672
+        } else {
673
+            $where_simples[$k] = $w;
674
+        }
675
+    }
676
+
677
+    return [$where_simples, $where_sous];
678 678
 }
679 679
 
680 680
 
@@ -700,292 +700,292 @@  discard block
 block discarded – undo
700 700
  * @return resource
701 701
  */
702 702
 function calculer_select(
703
-	$select = [],
704
-	$from = [],
705
-	$from_type = [],
706
-	$where = [],
707
-	$join = [],
708
-	$groupby = [],
709
-	$orderby = [],
710
-	$limit = '',
711
-	$having = [],
712
-	$table = '',
713
-	$id = '',
714
-	$serveur = '',
715
-	$requeter = true
703
+    $select = [],
704
+    $from = [],
705
+    $from_type = [],
706
+    $where = [],
707
+    $join = [],
708
+    $groupby = [],
709
+    $orderby = [],
710
+    $limit = '',
711
+    $having = [],
712
+    $table = '',
713
+    $id = '',
714
+    $serveur = '',
715
+    $requeter = true
716 716
 ) {
717 717
 
718
-	// retirer les criteres vides:
719
-	// {X ?} avec X absent de l'URL
720
-	// {par #ENV{X}} avec X absent de l'URL
721
-	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
722
-	$menage = false;
723
-	foreach ($where as $k => $v) {
724
-		if (is_array($v) and count($v)) {
725
-			if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
726
-				$op = false;
727
-			} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
728
-				$op = false;
729
-			} else {
730
-				$op = $v[0] ?: $v;
731
-			}
732
-		} else {
733
-			$op = $v;
734
-		}
735
-		if ((!$op) or ($op == 1) or ($op == '0=0')) {
736
-			unset($where[$k]);
737
-			$menage = true;
738
-		}
739
-	}
740
-
741
-	// evacuer les eventuels groupby vide issus d'un calcul dynamique
742
-	$groupby = array_diff($groupby, ['']);
743
-
744
-	// remplacer les sous requetes recursives au calcul
745
-	[$where_simples, $where_sous] = trouver_sous_requetes($where);
746
-	foreach ($where_sous as $k => $w) {
747
-		$menage = true;
748
-		// on recupere la sous requete
749
-		$sous = match_self($w);
750
-		if ($sous[0] == 'SELF') {
751
-			// c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
752
-			array_push($where_simples, $sous[2]);
753
-			$wheresub = [
754
-				$sous[2],
755
-				'0=0'
756
-			]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
757
-			$jsub = $join;
758
-			// trouver les jointures utiles a
759
-			// reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
760
-			// ie L1.objet='article'
761
-			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
762
-			$i = 0;
763
-			do {
764
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
765
-					[$sous[1] . ' AS id'],
766
-					$from,
767
-					$from_type,
768
-					$wheresub,
769
-					$jsub,
770
-					[],
771
-					[],
772
-					'',
773
-					$having,
774
-					$table,
775
-					$id,
776
-					$serveur,
777
-					false
778
-				) . ')');
779
-				if (!$i) {
780
-					$i = 1;
781
-					$wherestring = calculer_where_to_string($where[$k]);
782
-					foreach ($join as $cle => $wj) {
783
-						if (
784
-							(is_countable($wj) ? count($wj) : 0) == 4
785
-							and str_contains($wherestring, (string) "{$cle}.")
786
-						) {
787
-							$i = 0;
788
-							$wheresub[] = $wj[3];
789
-							unset($jsub[$cle][3]);
790
-						}
791
-					}
792
-				}
793
-			} while ($i++ < 1);
794
-		}
795
-		if ($sous[0] == 'SUBSELECT') {
796
-			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
797
-			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
798
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
799
-				$sous[1], # select
800
-				$sous[2], #from
801
-				[], #from_type
802
-				$sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
803
-				#where, qui peut etre de la forme string comme dans sql_select
804
-					[], #join
805
-				$sous[4] ?: [], #groupby
806
-				$sous[5] ?: [], #orderby
807
-				$sous[6], #limit
808
-				$sous[7] ?: [], #having
809
-				$table,
810
-				$id,
811
-				$serveur,
812
-				false
813
-			) . ')');
814
-		}
815
-		array_pop($where_simples);
816
-	}
817
-
818
-	foreach ($having as $k => $v) {
819
-		if ((!$v) or ($v == 1) or ($v == '0=0')) {
820
-			unset($having[$k]);
821
-		}
822
-	}
823
-
824
-	// Installer les jointures.
825
-	// Retirer celles seulement utiles aux criteres finalement absents mais
826
-	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
827
-	// si elle est seulement utile a Ln+1 elle meme inutile
828
-
829
-	$afrom = [];
830
-	$equiv = [];
831
-	$k = count($join);
832
-	foreach (array_reverse($join, true) as $cledef => $j) {
833
-		$cle = $cledef;
834
-		// le format de join est :
835
-		// array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
836
-		$join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
837
-		if (count($join[$cle]) == 2) {
838
-			$join[$cle][] = $join[$cle][1];
839
-		}
840
-		if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
841
-			$join[$cle][] = '';
842
-		}
843
-		[$t, $c, $carr, $and] = $join[$cle];
844
-		// si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
845
-		// pour compat avec ancienne convention
846
-		if (is_numeric($cle)) {
847
-			$cle = "L$k";
848
-		}
849
-		$cle_where_lie = "JOIN-$cle";
850
-		if (
851
-			!$menage
852
-			or isset($afrom[$cle])
853
-			or calculer_jointnul($cle, $select)
854
-			or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
855
-			or calculer_jointnul($cle, $having)
856
-			or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
857
-		) {
858
-			// corriger les references non explicites dans select
859
-			// ou groupby
860
-			foreach ($select as $i => $s) {
861
-				if ($s == $c) {
862
-					$select[$i] = "$cle.$c AS $c";
863
-					break;
864
-				}
865
-			}
866
-			foreach ($groupby as $i => $g) {
867
-				if ($g == $c) {
868
-					$groupby[$i] = "$cle.$c";
869
-					break;
870
-				}
871
-			}
872
-			// on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
873
-			// sans recours a preg_match
874
-			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
875
-			$afrom[$t][$cle] = [
876
-				"\n" .
877
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
878
-				$from[$cle],
879
-				"AS $cle",
880
-				'ON (',
881
-				"$cle.$c",
882
-				'=',
883
-				"$t.$carr",
884
-				($and ? 'AND ' . $and : '') .
885
-				')'
886
-			];
887
-			if (isset($afrom[$cle])) {
888
-				$afrom[$t] = $afrom[$t] + $afrom[$cle];
889
-				unset($afrom[$cle]);
890
-			}
891
-			$equiv[] = $carr;
892
-		} else {
893
-			unset($join[$cledef]);
894
-			if (isset($where_simples[$cle_where_lie])) {
895
-				unset($where_simples[$cle_where_lie]);
896
-				unset($where[$cle_where_lie]);
897
-			}
898
-		}
899
-		unset($from[$cle]);
900
-		$k--;
901
-	}
902
-
903
-	if (count($afrom)) {
904
-		// Regarder si la table principale ne sert finalement a rien comme dans
905
-		//<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
906
-		//<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
907
-		//<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
908
-		// ou dans
909
-		//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
910
-		// qui comporte plusieurs jointures
911
-		// ou dans
912
-		// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
913
-		// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
914
-		// penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
915
-		// <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
916
-		// penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
917
-		// <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
918
-
919
-		$t = key($from);
920
-		$c = current($from);
921
-		reset($from);
922
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
923
-		if (
924
-			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
925
-				calculer_jointnul($t, $select, $e) or
926
-				calculer_jointnul($t, $join, $e) or
927
-				calculer_jointnul($t, $where, $e) or
928
-				calculer_jointnul($t, $orderby, $e) or
929
-				calculer_jointnul($t, $groupby, $e) or
930
-				calculer_jointnul($t, $having, $e))
931
-			&& count($afrom[$t])
932
-		) {
933
-			$nfrom = reset($afrom[$t]);
934
-			$nt = array_key_first($afrom[$t]);
935
-			unset($from[$t]);
936
-			$from[$nt] = $nfrom[1];
937
-			unset($afrom[$t][$nt]);
938
-			$afrom[$nt] = $afrom[$t];
939
-			unset($afrom[$t]);
940
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
941
-			$t = $nfrom[4];
942
-			$alias = '';
943
-			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
944
-			$oldcle = explode('.', $nfrom[6]);
945
-			$oldcle = end($oldcle);
946
-			$newcle = explode('.', $nfrom[4]);
947
-			$newcle = end($newcle);
948
-			if ($newcle != $oldcle) {
949
-				// si l'ancienne cle etait deja dans le select avec un AS
950
-				// reprendre simplement ce AS
951
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
952
-				if (preg_match($as, implode(',', $select), $m)) {
953
-					$alias = '';
954
-				} else {
955
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
956
-				}
957
-			}
958
-			$select = remplacer_jointnul($t . $alias, $select, $e);
959
-			$join = remplacer_jointnul($t, $join, $e);
960
-			$where = remplacer_jointnul($t, $where, $e);
961
-			$having = remplacer_jointnul($t, $having, $e);
962
-			$groupby = remplacer_jointnul($t, $groupby, $e);
963
-			$orderby = remplacer_jointnul($t, $orderby, $e);
964
-		}
965
-		$from = reinjecte_joint($afrom, $from);
966
-	}
967
-	if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
968
-		$wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
969
-		$GLOBALS['debug'] = [];
970
-		if ($wasdebug) {
971
-			$GLOBALS['debug']['debug'] = true;
972
-		}
973
-	}
974
-	$GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
975
-	$r = sql_select(
976
-		$select,
977
-		$from,
978
-		$where,
979
-		$groupby,
980
-		array_filter($orderby),
981
-		$limit,
982
-		$having,
983
-		$serveur,
984
-		$requeter
985
-	);
986
-	unset($GLOBALS['debug']['aucasou']);
987
-
988
-	return $r;
718
+    // retirer les criteres vides:
719
+    // {X ?} avec X absent de l'URL
720
+    // {par #ENV{X}} avec X absent de l'URL
721
+    // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
722
+    $menage = false;
723
+    foreach ($where as $k => $v) {
724
+        if (is_array($v) and count($v)) {
725
+            if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
726
+                $op = false;
727
+            } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
728
+                $op = false;
729
+            } else {
730
+                $op = $v[0] ?: $v;
731
+            }
732
+        } else {
733
+            $op = $v;
734
+        }
735
+        if ((!$op) or ($op == 1) or ($op == '0=0')) {
736
+            unset($where[$k]);
737
+            $menage = true;
738
+        }
739
+    }
740
+
741
+    // evacuer les eventuels groupby vide issus d'un calcul dynamique
742
+    $groupby = array_diff($groupby, ['']);
743
+
744
+    // remplacer les sous requetes recursives au calcul
745
+    [$where_simples, $where_sous] = trouver_sous_requetes($where);
746
+    foreach ($where_sous as $k => $w) {
747
+        $menage = true;
748
+        // on recupere la sous requete
749
+        $sous = match_self($w);
750
+        if ($sous[0] == 'SELF') {
751
+            // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
752
+            array_push($where_simples, $sous[2]);
753
+            $wheresub = [
754
+                $sous[2],
755
+                '0=0'
756
+            ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
757
+            $jsub = $join;
758
+            // trouver les jointures utiles a
759
+            // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
760
+            // ie L1.objet='article'
761
+            // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
762
+            $i = 0;
763
+            do {
764
+                $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
765
+                    [$sous[1] . ' AS id'],
766
+                    $from,
767
+                    $from_type,
768
+                    $wheresub,
769
+                    $jsub,
770
+                    [],
771
+                    [],
772
+                    '',
773
+                    $having,
774
+                    $table,
775
+                    $id,
776
+                    $serveur,
777
+                    false
778
+                ) . ')');
779
+                if (!$i) {
780
+                    $i = 1;
781
+                    $wherestring = calculer_where_to_string($where[$k]);
782
+                    foreach ($join as $cle => $wj) {
783
+                        if (
784
+                            (is_countable($wj) ? count($wj) : 0) == 4
785
+                            and str_contains($wherestring, (string) "{$cle}.")
786
+                        ) {
787
+                            $i = 0;
788
+                            $wheresub[] = $wj[3];
789
+                            unset($jsub[$cle][3]);
790
+                        }
791
+                    }
792
+                }
793
+            } while ($i++ < 1);
794
+        }
795
+        if ($sous[0] == 'SUBSELECT') {
796
+            // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
797
+            array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
798
+            $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
799
+                $sous[1], # select
800
+                $sous[2], #from
801
+                [], #from_type
802
+                $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
803
+                #where, qui peut etre de la forme string comme dans sql_select
804
+                    [], #join
805
+                $sous[4] ?: [], #groupby
806
+                $sous[5] ?: [], #orderby
807
+                $sous[6], #limit
808
+                $sous[7] ?: [], #having
809
+                $table,
810
+                $id,
811
+                $serveur,
812
+                false
813
+            ) . ')');
814
+        }
815
+        array_pop($where_simples);
816
+    }
817
+
818
+    foreach ($having as $k => $v) {
819
+        if ((!$v) or ($v == 1) or ($v == '0=0')) {
820
+            unset($having[$k]);
821
+        }
822
+    }
823
+
824
+    // Installer les jointures.
825
+    // Retirer celles seulement utiles aux criteres finalement absents mais
826
+    // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
827
+    // si elle est seulement utile a Ln+1 elle meme inutile
828
+
829
+    $afrom = [];
830
+    $equiv = [];
831
+    $k = count($join);
832
+    foreach (array_reverse($join, true) as $cledef => $j) {
833
+        $cle = $cledef;
834
+        // le format de join est :
835
+        // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
836
+        $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
837
+        if (count($join[$cle]) == 2) {
838
+            $join[$cle][] = $join[$cle][1];
839
+        }
840
+        if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
841
+            $join[$cle][] = '';
842
+        }
843
+        [$t, $c, $carr, $and] = $join[$cle];
844
+        // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
845
+        // pour compat avec ancienne convention
846
+        if (is_numeric($cle)) {
847
+            $cle = "L$k";
848
+        }
849
+        $cle_where_lie = "JOIN-$cle";
850
+        if (
851
+            !$menage
852
+            or isset($afrom[$cle])
853
+            or calculer_jointnul($cle, $select)
854
+            or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
855
+            or calculer_jointnul($cle, $having)
856
+            or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
857
+        ) {
858
+            // corriger les references non explicites dans select
859
+            // ou groupby
860
+            foreach ($select as $i => $s) {
861
+                if ($s == $c) {
862
+                    $select[$i] = "$cle.$c AS $c";
863
+                    break;
864
+                }
865
+            }
866
+            foreach ($groupby as $i => $g) {
867
+                if ($g == $c) {
868
+                    $groupby[$i] = "$cle.$c";
869
+                    break;
870
+                }
871
+            }
872
+            // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
873
+            // sans recours a preg_match
874
+            // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
875
+            $afrom[$t][$cle] = [
876
+                "\n" .
877
+                ($from_type[$cle] ?? 'INNER') . ' JOIN',
878
+                $from[$cle],
879
+                "AS $cle",
880
+                'ON (',
881
+                "$cle.$c",
882
+                '=',
883
+                "$t.$carr",
884
+                ($and ? 'AND ' . $and : '') .
885
+                ')'
886
+            ];
887
+            if (isset($afrom[$cle])) {
888
+                $afrom[$t] = $afrom[$t] + $afrom[$cle];
889
+                unset($afrom[$cle]);
890
+            }
891
+            $equiv[] = $carr;
892
+        } else {
893
+            unset($join[$cledef]);
894
+            if (isset($where_simples[$cle_where_lie])) {
895
+                unset($where_simples[$cle_where_lie]);
896
+                unset($where[$cle_where_lie]);
897
+            }
898
+        }
899
+        unset($from[$cle]);
900
+        $k--;
901
+    }
902
+
903
+    if (count($afrom)) {
904
+        // Regarder si la table principale ne sert finalement a rien comme dans
905
+        //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
906
+        //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
907
+        //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
908
+        // ou dans
909
+        //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
910
+        // qui comporte plusieurs jointures
911
+        // ou dans
912
+        // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
913
+        // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
914
+        // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
915
+        // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
916
+        // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
917
+        // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
918
+
919
+        $t = key($from);
920
+        $c = current($from);
921
+        reset($from);
922
+        $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
923
+        if (
924
+            !(strpos($t, ' ') or // jointure des le depart cf boucle_doc
925
+                calculer_jointnul($t, $select, $e) or
926
+                calculer_jointnul($t, $join, $e) or
927
+                calculer_jointnul($t, $where, $e) or
928
+                calculer_jointnul($t, $orderby, $e) or
929
+                calculer_jointnul($t, $groupby, $e) or
930
+                calculer_jointnul($t, $having, $e))
931
+            && count($afrom[$t])
932
+        ) {
933
+            $nfrom = reset($afrom[$t]);
934
+            $nt = array_key_first($afrom[$t]);
935
+            unset($from[$t]);
936
+            $from[$nt] = $nfrom[1];
937
+            unset($afrom[$t][$nt]);
938
+            $afrom[$nt] = $afrom[$t];
939
+            unset($afrom[$t]);
940
+            $e = '/\b' . preg_quote($nfrom[6]) . '\b/';
941
+            $t = $nfrom[4];
942
+            $alias = '';
943
+            // verifier que les deux cles sont homonymes, sinon installer un alias dans le select
944
+            $oldcle = explode('.', $nfrom[6]);
945
+            $oldcle = end($oldcle);
946
+            $newcle = explode('.', $nfrom[4]);
947
+            $newcle = end($newcle);
948
+            if ($newcle != $oldcle) {
949
+                // si l'ancienne cle etait deja dans le select avec un AS
950
+                // reprendre simplement ce AS
951
+                $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
952
+                if (preg_match($as, implode(',', $select), $m)) {
953
+                    $alias = '';
954
+                } else {
955
+                    $alias = ', ' . $nfrom[4] . " AS $oldcle";
956
+                }
957
+            }
958
+            $select = remplacer_jointnul($t . $alias, $select, $e);
959
+            $join = remplacer_jointnul($t, $join, $e);
960
+            $where = remplacer_jointnul($t, $where, $e);
961
+            $having = remplacer_jointnul($t, $having, $e);
962
+            $groupby = remplacer_jointnul($t, $groupby, $e);
963
+            $orderby = remplacer_jointnul($t, $orderby, $e);
964
+        }
965
+        $from = reinjecte_joint($afrom, $from);
966
+    }
967
+    if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
968
+        $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
969
+        $GLOBALS['debug'] = [];
970
+        if ($wasdebug) {
971
+            $GLOBALS['debug']['debug'] = true;
972
+        }
973
+    }
974
+    $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
975
+    $r = sql_select(
976
+        $select,
977
+        $from,
978
+        $where,
979
+        $groupby,
980
+        array_filter($orderby),
981
+        $limit,
982
+        $having,
983
+        $serveur,
984
+        $requeter
985
+    );
986
+    unset($GLOBALS['debug']['aucasou']);
987
+
988
+    return $r;
989 989
 }
990 990
 
991 991
 /**
@@ -996,79 +996,79 @@  discard block
 block discarded – undo
996 996
  * @return string
997 997
  */
998 998
 function calculer_where_to_string($v, $join = 'AND') {
999
-	if (empty($v)) {
1000
-		return '';
1001
-	}
1002
-
1003
-	if (!is_array($v)) {
1004
-		return $v;
1005
-	} else {
1006
-		$exp = '';
1007
-		if (strtoupper($join) === 'AND') {
1008
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1009
-		} else {
1010
-			return $exp . join($join, $v);
1011
-		}
1012
-	}
999
+    if (empty($v)) {
1000
+        return '';
1001
+    }
1002
+
1003
+    if (!is_array($v)) {
1004
+        return $v;
1005
+    } else {
1006
+        $exp = '';
1007
+        if (strtoupper($join) === 'AND') {
1008
+            return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1009
+        } else {
1010
+            return $exp . join($join, $v);
1011
+        }
1012
+    }
1013 1013
 }
1014 1014
 
1015 1015
 
1016 1016
 //condition suffisante (mais non necessaire) pour qu'une table soit utile
1017 1017
 
1018 1018
 function calculer_jointnul($cle, $exp, $equiv = '') {
1019
-	if (!is_array($exp)) {
1020
-		if ($equiv) {
1021
-			$exp = preg_replace($equiv, '', $exp);
1022
-		}
1023
-
1024
-		return preg_match("/\\b$cle\\./", $exp);
1025
-	} else {
1026
-		foreach ($exp as $v) {
1027
-			if (calculer_jointnul($cle, $v, $equiv)) {
1028
-				return true;
1029
-			}
1030
-		}
1031
-
1032
-		return false;
1033
-	}
1019
+    if (!is_array($exp)) {
1020
+        if ($equiv) {
1021
+            $exp = preg_replace($equiv, '', $exp);
1022
+        }
1023
+
1024
+        return preg_match("/\\b$cle\\./", $exp);
1025
+    } else {
1026
+        foreach ($exp as $v) {
1027
+            if (calculer_jointnul($cle, $v, $equiv)) {
1028
+                return true;
1029
+            }
1030
+        }
1031
+
1032
+        return false;
1033
+    }
1034 1034
 }
1035 1035
 
1036 1036
 function reinjecte_joint($afrom, $from) {
1037
-	$from_synth = [];
1038
-	foreach ($from as $k => $v) {
1039
-		$from_synth[$k] = $from[$k];
1040
-		if (isset($afrom[$k])) {
1041
-			foreach ($afrom[$k] as $kk => $vv) {
1042
-				$afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1043
-			}
1044
-			$from_synth["$k@"] = implode(' ', $afrom[$k]);
1045
-			unset($afrom[$k]);
1046
-		}
1047
-	}
1048
-
1049
-	return $from_synth;
1037
+    $from_synth = [];
1038
+    foreach ($from as $k => $v) {
1039
+        $from_synth[$k] = $from[$k];
1040
+        if (isset($afrom[$k])) {
1041
+            foreach ($afrom[$k] as $kk => $vv) {
1042
+                $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1043
+            }
1044
+            $from_synth["$k@"] = implode(' ', $afrom[$k]);
1045
+            unset($afrom[$k]);
1046
+        }
1047
+    }
1048
+
1049
+    return $from_synth;
1050 1050
 }
1051 1051
 
1052 1052
 function remplacer_jointnul($cle, $exp, $equiv = '') {
1053
-	if (!is_array($exp)) {
1054
-		return preg_replace($equiv, $cle, $exp);
1055
-	} else {
1056
-		foreach ($exp as $k => $v) {
1057
-			$exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1058
-		}
1059
-
1060
-		return $exp;
1061
-	}
1053
+    if (!is_array($exp)) {
1054
+        return preg_replace($equiv, $cle, $exp);
1055
+    } else {
1056
+        foreach ($exp as $k => $v) {
1057
+            $exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1058
+        }
1059
+
1060
+        return $exp;
1061
+    }
1062 1062
 }
1063 1063
 
1064 1064
 // calcul du nom du squelette
1065 1065
 function calculer_nom_fonction_squel($skel, $mime_type = 'html', string $connect = '') {
1066
-	// ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1067
-	if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1068
-		$skel = substr($skel, strlen(_DIR_RACINE));
1069
-	}
1070
-
1071
-	return $mime_type
1072
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1073
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1066
+    // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1067
+    if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1068
+        $skel = substr($skel, strlen(_DIR_RACINE));
1069
+    }
1070
+
1071
+    return $mime_type
1072
+    . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1073
+    . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1074 1074
 }
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 		$GLOBALS['debug_objets']['courant'] = $nom;
54 54
 	}
55 55
 
56
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
56
+	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true).$nom.'.php';
57 57
 
58 58
 	// si squelette est deja compile et perenne, le charger
59 59
 	if (!squelette_obsolete($phpfile, $source)) {
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
 		#}
67 67
 	}
68 68
 
69
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
69
+	if (file_exists($lib = $squelette.'_fonctions'.'.php')) {
70 70
 		include_once $lib;
71 71
 	}
72 72
 
@@ -94,7 +94,7 @@  discard block
 block discarded – undo
94 94
 			eval("return true; $f ;");
95 95
 		} catch (\ParseError $e) {
96 96
 			// Code syntaxiquement faux (critere etc mal programme')
97
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
97
+			$msg = _T('zbug_erreur_compilation').' | Line '.$e->getLine().' : '.$e->getMessage();
98 98
 			erreur_squelette($msg, $boucle);
99 99
 			// continuer pour trouver d'autres fautes eventuelles
100 100
 			// mais prevenir que c'est mort
@@ -122,7 +122,7 @@  discard block
 block discarded – undo
122 122
 
123 123
 	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
124 124
 		// Tracer ce qui vient d'etre compile
125
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
125
+		$GLOBALS['debug_objets']['code'][$nom.'tout'] = $code;
126 126
 
127 127
 		// si c'est ce que demande le debusqueur, lui passer la main
128 128
 		if (
@@ -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
 	}
@@ -214,18 +214,18 @@  discard block
 block discarded – undo
214 214
 			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
215 215
 
216 216
 			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
217
-				$headers[$j] .= '|' . $r[3];
217
+				$headers[$j] .= '|'.$r[3];
218 218
 			} else {
219
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
219
+				$headers[$j] = str_replace(['\\\\', "\\'", '\\"'], ['\\', "'", '"'], $r[3]);
220 220
 			}
221 221
 		}
222 222
 	}
223 223
 	// S'agit-il d'un resultat constant ou contenant du code php
224 224
 	$process_ins = (
225
-		strpos($corps, '<' . '?') === false
225
+		strpos($corps, '<'.'?') === false
226 226
 		or
227
-		(strpos($corps, '<' . '?xml') !== false and
228
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
227
+		(strpos($corps, '<'.'?xml') !== false and
228
+			strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
229 229
 	)
230 230
 		? 'html'
231 231
 		: 'php';
@@ -254,10 +254,10 @@  discard block
 block discarded – undo
254 254
 
255 255
 		if ($process_ins == 'html') {
256 256
 			$skel['process_ins'] = (
257
-				strpos($corps, '<' . '?') === false
257
+				strpos($corps, '<'.'?') === false
258 258
 				or
259
-				(strpos($corps, '<' . '?xml') !== false and
260
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
259
+				(strpos($corps, '<'.'?xml') !== false and
260
+					strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
261 261
 			)
262 262
 				? 'html'
263 263
 				: 'php';
@@ -275,7 +275,7 @@  discard block
 block discarded – undo
275 275
 //
276 276
 
277 277
 /** Code PHP pour inclure une balise dynamique à l'exécution d'une page */
278
-define('CODE_INCLURE_BALISE', '<' . '?php
278
+define('CODE_INCLURE_BALISE', '<'.'?php
279 279
 include_once("%s");
280 280
 if ($lang_select = "%s") $lang_select = lang_select($lang_select);
281 281
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
 		// pas de lien symbolique sous Windows
307 307
 		and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
308 308
 	) {
309
-		$file = './" . _DIR_RACINE . "' . $file;
309
+		$file = './" . _DIR_RACINE . "'.$file;
310 310
 	}
311 311
 
312 312
 	$lang = $context_compil[4];
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
 
317 317
 	$args = array_map('argumenter_squelette', $args);
318 318
 	if (!empty($context_compil['appel_php_depuis_modele'])) {
319
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
319
+		$args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
320 320
 	}
321 321
 	$args = join(', ', $args);
322 322
 
@@ -350,14 +350,14 @@  discard block
 block discarded – undo
350 350
 	if (is_object($v)) {
351 351
 		return var_export($v, true);
352 352
 	} elseif (!is_array($v)) {
353
-		return "'" . texte_script((string) $v) . "'";
353
+		return "'".texte_script((string) $v)."'";
354 354
 	} else {
355 355
 		$out = [];
356 356
 		foreach ($v as $k => $val) {
357
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
357
+			$out [] = argumenter_squelette($k).'=>'.argumenter_squelette($val);
358 358
 		}
359 359
 
360
-		return 'array(' . join(', ', $out) . ')';
360
+		return 'array('.join(', ', $out).')';
361 361
 	}
362 362
 }
363 363
 
@@ -382,7 +382,7 @@  discard block
 block discarded – undo
382 382
 	}
383 383
 	else {
384 384
 		$str_args = base64_encode(serialize($args));
385
-		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
385
+		return '<?'."php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
386 386
 	}
387 387
 }
388 388
 
@@ -460,7 +460,7 @@  discard block
 block discarded – undo
460 460
 	}
461 461
 
462 462
 	// Y a-t-il une fonction de traitement des arguments ?
463
-	$f = 'balise_' . $nom_balise . '_stat';
463
+	$f = 'balise_'.$nom_balise.'_stat';
464 464
 
465 465
 	$r = !function_exists($f) ? $args : $f($args, $context_compil);
466 466
 
@@ -470,18 +470,18 @@  discard block
 block discarded – undo
470 470
 
471 471
 	// verifier que la fonction dyn est la,
472 472
 	// sinon se replier sur la generique si elle existe
473
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
473
+	if (!function_exists('balise_'.$nom_balise.'_dyn')) {
474 474
 		if (
475 475
 			$balise_generique = chercher_balise_generique($nom)
476 476
 			and $nom_balise_generique = $balise_generique['nom_generique']
477
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
478
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
477
+			and $file = include_spip('balise/'.strtolower($nom_balise_generique))
478
+			and function_exists('balise_'.$nom_balise_generique.'_dyn')
479 479
 		) {
480 480
 			// et lui injecter en premier arg le nom de la balise
481 481
 			array_unshift($r, $nom);
482 482
 			$nom_balise = $nom_balise_generique;
483 483
 			if (!_DIR_RESTREINT) {
484
-				$file = _DIR_RESTREINT_ABS . $file;
484
+				$file = _DIR_RESTREINT_ABS.$file;
485 485
 			}
486 486
 		} else {
487 487
 			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
@@ -582,7 +582,7 @@  discard block
 block discarded – undo
582 582
 		$n = '';
583 583
 		foreach (explode(',', $liste) as $val) {
584 584
 			if ($a = intval($val) and $val === strval($a)) {
585
-				$n .= ',' . $val;
585
+				$n .= ','.$val;
586 586
 			}
587 587
 		}
588 588
 		if (strlen($n)) {
@@ -761,8 +761,8 @@  discard block
 block discarded – undo
761 761
 			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
762 762
 			$i = 0;
763 763
 			do {
764
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
765
-					[$sous[1] . ' AS id'],
764
+				$where[$k] = remplace_sous_requete($w, '('.calculer_select(
765
+					[$sous[1].' AS id'],
766 766
 					$from,
767 767
 					$from_type,
768 768
 					$wheresub,
@@ -775,7 +775,7 @@  discard block
 block discarded – undo
775 775
 					$id,
776 776
 					$serveur,
777 777
 					false
778
-				) . ')');
778
+				).')');
779 779
 				if (!$i) {
780 780
 					$i = 1;
781 781
 					$wherestring = calculer_where_to_string($where[$k]);
@@ -795,7 +795,7 @@  discard block
 block discarded – undo
795 795
 		if ($sous[0] == 'SUBSELECT') {
796 796
 			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
797 797
 			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
798
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
798
+			$where[$k] = remplace_sous_requete($w, '('.calculer_select(
799 799
 				$sous[1], # select
800 800
 				$sous[2], #from
801 801
 				[], #from_type
@@ -810,7 +810,7 @@  discard block
 block discarded – undo
810 810
 				$id,
811 811
 				$serveur,
812 812
 				false
813
-			) . ')');
813
+			).')');
814 814
 		}
815 815
 		array_pop($where_simples);
816 816
 	}
@@ -873,15 +873,15 @@  discard block
 block discarded – undo
873 873
 			// sans recours a preg_match
874 874
 			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
875 875
 			$afrom[$t][$cle] = [
876
-				"\n" .
877
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
876
+				"\n".
877
+				($from_type[$cle] ?? 'INNER').' JOIN',
878 878
 				$from[$cle],
879 879
 				"AS $cle",
880 880
 				'ON (',
881 881
 				"$cle.$c",
882 882
 				'=',
883 883
 				"$t.$carr",
884
-				($and ? 'AND ' . $and : '') .
884
+				($and ? 'AND '.$and : '').
885 885
 				')'
886 886
 			];
887 887
 			if (isset($afrom[$cle])) {
@@ -919,7 +919,7 @@  discard block
 block discarded – undo
919 919
 		$t = key($from);
920 920
 		$c = current($from);
921 921
 		reset($from);
922
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
922
+		$e = '/\b('."$t\\.".join('|'.$t.'\.', $equiv).')\b/';
923 923
 		if (
924 924
 			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
925 925
 				calculer_jointnul($t, $select, $e) or
@@ -937,7 +937,7 @@  discard block
 block discarded – undo
937 937
 			unset($afrom[$t][$nt]);
938 938
 			$afrom[$nt] = $afrom[$t];
939 939
 			unset($afrom[$t]);
940
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
940
+			$e = '/\b'.preg_quote($nfrom[6]).'\b/';
941 941
 			$t = $nfrom[4];
942 942
 			$alias = '';
943 943
 			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
@@ -948,14 +948,14 @@  discard block
 block discarded – undo
948 948
 			if ($newcle != $oldcle) {
949 949
 				// si l'ancienne cle etait deja dans le select avec un AS
950 950
 				// reprendre simplement ce AS
951
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
951
+				$as = '/\b'.preg_quote($nfrom[6]).'\s+(AS\s+\w+)\b/';
952 952
 				if (preg_match($as, implode(',', $select), $m)) {
953 953
 					$alias = '';
954 954
 				} else {
955
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
955
+					$alias = ', '.$nfrom[4]." AS $oldcle";
956 956
 				}
957 957
 			}
958
-			$select = remplacer_jointnul($t . $alias, $select, $e);
958
+			$select = remplacer_jointnul($t.$alias, $select, $e);
959 959
 			$join = remplacer_jointnul($t, $join, $e);
960 960
 			$where = remplacer_jointnul($t, $where, $e);
961 961
 			$having = remplacer_jointnul($t, $having, $e);
@@ -1005,9 +1005,9 @@  discard block
 block discarded – undo
1005 1005
 	} else {
1006 1006
 		$exp = '';
1007 1007
 		if (strtoupper($join) === 'AND') {
1008
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1008
+			return $exp.join(" $join ", array_map('calculer_where_to_string', $v));
1009 1009
 		} else {
1010
-			return $exp . join($join, $v);
1010
+			return $exp.join($join, $v);
1011 1011
 		}
1012 1012
 	}
1013 1013
 }
@@ -1069,6 +1069,6 @@  discard block
 block discarded – undo
1069 1069
 	}
1070 1070
 
1071 1071
 	return $mime_type
1072
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1073
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1072
+	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)).'_'
1073
+	. md5($GLOBALS['spip_version_code'].' * '.$skel.(isset($GLOBALS['marqueur_skel']) ? '*'.$GLOBALS['marqueur_skel'] : ''));
1074 1074
 }
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -379,8 +379,7 @@
 block discarded – undo
379 379
 function executer_balise_dynamique_dans_un_modele(...$args) {
380 380
 	if (test_espace_prive()) {
381 381
 		return executer_balise_dynamique(...$args);
382
-	}
383
-	else {
382
+	} else {
384 383
 		$str_args = base64_encode(serialize($args));
385 384
 		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
386 385
 	}
Please login to merge, or discard this patch.
ecrire/public/references.php 2 patches
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 	$select = true
127 127
 ) {
128 128
 	if (!is_string($defaut)) {
129
-		$defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
129
+		$defaut = '($Pile[0][\''.strtolower($nom_champ).'\'] ?? null)';
130 130
 	}
131 131
 
132 132
 	$idb_origine = $idb;
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 			}
160 160
 			// renseigner la boucle source de ce champ pour les traitements
161 161
 			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
162
+			$champ = '$Pile[$SP'.($i ? "-$i" : '').'][\''.$c.'\']';
163 163
 			if (!$joker) {
164 164
 				return index_compose($conditionnel, $champ);
165 165
 			}
@@ -200,7 +200,7 @@  discard block
 block discarded – undo
200 200
 function index_compose($conditionnel, $defaut) {
201 201
 	while ($c = array_pop($conditionnel)) {
202 202
 		// si on passe defaut = '', ne pas générer d'erreur de compilation.
203
-		$defaut = "($c:(" . ($defaut ?: "''") . '))';
203
+		$defaut = "($c:(".($defaut ?: "''").'))';
204 204
 	}
205 205
 
206 206
 	return $defaut;
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
 	if (!$r) {
248 248
 		$joker = false; // indiquer a l'appelant
249 249
 		# continuer pour chercher l'erreur suivante
250
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
250
+		return ["'#".$r.':'.$nom_champ."'", ''];
251 251
 	}
252 252
 
253 253
 	$desc = $boucles[$idb]->show;
@@ -290,7 +290,7 @@  discard block
 block discarded – undo
290 290
 	if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291 291
 		[, $_table, $_nom_champ] = $r;
292 292
 		if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
-			$_alias = $cle . '_' . $_nom_champ;
293
+			$_alias = $cle.'_'.$_nom_champ;
294 294
 			return index_exception(
295 295
 				$boucles[$idb],
296 296
 				$desc,
@@ -371,8 +371,8 @@  discard block
 block discarded – undo
371 371
 			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372 372
 		}
373 373
 		if ($t == null) {
374
-			[$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
-			$excep = $x;    #PHP5 de droite a gauche !
374
+			[$e, $x] = $excep; #PHP4 affecte de gauche a droite
375
+			$excep = $x; #PHP5 de droite a gauche !
376 376
 			$j = $trouver_table($e, $boucle->sql_serveur);
377 377
 			if (!$j) {
378 378
 				return ['', ''];
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
 					$l = (preg_split('/\s*,\s*/', $k));
385 385
 					$k = $desc['key']['PRIMARY KEY'];
386 386
 					if (!in_array($k, $l)) {
387
-						spip_log("jointure impossible $e " . implode(',', $l));
387
+						spip_log("jointure impossible $e ".implode(',', $l));
388 388
 
389 389
 						return ['', ''];
390 390
 					}
@@ -400,7 +400,7 @@  discard block
 block discarded – undo
400 400
 	// demander a SQL de gerer le synonyme
401 401
 	// ca permet que excep soit dynamique (Cedric, 2/3/06)
402 402
 	if ($excep != $nom_champ) {
403
-		$excep .= ' AS ' . $nom_champ;
403
+		$excep .= ' AS '.$nom_champ;
404 404
 	}
405 405
 
406 406
 	return ["$t.$excep", $nom_champ];
@@ -648,7 +648,7 @@  discard block
 block discarded – undo
648 648
 		implode(',', $collecte),
649 649
 		($collecte ? $param : substr($param, 1)), # virer la virgule
650 650
 		memoriser_contexte_compil($p),
651
-		($supp ? ', ' . implode(',', $supp) : (''))
651
+		($supp ? ', '.implode(',', $supp) : (''))
652 652
 	);
653 653
 
654 654
 	$p->interdire_scripts = false;
@@ -682,7 +682,7 @@  discard block
 block discarded – undo
682 682
  * @return array
683 683
  *     Liste des codes PHP d'éxecution des balises collectées
684 684
  **/
685
-function collecter_balise_dynamique(array $l, Champ &$p, string $nom): array {
685
+function collecter_balise_dynamique(array $l, Champ & $p, string $nom): array {
686 686
 	$args = [];
687 687
 	foreach ($l as $c) {
688 688
 		if ($c === null) {
@@ -747,7 +747,7 @@  discard block
 block discarded – undo
747 747
 	$nom = $p->id_boucle;
748 748
 
749 749
 	if ($nom && trouver_nom_serveur_distant($p)) {
750
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
750
+		spip_log($nom.':'.$p->nom_champ.' '._T('zbug_distant_interdit'));
751 751
 
752 752
 		return false;
753 753
 	}
@@ -823,7 +823,7 @@  discard block
 block discarded – undo
823 823
 		&& $p->descr['documents']
824 824
 		&& (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825 825
 	) {
826
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
826
+		$ps = 'traiter_doublons_documents($doublons, '.$ps.')';
827 827
 	}
828 828
 
829 829
 	// La protection des champs par |safehtml est assuree par les extensions
@@ -927,7 +927,7 @@  discard block
 block discarded – undo
927 927
 function compose_filtres_args($p, $args, $sep) {
928 928
 	$arglist = '';
929 929
 	foreach ($args as $arg) {
930
-		$arglist .= $sep .
930
+		$arglist .= $sep.
931 931
 			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
932 932
 	}
933 933
 
@@ -977,7 +977,7 @@  discard block
 block discarded – undo
977 977
 	while ($b != '') {
978 978
 		foreach ($p->boucles[$b]->criteres as $critere) {
979 979
 			if ($critere->op == $motif) {
980
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
+				$p->code = '$Pile[$SP'.(($n == 0) ? '' : "-$n").
981 981
 					"]['$champ']";
982 982
 				$b = '';
983 983
 				break 2;
@@ -1005,6 +1005,6 @@  discard block
 block discarded – undo
1005 1005
  */
1006 1006
 function zbug_presenter_champ($p, $champ = '') {
1007 1007
 	$balise = $champ ?: $p->nom_champ;
1008
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
+	$explicite = $p->nom_boucle ? $p->nom_boucle.':' : '';
1009 1009
 	return "#{$explicite}{$balise}";
1010 1010
 }
Please login to merge, or discard this patch.
Indentation   +532 added lines, -532 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  * @package SPIP\Core\Compilateur\References
19 19
  **/
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /**
@@ -43,14 +43,14 @@  discard block
 block discarded – undo
43 43
  *     - '' si une référence explicite incorrecte est envoyée
44 44
  */
45 45
 function index_boucle($p) {
46
-	if (strlen($p->nom_boucle)) {
47
-		// retourne l’index explicite demandé s’il existe
48
-		if (!empty($p->boucles[$p->nom_boucle])) {
49
-			return $p->nom_boucle;
50
-		}
51
-		return '';
52
-	}
53
-	return $p->id_boucle;
46
+    if (strlen($p->nom_boucle)) {
47
+        // retourne l’index explicite demandé s’il existe
48
+        if (!empty($p->boucles[$p->nom_boucle])) {
49
+            return $p->nom_boucle;
50
+        }
51
+        return '';
52
+    }
53
+    return $p->id_boucle;
54 54
 }
55 55
 
56 56
 
@@ -73,17 +73,17 @@  discard block
 block discarded – undo
73 73
  *     - '' si une référence explicite incorrecte est envoyée
74 74
  */
75 75
 function index_boucle_mere($p) {
76
-	if (strlen($p->nom_boucle)) {
77
-		// retourne l’index explicite demandé s’il existe
78
-		if (!empty($p->boucles[$p->nom_boucle])) {
79
-			return $p->nom_boucle;
80
-		}
81
-		return '';
82
-	}
83
-	if (!empty($p->descr['id_mere'])) {
84
-		return $p->descr['id_mere'];
85
-	}
86
-	return '';
76
+    if (strlen($p->nom_boucle)) {
77
+        // retourne l’index explicite demandé s’il existe
78
+        if (!empty($p->boucles[$p->nom_boucle])) {
79
+            return $p->nom_boucle;
80
+        }
81
+        return '';
82
+    }
83
+    if (!empty($p->descr['id_mere'])) {
84
+        return $p->descr['id_mere'];
85
+    }
86
+    return '';
87 87
 }
88 88
 
89 89
 /**
@@ -117,74 +117,74 @@  discard block
 block discarded – undo
117 117
  *     Code PHP pour obtenir le champ SQL
118 118
  */
119 119
 function index_pile(
120
-	$idb,
121
-	$nom_champ,
122
-	&$boucles,
123
-	$explicite = '',
124
-	$defaut = null,
125
-	$remonte_pile = true,
126
-	$select = true
120
+    $idb,
121
+    $nom_champ,
122
+    &$boucles,
123
+    $explicite = '',
124
+    $defaut = null,
125
+    $remonte_pile = true,
126
+    $select = true
127 127
 ) {
128
-	if (!is_string($defaut)) {
129
-		$defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
130
-	}
131
-
132
-	$idb_origine = $idb;
133
-	$nom_champ_origine = $nom_champ;
134
-
135
-	$i = 0;
136
-	if (strlen($explicite)) {
137
-		// Recherche d'un champ dans un etage superieur
138
-		while (($idb !== $explicite) && ($idb !== '')) {
139
-			#	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
-			$i++;
141
-			$idb = $boucles[$idb]->id_parent;
142
-		}
143
-	}
144
-
145
-	#	spip_log("Cherche: $nom_champ a partir de '$idb'");
146
-	$nom_champ = strtolower($nom_champ);
147
-	$conditionnel = [];
148
-	// attention: entre la boucle nommee 0, "" et le tableau vide,
149
-	// il y a incoherences qu'il vaut mieux eviter
150
-	while (isset($boucles[$idb])) {
151
-		$joker = true;
152
-		// modifie $joker si tous les champs sont autorisés.
153
-		// $t = le select pour le champ, si on l'a trouvé (ou si joker)
154
-		// $c = le nom du champ demandé
155
-		[$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
156
-		if ($t) {
157
-			if ($select && !in_array($t, $boucles[$idb]->select)) {
158
-				$boucles[$idb]->select[] = $t;
159
-			}
160
-			// renseigner la boucle source de ce champ pour les traitements
161
-			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
163
-			if (!$joker) {
164
-				return index_compose($conditionnel, $champ);
165
-			}
166
-
167
-			// tant que l'on trouve des tables avec joker, on continue
168
-			// avec la boucle parente et on conditionne à l'exécution
169
-			// la présence du champ. Si le champ existe à l'exécution
170
-			// dans une boucle, il est pris, sinon on le cherche dans le parent...
171
-			$conditionnel[] = "isset($champ)?$champ";
172
-		}
173
-
174
-		if ($remonte_pile) {
175
-			#	spip_log("On remonte vers $i");
176
-			// Sinon on remonte d'un cran
177
-			$idb = $boucles[$idb]->id_parent;
178
-			$i++;
179
-		} else {
180
-			$idb = null;
181
-		}
182
-	}
183
-
184
-	#	spip_log("Pas vu $nom_champ");
185
-	// esperons qu'il y sera
186
-	// ou qu'on a fourni une valeur par "defaut" plus pertinent
187
-	return index_compose($conditionnel, $defaut);
128
+    if (!is_string($defaut)) {
129
+        $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
130
+    }
131
+
132
+    $idb_origine = $idb;
133
+    $nom_champ_origine = $nom_champ;
134
+
135
+    $i = 0;
136
+    if (strlen($explicite)) {
137
+        // Recherche d'un champ dans un etage superieur
138
+        while (($idb !== $explicite) && ($idb !== '')) {
139
+            #	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
+            $i++;
141
+            $idb = $boucles[$idb]->id_parent;
142
+        }
143
+    }
144
+
145
+    #	spip_log("Cherche: $nom_champ a partir de '$idb'");
146
+    $nom_champ = strtolower($nom_champ);
147
+    $conditionnel = [];
148
+    // attention: entre la boucle nommee 0, "" et le tableau vide,
149
+    // il y a incoherences qu'il vaut mieux eviter
150
+    while (isset($boucles[$idb])) {
151
+        $joker = true;
152
+        // modifie $joker si tous les champs sont autorisés.
153
+        // $t = le select pour le champ, si on l'a trouvé (ou si joker)
154
+        // $c = le nom du champ demandé
155
+        [$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
156
+        if ($t) {
157
+            if ($select && !in_array($t, $boucles[$idb]->select)) {
158
+                $boucles[$idb]->select[] = $t;
159
+            }
160
+            // renseigner la boucle source de ce champ pour les traitements
161
+            $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
+            $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
163
+            if (!$joker) {
164
+                return index_compose($conditionnel, $champ);
165
+            }
166
+
167
+            // tant que l'on trouve des tables avec joker, on continue
168
+            // avec la boucle parente et on conditionne à l'exécution
169
+            // la présence du champ. Si le champ existe à l'exécution
170
+            // dans une boucle, il est pris, sinon on le cherche dans le parent...
171
+            $conditionnel[] = "isset($champ)?$champ";
172
+        }
173
+
174
+        if ($remonte_pile) {
175
+            #	spip_log("On remonte vers $i");
176
+            // Sinon on remonte d'un cran
177
+            $idb = $boucles[$idb]->id_parent;
178
+            $i++;
179
+        } else {
180
+            $idb = null;
181
+        }
182
+    }
183
+
184
+    #	spip_log("Pas vu $nom_champ");
185
+    // esperons qu'il y sera
186
+    // ou qu'on a fourni une valeur par "defaut" plus pertinent
187
+    return index_compose($conditionnel, $defaut);
188 188
 }
189 189
 
190 190
 /**
@@ -198,12 +198,12 @@  discard block
 block discarded – undo
198 198
  * @return string              Code PHP complet de recherche d'un champ
199 199
  */
200 200
 function index_compose($conditionnel, $defaut) {
201
-	while ($c = array_pop($conditionnel)) {
202
-		// si on passe defaut = '', ne pas générer d'erreur de compilation.
203
-		$defaut = "($c:(" . ($defaut ?: "''") . '))';
204
-	}
201
+    while ($c = array_pop($conditionnel)) {
202
+        // si on passe defaut = '', ne pas générer d'erreur de compilation.
203
+        $defaut = "($c:(" . ($defaut ?: "''") . '))';
204
+    }
205 205
 
206
-	return $defaut;
206
+    return $defaut;
207 207
 }
208 208
 
209 209
 /**
@@ -239,98 +239,98 @@  discard block
 block discarded – undo
239 239
  **/
240 240
 function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) {
241 241
 
242
-	$r = $boucles[$idb]->type_requete;
243
-	// boucle recursive, c'est foutu...
244
-	if ($r == TYPE_RECURSIF) {
245
-		return [];
246
-	}
247
-	if (!$r) {
248
-		$joker = false; // indiquer a l'appelant
249
-		# continuer pour chercher l'erreur suivante
250
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
251
-	}
252
-
253
-	$desc = $boucles[$idb]->show;
254
-	// le nom du champ est il une exception de la table ? un alias ?
255
-	$excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
256
-	if ($excep) {
257
-		$excep = $excep[$nom_champ] ?? '';
258
-	}
259
-
260
-	// il y a un alias connu pour ce champ
261
-	if ($excep) {
262
-		$joker = false; // indiquer a l'appelant
263
-		return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
264
-	}
265
-
266
-	// le champ existe dans la table, on le prend.
267
-	if (isset($desc['field'][$nom_champ])) {
268
-		$t = $boucles[$idb]->id_table ?? '';
269
-		$joker = false; // indiquer a l'appelant
270
-		// note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] …
271
-		return ["$t.$nom_champ", $nom_champ];
272
-	}
273
-
274
-	// Tous les champs sont-ils acceptés ?
275
-	// Si oui, on retourne le champ, et on lève le flag joker
276
-	// C'est le cas des itérateurs DATA qui acceptent tout
277
-	// et testent la présence du champ à l'exécution et non à la compilation
278
-	// car ils ne connaissent pas ici leurs contenus.
279
-	if (
280
-		/*$joker AND */
281
-		isset($desc['field']['*'])
282
-	) {
283
-		$joker = true; // indiquer a l'appelant
284
-		return [$nom_champ, $nom_champ];
285
-	}
286
-
287
-	$joker = false; // indiquer a l'appelant
288
-
289
-	// la table de jointure est explicitement indiquée (rubrique.titre)
290
-	if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291
-		[, $_table, $_nom_champ] = $r;
292
-		if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
-			$_alias = $cle . '_' . $_nom_champ;
294
-			return index_exception(
295
-				$boucles[$idb],
296
-				$desc,
297
-				$_alias,
298
-				[$_table, $_nom_champ]
299
-			);
300
-		}
301
-		return ['', ''];
302
-	}
303
-
304
-	// pas d'alias, pas de champ, pas de joker...
305
-	// tenter via une jointure...
306
-
307
-	// regarder si le champ est deja dans une jointure existante
308
-	// sinon, si il y a des joitures explicites, la construire
309
-	if (
310
-		!($t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]))
311
-		&& $boucles[$idb]->jointures_explicites
312
-	) {
313
-		// [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
314
-		// fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
315
-		// mais est-ce ce qu'on veut ?
316
-		$jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
317
-		if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
318
-			$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
319
-		}
320
-	}
321
-
322
-	if ($t) {
323
-		// si on a trouvé une jointure possible, on fait comme
324
-		// si c'était une exception pour le champ demandé
325
-		return index_exception(
326
-			$boucles[$idb],
327
-			$desc,
328
-			$nom_champ,
329
-			[$t[1]['id_table'], reset($t[2])]
330
-		);
331
-	}
332
-
333
-	return ['', ''];
242
+    $r = $boucles[$idb]->type_requete;
243
+    // boucle recursive, c'est foutu...
244
+    if ($r == TYPE_RECURSIF) {
245
+        return [];
246
+    }
247
+    if (!$r) {
248
+        $joker = false; // indiquer a l'appelant
249
+        # continuer pour chercher l'erreur suivante
250
+        return ["'#" . $r . ':' . $nom_champ . "'", ''];
251
+    }
252
+
253
+    $desc = $boucles[$idb]->show;
254
+    // le nom du champ est il une exception de la table ? un alias ?
255
+    $excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
256
+    if ($excep) {
257
+        $excep = $excep[$nom_champ] ?? '';
258
+    }
259
+
260
+    // il y a un alias connu pour ce champ
261
+    if ($excep) {
262
+        $joker = false; // indiquer a l'appelant
263
+        return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
264
+    }
265
+
266
+    // le champ existe dans la table, on le prend.
267
+    if (isset($desc['field'][$nom_champ])) {
268
+        $t = $boucles[$idb]->id_table ?? '';
269
+        $joker = false; // indiquer a l'appelant
270
+        // note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] …
271
+        return ["$t.$nom_champ", $nom_champ];
272
+    }
273
+
274
+    // Tous les champs sont-ils acceptés ?
275
+    // Si oui, on retourne le champ, et on lève le flag joker
276
+    // C'est le cas des itérateurs DATA qui acceptent tout
277
+    // et testent la présence du champ à l'exécution et non à la compilation
278
+    // car ils ne connaissent pas ici leurs contenus.
279
+    if (
280
+        /*$joker AND */
281
+        isset($desc['field']['*'])
282
+    ) {
283
+        $joker = true; // indiquer a l'appelant
284
+        return [$nom_champ, $nom_champ];
285
+    }
286
+
287
+    $joker = false; // indiquer a l'appelant
288
+
289
+    // la table de jointure est explicitement indiquée (rubrique.titre)
290
+    if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291
+        [, $_table, $_nom_champ] = $r;
292
+        if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
+            $_alias = $cle . '_' . $_nom_champ;
294
+            return index_exception(
295
+                $boucles[$idb],
296
+                $desc,
297
+                $_alias,
298
+                [$_table, $_nom_champ]
299
+            );
300
+        }
301
+        return ['', ''];
302
+    }
303
+
304
+    // pas d'alias, pas de champ, pas de joker...
305
+    // tenter via une jointure...
306
+
307
+    // regarder si le champ est deja dans une jointure existante
308
+    // sinon, si il y a des joitures explicites, la construire
309
+    if (
310
+        !($t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]))
311
+        && $boucles[$idb]->jointures_explicites
312
+    ) {
313
+        // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
314
+        // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
315
+        // mais est-ce ce qu'on veut ?
316
+        $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
317
+        if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
318
+            $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
319
+        }
320
+    }
321
+
322
+    if ($t) {
323
+        // si on a trouvé une jointure possible, on fait comme
324
+        // si c'était une exception pour le champ demandé
325
+        return index_exception(
326
+            $boucles[$idb],
327
+            $desc,
328
+            $nom_champ,
329
+            [$t[1]['id_table'], reset($t[2])]
330
+        );
331
+    }
332
+
333
+    return ['', ''];
334 334
 }
335 335
 
336 336
 
@@ -358,52 +358,52 @@  discard block
 block discarded – undo
358 358
  *     est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
359 359
  **/
360 360
 function index_exception(&$boucle, $desc, $nom_champ, $excep) {
361
-	static $trouver_table;
362
-	if (!$trouver_table) {
363
-		$trouver_table = charger_fonction('trouver_table', 'base');
364
-	}
365
-
366
-	if (is_array($excep)) {
367
-		// permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
368
-		$t = null;
369
-		if (count($excep) == 3) {
370
-			$index_exception_derogatoire = array_pop($excep);
371
-			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372
-		}
373
-		if ($t == null) {
374
-			[$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
-			$excep = $x;    #PHP5 de droite a gauche !
376
-			$j = $trouver_table($e, $boucle->sql_serveur);
377
-			if (!$j) {
378
-				return ['', ''];
379
-			}
380
-			$e = $j['table'];
381
-			if (!$t = array_search($e, $boucle->from)) {
382
-				$k = $j['key']['PRIMARY KEY'];
383
-				if (strpos($k, ',')) {
384
-					$l = (preg_split('/\s*,\s*/', $k));
385
-					$k = $desc['key']['PRIMARY KEY'];
386
-					if (!in_array($k, $l)) {
387
-						spip_log("jointure impossible $e " . implode(',', $l));
388
-
389
-						return ['', ''];
390
-					}
391
-				}
392
-				$k = [$boucle->id_table, [$e], $k];
393
-				fabrique_jointures($boucle, [$k]);
394
-				$t = array_search($e, $boucle->from);
395
-			}
396
-		}
397
-	} else {
398
-		$t = $boucle->id_table;
399
-	}
400
-	// demander a SQL de gerer le synonyme
401
-	// ca permet que excep soit dynamique (Cedric, 2/3/06)
402
-	if ($excep != $nom_champ) {
403
-		$excep .= ' AS ' . $nom_champ;
404
-	}
405
-
406
-	return ["$t.$excep", $nom_champ];
361
+    static $trouver_table;
362
+    if (!$trouver_table) {
363
+        $trouver_table = charger_fonction('trouver_table', 'base');
364
+    }
365
+
366
+    if (is_array($excep)) {
367
+        // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
368
+        $t = null;
369
+        if (count($excep) == 3) {
370
+            $index_exception_derogatoire = array_pop($excep);
371
+            $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372
+        }
373
+        if ($t == null) {
374
+            [$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
+            $excep = $x;    #PHP5 de droite a gauche !
376
+            $j = $trouver_table($e, $boucle->sql_serveur);
377
+            if (!$j) {
378
+                return ['', ''];
379
+            }
380
+            $e = $j['table'];
381
+            if (!$t = array_search($e, $boucle->from)) {
382
+                $k = $j['key']['PRIMARY KEY'];
383
+                if (strpos($k, ',')) {
384
+                    $l = (preg_split('/\s*,\s*/', $k));
385
+                    $k = $desc['key']['PRIMARY KEY'];
386
+                    if (!in_array($k, $l)) {
387
+                        spip_log("jointure impossible $e " . implode(',', $l));
388
+
389
+                        return ['', ''];
390
+                    }
391
+                }
392
+                $k = [$boucle->id_table, [$e], $k];
393
+                fabrique_jointures($boucle, [$k]);
394
+                $t = array_search($e, $boucle->from);
395
+            }
396
+        }
397
+    } else {
398
+        $t = $boucle->id_table;
399
+    }
400
+    // demander a SQL de gerer le synonyme
401
+    // ca permet que excep soit dynamique (Cedric, 2/3/06)
402
+    if ($excep != $nom_champ) {
403
+        $excep .= ' AS ' . $nom_champ;
404
+    }
405
+
406
+    return ["$t.$excep", $nom_champ];
407 407
 }
408 408
 
409 409
 /**
@@ -428,7 +428,7 @@  discard block
 block discarded – undo
428 428
  *     Code PHP pour retrouver le champ
429 429
  */
430 430
 function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) {
431
-	return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
431
+    return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
432 432
 }
433 433
 
434 434
 
@@ -448,9 +448,9 @@  discard block
 block discarded – undo
448 448
  *     Code PHP pour d'exécution de la balise et de ses filtres
449 449
  **/
450 450
 function calculer_champ($p) {
451
-	$p = calculer_balise($p->nom_champ, $p);
451
+    $p = calculer_balise($p->nom_champ, $p);
452 452
 
453
-	return applique_filtres($p);
453
+    return applique_filtres($p);
454 454
 }
455 455
 
456 456
 
@@ -487,26 +487,26 @@  discard block
 block discarded – undo
487 487
  **/
488 488
 function calculer_balise(string $nom, Champ $p): Champ {
489 489
 
490
-	// S'agit-t-il d'une balise_XXXX[_dist]() ?
491
-	if ($f = charger_fonction($nom, 'balise', true)) {
492
-		$p->balise_calculee = true;
493
-		$res = $f($p);
494
-		if ($res !== null && is_object($res)) {
495
-			return $res;
496
-		}
497
-	}
498
-
499
-	// Certaines des balises comportant un _ sont generiques
500
-	if ($balise_generique = chercher_balise_generique($nom)) {
501
-		$res = $balise_generique['fonction_generique']($p);
502
-		if ($res !== null && is_object($res)) {
503
-			return $res;
504
-		}
505
-	}
506
-
507
-	$f = charger_fonction('DEFAUT', 'calculer_balise');
508
-
509
-	return $f($nom, $p);
490
+    // S'agit-t-il d'une balise_XXXX[_dist]() ?
491
+    if ($f = charger_fonction($nom, 'balise', true)) {
492
+        $p->balise_calculee = true;
493
+        $res = $f($p);
494
+        if ($res !== null && is_object($res)) {
495
+            return $res;
496
+        }
497
+    }
498
+
499
+    // Certaines des balises comportant un _ sont generiques
500
+    if ($balise_generique = chercher_balise_generique($nom)) {
501
+        $res = $balise_generique['fonction_generique']($p);
502
+        if ($res !== null && is_object($res)) {
503
+            return $res;
504
+        }
505
+    }
506
+
507
+    $f = charger_fonction('DEFAUT', 'calculer_balise');
508
+
509
+    return $f($nom, $p);
510 510
 }
511 511
 
512 512
 
@@ -534,33 +534,33 @@  discard block
 block discarded – undo
534 534
  **/
535 535
 function calculer_balise_DEFAUT_dist($nom, $p) {
536 536
 
537
-	// ca pourrait etre un champ SQL homonyme,
538
-	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
539
-
540
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
541
-	// il faut recracher {...} quand ce n'est finalement pas des args
542
-	if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
543
-		$code = addslashes($p->fonctions[0][1]);
544
-		$p->code .= " . '$code'";
545
-	}
546
-
547
-	// ne pas passer le filtre securite sur les id_xxx
548
-	if (str_starts_with($nom, 'ID_')) {
549
-		$p->interdire_scripts = false;
550
-	}
551
-
552
-	// Compatibilite ascendante avec les couleurs html (#FEFEFE) :
553
-	// SI le champ SQL n'est pas trouve
554
-	// ET si la balise a une forme de couleur
555
-	// ET s'il n'y a ni filtre ni etoile
556
-	// ALORS retourner la couleur.
557
-	// Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
558
-	if (preg_match('/^[A-F]{1,6}$/i', $nom) && !$p->etoile && !$p->fonctions) {
559
-		$p->code = "'#$nom'";
560
-		$p->interdire_scripts = false;
561
-	}
562
-
563
-	return $p;
537
+    // ca pourrait etre un champ SQL homonyme,
538
+    $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
539
+
540
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
541
+    // il faut recracher {...} quand ce n'est finalement pas des args
542
+    if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
543
+        $code = addslashes($p->fonctions[0][1]);
544
+        $p->code .= " . '$code'";
545
+    }
546
+
547
+    // ne pas passer le filtre securite sur les id_xxx
548
+    if (str_starts_with($nom, 'ID_')) {
549
+        $p->interdire_scripts = false;
550
+    }
551
+
552
+    // Compatibilite ascendante avec les couleurs html (#FEFEFE) :
553
+    // SI le champ SQL n'est pas trouve
554
+    // ET si la balise a une forme de couleur
555
+    // ET s'il n'y a ni filtre ni etoile
556
+    // ALORS retourner la couleur.
557
+    // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
558
+    if (preg_match('/^[A-F]{1,6}$/i', $nom) && !$p->etoile && !$p->fonctions) {
559
+        $p->code = "'#$nom'";
560
+        $p->interdire_scripts = false;
561
+    }
562
+
563
+    return $p;
564 564
 }
565 565
 
566 566
 
@@ -608,52 +608,52 @@  discard block
 block discarded – undo
608 608
  **/
609 609
 function calculer_balise_dynamique($p, $nom, $l, $supp = []) {
610 610
 
611
-	if (!balise_distante_interdite($p)) {
612
-		$p->code = "''";
613
-
614
-		return $p;
615
-	}
616
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
617
-	// il faut recracher {...} quand ce n'est finalement pas des args
618
-	if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
619
-		$p->fonctions = [];
620
-	}
621
-
622
-	if ($p->param && ($c = $p->param[0])) {
623
-		// liste d'arguments commence toujours par la chaine vide
624
-		array_shift($c);
625
-		// construire la liste d'arguments comme pour un filtre
626
-		$param = compose_filtres_args($p, $c, ',');
627
-	} else {
628
-		$param = '';
629
-	}
630
-	$collecte = collecter_balise_dynamique($l, $p, $nom);
631
-
632
-	$dans_un_modele = false;
633
-	if (
634
-		!empty($p->descr['sourcefile']) && ($f = $p->descr['sourcefile']) && basename(dirname($f)) === 'modeles'
635
-	) {
636
-		$dans_un_modele = true;
637
-	}
638
-
639
-	// un modele est toujours inséré en texte dans son contenant
640
-	// donc si on est dans le public avec un cache on va perdre le dynamisme
641
-	// et on risque de mettre en cache les valeurs pre-remplies du formulaire
642
-	// on passe donc par une fonction proxy qui si besoin va collecter les arguments
643
-	// et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
644
-	// (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave))
645
-	$p->code = sprintf(
646
-		$dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE,
647
-		$nom,
648
-		implode(',', $collecte),
649
-		($collecte ? $param : substr($param, 1)), # virer la virgule
650
-		memoriser_contexte_compil($p),
651
-		($supp ? ', ' . implode(',', $supp) : (''))
652
-	);
653
-
654
-	$p->interdire_scripts = false;
655
-
656
-	return $p;
611
+    if (!balise_distante_interdite($p)) {
612
+        $p->code = "''";
613
+
614
+        return $p;
615
+    }
616
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
617
+    // il faut recracher {...} quand ce n'est finalement pas des args
618
+    if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
619
+        $p->fonctions = [];
620
+    }
621
+
622
+    if ($p->param && ($c = $p->param[0])) {
623
+        // liste d'arguments commence toujours par la chaine vide
624
+        array_shift($c);
625
+        // construire la liste d'arguments comme pour un filtre
626
+        $param = compose_filtres_args($p, $c, ',');
627
+    } else {
628
+        $param = '';
629
+    }
630
+    $collecte = collecter_balise_dynamique($l, $p, $nom);
631
+
632
+    $dans_un_modele = false;
633
+    if (
634
+        !empty($p->descr['sourcefile']) && ($f = $p->descr['sourcefile']) && basename(dirname($f)) === 'modeles'
635
+    ) {
636
+        $dans_un_modele = true;
637
+    }
638
+
639
+    // un modele est toujours inséré en texte dans son contenant
640
+    // donc si on est dans le public avec un cache on va perdre le dynamisme
641
+    // et on risque de mettre en cache les valeurs pre-remplies du formulaire
642
+    // on passe donc par une fonction proxy qui si besoin va collecter les arguments
643
+    // et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
644
+    // (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave))
645
+    $p->code = sprintf(
646
+        $dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE,
647
+        $nom,
648
+        implode(',', $collecte),
649
+        ($collecte ? $param : substr($param, 1)), # virer la virgule
650
+        memoriser_contexte_compil($p),
651
+        ($supp ? ', ' . implode(',', $supp) : (''))
652
+    );
653
+
654
+    $p->interdire_scripts = false;
655
+
656
+    return $p;
657 657
 }
658 658
 
659 659
 
@@ -683,17 +683,17 @@  discard block
 block discarded – undo
683 683
  *     Liste des codes PHP d'éxecution des balises collectées
684 684
  **/
685 685
 function collecter_balise_dynamique(array $l, Champ &$p, string $nom): array {
686
-	$args = [];
687
-	foreach ($l as $c) {
688
-		if ($c === null) {
689
-			$args[] = 'null';
690
-		} else {
691
-			$x = calculer_balise($c, $p);
692
-			$args[] = $x->code;
693
-		}
694
-	}
695
-
696
-	return $args;
686
+    $args = [];
687
+    foreach ($l as $c) {
688
+        if ($c === null) {
689
+            $args[] = 'null';
690
+        } else {
691
+            $x = calculer_balise($c, $p);
692
+            $args[] = $x->code;
693
+        }
694
+    }
695
+
696
+    return $args;
697 697
 }
698 698
 
699 699
 
@@ -708,19 +708,19 @@  discard block
 block discarded – undo
708 708
  *     Nom de la connexion
709 709
  **/
710 710
 function trouver_nom_serveur_distant($p) {
711
-	$nom = $p->id_boucle;
712
-	if (
713
-		$nom && isset($p->boucles[$nom])
714
-	) {
715
-		$s = $p->boucles[$nom]->sql_serveur;
716
-		if (
717
-			strlen($s) && strlen($serveur = strtolower($s)) && !in_array($serveur, $GLOBALS['exception_des_connect'])
718
-		) {
719
-			return $serveur;
720
-		}
721
-	}
722
-
723
-	return '';
711
+    $nom = $p->id_boucle;
712
+    if (
713
+        $nom && isset($p->boucles[$nom])
714
+    ) {
715
+        $s = $p->boucles[$nom]->sql_serveur;
716
+        if (
717
+            strlen($s) && strlen($serveur = strtolower($s)) && !in_array($serveur, $GLOBALS['exception_des_connect'])
718
+        ) {
719
+            return $serveur;
720
+        }
721
+    }
722
+
723
+    return '';
724 724
 }
725 725
 
726 726
 
@@ -744,15 +744,15 @@  discard block
 block discarded – undo
744 744
  *     - false : La balise est interdite car le serveur est distant
745 745
  **/
746 746
 function balise_distante_interdite($p) {
747
-	$nom = $p->id_boucle;
747
+    $nom = $p->id_boucle;
748 748
 
749
-	if ($nom && trouver_nom_serveur_distant($p)) {
750
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
749
+    if ($nom && trouver_nom_serveur_distant($p)) {
750
+        spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
751 751
 
752
-		return false;
753
-	}
752
+        return false;
753
+    }
754 754
 
755
-	return true;
755
+    return true;
756 756
 }
757 757
 
758 758
 
@@ -762,75 +762,75 @@  discard block
 block discarded – undo
762 762
 //
763 763
 function champs_traitements($p) {
764 764
 
765
-	if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
766
-		$ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
767
-	} else {
768
-		// quand on utilise un traitement catch-all *
769
-		// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
770
-		// leur propre securite
771
-		$ps = $p->balise_calculee ? false : $GLOBALS['table_des_traitements']['*'];
772
-	}
773
-
774
-	if (is_array($ps)) {
775
-		// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
776
-		$idb = index_boucle($p);
777
-		// si le champ a ete trouve dans une boucle parente sa source est renseignee ici
778
-		if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
779
-			$idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
780
-		}
781
-
782
-		// mais on peut aussi etre hors boucle. Se mefier.
783
-		$type_requete = $p->boucles[$idb]->type_requete ?? false;
784
-		$table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
785
-
786
-		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
787
-		if ($type_requete && isset($GLOBALS['table_des_tables'][$type_requete])) {
788
-			$type_alias = $type_requete;
789
-			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
790
-		} else {
791
-			$type_alias = false;
792
-		}
793
-
794
-		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
795
-		if ($table_sql && isset($ps[$table_sql])) {
796
-			$ps = $ps[$table_sql];
797
-		} // ou pour une boucle en particulier "DATA","articles"
798
-		elseif ($type_requete && isset($ps[$type_requete])) {
799
-			$ps = $ps[$type_requete];
800
-		} // ou pour une boucle utilisant un alias ("hierarchie")
801
-		elseif ($type_alias && isset($ps[$type_alias])) {
802
-			$ps = $ps[$type_alias];
803
-		} // ou pour indifféremment quelle que soit la boucle
804
-		elseif (isset($ps[0])) {
805
-			$ps = $ps[0];
806
-		} else {
807
-			$ps = false;
808
-		}
809
-	}
810
-
811
-	if (!$ps) {
812
-		return $p->code;
813
-	}
814
-
815
-	// Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
816
-	// ou si in INCLURE contient {doublons}
817
-	// on insere une fonction de remplissage du tableau des doublons
818
-	// dans les filtres propre() ou typo()
819
-	// (qui traitent les raccourcis <docXX> referencant les docs)
820
-
821
-	if (
822
-		isset($p->descr['documents'])
823
-		&& $p->descr['documents']
824
-		&& (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825
-	) {
826
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
827
-	}
828
-
829
-	// La protection des champs par |safehtml est assuree par les extensions
830
-	// dans la declaration des traitements des champs sensibles
831
-
832
-	// Remplacer enfin le placeholder %s par le vrai code de la balise
833
-	return str_replace('%s', $p->code, $ps);
765
+    if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
766
+        $ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
767
+    } else {
768
+        // quand on utilise un traitement catch-all *
769
+        // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
770
+        // leur propre securite
771
+        $ps = $p->balise_calculee ? false : $GLOBALS['table_des_traitements']['*'];
772
+    }
773
+
774
+    if (is_array($ps)) {
775
+        // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
776
+        $idb = index_boucle($p);
777
+        // si le champ a ete trouve dans une boucle parente sa source est renseignee ici
778
+        if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
779
+            $idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
780
+        }
781
+
782
+        // mais on peut aussi etre hors boucle. Se mefier.
783
+        $type_requete = $p->boucles[$idb]->type_requete ?? false;
784
+        $table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
785
+
786
+        // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
787
+        if ($type_requete && isset($GLOBALS['table_des_tables'][$type_requete])) {
788
+            $type_alias = $type_requete;
789
+            $type_requete = $GLOBALS['table_des_tables'][$type_requete];
790
+        } else {
791
+            $type_alias = false;
792
+        }
793
+
794
+        // le traitement peut n'etre defini que pour une table en particulier "spip_articles"
795
+        if ($table_sql && isset($ps[$table_sql])) {
796
+            $ps = $ps[$table_sql];
797
+        } // ou pour une boucle en particulier "DATA","articles"
798
+        elseif ($type_requete && isset($ps[$type_requete])) {
799
+            $ps = $ps[$type_requete];
800
+        } // ou pour une boucle utilisant un alias ("hierarchie")
801
+        elseif ($type_alias && isset($ps[$type_alias])) {
802
+            $ps = $ps[$type_alias];
803
+        } // ou pour indifféremment quelle que soit la boucle
804
+        elseif (isset($ps[0])) {
805
+            $ps = $ps[0];
806
+        } else {
807
+            $ps = false;
808
+        }
809
+    }
810
+
811
+    if (!$ps) {
812
+        return $p->code;
813
+    }
814
+
815
+    // Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
816
+    // ou si in INCLURE contient {doublons}
817
+    // on insere une fonction de remplissage du tableau des doublons
818
+    // dans les filtres propre() ou typo()
819
+    // (qui traitent les raccourcis <docXX> referencant les docs)
820
+
821
+    if (
822
+        isset($p->descr['documents'])
823
+        && $p->descr['documents']
824
+        && (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825
+    ) {
826
+        $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
827
+    }
828
+
829
+    // La protection des champs par |safehtml est assuree par les extensions
830
+    // dans la declaration des traitements des champs sensibles
831
+
832
+    // Remplacer enfin le placeholder %s par le vrai code de la balise
833
+    return str_replace('%s', $p->code, $ps);
834 834
 }
835 835
 
836 836
 
@@ -842,95 +842,95 @@  discard block
 block discarded – undo
842 842
 //
843 843
 function applique_filtres($p) {
844 844
 
845
-	// Traitements standards (cf. supra)
846
-	$code = $p->etoile == '' ? champs_traitements($p) : $p->code;
845
+    // Traitements standards (cf. supra)
846
+    $code = $p->etoile == '' ? champs_traitements($p) : $p->code;
847 847
 
848
-	// Appliquer les filtres perso
849
-	if ($p->param) {
850
-		$code = compose_filtres($p, $code);
851
-	}
848
+    // Appliquer les filtres perso
849
+    if ($p->param) {
850
+        $code = compose_filtres($p, $code);
851
+    }
852 852
 
853
-	// S'il y a un lien avec la session, ajouter un code qui levera
854
-	// un drapeau dans la structure d'invalidation $Cache
855
-	if (isset($p->descr['session'])) {
856
-		$code = "invalideur_session(\$Cache, $code)";
857
-	}
853
+    // S'il y a un lien avec la session, ajouter un code qui levera
854
+    // un drapeau dans la structure d'invalidation $Cache
855
+    if (isset($p->descr['session'])) {
856
+        $code = "invalideur_session(\$Cache, $code)";
857
+    }
858 858
 
859
-	return sandbox_composer_interdire_scripts($code, $p);
859
+    return sandbox_composer_interdire_scripts($code, $p);
860 860
 }
861 861
 
862 862
 // Cf. function pipeline dans ecrire/inc_utils.php
863 863
 function compose_filtres(&$p, $code) {
864 864
 
865
-	$image_miette = false;
866
-	foreach ($p->param as $filtre) {
867
-		$fonc = array_shift($filtre);
868
-		if (!$fonc) {
869
-			continue;
870
-		} // normalement qu'au premier tour.
871
-		$is_filtre_image = (str_starts_with($fonc, 'image_') && $fonc != 'image_graver');
872
-		if ($image_miette && !$is_filtre_image) {
873
-			// il faut graver maintenant car apres le filtre en cours
874
-			// on est pas sur d'avoir encore le nom du fichier dans le pipe
875
-			$code = "filtrer('image_graver', $code)";
876
-			$image_miette = false;
877
-		}
878
-
879
-		// recuperer les arguments du filtre,
880
-		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
881
-		$countfiltre = is_countable($filtre) ? count($filtre) : 0;
882
-		if ($fonc !== '?') {
883
-			$sep = ',';
884
-		} else {
885
-			$sep = ':';
886
-			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
887
-			if ($countfiltre != 2) {
888
-				$filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
889
-				$countfiltre = 2;
890
-			}
891
-		}
892
-		$arglist = compose_filtres_args($p, $filtre, $sep);
893
-		$logique = filtre_logique($fonc, $code, substr($arglist, 1));
894
-		if ($logique) {
895
-			$code = $logique;
896
-		} else {
897
-			$code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
898
-			if ($is_filtre_image) {
899
-				$image_miette = true;
900
-			}
901
-		}
902
-	}
903
-	// ramasser les images intermediaires inutiles et graver l'image finale
904
-	if ($image_miette) {
905
-		$code = "filtrer('image_graver',$code)";
906
-	}
907
-
908
-	return $code;
865
+    $image_miette = false;
866
+    foreach ($p->param as $filtre) {
867
+        $fonc = array_shift($filtre);
868
+        if (!$fonc) {
869
+            continue;
870
+        } // normalement qu'au premier tour.
871
+        $is_filtre_image = (str_starts_with($fonc, 'image_') && $fonc != 'image_graver');
872
+        if ($image_miette && !$is_filtre_image) {
873
+            // il faut graver maintenant car apres le filtre en cours
874
+            // on est pas sur d'avoir encore le nom du fichier dans le pipe
875
+            $code = "filtrer('image_graver', $code)";
876
+            $image_miette = false;
877
+        }
878
+
879
+        // recuperer les arguments du filtre,
880
+        // a separer par "," ou ":" dans le cas du filtre "?{a,b}"
881
+        $countfiltre = is_countable($filtre) ? count($filtre) : 0;
882
+        if ($fonc !== '?') {
883
+            $sep = ',';
884
+        } else {
885
+            $sep = ':';
886
+            // |?{a,b} *doit* avoir exactement 2 arguments ; on les force
887
+            if ($countfiltre != 2) {
888
+                $filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
889
+                $countfiltre = 2;
890
+            }
891
+        }
892
+        $arglist = compose_filtres_args($p, $filtre, $sep);
893
+        $logique = filtre_logique($fonc, $code, substr($arglist, 1));
894
+        if ($logique) {
895
+            $code = $logique;
896
+        } else {
897
+            $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
898
+            if ($is_filtre_image) {
899
+                $image_miette = true;
900
+            }
901
+        }
902
+    }
903
+    // ramasser les images intermediaires inutiles et graver l'image finale
904
+    if ($image_miette) {
905
+        $code = "filtrer('image_graver',$code)";
906
+    }
907
+
908
+    return $code;
909 909
 }
910 910
 
911 911
 // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes
912 912
 // et comparateurs
913 913
 function filtre_logique($fonc, $code, $arg) {
914
-	return match (true) {
915
-		in_array($fonc, $GLOBALS['table_criteres_infixes']) => "($code $fonc $arg)",
916
-		$fonc == 'and' || $fonc == 'et' => "((($code) AND ($arg)) ?' ' :'')",
917
-		$fonc == 'or' || $fonc == 'ou' => "((($code) OR ($arg)) ?' ' :'')",
918
-		$fonc == 'xor' || $fonc == 'xou' => "((($code) XOR ($arg)) ?' ' :'')",
919
-		$fonc == 'sinon' => "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)",
920
-		$fonc == 'not' || $fonc == 'non' => "(($code) ?'' :' ')",
921
-		$fonc == 'yes' || $fonc == 'oui' => "(($code) ?' ' :'')",
922
-		default => '',
923
-	};
914
+    return match (true) {
915
+        in_array($fonc, $GLOBALS['table_criteres_infixes']) => "($code $fonc $arg)",
916
+        $fonc == 'and' || $fonc == 'et' => "((($code) AND ($arg)) ?' ' :'')",
917
+        $fonc == 'or' || $fonc == 'ou' => "((($code) OR ($arg)) ?' ' :'')",
918
+        $fonc == 'xor' || $fonc == 'xou' => "((($code) XOR ($arg)) ?' ' :'')",
919
+        $fonc == 'sinon' => "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)",
920
+        $fonc == 'not' || $fonc == 'non' => "(($code) ?'' :' ')",
921
+        $fonc == 'yes' || $fonc == 'oui' => "(($code) ?' ' :'')",
922
+        default => '',
923
+    };
924 924
 }
925 925
 
926 926
 function compose_filtres_args($p, $args, $sep) {
927
-	$arglist = '';
928
-	foreach ($args as $arg) {
929
-		$arglist .= $sep .
930
-			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931
-	}
927
+    $arglist = '';
928
+    foreach ($args as $arg) {
929
+        $arglist .= $sep .
930
+            calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931
+    }
932 932
 
933
-	return $arglist;
933
+    return $arglist;
934 934
 }
935 935
 
936 936
 
@@ -948,15 +948,15 @@  discard block
 block discarded – undo
948 948
  **/
949 949
 function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) {
950 950
 
951
-	// si recursif, forcer l'extraction du champ SQL mais ignorer le code
952
-	if ($boucles[$idb]->externe) {
953
-		index_pile($idb, $nom_champ, $boucles, '', $defaut);
954
-		// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
955
-		// on ignore le defaut fourni dans ce cas
956
-		$defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
957
-	}
951
+    // si recursif, forcer l'extraction du champ SQL mais ignorer le code
952
+    if ($boucles[$idb]->externe) {
953
+        index_pile($idb, $nom_champ, $boucles, '', $defaut);
954
+        // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
955
+        // on ignore le defaut fourni dans ce cas
956
+        $defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
957
+    }
958 958
 
959
-	return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
959
+    return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
960 960
 }
961 961
 
962 962
 //
@@ -970,30 +970,30 @@  discard block
 block discarded – undo
970 970
 //
971 971
 
972 972
 function rindex_pile($p, $champ, $motif) {
973
-	$n = 0;
974
-	$b = $p->id_boucle;
975
-	$p->code = '';
976
-	while ($b != '') {
977
-		foreach ($p->boucles[$b]->criteres as $critere) {
978
-			if ($critere->op == $motif) {
979
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
-					"]['$champ']";
981
-				$b = '';
982
-				break 2;
983
-			}
984
-		}
985
-		$n++;
986
-		$b = $p->boucles[$b]->id_parent;
987
-	}
988
-
989
-	// si on est hors d'une boucle de {recherche}, cette balise est vide
990
-	if (!$p->code) {
991
-		$p->code = "''";
992
-	}
993
-
994
-	$p->interdire_scripts = false;
995
-
996
-	return $p;
973
+    $n = 0;
974
+    $b = $p->id_boucle;
975
+    $p->code = '';
976
+    while ($b != '') {
977
+        foreach ($p->boucles[$b]->criteres as $critere) {
978
+            if ($critere->op == $motif) {
979
+                $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
+                    "]['$champ']";
981
+                $b = '';
982
+                break 2;
983
+            }
984
+        }
985
+        $n++;
986
+        $b = $p->boucles[$b]->id_parent;
987
+    }
988
+
989
+    // si on est hors d'une boucle de {recherche}, cette balise est vide
990
+    if (!$p->code) {
991
+        $p->code = "''";
992
+    }
993
+
994
+    $p->interdire_scripts = false;
995
+
996
+    return $p;
997 997
 }
998 998
 
999 999
 /**
@@ -1003,7 +1003,7 @@  discard block
 block discarded – undo
1003 1003
  * @return string Nom de la balise, avec indication de boucle explicite si présent.
1004 1004
  */
1005 1005
 function zbug_presenter_champ($p, $champ = '') {
1006
-	$balise = $champ ?: $p->nom_champ;
1007
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
-	return "#{$explicite}{$balise}";
1006
+    $balise = $champ ?: $p->nom_champ;
1007
+    $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
+    return "#{$explicite}{$balise}";
1009 1009
 }
Please login to merge, or discard this patch.
ecrire/public/tracer.php 3 patches
Braces   +3 added lines, -6 removed lines patch added patch discarded remove patch
@@ -18,15 +18,13 @@  discard block
 block discarded – undo
18 18
 	if ($trace === '?' || defined('_DEBUG_TRACE_QUERIES')) {
19 19
 		if (defined('_DEBUG_TRACE_QUERIES') && _DEBUG_TRACE_QUERIES) {
20 20
 			$trace = true;
21
-		}
22
-		else {
21
+		} else {
23 22
 			if (empty($GLOBALS['visiteur_session'])) {
24 23
 				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
25 24
 				// car ici on ne sait pas si c'est un hit anonyme
26 25
 				// ou une requete SQL faite avant chargement de la session
27 26
 				$trace = (empty($_GET['var_profile']) ? false : '?');
28
-			}
29
-			else {
27
+			} else {
30 28
 				include_spip('inc/autoriser');
31 29
 				// gare au bouclage sur calcul de droits au premier appel
32 30
 				// A fortiori quand on demande une trace
@@ -47,8 +45,7 @@  discard block
 block discarded – undo
47 45
 			// car ici on ne sait pas si c'est un hit anonyme
48 46
 			// ou une requete SQL faite avant chargement de la session
49 47
 			$trace = (empty($_GET['var_profile']) ? false : '?');
50
-		}
51
-		else {
48
+		} else {
52 49
 			include_spip('inc/autoriser');
53 50
 			// gare au bouclage sur calcul de droits au premier appel
54 51
 			// A fortiori quand on demande une trace
Please login to merge, or discard this patch.
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -10,187 +10,187 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 function trace_query_start() {
17
-	static $trace = '?';
18
-	if ($trace === '?' || defined('_DEBUG_TRACE_QUERIES')) {
19
-		if (defined('_DEBUG_TRACE_QUERIES') && _DEBUG_TRACE_QUERIES) {
20
-			$trace = true;
21
-		}
22
-		else {
23
-			if (empty($GLOBALS['visiteur_session'])) {
24
-				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
25
-				// car ici on ne sait pas si c'est un hit anonyme
26
-				// ou une requete SQL faite avant chargement de la session
27
-				$trace = (empty($_GET['var_profile']) ? false : '?');
28
-			}
29
-			else {
30
-				include_spip('inc/autoriser');
31
-				// gare au bouclage sur calcul de droits au premier appel
32
-				// A fortiori quand on demande une trace
33
-				$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
34
-				$trace = (!empty($_GET['var_profile']) && autoriser('debug'));
35
-			}
36
-		}
37
-	}
38
-
39
-	return $trace ? microtime() : 0;
17
+    static $trace = '?';
18
+    if ($trace === '?' || defined('_DEBUG_TRACE_QUERIES')) {
19
+        if (defined('_DEBUG_TRACE_QUERIES') && _DEBUG_TRACE_QUERIES) {
20
+            $trace = true;
21
+        }
22
+        else {
23
+            if (empty($GLOBALS['visiteur_session'])) {
24
+                // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
25
+                // car ici on ne sait pas si c'est un hit anonyme
26
+                // ou une requete SQL faite avant chargement de la session
27
+                $trace = (empty($_GET['var_profile']) ? false : '?');
28
+            }
29
+            else {
30
+                include_spip('inc/autoriser');
31
+                // gare au bouclage sur calcul de droits au premier appel
32
+                // A fortiori quand on demande une trace
33
+                $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
34
+                $trace = (!empty($_GET['var_profile']) && autoriser('debug'));
35
+            }
36
+        }
37
+    }
38
+
39
+    return $trace ? microtime() : 0;
40 40
 }
41 41
 
42 42
 function trace_query_end($query, $start, $result, $erreur, $serveur = '') {
43
-	static $trace = '?';
44
-	if ($trace === '?') {
45
-		if (empty($GLOBALS['visiteur_session'])) {
46
-			// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
47
-			// car ici on ne sait pas si c'est un hit anonyme
48
-			// ou une requete SQL faite avant chargement de la session
49
-			$trace = (empty($_GET['var_profile']) ? false : '?');
50
-		}
51
-		else {
52
-			include_spip('inc/autoriser');
53
-			// gare au bouclage sur calcul de droits au premier appel
54
-			// A fortiori quand on demande une trace
55
-			$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
56
-			$trace = (!empty($_GET['var_profile']) && autoriser('debug'));
57
-		}
58
-	}
59
-	if ($start) {
60
-		$end = microtime();
61
-		[$usec, $sec] = explode(' ', (string) $start);
62
-		[$usec2, $sec2] = explode(' ', $end);
63
-		$dt = $sec2 + $usec2 - $sec - $usec;
64
-		pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
65
-		if ($trace) {
66
-			trace_query_chrono($dt, $query, $result, $serveur);
67
-		}
68
-	}
69
-	// tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
70
-	if ($trace && $erreur && !preg_match('/^select\b/i', (string) $query)) {
71
-		erreur_squelette([sql_errno($serveur), $erreur, $query]);
72
-	}
73
-
74
-	return $result;
43
+    static $trace = '?';
44
+    if ($trace === '?') {
45
+        if (empty($GLOBALS['visiteur_session'])) {
46
+            // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
47
+            // car ici on ne sait pas si c'est un hit anonyme
48
+            // ou une requete SQL faite avant chargement de la session
49
+            $trace = (empty($_GET['var_profile']) ? false : '?');
50
+        }
51
+        else {
52
+            include_spip('inc/autoriser');
53
+            // gare au bouclage sur calcul de droits au premier appel
54
+            // A fortiori quand on demande une trace
55
+            $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
56
+            $trace = (!empty($_GET['var_profile']) && autoriser('debug'));
57
+        }
58
+    }
59
+    if ($start) {
60
+        $end = microtime();
61
+        [$usec, $sec] = explode(' ', (string) $start);
62
+        [$usec2, $sec2] = explode(' ', $end);
63
+        $dt = $sec2 + $usec2 - $sec - $usec;
64
+        pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
65
+        if ($trace) {
66
+            trace_query_chrono($dt, $query, $result, $serveur);
67
+        }
68
+    }
69
+    // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
70
+    if ($trace && $erreur && !preg_match('/^select\b/i', (string) $query)) {
71
+        erreur_squelette([sql_errno($serveur), $erreur, $query]);
72
+    }
73
+
74
+    return $result;
75 75
 }
76 76
 
77 77
 function trace_query_chrono($dt, $query, $result, $serveur = '') {
78
-	include_spip('inc/filtres_mini');
79
-	static $tt = 0, $nb = 0;
80
-
81
-	$x = _request('var_mode_objet');
82
-	if (isset($GLOBALS['debug']['aucasou'])) {
83
-		[, $boucle, $serveur, $contexte] = $GLOBALS['debug']['aucasou'];
84
-		if ($x && !preg_match("/$boucle\$/", (string) $x)) {
85
-			return;
86
-		}
87
-		if ($serveur) {
88
-			$boucle .= " ($serveur)";
89
-		}
90
-		$boucle = "<b>$boucle</b>";
91
-	} else {
92
-		if ($x) {
93
-			return;
94
-		}
95
-		$boucle = $contexte = '';
96
-	}
97
-
98
-	$tt += $dt;
99
-	$nb++;
100
-
101
-	$q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
102
-	$e = sql_explain($query, $serveur);
103
-	$r = str_replace('Resource id ', '', (is_object($result) ? $result::class : $result));
104
-	$GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
78
+    include_spip('inc/filtres_mini');
79
+    static $tt = 0, $nb = 0;
80
+
81
+    $x = _request('var_mode_objet');
82
+    if (isset($GLOBALS['debug']['aucasou'])) {
83
+        [, $boucle, $serveur, $contexte] = $GLOBALS['debug']['aucasou'];
84
+        if ($x && !preg_match("/$boucle\$/", (string) $x)) {
85
+            return;
86
+        }
87
+        if ($serveur) {
88
+            $boucle .= " ($serveur)";
89
+        }
90
+        $boucle = "<b>$boucle</b>";
91
+    } else {
92
+        if ($x) {
93
+            return;
94
+        }
95
+        $boucle = $contexte = '';
96
+    }
97
+
98
+    $tt += $dt;
99
+    $nb++;
100
+
101
+    $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
102
+    $e = sql_explain($query, $serveur);
103
+    $r = str_replace('Resource id ', '', (is_object($result) ? $result::class : $result));
104
+    $GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
105 105
 }
106 106
 
107 107
 
108 108
 function chrono_requete($temps) {
109
-	$total = 0;
110
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
111
-	$t = $q = $n = $d = [];
112
-	// Totaliser les temps et completer le Explain
113
-	foreach ($temps as $key => $v) {
114
-		[$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
115
-		if (is_array($contexte)) {
116
-			$k = ($contexte[0] . " $boucle");
117
-			include_spip('public/compiler');
118
-			$env = reconstruire_contexte_compil($contexte);
119
-		} else {
120
-			$k = $env = $boucle;
121
-		}
122
-
123
-		$total += $dt;
124
-		$t[$key] = $dt;
125
-		$q[$key] = $nb;
126
-		if (!isset($d[$k])) {
127
-			$d[$k] = 0;
128
-			$n[$k] = 0;
129
-		}
130
-		$d[$k] += $dt;
131
-		++$n[$k];
132
-
133
-		if (!is_array($explain)) {
134
-			$explain = [];
135
-		}
136
-		foreach ($explain as $j => $v) {
137
-			$explain[$j] = "<tr><th>$j</th><td>"
138
-				. str_replace(';', '<br />', (string) $v)
139
-				. '</td></tr>';
140
-		}
141
-		$e = "<table class='explain'>"
142
-			. '<caption>'
143
-			. $query
144
-			. '</caption>'
145
-			. "<tr><th>Time</th><td>$dt</td></tr>"
146
-			. "<tr><th>Order</th><td>$nb</td></tr>"
147
-			. "<tr><th>Res</th><td>$res</td></tr>"
148
-			. implode('', $explain)
149
-			. '</table>';
150
-
151
-		$temps[$key] = [$e, $env, $k];
152
-	}
153
-	// Trier par temps d'execution decroissant
154
-	array_multisort($t, SORT_DESC, $q, $temps);
155
-	arsort($d);
156
-	$i = 1;
157
-	$t = [];
158
-	// Fabriquer les liens de navigations dans le tableau des temps
159
-	foreach ($temps as $k => $v) {
160
-		$titre = strip_tags((string) $v[2]);
161
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
162
-		$href = str_replace("\\'", '&#39;', $href);
163
-
164
-		if (!isset($t[$v[2]])) {
165
-			$t[$v[2]] = [];
166
-		}
167
-		$t[$v[2]][] = "<span class='spip-debug-arg'> "
168
-			. "<a title='$titre' href='$href'>$i</a>"
169
-			. '</span>'
170
-			. ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
171
-		$i++;
172
-	}
173
-
174
-	if ($d['']) {
175
-		$d[$hors] = $d[''];
176
-		$n[$hors] = $n[''];
177
-		$t[$hors] = $t[''];
178
-	}
179
-	unset($d['']);
180
-	// Fabriquer le tableau des liens de navigation dans le grand tableau
181
-	foreach ($d as $k => $v) {
182
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
183
-			. implode('', $t[$k]);
184
-	}
185
-
186
-	$navigation = [
187
-		_T('zbug_statistiques'),
188
-		'<tr><td>'
189
-		. implode("</td></tr>\n<tr><td>", $d)
190
-		. "</td></tr>\n"
191
-		. (# _request('var_mode_objet') ? '' :
192
-		('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
193
-	];
194
-
195
-	return [$temps, $navigation];
109
+    $total = 0;
110
+    $hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
111
+    $t = $q = $n = $d = [];
112
+    // Totaliser les temps et completer le Explain
113
+    foreach ($temps as $key => $v) {
114
+        [$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
115
+        if (is_array($contexte)) {
116
+            $k = ($contexte[0] . " $boucle");
117
+            include_spip('public/compiler');
118
+            $env = reconstruire_contexte_compil($contexte);
119
+        } else {
120
+            $k = $env = $boucle;
121
+        }
122
+
123
+        $total += $dt;
124
+        $t[$key] = $dt;
125
+        $q[$key] = $nb;
126
+        if (!isset($d[$k])) {
127
+            $d[$k] = 0;
128
+            $n[$k] = 0;
129
+        }
130
+        $d[$k] += $dt;
131
+        ++$n[$k];
132
+
133
+        if (!is_array($explain)) {
134
+            $explain = [];
135
+        }
136
+        foreach ($explain as $j => $v) {
137
+            $explain[$j] = "<tr><th>$j</th><td>"
138
+                . str_replace(';', '<br />', (string) $v)
139
+                . '</td></tr>';
140
+        }
141
+        $e = "<table class='explain'>"
142
+            . '<caption>'
143
+            . $query
144
+            . '</caption>'
145
+            . "<tr><th>Time</th><td>$dt</td></tr>"
146
+            . "<tr><th>Order</th><td>$nb</td></tr>"
147
+            . "<tr><th>Res</th><td>$res</td></tr>"
148
+            . implode('', $explain)
149
+            . '</table>';
150
+
151
+        $temps[$key] = [$e, $env, $k];
152
+    }
153
+    // Trier par temps d'execution decroissant
154
+    array_multisort($t, SORT_DESC, $q, $temps);
155
+    arsort($d);
156
+    $i = 1;
157
+    $t = [];
158
+    // Fabriquer les liens de navigations dans le tableau des temps
159
+    foreach ($temps as $k => $v) {
160
+        $titre = strip_tags((string) $v[2]);
161
+        $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
162
+        $href = str_replace("\\'", '&#39;', $href);
163
+
164
+        if (!isset($t[$v[2]])) {
165
+            $t[$v[2]] = [];
166
+        }
167
+        $t[$v[2]][] = "<span class='spip-debug-arg'> "
168
+            . "<a title='$titre' href='$href'>$i</a>"
169
+            . '</span>'
170
+            . ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
171
+        $i++;
172
+    }
173
+
174
+    if ($d['']) {
175
+        $d[$hors] = $d[''];
176
+        $n[$hors] = $n[''];
177
+        $t[$hors] = $t[''];
178
+    }
179
+    unset($d['']);
180
+    // Fabriquer le tableau des liens de navigation dans le grand tableau
181
+    foreach ($d as $k => $v) {
182
+        $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
183
+            . implode('', $t[$k]);
184
+    }
185
+
186
+    $navigation = [
187
+        _T('zbug_statistiques'),
188
+        '<tr><td>'
189
+        . implode("</td></tr>\n<tr><td>", $d)
190
+        . "</td></tr>\n"
191
+        . (# _request('var_mode_objet') ? '' :
192
+        ('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
193
+    ];
194
+
195
+    return [$temps, $navigation];
196 196
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -107,13 +107,13 @@  discard block
 block discarded – undo
107 107
 
108 108
 function chrono_requete($temps) {
109 109
 	$total = 0;
110
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
110
+	$hors = '<i>'._T('zbug_hors_compilation').'</i>';
111 111
 	$t = $q = $n = $d = [];
112 112
 	// Totaliser les temps et completer le Explain
113 113
 	foreach ($temps as $key => $v) {
114 114
 		[$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
115 115
 		if (is_array($contexte)) {
116
-			$k = ($contexte[0] . " $boucle");
116
+			$k = ($contexte[0]." $boucle");
117 117
 			include_spip('public/compiler');
118 118
 			$env = reconstruire_contexte_compil($contexte);
119 119
 		} else {
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
 	// Fabriquer les liens de navigations dans le tableau des temps
159 159
 	foreach ($temps as $k => $v) {
160 160
 		$titre = strip_tags((string) $v[2]);
161
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
161
+		$href = quote_amp($GLOBALS['REQUEST_URI'])."#req$i";
162 162
 		$href = str_replace("\\'", '&#39;', $href);
163 163
 
164 164
 		if (!isset($t[$v[2]])) {
@@ -179,7 +179,7 @@  discard block
 block discarded – undo
179 179
 	unset($d['']);
180 180
 	// Fabriquer le tableau des liens de navigation dans le grand tableau
181 181
 	foreach ($d as $k => $v) {
182
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
182
+		$d[$k] = $n[$k]."</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
183 183
 			. implode('', $t[$k]);
184 184
 	}
185 185
 
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
 		. implode("</td></tr>\n<tr><td>", $d)
190 190
 		. "</td></tr>\n"
191 191
 		. (# _request('var_mode_objet') ? '' :
192
-		('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
192
+		('<tr><td>'.(is_countable($temps) ? count($temps) : 0).'</td><td>'._T('info_total').'</td><td class="time">'.$total.'</td><td></td></tr>'))
193 193
 	];
194 194
 
195 195
 	return [$temps, $navigation];
Please login to merge, or discard this patch.
ecrire/action/referencer_traduction.php 2 patches
Indentation   +45 added lines, -45 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  */
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -40,54 +40,54 @@  discard block
 block discarded – undo
40 40
  */
41 41
 function action_referencer_traduction_dist($objet, $id_objet, $id_trad) {
42 42
 
43
-	// ne rien faire si id_trad est ambigu
44
-	if (!is_numeric($id_trad)) {
45
-		return false;
46
-	}
43
+    // ne rien faire si id_trad est ambigu
44
+    if (!is_numeric($id_trad)) {
45
+        return false;
46
+    }
47 47
 
48
-	$table_objet_sql = table_objet_sql($objet);
49
-	$id_table_objet = id_table_objet($objet);
48
+    $table_objet_sql = table_objet_sql($objet);
49
+    $id_table_objet = id_table_objet($objet);
50 50
 
51
-	// on a fourni un id_trad : affectation ou modification du groupe de trad
52
-	if ($id_trad) {
53
-		// selectionner l'objet cible, qui doit etre different de nous-meme,
54
-		// et quitter s'il n'existe pas
55
-		$id_lier = sql_getfetsel(
56
-			'id_trad',
57
-			$table_objet_sql,
58
-			"$id_table_objet=" . (int) $id_trad . " AND NOT($id_table_objet=" . (int) $id_objet . ')'
59
-		);
60
-		if ($id_lier === null) {
61
-			spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
51
+    // on a fourni un id_trad : affectation ou modification du groupe de trad
52
+    if ($id_trad) {
53
+        // selectionner l'objet cible, qui doit etre different de nous-meme,
54
+        // et quitter s'il n'existe pas
55
+        $id_lier = sql_getfetsel(
56
+            'id_trad',
57
+            $table_objet_sql,
58
+            "$id_table_objet=" . (int) $id_trad . " AND NOT($id_table_objet=" . (int) $id_objet . ')'
59
+        );
60
+        if ($id_lier === null) {
61
+            spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
62 62
 
63
-			return false;
64
-		}
63
+            return false;
64
+        }
65 65
 
66
-		// $id_lier est le numero du groupe de traduction
67
-		// Si l'objet vise n'est pas deja traduit, son identifiant devient
68
-		// le nouvel id_trad de ce nouveau groupe et on l'affecte aux deux
69
-		// objets
70
-		if ($id_lier == 0) {
71
-			sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "$id_table_objet IN ($id_trad, $id_objet)");
72
-		} // si id_lier = id_objet alors on veut changer la reference de tout le groupe de trad
73
-		elseif ($id_lier == $id_objet) {
74
-			sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "id_trad = $id_lier");
75
-		} // sinon ajouter notre objet dans le groupe
76
-		else {
77
-			sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=" . (int) $id_objet);
78
-		}
79
-	} // on a fourni un id_trad nul : sortir id_objet du groupe de trad
80
-	else {
81
-		$old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=" . (int) $id_objet);
82
-		// supprimer le lien de traduction
83
-		sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=" . (int) $id_objet);
66
+        // $id_lier est le numero du groupe de traduction
67
+        // Si l'objet vise n'est pas deja traduit, son identifiant devient
68
+        // le nouvel id_trad de ce nouveau groupe et on l'affecte aux deux
69
+        // objets
70
+        if ($id_lier == 0) {
71
+            sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "$id_table_objet IN ($id_trad, $id_objet)");
72
+        } // si id_lier = id_objet alors on veut changer la reference de tout le groupe de trad
73
+        elseif ($id_lier == $id_objet) {
74
+            sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "id_trad = $id_lier");
75
+        } // sinon ajouter notre objet dans le groupe
76
+        else {
77
+            sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=" . (int) $id_objet);
78
+        }
79
+    } // on a fourni un id_trad nul : sortir id_objet du groupe de trad
80
+    else {
81
+        $old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=" . (int) $id_objet);
82
+        // supprimer le lien de traduction
83
+        sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=" . (int) $id_objet);
84 84
 
85
-		// Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
86
-		$cpt = sql_countsel($table_objet_sql, 'id_trad=' . (int) $old_id_trad);
87
-		if ($cpt == 1) {
88
-			sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad=' . (int) $old_id_trad);
89
-		}
90
-	}
85
+        // Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
86
+        $cpt = sql_countsel($table_objet_sql, 'id_trad=' . (int) $old_id_trad);
87
+        if ($cpt == 1) {
88
+            sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad=' . (int) $old_id_trad);
89
+        }
90
+    }
91 91
 
92
-	return true;
92
+    return true;
93 93
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 		$id_lier = sql_getfetsel(
56 56
 			'id_trad',
57 57
 			$table_objet_sql,
58
-			"$id_table_objet=" . (int) $id_trad . " AND NOT($id_table_objet=" . (int) $id_objet . ')'
58
+			"$id_table_objet=".(int) $id_trad." AND NOT($id_table_objet=".(int) $id_objet.')'
59 59
 		);
60 60
 		if ($id_lier === null) {
61 61
 			spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
@@ -74,18 +74,18 @@  discard block
 block discarded – undo
74 74
 			sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "id_trad = $id_lier");
75 75
 		} // sinon ajouter notre objet dans le groupe
76 76
 		else {
77
-			sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=" . (int) $id_objet);
77
+			sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=".(int) $id_objet);
78 78
 		}
79 79
 	} // on a fourni un id_trad nul : sortir id_objet du groupe de trad
80 80
 	else {
81
-		$old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=" . (int) $id_objet);
81
+		$old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=".(int) $id_objet);
82 82
 		// supprimer le lien de traduction
83
-		sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=" . (int) $id_objet);
83
+		sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=".(int) $id_objet);
84 84
 
85 85
 		// Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
86
-		$cpt = sql_countsel($table_objet_sql, 'id_trad=' . (int) $old_id_trad);
86
+		$cpt = sql_countsel($table_objet_sql, 'id_trad='.(int) $old_id_trad);
87 87
 		if ($cpt == 1) {
88
-			sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad=' . (int) $old_id_trad);
88
+			sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad='.(int) $old_id_trad);
89 89
 		}
90 90
 	}
91 91
 
Please login to merge, or discard this patch.
ecrire/action/tester_taille.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
 		$t = ($GLOBALS['taille_min'] * $GLOBALS['taille_min']);
76 76
 		if ($GLOBALS['taille_min'] !== $GLOBALS['taille_max']) {
77 77
 			$t *= 0.9; // marge de securite
78
-			echo round($t / 1_000_000, 3) . ' Mpx';
78
+			echo round($t / 1_000_000, 3).' Mpx';
79 79
 		} else {
80 80
 			// c'est un cas "on a reussi la borne max initiale, donc on a pas de limite connue"
81 81
 			$t = 0;
@@ -111,19 +111,19 @@  discard block
 block discarded – undo
111 111
 	$image_source = chemin_image('test.png');
112 112
 	$GLOBALS['redirect'] = generer_url_action(
113 113
 		'tester_taille',
114
-		"i=$i&arg=" . $GLOBALS['taille_min'] . '-' . $GLOBALS['taille_test']
114
+		"i=$i&arg=".$GLOBALS['taille_min'].'-'.$GLOBALS['taille_test']
115 115
 	);
116 116
 
117 117
 	ob_start('action_tester_taille_error_handler');
118 118
 	filtrer('image_recadre', $image_source, $taille, $taille);
119
-	$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
119
+	$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-".$GLOBALS['taille_max']);
120 120
 
121 121
 	// si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee
122 122
 	// si $GLOBALS['taille_min']==0 (car on est au premier coup)
123 123
 	if ($GLOBALS['taille_min'] == 0) {
124 124
 		$taille = $GLOBALS['taille_max'];
125 125
 		filtrer('image_recadre', $image_source, $taille, $taille);
126
-		$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
126
+		$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-".$GLOBALS['taille_max']);
127 127
 	}
128 128
 	ob_end_clean();
129 129
 
Please login to merge, or discard this patch.
Indentation   +79 added lines, -79 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 include_spip('inc/headers');
23 23
 
@@ -34,12 +34,12 @@  discard block
 block discarded – undo
34 34
  *     Sortie du buffer
35 35
  **/
36 36
 function action_tester_taille_error_handler($output) {
37
-	// on est ici, donc echec lors de la creation de l'image
38
-	if (!empty($GLOBALS['redirect'])) {
39
-		return redirige_formulaire($GLOBALS['redirect']);
40
-	}
37
+    // on est ici, donc echec lors de la creation de l'image
38
+    if (!empty($GLOBALS['redirect'])) {
39
+        return redirige_formulaire($GLOBALS['redirect']);
40
+    }
41 41
 
42
-	return $output;
42
+    return $output;
43 43
 }
44 44
 
45 45
 
@@ -57,77 +57,77 @@  discard block
 block discarded – undo
57 57
  **/
58 58
 function action_tester_taille_dist() {
59 59
 
60
-	if (!autoriser('configurer')) {
61
-		return;
62
-	}
63
-
64
-	$taille = _request('arg');
65
-	$taille = explode('-', (string) $taille);
66
-
67
-	$GLOBALS['taille_max'] = end($taille);
68
-	$GLOBALS['taille_min'] = 0;
69
-	if (count($taille) > 1) {
70
-		$GLOBALS['taille_min'] = reset($taille);
71
-	}
72
-
73
-	// si l'intervalle est assez petit, on garde la valeur min
74
-	if ($GLOBALS['taille_max'] * $GLOBALS['taille_max'] - $GLOBALS['taille_min'] * $GLOBALS['taille_min'] < 50000) {
75
-		$t = ($GLOBALS['taille_min'] * $GLOBALS['taille_min']);
76
-		if ($GLOBALS['taille_min'] !== $GLOBALS['taille_max']) {
77
-			$t *= 0.9; // marge de securite
78
-			echo round($t / 1_000_000, 3) . ' Mpx';
79
-		} else {
80
-			// c'est un cas "on a reussi la borne max initiale, donc on a pas de limite connue"
81
-			$t = 0;
82
-			echo '&infin;';
83
-		}
84
-		ecrire_meta('max_taille_vignettes', $t, 'non');
85
-		die();
86
-	}
87
-
88
-	$taille = $GLOBALS['taille_test'] = round(($GLOBALS['taille_max'] + $GLOBALS['taille_min']) / 2);
89
-
90
-	include_spip('inc/filtres');
91
-	// des inclusions representatives d'un hit prive et/ou public pour la conso memoire
92
-	include_spip('public/assembler');
93
-	include_spip('public/balises');
94
-	include_spip('public/boucles');
95
-	include_spip('public/cacher');
96
-	include_spip('public/compiler');
97
-	include_spip('public/composer');
98
-	include_spip('public/criteres');
99
-	include_spip('public/interfaces');
100
-	include_spip('public/parametrer');
101
-	include_spip('public/phraser_html');
102
-	include_spip('public/references');
103
-
104
-	include_spip('inc/presentation');
105
-	include_spip('inc/charsets');
106
-	include_spip('inc/documents');
107
-	include_spip('inc/header');
108
-	propre('<doc1>'); // charger propre avec le trairement d'un modele
109
-
110
-	$i = _request('i') + 1;
111
-	$image_source = chemin_image('test.png');
112
-	$GLOBALS['redirect'] = generer_url_action(
113
-		'tester_taille',
114
-		"i=$i&arg=" . $GLOBALS['taille_min'] . '-' . $GLOBALS['taille_test']
115
-	);
116
-
117
-	ob_start('action_tester_taille_error_handler');
118
-	filtrer('image_recadre', $image_source, $taille, $taille);
119
-	$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
120
-
121
-	// si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee
122
-	// si $GLOBALS['taille_min']==0 (car on est au premier coup)
123
-	if ($GLOBALS['taille_min'] == 0) {
124
-		$taille = $GLOBALS['taille_max'];
125
-		filtrer('image_recadre', $image_source, $taille, $taille);
126
-		$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
127
-	}
128
-	ob_end_clean();
129
-
130
-
131
-	// on est ici, donc pas de plantage
132
-	echo redirige_formulaire($GLOBALS['redirect']);
60
+    if (!autoriser('configurer')) {
61
+        return;
62
+    }
63
+
64
+    $taille = _request('arg');
65
+    $taille = explode('-', (string) $taille);
66
+
67
+    $GLOBALS['taille_max'] = end($taille);
68
+    $GLOBALS['taille_min'] = 0;
69
+    if (count($taille) > 1) {
70
+        $GLOBALS['taille_min'] = reset($taille);
71
+    }
72
+
73
+    // si l'intervalle est assez petit, on garde la valeur min
74
+    if ($GLOBALS['taille_max'] * $GLOBALS['taille_max'] - $GLOBALS['taille_min'] * $GLOBALS['taille_min'] < 50000) {
75
+        $t = ($GLOBALS['taille_min'] * $GLOBALS['taille_min']);
76
+        if ($GLOBALS['taille_min'] !== $GLOBALS['taille_max']) {
77
+            $t *= 0.9; // marge de securite
78
+            echo round($t / 1_000_000, 3) . ' Mpx';
79
+        } else {
80
+            // c'est un cas "on a reussi la borne max initiale, donc on a pas de limite connue"
81
+            $t = 0;
82
+            echo '&infin;';
83
+        }
84
+        ecrire_meta('max_taille_vignettes', $t, 'non');
85
+        die();
86
+    }
87
+
88
+    $taille = $GLOBALS['taille_test'] = round(($GLOBALS['taille_max'] + $GLOBALS['taille_min']) / 2);
89
+
90
+    include_spip('inc/filtres');
91
+    // des inclusions representatives d'un hit prive et/ou public pour la conso memoire
92
+    include_spip('public/assembler');
93
+    include_spip('public/balises');
94
+    include_spip('public/boucles');
95
+    include_spip('public/cacher');
96
+    include_spip('public/compiler');
97
+    include_spip('public/composer');
98
+    include_spip('public/criteres');
99
+    include_spip('public/interfaces');
100
+    include_spip('public/parametrer');
101
+    include_spip('public/phraser_html');
102
+    include_spip('public/references');
103
+
104
+    include_spip('inc/presentation');
105
+    include_spip('inc/charsets');
106
+    include_spip('inc/documents');
107
+    include_spip('inc/header');
108
+    propre('<doc1>'); // charger propre avec le trairement d'un modele
109
+
110
+    $i = _request('i') + 1;
111
+    $image_source = chemin_image('test.png');
112
+    $GLOBALS['redirect'] = generer_url_action(
113
+        'tester_taille',
114
+        "i=$i&arg=" . $GLOBALS['taille_min'] . '-' . $GLOBALS['taille_test']
115
+    );
116
+
117
+    ob_start('action_tester_taille_error_handler');
118
+    filtrer('image_recadre', $image_source, $taille, $taille);
119
+    $GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
120
+
121
+    // si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee
122
+    // si $GLOBALS['taille_min']==0 (car on est au premier coup)
123
+    if ($GLOBALS['taille_min'] == 0) {
124
+        $taille = $GLOBALS['taille_max'];
125
+        filtrer('image_recadre', $image_source, $taille, $taille);
126
+        $GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
127
+    }
128
+    ob_end_clean();
129
+
130
+
131
+    // on est ici, donc pas de plantage
132
+    echo redirige_formulaire($GLOBALS['redirect']);
133 133
 }
Please login to merge, or discard this patch.
ecrire/action/supprimer_rubrique.php 2 patches
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/charsets');  # pour le nom de fichier
@@ -29,45 +29,45 @@  discard block
 block discarded – undo
29 29
  */
30 30
 function action_supprimer_rubrique_dist($id_rubrique = null) {
31 31
 
32
-	if (is_null($id_rubrique)) {
33
-		$securiser_action = charger_fonction('securiser_action', 'inc');
34
-		$id_rubrique = $securiser_action();
35
-	}
32
+    if (is_null($id_rubrique)) {
33
+        $securiser_action = charger_fonction('securiser_action', 'inc');
34
+        $id_rubrique = $securiser_action();
35
+    }
36 36
 
37
-	if ((int) $id_rubrique) {
38
-		sql_delete('spip_rubriques', 'id_rubrique=' . (int) $id_rubrique);
39
-		// Les admin restreints qui n'administraient que cette rubrique
40
-		// deviennent redacteurs
41
-		// (il y a sans doute moyen de faire ca avec un having)
37
+    if ((int) $id_rubrique) {
38
+        sql_delete('spip_rubriques', 'id_rubrique=' . (int) $id_rubrique);
39
+        // Les admin restreints qui n'administraient que cette rubrique
40
+        // deviennent redacteurs
41
+        // (il y a sans doute moyen de faire ca avec un having)
42 42
 
43
-		$q = sql_select('id_auteur', 'spip_auteurs_liens', "objet='rubrique' AND id_objet=" . (int) $id_rubrique);
44
-		while ($r = sql_fetch($q)) {
45
-			$id_auteur = $r['id_auteur'];
46
-			// degrader avant de supprimer la restriction d'admin
47
-			// section critique sur les droits
48
-			$n = sql_countsel(
49
-				'spip_auteurs_liens',
50
-				"objet='rubrique' AND id_objet!=" . (int) $id_rubrique . ' AND id_auteur=' . (int) $id_auteur
51
-			);
52
-			if (!$n) {
53
-				include_spip('action/editer_auteur');
54
-				auteur_modifier($id_auteur, ['statut' => '1comite']);
55
-			}
56
-			sql_delete(
57
-				'spip_auteurs_liens',
58
-				"objet='rubrique' AND id_objet=" . (int) $id_rubrique . ' AND id_auteur=' . (int) $id_auteur
59
-			);
60
-		}
61
-		// menu_rubriques devra recalculer
62
-		effacer_meta('date_calcul_rubriques');
43
+        $q = sql_select('id_auteur', 'spip_auteurs_liens', "objet='rubrique' AND id_objet=" . (int) $id_rubrique);
44
+        while ($r = sql_fetch($q)) {
45
+            $id_auteur = $r['id_auteur'];
46
+            // degrader avant de supprimer la restriction d'admin
47
+            // section critique sur les droits
48
+            $n = sql_countsel(
49
+                'spip_auteurs_liens',
50
+                "objet='rubrique' AND id_objet!=" . (int) $id_rubrique . ' AND id_auteur=' . (int) $id_auteur
51
+            );
52
+            if (!$n) {
53
+                include_spip('action/editer_auteur');
54
+                auteur_modifier($id_auteur, ['statut' => '1comite']);
55
+            }
56
+            sql_delete(
57
+                'spip_auteurs_liens',
58
+                "objet='rubrique' AND id_objet=" . (int) $id_rubrique . ' AND id_auteur=' . (int) $id_auteur
59
+            );
60
+        }
61
+        // menu_rubriques devra recalculer
62
+        effacer_meta('date_calcul_rubriques');
63 63
 
64
-		// Une rubrique supprimable n'avait pas le statut "publie"
65
-		// donc rien de neuf pour la rubrique parente
66
-		include_spip('inc/rubriques');
67
-		calculer_langues_rubriques();
64
+        // Une rubrique supprimable n'avait pas le statut "publie"
65
+        // donc rien de neuf pour la rubrique parente
66
+        include_spip('inc/rubriques');
67
+        calculer_langues_rubriques();
68 68
 
69
-		// invalider les caches marques de cette rubrique
70
-		include_spip('inc/invalideur');
71
-		suivre_invalideur("id='rubrique/$id_rubrique'");
72
-	}
69
+        // invalider les caches marques de cette rubrique
70
+        include_spip('inc/invalideur');
71
+        suivre_invalideur("id='rubrique/$id_rubrique'");
72
+    }
73 73
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
 	return;
20 20
 }
21 21
 
22
-include_spip('inc/charsets');  # pour le nom de fichier
22
+include_spip('inc/charsets'); # pour le nom de fichier
23 23
 
24 24
 /**
25 25
  * Effacer une rubrique
@@ -35,19 +35,19 @@  discard block
 block discarded – undo
35 35
 	}
36 36
 
37 37
 	if ((int) $id_rubrique) {
38
-		sql_delete('spip_rubriques', 'id_rubrique=' . (int) $id_rubrique);
38
+		sql_delete('spip_rubriques', 'id_rubrique='.(int) $id_rubrique);
39 39
 		// Les admin restreints qui n'administraient que cette rubrique
40 40
 		// deviennent redacteurs
41 41
 		// (il y a sans doute moyen de faire ca avec un having)
42 42
 
43
-		$q = sql_select('id_auteur', 'spip_auteurs_liens', "objet='rubrique' AND id_objet=" . (int) $id_rubrique);
43
+		$q = sql_select('id_auteur', 'spip_auteurs_liens', "objet='rubrique' AND id_objet=".(int) $id_rubrique);
44 44
 		while ($r = sql_fetch($q)) {
45 45
 			$id_auteur = $r['id_auteur'];
46 46
 			// degrader avant de supprimer la restriction d'admin
47 47
 			// section critique sur les droits
48 48
 			$n = sql_countsel(
49 49
 				'spip_auteurs_liens',
50
-				"objet='rubrique' AND id_objet!=" . (int) $id_rubrique . ' AND id_auteur=' . (int) $id_auteur
50
+				"objet='rubrique' AND id_objet!=".(int) $id_rubrique.' AND id_auteur='.(int) $id_auteur
51 51
 			);
52 52
 			if (!$n) {
53 53
 				include_spip('action/editer_auteur');
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 			}
56 56
 			sql_delete(
57 57
 				'spip_auteurs_liens',
58
-				"objet='rubrique' AND id_objet=" . (int) $id_rubrique . ' AND id_auteur=' . (int) $id_auteur
58
+				"objet='rubrique' AND id_objet=".(int) $id_rubrique.' AND id_auteur='.(int) $id_auteur
59 59
 			);
60 60
 		}
61 61
 		// menu_rubriques devra recalculer
Please login to merge, or discard this patch.
ecrire/action/session.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@
 block discarded – undo
37 37
 		&& $_SERVER['REQUEST_METHOD'] == 'POST'
38 38
 	) {
39 39
 		include_spip('inc/session');
40
-		session_set('session_' . $var, $val = _request('val'));
40
+		session_set('session_'.$var, $val = _request('val'));
41 41
 		#spip_log("autosave:$var:$val",'autosave');
42 42
 	}
43 43
 
Please login to merge, or discard this patch.
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -31,16 +31,16 @@  discard block
 block discarded – undo
31 31
  *   Envoyer en réponse : json contenant toutes les variables publiques de la session
32 32
  **/
33 33
 function action_session_dist() {
34
-	if (
35
-		($var = _request('var'))
36
-		&& preg_match(',^[a-z_0-9-]+$,i', (string) $var)
37
-		&& $_SERVER['REQUEST_METHOD'] == 'POST'
38
-	) {
39
-		include_spip('inc/session');
40
-		session_set('session_' . $var, $val = _request('val'));
41
-		#spip_log("autosave:$var:$val",'autosave');
42
-	}
34
+    if (
35
+        ($var = _request('var'))
36
+        && preg_match(',^[a-z_0-9-]+$,i', (string) $var)
37
+        && $_SERVER['REQUEST_METHOD'] == 'POST'
38
+    ) {
39
+        include_spip('inc/session');
40
+        session_set('session_' . $var, $val = _request('val'));
41
+        #spip_log("autosave:$var:$val",'autosave');
42
+    }
43 43
 
44
-	# TODO: mode lecture de session ; n'afficher que ce qu'il faut
45
-	#echo json_encode($GLOBALS['visiteur_session']);
44
+    # TODO: mode lecture de session ; n'afficher que ce qu'il faut
45
+    #echo json_encode($GLOBALS['visiteur_session']);
46 46
 }
Please login to merge, or discard this patch.
ecrire/action/relancer_inscription.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  */
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -25,22 +25,22 @@  discard block
 block discarded – undo
25 25
  * @return void
26 26
  */
27 27
 function action_relancer_inscription_dist() {
28
-	$securiser_action = charger_fonction('securiser_action', 'inc');
29
-	$id_auteur = $securiser_action();
28
+    $securiser_action = charger_fonction('securiser_action', 'inc');
29
+    $id_auteur = $securiser_action();
30 30
 
31
-	if ((int) $id_auteur && autoriser('relancer', 'inscription')) {
32
-		$auteur = sql_fetsel('prefs, email, nom, statut', 'spip_auteurs', "id_auteur=$id_auteur");
33
-		if ($auteur['statut'] == 'nouveau') {
34
-			include_spip('action/inscrire_auteur');
35
-			action_inscrire_auteur_dist($auteur['prefs'], $auteur['email'], $auteur['nom'], ['force_nouveau' => true]);
36
-		}
37
-	} elseif ($id_auteur === '*' && autoriser('relancer', 'inscription')) {
38
-		$auteurs = sql_allfetsel('prefs, email, nom', 'spip_auteurs', "statut='nouveau'");
39
-		if (is_array($auteurs)) {
40
-			include_spip('action/inscrire_auteur');
41
-			while ($row = array_pop($auteurs)) {
42
-				action_inscrire_auteur_dist($row['prefs'], $row['email'], $row['nom'], ['force_nouveau' => true]);
43
-			}
44
-		}
45
-	}
31
+    if ((int) $id_auteur && autoriser('relancer', 'inscription')) {
32
+        $auteur = sql_fetsel('prefs, email, nom, statut', 'spip_auteurs', "id_auteur=$id_auteur");
33
+        if ($auteur['statut'] == 'nouveau') {
34
+            include_spip('action/inscrire_auteur');
35
+            action_inscrire_auteur_dist($auteur['prefs'], $auteur['email'], $auteur['nom'], ['force_nouveau' => true]);
36
+        }
37
+    } elseif ($id_auteur === '*' && autoriser('relancer', 'inscription')) {
38
+        $auteurs = sql_allfetsel('prefs, email, nom', 'spip_auteurs', "statut='nouveau'");
39
+        if (is_array($auteurs)) {
40
+            include_spip('action/inscrire_auteur');
41
+            while ($row = array_pop($auteurs)) {
42
+                action_inscrire_auteur_dist($row['prefs'], $row['email'], $row['nom'], ['force_nouveau' => true]);
43
+            }
44
+        }
45
+    }
46 46
 }
Please login to merge, or discard this patch.
ecrire/urls/page.php 2 patches
Indentation   +31 added lines, -31 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 defined('URLS_PAGE_EXEMPLE') || define('URLS_PAGE_EXEMPLE', 'spip.php?article12');
@@ -29,23 +29,23 @@  discard block
 block discarded – undo
29 29
  */
30 30
 function urls_page_generer_url_objet_dist(int $id, string $objet, string $args = '', string $ancre = ''): string {
31 31
 
32
-	if ($generer_url_externe = charger_fonction_url($objet, 'defaut')) {
33
-		$url = $generer_url_externe($id, $args, $ancre);
34
-		// une url === null indique "je ne traite pas cette url, appliquez le calcul standard"
35
-		// une url vide est une url vide, ne rien faire de plus
36
-		if (!is_null($url)) {
37
-			return $url;
38
-		}
39
-	}
32
+    if ($generer_url_externe = charger_fonction_url($objet, 'defaut')) {
33
+        $url = $generer_url_externe($id, $args, $ancre);
34
+        // une url === null indique "je ne traite pas cette url, appliquez le calcul standard"
35
+        // une url vide est une url vide, ne rien faire de plus
36
+        if (!is_null($url)) {
37
+            return $url;
38
+        }
39
+    }
40 40
 
41
-	$url = \_debut_urls_page . $objet . \_separateur_urls_page
42
-		. $id . \_terminaison_urls_page;
41
+    $url = \_debut_urls_page . $objet . \_separateur_urls_page
42
+        . $id . \_terminaison_urls_page;
43 43
 
44
-	if ($args) {
45
-		$args = strpos($url, '?') ? "&$args" : "?$args";
46
-	}
44
+    if ($args) {
45
+        $args = strpos($url, '?') ? "&$args" : "?$args";
46
+    }
47 47
 
48
-	return _DIR_RACINE . $url . $args . ($ancre ? "#$ancre" : '');
48
+    return _DIR_RACINE . $url . $args . ($ancre ? "#$ancre" : '');
49 49
 }
50 50
 
51 51
 /**
@@ -61,27 +61,27 @@  discard block
 block discarded – undo
61 61
  */
62 62
 function urls_page_decoder_url_dist(string $url, string $entite, array $contexte = []): array {
63 63
 
64
-	// traiter les injections du type domaine.org/spip.php/cestnimportequoi/ou/encore/plus/rubrique23
65
-	if ($GLOBALS['profondeur_url'] > 0 && $entite == 'sommaire') {
66
-		return [[], '404'];
67
-	}
64
+    // traiter les injections du type domaine.org/spip.php/cestnimportequoi/ou/encore/plus/rubrique23
65
+    if ($GLOBALS['profondeur_url'] > 0 && $entite == 'sommaire') {
66
+        return [[], '404'];
67
+    }
68 68
 
69
-	include_spip('inc/urls');
70
-	$r = nettoyer_url_page($url, $contexte);
71
-	if ($r) {
72
-		array_pop($r); // nettoyer_url_page renvoie un argument de plus inutile ici
73
-		return $r;
74
-	}
69
+    include_spip('inc/urls');
70
+    $r = nettoyer_url_page($url, $contexte);
71
+    if ($r) {
72
+        array_pop($r); // nettoyer_url_page renvoie un argument de plus inutile ici
73
+        return $r;
74
+    }
75 75
 
76
-	/*
76
+    /*
77 77
 	 * Le bloc qui suit sert a faciliter les transitions depuis
78 78
 	 * le mode 'urls-propres' vers les modes 'urls-standard' et 'url-html'
79 79
 	 * Il est inutile de le recopier si vous personnalisez vos URLs
80 80
 	 * et votre .htaccess
81 81
 	 */
82
-	// Si on est revenu en mode html, mais c'est une ancienne url_propre
83
-	// on ne redirige pas, on assume le nouveau contexte (si possible)
84
-	$url_propre = $url ?? $_SERVER['REDIRECT_url_propre'] ?? $_ENV['url_propre'] ?? '';
85
-	return urls_transition_retrouver_anciennes_url_propres($url_propre, $entite, $contexte);
86
-	/* Fin du bloc compatibilite url-propres */
82
+    // Si on est revenu en mode html, mais c'est une ancienne url_propre
83
+    // on ne redirige pas, on assume le nouveau contexte (si possible)
84
+    $url_propre = $url ?? $_SERVER['REDIRECT_url_propre'] ?? $_ENV['url_propre'] ?? '';
85
+    return urls_transition_retrouver_anciennes_url_propres($url_propre, $entite, $contexte);
86
+    /* Fin du bloc compatibilite url-propres */
87 87
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 # attention toutefois seuls '' et '=' figurent dans les modes de compatibilite
23 23
 define('_separateur_urls_page', '');
24 24
 # on peut indiquer '' si on a installe le .htaccess
25
-define('_debut_urls_page', get_spip_script('./') . '?');
25
+define('_debut_urls_page', get_spip_script('./').'?');
26 26
 #######
27 27
 /**
28 28
  * Generer l'url d'un objet SPIP
@@ -38,14 +38,14 @@  discard block
 block discarded – undo
38 38
 		}
39 39
 	}
40 40
 
41
-	$url = \_debut_urls_page . $objet . \_separateur_urls_page
42
-		. $id . \_terminaison_urls_page;
41
+	$url = \_debut_urls_page.$objet.\_separateur_urls_page
42
+		. $id.\_terminaison_urls_page;
43 43
 
44 44
 	if ($args) {
45 45
 		$args = strpos($url, '?') ? "&$args" : "?$args";
46 46
 	}
47 47
 
48
-	return _DIR_RACINE . $url . $args . ($ancre ? "#$ancre" : '');
48
+	return _DIR_RACINE.$url.$args.($ancre ? "#$ancre" : '');
49 49
 }
50 50
 
51 51
 /**
Please login to merge, or discard this patch.