Completed
Push — master ( 8ce9c8...350a8b )
by cam
01:02
created
ecrire/base/upgrade.php 2 patches
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
 	if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
57 57
 		if (!is_numeric(_request('reinstall'))) {
58 58
 			include_spip('base/create');
59
-			spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
59
+			spip_log('recree les tables eventuellement disparues', 'maj.'._LOG_INFO_IMPORTANTE);
60 60
 			creer_base();
61 61
 		}
62 62
 
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 			exit;
70 70
 		}
71 71
 	}
72
-	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
72
+	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.'._LOG_INFO_IMPORTANTE);
73 73
 
74 74
 	// supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
75 75
 	@spip_unlink(_CACHE_RUBRIQUES);
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
 	@spip_unlink(_CACHE_PLUGINS_OPT);
79 79
 	@spip_unlink(_CACHE_PLUGINS_FCT);
80 80
 	@spip_unlink(_CACHE_CHEMIN);
81
-	@spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
81
+	@spip_unlink(_DIR_TMP.'plugin_xml_cache.gz');
82 82
 
83 83
 	include_spip('inc/auth');
84 84
 	auth_synchroniser_distant();
@@ -117,8 +117,8 @@  discard block
 block discarded – undo
117 117
 	$version_installee = $GLOBALS['meta']['version_installee'] ?? null;
118 118
 
119 119
 	spip_log(
120
-		"Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
121
-		'maj.' . _LOG_INFO_IMPORTANTE
120
+		"Version anterieure: $version_installee. Courante: ".$GLOBALS['spip_version_base'],
121
+		'maj.'._LOG_INFO_IMPORTANTE
122 122
 	);
123 123
 	if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
124 124
 		sql_replace(
@@ -151,9 +151,9 @@  discard block
 block discarded – undo
151 151
 	$res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
152 152
 	if ($res) {
153 153
 		if (!is_array($res)) {
154
-			spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
154
+			spip_log("Pb d'acces SQL a la mise a jour", 'maj.'._LOG_ERREUR);
155 155
 		} else {
156
-			echo _T('avis_operation_echec') . ' ' . join(' ', $res);
156
+			echo _T('avis_operation_echec').' '.join(' ', $res);
157 157
 			echo install_fin_html();
158 158
 		}
159 159
 	}
@@ -241,9 +241,9 @@  discard block
 block discarded – undo
241 241
 		$res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
242 242
 		if ($res) {
243 243
 			if (!is_array($res)) {
244
-				spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
244
+				spip_log("Pb d'acces SQL a la mise a jour", 'maj.'._LOG_ERREUR);
245 245
 			} else {
246
-				echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
246
+				echo '<p>'._T('avis_operation_echec').' '.join(' ', $res).'</p>';
247 247
 			}
248 248
 		}
249 249
 	}
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
 	echo(install_debut_html($titre));
300 300
 	// script de rechargement auto sur timeout
301 301
 	$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
302
-	echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
302
+	echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout * 1000).')');
303 303
 	echo "<div style='text-align: left'>\n";
304 304
 	if (ob_get_level()) {
305 305
 		ob_flush();
@@ -388,7 +388,7 @@  discard block
 block discarded – undo
388 388
 				return [$v, $etape];
389 389
 			}
390 390
 			$n = time() - $time;
391
-			spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
391
+			spip_log("$table $meta: $v en $n secondes", 'maj.'._LOG_INFO_IMPORTANTE);
392 392
 			if ($meta) {
393 393
 				ecrire_meta($meta, $installee = $v, 'oui', $table);
394 394
 			}
@@ -404,7 +404,7 @@  discard block
 block discarded – undo
404 404
 	if ($meta) {
405 405
 		ecrire_meta($meta, $cible, 'oui', $table);
406 406
 	}
407
-	spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
407
+	spip_log("MAJ terminee. $meta: $installee", 'maj.'._LOG_INFO_IMPORTANTE);
408 408
 
409 409
 	return [];
410 410
 }
@@ -429,7 +429,7 @@  discard block
 block discarded – undo
429 429
  * @return int
430 430
  */
431 431
 function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '') {
432
-	$meta2 = $meta . '_maj_' . $serie;
432
+	$meta2 = $meta.'_maj_'.$serie;
433 433
 	$etape = 0;
434 434
 	if (isset($GLOBALS[$table][$meta2])) {
435 435
 		$etape = intval($GLOBALS[$table][$meta2]);
@@ -442,7 +442,7 @@  discard block
 block discarded – undo
442 442
 				and function_exists($f = array_shift($r))
443 443
 			) {
444 444
 				// note: $r (arguments de la fonction $f) peut avoir des données tabulaires
445
-				spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
445
+				spip_log("$msg: $f ".@join(',', $r), 'maj.'._LOG_INFO_IMPORTANTE);
446 446
 				// pour les fonctions atomiques sql_xx
447 447
 				// on enregistre le meta avant de lancer la fonction,
448 448
 				// de maniere a eviter de boucler sur timeout
@@ -460,12 +460,12 @@  discard block
 block discarded – undo
460 460
 					relance_maj($meta, $table, $redirect);
461 461
 				}
462 462
 				ecrire_meta($meta2, $i + 1, 'non', $table);
463
-				spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
463
+				spip_log("$meta2: ok", 'maj.'._LOG_INFO_IMPORTANTE);
464 464
 			} else {
465 465
 				if (!is_array($r)) {
466
-					spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
466
+					spip_log("maj $i format incorrect", 'maj.'._LOG_ERREUR);
467 467
 				} else {
468
-					spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
468
+					spip_log("maj $i fonction $f non definie", 'maj.'._LOG_ERREUR);
469 469
 				}
470 470
 				// en cas d'erreur serieuse, on s'arrete
471 471
 				// mais on permet de passer par dessus en rechargeant la page.
Please login to merge, or discard this patch.
Indentation   +285 added lines, -285 removed lines patch added patch discarded remove patch
@@ -16,17 +16,17 @@  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
 if (!defined('_UPGRADE_TIME_OUT')) {
23
-	/**
24
-	 * Durée en secondes pour relancer les scripts de mises à jour, x secondes
25
-	 * avant que la durée d'exécution du script provoque un timeout
26
-	 *
27
-	 * @var int
28
-	 **/
29
-	define('_UPGRADE_TIME_OUT', 20);
23
+    /**
24
+     * Durée en secondes pour relancer les scripts de mises à jour, x secondes
25
+     * avant que la durée d'exécution du script provoque un timeout
26
+     *
27
+     * @var int
28
+     **/
29
+    define('_UPGRADE_TIME_OUT', 20);
30 30
 }
31 31
 
32 32
 /**
@@ -49,40 +49,40 @@  discard block
 block discarded – undo
49 49
  * @return void
50 50
  */
51 51
 function base_upgrade_dist($titre = '', $reprise = '') {
52
-	if (!$titre) {
53
-		return;
54
-	} // anti-testeur automatique
55
-	if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
56
-		if (!is_numeric(_request('reinstall'))) {
57
-			include_spip('base/create');
58
-			spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
59
-			creer_base();
60
-		}
61
-
62
-		// quand on rentre par ici, c'est toujours une mise a jour de SPIP
63
-		// lancement de l'upgrade SPIP
64
-		$res = maj_base();
65
-
66
-		if ($res) {
67
-			// on arrete tout ici !
68
-			exit;
69
-		}
70
-	}
71
-	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
72
-
73
-	// supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
74
-	@spip_unlink(_CACHE_RUBRIQUES);
75
-	@spip_unlink(_CACHE_PIPELINES);
76
-	@spip_unlink(_CACHE_PLUGINS_PATH);
77
-	@spip_unlink(_CACHE_PLUGINS_OPT);
78
-	@spip_unlink(_CACHE_PLUGINS_FCT);
79
-	@spip_unlink(_CACHE_CHEMIN);
80
-	@spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
81
-
82
-	include_spip('inc/auth');
83
-	auth_synchroniser_distant();
84
-	$config = charger_fonction('config', 'inc');
85
-	$config();
52
+    if (!$titre) {
53
+        return;
54
+    } // anti-testeur automatique
55
+    if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
56
+        if (!is_numeric(_request('reinstall'))) {
57
+            include_spip('base/create');
58
+            spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
59
+            creer_base();
60
+        }
61
+
62
+        // quand on rentre par ici, c'est toujours une mise a jour de SPIP
63
+        // lancement de l'upgrade SPIP
64
+        $res = maj_base();
65
+
66
+        if ($res) {
67
+            // on arrete tout ici !
68
+            exit;
69
+        }
70
+    }
71
+    spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
72
+
73
+    // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
74
+    @spip_unlink(_CACHE_RUBRIQUES);
75
+    @spip_unlink(_CACHE_PIPELINES);
76
+    @spip_unlink(_CACHE_PLUGINS_PATH);
77
+    @spip_unlink(_CACHE_PLUGINS_OPT);
78
+    @spip_unlink(_CACHE_PLUGINS_FCT);
79
+    @spip_unlink(_CACHE_CHEMIN);
80
+    @spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
81
+
82
+    include_spip('inc/auth');
83
+    auth_synchroniser_distant();
84
+    $config = charger_fonction('config', 'inc');
85
+    $config();
86 86
 }
87 87
 
88 88
 /**
@@ -113,51 +113,51 @@  discard block
 block discarded – undo
113 113
  */
114 114
 function maj_base($version_cible = 0, $redirect = '', $debut_page = true) {
115 115
 
116
-	$version_installee = $GLOBALS['meta']['version_installee'] ?? null;
117
-
118
-	spip_log(
119
-		"Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
120
-		'maj.' . _LOG_INFO_IMPORTANTE
121
-	);
122
-	if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
123
-		sql_replace(
124
-			'spip_meta',
125
-			[
126
-				'nom' => 'version_installee',
127
-				'valeur' => $GLOBALS['spip_version_base'],
128
-				'impt' => 'non'
129
-			]
130
-		);
131
-		return false;
132
-	}
133
-	if (!upgrade_test()) {
134
-		return true;
135
-	}
136
-
137
-	$cible = ($version_cible ?: $GLOBALS['spip_version_base']);
138
-
139
-	if ($version_installee < 2021_01_01_00) {
140
-		include_spip('maj/legacy/v21');
141
-		include_spip('maj/legacy/v30');
142
-		include_spip('maj/legacy/v31');
143
-		include_spip('maj/legacy/v32');
144
-		include_spip('maj/legacy/v40');
145
-	}
146
-
147
-	include_spip('maj/2021');
148
-
149
-	ksort($GLOBALS['maj']);
150
-	$res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
151
-	if ($res) {
152
-		if (!is_array($res)) {
153
-			spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
154
-		} else {
155
-			echo _T('avis_operation_echec') . ' ' . join(' ', $res);
156
-			echo install_fin_html();
157
-		}
158
-	}
159
-
160
-	return $res;
116
+    $version_installee = $GLOBALS['meta']['version_installee'] ?? null;
117
+
118
+    spip_log(
119
+        "Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
120
+        'maj.' . _LOG_INFO_IMPORTANTE
121
+    );
122
+    if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
123
+        sql_replace(
124
+            'spip_meta',
125
+            [
126
+                'nom' => 'version_installee',
127
+                'valeur' => $GLOBALS['spip_version_base'],
128
+                'impt' => 'non'
129
+            ]
130
+        );
131
+        return false;
132
+    }
133
+    if (!upgrade_test()) {
134
+        return true;
135
+    }
136
+
137
+    $cible = ($version_cible ?: $GLOBALS['spip_version_base']);
138
+
139
+    if ($version_installee < 2021_01_01_00) {
140
+        include_spip('maj/legacy/v21');
141
+        include_spip('maj/legacy/v30');
142
+        include_spip('maj/legacy/v31');
143
+        include_spip('maj/legacy/v32');
144
+        include_spip('maj/legacy/v40');
145
+    }
146
+
147
+    include_spip('maj/2021');
148
+
149
+    ksort($GLOBALS['maj']);
150
+    $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
151
+    if ($res) {
152
+        if (!is_array($res)) {
153
+            spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
154
+        } else {
155
+            echo _T('avis_operation_echec') . ' ' . join(' ', $res);
156
+            echo install_fin_html();
157
+        }
158
+    }
159
+
160
+    return $res;
161 161
 }
162 162
 
163 163
 /**
@@ -199,53 +199,53 @@  discard block
 block discarded – undo
199 199
  */
200 200
 function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta') {
201 201
 
202
-	if ($table_meta !== 'meta') {
203
-		installer_table_meta($table_meta);
204
-	}
205
-
206
-	$current_version = null;
207
-
208
-	if (
209
-		(!isset($GLOBALS[$table_meta][$nom_meta_base_version]))
210
-		|| (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '='))
211
-	) {
212
-		// $maj['create'] contient les directives propres a la premiere creation de base
213
-		// c'est une operation derogatoire qui fait aboutir directement dans la version_cible
214
-		if (isset($maj['create'])) {
215
-			if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
216
-				// installation : on ne fait que l'operation create
217
-				$maj = ['init' => $maj['create']];
218
-				// et on lui ajoute un appel a inc/config
219
-				// pour creer les metas par defaut
220
-				$config = charger_fonction('config', 'inc');
221
-				$maj[$version_cible] = [[$config]];
222
-			}
223
-			// dans tous les cas enlever cet index du tableau
224
-			unset($maj['create']);
225
-		}
226
-		// si init, deja dans le bon ordre
227
-		if (!isset($maj['init'])) {
228
-			include_spip('inc/plugin'); // pour spip_version_compare
229
-			uksort($maj, 'spip_version_compare');
230
-		}
231
-
232
-		// la redirection se fait par defaut sur la page d'administration des plugins
233
-		// sauf lorsque nous sommes sur l'installation de SPIP
234
-		// ou define _REDIRECT_MAJ_PLUGIN
235
-		$redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'));
236
-		if (defined('_ECRIRE_INSTALL')) {
237
-			$redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
238
-		}
239
-
240
-		$res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
241
-		if ($res) {
242
-			if (!is_array($res)) {
243
-				spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
244
-			} else {
245
-				echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
246
-			}
247
-		}
248
-	}
202
+    if ($table_meta !== 'meta') {
203
+        installer_table_meta($table_meta);
204
+    }
205
+
206
+    $current_version = null;
207
+
208
+    if (
209
+        (!isset($GLOBALS[$table_meta][$nom_meta_base_version]))
210
+        || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '='))
211
+    ) {
212
+        // $maj['create'] contient les directives propres a la premiere creation de base
213
+        // c'est une operation derogatoire qui fait aboutir directement dans la version_cible
214
+        if (isset($maj['create'])) {
215
+            if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
216
+                // installation : on ne fait que l'operation create
217
+                $maj = ['init' => $maj['create']];
218
+                // et on lui ajoute un appel a inc/config
219
+                // pour creer les metas par defaut
220
+                $config = charger_fonction('config', 'inc');
221
+                $maj[$version_cible] = [[$config]];
222
+            }
223
+            // dans tous les cas enlever cet index du tableau
224
+            unset($maj['create']);
225
+        }
226
+        // si init, deja dans le bon ordre
227
+        if (!isset($maj['init'])) {
228
+            include_spip('inc/plugin'); // pour spip_version_compare
229
+            uksort($maj, 'spip_version_compare');
230
+        }
231
+
232
+        // la redirection se fait par defaut sur la page d'administration des plugins
233
+        // sauf lorsque nous sommes sur l'installation de SPIP
234
+        // ou define _REDIRECT_MAJ_PLUGIN
235
+        $redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'));
236
+        if (defined('_ECRIRE_INSTALL')) {
237
+            $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
238
+        }
239
+
240
+        $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
241
+        if ($res) {
242
+            if (!is_array($res)) {
243
+                spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
244
+            } else {
245
+                echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
246
+            }
247
+        }
248
+    }
249 249
 }
250 250
 
251 251
 /**
@@ -262,17 +262,17 @@  discard block
 block discarded – undo
262 262
  * @return void
263 263
  */
264 264
 function relance_maj($meta, $table, $redirect = '') {
265
-	include_spip('inc/headers');
266
-	if (!$redirect) {
267
-		// recuperer la valeur installee en cours
268
-		// on la tronque numeriquement, elle ne sert pas reellement
269
-		// sauf pour verifier que ce n'est pas oui ou non
270
-		// sinon is_numeric va echouer sur un numero de version 1.2.3
271
-		$installee = intval($GLOBALS[$table][$meta]);
272
-		$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
273
-	}
274
-	echo redirige_formulaire($redirect);
275
-	exit();
265
+    include_spip('inc/headers');
266
+    if (!$redirect) {
267
+        // recuperer la valeur installee en cours
268
+        // on la tronque numeriquement, elle ne sert pas reellement
269
+        // sauf pour verifier que ce n'est pas oui ou non
270
+        // sinon is_numeric va echouer sur un numero de version 1.2.3
271
+        $installee = intval($GLOBALS[$table][$meta]);
272
+        $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
273
+    }
274
+    echo redirige_formulaire($redirect);
275
+    exit();
276 276
 }
277 277
 
278 278
 /**
@@ -285,29 +285,29 @@  discard block
 block discarded – undo
285 285
  * @return void
286 286
  */
287 287
 function maj_debut_page($installee, $meta, $table) {
288
-	static $done = false;
289
-	if ($done) {
290
-		return;
291
-	}
292
-	include_spip('inc/minipres');
293
-	include_spip('inc/filtres');
294
-	if (function_exists('ini_set')) {
295
-		@ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
296
-	}
297
-	$timeout = _UPGRADE_TIME_OUT * 2;
298
-	$titre = _T('titre_page_upgrade');
299
-	$balise_img = charger_filtre('balise_img');
300
-	$titre .= $balise_img(chemin_image('loader.svg'), '', 'loader');
301
-	echo(install_debut_html($titre));
302
-	// script de rechargement auto sur timeout
303
-	$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
304
-	echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
305
-	echo "<div style='text-align: left'>\n";
306
-	if (ob_get_level()) {
307
-		ob_flush();
308
-	}
309
-	flush();
310
-	$done = true;
288
+    static $done = false;
289
+    if ($done) {
290
+        return;
291
+    }
292
+    include_spip('inc/minipres');
293
+    include_spip('inc/filtres');
294
+    if (function_exists('ini_set')) {
295
+        @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
296
+    }
297
+    $timeout = _UPGRADE_TIME_OUT * 2;
298
+    $titre = _T('titre_page_upgrade');
299
+    $balise_img = charger_filtre('balise_img');
300
+    $titre .= $balise_img(chemin_image('loader.svg'), '', 'loader');
301
+    echo(install_debut_html($titre));
302
+    // script de rechargement auto sur timeout
303
+    $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
304
+    echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
305
+    echo "<div style='text-align: left'>\n";
306
+    if (ob_get_level()) {
307
+        ob_flush();
308
+    }
309
+    flush();
310
+    $done = true;
311 311
 }
312 312
 
313 313
 
@@ -351,64 +351,64 @@  discard block
 block discarded – undo
351 351
  *    - tableau vide sinon.
352 352
  */
353 353
 function maj_while($installee, $cible, $maj, $meta = '', $table = 'meta', $redirect = '', $debut_page = false) {
354
-	# inclusions pour que les procedures d'upgrade disposent des fonctions de base
355
-	include_spip('base/create');
356
-	include_spip('base/abstract_sql');
357
-	$trouver_table = charger_fonction('trouver_table', 'base');
358
-	include_spip('inc/plugin'); // pour spip_version_compare
359
-	$n = 0;
360
-	$time = time();
361
-
362
-	if (!defined('_TIME_OUT')) {
363
-		/**
364
-		 * Définir le timeout qui peut-être utilisé dans les fonctions
365
-		 * de mises à jour qui durent trop longtemps
366
-		 *
367
-		 * À utiliser tel que : `if (time() >= _TIME_OUT)`
368
-		 *
369
-		 * @var int
370
-		 */
371
-		define('_TIME_OUT', $time + _UPGRADE_TIME_OUT);
372
-	}
373
-
374
-	foreach ($maj as $v => $operations) {
375
-		// si une maj pour cette version
376
-		if (
377
-			$v == 'init' or
378
-			(spip_version_compare($v, $installee, '>')
379
-				and spip_version_compare($v, $cible, '<='))
380
-		) {
381
-			if ($debut_page) {
382
-				maj_debut_page($v, $meta, $table);
383
-			}
384
-			echo "MAJ $v";
385
-			$etape = serie_alter($v, $operations, $meta, $table, $redirect);
386
-			$trouver_table(''); // vider le cache des descriptions de table
387
-			# echec sur une etape en cours ?
388
-			# on sort
389
-			if ($etape) {
390
-				return [$v, $etape];
391
-			}
392
-			$n = time() - $time;
393
-			spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
394
-			if ($meta) {
395
-				ecrire_meta($meta, $installee = $v, 'oui', $table);
396
-			}
397
-			echo (_IS_CLI ? "\n" : '<br />');
398
-		}
399
-		if (time() >= _TIME_OUT) {
400
-			relance_maj($meta, $table, $redirect);
401
-		}
402
-	}
403
-	$trouver_table(''); // vider le cache des descriptions de table
404
-	// indispensable pour les chgt de versions qui n'ecrivent pas en base
405
-	// tant pis pour la redondance eventuelle avec ci-dessus
406
-	if ($meta) {
407
-		ecrire_meta($meta, $cible, 'oui', $table);
408
-	}
409
-	spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
410
-
411
-	return [];
354
+    # inclusions pour que les procedures d'upgrade disposent des fonctions de base
355
+    include_spip('base/create');
356
+    include_spip('base/abstract_sql');
357
+    $trouver_table = charger_fonction('trouver_table', 'base');
358
+    include_spip('inc/plugin'); // pour spip_version_compare
359
+    $n = 0;
360
+    $time = time();
361
+
362
+    if (!defined('_TIME_OUT')) {
363
+        /**
364
+         * Définir le timeout qui peut-être utilisé dans les fonctions
365
+         * de mises à jour qui durent trop longtemps
366
+         *
367
+         * À utiliser tel que : `if (time() >= _TIME_OUT)`
368
+         *
369
+         * @var int
370
+         */
371
+        define('_TIME_OUT', $time + _UPGRADE_TIME_OUT);
372
+    }
373
+
374
+    foreach ($maj as $v => $operations) {
375
+        // si une maj pour cette version
376
+        if (
377
+            $v == 'init' or
378
+            (spip_version_compare($v, $installee, '>')
379
+                and spip_version_compare($v, $cible, '<='))
380
+        ) {
381
+            if ($debut_page) {
382
+                maj_debut_page($v, $meta, $table);
383
+            }
384
+            echo "MAJ $v";
385
+            $etape = serie_alter($v, $operations, $meta, $table, $redirect);
386
+            $trouver_table(''); // vider le cache des descriptions de table
387
+            # echec sur une etape en cours ?
388
+            # on sort
389
+            if ($etape) {
390
+                return [$v, $etape];
391
+            }
392
+            $n = time() - $time;
393
+            spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
394
+            if ($meta) {
395
+                ecrire_meta($meta, $installee = $v, 'oui', $table);
396
+            }
397
+            echo (_IS_CLI ? "\n" : '<br />');
398
+        }
399
+        if (time() >= _TIME_OUT) {
400
+            relance_maj($meta, $table, $redirect);
401
+        }
402
+    }
403
+    $trouver_table(''); // vider le cache des descriptions de table
404
+    // indispensable pour les chgt de versions qui n'ecrivent pas en base
405
+    // tant pis pour la redondance eventuelle avec ci-dessus
406
+    if ($meta) {
407
+        ecrire_meta($meta, $cible, 'oui', $table);
408
+    }
409
+    spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
410
+
411
+    return [];
412 412
 }
413 413
 
414 414
 /**
@@ -431,53 +431,53 @@  discard block
 block discarded – undo
431 431
  * @return int
432 432
  */
433 433
 function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '') {
434
-	$meta2 = $meta . '_maj_' . $serie;
435
-	$etape = 0;
436
-	if (isset($GLOBALS[$table][$meta2])) {
437
-		$etape = intval($GLOBALS[$table][$meta2]);
438
-	}
439
-	foreach ($q as $i => $r) {
440
-		if ($i >= $etape) {
441
-			$msg = "maj $table $meta2 etape $i";
442
-			if (
443
-				is_array($r)
444
-				and function_exists($f = array_shift($r))
445
-			) {
446
-				// note: $r (arguments de la fonction $f) peut avoir des données tabulaires
447
-				spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
448
-				// pour les fonctions atomiques sql_xx
449
-				// on enregistre le meta avant de lancer la fonction,
450
-				// de maniere a eviter de boucler sur timeout
451
-				// mais pour les fonctions complexes,
452
-				// il faut les rejouer jusqu'a achevement.
453
-				// C'est a elle d'assurer qu'elles progressent a chaque rappel
454
-				if (strncmp($f, 'sql_', 4) == 0) {
455
-					ecrire_meta($meta2, $i + 1, 'non', $table);
456
-				}
457
-				echo (_IS_CLI ? '.' : " <span title='$i'>.</span>");
458
-				$f(...$r);
459
-				// si temps imparti depasse, on relance sans ecrire en meta
460
-				// car on est peut etre sorti sur timeout si c'est une fonction longue
461
-				if (time() >= _TIME_OUT) {
462
-					relance_maj($meta, $table, $redirect);
463
-				}
464
-				ecrire_meta($meta2, $i + 1, 'non', $table);
465
-				spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
466
-			} else {
467
-				if (!is_array($r)) {
468
-					spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
469
-				} else {
470
-					spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
471
-				}
472
-				// en cas d'erreur serieuse, on s'arrete
473
-				// mais on permet de passer par dessus en rechargeant la page.
474
-				return $i + 1;
475
-			}
476
-		}
477
-	}
478
-	effacer_meta($meta2, $table);
479
-
480
-	return 0;
434
+    $meta2 = $meta . '_maj_' . $serie;
435
+    $etape = 0;
436
+    if (isset($GLOBALS[$table][$meta2])) {
437
+        $etape = intval($GLOBALS[$table][$meta2]);
438
+    }
439
+    foreach ($q as $i => $r) {
440
+        if ($i >= $etape) {
441
+            $msg = "maj $table $meta2 etape $i";
442
+            if (
443
+                is_array($r)
444
+                and function_exists($f = array_shift($r))
445
+            ) {
446
+                // note: $r (arguments de la fonction $f) peut avoir des données tabulaires
447
+                spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
448
+                // pour les fonctions atomiques sql_xx
449
+                // on enregistre le meta avant de lancer la fonction,
450
+                // de maniere a eviter de boucler sur timeout
451
+                // mais pour les fonctions complexes,
452
+                // il faut les rejouer jusqu'a achevement.
453
+                // C'est a elle d'assurer qu'elles progressent a chaque rappel
454
+                if (strncmp($f, 'sql_', 4) == 0) {
455
+                    ecrire_meta($meta2, $i + 1, 'non', $table);
456
+                }
457
+                echo (_IS_CLI ? '.' : " <span title='$i'>.</span>");
458
+                $f(...$r);
459
+                // si temps imparti depasse, on relance sans ecrire en meta
460
+                // car on est peut etre sorti sur timeout si c'est une fonction longue
461
+                if (time() >= _TIME_OUT) {
462
+                    relance_maj($meta, $table, $redirect);
463
+                }
464
+                ecrire_meta($meta2, $i + 1, 'non', $table);
465
+                spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
466
+            } else {
467
+                if (!is_array($r)) {
468
+                    spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
469
+                } else {
470
+                    spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
471
+                }
472
+                // en cas d'erreur serieuse, on s'arrete
473
+                // mais on permet de passer par dessus en rechargeant la page.
474
+                return $i + 1;
475
+            }
476
+        }
477
+    }
478
+    effacer_meta($meta2, $table);
479
+
480
+    return 0;
481 481
 }
482 482
 
483 483
 /**
@@ -486,16 +486,16 @@  discard block
 block discarded – undo
486 486
  * @return bool True si possible.
487 487
  **/
488 488
 function upgrade_test() {
489
-	sql_drop_table('spip_test', true);
490
-	sql_create('spip_test', ['a' => 'int']);
491
-	sql_alter('TABLE spip_test ADD b INT');
492
-	sql_insertq('spip_test', ['b' => 1], ['field' => ['b' => 'int']]);
493
-	$result = sql_select('b', 'spip_test');
494
-	// ne pas garder le resultat de la requete sinon sqlite3
495
-	// ne peut pas supprimer la table spip_test lors du sql_alter qui suit
496
-	// car cette table serait alors 'verouillee'
497
-	$result = $result ? true : false;
498
-	sql_alter('TABLE spip_test DROP b');
499
-
500
-	return $result;
489
+    sql_drop_table('spip_test', true);
490
+    sql_create('spip_test', ['a' => 'int']);
491
+    sql_alter('TABLE spip_test ADD b INT');
492
+    sql_insertq('spip_test', ['b' => 1], ['field' => ['b' => 'int']]);
493
+    $result = sql_select('b', 'spip_test');
494
+    // ne pas garder le resultat de la requete sinon sqlite3
495
+    // ne peut pas supprimer la table spip_test lors du sql_alter qui suit
496
+    // car cette table serait alors 'verouillee'
497
+    $result = $result ? true : false;
498
+    sql_alter('TABLE spip_test DROP b');
499
+
500
+    return $result;
501 501
 }
Please login to merge, or discard this patch.
ecrire/balise/menu_lang_ecrire.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -99,9 +99,9 @@  discard block
 block discarded – undo
99 99
 	include_spip('inc/lang');
100 100
 
101 101
 	if ($GLOBALS['spip_lang'] <> $default) {
102
-		$opt = lang_select($default);  # et remplace
102
+		$opt = lang_select($default); # et remplace
103 103
 		if ($GLOBALS['spip_lang'] <> $default) {
104
-			$default = '';  # annule tout choix par defaut
104
+			$default = ''; # annule tout choix par defaut
105 105
 			if ($opt) {
106 106
 				lang_select();
107 107
 			}
@@ -110,7 +110,7 @@  discard block
 block discarded – undo
110 110
 
111 111
 	# lien a partir de /
112 112
 	$cible = parametre_url(self(), 'lang', '', '&');
113
-	$post = generer_url_action('converser', 'redirect=' . rawurlencode($cible), true);
113
+	$post = generer_url_action('converser', 'redirect='.rawurlencode($cible), true);
114 114
 
115 115
 	return [
116 116
 		'formulaires/menu_lang',
Please login to merge, or discard this patch.
Indentation   +31 added lines, -31 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
 /**
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
  *     Pile complétée du code compilé
38 38
  **/
39 39
 function balise_MENU_LANG_ECRIRE($p) {
40
-	return calculer_balise_dynamique($p, 'MENU_LANG_ECRIRE', ['lang']);
40
+    return calculer_balise_dynamique($p, 'MENU_LANG_ECRIRE', ['lang']);
41 41
 }
42 42
 
43 43
 /**
@@ -56,12 +56,12 @@  discard block
 block discarded – undo
56 56
  *   - string: Si pas de multilinguisme
57 57
  */
58 58
 function balise_MENU_LANG_ECRIRE_stat($args, $context_compil) {
59
-	include_spip('inc/lang');
60
-	if (strpos($GLOBALS['meta']['langues_proposees'], ',') === false) {
61
-		return '';
62
-	}
59
+    include_spip('inc/lang');
60
+    if (strpos($GLOBALS['meta']['langues_proposees'], ',') === false) {
61
+        return '';
62
+    }
63 63
 
64
-	return $args;
64
+    return $args;
65 65
 }
66 66
 
67 67
 /**
@@ -77,7 +77,7 @@  discard block
 block discarded – undo
77 77
  *     Liste : Chemin du squelette, durée du cache, contexte
78 78
  **/
79 79
 function balise_MENU_LANG_ECRIRE_dyn($opt) {
80
-	return menu_lang_pour_tous('var_lang_ecrire', $opt);
80
+    return menu_lang_pour_tous('var_lang_ecrire', $opt);
81 81
 }
82 82
 
83 83
 /**
@@ -97,30 +97,30 @@  discard block
 block discarded – undo
97 97
  *     Liste : Chemin du squelette, durée du cache, contexte
98 98
  **/
99 99
 function menu_lang_pour_tous($nom, $default) {
100
-	include_spip('inc/lang');
100
+    include_spip('inc/lang');
101 101
 
102
-	if ($GLOBALS['spip_lang'] <> $default) {
103
-		$opt = lang_select($default);  # et remplace
104
-		if ($GLOBALS['spip_lang'] <> $default) {
105
-			$default = '';  # annule tout choix par defaut
106
-			if ($opt) {
107
-				lang_select();
108
-			}
109
-		}
110
-	}
102
+    if ($GLOBALS['spip_lang'] <> $default) {
103
+        $opt = lang_select($default);  # et remplace
104
+        if ($GLOBALS['spip_lang'] <> $default) {
105
+            $default = '';  # annule tout choix par defaut
106
+            if ($opt) {
107
+                lang_select();
108
+            }
109
+        }
110
+    }
111 111
 
112
-	# lien a partir de /
113
-	$cible = parametre_url(self(), 'lang', '', '&');
114
-	$post = generer_url_action('converser', 'redirect=' . rawurlencode($cible), true);
112
+    # lien a partir de /
113
+    $cible = parametre_url(self(), 'lang', '', '&');
114
+    $post = generer_url_action('converser', 'redirect=' . rawurlencode($cible), true);
115 115
 
116
-	return [
117
-		'formulaires/menu_lang',
118
-		3600,
119
-		[
120
-			'nom' => $nom,
121
-			'url' => $post,
122
-			'name' => $nom,
123
-			'default' => $default,
124
-		]
125
-	];
116
+    return [
117
+        'formulaires/menu_lang',
118
+        3600,
119
+        [
120
+            'nom' => $nom,
121
+            'url' => $post,
122
+            'name' => $nom,
123
+            'default' => $default,
124
+        ]
125
+    ];
126 126
 }
Please login to merge, or discard this patch.
ecrire/balise/menu_lang.php 1 patch
Indentation   +8 added lines, -8 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
 /**
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
  *     Pile complétée du code compilé
38 38
  **/
39 39
 function balise_MENU_LANG($p) {
40
-	return calculer_balise_dynamique($p, 'MENU_LANG', ['lang']);
40
+    return calculer_balise_dynamique($p, 'MENU_LANG', ['lang']);
41 41
 }
42 42
 
43 43
 /**
@@ -56,11 +56,11 @@  discard block
 block discarded – undo
56 56
  *   string: (vide) si pas de multilinguisme
57 57
  */
58 58
 function balise_MENU_LANG_stat($args, $context_compil) {
59
-	if (strpos($GLOBALS['meta']['langues_multilingue'], ',') === false) {
60
-		return '';
61
-	}
59
+    if (strpos($GLOBALS['meta']['langues_multilingue'], ',') === false) {
60
+        return '';
61
+    }
62 62
 
63
-	return $args;
63
+    return $args;
64 64
 }
65 65
 
66 66
 /**
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
  *     Liste : Chemin du squelette, durée du cache, contexte
77 77
  **/
78 78
 function balise_MENU_LANG_dyn($opt) {
79
-	include_spip('balise/menu_lang_ecrire');
79
+    include_spip('balise/menu_lang_ecrire');
80 80
 
81
-	return menu_lang_pour_tous('var_lang', $opt);
81
+    return menu_lang_pour_tous('var_lang', $opt);
82 82
 }
Please login to merge, or discard this patch.
ecrire/public/balises.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -2868,8 +2868,7 @@
 block discarded – undo
2868 2868
 	$_const = interprete_argument_balise(1, $p);
2869 2869
 	if (!strlen($_const ?? '')) {
2870 2870
 		$p->code = "''";
2871
-	}
2872
-	else {
2871
+	} else {
2873 2872
 		$p->code = "(defined($_const)?constant($_const):'')";
2874 2873
 	}
2875 2874
 	$p->interdire_scripts = false;
Please login to merge, or discard this patch.
Spacing   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -358,7 +358,7 @@  discard block
 block discarded – undo
358 358
  */
359 359
 function balise_DOSSIER_SQUELETTE_dist($p) {
360 360
 	$code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
361
-	$p->code = "_DIR_RACINE . '$code'" .
361
+	$p->code = "_DIR_RACINE . '$code'".
362 362
 		$p->interdire_scripts = false;
363 363
 
364 364
 	return $p;
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
  */
378 378
 function balise_SQUELETTE_dist($p) {
379 379
 	$code = addslashes($p->descr['sourcefile']);
380
-	$p->code = "'$code'" .
380
+	$p->code = "'$code'".
381 381
 		$p->interdire_scripts = false;
382 382
 
383 383
 	return $p;
@@ -429,9 +429,9 @@  discard block
 block discarded – undo
429 429
  **/
430 430
 function balise_NOM_SITE_dist($p) {
431 431
 	if (!$p->etoile) {
432
-		$p->code = 'supprimer_numero(calculer_url(' .
433
-			champ_sql('url_site', $p) . ',' .
434
-			champ_sql('nom_site', $p) .
432
+		$p->code = 'supprimer_numero(calculer_url('.
433
+			champ_sql('url_site', $p).','.
434
+			champ_sql('nom_site', $p).
435 435
 			", 'titre', \$connect, false))";
436 436
 	} else {
437 437
 		$p->code = champ_sql('nom_site', $p);
@@ -582,8 +582,8 @@  discard block
 block discarded – undo
582 582
  *     Pile complétée par le code à générer
583 583
  **/
584 584
 function balise_POPULARITE_ABSOLUE_dist($p) {
585
-	$p->code = 'ceil(' .
586
-		champ_sql('popularite', $p) .
585
+	$p->code = 'ceil('.
586
+		champ_sql('popularite', $p).
587 587
 		')';
588 588
 	$p->interdire_scripts = false;
589 589
 
@@ -664,7 +664,7 @@  discard block
 block discarded – undo
664 664
 	$p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
665 665
 ;
666 666
 	if (($v = interprete_argument_balise(1, $p)) !== null) {
667
-		$p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
667
+		$p->code = 'table_valeur('.$p->code.', '.$v.')';
668 668
 	}
669 669
 	$p->interdire_scripts = true;
670 670
 
@@ -804,16 +804,16 @@  discard block
 block discarded – undo
804 804
 	$trouver_table = charger_fonction('trouver_table', 'base');
805 805
 	if ($desc = $trouver_table(table_objet_sql($type_objet))) {
806 806
 		if (isset($desc['field']['descriptif'])) {
807
-			$_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
807
+			$_ligne .= "'descriptif' => ".champ_sql('descriptif', $p).',';
808 808
 		}
809 809
 		if (isset($desc['field']['texte'])) {
810
-			$_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
810
+			$_ligne .= "'texte' => ".champ_sql('texte', $p).',';
811 811
 		}
812 812
 		if (isset($desc['field']['chapo'])) {
813
-			$_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
813
+			$_ligne .= "'chapo' => ".champ_sql('chapo', $p).',';
814 814
 		}
815 815
 		if (isset($desc['introduction_longueur'])) {
816
-			$_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
816
+			$_introduction_longueur = "'".$desc['introduction_longueur']."'";
817 817
 		}
818 818
 	}
819 819
 	$_ligne .= ')';
@@ -909,10 +909,10 @@  discard block
 block discarded – undo
909 909
 		$p->code = sprintf(
910 910
 			CODE_RECUPERER_FOND,
911 911
 			"'modeles/lesauteurs'",
912
-			"array('objet'=>'" . $objet .
913
-			"','id_objet' => " . champ_sql($id_table_objet, $p) .
914
-			",'$id_table_objet' => " . champ_sql($id_table_objet, $p) .
915
-			($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) .
912
+			"array('objet'=>'".$objet.
913
+			"','id_objet' => ".champ_sql($id_table_objet, $p).
914
+			",'$id_table_objet' => ".champ_sql($id_table_objet, $p).
915
+			($objet == 'article' ? '' : ",'id_article' => ".champ_sql('id_article', $p)).
916 916
 			')',
917 917
 			"'trim'=>true, 'compil'=>array($c)",
918 918
 			_q($connect)
@@ -981,7 +981,7 @@  discard block
 block discarded – undo
981 981
 					$m = trim($m);
982 982
 					if ($m != "''") {
983 983
 						if (!preg_match(',\W,', $m)) {
984
-							$m = $boucle->id_table . ".$m";
984
+							$m = $boucle->id_table.".$m";
985 985
 						}
986 986
 
987 987
 						$m .= ' AS titre_rang';
@@ -1142,7 +1142,7 @@  discard block
 block discarded – undo
1142 1142
 	$f_pagination = chercher_filtre('pagination');
1143 1143
 	$type = $p->boucles[$b]->modificateur['debut_nom'];
1144 1144
 	$modif = ($type[0] !== "'") ? "'debut'.$type"
1145
-		: ("'debut" . substr($type, 1));
1145
+		: ("'debut".substr($type, 1));
1146 1146
 
1147 1147
 	$p->code = sprintf(
1148 1148
 		CODE_PAGINATION,
@@ -1285,7 +1285,7 @@  discard block
 block discarded – undo
1285 1285
 		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']];
1286 1286
 		erreur_squelette($msg, $p);
1287 1287
 	} else {
1288
-		$p->code = 'find_in_path((string)' . $arg . ')';
1288
+		$p->code = 'find_in_path((string)'.$arg.')';
1289 1289
 	}
1290 1290
 
1291 1291
 	$p->interdire_scripts = false;
@@ -1320,7 +1320,7 @@  discard block
 block discarded – undo
1320 1320
 		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']];
1321 1321
 		erreur_squelette($msg, $p);
1322 1322
 	} else {
1323
-		$p->code = 'chemin_image((string)' . $arg . ')';
1323
+		$p->code = 'chemin_image((string)'.$arg.')';
1324 1324
 	}
1325 1325
 
1326 1326
 	$p->interdire_scripts = false;
@@ -1374,7 +1374,7 @@  discard block
 block discarded – undo
1374 1374
 		// cas de #ENV sans argument : on retourne le serialize() du tableau
1375 1375
 		// une belle fonction [(#ENV|affiche_env)] serait pratique
1376 1376
 		if ($src) {
1377
-			$p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")';
1377
+			$p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")';
1378 1378
 		} else {
1379 1379
 			$p->code = 'serialize($Pile[0]??[])';
1380 1380
 		}
@@ -1427,8 +1427,8 @@  discard block
 block discarded – undo
1427 1427
 	$_sinon = interprete_argument_balise(2, $p);
1428 1428
 	$_unserialize = sinon(interprete_argument_balise(3, $p), 'false');
1429 1429
 
1430
-	$p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' .
1431
-		($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')";
1430
+	$p->code = '(include_spip(\'inc/config\')?lire_config('.$arg.','.
1431
+		($_sinon && $_sinon != "''" ? $_sinon : 'null').','.$_unserialize."):'')";
1432 1432
 
1433 1433
 	return $p;
1434 1434
 }
@@ -1521,7 +1521,7 @@  discard block
 block discarded – undo
1521 1521
 		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']];
1522 1522
 		erreur_squelette($err_b_s_a, $p);
1523 1523
 	} else {
1524
-		$p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))';
1524
+		$p->code = '(include_spip("inc/session") AND session_set('.$_nom.','.$_val.'))';
1525 1525
 	}
1526 1526
 
1527 1527
 	$p->interdire_scripts = false;
@@ -1569,7 +1569,7 @@  discard block
 block discarded – undo
1569 1569
 			)
1570 1570
 		) {
1571 1571
 			$p->code = /* $r[1]. */
1572
-				'(' . $r[2] . ')';
1572
+				'('.$r[2].')';
1573 1573
 		} else {
1574 1574
 			$p->code = "eval('return '.$php.';')";
1575 1575
 		}
@@ -1813,9 +1813,9 @@  discard block
 block discarded – undo
1813 1813
 
1814 1814
 		// noter la duree du cache dans un entete proprietaire
1815 1815
 
1816
-		$code = "'<'.'" . '?php header("X-Spip-Cache: '
1816
+		$code = "'<'.'".'?php header("X-Spip-Cache: '
1817 1817
 			. $duree
1818
-			. '"); ?' . "'.'>'";
1818
+			. '"); ?'."'.'>'";
1819 1819
 
1820 1820
 		// Remplir le header Cache-Control
1821 1821
 		// cas #CACHE{0}
@@ -1836,9 +1836,9 @@  discard block
 block discarded – undo
1836 1836
 				$pa == 'cache-client'
1837 1837
 				and $duree > 0
1838 1838
 			) {
1839
-				$code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1839
+				$code .= ".'<'.'".'?php header("Cache-Control: max-age='
1840 1840
 					. $duree
1841
-					. '"); ?' . "'.'>'";
1841
+					. '"); ?'."'.'>'";
1842 1842
 				// il semble logique, si on cache-client, de ne pas invalider
1843 1843
 				$pa = 'statique';
1844 1844
 			}
@@ -1847,7 +1847,7 @@  discard block
 block discarded – undo
1847 1847
 				$pa == 'statique'
1848 1848
 				and $duree > 0
1849 1849
 			) {
1850
-				$code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1850
+				$code .= ".'<'.'".'?php header("X-Spip-Statique: oui"); ?'."'.'>'";
1851 1851
 			}
1852 1852
 		}
1853 1853
 	} else {
@@ -2011,9 +2011,9 @@  discard block
 block discarded – undo
2011 2011
 		if ($p->etoile) {
2012 2012
 			$_options[] = "'etoile'=>true";
2013 2013
 		}
2014
-		$_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2014
+		$_options[] = "'compil'=>array(".memoriser_contexte_compil($p).')';
2015 2015
 
2016
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2016
+		$_l = 'array('.join(",\n\t", $_contexte).')';
2017 2017
 		if ($flag_env) {
2018 2018
 			$_l = "array_merge(\$Pile[0],$_l)";
2019 2019
 		}
@@ -2023,7 +2023,7 @@  discard block
 block discarded – undo
2023 2023
 		$msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2024 2024
 		erreur_squelette($msg, $p);
2025 2025
 	} else {
2026
-		$p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2026
+		$p->code = 'charge_scripts('.$_contexte[1].',false)';
2027 2027
 	}
2028 2028
 
2029 2029
 	$p->interdire_scripts = false; // la securite est assuree par recuperer_fond
@@ -2071,7 +2071,7 @@  discard block
 block discarded – undo
2071 2071
 		unset($_contexte[1]);
2072 2072
 
2073 2073
 		if (preg_match("/^\s*'[^']*'/s", $nom)) {
2074
-			$nom = "'modeles/" . substr($nom, 1);
2074
+			$nom = "'modeles/".substr($nom, 1);
2075 2075
 		} else {
2076 2076
 			$nom = "'modeles/' . $nom";
2077 2077
 		}
@@ -2088,8 +2088,8 @@  discard block
 block discarded – undo
2088 2088
 			$primary = $p->boucles[$p->id_boucle]->primary;
2089 2089
 			if (!strpos($primary, ',')) {
2090 2090
 				$id = champ_sql($primary, $p);
2091
-				$_contexte[] = "'$primary'=>" . $id;
2092
-				$_contexte[] = "'id'=>" . $id;
2091
+				$_contexte[] = "'$primary'=>".$id;
2092
+				$_contexte[] = "'id'=>".$id;
2093 2093
 			}
2094 2094
 		}
2095 2095
 		$_contexte[] = "'recurs'=>(++\$recurs)";
@@ -2101,11 +2101,11 @@  discard block
 block discarded – undo
2101 2101
 		$_options = memoriser_contexte_compil($p);
2102 2102
 		$_options = "'compil'=>array($_options), 'trim'=>true";
2103 2103
 		if (isset($_contexte['ajax'])) {
2104
-			$_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2104
+			$_options .= ', '.preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2105 2105
 			unset($_contexte['ajax']);
2106 2106
 		}
2107 2107
 
2108
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2108
+		$_l = 'array('.join(",\n\t", $_contexte).')';
2109 2109
 		if ($flag_env) {
2110 2110
 			$_l = "array_merge(\$Pile[0],$_l)";
2111 2111
 		}
@@ -2215,12 +2215,12 @@  discard block
 block discarded – undo
2215 2215
 function balise_DOUBLONS_dist($p) {
2216 2216
 	if ($type = interprete_argument_balise(1, $p)) {
2217 2217
 		if ($famille = interprete_argument_balise(2, $p)) {
2218
-			$type .= '.' . $famille;
2218
+			$type .= '.'.$famille;
2219 2219
 		}
2220
-		$p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2220
+		$p->code = '(isset($doublons['.$type.']) ? $doublons['.$type.'] : "")';
2221 2221
 		if (!$p->etoile) {
2222 2222
 			$p->code = 'array_filter(array_map("intval",explode(",",'
2223
-				. $p->code . ')))';
2223
+				. $p->code.')))';
2224 2224
 		}
2225 2225
 	} else {
2226 2226
 		$p->code = '$doublons';
@@ -2349,7 +2349,7 @@  discard block
 block discarded – undo
2349 2349
 			$_code[] = "$_key => $_val";
2350 2350
 		}
2351 2351
 	} while ($_key && $_val);
2352
-	$p->code = 'array(' . join(', ', $_code) . ')';
2352
+	$p->code = 'array('.join(', ', $_code).')';
2353 2353
 	$p->interdire_scripts = false;
2354 2354
 
2355 2355
 	return $p;
@@ -2376,7 +2376,7 @@  discard block
 block discarded – undo
2376 2376
 	while ($_val = interprete_argument_balise($n++, $p)) {
2377 2377
 		$_code[] = $_val;
2378 2378
 	}
2379
-	$p->code = 'array(' . join(', ', $_code) . ')';
2379
+	$p->code = 'array('.join(', ', $_code).')';
2380 2380
 	$p->interdire_scripts = false;
2381 2381
 
2382 2382
 	return $p;
@@ -2421,10 +2421,10 @@  discard block
 block discarded – undo
2421 2421
 		$_code[] = $_v;
2422 2422
 	}
2423 2423
 
2424
-	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2424
+	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser('.join(
2425 2425
 		', ',
2426 2426
 		$_code
2427
-	) . ')?" ":"")';
2427
+	).')?" ":"")';
2428 2428
 	$p->interdire_scripts = false;
2429 2429
 
2430 2430
 	return $p;
@@ -2457,7 +2457,7 @@  discard block
 block discarded – undo
2457 2457
 	$type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2458 2458
 
2459 2459
 	$f = chercher_filtre('info_plugin');
2460
-	$p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2460
+	$p->code = $f.'('.$plugin.', '.$type_info.')';
2461 2461
 
2462 2462
 	return $p;
2463 2463
 }
@@ -2689,7 +2689,7 @@  discard block
 block discarded – undo
2689 2689
 	}
2690 2690
 
2691 2691
 	// Différentes infos relatives au tri présentes dans les modificateurs
2692
-	$_tri_nom = $boucle->modificateur['tri_nom'] ; // nom du paramètre définissant le tri
2692
+	$_tri_nom = $boucle->modificateur['tri_nom']; // nom du paramètre définissant le tri
2693 2693
 	$_tri_champ = $boucle->modificateur['tri_champ']; // champ actuel utilisé le tri
2694 2694
 	$_tri_sens = $boucle->modificateur['tri_sens']; // sens de tri actuel
2695 2695
 	$_tri_liste_sens_defaut = $boucle->modificateur['tri_liste_sens_defaut']; // sens par défaut pour chaque champ
@@ -2784,7 +2784,7 @@  discard block
 block discarded – undo
2784 2784
 		$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2785 2785
 	}
2786 2786
 
2787
-	$p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2787
+	$p->code = '(objet_test_si_publie('.$_type.',intval('.$_id.'),'._q($connect).")?' ':'')";
2788 2788
 	$p->interdire_scripts = false;
2789 2789
 
2790 2790
 	return $p;
Please login to merge, or discard this patch.
Indentation   +943 added lines, -943 removed lines patch added patch discarded remove patch
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
  **/
28 28
 
29 29
 if (!defined('_ECRIRE_INC_VERSION')) {
30
-	return;
30
+    return;
31 31
 }
32 32
 
33 33
 /**
@@ -49,16 +49,16 @@  discard block
 block discarded – undo
49 49
  *     Code PHP si cet argument est présent, sinon null
50 50
  **/
51 51
 function interprete_argument_balise(int $n, Champ $p): ?string {
52
-	if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) {
53
-		return calculer_liste(
54
-			$p->param[0][$n],
55
-			$p->descr,
56
-			$p->boucles,
57
-			$p->id_boucle
58
-		);
59
-	} else {
60
-		return null;
61
-	}
52
+    if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) {
53
+        return calculer_liste(
54
+            $p->param[0][$n],
55
+            $p->descr,
56
+            $p->boucles,
57
+            $p->id_boucle
58
+        );
59
+    } else {
60
+        return null;
61
+    }
62 62
 }
63 63
 
64 64
 
@@ -78,10 +78,10 @@  discard block
 block discarded – undo
78 78
  *     Pile complétée par le code à générer
79 79
  **/
80 80
 function balise_NOM_SITE_SPIP_dist($p) {
81
-	$p->code = "\$GLOBALS['meta']['nom_site']";
81
+    $p->code = "\$GLOBALS['meta']['nom_site']";
82 82
 
83
-	#$p->interdire_scripts = true;
84
-	return $p;
83
+    #$p->interdire_scripts = true;
84
+    return $p;
85 85
 }
86 86
 
87 87
 /**
@@ -97,10 +97,10 @@  discard block
 block discarded – undo
97 97
  *     Pile complétée par le code à générer
98 98
  **/
99 99
 function balise_EMAIL_WEBMASTER_dist($p) {
100
-	$p->code = "\$GLOBALS['meta']['email_webmaster']";
100
+    $p->code = "\$GLOBALS['meta']['email_webmaster']";
101 101
 
102
-	#$p->interdire_scripts = true;
103
-	return $p;
102
+    #$p->interdire_scripts = true;
103
+    return $p;
104 104
 }
105 105
 
106 106
 /**
@@ -116,10 +116,10 @@  discard block
 block discarded – undo
116 116
  *     Pile complétée par le code à générer
117 117
  **/
118 118
 function balise_DESCRIPTIF_SITE_SPIP_dist($p) {
119
-	$p->code = "\$GLOBALS['meta']['descriptif_site']";
119
+    $p->code = "\$GLOBALS['meta']['descriptif_site']";
120 120
 
121
-	#$p->interdire_scripts = true;
122
-	return $p;
121
+    #$p->interdire_scripts = true;
122
+    return $p;
123 123
 }
124 124
 
125 125
 
@@ -140,10 +140,10 @@  discard block
 block discarded – undo
140 140
  *     Pile complétée par le code à générer
141 141
  **/
142 142
 function balise_CHARSET_dist($p) {
143
-	$p->code = "\$GLOBALS['meta']['charset']";
143
+    $p->code = "\$GLOBALS['meta']['charset']";
144 144
 
145
-	#$p->interdire_scripts = true;
146
-	return $p;
145
+    #$p->interdire_scripts = true;
146
+    return $p;
147 147
 }
148 148
 
149 149
 /**
@@ -168,11 +168,11 @@  discard block
 block discarded – undo
168 168
  *     Pile complétée par le code à générer
169 169
  **/
170 170
 function balise_LANG_LEFT_dist($p) {
171
-	$_lang = champ_sql('lang', $p);
172
-	$p->code = "lang_dir($_lang, 'left','right')";
173
-	$p->interdire_scripts = false;
171
+    $_lang = champ_sql('lang', $p);
172
+    $p->code = "lang_dir($_lang, 'left','right')";
173
+    $p->interdire_scripts = false;
174 174
 
175
-	return $p;
175
+    return $p;
176 176
 }
177 177
 
178 178
 /**
@@ -192,11 +192,11 @@  discard block
 block discarded – undo
192 192
  *     Pile complétée par le code à générer
193 193
  **/
194 194
 function balise_LANG_RIGHT_dist($p) {
195
-	$_lang = champ_sql('lang', $p);
196
-	$p->code = "lang_dir($_lang, 'right','left')";
197
-	$p->interdire_scripts = false;
195
+    $_lang = champ_sql('lang', $p);
196
+    $p->code = "lang_dir($_lang, 'right','left')";
197
+    $p->interdire_scripts = false;
198 198
 
199
-	return $p;
199
+    return $p;
200 200
 }
201 201
 
202 202
 /**
@@ -221,11 +221,11 @@  discard block
 block discarded – undo
221 221
  *     Pile complétée par le code à générer
222 222
  **/
223 223
 function balise_LANG_DIR_dist($p) {
224
-	$_lang = champ_sql('lang', $p);
225
-	$p->code = "lang_dir($_lang, 'ltr','rtl')";
226
-	$p->interdire_scripts = false;
224
+    $_lang = champ_sql('lang', $p);
225
+    $p->code = "lang_dir($_lang, 'ltr','rtl')";
226
+    $p->interdire_scripts = false;
227 227
 
228
-	return $p;
228
+    return $p;
229 229
 }
230 230
 
231 231
 
@@ -242,10 +242,10 @@  discard block
 block discarded – undo
242 242
  *     Pile complétée par le code à générer
243 243
  **/
244 244
 function balise_PUCE_dist($p) {
245
-	$p->code = 'definir_puce()';
246
-	$p->interdire_scripts = false;
245
+    $p->code = 'definir_puce()';
246
+    $p->interdire_scripts = false;
247 247
 
248
-	return $p;
248
+    return $p;
249 249
 }
250 250
 
251 251
 
@@ -269,9 +269,9 @@  discard block
 block discarded – undo
269 269
  *     Pile completée du code PHP d'exécution de la balise
270 270
  */
271 271
 function balise_DATE_dist($p) {
272
-	$p->code = champ_sql('date', $p);
272
+    $p->code = champ_sql('date', $p);
273 273
 
274
-	return $p;
274
+    return $p;
275 275
 }
276 276
 
277 277
 
@@ -291,10 +291,10 @@  discard block
 block discarded – undo
291 291
  *     Pile completée du code PHP d'exécution de la balise
292 292
  */
293 293
 function balise_DATE_REDAC_dist($p) {
294
-	$p->code = champ_sql('date_redac', $p);
295
-	$p->interdire_scripts = false;
294
+    $p->code = champ_sql('date_redac', $p);
295
+    $p->interdire_scripts = false;
296 296
 
297
-	return $p;
297
+    return $p;
298 298
 }
299 299
 
300 300
 /**
@@ -313,10 +313,10 @@  discard block
 block discarded – undo
313 313
  *     Pile completée du code PHP d'exécution de la balise
314 314
  */
315 315
 function balise_DATE_MODIF_dist($p) {
316
-	$p->code = champ_sql('date_modif', $p);
317
-	$p->interdire_scripts = false;
316
+    $p->code = champ_sql('date_modif', $p);
317
+    $p->interdire_scripts = false;
318 318
 
319
-	return $p;
319
+    return $p;
320 320
 }
321 321
 
322 322
 /**
@@ -334,13 +334,13 @@  discard block
 block discarded – undo
334 334
  *     Pile completée du code PHP d'exécution de la balise
335 335
  */
336 336
 function balise_DATE_NOUVEAUTES_dist($p) {
337
-	$p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui'
337
+    $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui'
338 338
 	AND isset(\$GLOBALS['meta']['dernier_envoi_neuf'])) ?
339 339
 	\$GLOBALS['meta']['dernier_envoi_neuf'] :
340 340
 	\"'0000-00-00'\")";
341
-	$p->interdire_scripts = false;
341
+    $p->interdire_scripts = false;
342 342
 
343
-	return $p;
343
+    return $p;
344 344
 }
345 345
 
346 346
 
@@ -358,11 +358,11 @@  discard block
 block discarded – undo
358 358
  *     Pile completée du code PHP d'exécution de la balise
359 359
  */
360 360
 function balise_DOSSIER_SQUELETTE_dist($p) {
361
-	$code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
362
-	$p->code = "_DIR_RACINE . '$code'" .
363
-		$p->interdire_scripts = false;
361
+    $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
362
+    $p->code = "_DIR_RACINE . '$code'" .
363
+        $p->interdire_scripts = false;
364 364
 
365
-	return $p;
365
+    return $p;
366 366
 }
367 367
 
368 368
 /**
@@ -377,11 +377,11 @@  discard block
 block discarded – undo
377 377
  *     Pile completée du code PHP d'exécution de la balise
378 378
  */
379 379
 function balise_SQUELETTE_dist($p) {
380
-	$code = addslashes($p->descr['sourcefile']);
381
-	$p->code = "'$code'" .
382
-		$p->interdire_scripts = false;
380
+    $code = addslashes($p->descr['sourcefile']);
381
+    $p->code = "'$code'" .
382
+        $p->interdire_scripts = false;
383 383
 
384
-	return $p;
384
+    return $p;
385 385
 }
386 386
 
387 387
 /**
@@ -400,10 +400,10 @@  discard block
 block discarded – undo
400 400
  *     Pile completée du code PHP d'exécution de la balise
401 401
  */
402 402
 function balise_SPIP_VERSION_dist($p) {
403
-	$p->code = 'spip_version()';
404
-	$p->interdire_scripts = false;
403
+    $p->code = 'spip_version()';
404
+    $p->interdire_scripts = false;
405 405
 
406
-	return $p;
406
+    return $p;
407 407
 }
408 408
 
409 409
 
@@ -429,18 +429,18 @@  discard block
 block discarded – undo
429 429
  *     Pile complétée par le code à générer
430 430
  **/
431 431
 function balise_NOM_SITE_dist($p) {
432
-	if (!$p->etoile) {
433
-		$p->code = 'supprimer_numero(calculer_url(' .
434
-			champ_sql('url_site', $p) . ',' .
435
-			champ_sql('nom_site', $p) .
436
-			", 'titre', \$connect, false))";
437
-	} else {
438
-		$p->code = champ_sql('nom_site', $p);
439
-	}
432
+    if (!$p->etoile) {
433
+        $p->code = 'supprimer_numero(calculer_url(' .
434
+            champ_sql('url_site', $p) . ',' .
435
+            champ_sql('nom_site', $p) .
436
+            ", 'titre', \$connect, false))";
437
+    } else {
438
+        $p->code = champ_sql('nom_site', $p);
439
+    }
440 440
 
441
-	$p->interdire_scripts = true;
441
+    $p->interdire_scripts = true;
442 442
 
443
-	return $p;
443
+    return $p;
444 444
 }
445 445
 
446 446
 
@@ -457,11 +457,11 @@  discard block
 block discarded – undo
457 457
  *     Pile complétée par le code à générer
458 458
  **/
459 459
 function balise_NOTES_dist($p) {
460
-	// Recuperer les notes
461
-	$p->code = 'calculer_notes()';
460
+    // Recuperer les notes
461
+    $p->code = 'calculer_notes()';
462 462
 
463
-	#$p->interdire_scripts = true;
464
-	return $p;
463
+    #$p->interdire_scripts = true;
464
+    return $p;
465 465
 }
466 466
 
467 467
 
@@ -483,10 +483,10 @@  discard block
 block discarded – undo
483 483
  *     Pile complétée par le code à générer
484 484
  **/
485 485
 function balise_RECHERCHE_dist($p) {
486
-	$p->code = 'entites_html(_request("recherche"))';
487
-	$p->interdire_scripts = false;
486
+    $p->code = 'entites_html(_request("recherche"))';
487
+    $p->interdire_scripts = false;
488 488
 
489
-	return $p;
489
+    return $p;
490 490
 }
491 491
 
492 492
 
@@ -504,18 +504,18 @@  discard block
 block discarded – undo
504 504
  *     Pile complétée par le code à générer
505 505
  **/
506 506
 function balise_COMPTEUR_BOUCLE_dist($p) {
507
-	$b = index_boucle_mere($p);
508
-	if ($b === '') {
509
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
510
-		erreur_squelette($msg, $p);
511
-		return null;
512
-	} else {
513
-		$p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)";
514
-		$p->boucles[$b]->cptrows = true;
515
-		$p->interdire_scripts = false;
507
+    $b = index_boucle_mere($p);
508
+    if ($b === '') {
509
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
510
+        erreur_squelette($msg, $p);
511
+        return null;
512
+    } else {
513
+        $p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)";
514
+        $p->boucles[$b]->cptrows = true;
515
+        $p->interdire_scripts = false;
516 516
 
517
-		return $p;
518
-	}
517
+        return $p;
518
+    }
519 519
 }
520 520
 
521 521
 /**
@@ -533,17 +533,17 @@  discard block
 block discarded – undo
533 533
  *     Pile complétée par le code à générer
534 534
  **/
535 535
 function balise_TOTAL_BOUCLE_dist($p) {
536
-	$b = index_boucle_mere($p);
537
-	if ($b === '') {
538
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
539
-		erreur_squelette($msg, $p);
540
-	} else {
541
-		$p->code = "(\$Numrows['$b']['total'] ?? 0)";
542
-		$p->boucles[$b]->numrows = true;
543
-		$p->interdire_scripts = false;
544
-	}
536
+    $b = index_boucle_mere($p);
537
+    if ($b === '') {
538
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
539
+        erreur_squelette($msg, $p);
540
+    } else {
541
+        $p->code = "(\$Numrows['$b']['total'] ?? 0)";
542
+        $p->boucles[$b]->numrows = true;
543
+        $p->interdire_scripts = false;
544
+    }
545 545
 
546
-	return $p;
546
+    return $p;
547 547
 }
548 548
 
549 549
 
@@ -563,7 +563,7 @@  discard block
 block discarded – undo
563 563
  *     Pile complétée par le code à générer
564 564
  **/
565 565
 function balise_POINTS_dist($p) {
566
-	return rindex_pile($p, 'points', 'recherche');
566
+    return rindex_pile($p, 'points', 'recherche');
567 567
 }
568 568
 
569 569
 
@@ -584,12 +584,12 @@  discard block
 block discarded – undo
584 584
  *     Pile complétée par le code à générer
585 585
  **/
586 586
 function balise_POPULARITE_ABSOLUE_dist($p) {
587
-	$p->code = 'ceil(' .
588
-		champ_sql('popularite', $p) .
589
-		')';
590
-	$p->interdire_scripts = false;
587
+    $p->code = 'ceil(' .
588
+        champ_sql('popularite', $p) .
589
+        ')';
590
+    $p->interdire_scripts = false;
591 591
 
592
-	return $p;
592
+    return $p;
593 593
 }
594 594
 
595 595
 /**
@@ -609,10 +609,10 @@  discard block
 block discarded – undo
609 609
  *     Pile complétée par le code à générer
610 610
  **/
611 611
 function balise_POPULARITE_SITE_dist($p) {
612
-	$p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])';
613
-	$p->interdire_scripts = false;
612
+    $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])';
613
+    $p->interdire_scripts = false;
614 614
 
615
-	return $p;
615
+    return $p;
616 616
 }
617 617
 
618 618
 /**
@@ -633,10 +633,10 @@  discard block
 block discarded – undo
633 633
  *     Pile complétée par le code à générer
634 634
  **/
635 635
 function balise_POPULARITE_MAX_dist($p) {
636
-	$p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])';
637
-	$p->interdire_scripts = false;
636
+    $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])';
637
+    $p->interdire_scripts = false;
638 638
 
639
-	return $p;
639
+    return $p;
640 640
 }
641 641
 
642 642
 
@@ -662,15 +662,15 @@  discard block
 block discarded – undo
662 662
  *     Pile complétée par le code à générer
663 663
  **/
664 664
 function balise_VALEUR_dist($p) {
665
-	$b = $p->nom_boucle ?: $p->id_boucle;
666
-	$p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
665
+    $b = $p->nom_boucle ?: $p->id_boucle;
666
+    $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
667 667
 ;
668
-	if (($v = interprete_argument_balise(1, $p)) !== null) {
669
-		$p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
670
-	}
671
-	$p->interdire_scripts = true;
668
+    if (($v = interprete_argument_balise(1, $p)) !== null) {
669
+        $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
670
+    }
671
+    $p->interdire_scripts = true;
672 672
 
673
-	return $p;
673
+    return $p;
674 674
 }
675 675
 
676 676
 /**
@@ -699,16 +699,16 @@  discard block
 block discarded – undo
699 699
  *     Pile complétée par le code à générer
700 700
  **/
701 701
 function balise_EXPOSE_dist($p) {
702
-	$on = "'on'";
703
-	$off = "''";
704
-	if (($v = interprete_argument_balise(1, $p)) !== null) {
705
-		$on = $v;
706
-		if (($v = interprete_argument_balise(2, $p)) !== null) {
707
-			$off = $v;
708
-		}
709
-	}
702
+    $on = "'on'";
703
+    $off = "''";
704
+    if (($v = interprete_argument_balise(1, $p)) !== null) {
705
+        $on = $v;
706
+        if (($v = interprete_argument_balise(2, $p)) !== null) {
707
+            $off = $v;
708
+        }
709
+    }
710 710
 
711
-	return calculer_balise_expose($p, $on, $off);
711
+    return calculer_balise_expose($p, $on, $off);
712 712
 }
713 713
 
714 714
 /**
@@ -726,35 +726,35 @@  discard block
 block discarded – undo
726 726
  *     Pile complétée par le code à générer
727 727
  **/
728 728
 function calculer_balise_expose($p, $on, $off) {
729
-	$b = index_boucle($p);
730
-	if (empty($p->boucles[$b]->primary)) {
731
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
732
-		erreur_squelette($msg, $p);
733
-	} else {
734
-		$key = $p->boucles[$b]->primary;
735
-		$type = $p->boucles[$p->id_boucle]->primary;
736
-		$desc = $p->boucles[$b]->show;
737
-		$connect = sql_quote($p->boucles[$b]->sql_serveur);
729
+    $b = index_boucle($p);
730
+    if (empty($p->boucles[$b]->primary)) {
731
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
732
+        erreur_squelette($msg, $p);
733
+    } else {
734
+        $key = $p->boucles[$b]->primary;
735
+        $type = $p->boucles[$p->id_boucle]->primary;
736
+        $desc = $p->boucles[$b]->show;
737
+        $connect = sql_quote($p->boucles[$b]->sql_serveur);
738 738
 
739
-		// Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite
740
-		$c = index_pile($p->id_boucle, $type, $p->boucles);
739
+        // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite
740
+        $c = index_pile($p->id_boucle, $type, $p->boucles);
741 741
 
742
-		if (isset($desc['field']['id_parent'])) {
743
-			$parent = 0; // pour if (!$parent) dans calculer_expose
744
-		} elseif (isset($desc['field']['id_rubrique'])) {
745
-			$parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b);
746
-		} elseif (isset($desc['field']['id_groupe'])) {
747
-			$parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b);
748
-		} else {
749
-			$parent = "''";
750
-		}
742
+        if (isset($desc['field']['id_parent'])) {
743
+            $parent = 0; // pour if (!$parent) dans calculer_expose
744
+        } elseif (isset($desc['field']['id_rubrique'])) {
745
+            $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b);
746
+        } elseif (isset($desc['field']['id_groupe'])) {
747
+            $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b);
748
+        } else {
749
+            $parent = "''";
750
+        }
751 751
 
752
-		$p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)";
753
-	}
752
+        $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)";
753
+    }
754 754
 
755
-	$p->interdire_scripts = false;
755
+    $p->interdire_scripts = false;
756 756
 
757
-	return $p;
757
+    return $p;
758 758
 }
759 759
 
760 760
 
@@ -795,46 +795,46 @@  discard block
 block discarded – undo
795 795
  **/
796 796
 function balise_INTRODUCTION_dist($p) {
797 797
 
798
-	$type_objet = $p->type_requete;
799
-	$cle_objet = id_table_objet($type_objet);
800
-	$_id_objet = champ_sql($cle_objet, $p);
801
-
802
-	// Récupérer les valeurs sql nécessaires : descriptif, texte et chapo
803
-	// ainsi que le longueur d'introduction donnée dans la description de l'objet.
804
-	$_introduction_longueur = 'null';
805
-	$_ligne = 'array(';
806
-	$trouver_table = charger_fonction('trouver_table', 'base');
807
-	if ($desc = $trouver_table(table_objet_sql($type_objet))) {
808
-		if (isset($desc['field']['descriptif'])) {
809
-			$_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
810
-		}
811
-		if (isset($desc['field']['texte'])) {
812
-			$_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
813
-		}
814
-		if (isset($desc['field']['chapo'])) {
815
-			$_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
816
-		}
817
-		if (isset($desc['introduction_longueur'])) {
818
-			$_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
819
-		}
820
-	}
821
-	$_ligne .= ')';
822
-
823
-	// Récupérer la longueur et la suite passés en paramètres
824
-	$_longueur_ou_suite = 'null';
825
-	if (($v1 = interprete_argument_balise(1, $p)) !== null) {
826
-		$_longueur_ou_suite = $v1;
827
-	}
828
-	$_suite = 'null';
829
-	if (($v2 = interprete_argument_balise(2, $p)) !== null) {
830
-		$_suite = $v2;
831
-	}
832
-
833
-	$p->code = "generer_objet_introduction((int)$_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)";
834
-
835
-	#$p->interdire_scripts = true;
836
-	$p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
837
-	return $p;
798
+    $type_objet = $p->type_requete;
799
+    $cle_objet = id_table_objet($type_objet);
800
+    $_id_objet = champ_sql($cle_objet, $p);
801
+
802
+    // Récupérer les valeurs sql nécessaires : descriptif, texte et chapo
803
+    // ainsi que le longueur d'introduction donnée dans la description de l'objet.
804
+    $_introduction_longueur = 'null';
805
+    $_ligne = 'array(';
806
+    $trouver_table = charger_fonction('trouver_table', 'base');
807
+    if ($desc = $trouver_table(table_objet_sql($type_objet))) {
808
+        if (isset($desc['field']['descriptif'])) {
809
+            $_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
810
+        }
811
+        if (isset($desc['field']['texte'])) {
812
+            $_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
813
+        }
814
+        if (isset($desc['field']['chapo'])) {
815
+            $_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
816
+        }
817
+        if (isset($desc['introduction_longueur'])) {
818
+            $_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
819
+        }
820
+    }
821
+    $_ligne .= ')';
822
+
823
+    // Récupérer la longueur et la suite passés en paramètres
824
+    $_longueur_ou_suite = 'null';
825
+    if (($v1 = interprete_argument_balise(1, $p)) !== null) {
826
+        $_longueur_ou_suite = $v1;
827
+    }
828
+    $_suite = 'null';
829
+    if (($v2 = interprete_argument_balise(2, $p)) !== null) {
830
+        $_suite = $v2;
831
+    }
832
+
833
+    $p->code = "generer_objet_introduction((int)$_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)";
834
+
835
+    #$p->interdire_scripts = true;
836
+    $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
837
+    return $p;
838 838
 }
839 839
 
840 840
 
@@ -854,15 +854,15 @@  discard block
 block discarded – undo
854 854
  *     Pile complétée par le code à générer
855 855
  **/
856 856
 function balise_LANG_dist($p) {
857
-	$_lang = champ_sql('lang', $p);
858
-	if (!$p->etoile) {
859
-		$p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])";
860
-	} else {
861
-		$p->code = "spip_htmlentities($_lang)";
862
-	}
863
-	$p->interdire_scripts = false;
857
+    $_lang = champ_sql('lang', $p);
858
+    if (!$p->etoile) {
859
+        $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])";
860
+    } else {
861
+        $p->code = "spip_htmlentities($_lang)";
862
+    }
863
+    $p->interdire_scripts = false;
864 864
 
865
-	return $p;
865
+    return $p;
866 866
 }
867 867
 
868 868
 /**
@@ -884,45 +884,45 @@  discard block
 block discarded – undo
884 884
  *     Pile complétée par le code à générer
885 885
  */
886 886
 function balise_LESAUTEURS_dist($p) {
887
-	// Cherche le champ 'lesauteurs' dans la pile
888
-	$_lesauteurs = champ_sql('lesauteurs', $p, '');
889
-
890
-	// Si le champ n'existe pas (cas de spip_articles), on applique
891
-	// le modele lesauteurs.html en passant id_article dans le contexte;
892
-	// dans le cas contraire on prend le champ 'lesauteurs'
893
-	// (cf extension sites/)
894
-	if ($_lesauteurs) {
895
-		$p->code = "safehtml($_lesauteurs)";
896
-		// $p->interdire_scripts = true;
897
-	} else {
898
-		if (!$p->id_boucle) {
899
-			$connect = '';
900
-			$objet = 'article';
901
-			$id_table_objet = 'id_article';
902
-		} else {
903
-			$b = $p->nom_boucle ?: $p->id_boucle;
904
-			$connect = $p->boucles[$b]->sql_serveur;
905
-			$type_boucle = $p->boucles[$b]->type_requete;
906
-			$objet = objet_type($type_boucle);
907
-			$id_table_objet = id_table_objet($type_boucle);
908
-		}
909
-		$c = memoriser_contexte_compil($p);
910
-
911
-		$p->code = sprintf(
912
-			CODE_RECUPERER_FOND,
913
-			"'modeles/lesauteurs'",
914
-			"array('objet'=>'" . $objet .
915
-			"','id_objet' => " . champ_sql($id_table_objet, $p) .
916
-			",'$id_table_objet' => " . champ_sql($id_table_objet, $p) .
917
-			($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) .
918
-			')',
919
-			"'trim'=>true, 'compil'=>array($c)",
920
-			_q($connect)
921
-		);
922
-		$p->interdire_scripts = false; // securite apposee par recuperer_fond()
923
-	}
924
-
925
-	return $p;
887
+    // Cherche le champ 'lesauteurs' dans la pile
888
+    $_lesauteurs = champ_sql('lesauteurs', $p, '');
889
+
890
+    // Si le champ n'existe pas (cas de spip_articles), on applique
891
+    // le modele lesauteurs.html en passant id_article dans le contexte;
892
+    // dans le cas contraire on prend le champ 'lesauteurs'
893
+    // (cf extension sites/)
894
+    if ($_lesauteurs) {
895
+        $p->code = "safehtml($_lesauteurs)";
896
+        // $p->interdire_scripts = true;
897
+    } else {
898
+        if (!$p->id_boucle) {
899
+            $connect = '';
900
+            $objet = 'article';
901
+            $id_table_objet = 'id_article';
902
+        } else {
903
+            $b = $p->nom_boucle ?: $p->id_boucle;
904
+            $connect = $p->boucles[$b]->sql_serveur;
905
+            $type_boucle = $p->boucles[$b]->type_requete;
906
+            $objet = objet_type($type_boucle);
907
+            $id_table_objet = id_table_objet($type_boucle);
908
+        }
909
+        $c = memoriser_contexte_compil($p);
910
+
911
+        $p->code = sprintf(
912
+            CODE_RECUPERER_FOND,
913
+            "'modeles/lesauteurs'",
914
+            "array('objet'=>'" . $objet .
915
+            "','id_objet' => " . champ_sql($id_table_objet, $p) .
916
+            ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) .
917
+            ($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) .
918
+            ')',
919
+            "'trim'=>true, 'compil'=>array($c)",
920
+            _q($connect)
921
+        );
922
+        $p->interdire_scripts = false; // securite apposee par recuperer_fond()
923
+    }
924
+
925
+    return $p;
926 926
 }
927 927
 
928 928
 
@@ -949,76 +949,76 @@  discard block
 block discarded – undo
949 949
  *     Pile complétée par le code à générer
950 950
  */
951 951
 function balise_RANG_dist($p) {
952
-	$b = index_boucle($p);
953
-	if ($b === '') {
954
-		$msg = [
955
-			'zbug_champ_hors_boucle',
956
-			['champ' => '#RANG']
957
-		];
958
-		erreur_squelette($msg, $p);
959
-	} else {
960
-		// chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql)
961
-		// dans la boucle immediatement englobante uniquement
962
-		// sinon on compose le champ calcule
963
-		$_rang = champ_sql('rang', $p, '', false);
964
-
965
-		// si pas trouve de champ sql rang :
966
-		if (!$_rang or $_rang == "''") {
967
-			$boucle = &$p->boucles[$b];
968
-
969
-			// on gere le cas ou #RANG est une extraction du numero dans le titre
970
-			$trouver_table = charger_fonction('trouver_table', 'base');
971
-			$desc = $trouver_table($boucle->id_table);
972
-			$_titre = ''; # où extraire le numero ?
973
-
974
-			if (isset($desc['titre'])) {
975
-				$t = $desc['titre'];
976
-				if (
977
-					// Soit on trouve avec la déclaration de la lang AVANT
978
-					preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m)
979
-					// Soit on prend depuis le début
980
-					or preg_match(';^(.*?titre)\s*(,|$);', $t, $m)
981
-				) {
982
-					$m = preg_replace(',as\s+titre$,i', '', $m[1]);
983
-					$m = trim($m);
984
-					if ($m != "''") {
985
-						if (!preg_match(',\W,', $m)) {
986
-							$m = $boucle->id_table . ".$m";
987
-						}
988
-
989
-						$m .= ' AS titre_rang';
990
-
991
-						$boucle->select[] = $m;
992
-						$_titre = '$Pile[$SP][\'titre_rang\']';
993
-					}
994
-				}
995
-			}
996
-
997
-			// si on n'a rien trouvé, on utilise le champ titre classique
998
-			if (!$_titre) {
999
-				$_titre = champ_sql('titre', $p);
1000
-			}
1001
-
1002
-			// et on recupere aussi les infos de liaison si on est en train d'editer les liens justement
1003
-			// cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS
1004
-			$type_boucle = $boucle->type_requete;
1005
-			$objet = objet_type($type_boucle);
1006
-			$id_table_objet = id_table_objet($type_boucle);
1007
-			$_primary = champ_sql($id_table_objet, $p, '', false);
1008
-			$_env = '$Pile[0]';
1009
-
1010
-			if (!$_titre) {$_titre = "''";
1011
-			}
1012
-			if (!$_primary) {$_primary = "''";
1013
-			}
1014
-			$_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)";
1015
-		}
1016
-
1017
-		$p->code = $_rang;
1018
-		$p->interdire_scripts = false;
1019
-	}
1020
-
1021
-	return $p;
952
+    $b = index_boucle($p);
953
+    if ($b === '') {
954
+        $msg = [
955
+            'zbug_champ_hors_boucle',
956
+            ['champ' => '#RANG']
957
+        ];
958
+        erreur_squelette($msg, $p);
959
+    } else {
960
+        // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql)
961
+        // dans la boucle immediatement englobante uniquement
962
+        // sinon on compose le champ calcule
963
+        $_rang = champ_sql('rang', $p, '', false);
964
+
965
+        // si pas trouve de champ sql rang :
966
+        if (!$_rang or $_rang == "''") {
967
+            $boucle = &$p->boucles[$b];
968
+
969
+            // on gere le cas ou #RANG est une extraction du numero dans le titre
970
+            $trouver_table = charger_fonction('trouver_table', 'base');
971
+            $desc = $trouver_table($boucle->id_table);
972
+            $_titre = ''; # où extraire le numero ?
973
+
974
+            if (isset($desc['titre'])) {
975
+                $t = $desc['titre'];
976
+                if (
977
+                    // Soit on trouve avec la déclaration de la lang AVANT
978
+                    preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m)
979
+                    // Soit on prend depuis le début
980
+                    or preg_match(';^(.*?titre)\s*(,|$);', $t, $m)
981
+                ) {
982
+                    $m = preg_replace(',as\s+titre$,i', '', $m[1]);
983
+                    $m = trim($m);
984
+                    if ($m != "''") {
985
+                        if (!preg_match(',\W,', $m)) {
986
+                            $m = $boucle->id_table . ".$m";
987
+                        }
988
+
989
+                        $m .= ' AS titre_rang';
990
+
991
+                        $boucle->select[] = $m;
992
+                        $_titre = '$Pile[$SP][\'titre_rang\']';
993
+                    }
994
+                }
995
+            }
996
+
997
+            // si on n'a rien trouvé, on utilise le champ titre classique
998
+            if (!$_titre) {
999
+                $_titre = champ_sql('titre', $p);
1000
+            }
1001
+
1002
+            // et on recupere aussi les infos de liaison si on est en train d'editer les liens justement
1003
+            // cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS
1004
+            $type_boucle = $boucle->type_requete;
1005
+            $objet = objet_type($type_boucle);
1006
+            $id_table_objet = id_table_objet($type_boucle);
1007
+            $_primary = champ_sql($id_table_objet, $p, '', false);
1008
+            $_env = '$Pile[0]';
1009
+
1010
+            if (!$_titre) {$_titre = "''";
1011
+            }
1012
+            if (!$_primary) {$_primary = "''";
1013
+            }
1014
+            $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)";
1015
+        }
1016
+
1017
+        $p->code = $_rang;
1018
+        $p->interdire_scripts = false;
1019
+    }
1020
+
1021
+    return $p;
1022 1022
 }
1023 1023
 
1024 1024
 
@@ -1040,12 +1040,12 @@  discard block
 block discarded – undo
1040 1040
  *     Pile complétée par le code à générer
1041 1041
  **/
1042 1042
 function balise_POPULARITE_dist($p) {
1043
-	$_popularite = champ_sql('popularite', $p);
1044
-	$p->code = "(ceil(min(100, 100 * $_popularite
1043
+    $_popularite = champ_sql('popularite', $p);
1044
+    $p->code = "(ceil(min(100, 100 * $_popularite
1045 1045
 	/ max(1 , 0 + \$GLOBALS['meta']['popularite_max']))))";
1046
-	$p->interdire_scripts = false;
1046
+    $p->interdire_scripts = false;
1047 1047
 
1048
-	return $p;
1048
+    return $p;
1049 1049
 }
1050 1050
 
1051 1051
 /**
@@ -1056,8 +1056,8 @@  discard block
 block discarded – undo
1056 1056
  * l'absence peut-être due à une faute de frappe dans le contexte inclus.
1057 1057
  */
1058 1058
 define(
1059
-	'CODE_PAGINATION',
1060
-	'%s($Numrows["%s"]["grand_total"],
1059
+    'CODE_PAGINATION',
1060
+    '%s($Numrows["%s"]["grand_total"],
1061 1061
  		%s,
1062 1062
 		isset($Pile[0][%4$s])?$Pile[0][%4$s]:intval(_request(%4$s)),
1063 1063
 		%5$s, %6$s, %7$s, %8$s, array(%9$s))'
@@ -1094,75 +1094,75 @@  discard block
 block discarded – undo
1094 1094
  *     Pile complétée par le code à générer
1095 1095
  */
1096 1096
 function balise_PAGINATION_dist($p, $liste = 'true') {
1097
-	$b = index_boucle_mere($p);
1098
-
1099
-	// s'il n'y a pas de nom de boucle, on ne peut pas paginer
1100
-	if ($b === '') {
1101
-		$msg = [
1102
-			'zbug_champ_hors_boucle',
1103
-			['champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION']
1104
-		];
1105
-		erreur_squelette($msg, $p);
1106
-
1107
-		return $p;
1108
-	}
1109
-
1110
-	// s'il n'y a pas de mode_partie, c'est qu'on se trouve
1111
-	// dans un boucle recursive ou qu'on a oublie le critere {pagination}
1112
-	if (!$p->boucles[$b]->mode_partie) {
1113
-		if (!$p->boucles[$b]->table_optionnelle) {
1114
-			$msg = [
1115
-				'zbug_pagination_sans_critere',
1116
-				['champ' => '#PAGINATION']
1117
-			];
1118
-			erreur_squelette($msg, $p);
1119
-		}
1120
-
1121
-		return $p;
1122
-	}
1123
-
1124
-	// a priori true
1125
-	// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
1126
-	// si true, les arguments simples (sans truc=chose) vont degager
1127
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false);
1128
-	if (is_countable($_contexte) ? count($_contexte) : 0) {
1129
-		$key = key($_contexte);
1130
-		if (is_numeric($key)) {
1131
-			array_shift($_contexte);
1132
-			$__modele = interprete_argument_balise(1, $p);
1133
-		}
1134
-	}
1135
-
1136
-	if (is_countable($_contexte) ? count($_contexte) : 0) {
1137
-		$code_contexte = implode(',', $_contexte);
1138
-	} else {
1139
-		$code_contexte = '';
1140
-	}
1141
-
1142
-	$connect = $p->boucles[$b]->sql_serveur;
1143
-	$pas = $p->boucles[$b]->total_parties;
1144
-	$f_pagination = chercher_filtre('pagination');
1145
-	$type = $p->boucles[$b]->modificateur['debut_nom'];
1146
-	$modif = ($type[0] !== "'") ? "'debut'.$type"
1147
-		: ("'debut" . substr($type, 1));
1148
-
1149
-	$p->code = sprintf(
1150
-		CODE_PAGINATION,
1151
-		$f_pagination,
1152
-		$b,
1153
-		$type,
1154
-		$modif,
1155
-		$pas,
1156
-		$liste,
1157
-		((isset($__modele) and $__modele) ? $__modele : "''"),
1158
-		_q($connect),
1159
-		$code_contexte
1160
-	);
1161
-
1162
-	$p->boucles[$b]->numrows = true;
1163
-	$p->interdire_scripts = false;
1164
-
1165
-	return $p;
1097
+    $b = index_boucle_mere($p);
1098
+
1099
+    // s'il n'y a pas de nom de boucle, on ne peut pas paginer
1100
+    if ($b === '') {
1101
+        $msg = [
1102
+            'zbug_champ_hors_boucle',
1103
+            ['champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION']
1104
+        ];
1105
+        erreur_squelette($msg, $p);
1106
+
1107
+        return $p;
1108
+    }
1109
+
1110
+    // s'il n'y a pas de mode_partie, c'est qu'on se trouve
1111
+    // dans un boucle recursive ou qu'on a oublie le critere {pagination}
1112
+    if (!$p->boucles[$b]->mode_partie) {
1113
+        if (!$p->boucles[$b]->table_optionnelle) {
1114
+            $msg = [
1115
+                'zbug_pagination_sans_critere',
1116
+                ['champ' => '#PAGINATION']
1117
+            ];
1118
+            erreur_squelette($msg, $p);
1119
+        }
1120
+
1121
+        return $p;
1122
+    }
1123
+
1124
+    // a priori true
1125
+    // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
1126
+    // si true, les arguments simples (sans truc=chose) vont degager
1127
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false);
1128
+    if (is_countable($_contexte) ? count($_contexte) : 0) {
1129
+        $key = key($_contexte);
1130
+        if (is_numeric($key)) {
1131
+            array_shift($_contexte);
1132
+            $__modele = interprete_argument_balise(1, $p);
1133
+        }
1134
+    }
1135
+
1136
+    if (is_countable($_contexte) ? count($_contexte) : 0) {
1137
+        $code_contexte = implode(',', $_contexte);
1138
+    } else {
1139
+        $code_contexte = '';
1140
+    }
1141
+
1142
+    $connect = $p->boucles[$b]->sql_serveur;
1143
+    $pas = $p->boucles[$b]->total_parties;
1144
+    $f_pagination = chercher_filtre('pagination');
1145
+    $type = $p->boucles[$b]->modificateur['debut_nom'];
1146
+    $modif = ($type[0] !== "'") ? "'debut'.$type"
1147
+        : ("'debut" . substr($type, 1));
1148
+
1149
+    $p->code = sprintf(
1150
+        CODE_PAGINATION,
1151
+        $f_pagination,
1152
+        $b,
1153
+        $type,
1154
+        $modif,
1155
+        $pas,
1156
+        $liste,
1157
+        ((isset($__modele) and $__modele) ? $__modele : "''"),
1158
+        _q($connect),
1159
+        $code_contexte
1160
+    );
1161
+
1162
+    $p->boucles[$b]->numrows = true;
1163
+    $p->interdire_scripts = false;
1164
+
1165
+    return $p;
1166 1166
 }
1167 1167
 
1168 1168
 
@@ -1189,11 +1189,11 @@  discard block
 block discarded – undo
1189 1189
  *     Pile complétée par le code à générer
1190 1190
  **/
1191 1191
 function balise_ANCRE_PAGINATION_dist($p) {
1192
-	if ($f = charger_fonction('PAGINATION', 'balise', true)) {
1193
-		return $f($p, $liste = 'false');
1194
-	} else {
1195
-		return null;
1196
-	} // ou une erreur ?
1192
+    if ($f = charger_fonction('PAGINATION', 'balise', true)) {
1193
+        return $f($p, $liste = 'false');
1194
+    } else {
1195
+        return null;
1196
+    } // ou une erreur ?
1197 1197
 }
1198 1198
 
1199 1199
 
@@ -1214,17 +1214,17 @@  discard block
 block discarded – undo
1214 1214
  *     Pile complétée par le code à générer
1215 1215
  **/
1216 1216
 function balise_GRAND_TOTAL_dist($p) {
1217
-	$b = index_boucle_mere($p);
1218
-	if ($b === '') {
1219
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
1220
-		erreur_squelette($msg, $p);
1221
-	} else {
1222
-		$p->code = "(\$Numrows['$b']['grand_total'] ?? \$Numrows['$b']['total'] ?? 0)";
1223
-		$p->boucles[$b]->numrows = true;
1224
-		$p->interdire_scripts = false;
1225
-	}
1217
+    $b = index_boucle_mere($p);
1218
+    if ($b === '') {
1219
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
1220
+        erreur_squelette($msg, $p);
1221
+    } else {
1222
+        $p->code = "(\$Numrows['$b']['grand_total'] ?? \$Numrows['$b']['total'] ?? 0)";
1223
+        $p->boucles[$b]->numrows = true;
1224
+        $p->interdire_scripts = false;
1225
+    }
1226 1226
 
1227
-	return $p;
1227
+    return $p;
1228 1228
 }
1229 1229
 
1230 1230
 
@@ -1252,10 +1252,10 @@  discard block
 block discarded – undo
1252 1252
  *     Pile complétée par le code à générer
1253 1253
  **/
1254 1254
 function balise_SELF_dist($p) {
1255
-	$p->code = 'self()';
1256
-	$p->interdire_scripts = false;
1255
+    $p->code = 'self()';
1256
+    $p->interdire_scripts = false;
1257 1257
 
1258
-	return $p;
1258
+    return $p;
1259 1259
 }
1260 1260
 
1261 1261
 
@@ -1282,17 +1282,17 @@  discard block
 block discarded – undo
1282 1282
  *     Pile complétée par le code à générer
1283 1283
  **/
1284 1284
 function balise_CHEMIN_dist($p) {
1285
-	$arg = interprete_argument_balise(1, $p);
1286
-	if (!$arg) {
1287
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']];
1288
-		erreur_squelette($msg, $p);
1289
-	} else {
1290
-		$p->code = 'find_in_path((string)' . $arg . ')';
1291
-	}
1285
+    $arg = interprete_argument_balise(1, $p);
1286
+    if (!$arg) {
1287
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']];
1288
+        erreur_squelette($msg, $p);
1289
+    } else {
1290
+        $p->code = 'find_in_path((string)' . $arg . ')';
1291
+    }
1292 1292
 
1293
-	$p->interdire_scripts = false;
1293
+    $p->interdire_scripts = false;
1294 1294
 
1295
-	return $p;
1295
+    return $p;
1296 1296
 }
1297 1297
 
1298 1298
 /**
@@ -1317,16 +1317,16 @@  discard block
 block discarded – undo
1317 1317
  *     Pile complétée par le code à générer
1318 1318
  **/
1319 1319
 function balise_CHEMIN_IMAGE_dist($p) {
1320
-	$arg = interprete_argument_balise(1, $p);
1321
-	if (!$arg) {
1322
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']];
1323
-		erreur_squelette($msg, $p);
1324
-	} else {
1325
-		$p->code = 'chemin_image((string)' . $arg . ')';
1326
-	}
1320
+    $arg = interprete_argument_balise(1, $p);
1321
+    if (!$arg) {
1322
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']];
1323
+        erreur_squelette($msg, $p);
1324
+    } else {
1325
+        $p->code = 'chemin_image((string)' . $arg . ')';
1326
+    }
1327 1327
 
1328
-	$p->interdire_scripts = false;
1329
-	return $p;
1328
+    $p->interdire_scripts = false;
1329
+    return $p;
1330 1330
 }
1331 1331
 
1332 1332
 
@@ -1364,36 +1364,36 @@  discard block
 block discarded – undo
1364 1364
  **/
1365 1365
 function balise_ENV_dist($p, $src = null) {
1366 1366
 
1367
-	// cle du tableau desiree
1368
-	$_nom = interprete_argument_balise(1, $p);
1369
-	// valeur par defaut
1370
-	$_sinon = interprete_argument_balise(2, $p);
1367
+    // cle du tableau desiree
1368
+    $_nom = interprete_argument_balise(1, $p);
1369
+    // valeur par defaut
1370
+    $_sinon = interprete_argument_balise(2, $p);
1371 1371
 
1372
-	// $src est un tableau de donnees sources eventuellement transmis
1373
-	// en absence, on utilise l'environnement du squelette $Pile[0]
1372
+    // $src est un tableau de donnees sources eventuellement transmis
1373
+    // en absence, on utilise l'environnement du squelette $Pile[0]
1374 1374
 
1375
-	if (!$_nom) {
1376
-		// cas de #ENV sans argument : on retourne le serialize() du tableau
1377
-		// une belle fonction [(#ENV|affiche_env)] serait pratique
1378
-		if ($src) {
1379
-			$p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")';
1380
-		} else {
1381
-			$p->code = 'serialize($Pile[0]??[])';
1382
-		}
1383
-	} else {
1384
-		if (!$src) {
1385
-			$src = '$Pile[0]??[]';
1386
-		}
1387
-		if ($_sinon) {
1388
-			$p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)";
1389
-		} else {
1390
-			$p->code = "table_valeur($src, (string)$_nom, null)";
1391
-		}
1392
-	}
1375
+    if (!$_nom) {
1376
+        // cas de #ENV sans argument : on retourne le serialize() du tableau
1377
+        // une belle fonction [(#ENV|affiche_env)] serait pratique
1378
+        if ($src) {
1379
+            $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")';
1380
+        } else {
1381
+            $p->code = 'serialize($Pile[0]??[])';
1382
+        }
1383
+    } else {
1384
+        if (!$src) {
1385
+            $src = '$Pile[0]??[]';
1386
+        }
1387
+        if ($_sinon) {
1388
+            $p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)";
1389
+        } else {
1390
+            $p->code = "table_valeur($src, (string)$_nom, null)";
1391
+        }
1392
+    }
1393 1393
 
1394
-	#$p->interdire_scripts = true;
1394
+    #$p->interdire_scripts = true;
1395 1395
 
1396
-	return $p;
1396
+    return $p;
1397 1397
 }
1398 1398
 
1399 1399
 /**
@@ -1423,16 +1423,16 @@  discard block
 block discarded – undo
1423 1423
  *     Pile completée du code PHP d'exécution de la balise
1424 1424
  */
1425 1425
 function balise_CONFIG_dist($p) {
1426
-	if (!$arg = interprete_argument_balise(1, $p)) {
1427
-		$arg = "''";
1428
-	}
1429
-	$_sinon = interprete_argument_balise(2, $p);
1430
-	$_unserialize = sinon(interprete_argument_balise(3, $p), 'false');
1426
+    if (!$arg = interprete_argument_balise(1, $p)) {
1427
+        $arg = "''";
1428
+    }
1429
+    $_sinon = interprete_argument_balise(2, $p);
1430
+    $_unserialize = sinon(interprete_argument_balise(3, $p), 'false');
1431 1431
 
1432
-	$p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' .
1433
-		($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')";
1432
+    $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' .
1433
+        ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')";
1434 1434
 
1435
-	return $p;
1435
+    return $p;
1436 1436
 }
1437 1437
 
1438 1438
 
@@ -1455,10 +1455,10 @@  discard block
 block discarded – undo
1455 1455
  *     Pile completée du code PHP d'exécution de la balise
1456 1456
  */
1457 1457
 function balise_CONNECT_dist($p) {
1458
-	$p->code = '($connect ? $connect : NULL)';
1459
-	$p->interdire_scripts = false;
1458
+    $p->code = '($connect ? $connect : NULL)';
1459
+    $p->interdire_scripts = false;
1460 1460
 
1461
-	return $p;
1461
+    return $p;
1462 1462
 }
1463 1463
 
1464 1464
 
@@ -1486,15 +1486,15 @@  discard block
 block discarded – undo
1486 1486
  *     Pile completée du code PHP d'exécution de la balise
1487 1487
  **/
1488 1488
 function balise_SESSION_dist($p) {
1489
-	$p->descr['session'] = true;
1489
+    $p->descr['session'] = true;
1490 1490
 
1491
-	$f = function_exists('balise_ENV')
1492
-		? 'balise_ENV'
1493
-		: 'balise_ENV_dist';
1491
+    $f = function_exists('balise_ENV')
1492
+        ? 'balise_ENV'
1493
+        : 'balise_ENV_dist';
1494 1494
 
1495
-	$p = $f($p, '$GLOBALS["visiteur_session"]??[]');
1495
+    $p = $f($p, '$GLOBALS["visiteur_session"]??[]');
1496 1496
 
1497
-	return $p;
1497
+    return $p;
1498 1498
 }
1499 1499
 
1500 1500
 
@@ -1517,18 +1517,18 @@  discard block
 block discarded – undo
1517 1517
  *     Pile completée du code PHP d'exécution de la balise
1518 1518
  **/
1519 1519
 function balise_SESSION_SET_dist($p) {
1520
-	$_nom = interprete_argument_balise(1, $p);
1521
-	$_val = interprete_argument_balise(2, $p);
1522
-	if (!$_nom or !$_val) {
1523
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']];
1524
-		erreur_squelette($err_b_s_a, $p);
1525
-	} else {
1526
-		$p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))';
1527
-	}
1520
+    $_nom = interprete_argument_balise(1, $p);
1521
+    $_val = interprete_argument_balise(2, $p);
1522
+    if (!$_nom or !$_val) {
1523
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']];
1524
+        erreur_squelette($err_b_s_a, $p);
1525
+    } else {
1526
+        $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))';
1527
+    }
1528 1528
 
1529
-	$p->interdire_scripts = false;
1529
+    $p->interdire_scripts = false;
1530 1530
 
1531
-	return $p;
1531
+    return $p;
1532 1532
 }
1533 1533
 
1534 1534
 
@@ -1559,30 +1559,30 @@  discard block
 block discarded – undo
1559 1559
  *     Pile completée du code PHP d'exécution de la balise
1560 1560
  **/
1561 1561
 function balise_EVAL_dist($p) {
1562
-	$php = interprete_argument_balise(1, $p);
1563
-	if ($php) {
1564
-		# optimisation sur les #EVAL{une expression sans #BALISE}
1565
-		# attention au commentaire "// x signes" qui precede
1566
-		if (
1567
-			preg_match(
1568
-				",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms",
1569
-				$php,
1570
-				$r
1571
-			)
1572
-		) {
1573
-			$p->code = /* $r[1]. */
1574
-				'(' . $r[2] . ')';
1575
-		} else {
1576
-			$p->code = "eval('return '.$php.';')";
1577
-		}
1578
-	} else {
1579
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' EVAL']];
1580
-		erreur_squelette($msg, $p);
1581
-	}
1582
-
1583
-	#$p->interdire_scripts = true;
1584
-
1585
-	return $p;
1562
+    $php = interprete_argument_balise(1, $p);
1563
+    if ($php) {
1564
+        # optimisation sur les #EVAL{une expression sans #BALISE}
1565
+        # attention au commentaire "// x signes" qui precede
1566
+        if (
1567
+            preg_match(
1568
+                ",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms",
1569
+                $php,
1570
+                $r
1571
+            )
1572
+        ) {
1573
+            $p->code = /* $r[1]. */
1574
+                '(' . $r[2] . ')';
1575
+        } else {
1576
+            $p->code = "eval('return '.$php.';')";
1577
+        }
1578
+    } else {
1579
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' EVAL']];
1580
+        erreur_squelette($msg, $p);
1581
+    }
1582
+
1583
+    #$p->interdire_scripts = true;
1584
+
1585
+    return $p;
1586 1586
 }
1587 1587
 
1588 1588
 
@@ -1612,19 +1612,19 @@  discard block
 block discarded – undo
1612 1612
  **/
1613 1613
 function balise_CHAMP_SQL_dist($p) {
1614 1614
 
1615
-	if (
1616
-		$p->param
1617
-		and isset($p->param[0][1][0])
1618
-		and $champ = ($p->param[0][1][0]->texte)
1619
-	) {
1620
-		$p->code = champ_sql($champ, $p);
1621
-	} else {
1622
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => ' CHAMP_SQL']];
1623
-		erreur_squelette($err_b_s_a, $p);
1624
-	}
1615
+    if (
1616
+        $p->param
1617
+        and isset($p->param[0][1][0])
1618
+        and $champ = ($p->param[0][1][0]->texte)
1619
+    ) {
1620
+        $p->code = champ_sql($champ, $p);
1621
+    } else {
1622
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => ' CHAMP_SQL']];
1623
+        erreur_squelette($err_b_s_a, $p);
1624
+    }
1625 1625
 
1626
-	#$p->interdire_scripts = true;
1627
-	return $p;
1626
+    #$p->interdire_scripts = true;
1627
+    return $p;
1628 1628
 }
1629 1629
 
1630 1630
 /**
@@ -1650,13 +1650,13 @@  discard block
 block discarded – undo
1650 1650
  *     Pile complétée par le code à générer
1651 1651
  **/
1652 1652
 function balise_VAL_dist($p) {
1653
-	$p->code = interprete_argument_balise(1, $p) ?? '';
1654
-	if (!strlen($p->code)) {
1655
-		$p->code = "''";
1656
-	}
1657
-	$p->interdire_scripts = false;
1653
+    $p->code = interprete_argument_balise(1, $p) ?? '';
1654
+    if (!strlen($p->code)) {
1655
+        $p->code = "''";
1656
+    }
1657
+    $p->interdire_scripts = false;
1658 1658
 
1659
-	return $p;
1659
+    return $p;
1660 1660
 }
1661 1661
 
1662 1662
 /**
@@ -1685,10 +1685,10 @@  discard block
 block discarded – undo
1685 1685
  *     Pile complétée par le code à générer
1686 1686
  **/
1687 1687
 function balise_REM_dist($p) {
1688
-	$p->code = "''";
1689
-	$p->interdire_scripts = false;
1688
+    $p->code = "''";
1689
+    $p->interdire_scripts = false;
1690 1690
 
1691
-	return $p;
1691
+    return $p;
1692 1692
 }
1693 1693
 
1694 1694
 /**
@@ -1698,10 +1698,10 @@  discard block
 block discarded – undo
1698 1698
  * @return mixed
1699 1699
  */
1700 1700
 function balise_NULL_dist($p) {
1701
-	$p->code = 'null';
1702
-	$p->interdire_scripts = false;
1701
+    $p->code = 'null';
1702
+    $p->interdire_scripts = false;
1703 1703
 
1704
-	return $p;
1704
+    return $p;
1705 1705
 }
1706 1706
 
1707 1707
 
@@ -1725,18 +1725,18 @@  discard block
 block discarded – undo
1725 1725
  **/
1726 1726
 function balise_HTTP_HEADER_dist($p) {
1727 1727
 
1728
-	$header = interprete_argument_balise(1, $p);
1729
-	if (!$header) {
1730
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'HTTP_HEADER']];
1731
-		erreur_squelette($err_b_s_a, $p);
1732
-	} else {
1733
-		$p->code = "'<'.'?php header(' . _q("
1734
-			. $header
1735
-			. ") . '); ?'.'>'";
1736
-	}
1737
-	$p->interdire_scripts = false;
1728
+    $header = interprete_argument_balise(1, $p);
1729
+    if (!$header) {
1730
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'HTTP_HEADER']];
1731
+        erreur_squelette($err_b_s_a, $p);
1732
+    } else {
1733
+        $p->code = "'<'.'?php header(' . _q("
1734
+            . $header
1735
+            . ") . '); ?'.'>'";
1736
+    }
1737
+    $p->interdire_scripts = false;
1738 1738
 
1739
-	return $p;
1739
+    return $p;
1740 1740
 }
1741 1741
 
1742 1742
 
@@ -1761,22 +1761,22 @@  discard block
 block discarded – undo
1761 1761
  *     Pile complétée par le code à générer
1762 1762
  **/
1763 1763
 function balise_FILTRE_dist($p) {
1764
-	if ($p->param) {
1765
-		$args = [];
1766
-		foreach ($p->param as $i => $ignore) {
1767
-			$args[] = interprete_argument_balise($i + 1, $p);
1768
-		}
1769
-		$p->code = "'<' . '"
1770
-			. '?php header("X-Spip-Filtre: \'.'
1771
-			. join('.\'|\'.', $args)
1772
-			. " . '\"); ?'.'>'";
1764
+    if ($p->param) {
1765
+        $args = [];
1766
+        foreach ($p->param as $i => $ignore) {
1767
+            $args[] = interprete_argument_balise($i + 1, $p);
1768
+        }
1769
+        $p->code = "'<' . '"
1770
+            . '?php header("X-Spip-Filtre: \'.'
1771
+            . join('.\'|\'.', $args)
1772
+            . " . '\"); ?'.'>'";
1773 1773
 
1774
-		$p->interdire_scripts = false;
1774
+        $p->interdire_scripts = false;
1775 1775
 
1776
-		return $p;
1777
-	}
1776
+        return $p;
1777
+    }
1778 1778
 
1779
-	return null;
1779
+    return null;
1780 1780
 }
1781 1781
 
1782 1782
 
@@ -1812,55 +1812,55 @@  discard block
 block discarded – undo
1812 1812
  **/
1813 1813
 function balise_CACHE_dist($p) {
1814 1814
 
1815
-	if ($p->param) {
1816
-		$duree = valeur_numerique($p->param[0][1][0]->texte);
1817
-
1818
-		// noter la duree du cache dans un entete proprietaire
1819
-
1820
-		$code = "'<'.'" . '?php header("X-Spip-Cache: '
1821
-			. $duree
1822
-			. '"); ?' . "'.'>'";
1823
-
1824
-		// Remplir le header Cache-Control
1825
-		// cas #CACHE{0}
1826
-		if ($duree == 0) {
1827
-			$code .= ".'<'.'"
1828
-				. '?php header("Cache-Control: no-cache, must-revalidate"); ?'
1829
-				. "'.'><'.'"
1830
-				. '?php header("Pragma: no-cache"); ?'
1831
-				. "'.'>'";
1832
-		}
1833
-
1834
-		// recuperer les parametres suivants
1835
-		$i = 1;
1836
-		while (isset($p->param[0][++$i])) {
1837
-			$pa = ($p->param[0][$i][0]->texte);
1838
-
1839
-			if (
1840
-				$pa == 'cache-client'
1841
-				and $duree > 0
1842
-			) {
1843
-				$code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1844
-					. $duree
1845
-					. '"); ?' . "'.'>'";
1846
-				// il semble logique, si on cache-client, de ne pas invalider
1847
-				$pa = 'statique';
1848
-			}
1849
-
1850
-			if (
1851
-				$pa == 'statique'
1852
-				and $duree > 0
1853
-			) {
1854
-				$code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1855
-			}
1856
-		}
1857
-	} else {
1858
-		$code = "''";
1859
-	}
1860
-	$p->code = $code;
1861
-	$p->interdire_scripts = false;
1862
-
1863
-	return $p;
1815
+    if ($p->param) {
1816
+        $duree = valeur_numerique($p->param[0][1][0]->texte);
1817
+
1818
+        // noter la duree du cache dans un entete proprietaire
1819
+
1820
+        $code = "'<'.'" . '?php header("X-Spip-Cache: '
1821
+            . $duree
1822
+            . '"); ?' . "'.'>'";
1823
+
1824
+        // Remplir le header Cache-Control
1825
+        // cas #CACHE{0}
1826
+        if ($duree == 0) {
1827
+            $code .= ".'<'.'"
1828
+                . '?php header("Cache-Control: no-cache, must-revalidate"); ?'
1829
+                . "'.'><'.'"
1830
+                . '?php header("Pragma: no-cache"); ?'
1831
+                . "'.'>'";
1832
+        }
1833
+
1834
+        // recuperer les parametres suivants
1835
+        $i = 1;
1836
+        while (isset($p->param[0][++$i])) {
1837
+            $pa = ($p->param[0][$i][0]->texte);
1838
+
1839
+            if (
1840
+                $pa == 'cache-client'
1841
+                and $duree > 0
1842
+            ) {
1843
+                $code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1844
+                    . $duree
1845
+                    . '"); ?' . "'.'>'";
1846
+                // il semble logique, si on cache-client, de ne pas invalider
1847
+                $pa = 'statique';
1848
+            }
1849
+
1850
+            if (
1851
+                $pa == 'statique'
1852
+                and $duree > 0
1853
+            ) {
1854
+                $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1855
+            }
1856
+        }
1857
+    } else {
1858
+        $code = "''";
1859
+    }
1860
+    $p->code = $code;
1861
+    $p->interdire_scripts = false;
1862
+
1863
+    return $p;
1864 1864
 }
1865 1865
 
1866 1866
 
@@ -1892,13 +1892,13 @@  discard block
 block discarded – undo
1892 1892
  *     Pile complétée par le code à générer
1893 1893
  */
1894 1894
 function balise_INSERT_HEAD_dist($p) {
1895
-	$p->code = "'<'.'"
1896
-		. '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?'
1897
-		. "'.'>'";
1898
-	$p->code .= ". pipeline('insert_head','<!-- insert_head -->')";
1899
-	$p->interdire_scripts = false;
1895
+    $p->code = "'<'.'"
1896
+        . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?'
1897
+        . "'.'>'";
1898
+    $p->code .= ". pipeline('insert_head','<!-- insert_head -->')";
1899
+    $p->interdire_scripts = false;
1900 1900
 
1901
-	return $p;
1901
+    return $p;
1902 1902
 }
1903 1903
 
1904 1904
 /**
@@ -1916,10 +1916,10 @@  discard block
 block discarded – undo
1916 1916
  *     Pile complétée par le code à générer
1917 1917
  */
1918 1918
 function balise_INSERT_HEAD_CSS_dist($p) {
1919
-	$p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')";
1920
-	$p->interdire_scripts = false;
1919
+    $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')";
1920
+    $p->interdire_scripts = false;
1921 1921
 
1922
-	return $p;
1922
+    return $p;
1923 1923
 }
1924 1924
 
1925 1925
 /**
@@ -1934,11 +1934,11 @@  discard block
 block discarded – undo
1934 1934
  *     Pile complétée par le code à générer
1935 1935
  **/
1936 1936
 function balise_INCLUDE_dist($p) {
1937
-	if (function_exists('balise_INCLURE')) {
1938
-		return balise_INCLURE($p);
1939
-	} else {
1940
-		return balise_INCLURE_dist($p);
1941
-	}
1937
+    if (function_exists('balise_INCLURE')) {
1938
+        return balise_INCLURE($p);
1939
+    } else {
1940
+        return balise_INCLURE_dist($p);
1941
+    }
1942 1942
 }
1943 1943
 
1944 1944
 /**
@@ -1972,66 +1972,66 @@  discard block
 block discarded – undo
1972 1972
  *     Pile complétée par le code à générer
1973 1973
  **/
1974 1974
 function balise_INCLURE_dist($p) {
1975
-	$id_boucle = $p->id_boucle;
1976
-	// la lang n'est pas passe de facon automatique par argumenter
1977
-	// mais le sera pas recuperer_fond, sauf si etoile=>true est passe
1978
-	// en option
1979
-
1980
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false);
1981
-
1982
-	// erreur de syntaxe = fond absent
1983
-	// (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
1984
-	if (!$_contexte) {
1985
-		$_contexte = [];
1986
-	}
1987
-
1988
-	if (isset($_contexte['fond'])) {
1989
-		$f = $_contexte['fond'];
1990
-		// toujours vrai :
1991
-		if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) {
1992
-			$f = $r[1];
1993
-			unset($_contexte['fond']);
1994
-		} else {
1995
-			spip_log('compilation de #INCLURE a revoir');
1996
-		}
1997
-
1998
-		// #INCLURE{doublons}
1999
-		if (isset($_contexte['doublons'])) {
2000
-			$_contexte['doublons'] = "'doublons' => \$doublons";
2001
-		}
2002
-
2003
-		// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
2004
-		$flag_env = false;
2005
-		if (isset($_contexte['env']) or isset($_contexte['self'])) {
2006
-			$flag_env = true;
2007
-			unset($_contexte['env']);
2008
-		}
2009
-
2010
-		$_options = [];
2011
-		if (isset($_contexte['ajax'])) {
2012
-			$_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2013
-			unset($_contexte['ajax']);
2014
-		}
2015
-		if ($p->etoile) {
2016
-			$_options[] = "'etoile'=>true";
2017
-		}
2018
-		$_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2019
-
2020
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2021
-		if ($flag_env) {
2022
-			$_l = "array_merge(\$Pile[0],$_l)";
2023
-		}
2024
-
2025
-		$p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''");
2026
-	} elseif (!isset($_contexte[1])) {
2027
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2028
-		erreur_squelette($msg, $p);
2029
-	} else {
2030
-		$p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2031
-	}
2032
-
2033
-	$p->interdire_scripts = false; // la securite est assuree par recuperer_fond
2034
-	return $p;
1975
+    $id_boucle = $p->id_boucle;
1976
+    // la lang n'est pas passe de facon automatique par argumenter
1977
+    // mais le sera pas recuperer_fond, sauf si etoile=>true est passe
1978
+    // en option
1979
+
1980
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false);
1981
+
1982
+    // erreur de syntaxe = fond absent
1983
+    // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
1984
+    if (!$_contexte) {
1985
+        $_contexte = [];
1986
+    }
1987
+
1988
+    if (isset($_contexte['fond'])) {
1989
+        $f = $_contexte['fond'];
1990
+        // toujours vrai :
1991
+        if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) {
1992
+            $f = $r[1];
1993
+            unset($_contexte['fond']);
1994
+        } else {
1995
+            spip_log('compilation de #INCLURE a revoir');
1996
+        }
1997
+
1998
+        // #INCLURE{doublons}
1999
+        if (isset($_contexte['doublons'])) {
2000
+            $_contexte['doublons'] = "'doublons' => \$doublons";
2001
+        }
2002
+
2003
+        // Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
2004
+        $flag_env = false;
2005
+        if (isset($_contexte['env']) or isset($_contexte['self'])) {
2006
+            $flag_env = true;
2007
+            unset($_contexte['env']);
2008
+        }
2009
+
2010
+        $_options = [];
2011
+        if (isset($_contexte['ajax'])) {
2012
+            $_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2013
+            unset($_contexte['ajax']);
2014
+        }
2015
+        if ($p->etoile) {
2016
+            $_options[] = "'etoile'=>true";
2017
+        }
2018
+        $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2019
+
2020
+        $_l = 'array(' . join(",\n\t", $_contexte) . ')';
2021
+        if ($flag_env) {
2022
+            $_l = "array_merge(\$Pile[0],$_l)";
2023
+        }
2024
+
2025
+        $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''");
2026
+    } elseif (!isset($_contexte[1])) {
2027
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2028
+        erreur_squelette($msg, $p);
2029
+    } else {
2030
+        $p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2031
+    }
2032
+
2033
+    $p->interdire_scripts = false; // la securite est assuree par recuperer_fond
2034
+    return $p;
2035 2035
 }
2036 2036
 
2037 2037
 
@@ -2059,69 +2059,69 @@  discard block
 block discarded – undo
2059 2059
  **/
2060 2060
 function balise_MODELE_dist($p) {
2061 2061
 
2062
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
2063
-
2064
-	// erreur de syntaxe = fond absent
2065
-	// (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
2066
-	if (!$_contexte) {
2067
-		$_contexte = [];
2068
-	}
2069
-
2070
-	if (!isset($_contexte[1])) {
2071
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']];
2072
-		erreur_squelette($msg, $p);
2073
-	} else {
2074
-		$nom = $_contexte[1];
2075
-		unset($_contexte[1]);
2076
-
2077
-		if (preg_match("/^\s*'[^']*'/s", $nom)) {
2078
-			$nom = "'modeles/" . substr($nom, 1);
2079
-		} else {
2080
-			$nom = "'modeles/' . $nom";
2081
-		}
2082
-
2083
-		$flag_env = false;
2084
-		if (isset($_contexte['env'])) {
2085
-			$flag_env = true;
2086
-			unset($_contexte['env']);
2087
-		}
2088
-
2089
-		// Incoherence dans la syntaxe du contexte. A revoir.
2090
-		// Reserver la cle primaire de la boucle courante si elle existe
2091
-		if (isset($p->boucles[$p->id_boucle]->primary)) {
2092
-			$primary = $p->boucles[$p->id_boucle]->primary;
2093
-			if (!strpos($primary, ',')) {
2094
-				$id = champ_sql($primary, $p);
2095
-				$_contexte[] = "'$primary'=>" . $id;
2096
-				$_contexte[] = "'id'=>" . $id;
2097
-			}
2098
-		}
2099
-		$_contexte[] = "'recurs'=>(++\$recurs)";
2100
-		$connect = '';
2101
-		if (isset($p->boucles[$p->id_boucle])) {
2102
-			$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2103
-		}
2104
-
2105
-		$_options = memoriser_contexte_compil($p);
2106
-		$_options = "'compil'=>array($_options), 'trim'=>true";
2107
-		if (isset($_contexte['ajax'])) {
2108
-			$_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2109
-			unset($_contexte['ajax']);
2110
-		}
2111
-
2112
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2113
-		if ($flag_env) {
2114
-			$_l = "array_merge(\$Pile[0],$_l)";
2115
-		}
2116
-
2117
-		$page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect));
2118
-
2119
-		$p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n";
2120
-
2121
-		$p->interdire_scripts = false; // securite assuree par le squelette
2122
-	}
2123
-
2124
-	return $p;
2062
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
2063
+
2064
+    // erreur de syntaxe = fond absent
2065
+    // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
2066
+    if (!$_contexte) {
2067
+        $_contexte = [];
2068
+    }
2069
+
2070
+    if (!isset($_contexte[1])) {
2071
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']];
2072
+        erreur_squelette($msg, $p);
2073
+    } else {
2074
+        $nom = $_contexte[1];
2075
+        unset($_contexte[1]);
2076
+
2077
+        if (preg_match("/^\s*'[^']*'/s", $nom)) {
2078
+            $nom = "'modeles/" . substr($nom, 1);
2079
+        } else {
2080
+            $nom = "'modeles/' . $nom";
2081
+        }
2082
+
2083
+        $flag_env = false;
2084
+        if (isset($_contexte['env'])) {
2085
+            $flag_env = true;
2086
+            unset($_contexte['env']);
2087
+        }
2088
+
2089
+        // Incoherence dans la syntaxe du contexte. A revoir.
2090
+        // Reserver la cle primaire de la boucle courante si elle existe
2091
+        if (isset($p->boucles[$p->id_boucle]->primary)) {
2092
+            $primary = $p->boucles[$p->id_boucle]->primary;
2093
+            if (!strpos($primary, ',')) {
2094
+                $id = champ_sql($primary, $p);
2095
+                $_contexte[] = "'$primary'=>" . $id;
2096
+                $_contexte[] = "'id'=>" . $id;
2097
+            }
2098
+        }
2099
+        $_contexte[] = "'recurs'=>(++\$recurs)";
2100
+        $connect = '';
2101
+        if (isset($p->boucles[$p->id_boucle])) {
2102
+            $connect = $p->boucles[$p->id_boucle]->sql_serveur;
2103
+        }
2104
+
2105
+        $_options = memoriser_contexte_compil($p);
2106
+        $_options = "'compil'=>array($_options), 'trim'=>true";
2107
+        if (isset($_contexte['ajax'])) {
2108
+            $_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2109
+            unset($_contexte['ajax']);
2110
+        }
2111
+
2112
+        $_l = 'array(' . join(",\n\t", $_contexte) . ')';
2113
+        if ($flag_env) {
2114
+            $_l = "array_merge(\$Pile[0],$_l)";
2115
+        }
2116
+
2117
+        $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect));
2118
+
2119
+        $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n";
2120
+
2121
+        $p->interdire_scripts = false; // securite assuree par le squelette
2122
+    }
2123
+
2124
+    return $p;
2125 2125
 }
2126 2126
 
2127 2127
 
@@ -2145,21 +2145,21 @@  discard block
 block discarded – undo
2145 2145
  *     Pile complétée par le code à générer
2146 2146
  **/
2147 2147
 function balise_SET_dist($p) {
2148
-	$_nom = interprete_argument_balise(1, $p);
2149
-	$_val = interprete_argument_balise(2, $p);
2148
+    $_nom = interprete_argument_balise(1, $p);
2149
+    $_val = interprete_argument_balise(2, $p);
2150 2150
 
2151
-	if (!$_nom or !$_val) {
2152
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']];
2153
-		erreur_squelette($err_b_s_a, $p);
2154
-	}
2155
-	// affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4
2156
-	// cf https://bugs.php.net/bug.php?id=65845
2157
-	else {
2158
-		$p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)";
2159
-	}
2151
+    if (!$_nom or !$_val) {
2152
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']];
2153
+        erreur_squelette($err_b_s_a, $p);
2154
+    }
2155
+    // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4
2156
+    // cf https://bugs.php.net/bug.php?id=65845
2157
+    else {
2158
+        $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)";
2159
+    }
2160 2160
 
2161
-	$p->interdire_scripts = false; // la balise ne renvoie rien
2162
-	return $p;
2161
+    $p->interdire_scripts = false; // la balise ne renvoie rien
2162
+    return $p;
2163 2163
 }
2164 2164
 
2165 2165
 
@@ -2189,12 +2189,12 @@  discard block
 block discarded – undo
2189 2189
  *     Pile complétée par le code à générer
2190 2190
  **/
2191 2191
 function balise_GET_dist($p) {
2192
-	$p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance
2193
-	if (function_exists('balise_ENV')) {
2194
-		return balise_ENV($p, '$Pile["vars"]??[]');
2195
-	} else {
2196
-		return balise_ENV_dist($p, '$Pile["vars"]??[]');
2197
-	}
2192
+    $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance
2193
+    if (function_exists('balise_ENV')) {
2194
+        return balise_ENV($p, '$Pile["vars"]??[]');
2195
+    } else {
2196
+        return balise_ENV_dist($p, '$Pile["vars"]??[]');
2197
+    }
2198 2198
 }
2199 2199
 
2200 2200
 
@@ -2217,22 +2217,22 @@  discard block
 block discarded – undo
2217 2217
  *     Pile complétée par le code à générer
2218 2218
  **/
2219 2219
 function balise_DOUBLONS_dist($p) {
2220
-	if ($type = interprete_argument_balise(1, $p)) {
2221
-		if ($famille = interprete_argument_balise(2, $p)) {
2222
-			$type .= '.' . $famille;
2223
-		}
2224
-		$p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2225
-		if (!$p->etoile) {
2226
-			$p->code = 'array_filter(array_map("intval",explode(",",'
2227
-				. $p->code . ')))';
2228
-		}
2229
-	} else {
2230
-		$p->code = '$doublons';
2231
-	}
2220
+    if ($type = interprete_argument_balise(1, $p)) {
2221
+        if ($famille = interprete_argument_balise(2, $p)) {
2222
+            $type .= '.' . $famille;
2223
+        }
2224
+        $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2225
+        if (!$p->etoile) {
2226
+            $p->code = 'array_filter(array_map("intval",explode(",",'
2227
+                . $p->code . ')))';
2228
+        }
2229
+    } else {
2230
+        $p->code = '$doublons';
2231
+    }
2232 2232
 
2233
-	$p->interdire_scripts = false;
2233
+    $p->interdire_scripts = false;
2234 2234
 
2235
-	return $p;
2235
+    return $p;
2236 2236
 }
2237 2237
 
2238 2238
 
@@ -2255,18 +2255,18 @@  discard block
 block discarded – undo
2255 2255
  *     Pile complétée par le code à générer
2256 2256
  **/
2257 2257
 function balise_PIPELINE_dist($p) {
2258
-	$_pipe = interprete_argument_balise(1, $p);
2259
-	if (!$_pipe) {
2260
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']];
2261
-		erreur_squelette($err_b_s_a, $p);
2262
-	} else {
2263
-		$_flux = interprete_argument_balise(2, $p);
2264
-		$_flux = $_flux ?: "''";
2265
-		$p->code = "pipeline( $_pipe , $_flux )";
2266
-		$p->interdire_scripts = false;
2267
-	}
2258
+    $_pipe = interprete_argument_balise(1, $p);
2259
+    if (!$_pipe) {
2260
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']];
2261
+        erreur_squelette($err_b_s_a, $p);
2262
+    } else {
2263
+        $_flux = interprete_argument_balise(2, $p);
2264
+        $_flux = $_flux ?: "''";
2265
+        $p->code = "pipeline( $_pipe , $_flux )";
2266
+        $p->interdire_scripts = false;
2267
+    }
2268 2268
 
2269
-	return $p;
2269
+    return $p;
2270 2270
 }
2271 2271
 
2272 2272
 
@@ -2291,10 +2291,10 @@  discard block
 block discarded – undo
2291 2291
  *     Pile complétée par le code à générer
2292 2292
  **/
2293 2293
 function balise_EDIT_dist($p) {
2294
-	$p->code = "''";
2295
-	$p->interdire_scripts = false;
2294
+    $p->code = "''";
2295
+    $p->interdire_scripts = false;
2296 2296
 
2297
-	return $p;
2297
+    return $p;
2298 2298
 }
2299 2299
 
2300 2300
 
@@ -2317,11 +2317,11 @@  discard block
 block discarded – undo
2317 2317
  *     Pile complétée par le code à générer
2318 2318
  **/
2319 2319
 function balise_TOTAL_UNIQUE_dist($p) {
2320
-	$_famille = interprete_argument_balise(1, $p);
2321
-	$_famille = $_famille ?: "''";
2322
-	$p->code = "unique('', $_famille, true)";
2320
+    $_famille = interprete_argument_balise(1, $p);
2321
+    $_famille = $_famille ?: "''";
2322
+    $p->code = "unique('', $_famille, true)";
2323 2323
 
2324
-	return $p;
2324
+    return $p;
2325 2325
 }
2326 2326
 
2327 2327
 /**
@@ -2344,19 +2344,19 @@  discard block
 block discarded – undo
2344 2344
  *     Pile complétée par le code à générer
2345 2345
  **/
2346 2346
 function balise_ARRAY_dist($p) {
2347
-	$_code = [];
2348
-	$n = 1;
2349
-	do {
2350
-		$_key = interprete_argument_balise($n++, $p);
2351
-		$_val = interprete_argument_balise($n++, $p);
2352
-		if ($_key and $_val) {
2353
-			$_code[] = "$_key => $_val";
2354
-		}
2355
-	} while ($_key && $_val);
2356
-	$p->code = 'array(' . join(', ', $_code) . ')';
2357
-	$p->interdire_scripts = false;
2347
+    $_code = [];
2348
+    $n = 1;
2349
+    do {
2350
+        $_key = interprete_argument_balise($n++, $p);
2351
+        $_val = interprete_argument_balise($n++, $p);
2352
+        if ($_key and $_val) {
2353
+            $_code[] = "$_key => $_val";
2354
+        }
2355
+    } while ($_key && $_val);
2356
+    $p->code = 'array(' . join(', ', $_code) . ')';
2357
+    $p->interdire_scripts = false;
2358 2358
 
2359
-	return $p;
2359
+    return $p;
2360 2360
 }
2361 2361
 
2362 2362
 /**
@@ -2375,15 +2375,15 @@  discard block
 block discarded – undo
2375 2375
  *     Pile complétée par le code à générer
2376 2376
  */
2377 2377
 function balise_LISTE_dist($p) {
2378
-	$_code = [];
2379
-	$n = 1;
2380
-	while ($_val = interprete_argument_balise($n++, $p)) {
2381
-		$_code[] = $_val;
2382
-	}
2383
-	$p->code = 'array(' . join(', ', $_code) . ')';
2384
-	$p->interdire_scripts = false;
2378
+    $_code = [];
2379
+    $n = 1;
2380
+    while ($_val = interprete_argument_balise($n++, $p)) {
2381
+        $_code[] = $_val;
2382
+    }
2383
+    $p->code = 'array(' . join(', ', $_code) . ')';
2384
+    $p->interdire_scripts = false;
2385 2385
 
2386
-	return $p;
2386
+    return $p;
2387 2387
 }
2388 2388
 
2389 2389
 
@@ -2417,21 +2417,21 @@  discard block
 block discarded – undo
2417 2417
  *     Pile complétée par le code à générer
2418 2418
  **/
2419 2419
 function balise_AUTORISER_dist($p) {
2420
-	$_code = [];
2421
-	$p->descr['session'] = true; // faire un cache par session
2420
+    $_code = [];
2421
+    $p->descr['session'] = true; // faire un cache par session
2422 2422
 
2423
-	$n = 1;
2424
-	while ($_v = interprete_argument_balise($n++, $p)) {
2425
-		$_code[] = $_v;
2426
-	}
2423
+    $n = 1;
2424
+    while ($_v = interprete_argument_balise($n++, $p)) {
2425
+        $_code[] = $_v;
2426
+    }
2427 2427
 
2428
-	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2429
-		', ',
2430
-		$_code
2431
-	) . ')?" ":"")';
2432
-	$p->interdire_scripts = false;
2428
+    $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2429
+        ', ',
2430
+        $_code
2431
+    ) . ')?" ":"")';
2432
+    $p->interdire_scripts = false;
2433 2433
 
2434
-	return $p;
2434
+    return $p;
2435 2435
 }
2436 2436
 
2437 2437
 
@@ -2455,15 +2455,15 @@  discard block
 block discarded – undo
2455 2455
  *     Pile complétée par le code à générer
2456 2456
  **/
2457 2457
 function balise_PLUGIN_dist($p) {
2458
-	$plugin = interprete_argument_balise(1, $p);
2459
-	$plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
2460
-	$type_info = interprete_argument_balise(2, $p);
2461
-	$type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2458
+    $plugin = interprete_argument_balise(1, $p);
2459
+    $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
2460
+    $type_info = interprete_argument_balise(2, $p);
2461
+    $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2462 2462
 
2463
-	$f = chercher_filtre('info_plugin');
2464
-	$p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2463
+    $f = chercher_filtre('info_plugin');
2464
+    $p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2465 2465
 
2466
-	return $p;
2466
+    return $p;
2467 2467
 }
2468 2468
 
2469 2469
 /**
@@ -2484,9 +2484,9 @@  discard block
 block discarded – undo
2484 2484
  *     Pile complétée par le code à générer
2485 2485
  **/
2486 2486
 function balise_AIDER_dist($p) {
2487
-	$_motif = interprete_argument_balise(1, $p);
2488
-	$p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')";
2489
-	return $p;
2487
+    $_motif = interprete_argument_balise(1, $p);
2488
+    $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')";
2489
+    return $p;
2490 2490
 }
2491 2491
 
2492 2492
 /**
@@ -2512,16 +2512,16 @@  discard block
 block discarded – undo
2512 2512
  *     Pile complétée par le code à générer
2513 2513
  **/
2514 2514
 function balise_ACTION_FORMULAIRE($p) {
2515
-	if (!$_url = interprete_argument_balise(1, $p)) {
2516
-		$_url = "(\$Pile[0]['action'] ?? '')";
2517
-	}
2518
-	if (!$_form = interprete_argument_balise(2, $p)) {
2519
-		$_form = "(\$Pile[0]['form'] ?? '')";
2520
-	}
2521
-
2522
-	// envoyer le nom du formulaire que l'on traite
2523
-	// transmettre les eventuels args de la balise formulaire
2524
-	$p->code = "	'<span class=\"form-hidden\">' .
2515
+    if (!$_url = interprete_argument_balise(1, $p)) {
2516
+        $_url = "(\$Pile[0]['action'] ?? '')";
2517
+    }
2518
+    if (!$_form = interprete_argument_balise(2, $p)) {
2519
+        $_form = "(\$Pile[0]['form'] ?? '')";
2520
+    }
2521
+
2522
+    // envoyer le nom du formulaire que l'on traite
2523
+    // transmettre les eventuels args de la balise formulaire
2524
+    $p->code = "	'<span class=\"form-hidden\">' .
2525 2525
 	form_hidden($_url) .
2526 2526
 	'<input name=\'formulaire_action\' type=\'hidden\'
2527 2527
 		value=\'' . $_form . '\' />' .
@@ -2532,9 +2532,9 @@  discard block
 block discarded – undo
2532 2532
 	(\$Pile[0]['_hidden'] ?? '') .
2533 2533
 	'</span>'";
2534 2534
 
2535
-	$p->interdire_scripts = false;
2535
+    $p->interdire_scripts = false;
2536 2536
 
2537
-	return $p;
2537
+    return $p;
2538 2538
 }
2539 2539
 
2540 2540
 
@@ -2575,25 +2575,25 @@  discard block
 block discarded – undo
2575 2575
  */
2576 2576
 function balise_BOUTON_ACTION_dist($p) {
2577 2577
 
2578
-	$args = [];
2579
-	for ($k = 1; $k <= 6; $k++) {
2580
-		$_a = interprete_argument_balise($k, $p);
2581
-		if (!$_a) {
2582
-			$_a = "''";
2583
-		}
2584
-		$args[] = $_a;
2585
-	}
2586
-	// supprimer les args vides
2587
-	while (end($args) == "''" and count($args) > 2) {
2588
-		array_pop($args);
2589
-	}
2590
-	$args = implode(',', $args);
2578
+    $args = [];
2579
+    for ($k = 1; $k <= 6; $k++) {
2580
+        $_a = interprete_argument_balise($k, $p);
2581
+        if (!$_a) {
2582
+            $_a = "''";
2583
+        }
2584
+        $args[] = $_a;
2585
+    }
2586
+    // supprimer les args vides
2587
+    while (end($args) == "''" and count($args) > 2) {
2588
+        array_pop($args);
2589
+    }
2590
+    $args = implode(',', $args);
2591 2591
 
2592
-	$bouton_action = chercher_filtre('bouton_action');
2593
-	$p->code = "$bouton_action($args)";
2594
-	$p->interdire_scripts = false;
2592
+    $bouton_action = chercher_filtre('bouton_action');
2593
+    $p->code = "$bouton_action($args)";
2594
+    $p->interdire_scripts = false;
2595 2595
 
2596
-	return $p;
2596
+    return $p;
2597 2597
 }
2598 2598
 
2599 2599
 
@@ -2612,10 +2612,10 @@  discard block
 block discarded – undo
2612 2612
  *     Pile complétée par le code à générer
2613 2613
  */
2614 2614
 function balise_SLOGAN_SITE_SPIP_dist($p) {
2615
-	$p->code = "\$GLOBALS['meta']['slogan_site']";
2615
+    $p->code = "\$GLOBALS['meta']['slogan_site']";
2616 2616
 
2617
-	#$p->interdire_scripts = true;
2618
-	return $p;
2617
+    #$p->interdire_scripts = true;
2618
+    return $p;
2619 2619
 }
2620 2620
 
2621 2621
 
@@ -2639,10 +2639,10 @@  discard block
 block discarded – undo
2639 2639
  *     Pile complétée par le code à générer
2640 2640
  */
2641 2641
 function balise_HTML5_dist($p) {
2642
-	$p->code = html5_permis() ? "' '" : "''";
2643
-	$p->interdire_scripts = false;
2642
+    $p->code = html5_permis() ? "' '" : "''";
2643
+    $p->interdire_scripts = false;
2644 2644
 
2645
-	return $p;
2645
+    return $p;
2646 2646
 }
2647 2647
 
2648 2648
 
@@ -2668,58 +2668,58 @@  discard block
 block discarded – undo
2668 2668
  *     Pile complétée par le code à générer
2669 2669
  */
2670 2670
 function balise_TRI_dist($p, $liste = 'true') {
2671
-	$b = index_boucle_mere($p);
2672
-	// s'il n'y a pas de nom de boucle, on ne peut pas trier
2673
-	if ($b === '') {
2674
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
2675
-		erreur_squelette($msg, $p);
2676
-		$p->code = "''";
2671
+    $b = index_boucle_mere($p);
2672
+    // s'il n'y a pas de nom de boucle, on ne peut pas trier
2673
+    if ($b === '') {
2674
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
2675
+        erreur_squelette($msg, $p);
2676
+        $p->code = "''";
2677 2677
 
2678
-		return $p;
2679
-	}
2680
-	$boucle = $p->boucles[$b];
2678
+        return $p;
2679
+    }
2680
+    $boucle = $p->boucles[$b];
2681 2681
 
2682
-	// s'il n'y a pas de tri_champ, c'est qu'on se trouve
2683
-	// dans un boucle recursive ou qu'on a oublie le critere {tri}
2684
-	if (!isset($boucle->modificateur['tri_champ'])) {
2685
-		$msg = ['zbug_champ_hors_critere', [
2686
-			'champ' => zbug_presenter_champ($p),
2687
-			'critere' => 'tri'
2688
-		]];
2689
-		erreur_squelette($msg, $p);
2690
-		$p->code = "''";
2682
+    // s'il n'y a pas de tri_champ, c'est qu'on se trouve
2683
+    // dans un boucle recursive ou qu'on a oublie le critere {tri}
2684
+    if (!isset($boucle->modificateur['tri_champ'])) {
2685
+        $msg = ['zbug_champ_hors_critere', [
2686
+            'champ' => zbug_presenter_champ($p),
2687
+            'critere' => 'tri'
2688
+        ]];
2689
+        erreur_squelette($msg, $p);
2690
+        $p->code = "''";
2691 2691
 
2692
-		return $p;
2693
-	}
2692
+        return $p;
2693
+    }
2694 2694
 
2695
-	// Différentes infos relatives au tri présentes dans les modificateurs
2696
-	$_tri_nom = $boucle->modificateur['tri_nom'] ; // nom du paramètre définissant le tri
2697
-	$_tri_champ = $boucle->modificateur['tri_champ']; // champ actuel utilisé le tri
2698
-	$_tri_sens = $boucle->modificateur['tri_sens']; // sens de tri actuel
2699
-	$_tri_liste_sens_defaut = $boucle->modificateur['tri_liste_sens_defaut']; // sens par défaut pour chaque champ
2695
+    // Différentes infos relatives au tri présentes dans les modificateurs
2696
+    $_tri_nom = $boucle->modificateur['tri_nom'] ; // nom du paramètre définissant le tri
2697
+    $_tri_champ = $boucle->modificateur['tri_champ']; // champ actuel utilisé le tri
2698
+    $_tri_sens = $boucle->modificateur['tri_sens']; // sens de tri actuel
2699
+    $_tri_liste_sens_defaut = $boucle->modificateur['tri_liste_sens_defaut']; // sens par défaut pour chaque champ
2700 2700
 
2701
-	$_champ_ou_sens = interprete_argument_balise(1, $p);
2702
-	// si pas de champ, renvoyer le critère de tri actuel
2703
-	if (!$_champ_ou_sens) {
2704
-		$p->code = $_tri_champ;
2701
+    $_champ_ou_sens = interprete_argument_balise(1, $p);
2702
+    // si pas de champ, renvoyer le critère de tri actuel
2703
+    if (!$_champ_ou_sens) {
2704
+        $p->code = $_tri_champ;
2705 2705
 
2706
-		return $p;
2707
-	}
2708
-	// forcer la jointure si besoin, et si le champ est statique
2709
-	if (preg_match(",^'([\w.]+)'$,i", $_champ_ou_sens, $m)) {
2710
-		index_pile($b, $m[1], $p->boucles, '', null, true, false);
2711
-	}
2706
+        return $p;
2707
+    }
2708
+    // forcer la jointure si besoin, et si le champ est statique
2709
+    if (preg_match(",^'([\w.]+)'$,i", $_champ_ou_sens, $m)) {
2710
+        index_pile($b, $m[1], $p->boucles, '', null, true, false);
2711
+    }
2712 2712
 
2713
-	$_libelle = interprete_argument_balise(2, $p);
2714
-	$_libelle = $_libelle ?: $_champ_ou_sens;
2713
+    $_libelle = interprete_argument_balise(2, $p);
2714
+    $_libelle = $_libelle ?: $_champ_ou_sens;
2715 2715
 
2716
-	$_class = interprete_argument_balise(3, $p) ?? "''";
2716
+    $_class = interprete_argument_balise(3, $p) ?? "''";
2717 2717
 
2718
-	$p->code = "calculer_balise_tri($_champ_ou_sens, $_libelle, $_class, $_tri_nom, $_tri_champ, $_tri_sens, $_tri_liste_sens_defaut)";
2718
+    $p->code = "calculer_balise_tri($_champ_ou_sens, $_libelle, $_class, $_tri_nom, $_tri_champ, $_tri_sens, $_tri_liste_sens_defaut)";
2719 2719
 
2720
-	$p->interdire_scripts = false;
2720
+    $p->interdire_scripts = false;
2721 2721
 
2722
-	return $p;
2722
+    return $p;
2723 2723
 }
2724 2724
 
2725 2725
 
@@ -2740,21 +2740,21 @@  discard block
 block discarded – undo
2740 2740
  *     Pile complétée par le code à générer
2741 2741
  */
2742 2742
 function balise_SAUTER_dist($p) {
2743
-	$id_boucle = $p->id_boucle;
2743
+    $id_boucle = $p->id_boucle;
2744 2744
 
2745
-	if (empty($p->boucles[$id_boucle])) {
2746
-		$msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']];
2747
-		erreur_squelette($msg, $p);
2748
-	} else {
2749
-		$_saut = interprete_argument_balise(1, $p);
2750
-		$_compteur = "\$Numrows['$id_boucle']['compteur_boucle']";
2751
-		$_total = "(\$Numrows['$id_boucle']['total'] ?? null)";
2745
+    if (empty($p->boucles[$id_boucle])) {
2746
+        $msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']];
2747
+        erreur_squelette($msg, $p);
2748
+    } else {
2749
+        $_saut = interprete_argument_balise(1, $p);
2750
+        $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']";
2751
+        $_total = "(\$Numrows['$id_boucle']['total'] ?? null)";
2752 2752
 
2753
-		$p->code = "vide($_compteur=\$iter->skip($_saut,$_total))";
2754
-	}
2755
-	$p->interdire_scripts = false;
2753
+        $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))";
2754
+    }
2755
+    $p->interdire_scripts = false;
2756 2756
 
2757
-	return $p;
2757
+    return $p;
2758 2758
 }
2759 2759
 
2760 2760
 
@@ -2776,22 +2776,22 @@  discard block
 block discarded – undo
2776 2776
  *     Pile complétée par le code à générer
2777 2777
  */
2778 2778
 function balise_PUBLIE_dist($p) {
2779
-	if (!$_type = interprete_argument_balise(1, $p)) {
2780
-		$_type = _q($p->type_requete);
2781
-		$_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
2782
-	} else {
2783
-		$_id = interprete_argument_balise(2, $p);
2784
-	}
2779
+    if (!$_type = interprete_argument_balise(1, $p)) {
2780
+        $_type = _q($p->type_requete);
2781
+        $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
2782
+    } else {
2783
+        $_id = interprete_argument_balise(2, $p);
2784
+    }
2785 2785
 
2786
-	$connect = '';
2787
-	if (isset($p->boucles[$p->id_boucle])) {
2788
-		$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2789
-	}
2786
+    $connect = '';
2787
+    if (isset($p->boucles[$p->id_boucle])) {
2788
+        $connect = $p->boucles[$p->id_boucle]->sql_serveur;
2789
+    }
2790 2790
 
2791
-	$p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2792
-	$p->interdire_scripts = false;
2791
+    $p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2792
+    $p->interdire_scripts = false;
2793 2793
 
2794
-	return $p;
2794
+    return $p;
2795 2795
 }
2796 2796
 
2797 2797
 /**
@@ -2820,12 +2820,12 @@  discard block
 block discarded – undo
2820 2820
  *     Pile complétée par le code à générer
2821 2821
  */
2822 2822
 function balise_PRODUIRE_dist($p) {
2823
-	$balise_inclure = charger_fonction('INCLURE', 'balise');
2824
-	$p = $balise_inclure($p);
2823
+    $balise_inclure = charger_fonction('INCLURE', 'balise');
2824
+    $p = $balise_inclure($p);
2825 2825
 
2826
-	$p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code);
2826
+    $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code);
2827 2827
 
2828
-	return $p;
2828
+    return $p;
2829 2829
 }
2830 2830
 
2831 2831
 /**
@@ -2844,13 +2844,13 @@  discard block
 block discarded – undo
2844 2844
  *     Pile complétée par le code à générer
2845 2845
  */
2846 2846
 function balise_LARGEUR_ECRAN_dist($p) {
2847
-	$_class = interprete_argument_balise(1, $p);
2848
-	if (!$_class) {
2849
-		$_class = 'null';
2850
-	}
2851
-	$p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))";
2847
+    $_class = interprete_argument_balise(1, $p);
2848
+    if (!$_class) {
2849
+        $_class = 'null';
2850
+    }
2851
+    $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))";
2852 2852
 
2853
-	return $p;
2853
+    return $p;
2854 2854
 }
2855 2855
 
2856 2856
 
@@ -2866,14 +2866,14 @@  discard block
 block discarded – undo
2866 2866
  *     Pile complétée par le code à générer
2867 2867
  **/
2868 2868
 function balise_CONST_dist($p) {
2869
-	$_const = interprete_argument_balise(1, $p);
2870
-	if (!strlen($_const ?? '')) {
2871
-		$p->code = "''";
2872
-	}
2873
-	else {
2874
-		$p->code = "(defined($_const)?constant($_const):'')";
2875
-	}
2876
-	$p->interdire_scripts = false;
2877
-
2878
-	return $p;
2869
+    $_const = interprete_argument_balise(1, $p);
2870
+    if (!strlen($_const ?? '')) {
2871
+        $p->code = "''";
2872
+    }
2873
+    else {
2874
+        $p->code = "(defined($_const)?constant($_const):'')";
2875
+    }
2876
+    $p->interdire_scripts = false;
2877
+
2878
+    return $p;
2879 2879
 }
Please login to merge, or discard this patch.
ecrire/inc/autoriser.php 3 patches
Braces   +3 added lines, -6 removed lines patch added patch discarded remove patch
@@ -267,8 +267,7 @@  discard block
 block discarded – undo
267 267
 		if ($id === '*') {
268 268
 			unset($GLOBALS['autoriser_exception'][$faire][$type]);
269 269
 			unset($autorisation[$faire][$type]);
270
-		}
271
-		else {
270
+		} else {
272 271
 			unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
273 272
 			unset($autorisation[$faire][$type][$id]);
274 273
 		}
@@ -652,8 +651,7 @@  discard block
 block discarded – undo
652 651
 function autoriser_rubrique_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
653 652
 	if (!empty($opt['id_parent'])) {
654 653
 		return autoriser('creerrubriquedans', 'rubrique', $opt['id_parent'], $qui);
655
-	}
656
-	else {
654
+	} else {
657 655
 		return autoriser('defaut', null, 0, $qui, $opt);
658 656
 	}
659 657
 }
@@ -814,8 +812,7 @@  discard block
 block discarded – undo
814 812
 	if (!empty($opt['id_parent'])) {
815 813
 		// creerarticledans rappelle autoriser(creer,article) sans id, donc on verifiera condition du else aussi
816 814
 		return autoriser('creerarticledans', 'rubrique', $opt['id_parent'], $qui);
817
-	}
818
-	else {
815
+	} else {
819 816
 		return (sql_countsel('spip_rubriques') > 0 and in_array($qui['statut'], ['0minirezo', '1comite']));
820 817
 	}
821 818
 }
Please login to merge, or discard this patch.
Spacing   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
 // mais apres la fonction autoriser()
121 121
 if ($f = find_in_path('mes_fonctions.php')) {
122 122
 	global $dossier_squelettes;
123
-	include_once(_ROOT_CWD . $f);
123
+	include_once(_ROOT_CWD.$f);
124 124
 }
125 125
 
126 126
 
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
 		$qui = $GLOBALS['visiteur_session'] ?: [];
163 163
 		$qui = array_merge(['statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'], $qui);
164 164
 	} elseif (is_numeric($qui)) {
165
-		$qui = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . $qui);
165
+		$qui = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.$qui);
166 166
 		if (!$qui) {
167 167
 			return false;
168 168
 		}
@@ -175,8 +175,8 @@  discard block
 block discarded – undo
175 175
 	}
176 176
 
177 177
 	spip_log(
178
-		"autoriser $faire $type $id (" . ($qui['nom'] ?? '') . ') ?',
179
-		'autoriser' . _LOG_DEBUG
178
+		"autoriser $faire $type $id (".($qui['nom'] ?? '').') ?',
179
+		'autoriser'._LOG_DEBUG
180 180
 	);
181 181
 
182 182
 	// passer par objet_type pour avoir les alias
@@ -192,7 +192,7 @@  discard block
 block discarded – undo
192 192
 		(isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) and autoriser_exception($faire, $type, $id, 'verifier'))
193 193
 		or (isset($GLOBALS['autoriser_exception'][$faire][$type]['*']) and autoriser_exception($faire, $type, '*', 'verifier'))
194 194
 	) {
195
-		spip_log("autoriser ($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : OK Exception', 'autoriser' . _LOG_DEBUG);
195
+		spip_log("autoriser ($faire, $type, $id, ".($qui['nom'] ?? '').') : OK Exception', 'autoriser'._LOG_DEBUG);
196 196
 		return true;
197 197
 	}
198 198
 
@@ -201,18 +201,18 @@  discard block
 block discarded – undo
201 201
 	// autoriser_faire[_dist], autoriser_defaut[_dist]
202 202
 	$fonctions = $type
203 203
 		? [
204
-			'autoriser_' . $type . '_' . $faire,
205
-			'autoriser_' . $type . '_' . $faire . '_dist',
206
-			'autoriser_' . $type,
207
-			'autoriser_' . $type . '_dist',
208
-			'autoriser_' . $faire,
209
-			'autoriser_' . $faire . '_dist',
204
+			'autoriser_'.$type.'_'.$faire,
205
+			'autoriser_'.$type.'_'.$faire.'_dist',
206
+			'autoriser_'.$type,
207
+			'autoriser_'.$type.'_dist',
208
+			'autoriser_'.$faire,
209
+			'autoriser_'.$faire.'_dist',
210 210
 			'autoriser_defaut',
211 211
 			'autoriser_defaut_dist'
212 212
 		]
213 213
 		: [
214
-			'autoriser_' . $faire,
215
-			'autoriser_' . $faire . '_dist',
214
+			'autoriser_'.$faire,
215
+			'autoriser_'.$faire.'_dist',
216 216
 			'autoriser_defaut',
217 217
 			'autoriser_defaut_dist'
218 218
 		];
@@ -225,8 +225,8 @@  discard block
 block discarded – undo
225 225
 	}
226 226
 
227 227
 	spip_log(
228
-		"$f($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : ' . ($a ? 'OK' : 'niet'),
229
-		'autoriser' . _LOG_DEBUG
228
+		"$f($faire, $type, $id, ".($qui['nom'] ?? '').') : '.($a ? 'OK' : 'niet'),
229
+		'autoriser'._LOG_DEBUG
230 230
 	);
231 231
 
232 232
 	return $a;
@@ -375,7 +375,7 @@  discard block
 block discarded – undo
375 375
 function autoriser_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
376 376
 
377 377
 	// Le visiteur a-t-il un statut prevu par la config ?
378
-	if (strpos($GLOBALS['meta']['preview'], ',' . $qui['statut'] . ',') !== false) {
378
+	if (strpos($GLOBALS['meta']['preview'], ','.$qui['statut'].',') !== false) {
379 379
 		return test_previsualiser_objet_champ($type, $id, $qui, $opt);
380 380
 	}
381 381
 
@@ -433,7 +433,7 @@  discard block
 block discarded – undo
433 433
 				} // pas de champ passe a la demande => NIET
434 434
 				$previsu = explode(',', $c['previsu']);
435 435
 				// regarder si ce statut est autorise pour l'auteur
436
-				if (in_array($opt[$champ] . '/auteur', $previsu)) {
436
+				if (in_array($opt[$champ].'/auteur', $previsu)) {
437 437
 					// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
438 438
 					// sinon l’auteur en session
439 439
 					include_spip('inc/securiser_action');
@@ -447,12 +447,12 @@  discard block
 block discarded – undo
447 447
 
448 448
 					if (!$id_auteur) {
449 449
 						return false;
450
-					} elseif (autoriser('previsualiser' . $opt[$champ], $type, 0, $id_auteur)) {
450
+					} elseif (autoriser('previsualiser'.$opt[$champ], $type, 0, $id_auteur)) {
451 451
 						// dans ce cas (admin en general), pas de filtrage sur ce statut
452 452
 					} elseif (
453 453
 						!sql_countsel(
454 454
 							'spip_auteurs_liens',
455
-							'id_auteur=' . intval($id_auteur) . ' AND objet=' . sql_quote($type) . ' AND id_objet=' . intval($id)
455
+							'id_auteur='.intval($id_auteur).' AND objet='.sql_quote($type).' AND id_objet='.intval($id)
456 456
 						)
457 457
 					) {
458 458
 						return false;
@@ -497,16 +497,16 @@  discard block
 block discarded – undo
497 497
 			// multilinguisme par secteur et objet rattaché à une rubrique
498 498
 			$primary = id_table_objet($type);
499 499
 			if ($table != 'spip_rubriques') {
500
-				$id_rubrique = sql_getfetsel('id_rubrique', "$table", "$primary=" . intval($id));
500
+				$id_rubrique = sql_getfetsel('id_rubrique', "$table", "$primary=".intval($id));
501 501
 			} else {
502 502
 				$id_rubrique = $id;
503 503
 			}
504
-			$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
504
+			$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
505 505
 			if (!$id_secteur > 0) {
506 506
 				$id_secteur = $id_rubrique;
507 507
 			}
508
-			$langue_secteur = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_secteur));
509
-			$langue_objet = sql_getfetsel('lang', "$table", "$primary=" . intval($id));
508
+			$langue_secteur = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique='.intval($id_secteur));
509
+			$langue_objet = sql_getfetsel('lang', "$table", "$primary=".intval($id));
510 510
 			if ($langue_secteur != $langue_objet) {
511 511
 				// configuration incohérente, on laisse l'utilisateur corriger la situation
512 512
 				return true;
@@ -514,7 +514,7 @@  discard block
 block discarded – undo
514 514
 			if ($table != 'spip_rubriques') { // le choix de la langue se fait seulement sur les rubriques
515 515
 				return false;
516 516
 			} else {
517
-				$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id));
517
+				$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id));
518 518
 				if ($id_parent != 0) {
519 519
 					// sous-rubriques : pas de choix de langue
520 520
 					return false;
@@ -566,7 +566,7 @@  discard block
 block discarded – undo
566 566
 
567 567
 	if (!isset($opt['statut'])) {
568 568
 		if (isset($desc['field']['statut'])) {
569
-			$statut = sql_getfetsel('statut', $desc['table'], id_table_objet($type) . '=' . intval($id));
569
+			$statut = sql_getfetsel('statut', $desc['table'], id_table_objet($type).'='.intval($id));
570 570
 		} else {
571 571
 			$statut = 'publie';
572 572
 		} // pas de statut => publie
@@ -740,11 +740,11 @@  discard block
 block discarded – undo
740 740
 		return false;
741 741
 	}
742 742
 
743
-	if (sql_countsel('spip_rubriques', 'id_parent=' . intval($id))) {
743
+	if (sql_countsel('spip_rubriques', 'id_parent='.intval($id))) {
744 744
 		return false;
745 745
 	}
746 746
 
747
-	if (sql_countsel('spip_articles', 'id_rubrique=' . intval($id) . " AND (statut<>'poubelle')")) {
747
+	if (sql_countsel('spip_articles', 'id_rubrique='.intval($id)." AND (statut<>'poubelle')")) {
748 748
 		return false;
749 749
 	}
750 750
 
@@ -781,7 +781,7 @@  discard block
 block discarded – undo
781 781
 	if (!$id) {
782 782
 		return false;
783 783
 	}
784
-	$r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article=' . sql_quote($id));
784
+	$r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article='.sql_quote($id));
785 785
 
786 786
 	return
787 787
 		$r
@@ -792,7 +792,7 @@  discard block
 block discarded – undo
792 792
 				(!isset($opt['statut']) or !in_array($opt['statut'], ['publie', 'refuse'], true))
793 793
 				and in_array($qui['statut'], ['0minirezo', '1comite'])
794 794
 				and in_array($r['statut'], ['prop', 'prepa', 'poubelle'])
795
-				and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur'])
795
+				and auteurs_objet('article', $id, 'id_auteur='.$qui['id_auteur'])
796 796
 			)
797 797
 		);
798 798
 }
@@ -850,7 +850,7 @@  discard block
 block discarded – undo
850 850
 		if (!$id) {
851 851
 			return false;
852 852
 		}
853
-		$statut = sql_getfetsel('statut', 'spip_articles', 'id_article=' . intval($id));
853
+		$statut = sql_getfetsel('statut', 'spip_articles', 'id_article='.intval($id));
854 854
 	}
855 855
 
856 856
 	return
@@ -861,7 +861,7 @@  discard block
 block discarded – undo
861 861
 		or
862 862
 		($id
863 863
 			and $qui['id_auteur']
864
-			and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']));
864
+			and auteurs_objet('article', $id, 'id_auteur='.$qui['id_auteur']));
865 865
 }
866 866
 
867 867
 
@@ -882,8 +882,8 @@  discard block
 block discarded – undo
882 882
 function autoriser_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
883 883
 	# securite, mais on aurait pas du arriver ici !
884 884
 	if (
885
-		function_exists($f = 'autoriser_' . $type . '_voir')
886
-		or function_exists($f = 'autoriser_' . $type . '_voir_dist')
885
+		function_exists($f = 'autoriser_'.$type.'_voir')
886
+		or function_exists($f = 'autoriser_'.$type.'_voir_dist')
887 887
 	) {
888 888
 		return $f($faire, $type, $id, $qui, $opt);
889 889
 	}
@@ -1014,7 +1014,7 @@  discard block
 block discarded – undo
1014 1014
 	$n = sql_fetsel(
1015 1015
 		'A.id_article',
1016 1016
 		'spip_auteurs_liens AS L LEFT JOIN spip_articles AS A ON (L.objet=\'article\' AND L.id_objet=A.id_article)',
1017
-		"A.statut='publie' AND L.id_auteur=" . sql_quote($id)
1017
+		"A.statut='publie' AND L.id_auteur=".sql_quote($id)
1018 1018
 	);
1019 1019
 
1020 1020
 	return $n ? true : false;
@@ -1226,7 +1226,7 @@  discard block
 block discarded – undo
1226 1226
 		and $r = sql_allfetsel(
1227 1227
 			'id_objet',
1228 1228
 			'spip_auteurs_liens',
1229
-			'id_auteur=' . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0"
1229
+			'id_auteur='.intval($id_auteur)." AND objet='rubrique' AND id_objet!=0"
1230 1230
 		)
1231 1231
 		and is_countable($r) ? count($r) : 0
1232 1232
 	) {
@@ -1911,8 +1911,8 @@  discard block
 block discarded – undo
1911 1911
 function auteurs_objet($objet, $id_objet, $cond = '') {
1912 1912
 	$objet = objet_type($objet);
1913 1913
 	$where = [
1914
-		'objet=' . sql_quote($objet),
1915
-		'id_objet=' . intval($id_objet)
1914
+		'objet='.sql_quote($objet),
1915
+		'id_objet='.intval($id_objet)
1916 1916
 	];
1917 1917
 	if (!empty($cond)) {
1918 1918
 		if (is_array($cond)) {
@@ -1947,7 +1947,7 @@  discard block
 block discarded – undo
1947 1947
 	return sql_allfetsel(
1948 1948
 		'id_auteur',
1949 1949
 		'spip_auteurs_liens',
1950
-		"objet='article' AND id_objet=" . intval($id_article) . ($cond ? " AND $cond" : '')
1950
+		"objet='article' AND id_objet=".intval($id_article).($cond ? " AND $cond" : '')
1951 1951
 	);
1952 1952
 }
1953 1953
 
Please login to merge, or discard this patch.
Indentation   +683 added lines, -683 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Autorisations
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('base/abstract_sql');
@@ -38,89 +38,89 @@  discard block
 block discarded – undo
38 38
 
39 39
 
40 40
 if (!function_exists('autoriser')) {
41
-	/**
42
-	 * Autoriser une action
43
-	 *
44
-	 * Teste si une personne (par défaut le visiteur en cours) peut effectuer
45
-	 * une certaine action. Cette fonction est le point d'entrée de toutes
46
-	 * les autorisations.
47
-	 *
48
-	 * La fonction se charge d'appeler des fonctions d'autorisations spécifiques
49
-	 * aux actions demandées si elles existent. Elle cherche donc les fonctions
50
-	 * dans cet ordre :
51
-	 *
52
-	 * - autoriser_{type}_{faire}, sinon avec _dist
53
-	 * - autoriser_{type}, sinon avec _dist
54
-	 * - autoriser_{faire}, sinon avec _dist
55
-	 * - autoriser_{defaut}, sinon avec _dist
56
-	 *
57
-	 * Seul le premier argument est obligatoire.
58
-	 *
59
-	 * @note
60
-	 *     Le paramètre `$type` attend par défaut un type d'objet éditorial, et à ce titre,
61
-	 *     la valeur transmise se verra appliquer la fonction 'objet_type' pour uniformiser
62
-	 *     cette valeur.
63
-	 *
64
-	 *     Si ce paramètre n'a rien n'a voir avec un objet éditorial, par exemple
65
-	 *     'statistiques', un souligné avant le terme est ajouté afin d'indiquer
66
-	 *     explicitement à la fonction autoriser de ne pas transformer la chaîne en type
67
-	 *     d'objet. Cela donne pour cet exemple : `autoriser('detruire', '_statistiques')`
68
-	 *
69
-	 * @note
70
-	 *     Le paramètre `$type`, en plus de l'uniformisation en type d'objet, se voit retirer
71
-	 *     tous les soulignés du terme. Ainsi le type d'objet `livre_art` deviendra `livreart`
72
-	 *     et SPIP cherchera une fonction `autoriser_livreart_{faire}`. Ceci permet
73
-	 *     d'éviter une possible confusion si une fonction `autoriser_livre_art` existait :
74
-	 *     quel serait le type, quel serait l'action ?
75
-	 *
76
-	 *     Pour résumer, si le type d'objet éditorial a un souligné, tel que 'livre_art',
77
-	 *     la fonction d'autorisation correspondante ne l'aura pas.
78
-	 *     Exemple : `function autoriser_livreart_modifier_dist(...){...}`
79
-	 *
80
-	 * @api
81
-	 * @see autoriser_dist()
82
-	 * @see objet_type()
83
-	 *
84
-	 * @param string $faire
85
-	 *   une action ('modifier', 'publier'...)
86
-	 * @param string|null $type
87
-	 *   Type d’objet ou élément sur lequel appliquer l’action.
88
-	 *   - null: indifférent à tout type d’élément ou objet éditorial
89
-	 *   - string: objet éditorial (objet_type() est appliqué pour homogénéiser l’entrée)
90
-	 *   - _string: autre élément (avec un souligné en premier caractère, désactive objet_type()).
91
-	 *   Les soulignés seront retirés (cf. la note).
92
-	 * @param string|int|null $id
93
-	 *   id de l'objet ou élément sur lequel on veut agir, si pertinent.
94
-	 *   - null: non utile pour l’autorisation
95
-	 *   - int: identifiant numérique (cas de tous les objets éditoriaux de SPIP)
96
-	 *   - string: identifiant textuel
97
-	 * @param null|int|array $qui
98
-	 *   - si null on prend alors visiteur_session
99
-	 *   - un id_auteur (on regarde dans la base)
100
-	 *   - un tableau auteur complet, y compris [restreint]
101
-	 * @param array $opt
102
-	 *   options sous forme de tableau associatif
103
-	 * @return bool
104
-	 *   true si la personne peut effectuer l'action
105
-	 */
106
-	function autoriser(string $faire, ?string $type = '', $id = null, $qui = null, array $opt = []): bool {
107
-		// Charger les fonctions d'autorisation supplementaires
108
-		static $pipe;
109
-		if (!isset($pipe)) {
110
-			$pipe = 1;
111
-			pipeline('autoriser');
112
-		}
113
-
114
-		return autoriser_dist($faire, $type, $id, $qui, $opt);
115
-	}
41
+    /**
42
+     * Autoriser une action
43
+     *
44
+     * Teste si une personne (par défaut le visiteur en cours) peut effectuer
45
+     * une certaine action. Cette fonction est le point d'entrée de toutes
46
+     * les autorisations.
47
+     *
48
+     * La fonction se charge d'appeler des fonctions d'autorisations spécifiques
49
+     * aux actions demandées si elles existent. Elle cherche donc les fonctions
50
+     * dans cet ordre :
51
+     *
52
+     * - autoriser_{type}_{faire}, sinon avec _dist
53
+     * - autoriser_{type}, sinon avec _dist
54
+     * - autoriser_{faire}, sinon avec _dist
55
+     * - autoriser_{defaut}, sinon avec _dist
56
+     *
57
+     * Seul le premier argument est obligatoire.
58
+     *
59
+     * @note
60
+     *     Le paramètre `$type` attend par défaut un type d'objet éditorial, et à ce titre,
61
+     *     la valeur transmise se verra appliquer la fonction 'objet_type' pour uniformiser
62
+     *     cette valeur.
63
+     *
64
+     *     Si ce paramètre n'a rien n'a voir avec un objet éditorial, par exemple
65
+     *     'statistiques', un souligné avant le terme est ajouté afin d'indiquer
66
+     *     explicitement à la fonction autoriser de ne pas transformer la chaîne en type
67
+     *     d'objet. Cela donne pour cet exemple : `autoriser('detruire', '_statistiques')`
68
+     *
69
+     * @note
70
+     *     Le paramètre `$type`, en plus de l'uniformisation en type d'objet, se voit retirer
71
+     *     tous les soulignés du terme. Ainsi le type d'objet `livre_art` deviendra `livreart`
72
+     *     et SPIP cherchera une fonction `autoriser_livreart_{faire}`. Ceci permet
73
+     *     d'éviter une possible confusion si une fonction `autoriser_livre_art` existait :
74
+     *     quel serait le type, quel serait l'action ?
75
+     *
76
+     *     Pour résumer, si le type d'objet éditorial a un souligné, tel que 'livre_art',
77
+     *     la fonction d'autorisation correspondante ne l'aura pas.
78
+     *     Exemple : `function autoriser_livreart_modifier_dist(...){...}`
79
+     *
80
+     * @api
81
+     * @see autoriser_dist()
82
+     * @see objet_type()
83
+     *
84
+     * @param string $faire
85
+     *   une action ('modifier', 'publier'...)
86
+     * @param string|null $type
87
+     *   Type d’objet ou élément sur lequel appliquer l’action.
88
+     *   - null: indifférent à tout type d’élément ou objet éditorial
89
+     *   - string: objet éditorial (objet_type() est appliqué pour homogénéiser l’entrée)
90
+     *   - _string: autre élément (avec un souligné en premier caractère, désactive objet_type()).
91
+     *   Les soulignés seront retirés (cf. la note).
92
+     * @param string|int|null $id
93
+     *   id de l'objet ou élément sur lequel on veut agir, si pertinent.
94
+     *   - null: non utile pour l’autorisation
95
+     *   - int: identifiant numérique (cas de tous les objets éditoriaux de SPIP)
96
+     *   - string: identifiant textuel
97
+     * @param null|int|array $qui
98
+     *   - si null on prend alors visiteur_session
99
+     *   - un id_auteur (on regarde dans la base)
100
+     *   - un tableau auteur complet, y compris [restreint]
101
+     * @param array $opt
102
+     *   options sous forme de tableau associatif
103
+     * @return bool
104
+     *   true si la personne peut effectuer l'action
105
+     */
106
+    function autoriser(string $faire, ?string $type = '', $id = null, $qui = null, array $opt = []): bool {
107
+        // Charger les fonctions d'autorisation supplementaires
108
+        static $pipe;
109
+        if (!isset($pipe)) {
110
+            $pipe = 1;
111
+            pipeline('autoriser');
112
+        }
113
+
114
+        return autoriser_dist($faire, $type, $id, $qui, $opt);
115
+    }
116 116
 }
117 117
 
118 118
 
119 119
 // mes_fonctions peut aussi declarer des autorisations, il faut donc le charger
120 120
 // mais apres la fonction autoriser()
121 121
 if ($f = find_in_path('mes_fonctions.php')) {
122
-	global $dossier_squelettes;
123
-	include_once(_ROOT_CWD . $f);
122
+    global $dossier_squelettes;
123
+    include_once(_ROOT_CWD . $f);
124 124
 }
125 125
 
126 126
 
@@ -151,85 +151,85 @@  discard block
 block discarded – undo
151 151
  */
152 152
 function autoriser_dist(string $faire, ?string $type = '', $id = null, $qui = null, array $opt = []): bool {
153 153
 
154
-	if ($type === null) {
155
-		$type = '';
156
-	}
157
-
158
-	// Qui ? visiteur_session ?
159
-	// si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
160
-	if ($qui === null or $qui === '') {
161
-		$qui = $GLOBALS['visiteur_session'] ?: [];
162
-		$qui = array_merge(['statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'], $qui);
163
-	} elseif (is_numeric($qui)) {
164
-		$qui = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . $qui);
165
-		if (!$qui) {
166
-			return false;
167
-		}
168
-	}
169
-
170
-	// Admins restreints, on construit ici (pas generique mais...)
171
-	// le tableau de toutes leurs rubriques (y compris les sous-rubriques)
172
-	if (_ADMINS_RESTREINTS and is_array($qui)) {
173
-		$qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : [];
174
-	}
175
-
176
-	spip_log(
177
-		"autoriser $faire $type $id (" . ($qui['nom'] ?? '') . ') ?',
178
-		'autoriser' . _LOG_DEBUG
179
-	);
180
-
181
-	// passer par objet_type pour avoir les alias
182
-	// sauf si _ est le premier caractère.
183
-	if ($type and $type[0] !== '_') {
184
-		$type = objet_type($type, false);
185
-	}
186
-	// et supprimer les _
187
-	$type = str_replace('_', '', (string) $type);
188
-
189
-	// Si une exception a ete decretee plus haut dans le code, l'appliquer
190
-	if (
191
-		(isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) and autoriser_exception($faire, $type, $id, 'verifier'))
192
-		or (isset($GLOBALS['autoriser_exception'][$faire][$type]['*']) and autoriser_exception($faire, $type, '*', 'verifier'))
193
-	) {
194
-		spip_log("autoriser ($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : OK Exception', 'autoriser' . _LOG_DEBUG);
195
-		return true;
196
-	}
197
-
198
-	// Chercher une fonction d'autorisation
199
-	// Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
200
-	// autoriser_faire[_dist], autoriser_defaut[_dist]
201
-	$fonctions = $type
202
-		? [
203
-			'autoriser_' . $type . '_' . $faire,
204
-			'autoriser_' . $type . '_' . $faire . '_dist',
205
-			'autoriser_' . $type,
206
-			'autoriser_' . $type . '_dist',
207
-			'autoriser_' . $faire,
208
-			'autoriser_' . $faire . '_dist',
209
-			'autoriser_defaut',
210
-			'autoriser_defaut_dist'
211
-		]
212
-		: [
213
-			'autoriser_' . $faire,
214
-			'autoriser_' . $faire . '_dist',
215
-			'autoriser_defaut',
216
-			'autoriser_defaut_dist'
217
-		];
218
-
219
-	$a = false;
220
-	foreach ($fonctions as $f) {
221
-		if (function_exists($f)) {
222
-			$a = $f($faire, $type, $id, $qui, $opt);
223
-			break;
224
-		}
225
-	}
226
-
227
-	spip_log(
228
-		"$f($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : ' . ($a ? 'OK' : 'niet'),
229
-		'autoriser' . _LOG_DEBUG
230
-	);
231
-
232
-	return $a;
154
+    if ($type === null) {
155
+        $type = '';
156
+    }
157
+
158
+    // Qui ? visiteur_session ?
159
+    // si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
160
+    if ($qui === null or $qui === '') {
161
+        $qui = $GLOBALS['visiteur_session'] ?: [];
162
+        $qui = array_merge(['statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'], $qui);
163
+    } elseif (is_numeric($qui)) {
164
+        $qui = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . $qui);
165
+        if (!$qui) {
166
+            return false;
167
+        }
168
+    }
169
+
170
+    // Admins restreints, on construit ici (pas generique mais...)
171
+    // le tableau de toutes leurs rubriques (y compris les sous-rubriques)
172
+    if (_ADMINS_RESTREINTS and is_array($qui)) {
173
+        $qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : [];
174
+    }
175
+
176
+    spip_log(
177
+        "autoriser $faire $type $id (" . ($qui['nom'] ?? '') . ') ?',
178
+        'autoriser' . _LOG_DEBUG
179
+    );
180
+
181
+    // passer par objet_type pour avoir les alias
182
+    // sauf si _ est le premier caractère.
183
+    if ($type and $type[0] !== '_') {
184
+        $type = objet_type($type, false);
185
+    }
186
+    // et supprimer les _
187
+    $type = str_replace('_', '', (string) $type);
188
+
189
+    // Si une exception a ete decretee plus haut dans le code, l'appliquer
190
+    if (
191
+        (isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) and autoriser_exception($faire, $type, $id, 'verifier'))
192
+        or (isset($GLOBALS['autoriser_exception'][$faire][$type]['*']) and autoriser_exception($faire, $type, '*', 'verifier'))
193
+    ) {
194
+        spip_log("autoriser ($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : OK Exception', 'autoriser' . _LOG_DEBUG);
195
+        return true;
196
+    }
197
+
198
+    // Chercher une fonction d'autorisation
199
+    // Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
200
+    // autoriser_faire[_dist], autoriser_defaut[_dist]
201
+    $fonctions = $type
202
+        ? [
203
+            'autoriser_' . $type . '_' . $faire,
204
+            'autoriser_' . $type . '_' . $faire . '_dist',
205
+            'autoriser_' . $type,
206
+            'autoriser_' . $type . '_dist',
207
+            'autoriser_' . $faire,
208
+            'autoriser_' . $faire . '_dist',
209
+            'autoriser_defaut',
210
+            'autoriser_defaut_dist'
211
+        ]
212
+        : [
213
+            'autoriser_' . $faire,
214
+            'autoriser_' . $faire . '_dist',
215
+            'autoriser_defaut',
216
+            'autoriser_defaut_dist'
217
+        ];
218
+
219
+    $a = false;
220
+    foreach ($fonctions as $f) {
221
+        if (function_exists($f)) {
222
+            $a = $f($faire, $type, $id, $qui, $opt);
223
+            break;
224
+        }
225
+    }
226
+
227
+    spip_log(
228
+        "$f($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : ' . ($a ? 'OK' : 'niet'),
229
+        'autoriser' . _LOG_DEBUG
230
+    );
231
+
232
+    return $a;
233 233
 }
234 234
 
235 235
 // une globale pour aller au plus vite dans la fonction generique ci dessus
@@ -249,33 +249,33 @@  discard block
 block discarded – undo
249 249
  * @return bool
250 250
  */
251 251
 function autoriser_exception(string $faire, ?string $type = '', $id = null, $autoriser = true): bool {
252
-	// une static innaccessible par url pour verifier que la globale est positionnee a bon escient
253
-	static $autorisation;
254
-	// Tolérance avec certains appels
255
-	if ($type === null) {
256
-		$type = '';
257
-	}
258
-	if ($id === null) {
259
-		$id = 0;
260
-	}
261
-	if ($autoriser === 'verifier') {
262
-		return isset($autorisation[$faire][$type][$id]);
263
-	}
264
-	if ($autoriser === true) {
265
-		$GLOBALS['autoriser_exception'][$faire][$type][$id] = $autorisation[$faire][$type][$id] = true;
266
-	}
267
-	if ($autoriser === false) {
268
-		if ($id === '*') {
269
-			unset($GLOBALS['autoriser_exception'][$faire][$type]);
270
-			unset($autorisation[$faire][$type]);
271
-		}
272
-		else {
273
-			unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
274
-			unset($autorisation[$faire][$type][$id]);
275
-		}
276
-	}
277
-
278
-	return false;
252
+    // une static innaccessible par url pour verifier que la globale est positionnee a bon escient
253
+    static $autorisation;
254
+    // Tolérance avec certains appels
255
+    if ($type === null) {
256
+        $type = '';
257
+    }
258
+    if ($id === null) {
259
+        $id = 0;
260
+    }
261
+    if ($autoriser === 'verifier') {
262
+        return isset($autorisation[$faire][$type][$id]);
263
+    }
264
+    if ($autoriser === true) {
265
+        $GLOBALS['autoriser_exception'][$faire][$type][$id] = $autorisation[$faire][$type][$id] = true;
266
+    }
267
+    if ($autoriser === false) {
268
+        if ($id === '*') {
269
+            unset($GLOBALS['autoriser_exception'][$faire][$type]);
270
+            unset($autorisation[$faire][$type]);
271
+        }
272
+        else {
273
+            unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
274
+            unset($autorisation[$faire][$type][$id]);
275
+        }
276
+    }
277
+
278
+    return false;
279 279
 }
280 280
 
281 281
 
@@ -294,9 +294,9 @@  discard block
 block discarded – undo
294 294
  * @return bool true s'il a le droit, false sinon
295 295
  **/
296 296
 function autoriser_defaut_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
297
-	return
298
-		$qui['statut'] === '0minirezo'
299
-		and !$qui['restreint'];
297
+    return
298
+        $qui['statut'] === '0minirezo'
299
+        and !$qui['restreint'];
300 300
 }
301 301
 
302 302
 /**
@@ -316,10 +316,10 @@  discard block
 block discarded – undo
316 316
  * @return bool true s'il a le droit, false sinon
317 317
  */
318 318
 function autoriser_loger_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
319
-	if ($qui['statut'] === '5poubelle') {
320
-		return false;
321
-	}
322
-	return true;
319
+    if ($qui['statut'] === '5poubelle') {
320
+        return false;
321
+    }
322
+    return true;
323 323
 }
324 324
 
325 325
 /**
@@ -335,7 +335,7 @@  discard block
 block discarded – undo
335 335
  * @return bool true s'il a le droit, false sinon
336 336
  **/
337 337
 function autoriser_ecrire_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
338
-	return isset($qui['statut']) and in_array($qui['statut'], ['0minirezo', '1comite']);
338
+    return isset($qui['statut']) and in_array($qui['statut'], ['0minirezo', '1comite']);
339 339
 }
340 340
 
341 341
 /**
@@ -354,7 +354,7 @@  discard block
 block discarded – undo
354 354
  * @return bool true s'il a le droit, false sinon
355 355
  **/
356 356
 function autoriser_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
357
-	return in_array($qui['statut'], ['0minirezo', '1comite']);
357
+    return in_array($qui['statut'], ['0minirezo', '1comite']);
358 358
 }
359 359
 
360 360
 /**
@@ -374,18 +374,18 @@  discard block
 block discarded – undo
374 374
  **/
375 375
 function autoriser_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
376 376
 
377
-	// Le visiteur a-t-il un statut prevu par la config ?
378
-	if (strpos($GLOBALS['meta']['preview'], ',' . $qui['statut'] . ',') !== false) {
379
-		return test_previsualiser_objet_champ($type, $id, $qui, $opt);
380
-	}
377
+    // Le visiteur a-t-il un statut prevu par la config ?
378
+    if (strpos($GLOBALS['meta']['preview'], ',' . $qui['statut'] . ',') !== false) {
379
+        return test_previsualiser_objet_champ($type, $id, $qui, $opt);
380
+    }
381 381
 
382
-	// A-t-on un token de prévisualisation valable ?
383
-	include_spip('inc/securiser_action');
384
-	if (decrire_token_previsu()) {
385
-		return true;
386
-	}
382
+    // A-t-on un token de prévisualisation valable ?
383
+    include_spip('inc/securiser_action');
384
+    if (decrire_token_previsu()) {
385
+        return true;
386
+    }
387 387
 
388
-	return false;
388
+    return false;
389 389
 }
390 390
 
391 391
 /**
@@ -414,58 +414,58 @@  discard block
 block discarded – undo
414 414
  */
415 415
 function test_previsualiser_objet_champ(string $type = '', $id = null, array $qui = [], array $opt = []): bool {
416 416
 
417
-	// si pas de type et statut fourni, c'est une autorisation generale => OK
418
-	if (!$type) {
419
-		return true;
420
-	}
421
-
422
-	include_spip('base/objets');
423
-	$infos = lister_tables_objets_sql(table_objet_sql($type));
424
-	if (isset($infos['statut'])) {
425
-		foreach ($infos['statut'] as $c) {
426
-			if (isset($c['publie'])) {
427
-				if (!isset($c['previsu'])) {
428
-					return false;
429
-				} // pas de previsu definie => NIET
430
-				$champ = $c['champ'];
431
-				if (!isset($opt[$champ])) {
432
-					return false;
433
-				} // pas de champ passe a la demande => NIET
434
-				$previsu = explode(',', $c['previsu']);
435
-				// regarder si ce statut est autorise pour l'auteur
436
-				if (in_array($opt[$champ] . '/auteur', $previsu)) {
437
-					// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
438
-					// sinon l’auteur en session
439
-					include_spip('inc/securiser_action');
440
-					if ($desc = decrire_token_previsu()) {
441
-						$id_auteur = $desc['id_auteur'];
442
-					} elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
443
-						$id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
444
-					} else {
445
-						$id_auteur = null;
446
-					}
447
-
448
-					if (!$id_auteur) {
449
-						return false;
450
-					} elseif (autoriser('previsualiser' . $opt[$champ], $type, 0, $id_auteur)) {
451
-						// dans ce cas (admin en general), pas de filtrage sur ce statut
452
-					} elseif (
453
-						!sql_countsel(
454
-							'spip_auteurs_liens',
455
-							'id_auteur=' . intval($id_auteur) . ' AND objet=' . sql_quote($type) . ' AND id_objet=' . intval($id)
456
-						)
457
-					) {
458
-						return false;
459
-					} // pas auteur de cet objet => NIET
460
-				} elseif (!in_array($opt[$champ], $previsu)) {
461
-					// le statut n'est pas dans ceux definis par la previsu => NIET
462
-					return false;
463
-				}
464
-			}
465
-		}
466
-	}
467
-
468
-	return true;
417
+    // si pas de type et statut fourni, c'est une autorisation generale => OK
418
+    if (!$type) {
419
+        return true;
420
+    }
421
+
422
+    include_spip('base/objets');
423
+    $infos = lister_tables_objets_sql(table_objet_sql($type));
424
+    if (isset($infos['statut'])) {
425
+        foreach ($infos['statut'] as $c) {
426
+            if (isset($c['publie'])) {
427
+                if (!isset($c['previsu'])) {
428
+                    return false;
429
+                } // pas de previsu definie => NIET
430
+                $champ = $c['champ'];
431
+                if (!isset($opt[$champ])) {
432
+                    return false;
433
+                } // pas de champ passe a la demande => NIET
434
+                $previsu = explode(',', $c['previsu']);
435
+                // regarder si ce statut est autorise pour l'auteur
436
+                if (in_array($opt[$champ] . '/auteur', $previsu)) {
437
+                    // retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
438
+                    // sinon l’auteur en session
439
+                    include_spip('inc/securiser_action');
440
+                    if ($desc = decrire_token_previsu()) {
441
+                        $id_auteur = $desc['id_auteur'];
442
+                    } elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
443
+                        $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
444
+                    } else {
445
+                        $id_auteur = null;
446
+                    }
447
+
448
+                    if (!$id_auteur) {
449
+                        return false;
450
+                    } elseif (autoriser('previsualiser' . $opt[$champ], $type, 0, $id_auteur)) {
451
+                        // dans ce cas (admin en general), pas de filtrage sur ce statut
452
+                    } elseif (
453
+                        !sql_countsel(
454
+                            'spip_auteurs_liens',
455
+                            'id_auteur=' . intval($id_auteur) . ' AND objet=' . sql_quote($type) . ' AND id_objet=' . intval($id)
456
+                        )
457
+                    ) {
458
+                        return false;
459
+                    } // pas auteur de cet objet => NIET
460
+                } elseif (!in_array($opt[$champ], $previsu)) {
461
+                    // le statut n'est pas dans ceux definis par la previsu => NIET
462
+                    return false;
463
+                }
464
+            }
465
+        }
466
+    }
467
+
468
+    return true;
469 469
 }
470 470
 
471 471
 /**
@@ -481,51 +481,51 @@  discard block
 block discarded – undo
481 481
  * @return bool true s'il a le droit, false sinon
482 482
  **/
483 483
 function autoriser_changerlangue_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
484
-	$multi_objets = explode(',', lire_config('multi_objets'));
485
-	$gerer_trad_objets = explode(',', lire_config('gerer_trad_objets'));
486
-	$table = table_objet_sql($type);
487
-	if (
488
-		in_array($table, $multi_objets)
489
-		or in_array($table, $gerer_trad_objets)
490
-	) { // affichage du formulaire si la configuration l'accepte
491
-		$multi_secteurs = lire_config('multi_secteurs');
492
-		$champs = objet_info($type, 'field');
493
-		if (
494
-			$multi_secteurs === 'oui'
495
-			and array_key_exists('id_rubrique', $champs)
496
-		) {
497
-			// multilinguisme par secteur et objet rattaché à une rubrique
498
-			$primary = id_table_objet($type);
499
-			if ($table != 'spip_rubriques') {
500
-				$id_rubrique = sql_getfetsel('id_rubrique', "$table", "$primary=" . intval($id));
501
-			} else {
502
-				$id_rubrique = $id;
503
-			}
504
-			$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
505
-			if (!$id_secteur > 0) {
506
-				$id_secteur = $id_rubrique;
507
-			}
508
-			$langue_secteur = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_secteur));
509
-			$langue_objet = sql_getfetsel('lang', "$table", "$primary=" . intval($id));
510
-			if ($langue_secteur != $langue_objet) {
511
-				// configuration incohérente, on laisse l'utilisateur corriger la situation
512
-				return true;
513
-			}
514
-			if ($table != 'spip_rubriques') { // le choix de la langue se fait seulement sur les rubriques
515
-				return false;
516
-			} else {
517
-				$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id));
518
-				if ($id_parent != 0) {
519
-					// sous-rubriques : pas de choix de langue
520
-					return false;
521
-				}
522
-			}
523
-		}
524
-	} else {
525
-		return false;
526
-	}
527
-
528
-	return autoriser('modifier', $type, $id, $qui, $opt);
484
+    $multi_objets = explode(',', lire_config('multi_objets'));
485
+    $gerer_trad_objets = explode(',', lire_config('gerer_trad_objets'));
486
+    $table = table_objet_sql($type);
487
+    if (
488
+        in_array($table, $multi_objets)
489
+        or in_array($table, $gerer_trad_objets)
490
+    ) { // affichage du formulaire si la configuration l'accepte
491
+        $multi_secteurs = lire_config('multi_secteurs');
492
+        $champs = objet_info($type, 'field');
493
+        if (
494
+            $multi_secteurs === 'oui'
495
+            and array_key_exists('id_rubrique', $champs)
496
+        ) {
497
+            // multilinguisme par secteur et objet rattaché à une rubrique
498
+            $primary = id_table_objet($type);
499
+            if ($table != 'spip_rubriques') {
500
+                $id_rubrique = sql_getfetsel('id_rubrique', "$table", "$primary=" . intval($id));
501
+            } else {
502
+                $id_rubrique = $id;
503
+            }
504
+            $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
505
+            if (!$id_secteur > 0) {
506
+                $id_secteur = $id_rubrique;
507
+            }
508
+            $langue_secteur = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_secteur));
509
+            $langue_objet = sql_getfetsel('lang', "$table", "$primary=" . intval($id));
510
+            if ($langue_secteur != $langue_objet) {
511
+                // configuration incohérente, on laisse l'utilisateur corriger la situation
512
+                return true;
513
+            }
514
+            if ($table != 'spip_rubriques') { // le choix de la langue se fait seulement sur les rubriques
515
+                return false;
516
+            } else {
517
+                $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id));
518
+                if ($id_parent != 0) {
519
+                    // sous-rubriques : pas de choix de langue
520
+                    return false;
521
+                }
522
+            }
523
+        }
524
+    } else {
525
+        return false;
526
+    }
527
+
528
+    return autoriser('modifier', $type, $id, $qui, $opt);
529 529
 }
530 530
 
531 531
 /**
@@ -541,7 +541,7 @@  discard block
 block discarded – undo
541 541
  * @return bool true s'il a le droit, false sinon
542 542
  **/
543 543
 function autoriser_changertraduction_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
544
-	return autoriser('modifier', $type, $id, $qui, $opt);
544
+    return autoriser('modifier', $type, $id, $qui, $opt);
545 545
 }
546 546
 
547 547
 /**
@@ -557,41 +557,41 @@  discard block
 block discarded – undo
557 557
  * @return bool true s'il a le droit, false sinon
558 558
  **/
559 559
 function autoriser_dater_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
560
-	$table = table_objet($type);
561
-	$trouver_table = charger_fonction('trouver_table', 'base');
562
-	$desc = $trouver_table($table);
563
-	if (!$desc) {
564
-		return false;
565
-	}
566
-
567
-	if (!isset($opt['statut'])) {
568
-		if (isset($desc['field']['statut'])) {
569
-			$statut = sql_getfetsel('statut', $desc['table'], id_table_objet($type) . '=' . intval($id));
570
-		} else {
571
-			$statut = 'publie';
572
-		} // pas de statut => publie
573
-	} else {
574
-		$statut = $opt['statut'];
575
-	}
576
-
577
-	// Liste des statuts publiés pour cet objet
578
-	if (isset($desc['statut'][0]['publie'])) {
579
-		$statuts_publies = explode(',', $desc['statut'][0]['publie']);
580
-	}
581
-	// Sinon en dur le statut "publie"
582
-	else {
583
-		$statuts_publies = ['publie'];
584
-	}
585
-
586
-	if (
587
-		in_array($statut, $statuts_publies)
588
-		// Ou cas particulier géré en dur ici pour les articles
589
-		or ($statut === 'prop' and $type === 'article' and $GLOBALS['meta']['post_dates'] === 'non')
590
-	) {
591
-		return autoriser('modifier', $type, $id);
592
-	}
593
-
594
-	return false;
560
+    $table = table_objet($type);
561
+    $trouver_table = charger_fonction('trouver_table', 'base');
562
+    $desc = $trouver_table($table);
563
+    if (!$desc) {
564
+        return false;
565
+    }
566
+
567
+    if (!isset($opt['statut'])) {
568
+        if (isset($desc['field']['statut'])) {
569
+            $statut = sql_getfetsel('statut', $desc['table'], id_table_objet($type) . '=' . intval($id));
570
+        } else {
571
+            $statut = 'publie';
572
+        } // pas de statut => publie
573
+    } else {
574
+        $statut = $opt['statut'];
575
+    }
576
+
577
+    // Liste des statuts publiés pour cet objet
578
+    if (isset($desc['statut'][0]['publie'])) {
579
+        $statuts_publies = explode(',', $desc['statut'][0]['publie']);
580
+    }
581
+    // Sinon en dur le statut "publie"
582
+    else {
583
+        $statuts_publies = ['publie'];
584
+    }
585
+
586
+    if (
587
+        in_array($statut, $statuts_publies)
588
+        // Ou cas particulier géré en dur ici pour les articles
589
+        or ($statut === 'prop' and $type === 'article' and $GLOBALS['meta']['post_dates'] === 'non')
590
+    ) {
591
+        return autoriser('modifier', $type, $id);
592
+    }
593
+
594
+    return false;
595 595
 }
596 596
 
597 597
 /**
@@ -610,7 +610,7 @@  discard block
 block discarded – undo
610 610
  * @return bool true s'il a le droit, false sinon
611 611
  **/
612 612
 function autoriser_instituer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
613
-	return autoriser('modifier', $type, $id, $qui, $opt);
613
+    return autoriser('modifier', $type, $id, $qui, $opt);
614 614
 }
615 615
 
616 616
 /**
@@ -628,12 +628,12 @@  discard block
 block discarded – undo
628 628
  * @return bool true s'il a le droit, false sinon
629 629
  **/
630 630
 function autoriser_rubrique_publierdans_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
631
-	return
632
-		($qui['statut'] === '0minirezo')
633
-		and (
634
-			!$qui['restreint'] or !$id
635
-			or in_array($id, $qui['restreint'])
636
-		);
631
+    return
632
+        ($qui['statut'] === '0minirezo')
633
+        and (
634
+            !$qui['restreint'] or !$id
635
+            or in_array($id, $qui['restreint'])
636
+        );
637 637
 }
638 638
 
639 639
 /**
@@ -651,12 +651,12 @@  discard block
 block discarded – undo
651 651
  * @return bool true s'il a le droit, false sinon
652 652
  **/
653 653
 function autoriser_rubrique_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
654
-	if (!empty($opt['id_parent'])) {
655
-		return autoriser('creerrubriquedans', 'rubrique', $opt['id_parent'], $qui);
656
-	}
657
-	else {
658
-		return autoriser('defaut', null, 0, $qui, $opt);
659
-	}
654
+    if (!empty($opt['id_parent'])) {
655
+        return autoriser('creerrubriquedans', 'rubrique', $opt['id_parent'], $qui);
656
+    }
657
+    else {
658
+        return autoriser('defaut', null, 0, $qui, $opt);
659
+    }
660 660
 }
661 661
 
662 662
 /**
@@ -674,10 +674,10 @@  discard block
 block discarded – undo
674 674
  * @return bool true s'il a le droit, false sinon
675 675
  **/
676 676
 function autoriser_rubrique_creerrubriquedans_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
677
-	return
678
-		($id or ($qui['statut'] === '0minirezo' and !$qui['restreint']))
679
-		and autoriser('voir', 'rubrique', $id)
680
-		and autoriser('publierdans', 'rubrique', $id);
677
+    return
678
+        ($id or ($qui['statut'] === '0minirezo' and !$qui['restreint']))
679
+        and autoriser('voir', 'rubrique', $id)
680
+        and autoriser('publierdans', 'rubrique', $id);
681 681
 }
682 682
 
683 683
 /**
@@ -695,10 +695,10 @@  discard block
 block discarded – undo
695 695
  * @return bool true s'il a le droit, false sinon
696 696
  **/
697 697
 function autoriser_rubrique_creerarticledans_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
698
-	return
699
-		$id
700
-		and autoriser('voir', 'rubrique', $id)
701
-		and autoriser('creer', 'article');
698
+    return
699
+        $id
700
+        and autoriser('voir', 'rubrique', $id)
701
+        and autoriser('creer', 'article');
702 702
 }
703 703
 
704 704
 
@@ -717,8 +717,8 @@  discard block
 block discarded – undo
717 717
  * @return bool true s'il a le droit, false sinon
718 718
  **/
719 719
 function autoriser_rubrique_modifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
720
-	return
721
-		autoriser('publierdans', 'rubrique', $id, $qui, $opt);
720
+    return
721
+        autoriser('publierdans', 'rubrique', $id, $qui, $opt);
722 722
 }
723 723
 
724 724
 /**
@@ -736,29 +736,29 @@  discard block
 block discarded – undo
736 736
  * @return bool true s'il a le droit, false sinon
737 737
  **/
738 738
 function autoriser_rubrique_supprimer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
739
-	if (!$id = intval($id)) {
740
-		return false;
741
-	}
739
+    if (!$id = intval($id)) {
740
+        return false;
741
+    }
742 742
 
743
-	if (sql_countsel('spip_rubriques', 'id_parent=' . intval($id))) {
744
-		return false;
745
-	}
743
+    if (sql_countsel('spip_rubriques', 'id_parent=' . intval($id))) {
744
+        return false;
745
+    }
746 746
 
747
-	if (sql_countsel('spip_articles', 'id_rubrique=' . intval($id) . " AND (statut<>'poubelle')")) {
748
-		return false;
749
-	}
747
+    if (sql_countsel('spip_articles', 'id_rubrique=' . intval($id) . " AND (statut<>'poubelle')")) {
748
+        return false;
749
+    }
750 750
 
751
-	$compte = pipeline(
752
-		'objet_compte_enfants',
753
-		['args' => ['objet' => 'rubrique', 'id_objet' => $id], 'data' => []]
754
-	);
755
-	foreach ($compte as $objet => $n) {
756
-		if ($n) {
757
-			return false;
758
-		}
759
-	}
751
+    $compte = pipeline(
752
+        'objet_compte_enfants',
753
+        ['args' => ['objet' => 'rubrique', 'id_objet' => $id], 'data' => []]
754
+    );
755
+    foreach ($compte as $objet => $n) {
756
+        if ($n) {
757
+            return false;
758
+        }
759
+    }
760 760
 
761
-	return autoriser('modifier', 'rubrique', $id);
761
+    return autoriser('modifier', 'rubrique', $id);
762 762
 }
763 763
 
764 764
 
@@ -778,23 +778,23 @@  discard block
 block discarded – undo
778 778
  * @return bool true s'il a le droit, false sinon
779 779
  **/
780 780
 function autoriser_article_modifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
781
-	if (!$id) {
782
-		return false;
783
-	}
784
-	$r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article=' . sql_quote($id));
785
-
786
-	return
787
-		$r
788
-		and
789
-		(
790
-			autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
791
-			or (
792
-				(!isset($opt['statut']) or !in_array($opt['statut'], ['publie', 'refuse'], true))
793
-				and in_array($qui['statut'], ['0minirezo', '1comite'])
794
-				and in_array($r['statut'], ['prop', 'prepa', 'poubelle'])
795
-				and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur'])
796
-			)
797
-		);
781
+    if (!$id) {
782
+        return false;
783
+    }
784
+    $r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article=' . sql_quote($id));
785
+
786
+    return
787
+        $r
788
+        and
789
+        (
790
+            autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
791
+            or (
792
+                (!isset($opt['statut']) or !in_array($opt['statut'], ['publie', 'refuse'], true))
793
+                and in_array($qui['statut'], ['0minirezo', '1comite'])
794
+                and in_array($r['statut'], ['prop', 'prepa', 'poubelle'])
795
+                and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur'])
796
+            )
797
+        );
798 798
 }
799 799
 
800 800
 /**
@@ -812,13 +812,13 @@  discard block
 block discarded – undo
812 812
  * @return bool true s'il a le droit, false sinon
813 813
  **/
814 814
 function autoriser_article_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
815
-	if (!empty($opt['id_parent'])) {
816
-		// creerarticledans rappelle autoriser(creer,article) sans id, donc on verifiera condition du else aussi
817
-		return autoriser('creerarticledans', 'rubrique', $opt['id_parent'], $qui);
818
-	}
819
-	else {
820
-		return (sql_countsel('spip_rubriques') > 0 and in_array($qui['statut'], ['0minirezo', '1comite']));
821
-	}
815
+    if (!empty($opt['id_parent'])) {
816
+        // creerarticledans rappelle autoriser(creer,article) sans id, donc on verifiera condition du else aussi
817
+        return autoriser('creerarticledans', 'rubrique', $opt['id_parent'], $qui);
818
+    }
819
+    else {
820
+        return (sql_countsel('spip_rubriques') > 0 and in_array($qui['statut'], ['0minirezo', '1comite']));
821
+    }
822 822
 }
823 823
 
824 824
 /**
@@ -840,28 +840,28 @@  discard block
 block discarded – undo
840 840
  * @return bool true s'il a le droit, false sinon
841 841
  */
842 842
 function autoriser_article_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
843
-	if ($qui['statut'] === '0minirezo') {
844
-		return true;
845
-	}
846
-	// cas des articles : depend du statut de l'article et de l'auteur
847
-	if (isset($opt['statut'])) {
848
-		$statut = $opt['statut'];
849
-	} else {
850
-		if (!$id) {
851
-			return false;
852
-		}
853
-		$statut = sql_getfetsel('statut', 'spip_articles', 'id_article=' . intval($id));
854
-	}
855
-
856
-	return
857
-		// si on est pas auteur de l'article,
858
-		// seuls les propose et publies sont visibles
859
-		in_array($statut, ['prop', 'publie'])
860
-		// sinon si on est auteur, on a le droit de le voir, evidemment !
861
-		or
862
-		($id
863
-			and $qui['id_auteur']
864
-			and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']));
843
+    if ($qui['statut'] === '0minirezo') {
844
+        return true;
845
+    }
846
+    // cas des articles : depend du statut de l'article et de l'auteur
847
+    if (isset($opt['statut'])) {
848
+        $statut = $opt['statut'];
849
+    } else {
850
+        if (!$id) {
851
+            return false;
852
+        }
853
+        $statut = sql_getfetsel('statut', 'spip_articles', 'id_article=' . intval($id));
854
+    }
855
+
856
+    return
857
+        // si on est pas auteur de l'article,
858
+        // seuls les propose et publies sont visibles
859
+        in_array($statut, ['prop', 'publie'])
860
+        // sinon si on est auteur, on a le droit de le voir, evidemment !
861
+        or
862
+        ($id
863
+            and $qui['id_auteur']
864
+            and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']));
865 865
 }
866 866
 
867 867
 
@@ -880,24 +880,24 @@  discard block
 block discarded – undo
880 880
  * @return bool true s'il a le droit, false sinon
881 881
  **/
882 882
 function autoriser_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
883
-	# securite, mais on aurait pas du arriver ici !
884
-	if (
885
-		function_exists($f = 'autoriser_' . $type . '_voir')
886
-		or function_exists($f = 'autoriser_' . $type . '_voir_dist')
887
-	) {
888
-		return $f($faire, $type, $id, $qui, $opt);
889
-	}
883
+    # securite, mais on aurait pas du arriver ici !
884
+    if (
885
+        function_exists($f = 'autoriser_' . $type . '_voir')
886
+        or function_exists($f = 'autoriser_' . $type . '_voir_dist')
887
+    ) {
888
+        return $f($faire, $type, $id, $qui, $opt);
889
+    }
890 890
 
891
-	if ($qui['statut'] === '0minirezo') {
892
-		return true;
893
-	}
894
-	// admins et redacteurs peuvent voir un auteur
895
-	if ($type === 'auteur') {
896
-		return in_array($qui['statut'], ['0minirezo', '1comite']);
897
-	}
898
-	// sinon par defaut tout est visible
899
-	// sauf cas particuliers traites separemment (ie article)
900
-	return true;
891
+    if ($qui['statut'] === '0minirezo') {
892
+        return true;
893
+    }
894
+    // admins et redacteurs peuvent voir un auteur
895
+    if ($type === 'auteur') {
896
+        return in_array($qui['statut'], ['0minirezo', '1comite']);
897
+    }
898
+    // sinon par defaut tout est visible
899
+    // sauf cas particuliers traites separemment (ie article)
900
+    return true;
901 901
 }
902 902
 
903 903
 
@@ -920,12 +920,12 @@  discard block
 block discarded – undo
920 920
  * @return bool true s'il a le droit, false sinon
921 921
  **/
922 922
 function autoriser_webmestre_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
923
-	return
924
-		(defined('_ID_WEBMESTRES') ?
925
-			in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
926
-			: $qui['webmestre'] === 'oui')
927
-		and $qui['statut'] === '0minirezo'
928
-		and !$qui['restreint'];
923
+    return
924
+        (defined('_ID_WEBMESTRES') ?
925
+            in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
926
+            : $qui['webmestre'] === 'oui')
927
+        and $qui['statut'] === '0minirezo'
928
+        and !$qui['restreint'];
929 929
 }
930 930
 
931 931
 /**
@@ -943,9 +943,9 @@  discard block
 block discarded – undo
943 943
  * @return bool true s'il a le droit, false sinon
944 944
  **/
945 945
 function autoriser_configurer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
946
-	return
947
-		$qui['statut'] === '0minirezo'
948
-		and !$qui['restreint'];
946
+    return
947
+        $qui['statut'] === '0minirezo'
948
+        and !$qui['restreint'];
949 949
 }
950 950
 
951 951
 /**
@@ -963,8 +963,8 @@  discard block
 block discarded – undo
963 963
  * @return bool true s'il a le droit, false sinon
964 964
  **/
965 965
 function autoriser_sauvegarder_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
966
-	return
967
-		$qui['statut'] === '0minirezo';
966
+    return
967
+        $qui['statut'] === '0minirezo';
968 968
 }
969 969
 
970 970
 /**
@@ -982,7 +982,7 @@  discard block
 block discarded – undo
982 982
  * @return bool true s'il a le droit, false sinon
983 983
  **/
984 984
 function autoriser_detruire_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
985
-	return autoriser('webmestre', null, 0, $qui, $opt);
985
+    return autoriser('webmestre', null, 0, $qui, $opt);
986 986
 }
987 987
 
988 988
 /**
@@ -1001,23 +1001,23 @@  discard block
 block discarded – undo
1001 1001
  * @return bool true s'il a le droit, false sinon
1002 1002
  **/
1003 1003
 function autoriser_auteur_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1004
-	// les admins peuvent "previsualiser" une page auteur
1005
-	if (
1006
-		$qui['statut'] === '0minirezo'
1007
-		and !$qui['restreint']
1008
-	) {
1009
-		return true;
1010
-	} elseif ($id === 0) {
1011
-		return false;
1012
-	}
1013
-	// "Voir en ligne" si l'auteur a un article publie
1014
-	$n = sql_fetsel(
1015
-		'A.id_article',
1016
-		'spip_auteurs_liens AS L LEFT JOIN spip_articles AS A ON (L.objet=\'article\' AND L.id_objet=A.id_article)',
1017
-		"A.statut='publie' AND L.id_auteur=" . sql_quote($id)
1018
-	);
1004
+    // les admins peuvent "previsualiser" une page auteur
1005
+    if (
1006
+        $qui['statut'] === '0minirezo'
1007
+        and !$qui['restreint']
1008
+    ) {
1009
+        return true;
1010
+    } elseif ($id === 0) {
1011
+        return false;
1012
+    }
1013
+    // "Voir en ligne" si l'auteur a un article publie
1014
+    $n = sql_fetsel(
1015
+        'A.id_article',
1016
+        'spip_auteurs_liens AS L LEFT JOIN spip_articles AS A ON (L.objet=\'article\' AND L.id_objet=A.id_article)',
1017
+        "A.statut='publie' AND L.id_auteur=" . sql_quote($id)
1018
+    );
1019 1019
 
1020
-	return $n ? true : false;
1020
+    return $n ? true : false;
1021 1021
 }
1022 1022
 
1023 1023
 
@@ -1046,7 +1046,7 @@  discard block
 block discarded – undo
1046 1046
  * @return bool true s'il a le droit, false sinon
1047 1047
  **/
1048 1048
 function autoriser_auteur_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1049
-	return ($qui['statut'] === '0minirezo');
1049
+    return ($qui['statut'] === '0minirezo');
1050 1050
 }
1051 1051
 
1052 1052
 
@@ -1067,75 +1067,75 @@  discard block
 block discarded – undo
1067 1067
  * @return bool true s'il a le droit, false sinon
1068 1068
  **/
1069 1069
 function autoriser_auteur_modifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1070
-	$id = intval($id);
1071
-
1072
-	// Si pas admin : seulement le droit de modifier ses donnees perso, mais pas statut ni login
1073
-	// la modif de l'email doit etre verifiee ou notifiee si possible, mais c'est a l'interface de gerer ca
1074
-	if (!in_array($qui['statut'], ['0minirezo'])) {
1075
-		if (
1076
-			$id == $qui['id_auteur']
1077
-			&& empty($opt['statut'])
1078
-			&& empty($opt['webmestre'])
1079
-			&& empty($opt['restreintes'])
1080
-			&& empty($opt['login'])
1081
-		) {
1082
-			return true;
1083
-		}
1084
-		return false;
1085
-	}
1086
-
1087
-	// Un admin restreint peut modifier/creer un auteur non-admin mais il
1088
-	// n'a le droit ni de le promouvoir admin, ni de changer les rubriques
1089
-	if ($qui['restreint']) {
1090
-		if (isset($opt['webmestre']) and $opt['webmestre']) {
1091
-			return false;
1092
-		} elseif (
1093
-			(isset($opt['statut']) and ($opt['statut'] === '0minirezo'))
1094
-			or (isset($opt['restreintes']) and $opt['restreintes'])
1095
-		) {
1096
-			return false;
1097
-		} else {
1098
-			if ($id == $qui['id_auteur']) {
1099
-				if (isset($opt['statut']) and $opt['statut']) {
1100
-					return false;
1101
-				} else {
1102
-					return true;
1103
-				}
1104
-			} else {
1105
-				if ($id_auteur = intval($id)) {
1106
-					$t = sql_fetsel('statut', 'spip_auteurs', "id_auteur=$id_auteur");
1107
-					if ($t and $t['statut'] != '0minirezo') {
1108
-						return true;
1109
-					} else {
1110
-						return false;
1111
-					}
1112
-				} // id = 0 => creation
1113
-				else {
1114
-					return true;
1115
-				}
1116
-			}
1117
-		}
1118
-	}
1119
-
1120
-	// Un admin complet fait ce qu'il veut
1121
-	// sauf se degrader
1122
-	if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) {
1123
-		return false;
1124
-	} elseif (
1125
-		isset($opt['webmestre'])
1126
-				and $opt['webmestre']
1127
-				and (defined('_ID_WEBMESTRES')
1128
-				or !autoriser('webmestre'))
1129
-	) {
1130
-		// et toucher au statut webmestre si il ne l'est pas lui meme
1131
-		// ou si les webmestres sont fixes par constante (securite)
1132
-		return false;
1133
-	} // et modifier un webmestre si il ne l'est pas lui meme
1134
-	elseif (intval($id) and !autoriser('webmestre') and autoriser('webmestre', '', 0, $id)) {
1135
-		return false;
1136
-	} else {
1137
-		return true;
1138
-	}
1070
+    $id = intval($id);
1071
+
1072
+    // Si pas admin : seulement le droit de modifier ses donnees perso, mais pas statut ni login
1073
+    // la modif de l'email doit etre verifiee ou notifiee si possible, mais c'est a l'interface de gerer ca
1074
+    if (!in_array($qui['statut'], ['0minirezo'])) {
1075
+        if (
1076
+            $id == $qui['id_auteur']
1077
+            && empty($opt['statut'])
1078
+            && empty($opt['webmestre'])
1079
+            && empty($opt['restreintes'])
1080
+            && empty($opt['login'])
1081
+        ) {
1082
+            return true;
1083
+        }
1084
+        return false;
1085
+    }
1086
+
1087
+    // Un admin restreint peut modifier/creer un auteur non-admin mais il
1088
+    // n'a le droit ni de le promouvoir admin, ni de changer les rubriques
1089
+    if ($qui['restreint']) {
1090
+        if (isset($opt['webmestre']) and $opt['webmestre']) {
1091
+            return false;
1092
+        } elseif (
1093
+            (isset($opt['statut']) and ($opt['statut'] === '0minirezo'))
1094
+            or (isset($opt['restreintes']) and $opt['restreintes'])
1095
+        ) {
1096
+            return false;
1097
+        } else {
1098
+            if ($id == $qui['id_auteur']) {
1099
+                if (isset($opt['statut']) and $opt['statut']) {
1100
+                    return false;
1101
+                } else {
1102
+                    return true;
1103
+                }
1104
+            } else {
1105
+                if ($id_auteur = intval($id)) {
1106
+                    $t = sql_fetsel('statut', 'spip_auteurs', "id_auteur=$id_auteur");
1107
+                    if ($t and $t['statut'] != '0minirezo') {
1108
+                        return true;
1109
+                    } else {
1110
+                        return false;
1111
+                    }
1112
+                } // id = 0 => creation
1113
+                else {
1114
+                    return true;
1115
+                }
1116
+            }
1117
+        }
1118
+    }
1119
+
1120
+    // Un admin complet fait ce qu'il veut
1121
+    // sauf se degrader
1122
+    if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) {
1123
+        return false;
1124
+    } elseif (
1125
+        isset($opt['webmestre'])
1126
+                and $opt['webmestre']
1127
+                and (defined('_ID_WEBMESTRES')
1128
+                or !autoriser('webmestre'))
1129
+    ) {
1130
+        // et toucher au statut webmestre si il ne l'est pas lui meme
1131
+        // ou si les webmestres sont fixes par constante (securite)
1132
+        return false;
1133
+    } // et modifier un webmestre si il ne l'est pas lui meme
1134
+    elseif (intval($id) and !autoriser('webmestre') and autoriser('webmestre', '', 0, $id)) {
1135
+        return false;
1136
+    } else {
1137
+        return true;
1138
+    }
1139 1139
 }
1140 1140
 
1141 1141
 
@@ -1154,7 +1154,7 @@  discard block
 block discarded – undo
1154 1154
  * @return bool true s'il a le droit, false sinon
1155 1155
  **/
1156 1156
 function autoriser_associerauteurs_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1157
-	return autoriser('modifier', $type, $id, $qui, $opt);
1157
+    return autoriser('modifier', $type, $id, $qui, $opt);
1158 1158
 }
1159 1159
 
1160 1160
 
@@ -1173,7 +1173,7 @@  discard block
 block discarded – undo
1173 1173
  * @return bool true s'il a le droit, false sinon
1174 1174
  **/
1175 1175
 function autoriser_chargerftp_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1176
-	return $qui['statut'] === '0minirezo';
1176
+    return $qui['statut'] === '0minirezo';
1177 1177
 }
1178 1178
 
1179 1179
 /**
@@ -1191,7 +1191,7 @@  discard block
 block discarded – undo
1191 1191
  * @return bool true s'il a le droit, false sinon
1192 1192
  **/
1193 1193
 function autoriser_debug_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1194
-	return $qui['statut'] === '0minirezo';
1194
+    return $qui['statut'] === '0minirezo';
1195 1195
 }
1196 1196
 
1197 1197
 /**
@@ -1208,54 +1208,54 @@  discard block
 block discarded – undo
1208 1208
  * @return array          Liste des rubriques
1209 1209
  **/
1210 1210
 function liste_rubriques_auteur($id_auteur, $raz = false) {
1211
-	static $restreint = [];
1212
-
1213
-	if (!$id_auteur = intval($id_auteur)) {
1214
-		return [];
1215
-	}
1216
-	if ($raz) {
1217
-		unset($restreint[$id_auteur]);
1218
-	} elseif (isset($restreint[$id_auteur])) {
1219
-		return $restreint[$id_auteur];
1220
-	}
1221
-
1222
-	$rubriques = [];
1223
-	if (
1224
-		(!isset($GLOBALS['meta']['version_installee'])
1225
-		or $GLOBALS['meta']['version_installee'] > 16428)
1226
-		and $r = sql_allfetsel(
1227
-			'id_objet',
1228
-			'spip_auteurs_liens',
1229
-			'id_auteur=' . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0"
1230
-		)
1231
-		and is_countable($r) ? count($r) : 0
1232
-	) {
1233
-		$r = array_column($r, 'id_objet');
1234
-
1235
-		// recuperer toute la branche, au format chaine enumeration
1236
-		include_spip('inc/rubriques');
1237
-		$r = calcul_branche_in($r);
1238
-		$r = explode(',', $r);
1239
-
1240
-		// passer les rubriques en index, elimine les doublons
1241
-		$r = array_flip($r);
1242
-		// recuperer les index seuls
1243
-		$r = array_keys($r);
1244
-		// combiner pour avoir un tableau id_rubrique=>id_rubrique
1245
-		// est-ce vraiment utile ? (on preserve la forme donnee par le code precedent)
1246
-		$rubriques = array_combine($r, $r);
1247
-	}
1248
-
1249
-	// Affecter l'auteur session le cas echeant
1250
-	if (
1251
-		isset($GLOBALS['visiteur_session']['id_auteur'])
1252
-		and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
1253
-	) {
1254
-		$GLOBALS['visiteur_session']['restreint'] = $rubriques;
1255
-	}
1256
-
1257
-
1258
-	return $restreint[$id_auteur] = $rubriques;
1211
+    static $restreint = [];
1212
+
1213
+    if (!$id_auteur = intval($id_auteur)) {
1214
+        return [];
1215
+    }
1216
+    if ($raz) {
1217
+        unset($restreint[$id_auteur]);
1218
+    } elseif (isset($restreint[$id_auteur])) {
1219
+        return $restreint[$id_auteur];
1220
+    }
1221
+
1222
+    $rubriques = [];
1223
+    if (
1224
+        (!isset($GLOBALS['meta']['version_installee'])
1225
+        or $GLOBALS['meta']['version_installee'] > 16428)
1226
+        and $r = sql_allfetsel(
1227
+            'id_objet',
1228
+            'spip_auteurs_liens',
1229
+            'id_auteur=' . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0"
1230
+        )
1231
+        and is_countable($r) ? count($r) : 0
1232
+    ) {
1233
+        $r = array_column($r, 'id_objet');
1234
+
1235
+        // recuperer toute la branche, au format chaine enumeration
1236
+        include_spip('inc/rubriques');
1237
+        $r = calcul_branche_in($r);
1238
+        $r = explode(',', $r);
1239
+
1240
+        // passer les rubriques en index, elimine les doublons
1241
+        $r = array_flip($r);
1242
+        // recuperer les index seuls
1243
+        $r = array_keys($r);
1244
+        // combiner pour avoir un tableau id_rubrique=>id_rubrique
1245
+        // est-ce vraiment utile ? (on preserve la forme donnee par le code precedent)
1246
+        $rubriques = array_combine($r, $r);
1247
+    }
1248
+
1249
+    // Affecter l'auteur session le cas echeant
1250
+    if (
1251
+        isset($GLOBALS['visiteur_session']['id_auteur'])
1252
+        and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
1253
+    ) {
1254
+        $GLOBALS['visiteur_session']['restreint'] = $rubriques;
1255
+    }
1256
+
1257
+
1258
+    return $restreint[$id_auteur] = $rubriques;
1259 1259
 }
1260 1260
 
1261 1261
 /**
@@ -1273,7 +1273,7 @@  discard block
 block discarded – undo
1273 1273
  * @return bool true s'il a le droit, false sinon
1274 1274
  **/
1275 1275
 function autoriser_rubrique_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1276
-	return autoriser('previsualiser');
1276
+    return autoriser('previsualiser');
1277 1277
 }
1278 1278
 
1279 1279
 /**
@@ -1291,7 +1291,7 @@  discard block
 block discarded – undo
1291 1291
  * @return bool true s'il a le droit, false sinon
1292 1292
  **/
1293 1293
 function autoriser_rubrique_iconifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1294
-	return autoriser('publierdans', 'rubrique', $id, $qui, $opt);
1294
+    return autoriser('publierdans', 'rubrique', $id, $qui, $opt);
1295 1295
 }
1296 1296
 
1297 1297
 /**
@@ -1309,9 +1309,9 @@  discard block
 block discarded – undo
1309 1309
  * @return bool true s'il a le droit, false sinon
1310 1310
  **/
1311 1311
 function autoriser_auteur_iconifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1312
-	$id = intval($id);
1313
-	return (($id == $qui['id_auteur']) or
1314
-		(($qui['statut'] === '0minirezo') and !$qui['restreint']));
1312
+    $id = intval($id);
1313
+    return (($id == $qui['id_auteur']) or
1314
+        (($qui['statut'] === '0minirezo') and !$qui['restreint']));
1315 1315
 }
1316 1316
 
1317 1317
 /**
@@ -1329,8 +1329,8 @@  discard block
 block discarded – undo
1329 1329
  * @return bool true s'il a le droit, false sinon
1330 1330
  **/
1331 1331
 function autoriser_iconifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1332
-	// par defaut, on a le droit d'iconifier si on a le droit de modifier
1333
-	return autoriser('modifier', $type, $id, $qui, $opt);
1332
+    // par defaut, on a le droit d'iconifier si on a le droit de modifier
1333
+    return autoriser('modifier', $type, $id, $qui, $opt);
1334 1334
 }
1335 1335
 
1336 1336
 
@@ -1350,7 +1350,7 @@  discard block
 block discarded – undo
1350 1350
  * @return true
1351 1351
  **/
1352 1352
 function autoriser_ok_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1353
-	return true;
1353
+    return true;
1354 1354
 }
1355 1355
 
1356 1356
 /**
@@ -1369,7 +1369,7 @@  discard block
 block discarded – undo
1369 1369
  * @return false
1370 1370
  **/
1371 1371
 function autoriser_niet_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1372
-	return false;
1372
+    return false;
1373 1373
 }
1374 1374
 
1375 1375
 /**
@@ -1387,11 +1387,11 @@  discard block
 block discarded – undo
1387 1387
  * @return bool true s'il a le droit, false sinon
1388 1388
  **/
1389 1389
 function autoriser_base_reparer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1390
-	if (!autoriser('detruire') or _request('reinstall')) {
1391
-		return false;
1392
-	}
1390
+    if (!autoriser('detruire') or _request('reinstall')) {
1391
+        return false;
1392
+    }
1393 1393
 
1394
-	return true;
1394
+    return true;
1395 1395
 }
1396 1396
 
1397 1397
 /**
@@ -1409,7 +1409,7 @@  discard block
 block discarded – undo
1409 1409
  * @return true
1410 1410
  **/
1411 1411
 function autoriser_infosperso_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1412
-	return true;
1412
+    return true;
1413 1413
 }
1414 1414
 
1415 1415
 /**
@@ -1427,7 +1427,7 @@  discard block
 block discarded – undo
1427 1427
  * @return true
1428 1428
  **/
1429 1429
 function autoriser_langage_configurer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1430
-	return true;
1430
+    return true;
1431 1431
 }
1432 1432
 
1433 1433
 /**
@@ -1445,7 +1445,7 @@  discard block
 block discarded – undo
1445 1445
  * @return bool true s'il a le droit, false sinon
1446 1446
  **/
1447 1447
 function autoriser_configurerlangage_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1448
-	return autoriser('configurer', '_langage', $id, $qui, $opt);
1448
+    return autoriser('configurer', '_langage', $id, $qui, $opt);
1449 1449
 }
1450 1450
 
1451 1451
 /**
@@ -1463,7 +1463,7 @@  discard block
 block discarded – undo
1463 1463
  * @return true
1464 1464
  **/
1465 1465
 function autoriser_preferences_configurer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1466
-	return true;
1466
+    return true;
1467 1467
 }
1468 1468
 
1469 1469
 /**
@@ -1481,7 +1481,7 @@  discard block
 block discarded – undo
1481 1481
  * @return bool true s'il a le droit, false sinon
1482 1482
  **/
1483 1483
 function autoriser_configurerpreferences_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1484
-	return autoriser('configurer', '_preferences', $id, $qui, $opt);
1484
+    return autoriser('configurer', '_preferences', $id, $qui, $opt);
1485 1485
 }
1486 1486
 
1487 1487
 /**
@@ -1499,8 +1499,8 @@  discard block
 block discarded – undo
1499 1499
  * @return bool true s'il a le droit, false sinon
1500 1500
  **/
1501 1501
 function autoriser_menudeveloppement_menugrandeentree_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1502
-	return (isset($GLOBALS['visiteur_session']['prefs']['activer_menudev'])
1503
-		and $GLOBALS['visiteur_session']['prefs']['activer_menudev'] === 'oui');
1502
+    return (isset($GLOBALS['visiteur_session']['prefs']['activer_menudev'])
1503
+        and $GLOBALS['visiteur_session']['prefs']['activer_menudev'] === 'oui');
1504 1504
 }
1505 1505
 
1506 1506
 /**
@@ -1519,7 +1519,7 @@  discard block
 block discarded – undo
1519 1519
  * @return true
1520 1520
  **/
1521 1521
 function autoriser_menugrandeentree_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1522
-	return true;
1522
+    return true;
1523 1523
 }
1524 1524
 
1525 1525
 /**
@@ -1537,7 +1537,7 @@  discard block
 block discarded – undo
1537 1537
  * @return true
1538 1538
  **/
1539 1539
 function autoriser_auteurs_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1540
-	return true;
1540
+    return true;
1541 1541
 }
1542 1542
 
1543 1543
 /**
@@ -1555,7 +1555,7 @@  discard block
 block discarded – undo
1555 1555
  * @return bool true s'il a le droit, false sinon
1556 1556
  **/
1557 1557
 function autoriser_auteurs_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1558
-	return autoriser('voir', '_auteurs', $id, $qui, $opt);
1558
+    return autoriser('voir', '_auteurs', $id, $qui, $opt);
1559 1559
 }
1560 1560
 
1561 1561
 /**
@@ -1573,7 +1573,7 @@  discard block
 block discarded – undo
1573 1573
  * @return true
1574 1574
  **/
1575 1575
 function autoriser_articles_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1576
-	return true;
1576
+    return true;
1577 1577
 }
1578 1578
 
1579 1579
 /**
@@ -1591,7 +1591,7 @@  discard block
 block discarded – undo
1591 1591
  * @return bool true s'il a le droit, false sinon
1592 1592
  **/
1593 1593
 function autoriser_articles_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1594
-	return autoriser('voir', '_articles', $id, $qui, $opt);
1594
+    return autoriser('voir', '_articles', $id, $qui, $opt);
1595 1595
 }
1596 1596
 
1597 1597
 /**
@@ -1609,7 +1609,7 @@  discard block
 block discarded – undo
1609 1609
  * @return true
1610 1610
  **/
1611 1611
 function autoriser_rubriques_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1612
-	return true;
1612
+    return true;
1613 1613
 }
1614 1614
 
1615 1615
 /**
@@ -1627,7 +1627,7 @@  discard block
 block discarded – undo
1627 1627
  * @return bool true s'il a le droit, false sinon
1628 1628
  **/
1629 1629
 function autoriser_rubriques_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1630
-	return autoriser('voir', '_rubriques', $id, $qui, $opt);
1630
+    return autoriser('voir', '_rubriques', $id, $qui, $opt);
1631 1631
 }
1632 1632
 
1633 1633
 /**
@@ -1645,7 +1645,7 @@  discard block
 block discarded – undo
1645 1645
  * @return bool true s'il a le droit, false sinon
1646 1646
  **/
1647 1647
 function autoriser_articlecreer_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1648
-	return verifier_table_non_vide();
1648
+    return verifier_table_non_vide();
1649 1649
 }
1650 1650
 
1651 1651
 
@@ -1666,7 +1666,7 @@  discard block
 block discarded – undo
1666 1666
  * @return bool true s'il a le droit, false sinon
1667 1667
  **/
1668 1668
 function autoriser_auteurcreer_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1669
-	return autoriser('creer', 'auteur', $id, $qui, $opt);
1669
+    return autoriser('creer', 'auteur', $id, $qui, $opt);
1670 1670
 }
1671 1671
 
1672 1672
 /**
@@ -1684,13 +1684,13 @@  discard block
 block discarded – undo
1684 1684
  * @return bool true s'il a le droit, false sinon
1685 1685
  **/
1686 1686
 function autoriser_visiteurs_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1687
-	include_spip('base/abstract_sql');
1688
-	return
1689
-		$qui['statut'] === '0minirezo' and !$qui['restreint']
1690
-		and (
1691
-			$GLOBALS['meta']['accepter_visiteurs'] != 'non'
1692
-			or sql_countsel('spip_auteurs', 'statut in ("6forum", "nouveau")') > 0
1693
-		);
1687
+    include_spip('base/abstract_sql');
1688
+    return
1689
+        $qui['statut'] === '0minirezo' and !$qui['restreint']
1690
+        and (
1691
+            $GLOBALS['meta']['accepter_visiteurs'] != 'non'
1692
+            or sql_countsel('spip_auteurs', 'statut in ("6forum", "nouveau")') > 0
1693
+        );
1694 1694
 }
1695 1695
 
1696 1696
 /**
@@ -1708,7 +1708,7 @@  discard block
 block discarded – undo
1708 1708
  * @return bool true s'il a le droit, false sinon
1709 1709
  **/
1710 1710
 function autoriser_suiviedito_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1711
-	return $qui['statut'] === '0minirezo';
1711
+    return $qui['statut'] === '0minirezo';
1712 1712
 }
1713 1713
 
1714 1714
 /**
@@ -1726,7 +1726,7 @@  discard block
 block discarded – undo
1726 1726
  * @return bool true s'il a le droit, false sinon
1727 1727
  **/
1728 1728
 function autoriser_synchro_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1729
-	return $qui['statut'] === '0minirezo';
1729
+    return $qui['statut'] === '0minirezo';
1730 1730
 }
1731 1731
 
1732 1732
 /**
@@ -1744,7 +1744,7 @@  discard block
 block discarded – undo
1744 1744
  * @return bool true s'il a le droit, false sinon
1745 1745
  **/
1746 1746
 function autoriser_configurerinteractions_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1747
-	return autoriser('configurer', '_interactions', $id, $qui, $opt);
1747
+    return autoriser('configurer', '_interactions', $id, $qui, $opt);
1748 1748
 }
1749 1749
 
1750 1750
 /**
@@ -1762,7 +1762,7 @@  discard block
 block discarded – undo
1762 1762
  * @return bool true s'il a le droit, false sinon
1763 1763
  **/
1764 1764
 function autoriser_configurerlangue_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1765
-	return autoriser('configurer', '_langue', $id, $qui, $opt);
1765
+    return autoriser('configurer', '_langue', $id, $qui, $opt);
1766 1766
 }
1767 1767
 
1768 1768
 /**
@@ -1780,7 +1780,7 @@  discard block
 block discarded – undo
1780 1780
  * @return bool true s'il a le droit, false sinon
1781 1781
  **/
1782 1782
 function autoriser_configurermultilinguisme_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1783
-	return autoriser('configurer', '_multilinguisme', $id, $qui, $opt);
1783
+    return autoriser('configurer', '_multilinguisme', $id, $qui, $opt);
1784 1784
 }
1785 1785
 
1786 1786
 /**
@@ -1798,7 +1798,7 @@  discard block
 block discarded – undo
1798 1798
  * @return bool true s'il a le droit, false sinon
1799 1799
  **/
1800 1800
 function autoriser_configurercontenu_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1801
-	return autoriser('configurer', '_contenu', $id, $qui, $opt);
1801
+    return autoriser('configurer', '_contenu', $id, $qui, $opt);
1802 1802
 }
1803 1803
 
1804 1804
 /**
@@ -1816,7 +1816,7 @@  discard block
 block discarded – undo
1816 1816
  * @return bool true s'il a le droit, false sinon
1817 1817
  **/
1818 1818
 function autoriser_configureravancees_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1819
-	return autoriser('configurer', '_avancees', $id, $qui, $opt);
1819
+    return autoriser('configurer', '_avancees', $id, $qui, $opt);
1820 1820
 }
1821 1821
 
1822 1822
 /**
@@ -1834,7 +1834,7 @@  discard block
 block discarded – undo
1834 1834
  * @return bool true s'il a le droit, false sinon
1835 1835
  **/
1836 1836
 function autoriser_adminplugin_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1837
-	return autoriser('configurer', '_plugins', $id, $qui, $opt);
1837
+    return autoriser('configurer', '_plugins', $id, $qui, $opt);
1838 1838
 }
1839 1839
 
1840 1840
 /**
@@ -1852,7 +1852,7 @@  discard block
 block discarded – undo
1852 1852
  * @return bool true s'il a le droit, false sinon
1853 1853
  **/
1854 1854
 function autoriser_admintech_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1855
-	return autoriser('detruire', $type, $id, $qui, $opt);
1855
+    return autoriser('detruire', $type, $id, $qui, $opt);
1856 1856
 }
1857 1857
 
1858 1858
 /**
@@ -1870,7 +1870,7 @@  discard block
 block discarded – undo
1870 1870
  * @return bool true s'il a le droit, false sinon
1871 1871
  **/
1872 1872
 function autoriser_queue_purger_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1873
-	return autoriser('webmestre');
1873
+    return autoriser('webmestre');
1874 1874
 }
1875 1875
 
1876 1876
 
@@ -1890,11 +1890,11 @@  discard block
 block discarded – undo
1890 1890
  * @return bool true s'il a le droit, false sinon
1891 1891
  **/
1892 1892
 function autoriser_echafauder_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
1893
-	if (test_espace_prive()) {
1894
-		return intval($qui['id_auteur']) ? true : false;
1895
-	} else {
1896
-		return autoriser('webmestre', '', $id, $qui, $opt);
1897
-	}
1893
+    if (test_espace_prive()) {
1894
+        return intval($qui['id_auteur']) ? true : false;
1895
+    } else {
1896
+        return autoriser('webmestre', '', $id, $qui, $opt);
1897
+    }
1898 1898
 }
1899 1899
 
1900 1900
 
@@ -1909,27 +1909,27 @@  discard block
 block discarded – undo
1909 1909
  *     Identifiants d'auteurs
1910 1910
  */
1911 1911
 function auteurs_objet($objet, $id_objet, $cond = '') {
1912
-	$objet = objet_type($objet);
1913
-	$where = [
1914
-		'objet=' . sql_quote($objet),
1915
-		'id_objet=' . intval($id_objet)
1916
-	];
1917
-	if (!empty($cond)) {
1918
-		if (is_array($cond)) {
1919
-			$where = array_merge($where, $cond);
1920
-		} else {
1921
-			$where[] = $cond;
1922
-		}
1923
-	}
1924
-	$auteurs = sql_allfetsel(
1925
-		'id_auteur',
1926
-		'spip_auteurs_liens',
1927
-		$where
1928
-	);
1929
-	if (is_array($auteurs)) {
1930
-		return array_column($auteurs, 'id_auteur');
1931
-	}
1932
-	return [];
1912
+    $objet = objet_type($objet);
1913
+    $where = [
1914
+        'objet=' . sql_quote($objet),
1915
+        'id_objet=' . intval($id_objet)
1916
+    ];
1917
+    if (!empty($cond)) {
1918
+        if (is_array($cond)) {
1919
+            $where = array_merge($where, $cond);
1920
+        } else {
1921
+            $where[] = $cond;
1922
+        }
1923
+    }
1924
+    $auteurs = sql_allfetsel(
1925
+        'id_auteur',
1926
+        'spip_auteurs_liens',
1927
+        $where
1928
+    );
1929
+    if (is_array($auteurs)) {
1930
+        return array_column($auteurs, 'id_auteur');
1931
+    }
1932
+    return [];
1933 1933
 }
1934 1934
 
1935 1935
 /**
@@ -1944,11 +1944,11 @@  discard block
 block discarded – undo
1944 1944
  *     - false : serveur SQL indisponible
1945 1945
  */
1946 1946
 function auteurs_article($id_article, $cond = '') {
1947
-	return sql_allfetsel(
1948
-		'id_auteur',
1949
-		'spip_auteurs_liens',
1950
-		"objet='article' AND id_objet=" . intval($id_article) . ($cond ? " AND $cond" : '')
1951
-	);
1947
+    return sql_allfetsel(
1948
+        'id_auteur',
1949
+        'spip_auteurs_liens',
1950
+        "objet='article' AND id_objet=" . intval($id_article) . ($cond ? " AND $cond" : '')
1951
+    );
1952 1952
 }
1953 1953
 
1954 1954
 
@@ -1962,7 +1962,7 @@  discard block
 block discarded – undo
1962 1962
  */
1963 1963
 function acces_restreint_rubrique($id_rubrique) {
1964 1964
 
1965
-	return (isset($GLOBALS['connect_id_rubrique'][$id_rubrique]));
1965
+    return (isset($GLOBALS['connect_id_rubrique'][$id_rubrique]));
1966 1966
 }
1967 1967
 
1968 1968
 
@@ -1975,12 +1975,12 @@  discard block
 block discarded – undo
1975 1975
  * @return bool             true si un parent existe
1976 1976
  */
1977 1977
 function verifier_table_non_vide($table = 'spip_rubriques') {
1978
-	static $done = [];
1979
-	if (!isset($done[$table])) {
1980
-		$done[$table] = sql_countsel($table) > 0;
1981
-	}
1978
+    static $done = [];
1979
+    if (!isset($done[$table])) {
1980
+        $done[$table] = sql_countsel($table) > 0;
1981
+    }
1982 1982
 
1983
-	return $done[$table];
1983
+    return $done[$table];
1984 1984
 }
1985 1985
 
1986 1986
 /**
@@ -2007,15 +2007,15 @@  discard block
 block discarded – undo
2007 2007
  */
2008 2008
 function autoriser_inscrireauteur_dist($faire, $quoi, $id, $qui, $opt) {
2009 2009
 
2010
-	$s = array_search($quoi, $GLOBALS['liste_des_statuts']);
2011
-	switch ($s) {
2012
-		case 'info_redacteurs':
2013
-			return ($GLOBALS['meta']['accepter_inscriptions'] === 'oui');
2014
-		case 'info_visiteurs':
2015
-			return ($GLOBALS['meta']['accepter_visiteurs'] === 'oui' or $GLOBALS['meta']['forums_publics'] === 'abo');
2016
-	}
2010
+    $s = array_search($quoi, $GLOBALS['liste_des_statuts']);
2011
+    switch ($s) {
2012
+        case 'info_redacteurs':
2013
+            return ($GLOBALS['meta']['accepter_inscriptions'] === 'oui');
2014
+        case 'info_visiteurs':
2015
+            return ($GLOBALS['meta']['accepter_visiteurs'] === 'oui' or $GLOBALS['meta']['forums_publics'] === 'abo');
2016
+    }
2017 2017
 
2018
-	return false;
2018
+    return false;
2019 2019
 }
2020 2020
 
2021 2021
 /**
@@ -2033,7 +2033,7 @@  discard block
 block discarded – undo
2033 2033
  * @return bool true s'il a le droit, false sinon
2034 2034
  **/
2035 2035
 function autoriser_inscription_relancer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
2036
-	return $qui['statut'] === '0minirezo' and !$qui['restreint'];
2036
+    return $qui['statut'] === '0minirezo' and !$qui['restreint'];
2037 2037
 }
2038 2038
 
2039 2039
 /**
@@ -2051,5 +2051,5 @@  discard block
 block discarded – undo
2051 2051
  * @return bool true s'il a le droit, false sinon
2052 2052
  **/
2053 2053
 function autoriser_phpinfos_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
2054
-	return autoriser('webmestre');
2054
+    return autoriser('webmestre');
2055 2055
 }
Please login to merge, or discard this patch.
ecrire/action/api_transmettre.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -93,7 +93,7 @@
 block discarded – undo
93 93
 
94 94
 	$res = ltrim($res['texte']);
95 95
 	if (empty($res)) {
96
-		spip_log("$arg $qs resultat vide", 'transmettre' . _LOG_INFO_IMPORTANTE);
96
+		spip_log("$arg $qs resultat vide", 'transmettre'._LOG_INFO_IMPORTANTE);
97 97
 	}
98 98
 
99 99
 	echo $res;
Please login to merge, or discard this patch.
Indentation   +80 added lines, -80 removed lines patch added patch discarded remove patch
@@ -17,92 +17,92 @@
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
24 24
 function action_api_transmettre_dist($arg = null) {
25 25
 
26
-	// Obtenir l'argument 'id_auteur/cle/format/fond'
27
-	if (is_null($arg)) {
28
-		$arg = _request('arg');
29
-	}
30
-
31
-	$args = explode('/', $arg);
32
-
33
-	if (count($args) !== 4) {
34
-		action_api_transmettre_fail($arg);
35
-	}
36
-
37
-	[$id_auteur, $cle, $format, $fond] = $args;
38
-	$id_auteur = intval($id_auteur);
39
-
40
-	if (preg_match(',[^\w\\.-],', $format)) {
41
-		action_api_transmettre_fail("format $format ??");
42
-	}
43
-	if (preg_match(',[^\w\\.-],', $fond)) {
44
-		action_api_transmettre_fail("fond $fond ??");
45
-	}
46
-
47
-	// verifier la cle
48
-	//[(#ENV{id,0}|securiser_acces{#ENV{cle}, voirstats, #ENV{op}, #ENV{args}}|?{1,0})]
49
-	//[(#ENV{id,0}|securiser_acces{#ENV{cle}, voirstats, #ENV{op}, #ENV{args}}|?{1,0})]
50
-
51
-	$qs = $_SERVER['QUERY_STRING'];
52
-	// retirer action et arg de la qs
53
-	$contexte = [];
54
-	parse_str($qs, $contexte);
55
-	foreach ($contexte as $k => $v) {
56
-		if (in_array($k, ['action', 'arg', 'var_mode'])) {
57
-			unset($contexte[$k]);
58
-		}
59
-	}
60
-	$qs = http_build_query($contexte);
61
-	include_spip('inc/acces');
62
-	if (!securiser_acces_low_sec(intval($id_auteur), $cle, "transmettre/$format", $fond, $qs)) {
63
-		// si le autoriser low_sec n'est pas bon, on peut valider l'appel si l'auteur est identifie
64
-		include_spip('inc/autoriser');
65
-		$autoriser_type = preg_replace(',\W+,', '', "_{$format}{$fond}");
66
-		if (
67
-			!$id_auteur
68
-			or empty($GLOBALS['visiteur_session']['id_auteur'])
69
-			or $GLOBALS['visiteur_session']['id_auteur'] != $id_auteur
70
-			or !autoriser('transmettre', $autoriser_type, $id_auteur)
71
-		) {
72
-			action_api_transmettre_fail("auth QS $qs ??");
73
-		}
74
-	}
75
-
76
-	$contexte['id_auteur'] = $id_auteur;
77
-
78
-	$fond = "transmettre/$format/$fond";
79
-
80
-	if (!trouver_fond($fond)) {
81
-		$fond = "prive/$fond";
82
-	}
83
-
84
-	if (!trouver_fond($fond)) {
85
-		action_api_transmettre_fail("fond $fond ??");
86
-	}
87
-
88
-	$res = recuperer_fond($fond, $contexte, ['raw' => true]);
89
-	if (!empty($res['entetes'])) {
90
-		foreach ($res['entetes'] as $h => $v) {
91
-			header("$h: $v");
92
-		}
93
-	}
94
-
95
-	$res = ltrim($res['texte']);
96
-	if (empty($res)) {
97
-		spip_log("$arg $qs resultat vide", 'transmettre' . _LOG_INFO_IMPORTANTE);
98
-	}
99
-
100
-	echo $res;
101
-	exit();
26
+    // Obtenir l'argument 'id_auteur/cle/format/fond'
27
+    if (is_null($arg)) {
28
+        $arg = _request('arg');
29
+    }
30
+
31
+    $args = explode('/', $arg);
32
+
33
+    if (count($args) !== 4) {
34
+        action_api_transmettre_fail($arg);
35
+    }
36
+
37
+    [$id_auteur, $cle, $format, $fond] = $args;
38
+    $id_auteur = intval($id_auteur);
39
+
40
+    if (preg_match(',[^\w\\.-],', $format)) {
41
+        action_api_transmettre_fail("format $format ??");
42
+    }
43
+    if (preg_match(',[^\w\\.-],', $fond)) {
44
+        action_api_transmettre_fail("fond $fond ??");
45
+    }
46
+
47
+    // verifier la cle
48
+    //[(#ENV{id,0}|securiser_acces{#ENV{cle}, voirstats, #ENV{op}, #ENV{args}}|?{1,0})]
49
+    //[(#ENV{id,0}|securiser_acces{#ENV{cle}, voirstats, #ENV{op}, #ENV{args}}|?{1,0})]
50
+
51
+    $qs = $_SERVER['QUERY_STRING'];
52
+    // retirer action et arg de la qs
53
+    $contexte = [];
54
+    parse_str($qs, $contexte);
55
+    foreach ($contexte as $k => $v) {
56
+        if (in_array($k, ['action', 'arg', 'var_mode'])) {
57
+            unset($contexte[$k]);
58
+        }
59
+    }
60
+    $qs = http_build_query($contexte);
61
+    include_spip('inc/acces');
62
+    if (!securiser_acces_low_sec(intval($id_auteur), $cle, "transmettre/$format", $fond, $qs)) {
63
+        // si le autoriser low_sec n'est pas bon, on peut valider l'appel si l'auteur est identifie
64
+        include_spip('inc/autoriser');
65
+        $autoriser_type = preg_replace(',\W+,', '', "_{$format}{$fond}");
66
+        if (
67
+            !$id_auteur
68
+            or empty($GLOBALS['visiteur_session']['id_auteur'])
69
+            or $GLOBALS['visiteur_session']['id_auteur'] != $id_auteur
70
+            or !autoriser('transmettre', $autoriser_type, $id_auteur)
71
+        ) {
72
+            action_api_transmettre_fail("auth QS $qs ??");
73
+        }
74
+    }
75
+
76
+    $contexte['id_auteur'] = $id_auteur;
77
+
78
+    $fond = "transmettre/$format/$fond";
79
+
80
+    if (!trouver_fond($fond)) {
81
+        $fond = "prive/$fond";
82
+    }
83
+
84
+    if (!trouver_fond($fond)) {
85
+        action_api_transmettre_fail("fond $fond ??");
86
+    }
87
+
88
+    $res = recuperer_fond($fond, $contexte, ['raw' => true]);
89
+    if (!empty($res['entetes'])) {
90
+        foreach ($res['entetes'] as $h => $v) {
91
+            header("$h: $v");
92
+        }
93
+    }
94
+
95
+    $res = ltrim($res['texte']);
96
+    if (empty($res)) {
97
+        spip_log("$arg $qs resultat vide", 'transmettre' . _LOG_INFO_IMPORTANTE);
98
+    }
99
+
100
+    echo $res;
101
+    exit();
102 102
 }
103 103
 
104 104
 function action_api_transmettre_fail($arg) {
105
-	include_spip('inc/minipres');
106
-	echo minipres(_T('info_acces_interdit'), $arg);
107
-	exit;
105
+    include_spip('inc/minipres');
106
+    echo minipres(_T('info_acces_interdit'), $arg);
107
+    exit;
108 108
 }
Please login to merge, or discard this patch.
ecrire/inc/editer.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -339,8 +339,7 @@
 block discarded – undo
339 339
 		if (!autoriser('modifier', $type, intval($id))) {
340 340
 			$contexte['editable'] = '';
341 341
 		}
342
-	}
343
-	else {
342
+	} else {
344 343
 		if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
345 344
 			$contexte['editable'] = '';
346 345
 		}
Please login to merge, or discard this patch.
Indentation   +442 added lines, -442 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('base/abstract_sql');
23 23
 
@@ -59,56 +59,56 @@  discard block
 block discarded – undo
59 59
  *     Retour des traitements.
60 60
  **/
61 61
 function formulaires_editer_objet_traiter(
62
-	$type,
63
-	$id = 'new',
64
-	$id_parent = 0,
65
-	$lier_trad = 0,
66
-	$retour = '',
67
-	$config_fonc = 'articles_edit_config',
68
-	$row = [],
69
-	$hidden = ''
62
+    $type,
63
+    $id = 'new',
64
+    $id_parent = 0,
65
+    $lier_trad = 0,
66
+    $retour = '',
67
+    $config_fonc = 'articles_edit_config',
68
+    $row = [],
69
+    $hidden = ''
70 70
 ) {
71 71
 
72
-	$res = [];
73
-	// eviter la redirection forcee par l'action...
74
-	set_request('redirect');
75
-	if ($action_editer = charger_fonction("editer_$type", 'action', true)) {
76
-		[$id, $err] = $action_editer($id);
77
-	} else {
78
-		$action_editer = charger_fonction('editer_objet', 'action');
79
-		[$id, $err] = $action_editer($id, $type);
80
-	}
81
-	$id_table_objet = id_table_objet($type);
82
-	$res[$id_table_objet] = $id;
83
-	if ($err or !$id) {
84
-		$res['message_erreur'] = ($err ?: _T('erreur'));
85
-	} else {
86
-		// Un lien de trad a prendre en compte
87
-		if ($lier_trad) {
88
-			// referencer la traduction
89
-			$referencer_traduction = charger_fonction('referencer_traduction', 'action');
90
-			$referencer_traduction($type, $id, $lier_trad);
91
-			// actions de recopie de champs / liens sur le nouvel objet créé
92
-			$completer_traduction = charger_fonction('completer_traduction', 'inc');
93
-			$err = $completer_traduction($type, $id, $lier_trad);
94
-			if ($err) {
95
-				$res['message_erreur'] = $err;
96
-				return $res;
97
-			}
98
-		}
99
-
100
-		$res['message_ok'] = _T('info_modification_enregistree');
101
-		if ($retour) {
102
-			if (strncmp($retour, 'javascript:', 11) == 0) {
103
-				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
104
-				$res['editable'] = true;
105
-			} else {
106
-				$res['redirect'] = parametre_url($retour, $id_table_objet, $id);
107
-			}
108
-		}
109
-	}
110
-
111
-	return $res;
72
+    $res = [];
73
+    // eviter la redirection forcee par l'action...
74
+    set_request('redirect');
75
+    if ($action_editer = charger_fonction("editer_$type", 'action', true)) {
76
+        [$id, $err] = $action_editer($id);
77
+    } else {
78
+        $action_editer = charger_fonction('editer_objet', 'action');
79
+        [$id, $err] = $action_editer($id, $type);
80
+    }
81
+    $id_table_objet = id_table_objet($type);
82
+    $res[$id_table_objet] = $id;
83
+    if ($err or !$id) {
84
+        $res['message_erreur'] = ($err ?: _T('erreur'));
85
+    } else {
86
+        // Un lien de trad a prendre en compte
87
+        if ($lier_trad) {
88
+            // referencer la traduction
89
+            $referencer_traduction = charger_fonction('referencer_traduction', 'action');
90
+            $referencer_traduction($type, $id, $lier_trad);
91
+            // actions de recopie de champs / liens sur le nouvel objet créé
92
+            $completer_traduction = charger_fonction('completer_traduction', 'inc');
93
+            $err = $completer_traduction($type, $id, $lier_trad);
94
+            if ($err) {
95
+                $res['message_erreur'] = $err;
96
+                return $res;
97
+            }
98
+        }
99
+
100
+        $res['message_ok'] = _T('info_modification_enregistree');
101
+        if ($retour) {
102
+            if (strncmp($retour, 'javascript:', 11) == 0) {
103
+                $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
104
+                $res['editable'] = true;
105
+            } else {
106
+                $res['redirect'] = parametre_url($retour, $id_table_objet, $id);
107
+            }
108
+        }
109
+    }
110
+
111
+    return $res;
112 112
 }
113 113
 
114 114
 /**
@@ -132,29 +132,29 @@  discard block
 block discarded – undo
132 132
  *     Tableau des erreurs
133 133
  **/
134 134
 function formulaires_editer_objet_verifier($type, $id = 'new', $oblis = []) {
135
-	$erreurs = [];
136
-	if (intval($id)) {
137
-		$conflits = controler_contenu($type, $id);
138
-		if ($conflits and is_countable($conflits) ? count($conflits) : 0) {
139
-			foreach ($conflits as $champ => $conflit) {
140
-				if (!isset($erreurs[$champ])) {
141
-					$erreurs[$champ] = '';
142
-				}
143
-				$erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
144
-			}
145
-		}
146
-	}
147
-	foreach ($oblis as $obli) {
148
-		$value = _request($obli);
149
-		if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) {
150
-			if (!isset($erreurs[$obli])) {
151
-				$erreurs[$obli] = '';
152
-			}
153
-			$erreurs[$obli] .= _T('info_obligatoire');
154
-		}
155
-	}
156
-
157
-	return $erreurs;
135
+    $erreurs = [];
136
+    if (intval($id)) {
137
+        $conflits = controler_contenu($type, $id);
138
+        if ($conflits and is_countable($conflits) ? count($conflits) : 0) {
139
+            foreach ($conflits as $champ => $conflit) {
140
+                if (!isset($erreurs[$champ])) {
141
+                    $erreurs[$champ] = '';
142
+                }
143
+                $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
144
+            }
145
+        }
146
+    }
147
+    foreach ($oblis as $obli) {
148
+        $value = _request($obli);
149
+        if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) {
150
+            if (!isset($erreurs[$obli])) {
151
+                $erreurs[$obli] = '';
152
+            }
153
+            $erreurs[$obli] .= _T('info_obligatoire');
154
+        }
155
+    }
156
+
157
+    return $erreurs;
158 158
 }
159 159
 
160 160
 /**
@@ -199,154 +199,154 @@  discard block
 block discarded – undo
199 199
  *     Environnement du formulaire.
200 200
  **/
201 201
 function formulaires_editer_objet_charger(
202
-	$type,
203
-	$id = 'new',
204
-	$id_parent = 0,
205
-	$lier_trad = 0,
206
-	$retour = '',
207
-	$config_fonc = 'articles_edit_config',
208
-	$row = [],
209
-	$hidden = ''
202
+    $type,
203
+    $id = 'new',
204
+    $id_parent = 0,
205
+    $lier_trad = 0,
206
+    $retour = '',
207
+    $config_fonc = 'articles_edit_config',
208
+    $row = [],
209
+    $hidden = ''
210 210
 ) {
211 211
 
212
-	$table_objet = table_objet($type);
213
-	$table_objet_sql = table_objet_sql($type);
214
-	$id_table_objet = id_table_objet($type);
215
-	if (!is_array($row)) {
216
-		$row = [];
217
-	}
218
-
219
-	// on accepte pas une fonction de config inconnue si elle vient d'un modele
220
-	if (
221
-		$config_fonc
222
-		and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
223
-		and $config_fonc !== $table_objet . '_edit_config'
224
-	) {
225
-		if (
226
-			$args = test_formulaire_inclus_par_modele()
227
-			and in_array($config_fonc, $args)
228
-		) {
229
-			$config_fonc = '';
230
-		}
231
-	}
232
-
233
-	$new = !is_numeric($id);
234
-	$lang_default = '';
235
-	// Appel direct dans un squelette
236
-	if (!$row) {
237
-		if (!$new or $lier_trad) {
238
-			if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
239
-				$row = $select($id, $id_parent, $lier_trad);
240
-				// si on a une fonction precharger, elle pu faire un reglage de langue
241
-				$lang_default = (!empty($row['lang']) ? $row['lang'] : null);
242
-			} else {
243
-				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id));
244
-			}
245
-			if (!$new) {
246
-				$md5 = controles_md5($row ?: []);
247
-			}
248
-		}
249
-		if (!$row) {
250
-			$row = [];
251
-			$trouver_table = charger_fonction('trouver_table', 'base');
252
-			if ($desc = $trouver_table($table_objet)) {
253
-				foreach ($desc['field'] as $k => $v) {
254
-					$row[$k] = '';
255
-				}
256
-			}
257
-		}
258
-	}
259
-
260
-	// Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
261
-	// (et donc: pas de lien de traduction)
262
-	$id = ($new or $lier_trad)
263
-		? 'oui'
264
-		: $row[$id_table_objet];
265
-	$row[$id_table_objet] = $id;
266
-
267
-	$contexte = $row;
268
-	if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) or $new)) {
269
-		if (!isset($contexte['id_parent'])) {
270
-			unset($contexte['id_rubrique']);
271
-		}
272
-		$contexte['id_parent'] = $id_parent;
273
-	} elseif (!isset($contexte['id_parent'])) {
274
-		// id_rubrique dans id_parent si possible
275
-		if (isset($contexte['id_rubrique'])) {
276
-			$contexte['id_parent'] = $contexte['id_rubrique'];
277
-			unset($contexte['id_rubrique']);
278
-		} else {
279
-			$contexte['id_parent'] = '';
280
-		}
281
-		if (
282
-			!$contexte['id_parent']
283
-			and $preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true)
284
-		) {
285
-			$contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row);
286
-		}
287
-	}
288
-
289
-	$config = [];
290
-	if ($config_fonc) {
291
-		$contexte['config'] = $config = $config_fonc($contexte);
292
-		if (!$lang_default) {
293
-			$lang_default = $config['langue'] ?? session_get('lang') ;
294
-		}
295
-	}
296
-	$config = $config + [
297
-		'lignes' => 0,
298
-		'langue' => '',
299
-	];
300
-
301
-	$att_text = " class='textarea' "
302
-		. " rows='"
303
-		. ($config['lignes'] + 15)
304
-		. "' cols='40'";
305
-	if (isset($contexte['texte'])) {
306
-		[$contexte['texte'], $contexte['_texte_trop_long']] = editer_texte_recolle($contexte['texte'], $att_text);
307
-	}
308
-
309
-	// on veut conserver la langue de l'interface ;
310
-	// on passe cette donnee sous un autre nom, au cas ou le squelette
311
-	// voudrait l'exploiter
312
-	if (isset($contexte['lang'])) {
313
-		$contexte['langue'] = $contexte['lang'];
314
-		unset($contexte['lang']);
315
-	}
316
-
317
-	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
318
-		(!$lier_trad ? '' :
319
-			("\n<input type='hidden' name='lier_trad' value='" .
320
-				$lier_trad .
321
-				"' />" .
322
-				"\n<input type='hidden' name='changer_lang' value='" .
323
-				$lang_default .
324
-				"' />"))
325
-		. $hidden
326
-		. ($md5 ?? '');
327
-
328
-	// preciser que le formulaire doit passer dans un pipeline
329
-	$contexte['_pipeline'] = ['editer_contenu_objet', ['type' => $type, 'id' => $id]];
330
-
331
-	// preciser que le formulaire doit etre securise auteur/action
332
-	// n'est plus utile lorsque l'action accepte l'id en argument direct
333
-	// on le garde pour compat
334
-	$contexte['_action'] = ["editer_$type", $id];
335
-
336
-	// et in fine placer l'autorisation
337
-	include_spip('inc/autoriser');
338
-	if (intval($id)) {
339
-		if (!autoriser('modifier', $type, intval($id))) {
340
-			$contexte['editable'] = '';
341
-		}
342
-	}
343
-	else {
344
-		if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
345
-			$contexte['editable'] = '';
346
-		}
347
-	}
348
-
349
-	return $contexte;
212
+    $table_objet = table_objet($type);
213
+    $table_objet_sql = table_objet_sql($type);
214
+    $id_table_objet = id_table_objet($type);
215
+    if (!is_array($row)) {
216
+        $row = [];
217
+    }
218
+
219
+    // on accepte pas une fonction de config inconnue si elle vient d'un modele
220
+    if (
221
+        $config_fonc
222
+        and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
223
+        and $config_fonc !== $table_objet . '_edit_config'
224
+    ) {
225
+        if (
226
+            $args = test_formulaire_inclus_par_modele()
227
+            and in_array($config_fonc, $args)
228
+        ) {
229
+            $config_fonc = '';
230
+        }
231
+    }
232
+
233
+    $new = !is_numeric($id);
234
+    $lang_default = '';
235
+    // Appel direct dans un squelette
236
+    if (!$row) {
237
+        if (!$new or $lier_trad) {
238
+            if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
239
+                $row = $select($id, $id_parent, $lier_trad);
240
+                // si on a une fonction precharger, elle pu faire un reglage de langue
241
+                $lang_default = (!empty($row['lang']) ? $row['lang'] : null);
242
+            } else {
243
+                $row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id));
244
+            }
245
+            if (!$new) {
246
+                $md5 = controles_md5($row ?: []);
247
+            }
248
+        }
249
+        if (!$row) {
250
+            $row = [];
251
+            $trouver_table = charger_fonction('trouver_table', 'base');
252
+            if ($desc = $trouver_table($table_objet)) {
253
+                foreach ($desc['field'] as $k => $v) {
254
+                    $row[$k] = '';
255
+                }
256
+            }
257
+        }
258
+    }
259
+
260
+    // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
261
+    // (et donc: pas de lien de traduction)
262
+    $id = ($new or $lier_trad)
263
+        ? 'oui'
264
+        : $row[$id_table_objet];
265
+    $row[$id_table_objet] = $id;
266
+
267
+    $contexte = $row;
268
+    if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) or $new)) {
269
+        if (!isset($contexte['id_parent'])) {
270
+            unset($contexte['id_rubrique']);
271
+        }
272
+        $contexte['id_parent'] = $id_parent;
273
+    } elseif (!isset($contexte['id_parent'])) {
274
+        // id_rubrique dans id_parent si possible
275
+        if (isset($contexte['id_rubrique'])) {
276
+            $contexte['id_parent'] = $contexte['id_rubrique'];
277
+            unset($contexte['id_rubrique']);
278
+        } else {
279
+            $contexte['id_parent'] = '';
280
+        }
281
+        if (
282
+            !$contexte['id_parent']
283
+            and $preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true)
284
+        ) {
285
+            $contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row);
286
+        }
287
+    }
288
+
289
+    $config = [];
290
+    if ($config_fonc) {
291
+        $contexte['config'] = $config = $config_fonc($contexte);
292
+        if (!$lang_default) {
293
+            $lang_default = $config['langue'] ?? session_get('lang') ;
294
+        }
295
+    }
296
+    $config = $config + [
297
+        'lignes' => 0,
298
+        'langue' => '',
299
+    ];
300
+
301
+    $att_text = " class='textarea' "
302
+        . " rows='"
303
+        . ($config['lignes'] + 15)
304
+        . "' cols='40'";
305
+    if (isset($contexte['texte'])) {
306
+        [$contexte['texte'], $contexte['_texte_trop_long']] = editer_texte_recolle($contexte['texte'], $att_text);
307
+    }
308
+
309
+    // on veut conserver la langue de l'interface ;
310
+    // on passe cette donnee sous un autre nom, au cas ou le squelette
311
+    // voudrait l'exploiter
312
+    if (isset($contexte['lang'])) {
313
+        $contexte['langue'] = $contexte['lang'];
314
+        unset($contexte['lang']);
315
+    }
316
+
317
+    $contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
318
+        (!$lier_trad ? '' :
319
+            ("\n<input type='hidden' name='lier_trad' value='" .
320
+                $lier_trad .
321
+                "' />" .
322
+                "\n<input type='hidden' name='changer_lang' value='" .
323
+                $lang_default .
324
+                "' />"))
325
+        . $hidden
326
+        . ($md5 ?? '');
327
+
328
+    // preciser que le formulaire doit passer dans un pipeline
329
+    $contexte['_pipeline'] = ['editer_contenu_objet', ['type' => $type, 'id' => $id]];
330
+
331
+    // preciser que le formulaire doit etre securise auteur/action
332
+    // n'est plus utile lorsque l'action accepte l'id en argument direct
333
+    // on le garde pour compat
334
+    $contexte['_action'] = ["editer_$type", $id];
335
+
336
+    // et in fine placer l'autorisation
337
+    include_spip('inc/autoriser');
338
+    if (intval($id)) {
339
+        if (!autoriser('modifier', $type, intval($id))) {
340
+            $contexte['editable'] = '';
341
+        }
342
+    }
343
+    else {
344
+        if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
345
+            $contexte['editable'] = '';
346
+        }
347
+    }
348
+
349
+    return $contexte;
350 350
 }
351 351
 
352 352
 /**
@@ -357,29 +357,29 @@  discard block
 block discarded – undo
357 357
  * @return array
358 358
  */
359 359
 function coupe_trop_long($texte) {
360
-	$aider = charger_fonction('aider', 'inc');
361
-	if (strlen($texte) > 28 * 1024) {
362
-		$texte = str_replace("\r\n", "\n", $texte);
363
-		$pos = strpos($texte, "\n\n", 28 * 1024);  // coupe para > 28 ko
364
-		if ($pos > 0 and $pos < 32 * 1024) {
365
-			$debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n";
366
-			$suite = substr($texte, $pos + 2);
367
-		} else {
368
-			$pos = strpos($texte, ' ', 28 * 1024);  // sinon coupe espace
369
-			if (!($pos > 0 and $pos < 32 * 1024)) {
370
-				$pos = 28 * 1024;  // au pire (pas d'espace trouv'e)
371
-				$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
372
-			} else {
373
-				$decalage = 1;
374
-			}
375
-			$debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un
376
-			$suite = substr($texte, $pos + $decalage);
377
-		}
378
-
379
-		return ([$debut, $suite]);
380
-	} else {
381
-		return ([$texte, '']);
382
-	}
360
+    $aider = charger_fonction('aider', 'inc');
361
+    if (strlen($texte) > 28 * 1024) {
362
+        $texte = str_replace("\r\n", "\n", $texte);
363
+        $pos = strpos($texte, "\n\n", 28 * 1024);  // coupe para > 28 ko
364
+        if ($pos > 0 and $pos < 32 * 1024) {
365
+            $debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n";
366
+            $suite = substr($texte, $pos + 2);
367
+        } else {
368
+            $pos = strpos($texte, ' ', 28 * 1024);  // sinon coupe espace
369
+            if (!($pos > 0 and $pos < 32 * 1024)) {
370
+                $pos = 28 * 1024;  // au pire (pas d'espace trouv'e)
371
+                $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
372
+            } else {
373
+                $decalage = 1;
374
+            }
375
+            $debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un
376
+            $suite = substr($texte, $pos + $decalage);
377
+        }
378
+
379
+        return ([$debut, $suite]);
380
+    } else {
381
+        return ([$texte, '']);
382
+    }
383 383
 }
384 384
 
385 385
 /**
@@ -390,25 +390,25 @@  discard block
 block discarded – undo
390 390
  * @return array
391 391
  */
392 392
 function editer_texte_recolle($texte, $att_text) {
393
-	if (
394
-		(strlen($texte) < 29 * 1024)
395
-		or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE'))
396
-	) {
397
-		return [$texte, ''];
398
-	}
399
-
400
-	include_spip('inc/barre');
401
-	$textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n";
402
-	$nombre = 0;
403
-
404
-	while (strlen($texte) > 29 * 1024) {
405
-		$nombre++;
406
-		[$texte1, $texte] = coupe_trop_long($texte);
407
-		$textes_supplement .= '<br />' .
408
-			"<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
409
-	}
410
-
411
-	return [$texte, $textes_supplement];
393
+    if (
394
+        (strlen($texte) < 29 * 1024)
395
+        or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE'))
396
+    ) {
397
+        return [$texte, ''];
398
+    }
399
+
400
+    include_spip('inc/barre');
401
+    $textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n";
402
+    $nombre = 0;
403
+
404
+    while (strlen($texte) > 29 * 1024) {
405
+        $nombre++;
406
+        [$texte1, $texte] = coupe_trop_long($texte);
407
+        $textes_supplement .= '<br />' .
408
+            "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
409
+    }
410
+
411
+    return [$texte, $textes_supplement];
412 412
 }
413 413
 
414 414
 /**
@@ -419,17 +419,17 @@  discard block
 block discarded – undo
419 419
  * @param int $longueur
420 420
  */
421 421
 function titre_automatique($champ_titre, $champs_contenu, $longueur = null) {
422
-	if (!_request($champ_titre)) {
423
-		$titrer_contenu = charger_fonction('titrer_contenu', 'inc');
424
-		if (!is_null($longueur)) {
425
-			$t = $titrer_contenu($champs_contenu, null, $longueur);
426
-		} else {
427
-			$t = $titrer_contenu($champs_contenu);
428
-		}
429
-		if ($t) {
430
-			set_request($champ_titre, $t);
431
-		}
432
-	}
422
+    if (!_request($champ_titre)) {
423
+        $titrer_contenu = charger_fonction('titrer_contenu', 'inc');
424
+        if (!is_null($longueur)) {
425
+            $t = $titrer_contenu($champs_contenu, null, $longueur);
426
+        } else {
427
+            $t = $titrer_contenu($champs_contenu);
428
+        }
429
+        if ($t) {
430
+            set_request($champ_titre, $t);
431
+        }
432
+    }
433 433
 }
434 434
 
435 435
 /**
@@ -449,20 +449,20 @@  discard block
 block discarded – undo
449 449
  * @return string
450 450
  */
451 451
 function inc_titrer_contenu_dist($champs_contenu, $c = null, $longueur = 50) {
452
-	// trouver un champ texte non vide
453
-	$t = '';
454
-	foreach ($champs_contenu as $champ) {
455
-		if ($t = _request($champ, $c)) {
456
-			break;
457
-		}
458
-	}
459
-
460
-	if ($t) {
461
-		include_spip('inc/texte_mini');
462
-		$t = couper($t, $longueur, '...');
463
-	}
464
-
465
-	return $t;
452
+    // trouver un champ texte non vide
453
+    $t = '';
454
+    foreach ($champs_contenu as $champ) {
455
+        if ($t = _request($champ, $c)) {
456
+            break;
457
+        }
458
+    }
459
+
460
+    if ($t) {
461
+        include_spip('inc/texte_mini');
462
+        $t = couper($t, $longueur, '...');
463
+    }
464
+
465
+    return $t;
466 466
 }
467 467
 
468 468
 /**
@@ -484,26 +484,26 @@  discard block
 block discarded – undo
484 484
  *      - array sinon couples ('$prefixe$colonne => md5)
485 485
  **/
486 486
 function controles_md5(array $data, string $prefixe = 'ctr_', string $format = 'html') {
487
-	$ctr = [];
488
-	foreach ($data as $key => $val) {
489
-		$m = md5($val ?? '');
490
-		$k = $prefixe . $key;
491
-
492
-		switch ($format) {
493
-			case 'html':
494
-				$ctr[$k] = "<input type='hidden' value='$m' name='$k' />";
495
-				break;
496
-			default:
497
-				$ctr[$k] = $m;
498
-				break;
499
-		}
500
-	}
501
-
502
-	if ($format === 'html') {
503
-		return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n";
504
-	} else {
505
-		return $ctr;
506
-	}
487
+    $ctr = [];
488
+    foreach ($data as $key => $val) {
489
+        $m = md5($val ?? '');
490
+        $k = $prefixe . $key;
491
+
492
+        switch ($format) {
493
+            case 'html':
494
+                $ctr[$k] = "<input type='hidden' value='$m' name='$k' />";
495
+                break;
496
+            default:
497
+                $ctr[$k] = $m;
498
+                break;
499
+        }
500
+    }
501
+
502
+    if ($format === 'html') {
503
+        return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n";
504
+    } else {
505
+        return $ctr;
506
+    }
507 507
 }
508 508
 
509 509
 /**
@@ -542,80 +542,80 @@  discard block
 block discarded – undo
542 542
  *     - post : le contenu posté
543 543
  **/
544 544
 function controler_contenu($type, $id, $options = [], $c = false, $serveur = '') {
545
-	include_spip('inc/filtres');
546
-
547
-	$table_objet = table_objet($type);
548
-	$spip_table_objet = table_objet_sql($type);
549
-	$trouver_table = charger_fonction('trouver_table', 'base');
550
-	$desc = $trouver_table($table_objet, $serveur);
551
-
552
-	// Appels incomplets (sans $c)
553
-	if (!is_array($c)) {
554
-		$c = [];
555
-		foreach ($desc['field'] as $champ => $ignore) {
556
-			if (_request($champ)) {
557
-				$c[$champ] = _request($champ);
558
-			}
559
-		}
560
-	}
561
-
562
-	// Securite : certaines variables ne sont jamais acceptees ici
563
-	// car elles ne relevent pas de autoriser(article, modifier) ;
564
-	// il faut passer par instituer_XX()
565
-	// TODO: faut-il passer ces variables interdites
566
-	// dans un fichier de description separe ?
567
-	unset($c['statut']);
568
-	unset($c['id_parent']);
569
-	unset($c['id_rubrique']);
570
-	unset($c['id_secteur']);
571
-
572
-	// Gerer les champs non vides
573
-	if (isset($options['nonvide']) and is_array($options['nonvide'])) {
574
-		foreach ($options['nonvide'] as $champ => $sinon) {
575
-			if ($c[$champ] === '') {
576
-				$c[$champ] = $sinon;
577
-			}
578
-		}
579
-	}
580
-
581
-	// N'accepter que les champs qui existent
582
-	// [TODO] ici aussi on peut valider les contenus en fonction du type
583
-	$champs = [];
584
-	foreach ($desc['field'] as $champ => $ignore) {
585
-		if (isset($c[$champ])) {
586
-			$champs[$champ] = $c[$champ];
587
-		}
588
-	}
589
-
590
-	// Nettoyer les valeurs
591
-	$champs = array_map('corriger_caracteres', $champs);
592
-
593
-	// Envoyer aux plugins
594
-	$champs = pipeline(
595
-		'pre_edition',
596
-		[
597
-			'args' => [
598
-				'table' => $spip_table_objet, // compatibilite
599
-				'table_objet' => $table_objet,
600
-				'spip_table_objet' => $spip_table_objet,
601
-				'type' => $type,
602
-				'id_objet' => $id,
603
-				'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
604
-				'action' => 'controler',
605
-				'serveur' => $serveur,
606
-			],
607
-			'data' => $champs
608
-		]
609
-	);
610
-
611
-	if (!$champs) {
612
-		return false;
613
-	}
614
-
615
-	// Verifier si les mises a jour sont pertinentes, datees, en conflit etc
616
-	$conflits = controler_md5($champs, $_POST, $type, $id, $serveur, $options['prefix'] ?? 'ctr_');
617
-
618
-	return $conflits;
545
+    include_spip('inc/filtres');
546
+
547
+    $table_objet = table_objet($type);
548
+    $spip_table_objet = table_objet_sql($type);
549
+    $trouver_table = charger_fonction('trouver_table', 'base');
550
+    $desc = $trouver_table($table_objet, $serveur);
551
+
552
+    // Appels incomplets (sans $c)
553
+    if (!is_array($c)) {
554
+        $c = [];
555
+        foreach ($desc['field'] as $champ => $ignore) {
556
+            if (_request($champ)) {
557
+                $c[$champ] = _request($champ);
558
+            }
559
+        }
560
+    }
561
+
562
+    // Securite : certaines variables ne sont jamais acceptees ici
563
+    // car elles ne relevent pas de autoriser(article, modifier) ;
564
+    // il faut passer par instituer_XX()
565
+    // TODO: faut-il passer ces variables interdites
566
+    // dans un fichier de description separe ?
567
+    unset($c['statut']);
568
+    unset($c['id_parent']);
569
+    unset($c['id_rubrique']);
570
+    unset($c['id_secteur']);
571
+
572
+    // Gerer les champs non vides
573
+    if (isset($options['nonvide']) and is_array($options['nonvide'])) {
574
+        foreach ($options['nonvide'] as $champ => $sinon) {
575
+            if ($c[$champ] === '') {
576
+                $c[$champ] = $sinon;
577
+            }
578
+        }
579
+    }
580
+
581
+    // N'accepter que les champs qui existent
582
+    // [TODO] ici aussi on peut valider les contenus en fonction du type
583
+    $champs = [];
584
+    foreach ($desc['field'] as $champ => $ignore) {
585
+        if (isset($c[$champ])) {
586
+            $champs[$champ] = $c[$champ];
587
+        }
588
+    }
589
+
590
+    // Nettoyer les valeurs
591
+    $champs = array_map('corriger_caracteres', $champs);
592
+
593
+    // Envoyer aux plugins
594
+    $champs = pipeline(
595
+        'pre_edition',
596
+        [
597
+            'args' => [
598
+                'table' => $spip_table_objet, // compatibilite
599
+                'table_objet' => $table_objet,
600
+                'spip_table_objet' => $spip_table_objet,
601
+                'type' => $type,
602
+                'id_objet' => $id,
603
+                'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
604
+                'action' => 'controler',
605
+                'serveur' => $serveur,
606
+            ],
607
+            'data' => $champs
608
+        ]
609
+    );
610
+
611
+    if (!$champs) {
612
+        return false;
613
+    }
614
+
615
+    // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
616
+    $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, $options['prefix'] ?? 'ctr_');
617
+
618
+    return $conflits;
619 619
 }
620 620
 
621 621
 
@@ -645,64 +645,64 @@  discard block
 block discarded – undo
645 645
  *     - post : le contenu posté
646 646
  **/
647 647
 function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') {
648
-	$spip_table_objet = table_objet_sql($type);
649
-	$id_table_objet = id_table_objet($type);
650
-
651
-	// Controle des MD5 envoyes
652
-	// On elimine les donnees non modifiees par le formulaire (mais
653
-	// potentiellement modifiees entre temps par un autre utilisateur)
654
-	foreach ($champs as $key => $val) {
655
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
656
-			if (is_scalar($val) and $m == md5($val)) {
657
-				unset($champs[$key]);
658
-			}
659
-		}
660
-	}
661
-	if (!$champs) {
662
-		return;
663
-	}
664
-
665
-	// On veut savoir si notre modif va avoir un impact
666
-	// par rapport aux donnees contenues dans la base
667
-	// (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
668
-	$s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
669
-	$intact = true;
670
-	foreach ($champs as $ch => $val) {
671
-		$intact &= ($s[$ch] == $val);
672
-	}
673
-	if ($intact) {
674
-		return;
675
-	}
676
-
677
-	// Detection de conflits :
678
-	// On verifie si notre modif ne provient pas d'un formulaire
679
-	// genere a partir de donnees modifiees dans l'intervalle ; ici
680
-	// on compare a ce qui est dans la base, et on bloque en cas
681
-	// de conflit.
682
-	$ctrh = $ctrq = $conflits = [];
683
-	foreach (array_keys($champs) as $key) {
684
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
685
-			$ctrh[$key] = $m;
686
-			$ctrq[] = $key;
687
-		}
688
-	}
689
-	if ($ctrq) {
690
-		$ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
691
-		foreach ($ctrh as $key => $m) {
692
-			if (
693
-				$m != md5($ctrq[$key])
694
-				and $champs[$key] !== $ctrq[$key]
695
-			) {
696
-				$conflits[$key] = [
697
-					'base' => $ctrq[$key],
698
-					'post' => $champs[$key]
699
-				];
700
-				unset($champs[$key]); # stocker quand meme les modifs ?
701
-			}
702
-		}
703
-	}
704
-
705
-	return $conflits;
648
+    $spip_table_objet = table_objet_sql($type);
649
+    $id_table_objet = id_table_objet($type);
650
+
651
+    // Controle des MD5 envoyes
652
+    // On elimine les donnees non modifiees par le formulaire (mais
653
+    // potentiellement modifiees entre temps par un autre utilisateur)
654
+    foreach ($champs as $key => $val) {
655
+        if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
656
+            if (is_scalar($val) and $m == md5($val)) {
657
+                unset($champs[$key]);
658
+            }
659
+        }
660
+    }
661
+    if (!$champs) {
662
+        return;
663
+    }
664
+
665
+    // On veut savoir si notre modif va avoir un impact
666
+    // par rapport aux donnees contenues dans la base
667
+    // (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
668
+    $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
669
+    $intact = true;
670
+    foreach ($champs as $ch => $val) {
671
+        $intact &= ($s[$ch] == $val);
672
+    }
673
+    if ($intact) {
674
+        return;
675
+    }
676
+
677
+    // Detection de conflits :
678
+    // On verifie si notre modif ne provient pas d'un formulaire
679
+    // genere a partir de donnees modifiees dans l'intervalle ; ici
680
+    // on compare a ce qui est dans la base, et on bloque en cas
681
+    // de conflit.
682
+    $ctrh = $ctrq = $conflits = [];
683
+    foreach (array_keys($champs) as $key) {
684
+        if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
685
+            $ctrh[$key] = $m;
686
+            $ctrq[] = $key;
687
+        }
688
+    }
689
+    if ($ctrq) {
690
+        $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
691
+        foreach ($ctrh as $key => $m) {
692
+            if (
693
+                $m != md5($ctrq[$key])
694
+                and $champs[$key] !== $ctrq[$key]
695
+            ) {
696
+                $conflits[$key] = [
697
+                    'base' => $ctrq[$key],
698
+                    'post' => $champs[$key]
699
+                ];
700
+                unset($champs[$key]); # stocker quand meme les modifs ?
701
+            }
702
+        }
703
+    }
704
+
705
+    return $conflits;
706 706
 }
707 707
 
708 708
 /**
@@ -714,9 +714,9 @@  discard block
 block discarded – undo
714 714
  * @return string
715 715
  */
716 716
 function display_conflit_champ($x) {
717
-	if (strstr($x, "\n") or strlen($x) > 80) {
718
-		return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
719
-	} else {
720
-		return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
721
-	}
717
+    if (strstr($x, "\n") or strlen($x) > 80) {
718
+        return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
719
+    } else {
720
+        return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
721
+    }
722 722
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -25 removed lines patch added patch discarded remove patch
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 		$res['message_ok'] = _T('info_modification_enregistree');
101 101
 		if ($retour) {
102 102
 			if (strncmp($retour, 'javascript:', 11) == 0) {
103
-				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
103
+				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/'.substr($retour, 11).'/*]]>*/</script>';
104 104
 				$res['editable'] = true;
105 105
 			} else {
106 106
 				$res['redirect'] = parametre_url($retour, $id_table_objet, $id);
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
 				if (!isset($erreurs[$champ])) {
141 141
 					$erreurs[$champ] = '';
142 142
 				}
143
-				$erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
143
+				$erreurs[$champ] .= _T('alerte_modif_info_concourante')."<br /><textarea readonly='readonly' class='forml'>".entites_html($conflit['base']).'</textarea>';
144 144
 			}
145 145
 		}
146 146
 	}
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
 	if (
221 221
 		$config_fonc
222 222
 		and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
223
-		and $config_fonc !== $table_objet . '_edit_config'
223
+		and $config_fonc !== $table_objet.'_edit_config'
224 224
 	) {
225 225
 		if (
226 226
 			$args = test_formulaire_inclus_par_modele()
@@ -235,12 +235,12 @@  discard block
 block discarded – undo
235 235
 	// Appel direct dans un squelette
236 236
 	if (!$row) {
237 237
 		if (!$new or $lier_trad) {
238
-			if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
238
+			if ($select = charger_fonction('precharger_'.$type, 'inc', true)) {
239 239
 				$row = $select($id, $id_parent, $lier_trad);
240 240
 				// si on a une fonction precharger, elle pu faire un reglage de langue
241 241
 				$lang_default = (!empty($row['lang']) ? $row['lang'] : null);
242 242
 			} else {
243
-				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id));
243
+				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet.'='.intval($id));
244 244
 			}
245 245
 			if (!$new) {
246 246
 				$md5 = controles_md5($row ?: []);
@@ -290,7 +290,7 @@  discard block
 block discarded – undo
290 290
 	if ($config_fonc) {
291 291
 		$contexte['config'] = $config = $config_fonc($contexte);
292 292
 		if (!$lang_default) {
293
-			$lang_default = $config['langue'] ?? session_get('lang') ;
293
+			$lang_default = $config['langue'] ?? session_get('lang');
294 294
 		}
295 295
 	}
296 296
 	$config = $config + [
@@ -314,13 +314,12 @@  discard block
 block discarded – undo
314 314
 		unset($contexte['lang']);
315 315
 	}
316 316
 
317
-	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
318
-		(!$lier_trad ? '' :
319
-			("\n<input type='hidden' name='lier_trad' value='" .
320
-				$lier_trad .
321
-				"' />" .
322
-				"\n<input type='hidden' name='changer_lang' value='" .
323
-				$lang_default .
317
+	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n".
318
+		(!$lier_trad ? '' : ("\n<input type='hidden' name='lier_trad' value='".
319
+				$lier_trad.
320
+				"' />".
321
+				"\n<input type='hidden' name='changer_lang' value='".
322
+				$lang_default.
324 323
 				"' />"))
325 324
 		. $hidden
326 325
 		. ($md5 ?? '');
@@ -360,14 +359,14 @@  discard block
 block discarded – undo
360 359
 	$aider = charger_fonction('aider', 'inc');
361 360
 	if (strlen($texte) > 28 * 1024) {
362 361
 		$texte = str_replace("\r\n", "\n", $texte);
363
-		$pos = strpos($texte, "\n\n", 28 * 1024);  // coupe para > 28 ko
362
+		$pos = strpos($texte, "\n\n", 28 * 1024); // coupe para > 28 ko
364 363
 		if ($pos > 0 and $pos < 32 * 1024) {
365
-			$debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n";
364
+			$debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n";
366 365
 			$suite = substr($texte, $pos + 2);
367 366
 		} else {
368
-			$pos = strpos($texte, ' ', 28 * 1024);  // sinon coupe espace
367
+			$pos = strpos($texte, ' ', 28 * 1024); // sinon coupe espace
369 368
 			if (!($pos > 0 and $pos < 32 * 1024)) {
370
-				$pos = 28 * 1024;  // au pire (pas d'espace trouv'e)
369
+				$pos = 28 * 1024; // au pire (pas d'espace trouv'e)
371 370
 				$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
372 371
 			} else {
373 372
 				$decalage = 1;
@@ -398,13 +397,13 @@  discard block
 block discarded – undo
398 397
 	}
399 398
 
400 399
 	include_spip('inc/barre');
401
-	$textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n";
400
+	$textes_supplement = "<br /><span style='color: red'>"._T('info_texte_long')."</span>\n";
402 401
 	$nombre = 0;
403 402
 
404 403
 	while (strlen($texte) > 29 * 1024) {
405 404
 		$nombre++;
406 405
 		[$texte1, $texte] = coupe_trop_long($texte);
407
-		$textes_supplement .= '<br />' .
406
+		$textes_supplement .= '<br />'.
408 407
 			"<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
409 408
 	}
410 409
 
@@ -487,7 +486,7 @@  discard block
 block discarded – undo
487 486
 	$ctr = [];
488 487
 	foreach ($data as $key => $val) {
489 488
 		$m = md5($val ?? '');
490
-		$k = $prefixe . $key;
489
+		$k = $prefixe.$key;
491 490
 
492 491
 		switch ($format) {
493 492
 			case 'html':
@@ -500,7 +499,7 @@  discard block
 block discarded – undo
500 499
 	}
501 500
 
502 501
 	if ($format === 'html') {
503
-		return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n";
502
+		return "\n\n<!-- controles md5 -->\n".join("\n", $ctr)."\n\n";
504 503
 	} else {
505 504
 		return $ctr;
506 505
 	}
@@ -652,7 +651,7 @@  discard block
 block discarded – undo
652 651
 	// On elimine les donnees non modifiees par le formulaire (mais
653 652
 	// potentiellement modifiees entre temps par un autre utilisateur)
654 653
 	foreach ($champs as $key => $val) {
655
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
654
+		if (isset($ctr[$prefix.$key]) and $m = $ctr[$prefix.$key]) {
656 655
 			if (is_scalar($val) and $m == md5($val)) {
657 656
 				unset($champs[$key]);
658 657
 			}
@@ -681,7 +680,7 @@  discard block
 block discarded – undo
681 680
 	// de conflit.
682 681
 	$ctrh = $ctrq = $conflits = [];
683 682
 	foreach (array_keys($champs) as $key) {
684
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
683
+		if (isset($ctr[$prefix.$key]) and $m = $ctr[$prefix.$key]) {
685 684
 			$ctrh[$key] = $m;
686 685
 			$ctrq[] = $key;
687 686
 		}
@@ -715,8 +714,8 @@  discard block
 block discarded – undo
715 714
  */
716 715
 function display_conflit_champ($x) {
717 716
 	if (strstr($x, "\n") or strlen($x) > 80) {
718
-		return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
717
+		return "<textarea style='width:99%; height:10em;'>".entites_html($x)."</textarea>\n";
719 718
 	} else {
720
-		return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
719
+		return "<input type='text' size='40' style='width:99%' value=\"".entites_html($x)."\" />\n";
721 720
 	}
722 721
 }
Please login to merge, or discard this patch.
ecrire/plugins/extraire_boutons.php 1 patch
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 /**
@@ -21,31 +21,31 @@  discard block
 block discarded – undo
21 21
  * @return array
22 22
  */
23 23
 function plugins_extraire_boutons_dist($arbre) {
24
-	$les_boutons = null;
25
-	$ret = ['bouton' => [], 'onglet' => []];
26
-	// recuperer les boutons et onglets si necessaire
27
-	spip_xml_match_nodes(',^(bouton|onglet)\s,', $arbre, $les_boutons);
28
-	if (is_array($les_boutons) && count($les_boutons)) {
29
-		$ret['bouton'] = [];
30
-		$ret['onglet'] = [];
31
-		foreach ($les_boutons as $bouton => $val) {
32
-			$bouton = spip_xml_decompose_tag($bouton);
33
-			$type = reset($bouton);
34
-			$bouton = end($bouton);
35
-			if (isset($bouton['id'])) {
36
-				$id = $bouton['id'];
37
-				$val = reset($val);
38
-				if (is_array($val)) {
39
-					$ret[$type][$id]['parent'] = $bouton['parent'] ?? '';
40
-					$ret[$type][$id]['position'] = $bouton['position'] ?? '';
41
-					$ret[$type][$id]['titre'] = isset($val['titre']) ? trim(spip_xml_aplatit($val['titre'])) : '';
42
-					$ret[$type][$id]['icone'] = isset($val['icone']) ? trim(end($val['icone'])) : '';
43
-					$ret[$type][$id]['action'] = isset($val['url']) ? trim(end($val['url'])) : '';
44
-					$ret[$type][$id]['parametres'] = isset($val['args']) ? trim(end($val['args'])) : '';
45
-				}
46
-			}
47
-		}
48
-	}
24
+    $les_boutons = null;
25
+    $ret = ['bouton' => [], 'onglet' => []];
26
+    // recuperer les boutons et onglets si necessaire
27
+    spip_xml_match_nodes(',^(bouton|onglet)\s,', $arbre, $les_boutons);
28
+    if (is_array($les_boutons) && count($les_boutons)) {
29
+        $ret['bouton'] = [];
30
+        $ret['onglet'] = [];
31
+        foreach ($les_boutons as $bouton => $val) {
32
+            $bouton = spip_xml_decompose_tag($bouton);
33
+            $type = reset($bouton);
34
+            $bouton = end($bouton);
35
+            if (isset($bouton['id'])) {
36
+                $id = $bouton['id'];
37
+                $val = reset($val);
38
+                if (is_array($val)) {
39
+                    $ret[$type][$id]['parent'] = $bouton['parent'] ?? '';
40
+                    $ret[$type][$id]['position'] = $bouton['position'] ?? '';
41
+                    $ret[$type][$id]['titre'] = isset($val['titre']) ? trim(spip_xml_aplatit($val['titre'])) : '';
42
+                    $ret[$type][$id]['icone'] = isset($val['icone']) ? trim(end($val['icone'])) : '';
43
+                    $ret[$type][$id]['action'] = isset($val['url']) ? trim(end($val['url'])) : '';
44
+                    $ret[$type][$id]['parametres'] = isset($val['args']) ? trim(end($val['args'])) : '';
45
+                }
46
+            }
47
+        }
48
+    }
49 49
 
50
-	return $ret;
50
+    return $ret;
51 51
 }
Please login to merge, or discard this patch.
ecrire/inc/rubriques.php 2 patches
Spacing   +35 added lines, -35 removed lines patch added patch discarded remove patch
@@ -135,9 +135,9 @@  discard block
 block discarded – undo
135 135
 		sql_updateq(
136 136
 			'spip_rubriques',
137 137
 			['statut' => 'publie', 'date' => date('Y-m-d H:i:s')],
138
-			'id_rubrique=' . intval($id_rubrique)
138
+			'id_rubrique='.intval($id_rubrique)
139 139
 		);
140
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique));
140
+		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique='.intval($id_rubrique));
141 141
 		if (!$id_parent) {
142 142
 			break;
143 143
 		}
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
 			return $id_pred != $id_rubrique;
173 173
 		}
174 174
 		// passer au parent si on a depublie
175
-		$r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred));
175
+		$r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_pred));
176 176
 		$id_pred = $r['id_parent'];
177 177
 	}
178 178
 
@@ -197,14 +197,14 @@  discard block
 block discarded – undo
197 197
 		$date = date('Y-m-d H:i:s');
198 198
 	}
199 199
 	$postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
200
-		' AND date <= ' . sql_quote($date) : '';
200
+		' AND date <= '.sql_quote($date) : '';
201 201
 
202 202
 	if (!$id_rubrique = intval($id_rubrique)) {
203 203
 		return false;
204 204
 	}
205 205
 
206 206
 	// verifier qu'elle existe et est bien publiee
207
-	$r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
207
+	$r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
208 208
 	if (!$r or $r['statut'] !== 'publie') {
209 209
 		return false;
210 210
 	}
@@ -214,12 +214,12 @@  discard block
 block discarded – undo
214 214
 	$compte = [
215 215
 		'articles' => sql_countsel(
216 216
 			'spip_articles',
217
-			'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates"
217
+			'id_rubrique='.intval($id_rubrique)." AND statut='publie'$postdates"
218 218
 		),
219
-		'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"),
219
+		'rubriques' => sql_countsel('spip_rubriques', 'id_parent='.intval($id_rubrique)." AND statut='publie'"),
220 220
 		'documents' => sql_countsel(
221 221
 			'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document',
222
-			'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') "
222
+			'L.id_objet='.intval($id_rubrique)." AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') "
223 223
 		)
224 224
 	];
225 225
 
@@ -244,7 +244,7 @@  discard block
 block discarded – undo
244 244
 		}
245 245
 	}
246 246
 
247
-	sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique));
247
+	sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique='.intval($id_rubrique));
248 248
 
249 249
 #		spip_log("depublier_rubrique $id_pred");
250 250
 	return true;
@@ -307,7 +307,7 @@  discard block
 block discarded – undo
307 307
 
308 308
 	// Afficher les articles post-dates ?
309 309
 	$postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
310
-		'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : '';
310
+		'AND A.date <= '.sql_quote(date('Y-m-d H:i:s')) : '';
311 311
 
312 312
 	$r = sql_select(
313 313
 		'R.id_rubrique AS id, max(A.date) AS date_h',
@@ -319,7 +319,7 @@  discard block
 block discarded – undo
319 319
 		sql_updateq(
320 320
 			'spip_rubriques',
321 321
 			['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
322
-			'id_rubrique=' . intval($row['id'])
322
+			'id_rubrique='.intval($row['id'])
323 323
 		);
324 324
 	}
325 325
 
@@ -345,7 +345,7 @@  discard block
 block discarded – undo
345 345
 			sql_updateq(
346 346
 				'spip_rubriques',
347 347
 				['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
348
-				'id_rubrique=' . intval($row['id'])
348
+				'id_rubrique='.intval($row['id'])
349 349
 			);
350 350
 			$continuer = true;
351 351
 		}
@@ -398,7 +398,7 @@  discard block
 block discarded – undo
398 398
 			and $rows = sql_allfetsel(
399 399
 				'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur',
400 400
 				'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique',
401
-				'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)',
401
+				'R.profondeur='.intval($prof).' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)',
402 402
 				'',
403 403
 				'R.id_secteur',
404 404
 				'0,100'
@@ -437,11 +437,11 @@  discard block
 block discarded – undo
437 437
 			and $rows = sql_allfetsel(
438 438
 				'id_rubrique as id',
439 439
 				'spip_rubriques',
440
-				'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select(
440
+				'profondeur='.intval($prof + 1).' AND id_parent NOT IN ('.sql_get_select(
441 441
 					'zzz.id_rubrique',
442 442
 					'spip_rubriques AS zzz',
443
-					'zzz.profondeur=' . intval($prof)
444
-				) . ')',
443
+					'zzz.profondeur='.intval($prof)
444
+				).')',
445 445
 				'',
446 446
 				'',
447 447
 				'0,100'
@@ -455,7 +455,7 @@  discard block
 block discarded – undo
455 455
 		// si pas de rubrique a profondeur $prof+1 pas la peine de continuer
456 456
 		// si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse)
457 457
 		// on arrete les frais
458
-		if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) {
458
+		if (sql_countsel('spip_rubriques', 'profondeur='.intval($prof + 1))) {
459 459
 			$prof++;
460 460
 			$continuer = true;
461 461
 		}
@@ -463,12 +463,12 @@  discard block
 block discarded – undo
463 463
 
464 464
 	// loger si la table des rubriques semble foireuse
465 465
 	// et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles
466
-	if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) {
466
+	if (sql_countsel('spip_rubriques', 'profondeur>'.intval($prof + 1))) {
467 467
 		spip_log(
468
-			'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)',
468
+			'Les rubriques de profondeur>'.($prof + 1).' semblent suspectes (branches morte ou reference circulaire dans les parents)',
469 469
 			_LOG_CRITIQUE
470 470
 		);
471
-		sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1));
471
+		sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>'.intval($prof + 1));
472 472
 	}
473 473
 
474 474
 	// reparer les articles
@@ -479,7 +479,7 @@  discard block
 block discarded – undo
479 479
 	);
480 480
 
481 481
 	while ($row = sql_fetch($r)) {
482
-		sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id']));
482
+		sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article='.intval($row['id']));
483 483
 	}
484 484
 
485 485
 	// avertir les plugins qui peuvent faire leur mises a jour egalement
@@ -510,7 +510,7 @@  discard block
 block discarded – undo
510 510
 		$t = sql_updateq(
511 511
 			'spip_rubriques',
512 512
 			['lang' => $row['lang'], 'langue_choisie' => 'non'],
513
-			'id_rubrique=' . intval($id_rubrique)
513
+			'id_rubrique='.intval($id_rubrique)
514 514
 		);
515 515
 	}
516 516
 
@@ -555,7 +555,7 @@  discard block
 block discarded – undo
555 555
 		sql_updateq(
556 556
 			'spip_articles',
557 557
 			['lang' => $row['lang'], 'langue_choisie' => 'non'],
558
-			'id_article=' . intval($id_article)
558
+			'id_article='.intval($id_article)
559 559
 		);
560 560
 	}
561 561
 
@@ -630,11 +630,11 @@  discard block
 block discarded – undo
630 630
 				];
631 631
 				// generer un nom de fonction "anonyme" unique
632 632
 				do {
633
-					$functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax());
633
+					$functionname = 'f_calculer_langues_utilisees_'.$boucle->id_table.'_'.time().'_'.random_int(0, mt_getrandmax());
634 634
 				} while (function_exists($functionname));
635 635
 				$code = calculer_boucle('calculer_langues_utilisees', $boucles);
636
-				$code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
637
-				$code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
636
+				$code = '$SP=0; $command=array();$command["connect"] = $connect = "'.$serveur.'"; $Pile=array(0=>array());'."\n".$code;
637
+				$code = 'function '.$functionname.'(){'.$code.'};$res = '.$functionname.'();';
638 638
 				$res = '';
639 639
 				eval($code);
640 640
 				$res = explode(',', $res);
@@ -736,11 +736,11 @@  discard block
 block discarded – undo
736 736
 		$maxiter-- and $filles = sql_allfetsel(
737 737
 			'id_rubrique',
738 738
 			'spip_rubriques',
739
-			sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT')
739
+			sql_in('id_parent', $r).' AND '.sql_in('id_rubrique', $r, 'NOT')
740 740
 		)
741 741
 	) {
742 742
 		$r = join(',', array_column($filles, 'id_rubrique'));
743
-		$branche .= ',' . $r;
743
+		$branche .= ','.$r;
744 744
 	}
745 745
 
746 746
 	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
@@ -780,7 +780,7 @@  discard block
 block discarded – undo
780 780
 
781 781
 	if (isset($b[$id])) {
782 782
 		// Notre branche commence par la rubrique de depart si $tout=true
783
-		return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
783
+		return $tout ? (strlen($b[$id]) ? $b[$id].",$id" : $id) : $b[$id];
784 784
 	}
785 785
 
786 786
 	$hier = '';
@@ -793,11 +793,11 @@  discard block
 block discarded – undo
793 793
 		$maxiter-- and $parents = sql_allfetsel(
794 794
 			'id_parent',
795 795
 			'spip_rubriques',
796
-			sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT')
796
+			sql_in('id_rubrique', $ids_nouveaux_parents).' AND '.sql_in('id_parent', $hier, 'NOT')
797 797
 		)
798 798
 	) {
799 799
 		$ids_nouveaux_parents = join(',', array_column($parents, 'id_parent'));
800
-		$hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
800
+		$hier = $ids_nouveaux_parents.(strlen($hier) ? ','.$hier : '');
801 801
 	}
802 802
 
803 803
 	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
@@ -829,7 +829,7 @@  discard block
 block discarded – undo
829 829
 	include_spip('base/abstract_sql');
830 830
 	if ($check) {
831 831
 		$postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
832
-			'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : '';
832
+			'AND A.date <= '.sql_quote(date('Y-m-d H:i:s')) : '';
833 833
 
834 834
 		$r = sql_select(
835 835
 			'DISTINCT A.id_rubrique AS id',
@@ -846,7 +846,7 @@  discard block
 block discarded – undo
846 846
 	$t = sql_fetsel(
847 847
 		'date',
848 848
 		'spip_articles',
849
-		"statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')),
849
+		"statut='publie' AND date > ".sql_quote(date('Y-m-d H:i:s')),
850 850
 		'',
851 851
 		'date',
852 852
 		'1'
@@ -902,7 +902,7 @@  discard block
 block discarded – undo
902 902
 		$r = sql_getfetsel(
903 903
 			'id_rubrique',
904 904
 			'spip_rubriques',
905
-			'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent),
905
+			'titre = '.sql_quote($titre).' AND id_parent='.intval($id_parent),
906 906
 			$groupby = [],
907 907
 			$orderby = [],
908 908
 			$limit = '',
@@ -938,7 +938,7 @@  discard block
 block discarded – undo
938 938
 			sql_updateq(
939 939
 				'spip_rubriques',
940 940
 				['id_secteur' => $id_secteur, 'lang' => $lang],
941
-				'id_rubrique=' . intval($id_rubrique),
941
+				'id_rubrique='.intval($id_rubrique),
942 942
 				[],
943 943
 				$serveur
944 944
 			);
Please login to merge, or discard this patch.
Indentation   +621 added lines, -621 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  */
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 
@@ -55,65 +55,65 @@  discard block
 block discarded – undo
55 55
  * @return void
56 56
  **/
57 57
 function calculer_rubriques_if($id_rubrique, $modifs, $infos = [], $postdate = false) {
58
-	$statuts_publies = null;
59
-	$neuf = false;
60
-
61
-	// Compat avec l'ancienne signature
62
-	if (is_string($infos)) {
63
-		$infos = ['statut_ancien' => $infos];
64
-	}
65
-	if (!isset($infos['statut_ancien'])) {
66
-		$infos['statut_ancien'] = '';
67
-	}
68
-
69
-	// On recherche quels statuts tester
70
-	if (
71
-		isset($infos['objet'])
72
-		and include_spip('inc/filtres')
73
-		and $declaration_statut = objet_info($infos['objet'], 'statut')
74
-		and is_array($declaration_statut)
75
-	) {
76
-		foreach ($declaration_statut as $champ_statut) {
77
-			if ($champ_statut['champ'] == 'statut') {
78
-				$statuts_publies = array_map('trim', explode(',', $champ_statut['publie']));
79
-				break; // stop on a trouvé le bon champ
80
-			}
81
-		}
82
-	} else {
83
-		$statuts_publies = ['publie'];
84
-	}
85
-
86
-	if (in_array($infos['statut_ancien'], $statuts_publies)) {
87
-		if (
88
-			isset($modifs['statut'])
89
-			or isset($modifs['id_rubrique'])
90
-			or ($postdate and strtotime($postdate) > time())
91
-		) {
92
-			$neuf |= depublier_branche_rubrique_if($id_rubrique);
93
-		}
94
-		// ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur
95
-		if ($postdate) {
96
-			calculer_prochain_postdate(true);
97
-			$neuf |= (strtotime($postdate) <= time()); // par securite
98
-		} elseif (isset($modifs['id_rubrique'])) {
99
-			$neuf |= publier_branche_rubrique($modifs['id_rubrique']);
100
-		}
101
-	} elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) {
102
-		if ($postdate) {
103
-			calculer_prochain_postdate(true);
104
-			$neuf |= (strtotime($postdate) <= time()); // par securite
105
-		} else {
106
-			$neuf |= publier_branche_rubrique($id_rubrique);
107
-		}
108
-	}
109
-
110
-	if ($neuf) {
111
-		// Sauver la date de la derniere mise a jour (pour menu_rubriques)
112
-		ecrire_meta('date_calcul_rubriques', date('U'));
113
-	}
114
-
115
-	$langues = calculer_langues_utilisees();
116
-	ecrire_meta('langues_utilisees', $langues);
58
+    $statuts_publies = null;
59
+    $neuf = false;
60
+
61
+    // Compat avec l'ancienne signature
62
+    if (is_string($infos)) {
63
+        $infos = ['statut_ancien' => $infos];
64
+    }
65
+    if (!isset($infos['statut_ancien'])) {
66
+        $infos['statut_ancien'] = '';
67
+    }
68
+
69
+    // On recherche quels statuts tester
70
+    if (
71
+        isset($infos['objet'])
72
+        and include_spip('inc/filtres')
73
+        and $declaration_statut = objet_info($infos['objet'], 'statut')
74
+        and is_array($declaration_statut)
75
+    ) {
76
+        foreach ($declaration_statut as $champ_statut) {
77
+            if ($champ_statut['champ'] == 'statut') {
78
+                $statuts_publies = array_map('trim', explode(',', $champ_statut['publie']));
79
+                break; // stop on a trouvé le bon champ
80
+            }
81
+        }
82
+    } else {
83
+        $statuts_publies = ['publie'];
84
+    }
85
+
86
+    if (in_array($infos['statut_ancien'], $statuts_publies)) {
87
+        if (
88
+            isset($modifs['statut'])
89
+            or isset($modifs['id_rubrique'])
90
+            or ($postdate and strtotime($postdate) > time())
91
+        ) {
92
+            $neuf |= depublier_branche_rubrique_if($id_rubrique);
93
+        }
94
+        // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur
95
+        if ($postdate) {
96
+            calculer_prochain_postdate(true);
97
+            $neuf |= (strtotime($postdate) <= time()); // par securite
98
+        } elseif (isset($modifs['id_rubrique'])) {
99
+            $neuf |= publier_branche_rubrique($modifs['id_rubrique']);
100
+        }
101
+    } elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) {
102
+        if ($postdate) {
103
+            calculer_prochain_postdate(true);
104
+            $neuf |= (strtotime($postdate) <= time()); // par securite
105
+        } else {
106
+            $neuf |= publier_branche_rubrique($id_rubrique);
107
+        }
108
+    }
109
+
110
+    if ($neuf) {
111
+        // Sauver la date de la derniere mise a jour (pour menu_rubriques)
112
+        ecrire_meta('date_calcul_rubriques', date('U'));
113
+    }
114
+
115
+    $langues = calculer_langues_utilisees();
116
+    ecrire_meta('langues_utilisees', $langues);
117 117
 }
118 118
 
119 119
 
@@ -131,22 +131,22 @@  discard block
 block discarded – undo
131 131
  *     true si le statut change effectivement
132 132
  */
133 133
 function publier_branche_rubrique($id_rubrique) {
134
-	$id_pred = $id_rubrique;
135
-	while (true) {
136
-		sql_updateq(
137
-			'spip_rubriques',
138
-			['statut' => 'publie', 'date' => date('Y-m-d H:i:s')],
139
-			'id_rubrique=' . intval($id_rubrique)
140
-		);
141
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique));
142
-		if (!$id_parent) {
143
-			break;
144
-		}
145
-		$id_rubrique = $id_parent;
146
-	}
134
+    $id_pred = $id_rubrique;
135
+    while (true) {
136
+        sql_updateq(
137
+            'spip_rubriques',
138
+            ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')],
139
+            'id_rubrique=' . intval($id_rubrique)
140
+        );
141
+        $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique));
142
+        if (!$id_parent) {
143
+            break;
144
+        }
145
+        $id_rubrique = $id_parent;
146
+    }
147 147
 
148 148
 #	spip_log(" publier_branche_rubrique($id_rubrique $id_pred");
149
-	return $id_pred != $id_rubrique;
149
+    return $id_pred != $id_rubrique;
150 150
 }
151 151
 
152 152
 /**
@@ -164,20 +164,20 @@  discard block
 block discarded – undo
164 164
  *     true si le statut change effectivement
165 165
  */
166 166
 function depublier_branche_rubrique_if($id_rubrique) {
167
-	$date = date('Y-m-d H:i:s'); // figer la date
168
-
169
-	#	spip_log("depublier_branche_rubrique($id_rubrique ?");
170
-	$id_pred = $id_rubrique;
171
-	while ($id_pred) {
172
-		if (!depublier_rubrique_if($id_pred, $date)) {
173
-			return $id_pred != $id_rubrique;
174
-		}
175
-		// passer au parent si on a depublie
176
-		$r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred));
177
-		$id_pred = $r['id_parent'];
178
-	}
179
-
180
-	return $id_pred != $id_rubrique;
167
+    $date = date('Y-m-d H:i:s'); // figer la date
168
+
169
+    #	spip_log("depublier_branche_rubrique($id_rubrique ?");
170
+    $id_pred = $id_rubrique;
171
+    while ($id_pred) {
172
+        if (!depublier_rubrique_if($id_pred, $date)) {
173
+            return $id_pred != $id_rubrique;
174
+        }
175
+        // passer au parent si on a depublie
176
+        $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred));
177
+        $id_pred = $r['id_parent'];
178
+    }
179
+
180
+    return $id_pred != $id_rubrique;
181 181
 }
182 182
 
183 183
 /**
@@ -194,61 +194,61 @@  discard block
 block discarded – undo
194 194
  *    true si la rubrique a été dépubliée
195 195
  */
196 196
 function depublier_rubrique_if($id_rubrique, $date = null) {
197
-	if (is_null($date)) {
198
-		$date = date('Y-m-d H:i:s');
199
-	}
200
-	$postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
201
-		' AND date <= ' . sql_quote($date) : '';
202
-
203
-	if (!$id_rubrique = intval($id_rubrique)) {
204
-		return false;
205
-	}
206
-
207
-	// verifier qu'elle existe et est bien publiee
208
-	$r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
209
-	if (!$r or $r['statut'] !== 'publie') {
210
-		return false;
211
-	}
212
-
213
-	// On met le nombre de chaque type d'enfants dans un tableau
214
-	// Le type de l'objet est au pluriel
215
-	$compte = [
216
-		'articles' => sql_countsel(
217
-			'spip_articles',
218
-			'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates"
219
-		),
220
-		'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"),
221
-		'documents' => sql_countsel(
222
-			'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document',
223
-			'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') "
224
-		)
225
-	];
226
-
227
-	// On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
228
-	$compte = pipeline(
229
-		'objet_compte_enfants',
230
-		[
231
-			'args' => [
232
-				'objet' => 'rubrique',
233
-				'id_objet' => $id_rubrique,
234
-				'statut' => 'publie',
235
-				'date' => $date
236
-			],
237
-			'data' => $compte
238
-		]
239
-	);
240
-
241
-	// S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas
242
-	foreach ($compte as $objet => $n) {
243
-		if ($n) {
244
-			return false;
245
-		}
246
-	}
247
-
248
-	sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique));
197
+    if (is_null($date)) {
198
+        $date = date('Y-m-d H:i:s');
199
+    }
200
+    $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
201
+        ' AND date <= ' . sql_quote($date) : '';
202
+
203
+    if (!$id_rubrique = intval($id_rubrique)) {
204
+        return false;
205
+    }
206
+
207
+    // verifier qu'elle existe et est bien publiee
208
+    $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
209
+    if (!$r or $r['statut'] !== 'publie') {
210
+        return false;
211
+    }
212
+
213
+    // On met le nombre de chaque type d'enfants dans un tableau
214
+    // Le type de l'objet est au pluriel
215
+    $compte = [
216
+        'articles' => sql_countsel(
217
+            'spip_articles',
218
+            'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates"
219
+        ),
220
+        'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"),
221
+        'documents' => sql_countsel(
222
+            'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document',
223
+            'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') "
224
+        )
225
+    ];
226
+
227
+    // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
228
+    $compte = pipeline(
229
+        'objet_compte_enfants',
230
+        [
231
+            'args' => [
232
+                'objet' => 'rubrique',
233
+                'id_objet' => $id_rubrique,
234
+                'statut' => 'publie',
235
+                'date' => $date
236
+            ],
237
+            'data' => $compte
238
+        ]
239
+    );
240
+
241
+    // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas
242
+    foreach ($compte as $objet => $n) {
243
+        if ($n) {
244
+            return false;
245
+        }
246
+    }
247
+
248
+    sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique));
249 249
 
250 250
 #		spip_log("depublier_rubrique $id_pred");
251
-	return true;
251
+    return true;
252 252
 }
253 253
 
254 254
 
@@ -271,18 +271,18 @@  discard block
 block discarded – undo
271 271
  **/
272 272
 function calculer_rubriques() {
273 273
 
274
-	calculer_rubriques_publiees();
274
+    calculer_rubriques_publiees();
275 275
 
276
-	// Apres chaque (de)publication
277
-	// recalculer les langues utilisees sur le site
278
-	$langues = calculer_langues_utilisees();
279
-	ecrire_meta('langues_utilisees', $langues);
276
+    // Apres chaque (de)publication
277
+    // recalculer les langues utilisees sur le site
278
+    $langues = calculer_langues_utilisees();
279
+    ecrire_meta('langues_utilisees', $langues);
280 280
 
281
-	// Sauver la date de la derniere mise a jour (pour menu_rubriques)
282
-	ecrire_meta('date_calcul_rubriques', date('U'));
281
+    // Sauver la date de la derniere mise a jour (pour menu_rubriques)
282
+    ecrire_meta('date_calcul_rubriques', date('U'));
283 283
 
284
-	// on calcule la date du prochain article post-date
285
-	calculer_prochain_postdate();
284
+    // on calcule la date du prochain article post-date
285
+    calculer_prochain_postdate();
286 286
 }
287 287
 
288 288
 
@@ -299,61 +299,61 @@  discard block
 block discarded – undo
299 299
  **/
300 300
 function calculer_rubriques_publiees() {
301 301
 
302
-	// Mettre les compteurs a zero
303
-	sql_updateq('spip_rubriques', ['date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa']);
304
-
305
-	//
306
-	// Publier et dater les rubriques qui ont un article publie
307
-	//
308
-
309
-	// Afficher les articles post-dates ?
310
-	$postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
311
-		'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : '';
312
-
313
-	$r = sql_select(
314
-		'R.id_rubrique AS id, max(A.date) AS date_h',
315
-		'spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique',
316
-		"A.date>R.date_tmp AND A.statut='publie' $postdates ",
317
-		'R.id_rubrique'
318
-	);
319
-	while ($row = sql_fetch($r)) {
320
-		sql_updateq(
321
-			'spip_rubriques',
322
-			['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
323
-			'id_rubrique=' . intval($row['id'])
324
-		);
325
-	}
326
-
327
-	// point d'entree pour permettre a des plugins de gerer le statut
328
-	// autrement (par ex: toute rubrique est publiee des sa creation)
329
-	// Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates
330
-	// c'est statut_tmp/date_tmp qu'il doit modifier
331
-	// [C'est un trigger... a renommer en trig_calculer_rubriques ?]
332
-	pipeline('calculer_rubriques', null);
333
-
334
-
335
-	// Les rubriques qui ont une rubrique fille plus recente
336
-	// on tourne tant que les donnees remontent vers la racine.
337
-	do {
338
-		$continuer = false;
339
-		$r = sql_select(
340
-			'R.id_rubrique AS id, max(SR.date_tmp) AS date_h',
341
-			'spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent',
342
-			"(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ",
343
-			'R.id_rubrique'
344
-		);
345
-		while ($row = sql_fetch($r)) {
346
-			sql_updateq(
347
-				'spip_rubriques',
348
-				['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
349
-				'id_rubrique=' . intval($row['id'])
350
-			);
351
-			$continuer = true;
352
-		}
353
-	} while ($continuer);
354
-
355
-	// Enregistrement des modifs
356
-	sql_update('spip_rubriques', ['date' => 'date_tmp', 'statut' => 'statut_tmp']);
302
+    // Mettre les compteurs a zero
303
+    sql_updateq('spip_rubriques', ['date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa']);
304
+
305
+    //
306
+    // Publier et dater les rubriques qui ont un article publie
307
+    //
308
+
309
+    // Afficher les articles post-dates ?
310
+    $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
311
+        'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : '';
312
+
313
+    $r = sql_select(
314
+        'R.id_rubrique AS id, max(A.date) AS date_h',
315
+        'spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique',
316
+        "A.date>R.date_tmp AND A.statut='publie' $postdates ",
317
+        'R.id_rubrique'
318
+    );
319
+    while ($row = sql_fetch($r)) {
320
+        sql_updateq(
321
+            'spip_rubriques',
322
+            ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
323
+            'id_rubrique=' . intval($row['id'])
324
+        );
325
+    }
326
+
327
+    // point d'entree pour permettre a des plugins de gerer le statut
328
+    // autrement (par ex: toute rubrique est publiee des sa creation)
329
+    // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates
330
+    // c'est statut_tmp/date_tmp qu'il doit modifier
331
+    // [C'est un trigger... a renommer en trig_calculer_rubriques ?]
332
+    pipeline('calculer_rubriques', null);
333
+
334
+
335
+    // Les rubriques qui ont une rubrique fille plus recente
336
+    // on tourne tant que les donnees remontent vers la racine.
337
+    do {
338
+        $continuer = false;
339
+        $r = sql_select(
340
+            'R.id_rubrique AS id, max(SR.date_tmp) AS date_h',
341
+            'spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent',
342
+            "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ",
343
+            'R.id_rubrique'
344
+        );
345
+        while ($row = sql_fetch($r)) {
346
+            sql_updateq(
347
+                'spip_rubriques',
348
+                ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
349
+                'id_rubrique=' . intval($row['id'])
350
+            );
351
+            $continuer = true;
352
+        }
353
+    } while ($continuer);
354
+
355
+    // Enregistrement des modifs
356
+    sql_update('spip_rubriques', ['date' => 'date_tmp', 'statut' => 'statut_tmp']);
357 357
 }
358 358
 
359 359
 /**
@@ -368,123 +368,123 @@  discard block
 block discarded – undo
368 368
  * @return void
369 369
  **/
370 370
 function propager_les_secteurs() {
371
-	// Profondeur 0
372
-	// Toutes les rubriques racines sont de profondeur 0
373
-	// et fixer les id_secteur des rubriques racines
374
-	sql_update('spip_rubriques', ['id_secteur' => 'id_rubrique', 'profondeur' => 0], 'id_parent=0');
375
-	// Toute rubrique non racine est de profondeur >0
376
-	sql_updateq('spip_rubriques', ['profondeur' => 1], 'id_parent<>0 AND profondeur=0');
377
-
378
-	// securite : pas plus d'iteration que de rubriques dans la base
379
-	$maxiter = sql_countsel('spip_rubriques');
380
-
381
-	// reparer les rubriques qui n'ont pas l'id_secteur de leur parent
382
-	// on fait profondeur par profondeur
383
-
384
-	$prof = 0;
385
-	do {
386
-		$continuer = false;
387
-
388
-		// Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes
389
-		// on fixe le profondeur $prof+1
390
-
391
-		// Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1
392
-		// on teste A.profondeur > $prof+1 car :
393
-		// - toutes les rubriques de profondeur 0 à $prof sont bonnes
394
-		// - si A.profondeur = $prof+1 c'est bon
395
-		// - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques
396
-		$maxiter2 = $maxiter;
397
-		while (
398
-			$maxiter2--
399
-			and $rows = sql_allfetsel(
400
-				'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur',
401
-				'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique',
402
-				'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)',
403
-				'',
404
-				'R.id_secteur',
405
-				'0,100'
406
-			)
407
-		) {
408
-			$id_secteur = null;
409
-			$ids = [];
410
-			while ($row = array_shift($rows)) {
411
-				if ($row['id_secteur'] !== $id_secteur) {
412
-					if (count($ids)) {
413
-						sql_updateq(
414
-							'spip_rubriques',
415
-							['id_secteur' => $id_secteur, 'profondeur' => $prof + 1],
416
-							sql_in('id_rubrique', $ids)
417
-						);
418
-					}
419
-					$id_secteur = $row['id_secteur'];
420
-					$ids = [];
421
-				}
422
-				$ids[] = $row['id'];
423
-			}
424
-			if (count($ids)) {
425
-				sql_updateq(
426
-					'spip_rubriques',
427
-					['id_secteur' => $id_secteur, 'profondeur' => $prof + 1],
428
-					sql_in('id_rubrique', $ids)
429
-				);
430
-			}
431
-		}
432
-
433
-
434
-		// Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees
435
-		$maxiter2 = $maxiter;
436
-		while (
437
-			$maxiter2--
438
-			and $rows = sql_allfetsel(
439
-				'id_rubrique as id',
440
-				'spip_rubriques',
441
-				'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select(
442
-					'zzz.id_rubrique',
443
-					'spip_rubriques AS zzz',
444
-					'zzz.profondeur=' . intval($prof)
445
-				) . ')',
446
-				'',
447
-				'',
448
-				'0,100'
449
-			)
450
-		) {
451
-			$rows = array_column($rows, 'id');
452
-			sql_updateq('spip_rubriques', ['profondeur' => $prof + 2], sql_in('id_rubrique', $rows));
453
-		}
454
-
455
-		// ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK
456
-		// si pas de rubrique a profondeur $prof+1 pas la peine de continuer
457
-		// si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse)
458
-		// on arrete les frais
459
-		if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) {
460
-			$prof++;
461
-			$continuer = true;
462
-		}
463
-	} while ($continuer and $maxiter--);
464
-
465
-	// loger si la table des rubriques semble foireuse
466
-	// et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles
467
-	if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) {
468
-		spip_log(
469
-			'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)',
470
-			_LOG_CRITIQUE
471
-		);
472
-		sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1));
473
-	}
474
-
475
-	// reparer les articles
476
-	$r = sql_select(
477
-		'A.id_article AS id, R.id_secteur AS secteur',
478
-		'spip_articles AS A, spip_rubriques AS R',
479
-		'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur'
480
-	);
481
-
482
-	while ($row = sql_fetch($r)) {
483
-		sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id']));
484
-	}
485
-
486
-	// avertir les plugins qui peuvent faire leur mises a jour egalement
487
-	pipeline('trig_propager_les_secteurs', '');
371
+    // Profondeur 0
372
+    // Toutes les rubriques racines sont de profondeur 0
373
+    // et fixer les id_secteur des rubriques racines
374
+    sql_update('spip_rubriques', ['id_secteur' => 'id_rubrique', 'profondeur' => 0], 'id_parent=0');
375
+    // Toute rubrique non racine est de profondeur >0
376
+    sql_updateq('spip_rubriques', ['profondeur' => 1], 'id_parent<>0 AND profondeur=0');
377
+
378
+    // securite : pas plus d'iteration que de rubriques dans la base
379
+    $maxiter = sql_countsel('spip_rubriques');
380
+
381
+    // reparer les rubriques qui n'ont pas l'id_secteur de leur parent
382
+    // on fait profondeur par profondeur
383
+
384
+    $prof = 0;
385
+    do {
386
+        $continuer = false;
387
+
388
+        // Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes
389
+        // on fixe le profondeur $prof+1
390
+
391
+        // Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1
392
+        // on teste A.profondeur > $prof+1 car :
393
+        // - toutes les rubriques de profondeur 0 à $prof sont bonnes
394
+        // - si A.profondeur = $prof+1 c'est bon
395
+        // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques
396
+        $maxiter2 = $maxiter;
397
+        while (
398
+            $maxiter2--
399
+            and $rows = sql_allfetsel(
400
+                'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur',
401
+                'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique',
402
+                'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)',
403
+                '',
404
+                'R.id_secteur',
405
+                '0,100'
406
+            )
407
+        ) {
408
+            $id_secteur = null;
409
+            $ids = [];
410
+            while ($row = array_shift($rows)) {
411
+                if ($row['id_secteur'] !== $id_secteur) {
412
+                    if (count($ids)) {
413
+                        sql_updateq(
414
+                            'spip_rubriques',
415
+                            ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1],
416
+                            sql_in('id_rubrique', $ids)
417
+                        );
418
+                    }
419
+                    $id_secteur = $row['id_secteur'];
420
+                    $ids = [];
421
+                }
422
+                $ids[] = $row['id'];
423
+            }
424
+            if (count($ids)) {
425
+                sql_updateq(
426
+                    'spip_rubriques',
427
+                    ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1],
428
+                    sql_in('id_rubrique', $ids)
429
+                );
430
+            }
431
+        }
432
+
433
+
434
+        // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees
435
+        $maxiter2 = $maxiter;
436
+        while (
437
+            $maxiter2--
438
+            and $rows = sql_allfetsel(
439
+                'id_rubrique as id',
440
+                'spip_rubriques',
441
+                'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select(
442
+                    'zzz.id_rubrique',
443
+                    'spip_rubriques AS zzz',
444
+                    'zzz.profondeur=' . intval($prof)
445
+                ) . ')',
446
+                '',
447
+                '',
448
+                '0,100'
449
+            )
450
+        ) {
451
+            $rows = array_column($rows, 'id');
452
+            sql_updateq('spip_rubriques', ['profondeur' => $prof + 2], sql_in('id_rubrique', $rows));
453
+        }
454
+
455
+        // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK
456
+        // si pas de rubrique a profondeur $prof+1 pas la peine de continuer
457
+        // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse)
458
+        // on arrete les frais
459
+        if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) {
460
+            $prof++;
461
+            $continuer = true;
462
+        }
463
+    } while ($continuer and $maxiter--);
464
+
465
+    // loger si la table des rubriques semble foireuse
466
+    // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles
467
+    if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) {
468
+        spip_log(
469
+            'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)',
470
+            _LOG_CRITIQUE
471
+        );
472
+        sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1));
473
+    }
474
+
475
+    // reparer les articles
476
+    $r = sql_select(
477
+        'A.id_article AS id, R.id_secteur AS secteur',
478
+        'spip_articles AS A, spip_rubriques AS R',
479
+        'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur'
480
+    );
481
+
482
+    while ($row = sql_fetch($r)) {
483
+        sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id']));
484
+    }
485
+
486
+    // avertir les plugins qui peuvent faire leur mises a jour egalement
487
+    pipeline('trig_propager_les_secteurs', '');
488 488
 }
489 489
 
490 490
 
@@ -499,23 +499,23 @@  discard block
 block discarded – undo
499 499
  *     true si un changement a eu lieu
500 500
  **/
501 501
 function calculer_langues_rubriques_etape() {
502
-	$s = sql_select(
503
-		'A.id_rubrique AS id_rubrique, R.lang AS lang',
504
-		'spip_rubriques AS A, spip_rubriques AS R',
505
-		"A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang"
506
-	);
507
-
508
-	$t = false;
509
-	while ($row = sql_fetch($s)) {
510
-		$id_rubrique = $row['id_rubrique'];
511
-		$t = sql_updateq(
512
-			'spip_rubriques',
513
-			['lang' => $row['lang'], 'langue_choisie' => 'non'],
514
-			'id_rubrique=' . intval($id_rubrique)
515
-		);
516
-	}
517
-
518
-	return $t;
502
+    $s = sql_select(
503
+        'A.id_rubrique AS id_rubrique, R.lang AS lang',
504
+        'spip_rubriques AS A, spip_rubriques AS R',
505
+        "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang"
506
+    );
507
+
508
+    $t = false;
509
+    while ($row = sql_fetch($s)) {
510
+        $id_rubrique = $row['id_rubrique'];
511
+        $t = sql_updateq(
512
+            'spip_rubriques',
513
+            ['lang' => $row['lang'], 'langue_choisie' => 'non'],
514
+            'id_rubrique=' . intval($id_rubrique)
515
+        );
516
+    }
517
+
518
+    return $t;
519 519
 }
520 520
 
521 521
 /**
@@ -535,38 +535,38 @@  discard block
 block discarded – undo
535 535
  **/
536 536
 function calculer_langues_rubriques() {
537 537
 
538
-	// rubriques (recursivite)
539
-	sql_updateq(
540
-		'spip_rubriques',
541
-		['lang' => $GLOBALS['meta']['langue_site'], 'langue_choisie' => 'non'],
542
-		"id_parent=0 AND langue_choisie != 'oui'"
543
-	);
544
-	while (calculer_langues_rubriques_etape()) {
545
-		;
546
-	}
547
-
548
-	// articles
549
-	$s = sql_select(
550
-		'A.id_article AS id_article, R.lang AS lang',
551
-		'spip_articles AS A, spip_rubriques AS R',
552
-		"A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang"
553
-	);
554
-	while ($row = sql_fetch($s)) {
555
-		$id_article = $row['id_article'];
556
-		sql_updateq(
557
-			'spip_articles',
558
-			['lang' => $row['lang'], 'langue_choisie' => 'non'],
559
-			'id_article=' . intval($id_article)
560
-		);
561
-	}
562
-
563
-	if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
564
-		$langues = calculer_langues_utilisees();
565
-		ecrire_meta('langues_utilisees', $langues);
566
-	}
567
-
568
-	// avertir les plugins qui peuvent faire leur mises a jour egalement
569
-	pipeline('trig_calculer_langues_rubriques', '');
538
+    // rubriques (recursivite)
539
+    sql_updateq(
540
+        'spip_rubriques',
541
+        ['lang' => $GLOBALS['meta']['langue_site'], 'langue_choisie' => 'non'],
542
+        "id_parent=0 AND langue_choisie != 'oui'"
543
+    );
544
+    while (calculer_langues_rubriques_etape()) {
545
+        ;
546
+    }
547
+
548
+    // articles
549
+    $s = sql_select(
550
+        'A.id_article AS id_article, R.lang AS lang',
551
+        'spip_articles AS A, spip_rubriques AS R',
552
+        "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang"
553
+    );
554
+    while ($row = sql_fetch($s)) {
555
+        $id_article = $row['id_article'];
556
+        sql_updateq(
557
+            'spip_articles',
558
+            ['lang' => $row['lang'], 'langue_choisie' => 'non'],
559
+            'id_article=' . intval($id_article)
560
+        );
561
+    }
562
+
563
+    if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
564
+        $langues = calculer_langues_utilisees();
565
+        ecrire_meta('langues_utilisees', $langues);
566
+    }
567
+
568
+    // avertir les plugins qui peuvent faire leur mises a jour egalement
569
+    pipeline('trig_calculer_langues_rubriques', '');
570 570
 }
571 571
 
572 572
 
@@ -583,80 +583,80 @@  discard block
 block discarded – undo
583 583
  *    Liste des langues utilisées séparées par des virgules
584 584
  **/
585 585
 function calculer_langues_utilisees($serveur = '') {
586
-	include_spip('public/interfaces');
587
-	include_spip('public/compiler');
588
-	include_spip('public/composer');
589
-	include_spip('public/phraser_html');
590
-	$langues = [];
591
-
592
-	$langues[$GLOBALS['meta']['langue_site']] = 1;
593
-
594
-	include_spip('base/objets');
595
-	$tables = lister_tables_objets_sql();
596
-	$trouver_table = charger_fonction('trouver_table', 'base');
597
-
598
-	foreach (array_keys($tables) as $t) {
599
-		$desc = $trouver_table($t, $serveur);
600
-		// c'est une table avec des langues
601
-		if (
602
-			$desc['exist']
603
-			and isset($desc['field']['lang'])
604
-			and isset($desc['field']['langue_choisie'])
605
-		) {
606
-			$boucle = new Boucle();
607
-			$boucle->show = $desc;
608
-			$boucle->nom = 'calculer_langues_utilisees';
609
-			$boucle->id_boucle = $desc['table_objet'];
610
-			$boucle->id_table = $desc['table_objet'];
611
-			$boucle->primary = $desc['key']['PRIMARY KEY'] ?? '';
612
-			$boucle->sql_serveur = $serveur;
613
-			$boucle->select[] = 'DISTINCT lang';
614
-			$boucle->from[$desc['table_objet']] = $t;
615
-			$boucle->separateur[] = ',';
616
-			$boucle->return = '$Pile[$SP][\'lang\']';
617
-			$boucle->iterateur = 'sql';
618
-
619
-			$boucle->descr['nom'] = 'calculer_langues_utilisees'; // eviter notice php
620
-			$boucle->descr['sourcefile'] = 'internal';
621
-			$boucle->descr['gram'] = 'html';
622
-
623
-			$boucle = pipeline('pre_boucle', $boucle);
624
-
625
-			if (
626
-				isset($desc['statut'])
627
-				and $desc['statut']
628
-			) {
629
-				$boucles = [
630
-					'calculer_langues_utilisees' => $boucle,
631
-				];
632
-				// generer un nom de fonction "anonyme" unique
633
-				do {
634
-					$functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax());
635
-				} while (function_exists($functionname));
636
-				$code = calculer_boucle('calculer_langues_utilisees', $boucles);
637
-				$code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
638
-				$code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
639
-				$res = '';
640
-				eval($code);
641
-				$res = explode(',', $res);
642
-				foreach ($res as $lang) {
643
-					$langues[$lang] = 1;
644
-				}
645
-			} else {
646
-				$res = sql_select(implode(',', $boucle->select), $boucle->from);
647
-				while ($row = sql_fetch($res)) {
648
-					$langues[$row['lang']] = 1;
649
-				}
650
-			}
651
-		}
652
-	}
653
-
654
-	$langues = array_filter(array_keys($langues));
655
-	sort($langues);
656
-	$langues = join(',', $langues);
657
-	spip_log("langues utilisees: $langues");
658
-
659
-	return $langues;
586
+    include_spip('public/interfaces');
587
+    include_spip('public/compiler');
588
+    include_spip('public/composer');
589
+    include_spip('public/phraser_html');
590
+    $langues = [];
591
+
592
+    $langues[$GLOBALS['meta']['langue_site']] = 1;
593
+
594
+    include_spip('base/objets');
595
+    $tables = lister_tables_objets_sql();
596
+    $trouver_table = charger_fonction('trouver_table', 'base');
597
+
598
+    foreach (array_keys($tables) as $t) {
599
+        $desc = $trouver_table($t, $serveur);
600
+        // c'est une table avec des langues
601
+        if (
602
+            $desc['exist']
603
+            and isset($desc['field']['lang'])
604
+            and isset($desc['field']['langue_choisie'])
605
+        ) {
606
+            $boucle = new Boucle();
607
+            $boucle->show = $desc;
608
+            $boucle->nom = 'calculer_langues_utilisees';
609
+            $boucle->id_boucle = $desc['table_objet'];
610
+            $boucle->id_table = $desc['table_objet'];
611
+            $boucle->primary = $desc['key']['PRIMARY KEY'] ?? '';
612
+            $boucle->sql_serveur = $serveur;
613
+            $boucle->select[] = 'DISTINCT lang';
614
+            $boucle->from[$desc['table_objet']] = $t;
615
+            $boucle->separateur[] = ',';
616
+            $boucle->return = '$Pile[$SP][\'lang\']';
617
+            $boucle->iterateur = 'sql';
618
+
619
+            $boucle->descr['nom'] = 'calculer_langues_utilisees'; // eviter notice php
620
+            $boucle->descr['sourcefile'] = 'internal';
621
+            $boucle->descr['gram'] = 'html';
622
+
623
+            $boucle = pipeline('pre_boucle', $boucle);
624
+
625
+            if (
626
+                isset($desc['statut'])
627
+                and $desc['statut']
628
+            ) {
629
+                $boucles = [
630
+                    'calculer_langues_utilisees' => $boucle,
631
+                ];
632
+                // generer un nom de fonction "anonyme" unique
633
+                do {
634
+                    $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax());
635
+                } while (function_exists($functionname));
636
+                $code = calculer_boucle('calculer_langues_utilisees', $boucles);
637
+                $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
638
+                $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
639
+                $res = '';
640
+                eval($code);
641
+                $res = explode(',', $res);
642
+                foreach ($res as $lang) {
643
+                    $langues[$lang] = 1;
644
+                }
645
+            } else {
646
+                $res = sql_select(implode(',', $boucle->select), $boucle->from);
647
+                while ($row = sql_fetch($res)) {
648
+                    $langues[$row['lang']] = 1;
649
+                }
650
+            }
651
+        }
652
+    }
653
+
654
+    $langues = array_filter(array_keys($langues));
655
+    sort($langues);
656
+    $langues = join(',', $langues);
657
+    spip_log("langues utilisees: $langues");
658
+
659
+    return $langues;
660 660
 }
661 661
 
662 662
 /**
@@ -673,9 +673,9 @@  discard block
 block discarded – undo
673 673
  *     incluant les rubriques noeuds et toutes leurs descendances
674 674
  */
675 675
 function calcul_branche_in($id) {
676
-	$calcul_branche_in = charger_fonction('calcul_branche_in', 'inc');
676
+    $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc');
677 677
 
678
-	return $calcul_branche_in($id);
678
+    return $calcul_branche_in($id);
679 679
 }
680 680
 
681 681
 /**
@@ -693,9 +693,9 @@  discard block
 block discarded – undo
693 693
  *     incluant les rubriques transmises et toutes leurs parentées
694 694
  */
695 695
 function calcul_hierarchie_in($id, $tout = true) {
696
-	$calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc');
696
+    $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc');
697 697
 
698
-	return $calcul_hierarchie_in($id, $tout);
698
+    return $calcul_hierarchie_in($id, $tout);
699 699
 }
700 700
 
701 701
 
@@ -716,40 +716,40 @@  discard block
 block discarded – undo
716 716
  *     incluant les rubriques noeuds et toutes leurs descendances
717 717
  */
718 718
 function inc_calcul_branche_in_dist($id) {
719
-	static $b = [];
720
-
721
-	// normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
722
-	if (!is_array($id)) {
723
-		$id = explode(',', $id);
724
-	}
725
-	$id = join(',', array_map('intval', $id));
726
-	if (isset($b[$id])) {
727
-		return $b[$id];
728
-	}
729
-
730
-	// Notre branche commence par la rubrique de depart
731
-	$branche = $r = $id;
732
-
733
-	// On ajoute une generation (les filles de la generation precedente)
734
-	// jusqu'a epuisement, en se protegeant des references circulaires
735
-	$maxiter = 10000;
736
-	while (
737
-		$maxiter-- and $filles = sql_allfetsel(
738
-			'id_rubrique',
739
-			'spip_rubriques',
740
-			sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT')
741
-		)
742
-	) {
743
-		$r = join(',', array_column($filles, 'id_rubrique'));
744
-		$branche .= ',' . $r;
745
-	}
746
-
747
-	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
748
-	if (strlen($branche) < 10000) {
749
-		$b[$id] = $branche;
750
-	}
751
-
752
-	return $branche;
719
+    static $b = [];
720
+
721
+    // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
722
+    if (!is_array($id)) {
723
+        $id = explode(',', $id);
724
+    }
725
+    $id = join(',', array_map('intval', $id));
726
+    if (isset($b[$id])) {
727
+        return $b[$id];
728
+    }
729
+
730
+    // Notre branche commence par la rubrique de depart
731
+    $branche = $r = $id;
732
+
733
+    // On ajoute une generation (les filles de la generation precedente)
734
+    // jusqu'a epuisement, en se protegeant des references circulaires
735
+    $maxiter = 10000;
736
+    while (
737
+        $maxiter-- and $filles = sql_allfetsel(
738
+            'id_rubrique',
739
+            'spip_rubriques',
740
+            sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT')
741
+        )
742
+    ) {
743
+        $r = join(',', array_column($filles, 'id_rubrique'));
744
+        $branche .= ',' . $r;
745
+    }
746
+
747
+    # securite pour ne pas plomber la conso memoire sur les sites prolifiques
748
+    if (strlen($branche) < 10000) {
749
+        $b[$id] = $branche;
750
+    }
751
+
752
+    return $branche;
753 753
 }
754 754
 
755 755
 
@@ -771,45 +771,45 @@  discard block
 block discarded – undo
771 771
  *     incluant les rubriques transmises et toutes leurs parentées
772 772
  */
773 773
 function inc_calcul_hierarchie_in_dist($id, $tout = true) {
774
-	static $b = [];
775
-
776
-	// normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
777
-	if (!is_array($id)) {
778
-		$id = explode(',', $id);
779
-	}
780
-	$id = join(',', array_map('intval', $id));
781
-
782
-	if (isset($b[$id])) {
783
-		// Notre branche commence par la rubrique de depart si $tout=true
784
-		return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
785
-	}
786
-
787
-	$hier = '';
788
-
789
-	// On ajoute une generation (les filles de la generation precedente)
790
-	// jusqu'a epuisement, en se protegeant des references circulaires
791
-	$ids_nouveaux_parents = $id;
792
-	$maxiter = 10000;
793
-	while (
794
-		$maxiter-- and $parents = sql_allfetsel(
795
-			'id_parent',
796
-			'spip_rubriques',
797
-			sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT')
798
-		)
799
-	) {
800
-		$ids_nouveaux_parents = join(',', array_column($parents, 'id_parent'));
801
-		$hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
802
-	}
803
-
804
-	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
805
-	if (strlen($hier) < 10000) {
806
-		$b[$id] = $hier;
807
-	}
808
-
809
-	// Notre branche commence par la rubrique de depart si $tout=true
810
-	$hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier;
811
-
812
-	return $hier;
774
+    static $b = [];
775
+
776
+    // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
777
+    if (!is_array($id)) {
778
+        $id = explode(',', $id);
779
+    }
780
+    $id = join(',', array_map('intval', $id));
781
+
782
+    if (isset($b[$id])) {
783
+        // Notre branche commence par la rubrique de depart si $tout=true
784
+        return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
785
+    }
786
+
787
+    $hier = '';
788
+
789
+    // On ajoute une generation (les filles de la generation precedente)
790
+    // jusqu'a epuisement, en se protegeant des references circulaires
791
+    $ids_nouveaux_parents = $id;
792
+    $maxiter = 10000;
793
+    while (
794
+        $maxiter-- and $parents = sql_allfetsel(
795
+            'id_parent',
796
+            'spip_rubriques',
797
+            sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT')
798
+        )
799
+    ) {
800
+        $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent'));
801
+        $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
802
+    }
803
+
804
+    # securite pour ne pas plomber la conso memoire sur les sites prolifiques
805
+    if (strlen($hier) < 10000) {
806
+        $b[$id] = $hier;
807
+    }
808
+
809
+    // Notre branche commence par la rubrique de depart si $tout=true
810
+    $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier;
811
+
812
+    return $hier;
813 813
 }
814 814
 
815 815
 
@@ -827,47 +827,47 @@  discard block
 block discarded – undo
827 827
  * @return void
828 828
  **/
829 829
 function calculer_prochain_postdate($check = false) {
830
-	include_spip('base/abstract_sql');
831
-	if ($check) {
832
-		$postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
833
-			'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : '';
834
-
835
-		$r = sql_select(
836
-			'DISTINCT A.id_rubrique AS id',
837
-			'spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique',
838
-			"R.statut != 'publie' AND A.statut='publie'$postdates"
839
-		);
840
-		while ($row = sql_fetch($r)) {
841
-			publier_branche_rubrique($row['id']);
842
-		}
843
-
844
-		pipeline('trig_calculer_prochain_postdate', '');
845
-	}
846
-
847
-	$t = sql_fetsel(
848
-		'date',
849
-		'spip_articles',
850
-		"statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')),
851
-		'',
852
-		'date',
853
-		'1'
854
-	);
855
-
856
-	if ($t) {
857
-		$t = $t['date'];
858
-		if (
859
-			!isset($GLOBALS['meta']['date_prochain_postdate'])
860
-			or $t <> $GLOBALS['meta']['date_prochain_postdate']
861
-		) {
862
-			ecrire_meta('date_prochain_postdate', strtotime($t));
863
-			ecrire_meta('derniere_modif', time());
864
-		}
865
-	} else {
866
-		effacer_meta('date_prochain_postdate');
867
-		ecrire_meta('derniere_modif', time());
868
-	}
869
-
870
-	spip_log("prochain postdate: $t");
830
+    include_spip('base/abstract_sql');
831
+    if ($check) {
832
+        $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ?
833
+            'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : '';
834
+
835
+        $r = sql_select(
836
+            'DISTINCT A.id_rubrique AS id',
837
+            'spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique',
838
+            "R.statut != 'publie' AND A.statut='publie'$postdates"
839
+        );
840
+        while ($row = sql_fetch($r)) {
841
+            publier_branche_rubrique($row['id']);
842
+        }
843
+
844
+        pipeline('trig_calculer_prochain_postdate', '');
845
+    }
846
+
847
+    $t = sql_fetsel(
848
+        'date',
849
+        'spip_articles',
850
+        "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')),
851
+        '',
852
+        'date',
853
+        '1'
854
+    );
855
+
856
+    if ($t) {
857
+        $t = $t['date'];
858
+        if (
859
+            !isset($GLOBALS['meta']['date_prochain_postdate'])
860
+            or $t <> $GLOBALS['meta']['date_prochain_postdate']
861
+        ) {
862
+            ecrire_meta('date_prochain_postdate', strtotime($t));
863
+            ecrire_meta('derniere_modif', time());
864
+        }
865
+    } else {
866
+        effacer_meta('date_prochain_postdate');
867
+        ecrire_meta('derniere_modif', time());
868
+    }
869
+
870
+    spip_log("prochain postdate: $t");
871 871
 }
872 872
 
873 873
 /**
@@ -892,62 +892,62 @@  discard block
 block discarded – undo
892 892
  */
893 893
 function creer_rubrique_nommee($titre, $id_parent = 0, $serveur = '') {
894 894
 
895
-	// eclater l'arborescence demandee
896
-	// echapper les </multi> et autres balises fermantes html
897
-	$titre = preg_replace(',</([a-z][^>]*)>,ims', "<@\\1>", $titre);
898
-	$arbo = explode('/', preg_replace(',^/,', '', $titre));
899
-	include_spip('base/abstract_sql');
900
-	foreach ($arbo as $titre) {
901
-		// retablir les </multi> et autres balises fermantes html
902
-		$titre = preg_replace(',<@([a-z][^>]*)>,ims', "</\\1>", $titre);
903
-		$r = sql_getfetsel(
904
-			'id_rubrique',
905
-			'spip_rubriques',
906
-			'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent),
907
-			$groupby = [],
908
-			$orderby = [],
909
-			$limit = '',
910
-			$having = [],
911
-			$serveur
912
-		);
913
-		if ($r !== null) {
914
-			$id_parent = $r;
915
-		} else {
916
-			$id_rubrique = sql_insertq('spip_rubriques', [
917
-					'titre' => $titre,
918
-					'id_parent' => $id_parent,
919
-					'statut' => 'prepa'
920
-				], $desc = [], $serveur);
921
-			if ($id_parent > 0) {
922
-				$data = sql_fetsel(
923
-					'id_secteur,lang',
924
-					'spip_rubriques',
925
-					"id_rubrique=$id_parent",
926
-					$groupby = [],
927
-					$orderby = [],
928
-					$limit = '',
929
-					$having = [],
930
-					$serveur
931
-				);
932
-				$id_secteur = $data['id_secteur'];
933
-				$lang = $data['lang'];
934
-			} else {
935
-				$id_secteur = $id_rubrique;
936
-				$lang = $GLOBALS['meta']['langue_site'];
937
-			}
938
-
939
-			sql_updateq(
940
-				'spip_rubriques',
941
-				['id_secteur' => $id_secteur, 'lang' => $lang],
942
-				'id_rubrique=' . intval($id_rubrique),
943
-				[],
944
-				$serveur
945
-			);
946
-
947
-			// pour la recursion
948
-			$id_parent = $id_rubrique;
949
-		}
950
-	}
951
-
952
-	return intval($id_parent);
895
+    // eclater l'arborescence demandee
896
+    // echapper les </multi> et autres balises fermantes html
897
+    $titre = preg_replace(',</([a-z][^>]*)>,ims', "<@\\1>", $titre);
898
+    $arbo = explode('/', preg_replace(',^/,', '', $titre));
899
+    include_spip('base/abstract_sql');
900
+    foreach ($arbo as $titre) {
901
+        // retablir les </multi> et autres balises fermantes html
902
+        $titre = preg_replace(',<@([a-z][^>]*)>,ims', "</\\1>", $titre);
903
+        $r = sql_getfetsel(
904
+            'id_rubrique',
905
+            'spip_rubriques',
906
+            'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent),
907
+            $groupby = [],
908
+            $orderby = [],
909
+            $limit = '',
910
+            $having = [],
911
+            $serveur
912
+        );
913
+        if ($r !== null) {
914
+            $id_parent = $r;
915
+        } else {
916
+            $id_rubrique = sql_insertq('spip_rubriques', [
917
+                    'titre' => $titre,
918
+                    'id_parent' => $id_parent,
919
+                    'statut' => 'prepa'
920
+                ], $desc = [], $serveur);
921
+            if ($id_parent > 0) {
922
+                $data = sql_fetsel(
923
+                    'id_secteur,lang',
924
+                    'spip_rubriques',
925
+                    "id_rubrique=$id_parent",
926
+                    $groupby = [],
927
+                    $orderby = [],
928
+                    $limit = '',
929
+                    $having = [],
930
+                    $serveur
931
+                );
932
+                $id_secteur = $data['id_secteur'];
933
+                $lang = $data['lang'];
934
+            } else {
935
+                $id_secteur = $id_rubrique;
936
+                $lang = $GLOBALS['meta']['langue_site'];
937
+            }
938
+
939
+            sql_updateq(
940
+                'spip_rubriques',
941
+                ['id_secteur' => $id_secteur, 'lang' => $lang],
942
+                'id_rubrique=' . intval($id_rubrique),
943
+                [],
944
+                $serveur
945
+            );
946
+
947
+            // pour la recursion
948
+            $id_parent = $id_rubrique;
949
+        }
950
+    }
951
+
952
+    return intval($id_parent);
953 953
 }
Please login to merge, or discard this patch.