Completed
Push — master ( 6c9939...4ccfda )
by cam
01:06
created
ecrire/action/desinstaller_plugin.php 1 patch
Indentation   +25 added lines, -25 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
 /**
@@ -32,28 +32,28 @@  discard block
 block discarded – undo
32 32
  */
33 33
 function action_desinstaller_plugin_dist() {
34 34
 
35
-	$securiser_action = charger_fonction('securiser_action', 'inc');
36
-	$arg = $securiser_action();
37
-	[$dir_plugins, $plugin] = explode('::', $arg);
38
-	$dir_type = '_DIR_PLUGINS';
39
-	if (defined('_DIR_PLUGINS_SUPPL') and $dir_plugins == _DIR_PLUGINS_SUPPL) {
40
-		$dir_type = '_DIR_PLUGINS_SUPPL';
41
-	}
42
-	$installer_plugins = charger_fonction('installer', 'plugins');
43
-	$infos = $installer_plugins($plugin, 'uninstall', $dir_type);
44
-	if ($infos and !$infos['install_test'][0]) {
45
-		include_spip('inc/plugin');
46
-		ecrire_plugin_actifs([$plugin], false, 'enleve');
47
-		$erreur = '';
48
-	} else {
49
-		$erreur = 'erreur_plugin_desinstalation_echouee';
50
-	}
51
-	if ($redirect = _request('redirect')) {
52
-		include_spip('inc/headers');
53
-		if ($erreur) {
54
-			$redirect = parametre_url($redirect, 'erreur', $erreur);
55
-		}
56
-		$redirect = str_replace('&', '&', $redirect);
57
-		redirige_par_entete($redirect);
58
-	}
35
+    $securiser_action = charger_fonction('securiser_action', 'inc');
36
+    $arg = $securiser_action();
37
+    [$dir_plugins, $plugin] = explode('::', $arg);
38
+    $dir_type = '_DIR_PLUGINS';
39
+    if (defined('_DIR_PLUGINS_SUPPL') and $dir_plugins == _DIR_PLUGINS_SUPPL) {
40
+        $dir_type = '_DIR_PLUGINS_SUPPL';
41
+    }
42
+    $installer_plugins = charger_fonction('installer', 'plugins');
43
+    $infos = $installer_plugins($plugin, 'uninstall', $dir_type);
44
+    if ($infos and !$infos['install_test'][0]) {
45
+        include_spip('inc/plugin');
46
+        ecrire_plugin_actifs([$plugin], false, 'enleve');
47
+        $erreur = '';
48
+    } else {
49
+        $erreur = 'erreur_plugin_desinstalation_echouee';
50
+    }
51
+    if ($redirect = _request('redirect')) {
52
+        include_spip('inc/headers');
53
+        if ($erreur) {
54
+            $redirect = parametre_url($redirect, 'erreur', $erreur);
55
+        }
56
+        $redirect = str_replace('&', '&', $redirect);
57
+        redirige_par_entete($redirect);
58
+    }
59 59
 }
Please login to merge, or discard this patch.
ecrire/balise/logo_.php 2 patches
Indentation   +95 added lines, -95 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
 
@@ -54,84 +54,84 @@  discard block
 block discarded – undo
54 54
  */
55 55
 function balise_LOGO__dist($p) {
56 56
 
57
-	preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
58
-	$type = strtolower($regs[1]);
59
-	$suite_logo = $regs[2];
60
-
61
-	// cas de #LOGO_SITE_SPIP
62
-	if ($type == 'site_spip') {
63
-		$type = 'site';
64
-		$_id_objet = "\"'0'\"";
65
-	}
66
-
67
-	$id_objet = id_table_objet($type);
68
-	if (!isset($_id_objet)) {
69
-		$_id_objet = champ_sql($id_objet, $p);
70
-	}
71
-
72
-	$fichier = ($p->etoile === '**') ? -1 : 0;
73
-	$coord = [];
74
-	$align = $lien = '';
75
-	$mode_logo = '';
76
-
77
-	if ($p->param and !$p->param[0][0]) {
78
-		$params = $p->param[0];
79
-		array_shift($params);
80
-		foreach ($params as $a) {
81
-			if ($a[0]->type === 'texte') {
82
-				$n = $a[0]->texte;
83
-				if (is_numeric($n)) {
84
-					$coord[] = $n;
85
-				} elseif (in_array($n, ['top', 'left', 'right', 'center', 'bottom'])) {
86
-					$align = $n;
87
-				} elseif (in_array($n, ['auto', 'icone', 'apercu', 'vignette'])) {
88
-					$mode_logo = $n;
89
-				}
90
-			} else {
91
-				$lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
92
-			}
93
-		}
94
-	}
95
-
96
-	$coord_x = !$coord ? 0 : intval(array_shift($coord));
97
-	$coord_y = !$coord ? 0 : intval(array_shift($coord));
98
-
99
-	if ($p->etoile === '*') {
100
-		include_spip('balise/url_');
101
-		$lien = generer_generer_url_arg($type, $p, $_id_objet);
102
-	}
103
-
104
-	$connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
105
-	if ($type == 'document') {
106
-		$qconnect = _q($connect);
107
-		$doc = "quete_document($_id_objet, $qconnect)";
108
-		if ($fichier) {
109
-			$code = "quete_logo_file($doc, $qconnect)";
110
-		} else {
111
-			$code = "quete_logo_document($doc, " . ($lien ?: "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
112
-		}
113
-		// (x=non-faux ? y : '') pour affecter x en retournant y
114
-		if ($p->descr['documents']) {
115
-			$code = '(($doublons["documents"] .= ",". '
116
-				. $_id_objet
117
-				. ") ? $code : '')";
118
-		}
119
-	} elseif ($connect) {
120
-		$code = "''";
121
-		spip_log('Les logos distants ne sont pas prevus');
122
-	} else {
123
-		$code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo);
124
-	}
125
-
126
-	// demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
127
-	if ($coord_x or $coord_y) {
128
-		$code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
129
-	}
130
-
131
-	$p->code = $code;
132
-	$p->interdire_scripts = false;
133
-
134
-	return $p;
57
+    preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
58
+    $type = strtolower($regs[1]);
59
+    $suite_logo = $regs[2];
60
+
61
+    // cas de #LOGO_SITE_SPIP
62
+    if ($type == 'site_spip') {
63
+        $type = 'site';
64
+        $_id_objet = "\"'0'\"";
65
+    }
66
+
67
+    $id_objet = id_table_objet($type);
68
+    if (!isset($_id_objet)) {
69
+        $_id_objet = champ_sql($id_objet, $p);
70
+    }
71
+
72
+    $fichier = ($p->etoile === '**') ? -1 : 0;
73
+    $coord = [];
74
+    $align = $lien = '';
75
+    $mode_logo = '';
76
+
77
+    if ($p->param and !$p->param[0][0]) {
78
+        $params = $p->param[0];
79
+        array_shift($params);
80
+        foreach ($params as $a) {
81
+            if ($a[0]->type === 'texte') {
82
+                $n = $a[0]->texte;
83
+                if (is_numeric($n)) {
84
+                    $coord[] = $n;
85
+                } elseif (in_array($n, ['top', 'left', 'right', 'center', 'bottom'])) {
86
+                    $align = $n;
87
+                } elseif (in_array($n, ['auto', 'icone', 'apercu', 'vignette'])) {
88
+                    $mode_logo = $n;
89
+                }
90
+            } else {
91
+                $lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
92
+            }
93
+        }
94
+    }
95
+
96
+    $coord_x = !$coord ? 0 : intval(array_shift($coord));
97
+    $coord_y = !$coord ? 0 : intval(array_shift($coord));
98
+
99
+    if ($p->etoile === '*') {
100
+        include_spip('balise/url_');
101
+        $lien = generer_generer_url_arg($type, $p, $_id_objet);
102
+    }
103
+
104
+    $connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
105
+    if ($type == 'document') {
106
+        $qconnect = _q($connect);
107
+        $doc = "quete_document($_id_objet, $qconnect)";
108
+        if ($fichier) {
109
+            $code = "quete_logo_file($doc, $qconnect)";
110
+        } else {
111
+            $code = "quete_logo_document($doc, " . ($lien ?: "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
112
+        }
113
+        // (x=non-faux ? y : '') pour affecter x en retournant y
114
+        if ($p->descr['documents']) {
115
+            $code = '(($doublons["documents"] .= ",". '
116
+                . $_id_objet
117
+                . ") ? $code : '')";
118
+        }
119
+    } elseif ($connect) {
120
+        $code = "''";
121
+        spip_log('Les logos distants ne sont pas prevus');
122
+    } else {
123
+        $code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo);
124
+    }
125
+
126
+    // demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
127
+    if ($coord_x or $coord_y) {
128
+        $code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
129
+    }
130
+
131
+    $p->code = $code;
132
+    $p->interdire_scripts = false;
133
+
134
+    return $p;
135 135
 }
136 136
 
137 137
 /**
@@ -158,20 +158,20 @@  discard block
 block discarded – undo
158 158
  *     Code compilé retournant le chemin du logo ou le code HTML du logo.
159 159
  **/
160 160
 function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $_lien, $p, $suite) {
161
-	$code = "quete_logo('$id_objet', '" .
162
-		(($suite == '_SURVOL') ? 'off' :
163
-			(($suite == '_NORMAL') ? 'on' : 'ON')) .
164
-		"', $_id_objet," .
165
-		(($suite == '_RUBRIQUE') ?
166
-			champ_sql('id_rubrique', $p) :
167
-			(($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) .
168
-		', ' . intval($fichier) . ')';
169
-
170
-	if ($fichier) {
171
-		return $code;
172
-	}
173
-
174
-	$align = preg_replace(',\W,', '', $align);
175
-
176
-	return "quete_html_logo($code, '$align', " . ($_lien ?: "''") . ')';
161
+    $code = "quete_logo('$id_objet', '" .
162
+        (($suite == '_SURVOL') ? 'off' :
163
+            (($suite == '_NORMAL') ? 'on' : 'ON')) .
164
+        "', $_id_objet," .
165
+        (($suite == '_RUBRIQUE') ?
166
+            champ_sql('id_rubrique', $p) :
167
+            (($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) .
168
+        ', ' . intval($fichier) . ')';
169
+
170
+    if ($fichier) {
171
+        return $code;
172
+    }
173
+
174
+    $align = preg_replace(',\W,', '', $align);
175
+
176
+    return "quete_html_logo($code, '$align', " . ($_lien ?: "''") . ')';
177 177
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -10 removed lines patch added patch discarded remove patch
@@ -108,7 +108,7 @@  discard block
 block discarded – undo
108 108
 		if ($fichier) {
109 109
 			$code = "quete_logo_file($doc, $qconnect)";
110 110
 		} else {
111
-			$code = "quete_logo_document($doc, " . ($lien ?: "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
111
+			$code = "quete_logo_document($doc, ".($lien ?: "''").", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
112 112
 		}
113 113
 		// (x=non-faux ? y : '') pour affecter x en retournant y
114 114
 		if ($p->descr['documents']) {
@@ -125,7 +125,7 @@  discard block
 block discarded – undo
125 125
 
126 126
 	// demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
127 127
 	if ($coord_x or $coord_y) {
128
-		$code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
128
+		$code = "filtrer('image_graver',filtrer('image_reduire',".$code.", '$coord_x', '$coord_y'))";
129 129
 	}
130 130
 
131 131
 	$p->code = $code;
@@ -158,14 +158,12 @@  discard block
 block discarded – undo
158 158
  *     Code compilé retournant le chemin du logo ou le code HTML du logo.
159 159
  **/
160 160
 function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $_lien, $p, $suite) {
161
-	$code = "quete_logo('$id_objet', '" .
162
-		(($suite == '_SURVOL') ? 'off' :
163
-			(($suite == '_NORMAL') ? 'on' : 'ON')) .
164
-		"', $_id_objet," .
161
+	$code = "quete_logo('$id_objet', '".
162
+		(($suite == '_SURVOL') ? 'off' : (($suite == '_NORMAL') ? 'on' : 'ON')).
163
+		"', $_id_objet,".
165 164
 		(($suite == '_RUBRIQUE') ?
166
-			champ_sql('id_rubrique', $p) :
167
-			(($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) .
168
-		', ' . intval($fichier) . ')';
165
+			champ_sql('id_rubrique', $p) : (($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")).
166
+		', '.intval($fichier).')';
169 167
 
170 168
 	if ($fichier) {
171 169
 		return $code;
@@ -173,5 +171,5 @@  discard block
 block discarded – undo
173 171
 
174 172
 	$align = preg_replace(',\W,', '', $align);
175 173
 
176
-	return "quete_html_logo($code, '$align', " . ($_lien ?: "''") . ')';
174
+	return "quete_html_logo($code, '$align', ".($_lien ?: "''").')';
177 175
 }
Please login to merge, or discard this patch.
ecrire/balise/info_.php 2 patches
Indentation   +23 added lines, -23 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
 /**
@@ -40,29 +40,29 @@  discard block
 block discarded – undo
40 40
  *     Pile complétée par le code à générer
41 41
  */
42 42
 function balise_INFO__dist($p) {
43
-	$info = $p->nom_champ;
44
-	$type_objet = interprete_argument_balise(1, $p);
45
-	$id_objet = interprete_argument_balise(2, $p);
46
-	if ($info === 'INFO_' or !$type_objet or !$id_objet) {
47
-		$msg = _T('zbug_balise_sans_argument', ['balise' => ' INFO_']);
48
-		erreur_squelette($msg, $p);
49
-		$p->interdire_scripts = true;
43
+    $info = $p->nom_champ;
44
+    $type_objet = interprete_argument_balise(1, $p);
45
+    $id_objet = interprete_argument_balise(2, $p);
46
+    if ($info === 'INFO_' or !$type_objet or !$id_objet) {
47
+        $msg = _T('zbug_balise_sans_argument', ['balise' => ' INFO_']);
48
+        erreur_squelette($msg, $p);
49
+        $p->interdire_scripts = true;
50 50
 
51
-		return $p;
52
-	} else {
53
-		// Récupérer tous les params à la suite de objet et id_objet
54
-		$_params = '[';
55
-		$nb_params = is_countable($p->param[0]) ? count($p->param[0]) : 0; // 1ère valeur vide donc 1 en plus
56
-		for ($i = 3; $i < $nb_params; $i++) {
57
-			$_params .= interprete_argument_balise($i, $p) . ',';
58
-		}
59
-		$_params .= ']';
51
+        return $p;
52
+    } else {
53
+        // Récupérer tous les params à la suite de objet et id_objet
54
+        $_params = '[';
55
+        $nb_params = is_countable($p->param[0]) ? count($p->param[0]) : 0; // 1ère valeur vide donc 1 en plus
56
+        for ($i = 3; $i < $nb_params; $i++) {
57
+            $_params .= interprete_argument_balise($i, $p) . ',';
58
+        }
59
+        $_params .= ']';
60 60
 
61
-		$info_sql = strtolower(substr($info, 5));
62
-		$code = "generer_info_entite($id_objet, $type_objet, '$info_sql', " . ($p->etoile ? _q($p->etoile) : "''") . ", $_params)";
63
-		$p->code = champ_sql($info, $p, $code);
64
-		$p->interdire_scripts = true;
61
+        $info_sql = strtolower(substr($info, 5));
62
+        $code = "generer_info_entite($id_objet, $type_objet, '$info_sql', " . ($p->etoile ? _q($p->etoile) : "''") . ", $_params)";
63
+        $p->code = champ_sql($info, $p, $code);
64
+        $p->interdire_scripts = true;
65 65
 
66
-		return $p;
67
-	}
66
+        return $p;
67
+    }
68 68
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -54,12 +54,12 @@
 block discarded – undo
54 54
 		$_params = '[';
55 55
 		$nb_params = is_countable($p->param[0]) ? count($p->param[0]) : 0; // 1ère valeur vide donc 1 en plus
56 56
 		for ($i = 3; $i < $nb_params; $i++) {
57
-			$_params .= interprete_argument_balise($i, $p) . ',';
57
+			$_params .= interprete_argument_balise($i, $p).',';
58 58
 		}
59 59
 		$_params .= ']';
60 60
 
61 61
 		$info_sql = strtolower(substr($info, 5));
62
-		$code = "generer_info_entite($id_objet, $type_objet, '$info_sql', " . ($p->etoile ? _q($p->etoile) : "''") . ", $_params)";
62
+		$code = "generer_info_entite($id_objet, $type_objet, '$info_sql', ".($p->etoile ? _q($p->etoile) : "''").", $_params)";
63 63
 		$p->code = champ_sql($info, $p, $code);
64 64
 		$p->interdire_scripts = true;
65 65
 
Please login to merge, or discard this patch.
ecrire/balise/url_logout.php 2 patches
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
 /**
@@ -36,7 +36,7 @@  discard block
 block discarded – undo
36 36
  *     Pile complétée du code compilé
37 37
  **/
38 38
 function balise_URL_LOGOUT($p) {
39
-	return calculer_balise_dynamique($p, 'URL_LOGOUT', []);
39
+    return calculer_balise_dynamique($p, 'URL_LOGOUT', []);
40 40
 }
41 41
 
42 42
 
@@ -52,9 +52,9 @@  discard block
 block discarded – undo
52 52
  *   Liste (url) des arguments collectés.
53 53
  */
54 54
 function balise_URL_LOGOUT_stat($args, $context_compil) {
55
-	$url = $args[0] ?? '';
55
+    $url = $args[0] ?? '';
56 56
 
57
-	return [$url];
57
+    return [$url];
58 58
 }
59 59
 
60 60
 /**
@@ -69,9 +69,9 @@  discard block
 block discarded – undo
69 69
  **/
70 70
 function balise_URL_LOGOUT_dyn($cible) {
71 71
 
72
-	if (empty($GLOBALS['visiteur_session']['login']) and empty($GLOBALS['visiteur_session']['statut'])) {
73
-		return '';
74
-	}
72
+    if (empty($GLOBALS['visiteur_session']['login']) and empty($GLOBALS['visiteur_session']['statut'])) {
73
+        return '';
74
+    }
75 75
 
76
-	return generer_url_action('logout', 'logout=public&url=' . rawurlencode($cible ?: self('&')));
76
+    return generer_url_action('logout', 'logout=public&url=' . rawurlencode($cible ?: self('&')));
77 77
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -73,5 +73,5 @@
 block discarded – undo
73 73
 		return '';
74 74
 	}
75 75
 
76
-	return generer_url_action('logout', 'logout=public&url=' . rawurlencode($cible ?: self('&')));
76
+	return generer_url_action('logout', 'logout=public&url='.rawurlencode($cible ?: self('&')));
77 77
 }
Please login to merge, or discard this patch.
ecrire/balise/formulaire_.php 1 patch
Indentation   +266 added lines, -266 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Formulaires
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/filtres');
@@ -35,22 +35,22 @@  discard block
 block discarded – undo
35 35
  *     Saisie protégée
36 36
  **/
37 37
 function protege_champ($texte) {
38
-	if (is_array($texte)) {
39
-		return array_map('protege_champ', $texte);
40
-	} elseif ($texte === null) {
41
-		return $texte;
42
-	} elseif (is_bool($texte)) {
43
-		return $texte ? '1' : '';
44
-	} elseif (is_string($texte) and $texte) {
45
-		if (preg_match(',^[abis]:\d+[:;],', $texte) and @unserialize($texte) !== false) {
46
-			// ne pas corrompre une valeur serialize
47
-			return $texte;
48
-		} elseif (strpbrk($texte, "&\"'<>") !== false) {
49
-			return spip_htmlspecialchars($texte, ENT_QUOTES);
50
-		}
51
-	}
52
-
53
-	return $texte;
38
+    if (is_array($texte)) {
39
+        return array_map('protege_champ', $texte);
40
+    } elseif ($texte === null) {
41
+        return $texte;
42
+    } elseif (is_bool($texte)) {
43
+        return $texte ? '1' : '';
44
+    } elseif (is_string($texte) and $texte) {
45
+        if (preg_match(',^[abis]:\d+[:;],', $texte) and @unserialize($texte) !== false) {
46
+            // ne pas corrompre une valeur serialize
47
+            return $texte;
48
+        } elseif (strpbrk($texte, "&\"'<>") !== false) {
49
+            return spip_htmlspecialchars($texte, ENT_QUOTES);
50
+        }
51
+    }
52
+
53
+    return $texte;
54 54
 }
55 55
 
56 56
 /**
@@ -64,17 +64,17 @@  discard block
 block discarded – undo
64 64
  *     - false : pas de squelette trouvé
65 65
  **/
66 66
 function existe_formulaire($form) {
67
-	if (substr($form, 0, 11) == 'FORMULAIRE_') {
68
-		$form = strtolower(substr($form, 11));
69
-	} else {
70
-		$form = strtolower($form);
71
-	}
67
+    if (substr($form, 0, 11) == 'FORMULAIRE_') {
68
+        $form = strtolower(substr($form, 11));
69
+    } else {
70
+        $form = strtolower($form);
71
+    }
72 72
 
73
-	if (!$form) {
74
-		return '';
75
-	} // on ne sait pas, le nom du formulaire n'est pas fourni ici
73
+    if (!$form) {
74
+        return '';
75
+    } // on ne sait pas, le nom du formulaire n'est pas fourni ici
76 76
 
77
-	return trouver_fond($form, 'formulaires/') ? $form : false;
77
+    return trouver_fond($form, 'formulaires/') ? $form : false;
78 78
 }
79 79
 
80 80
 /**
@@ -83,31 +83,31 @@  discard block
 block discarded – undo
83 83
  * @return false|array
84 84
  */
85 85
 function test_formulaire_inclus_par_modele() {
86
-	$trace = debug_backtrace(null, 20);
87
-	$trace_fonctions = array_column($trace, 'function');
88
-	$trace_fonctions = array_map('strtolower', $trace_fonctions);
89
-
90
-	// regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn
91
-	if (
92
-		function_exists('arguments_balise_dyn_depuis_modele')
93
-		and $form = arguments_balise_dyn_depuis_modele(null, 'read')
94
-	) {
95
-		if (in_array('balise_formulaire__dyn', $trace_fonctions)) {
96
-			$k = array_search('balise_formulaire__dyn', $trace_fonctions);
97
-			if ($trace[$k]['args'][0] === $form) {
98
-				return $trace[$k]['args'];
99
-			}
100
-		}
101
-	}
102
-
103
-	// fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil,
104
-	// mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette
105
-	if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) {
106
-		$k = array_search('inclure_modele', $trace_fonctions);
107
-		// les arguments de recuperer_fond() passes par inclure_modele()
108
-		return $trace[$k - 1]['args'][1]['args'];
109
-	}
110
-	return false;
86
+    $trace = debug_backtrace(null, 20);
87
+    $trace_fonctions = array_column($trace, 'function');
88
+    $trace_fonctions = array_map('strtolower', $trace_fonctions);
89
+
90
+    // regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn
91
+    if (
92
+        function_exists('arguments_balise_dyn_depuis_modele')
93
+        and $form = arguments_balise_dyn_depuis_modele(null, 'read')
94
+    ) {
95
+        if (in_array('balise_formulaire__dyn', $trace_fonctions)) {
96
+            $k = array_search('balise_formulaire__dyn', $trace_fonctions);
97
+            if ($trace[$k]['args'][0] === $form) {
98
+                return $trace[$k]['args'];
99
+            }
100
+        }
101
+    }
102
+
103
+    // fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil,
104
+    // mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette
105
+    if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) {
106
+        $k = array_search('inclure_modele', $trace_fonctions);
107
+        // les arguments de recuperer_fond() passes par inclure_modele()
108
+        return $trace[$k - 1]['args'][1]['args'];
109
+    }
110
+    return false;
111 111
 }
112 112
 
113 113
 /**
@@ -122,32 +122,32 @@  discard block
 block discarded – undo
122 122
  **/
123 123
 function balise_FORMULAIRE__dist($p) {
124 124
 
125
-	// Cas d'un #FORMULAIRE_TOTO inexistant : renvoyer la chaine vide.
126
-	// mais si #FORMULAIRE_{toto} on ne peut pas savoir a la compilation, continuer
127
-	if (existe_formulaire($p->nom_champ) === false) {
128
-		$p->code = "''";
129
-		$p->interdire_scripts = false;
130
-
131
-		return $p;
132
-	}
133
-
134
-	// sinon renvoyer un code php dynamique
135
-	$p = calculer_balise_dynamique($p, $p->nom_champ, []);
136
-
137
-	if (
138
-		!test_espace_prive()
139
-		and !empty($p->descr['sourcefile'])
140
-		and $f = $p->descr['sourcefile']
141
-		and basename(dirname($f)) === 'modeles'
142
-	) {
143
-		// un modele est toujours inséré en texte dans son contenant
144
-		// donc si on est dans le public avec un cache on va perdre le dynamisme
145
-		// et on risque de mettre en cache les valeurs pre-remplies du formulaire
146
-		// on injecte donc le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
147
-		$p->code = "'<'.'?php echo (" . texte_script($p->code) . "); ?'.'>'";
148
-		// dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)
149
-	}
150
-	return $p;
125
+    // Cas d'un #FORMULAIRE_TOTO inexistant : renvoyer la chaine vide.
126
+    // mais si #FORMULAIRE_{toto} on ne peut pas savoir a la compilation, continuer
127
+    if (existe_formulaire($p->nom_champ) === false) {
128
+        $p->code = "''";
129
+        $p->interdire_scripts = false;
130
+
131
+        return $p;
132
+    }
133
+
134
+    // sinon renvoyer un code php dynamique
135
+    $p = calculer_balise_dynamique($p, $p->nom_champ, []);
136
+
137
+    if (
138
+        !test_espace_prive()
139
+        and !empty($p->descr['sourcefile'])
140
+        and $f = $p->descr['sourcefile']
141
+        and basename(dirname($f)) === 'modeles'
142
+    ) {
143
+        // un modele est toujours inséré en texte dans son contenant
144
+        // donc si on est dans le public avec un cache on va perdre le dynamisme
145
+        // et on risque de mettre en cache les valeurs pre-remplies du formulaire
146
+        // on injecte donc le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
147
+        $p->code = "'<'.'?php echo (" . texte_script($p->code) . "); ?'.'>'";
148
+        // dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)
149
+    }
150
+    return $p;
151 151
 }
152 152
 
153 153
 /**
@@ -167,17 +167,17 @@  discard block
 block discarded – undo
167 167
  *     - string : texte à afficher directement
168 168
  */
169 169
 function balise_FORMULAIRE__dyn($form, ...$args) {
170
-	$form = existe_formulaire($form);
171
-	if (!$form) {
172
-		return '';
173
-	}
170
+    $form = existe_formulaire($form);
171
+    if (!$form) {
172
+        return '';
173
+    }
174 174
 
175
-	$contexte = balise_FORMULAIRE__contexte($form, $args);
176
-	if (!is_array($contexte)) {
177
-		return $contexte;
178
-	}
175
+    $contexte = balise_FORMULAIRE__contexte($form, $args);
176
+    if (!is_array($contexte)) {
177
+        return $contexte;
178
+    }
179 179
 
180
-	return ["formulaires/$form", 3600, $contexte];
180
+    return ["formulaires/$form", 3600, $contexte];
181 181
 }
182 182
 
183 183
 /**
@@ -191,84 +191,84 @@  discard block
 block discarded – undo
191 191
  *     Contexte d'environnement à envoyer au squelette
192 192
  **/
193 193
 function balise_FORMULAIRE__contexte($form, $args) {
194
-	// tester si ce formulaire vient d'etre poste (memes arguments)
195
-	// pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page
196
-	// si poste, on recupere les erreurs
197
-
198
-	$je_suis_poste = false;
199
-	if (
200
-		$post_form = _request('formulaire_action')
201
-		and $post_form == $form
202
-		and $p = _request('formulaire_action_args')
203
-		and is_array($p = decoder_contexte_ajax($p, $post_form))
204
-	) {
205
-		// enlever le faux attribut de langue masque
206
-		array_shift($p);
207
-		if (formulaire__identifier($form, $args, $p)) {
208
-			$je_suis_poste = true;
209
-		}
210
-	}
211
-
212
-	$editable = true;
213
-	$erreurs = $post = [];
214
-	if ($je_suis_poste) {
215
-		$post = traiter_formulaires_dynamiques(true);
216
-		$e = "erreurs_$form";
217
-		$erreurs = $post[$e] ?? [];
218
-		$editable = "editable_$form";
219
-		$editable = (!isset($post[$e]))
220
-			|| (is_countable($erreurs) ? count($erreurs) : 0)
221
-			|| (isset($post[$editable]) && $post[$editable]);
222
-	}
223
-
224
-	$valeurs = formulaire__charger($form, $args, $je_suis_poste);
225
-
226
-	// si $valeurs n'est pas un tableau, le formulaire n'est pas applicable
227
-	// C'est plus fort qu'editable qui est gere par le squelette
228
-	// Idealement $valeur doit etre alors un message explicatif.
229
-	if (!is_array($valeurs)) {
230
-		return is_string($valeurs) ? $valeurs : '';
231
-	}
232
-
233
-	// charger peut passer une action si le formulaire ne tourne pas sur self()
234
-	// ou une action vide si elle ne sert pas
235
-	$action = $valeurs['action'] ?? self('&amp;', true);
236
-	// bug IEx : si action finit par /
237
-	// IE croit que le <form ... action=../ > est autoferme
238
-	if (substr($action, -1) == '/') {
239
-		// on ajoute une ancre pour feinter IE, au pire ca tue l'ancre qui finit par un /
240
-		$action .= '#';
241
-	}
242
-
243
-	// recuperer la saisie en cours si erreurs
244
-	// seulement si c'est ce formulaire qui est poste
245
-	// ou si on le demande explicitement par le parametre _forcer_request = true
246
-	$dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']));
247
-	foreach (array_keys($valeurs) as $champ) {
248
-		if ($champ[0] !== '_' and !in_array($champ, ['message_ok', 'message_erreur', 'editable'])) {
249
-			if ($dispo and (($v = _request($champ)) !== null)) {
250
-				$valeurs[$champ] = $v;
251
-			}
252
-			// nettoyer l'url des champs qui vont etre saisis
253
-			if ($action) {
254
-				$action = parametre_url($action, $champ, '');
255
-			}
256
-			// proteger les ' et les " dans les champs que l'on va injecter
257
-			$valeurs[$champ] = protege_champ($valeurs[$champ]);
258
-		}
259
-	}
260
-
261
-	if ($action) {
262
-		// nettoyer l'url
263
-		$action = parametre_url($action, 'formulaire_action', '');
264
-		$action = parametre_url($action, 'formulaire_action_args', '');
265
-	}
266
-
267
-	/**
268
-	 * @deprecated
269
-	 * servait pour poster sur les actions de type editer_xxx() qui ne prenaient pas d'argument autrement que par _request('arg') et pour lesquelles il fallait donc passer un hash valide
270
-	 */
271
-	/*
194
+    // tester si ce formulaire vient d'etre poste (memes arguments)
195
+    // pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page
196
+    // si poste, on recupere les erreurs
197
+
198
+    $je_suis_poste = false;
199
+    if (
200
+        $post_form = _request('formulaire_action')
201
+        and $post_form == $form
202
+        and $p = _request('formulaire_action_args')
203
+        and is_array($p = decoder_contexte_ajax($p, $post_form))
204
+    ) {
205
+        // enlever le faux attribut de langue masque
206
+        array_shift($p);
207
+        if (formulaire__identifier($form, $args, $p)) {
208
+            $je_suis_poste = true;
209
+        }
210
+    }
211
+
212
+    $editable = true;
213
+    $erreurs = $post = [];
214
+    if ($je_suis_poste) {
215
+        $post = traiter_formulaires_dynamiques(true);
216
+        $e = "erreurs_$form";
217
+        $erreurs = $post[$e] ?? [];
218
+        $editable = "editable_$form";
219
+        $editable = (!isset($post[$e]))
220
+            || (is_countable($erreurs) ? count($erreurs) : 0)
221
+            || (isset($post[$editable]) && $post[$editable]);
222
+    }
223
+
224
+    $valeurs = formulaire__charger($form, $args, $je_suis_poste);
225
+
226
+    // si $valeurs n'est pas un tableau, le formulaire n'est pas applicable
227
+    // C'est plus fort qu'editable qui est gere par le squelette
228
+    // Idealement $valeur doit etre alors un message explicatif.
229
+    if (!is_array($valeurs)) {
230
+        return is_string($valeurs) ? $valeurs : '';
231
+    }
232
+
233
+    // charger peut passer une action si le formulaire ne tourne pas sur self()
234
+    // ou une action vide si elle ne sert pas
235
+    $action = $valeurs['action'] ?? self('&amp;', true);
236
+    // bug IEx : si action finit par /
237
+    // IE croit que le <form ... action=../ > est autoferme
238
+    if (substr($action, -1) == '/') {
239
+        // on ajoute une ancre pour feinter IE, au pire ca tue l'ancre qui finit par un /
240
+        $action .= '#';
241
+    }
242
+
243
+    // recuperer la saisie en cours si erreurs
244
+    // seulement si c'est ce formulaire qui est poste
245
+    // ou si on le demande explicitement par le parametre _forcer_request = true
246
+    $dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']));
247
+    foreach (array_keys($valeurs) as $champ) {
248
+        if ($champ[0] !== '_' and !in_array($champ, ['message_ok', 'message_erreur', 'editable'])) {
249
+            if ($dispo and (($v = _request($champ)) !== null)) {
250
+                $valeurs[$champ] = $v;
251
+            }
252
+            // nettoyer l'url des champs qui vont etre saisis
253
+            if ($action) {
254
+                $action = parametre_url($action, $champ, '');
255
+            }
256
+            // proteger les ' et les " dans les champs que l'on va injecter
257
+            $valeurs[$champ] = protege_champ($valeurs[$champ]);
258
+        }
259
+    }
260
+
261
+    if ($action) {
262
+        // nettoyer l'url
263
+        $action = parametre_url($action, 'formulaire_action', '');
264
+        $action = parametre_url($action, 'formulaire_action_args', '');
265
+    }
266
+
267
+    /**
268
+     * @deprecated
269
+     * servait pour poster sur les actions de type editer_xxx() qui ne prenaient pas d'argument autrement que par _request('arg') et pour lesquelles il fallait donc passer un hash valide
270
+     */
271
+    /*
272 272
 	if (isset($valeurs['_action'])) {
273 273
 		$securiser_action = charger_fonction('securiser_action', 'inc');
274 274
 		$secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1);
@@ -278,59 +278,59 @@  discard block
 block discarded – undo
278 278
 	}
279 279
 	*/
280 280
 
281
-	// empiler la lang en tant que premier argument implicite du CVT
282
-	// pour permettre de la restaurer au moment du Verifier et du Traiter
283
-	array_unshift($args, $GLOBALS['spip_lang']);
284
-
285
-	$valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form);
286
-	$valeurs['erreurs'] = $erreurs;
287
-	$valeurs['action'] = $action;
288
-	$valeurs['form'] = $form;
289
-
290
-	$valeurs['formulaire_sign'] = '';
291
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
292
-		$securiser_action = charger_fonction('securiser_action', 'inc');
293
-		$secu = $securiser_action($valeurs['form'], $valeurs['formulaire_args'], '', -1);
294
-		$valeurs['formulaire_sign'] = $secu['hash'];
295
-	}
296
-
297
-	if (!isset($valeurs['id'])) {
298
-		$valeurs['id'] = 'new';
299
-	}
300
-	// editable peut venir de charger() ou de traiter() sinon
301
-	if (!isset($valeurs['editable'])) {
302
-		$valeurs['editable'] = $editable;
303
-	}
304
-	// dans tous les cas, renvoyer un espace ou vide (et pas un booleen)
305
-	$valeurs['editable'] = ($valeurs['editable'] ? ' ' : '');
306
-
307
-	if ($je_suis_poste) {
308
-		$valeurs['message_erreur'] = '';
309
-		if (isset($erreurs['message_erreur'])) {
310
-			$valeurs['message_erreur'] = $erreurs['message_erreur'];
311
-		}
312
-
313
-		$valeurs['message_ok'] = '';
314
-		if (isset($post["message_ok_$form"])) {
315
-			$valeurs['message_ok'] = $post["message_ok_$form"];
316
-		} elseif (isset($erreurs['message_ok'])) {
317
-			$valeurs['message_ok'] = $erreurs['message_ok'];
318
-		}
319
-
320
-		// accessibilite : encapsuler toutes les erreurs dans un role='alert'
321
-		// uniquement si c'est une string et au premier niveau (on ne touche pas au tableaux)
322
-		// et si $k ne commence pas par un _ (c'est bien une vrai erreur sur un vrai champ)
323
-		if (html5_permis()) {
324
-			foreach ($erreurs as $k => $v) {
325
-				if (is_string($v) and strlen(trim($v)) and strpos($k, '_') !== 0) {
326
-					// on encapsule dans un span car ces messages sont en general simple, juste du texte, et deja dans un span dans le form
327
-					$valeurs['erreurs'][$k] = "<span role='alert'>" . $erreurs[$k] . '</span>';
328
-				}
329
-			}
330
-		}
331
-	}
332
-
333
-	return $valeurs;
281
+    // empiler la lang en tant que premier argument implicite du CVT
282
+    // pour permettre de la restaurer au moment du Verifier et du Traiter
283
+    array_unshift($args, $GLOBALS['spip_lang']);
284
+
285
+    $valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form);
286
+    $valeurs['erreurs'] = $erreurs;
287
+    $valeurs['action'] = $action;
288
+    $valeurs['form'] = $form;
289
+
290
+    $valeurs['formulaire_sign'] = '';
291
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
292
+        $securiser_action = charger_fonction('securiser_action', 'inc');
293
+        $secu = $securiser_action($valeurs['form'], $valeurs['formulaire_args'], '', -1);
294
+        $valeurs['formulaire_sign'] = $secu['hash'];
295
+    }
296
+
297
+    if (!isset($valeurs['id'])) {
298
+        $valeurs['id'] = 'new';
299
+    }
300
+    // editable peut venir de charger() ou de traiter() sinon
301
+    if (!isset($valeurs['editable'])) {
302
+        $valeurs['editable'] = $editable;
303
+    }
304
+    // dans tous les cas, renvoyer un espace ou vide (et pas un booleen)
305
+    $valeurs['editable'] = ($valeurs['editable'] ? ' ' : '');
306
+
307
+    if ($je_suis_poste) {
308
+        $valeurs['message_erreur'] = '';
309
+        if (isset($erreurs['message_erreur'])) {
310
+            $valeurs['message_erreur'] = $erreurs['message_erreur'];
311
+        }
312
+
313
+        $valeurs['message_ok'] = '';
314
+        if (isset($post["message_ok_$form"])) {
315
+            $valeurs['message_ok'] = $post["message_ok_$form"];
316
+        } elseif (isset($erreurs['message_ok'])) {
317
+            $valeurs['message_ok'] = $erreurs['message_ok'];
318
+        }
319
+
320
+        // accessibilite : encapsuler toutes les erreurs dans un role='alert'
321
+        // uniquement si c'est une string et au premier niveau (on ne touche pas au tableaux)
322
+        // et si $k ne commence pas par un _ (c'est bien une vrai erreur sur un vrai champ)
323
+        if (html5_permis()) {
324
+            foreach ($erreurs as $k => $v) {
325
+                if (is_string($v) and strlen(trim($v)) and strpos($k, '_') !== 0) {
326
+                    // on encapsule dans un span car ces messages sont en general simple, juste du texte, et deja dans un span dans le form
327
+                    $valeurs['erreurs'][$k] = "<span role='alert'>" . $erreurs[$k] . '</span>';
328
+                }
329
+            }
330
+        }
331
+    }
332
+
333
+    return $valeurs;
334 334
 }
335 335
 
336 336
 /**
@@ -342,51 +342,51 @@  discard block
 block discarded – undo
342 342
  * @return array
343 343
  */
344 344
 function formulaire__charger($form, $args, $poste) {
345
-	if ($charger_valeurs = charger_fonction('charger', "formulaires/$form", true)) {
346
-		$valeurs = call_user_func_array($charger_valeurs, $args);
347
-	} else {
348
-		$valeurs = [];
349
-	}
350
-
351
-	$valeurs = pipeline(
352
-		'formulaire_charger',
353
-		[
354
-			'args' => ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
355
-			'data' => $valeurs
356
-		]
357
-	);
358
-
359
-	// prise en charge CVT multi etape
360
-	if (is_array($valeurs) and isset($valeurs['_etapes'])) {
361
-		include_spip('inc/cvt_multietapes');
362
-		$valeurs = cvtmulti_formulaire_charger_etapes(
363
-			['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
364
-			$valeurs
365
-		);
366
-	}
367
-
368
-	// si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline !
369
-	if (is_array($valeurs)) {
370
-		if (!isset($valeurs['_pipelines'])) {
371
-			$valeurs['_pipelines'] = [];
372
-		}
373
-		// l'ancien argument _pipeline devient maintenant _pipelines
374
-		// reinjectons le vieux _pipeline au debut de _pipelines
375
-		if (isset($valeurs['_pipeline'])) {
376
-			$pipe = is_array($valeurs['_pipeline']) ? reset($valeurs['_pipeline']) : $valeurs['_pipeline'];
377
-			$args = is_array($valeurs['_pipeline']) ? end($valeurs['_pipeline']) : [];
378
-
379
-			$pipelines = [$pipe => $args];
380
-			$valeurs['_pipelines'] = array_merge($pipelines, $valeurs['_pipelines']);
381
-		}
382
-
383
-		// et enfin, ajoutons systematiquement un pipeline sur le squelette du formulaire
384
-		// qui constitue le cas le plus courant d'utilisation du pipeline recuperer_fond
385
-		// (performance, cela evite de s'injecter dans recuperer_fond utilise pour *tous* les squelettes)
386
-		$valeurs['_pipelines']['formulaire_fond'] = ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste];
387
-	}
388
-
389
-	return $valeurs;
345
+    if ($charger_valeurs = charger_fonction('charger', "formulaires/$form", true)) {
346
+        $valeurs = call_user_func_array($charger_valeurs, $args);
347
+    } else {
348
+        $valeurs = [];
349
+    }
350
+
351
+    $valeurs = pipeline(
352
+        'formulaire_charger',
353
+        [
354
+            'args' => ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
355
+            'data' => $valeurs
356
+        ]
357
+    );
358
+
359
+    // prise en charge CVT multi etape
360
+    if (is_array($valeurs) and isset($valeurs['_etapes'])) {
361
+        include_spip('inc/cvt_multietapes');
362
+        $valeurs = cvtmulti_formulaire_charger_etapes(
363
+            ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
364
+            $valeurs
365
+        );
366
+    }
367
+
368
+    // si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline !
369
+    if (is_array($valeurs)) {
370
+        if (!isset($valeurs['_pipelines'])) {
371
+            $valeurs['_pipelines'] = [];
372
+        }
373
+        // l'ancien argument _pipeline devient maintenant _pipelines
374
+        // reinjectons le vieux _pipeline au debut de _pipelines
375
+        if (isset($valeurs['_pipeline'])) {
376
+            $pipe = is_array($valeurs['_pipeline']) ? reset($valeurs['_pipeline']) : $valeurs['_pipeline'];
377
+            $args = is_array($valeurs['_pipeline']) ? end($valeurs['_pipeline']) : [];
378
+
379
+            $pipelines = [$pipe => $args];
380
+            $valeurs['_pipelines'] = array_merge($pipelines, $valeurs['_pipelines']);
381
+        }
382
+
383
+        // et enfin, ajoutons systematiquement un pipeline sur le squelette du formulaire
384
+        // qui constitue le cas le plus courant d'utilisation du pipeline recuperer_fond
385
+        // (performance, cela evite de s'injecter dans recuperer_fond utilise pour *tous* les squelettes)
386
+        $valeurs['_pipelines']['formulaire_fond'] = ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste];
387
+    }
388
+
389
+    return $valeurs;
390 390
 }
391 391
 
392 392
 /**
@@ -405,9 +405,9 @@  discard block
 block discarded – undo
405 405
  * @return bool
406 406
  */
407 407
 function formulaire__identifier($form, $args, $p) {
408
-	if ($identifier_args = charger_fonction('identifier', "formulaires/$form", true)) {
409
-		return call_user_func_array($identifier_args, $args) === call_user_func_array($identifier_args, $p);
410
-	}
408
+    if ($identifier_args = charger_fonction('identifier', "formulaires/$form", true)) {
409
+        return call_user_func_array($identifier_args, $args) === call_user_func_array($identifier_args, $p);
410
+    }
411 411
 
412
-	return $args === $p;
412
+    return $args === $p;
413 413
 }
Please login to merge, or discard this patch.
ecrire/balise/formulaire_inscription.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('base/abstract_sql');
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
  *     Pile complétée du code compilé
44 44
  **/
45 45
 function balise_FORMULAIRE_INSCRIPTION($p) {
46
-	return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', []);
46
+    return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', []);
47 47
 }
48 48
 
49 49
 /**
@@ -72,9 +72,9 @@  discard block
 block discarded – undo
72 72
  *   - chaîne vide sinon.
73 73
  */
74 74
 function balise_FORMULAIRE_INSCRIPTION_stat($args, $context_compil) {
75
-	[$mode, $id, $retour] = array_pad($args, 3, null);
76
-	include_spip('action/inscrire_auteur');
77
-	$mode = tester_statut_inscription($mode, $id ?? 0);
75
+    [$mode, $id, $retour] = array_pad($args, 3, null);
76
+    include_spip('action/inscrire_auteur');
77
+    $mode = tester_statut_inscription($mode, $id ?? 0);
78 78
 
79
-	return $mode ? [$mode, $id, $retour] : '';
79
+    return $mode ? [$mode, $id, $retour] : '';
80 80
 }
Please login to merge, or discard this patch.
ecrire/public/balises.php 1 patch
Indentation   +948 added lines, -948 removed lines patch added patch discarded remove patch
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
  **/
27 27
 
28 28
 if (!defined('_ECRIRE_INC_VERSION')) {
29
-	return;
29
+    return;
30 30
 }
31 31
 
32 32
 /**
@@ -48,16 +48,16 @@  discard block
 block discarded – undo
48 48
  *     Code PHP si cet argument est présent, sinon null
49 49
  **/
50 50
 function interprete_argument_balise(int $n, Champ $p): ?string {
51
-	if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) {
52
-		return calculer_liste(
53
-			$p->param[0][$n],
54
-			$p->descr,
55
-			$p->boucles,
56
-			$p->id_boucle
57
-		);
58
-	} else {
59
-		return null;
60
-	}
51
+    if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) {
52
+        return calculer_liste(
53
+            $p->param[0][$n],
54
+            $p->descr,
55
+            $p->boucles,
56
+            $p->id_boucle
57
+        );
58
+    } else {
59
+        return null;
60
+    }
61 61
 }
62 62
 
63 63
 
@@ -77,10 +77,10 @@  discard block
 block discarded – undo
77 77
  *     Pile complétée par le code à générer
78 78
  **/
79 79
 function balise_NOM_SITE_SPIP_dist($p) {
80
-	$p->code = "\$GLOBALS['meta']['nom_site']";
80
+    $p->code = "\$GLOBALS['meta']['nom_site']";
81 81
 
82
-	#$p->interdire_scripts = true;
83
-	return $p;
82
+    #$p->interdire_scripts = true;
83
+    return $p;
84 84
 }
85 85
 
86 86
 /**
@@ -96,10 +96,10 @@  discard block
 block discarded – undo
96 96
  *     Pile complétée par le code à générer
97 97
  **/
98 98
 function balise_EMAIL_WEBMASTER_dist($p) {
99
-	$p->code = "\$GLOBALS['meta']['email_webmaster']";
99
+    $p->code = "\$GLOBALS['meta']['email_webmaster']";
100 100
 
101
-	#$p->interdire_scripts = true;
102
-	return $p;
101
+    #$p->interdire_scripts = true;
102
+    return $p;
103 103
 }
104 104
 
105 105
 /**
@@ -115,10 +115,10 @@  discard block
 block discarded – undo
115 115
  *     Pile complétée par le code à générer
116 116
  **/
117 117
 function balise_DESCRIPTIF_SITE_SPIP_dist($p) {
118
-	$p->code = "\$GLOBALS['meta']['descriptif_site']";
118
+    $p->code = "\$GLOBALS['meta']['descriptif_site']";
119 119
 
120
-	#$p->interdire_scripts = true;
121
-	return $p;
120
+    #$p->interdire_scripts = true;
121
+    return $p;
122 122
 }
123 123
 
124 124
 
@@ -139,10 +139,10 @@  discard block
 block discarded – undo
139 139
  *     Pile complétée par le code à générer
140 140
  **/
141 141
 function balise_CHARSET_dist($p) {
142
-	$p->code = "\$GLOBALS['meta']['charset']";
142
+    $p->code = "\$GLOBALS['meta']['charset']";
143 143
 
144
-	#$p->interdire_scripts = true;
145
-	return $p;
144
+    #$p->interdire_scripts = true;
145
+    return $p;
146 146
 }
147 147
 
148 148
 /**
@@ -167,11 +167,11 @@  discard block
 block discarded – undo
167 167
  *     Pile complétée par le code à générer
168 168
  **/
169 169
 function balise_LANG_LEFT_dist($p) {
170
-	$_lang = champ_sql('lang', $p);
171
-	$p->code = "lang_dir($_lang, 'left','right')";
172
-	$p->interdire_scripts = false;
170
+    $_lang = champ_sql('lang', $p);
171
+    $p->code = "lang_dir($_lang, 'left','right')";
172
+    $p->interdire_scripts = false;
173 173
 
174
-	return $p;
174
+    return $p;
175 175
 }
176 176
 
177 177
 /**
@@ -191,11 +191,11 @@  discard block
 block discarded – undo
191 191
  *     Pile complétée par le code à générer
192 192
  **/
193 193
 function balise_LANG_RIGHT_dist($p) {
194
-	$_lang = champ_sql('lang', $p);
195
-	$p->code = "lang_dir($_lang, 'right','left')";
196
-	$p->interdire_scripts = false;
194
+    $_lang = champ_sql('lang', $p);
195
+    $p->code = "lang_dir($_lang, 'right','left')";
196
+    $p->interdire_scripts = false;
197 197
 
198
-	return $p;
198
+    return $p;
199 199
 }
200 200
 
201 201
 /**
@@ -220,11 +220,11 @@  discard block
 block discarded – undo
220 220
  *     Pile complétée par le code à générer
221 221
  **/
222 222
 function balise_LANG_DIR_dist($p) {
223
-	$_lang = champ_sql('lang', $p);
224
-	$p->code = "lang_dir($_lang, 'ltr','rtl')";
225
-	$p->interdire_scripts = false;
223
+    $_lang = champ_sql('lang', $p);
224
+    $p->code = "lang_dir($_lang, 'ltr','rtl')";
225
+    $p->interdire_scripts = false;
226 226
 
227
-	return $p;
227
+    return $p;
228 228
 }
229 229
 
230 230
 
@@ -241,10 +241,10 @@  discard block
 block discarded – undo
241 241
  *     Pile complétée par le code à générer
242 242
  **/
243 243
 function balise_PUCE_dist($p) {
244
-	$p->code = 'definir_puce()';
245
-	$p->interdire_scripts = false;
244
+    $p->code = 'definir_puce()';
245
+    $p->interdire_scripts = false;
246 246
 
247
-	return $p;
247
+    return $p;
248 248
 }
249 249
 
250 250
 
@@ -268,9 +268,9 @@  discard block
 block discarded – undo
268 268
  *     Pile completée du code PHP d'exécution de la balise
269 269
  */
270 270
 function balise_DATE_dist($p) {
271
-	$p->code = champ_sql('date', $p);
271
+    $p->code = champ_sql('date', $p);
272 272
 
273
-	return $p;
273
+    return $p;
274 274
 }
275 275
 
276 276
 
@@ -290,10 +290,10 @@  discard block
 block discarded – undo
290 290
  *     Pile completée du code PHP d'exécution de la balise
291 291
  */
292 292
 function balise_DATE_REDAC_dist($p) {
293
-	$p->code = champ_sql('date_redac', $p);
294
-	$p->interdire_scripts = false;
293
+    $p->code = champ_sql('date_redac', $p);
294
+    $p->interdire_scripts = false;
295 295
 
296
-	return $p;
296
+    return $p;
297 297
 }
298 298
 
299 299
 /**
@@ -312,10 +312,10 @@  discard block
 block discarded – undo
312 312
  *     Pile completée du code PHP d'exécution de la balise
313 313
  */
314 314
 function balise_DATE_MODIF_dist($p) {
315
-	$p->code = champ_sql('date_modif', $p);
316
-	$p->interdire_scripts = false;
315
+    $p->code = champ_sql('date_modif', $p);
316
+    $p->interdire_scripts = false;
317 317
 
318
-	return $p;
318
+    return $p;
319 319
 }
320 320
 
321 321
 /**
@@ -333,13 +333,13 @@  discard block
 block discarded – undo
333 333
  *     Pile completée du code PHP d'exécution de la balise
334 334
  */
335 335
 function balise_DATE_NOUVEAUTES_dist($p) {
336
-	$p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui'
336
+    $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui'
337 337
 	AND isset(\$GLOBALS['meta']['dernier_envoi_neuf'])) ?
338 338
 	\$GLOBALS['meta']['dernier_envoi_neuf'] :
339 339
 	\"'0000-00-00'\")";
340
-	$p->interdire_scripts = false;
340
+    $p->interdire_scripts = false;
341 341
 
342
-	return $p;
342
+    return $p;
343 343
 }
344 344
 
345 345
 
@@ -357,11 +357,11 @@  discard block
 block discarded – undo
357 357
  *     Pile completée du code PHP d'exécution de la balise
358 358
  */
359 359
 function balise_DOSSIER_SQUELETTE_dist($p) {
360
-	$code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
361
-	$p->code = "_DIR_RACINE . '$code'" .
362
-		$p->interdire_scripts = false;
360
+    $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
361
+    $p->code = "_DIR_RACINE . '$code'" .
362
+        $p->interdire_scripts = false;
363 363
 
364
-	return $p;
364
+    return $p;
365 365
 }
366 366
 
367 367
 /**
@@ -376,11 +376,11 @@  discard block
 block discarded – undo
376 376
  *     Pile completée du code PHP d'exécution de la balise
377 377
  */
378 378
 function balise_SQUELETTE_dist($p) {
379
-	$code = addslashes($p->descr['sourcefile']);
380
-	$p->code = "'$code'" .
381
-		$p->interdire_scripts = false;
379
+    $code = addslashes($p->descr['sourcefile']);
380
+    $p->code = "'$code'" .
381
+        $p->interdire_scripts = false;
382 382
 
383
-	return $p;
383
+    return $p;
384 384
 }
385 385
 
386 386
 /**
@@ -399,10 +399,10 @@  discard block
 block discarded – undo
399 399
  *     Pile completée du code PHP d'exécution de la balise
400 400
  */
401 401
 function balise_SPIP_VERSION_dist($p) {
402
-	$p->code = 'spip_version()';
403
-	$p->interdire_scripts = false;
402
+    $p->code = 'spip_version()';
403
+    $p->interdire_scripts = false;
404 404
 
405
-	return $p;
405
+    return $p;
406 406
 }
407 407
 
408 408
 
@@ -428,18 +428,18 @@  discard block
 block discarded – undo
428 428
  *     Pile complétée par le code à générer
429 429
  **/
430 430
 function balise_NOM_SITE_dist($p) {
431
-	if (!$p->etoile) {
432
-		$p->code = 'supprimer_numero(calculer_url(' .
433
-			champ_sql('url_site', $p) . ',' .
434
-			champ_sql('nom_site', $p) .
435
-			", 'titre', \$connect, false))";
436
-	} else {
437
-		$p->code = champ_sql('nom_site', $p);
438
-	}
431
+    if (!$p->etoile) {
432
+        $p->code = 'supprimer_numero(calculer_url(' .
433
+            champ_sql('url_site', $p) . ',' .
434
+            champ_sql('nom_site', $p) .
435
+            ", 'titre', \$connect, false))";
436
+    } else {
437
+        $p->code = champ_sql('nom_site', $p);
438
+    }
439 439
 
440
-	$p->interdire_scripts = true;
440
+    $p->interdire_scripts = true;
441 441
 
442
-	return $p;
442
+    return $p;
443 443
 }
444 444
 
445 445
 
@@ -456,11 +456,11 @@  discard block
 block discarded – undo
456 456
  *     Pile complétée par le code à générer
457 457
  **/
458 458
 function balise_NOTES_dist($p) {
459
-	// Recuperer les notes
460
-	$p->code = 'calculer_notes()';
459
+    // Recuperer les notes
460
+    $p->code = 'calculer_notes()';
461 461
 
462
-	#$p->interdire_scripts = true;
463
-	return $p;
462
+    #$p->interdire_scripts = true;
463
+    return $p;
464 464
 }
465 465
 
466 466
 
@@ -482,10 +482,10 @@  discard block
 block discarded – undo
482 482
  *     Pile complétée par le code à générer
483 483
  **/
484 484
 function balise_RECHERCHE_dist($p) {
485
-	$p->code = 'entites_html(_request("recherche"))';
486
-	$p->interdire_scripts = false;
485
+    $p->code = 'entites_html(_request("recherche"))';
486
+    $p->interdire_scripts = false;
487 487
 
488
-	return $p;
488
+    return $p;
489 489
 }
490 490
 
491 491
 
@@ -503,17 +503,17 @@  discard block
 block discarded – undo
503 503
  *     Pile complétée par le code à générer
504 504
  **/
505 505
 function balise_COMPTEUR_BOUCLE_dist($p) {
506
-	$b = index_boucle_mere($p);
507
-	if ($b === '') {
508
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
509
-		erreur_squelette($msg, $p);
510
-	} else {
511
-		$p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)";
512
-		$p->boucles[$b]->cptrows = true;
513
-		$p->interdire_scripts = false;
506
+    $b = index_boucle_mere($p);
507
+    if ($b === '') {
508
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
509
+        erreur_squelette($msg, $p);
510
+    } else {
511
+        $p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)";
512
+        $p->boucles[$b]->cptrows = true;
513
+        $p->interdire_scripts = false;
514 514
 
515
-		return $p;
516
-	}
515
+        return $p;
516
+    }
517 517
 }
518 518
 
519 519
 /**
@@ -531,17 +531,17 @@  discard block
 block discarded – undo
531 531
  *     Pile complétée par le code à générer
532 532
  **/
533 533
 function balise_TOTAL_BOUCLE_dist($p) {
534
-	$b = index_boucle_mere($p);
535
-	if ($b === '') {
536
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
537
-		erreur_squelette($msg, $p);
538
-	} else {
539
-		$p->code = "(\$Numrows['$b']['total'] ?? 0)";
540
-		$p->boucles[$b]->numrows = true;
541
-		$p->interdire_scripts = false;
542
-	}
534
+    $b = index_boucle_mere($p);
535
+    if ($b === '') {
536
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
537
+        erreur_squelette($msg, $p);
538
+    } else {
539
+        $p->code = "(\$Numrows['$b']['total'] ?? 0)";
540
+        $p->boucles[$b]->numrows = true;
541
+        $p->interdire_scripts = false;
542
+    }
543 543
 
544
-	return $p;
544
+    return $p;
545 545
 }
546 546
 
547 547
 
@@ -561,7 +561,7 @@  discard block
 block discarded – undo
561 561
  *     Pile complétée par le code à générer
562 562
  **/
563 563
 function balise_POINTS_dist($p) {
564
-	return rindex_pile($p, 'points', 'recherche');
564
+    return rindex_pile($p, 'points', 'recherche');
565 565
 }
566 566
 
567 567
 
@@ -582,12 +582,12 @@  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) .
587
-		')';
588
-	$p->interdire_scripts = false;
585
+    $p->code = 'ceil(' .
586
+        champ_sql('popularite', $p) .
587
+        ')';
588
+    $p->interdire_scripts = false;
589 589
 
590
-	return $p;
590
+    return $p;
591 591
 }
592 592
 
593 593
 /**
@@ -607,10 +607,10 @@  discard block
 block discarded – undo
607 607
  *     Pile complétée par le code à générer
608 608
  **/
609 609
 function balise_POPULARITE_SITE_dist($p) {
610
-	$p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])';
611
-	$p->interdire_scripts = false;
610
+    $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])';
611
+    $p->interdire_scripts = false;
612 612
 
613
-	return $p;
613
+    return $p;
614 614
 }
615 615
 
616 616
 /**
@@ -631,10 +631,10 @@  discard block
 block discarded – undo
631 631
  *     Pile complétée par le code à générer
632 632
  **/
633 633
 function balise_POPULARITE_MAX_dist($p) {
634
-	$p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])';
635
-	$p->interdire_scripts = false;
634
+    $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])';
635
+    $p->interdire_scripts = false;
636 636
 
637
-	return $p;
637
+    return $p;
638 638
 }
639 639
 
640 640
 
@@ -660,15 +660,15 @@  discard block
 block discarded – undo
660 660
  *     Pile complétée par le code à générer
661 661
  **/
662 662
 function balise_VALEUR_dist($p) {
663
-	$b = $p->nom_boucle ?: $p->id_boucle;
664
-	$p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
663
+    $b = $p->nom_boucle ?: $p->id_boucle;
664
+    $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
665 665
 ;
666
-	if (($v = interprete_argument_balise(1, $p)) !== null) {
667
-		$p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
668
-	}
669
-	$p->interdire_scripts = true;
666
+    if (($v = interprete_argument_balise(1, $p)) !== null) {
667
+        $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
668
+    }
669
+    $p->interdire_scripts = true;
670 670
 
671
-	return $p;
671
+    return $p;
672 672
 }
673 673
 
674 674
 /**
@@ -697,16 +697,16 @@  discard block
 block discarded – undo
697 697
  *     Pile complétée par le code à générer
698 698
  **/
699 699
 function balise_EXPOSE_dist($p) {
700
-	$on = "'on'";
701
-	$off = "''";
702
-	if (($v = interprete_argument_balise(1, $p)) !== null) {
703
-		$on = $v;
704
-		if (($v = interprete_argument_balise(2, $p)) !== null) {
705
-			$off = $v;
706
-		}
707
-	}
700
+    $on = "'on'";
701
+    $off = "''";
702
+    if (($v = interprete_argument_balise(1, $p)) !== null) {
703
+        $on = $v;
704
+        if (($v = interprete_argument_balise(2, $p)) !== null) {
705
+            $off = $v;
706
+        }
707
+    }
708 708
 
709
-	return calculer_balise_expose($p, $on, $off);
709
+    return calculer_balise_expose($p, $on, $off);
710 710
 }
711 711
 
712 712
 /**
@@ -724,35 +724,35 @@  discard block
 block discarded – undo
724 724
  *     Pile complétée par le code à générer
725 725
  **/
726 726
 function calculer_balise_expose($p, $on, $off) {
727
-	$b = index_boucle($p);
728
-	if (empty($p->boucles[$b]->primary)) {
729
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
730
-		erreur_squelette($msg, $p);
731
-	} else {
732
-		$key = $p->boucles[$b]->primary;
733
-		$type = $p->boucles[$p->id_boucle]->primary;
734
-		$desc = $p->boucles[$b]->show;
735
-		$connect = sql_quote($p->boucles[$b]->sql_serveur);
727
+    $b = index_boucle($p);
728
+    if (empty($p->boucles[$b]->primary)) {
729
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
730
+        erreur_squelette($msg, $p);
731
+    } else {
732
+        $key = $p->boucles[$b]->primary;
733
+        $type = $p->boucles[$p->id_boucle]->primary;
734
+        $desc = $p->boucles[$b]->show;
735
+        $connect = sql_quote($p->boucles[$b]->sql_serveur);
736 736
 
737
-		// Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite
738
-		$c = index_pile($p->id_boucle, $type, $p->boucles);
737
+        // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite
738
+        $c = index_pile($p->id_boucle, $type, $p->boucles);
739 739
 
740
-		if (isset($desc['field']['id_parent'])) {
741
-			$parent = 0; // pour if (!$parent) dans calculer_expose
742
-		} elseif (isset($desc['field']['id_rubrique'])) {
743
-			$parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b);
744
-		} elseif (isset($desc['field']['id_groupe'])) {
745
-			$parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b);
746
-		} else {
747
-			$parent = "''";
748
-		}
740
+        if (isset($desc['field']['id_parent'])) {
741
+            $parent = 0; // pour if (!$parent) dans calculer_expose
742
+        } elseif (isset($desc['field']['id_rubrique'])) {
743
+            $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b);
744
+        } elseif (isset($desc['field']['id_groupe'])) {
745
+            $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b);
746
+        } else {
747
+            $parent = "''";
748
+        }
749 749
 
750
-		$p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)";
751
-	}
750
+        $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)";
751
+    }
752 752
 
753
-	$p->interdire_scripts = false;
753
+    $p->interdire_scripts = false;
754 754
 
755
-	return $p;
755
+    return $p;
756 756
 }
757 757
 
758 758
 
@@ -792,46 +792,46 @@  discard block
 block discarded – undo
792 792
  **/
793 793
 function balise_INTRODUCTION_dist($p) {
794 794
 
795
-	$type_objet = $p->type_requete;
796
-	$cle_objet = id_table_objet($type_objet);
797
-	$_id_objet = champ_sql($cle_objet, $p);
798
-
799
-	// Récupérer les valeurs sql nécessaires : descriptif, texte et chapo
800
-	// ainsi que le longueur d'introduction donnée dans la description de l'objet.
801
-	$_introduction_longueur = 'null';
802
-	$_ligne = 'array(';
803
-	$trouver_table = charger_fonction('trouver_table', 'base');
804
-	if ($desc = $trouver_table(table_objet_sql($type_objet))) {
805
-		if (isset($desc['field']['descriptif'])) {
806
-			$_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
807
-		}
808
-		if (isset($desc['field']['texte'])) {
809
-			$_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
810
-		}
811
-		if (isset($desc['field']['chapo'])) {
812
-			$_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
813
-		}
814
-		if (isset($desc['introduction_longueur'])) {
815
-			$_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
816
-		}
817
-	}
818
-	$_ligne .= ')';
819
-
820
-	// Récupérer la longueur et la suite passés en paramètres
821
-	$_longueur_ou_suite = 'null';
822
-	if (($v1 = interprete_argument_balise(1, $p)) !== null) {
823
-		$_longueur_ou_suite = $v1;
824
-	}
825
-	$_suite = 'null';
826
-	if (($v2 = interprete_argument_balise(2, $p)) !== null) {
827
-		$_suite = $v2;
828
-	}
829
-
830
-	$p->code = "generer_introduction_entite($_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)";
831
-
832
-	#$p->interdire_scripts = true;
833
-	$p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
834
-	return $p;
795
+    $type_objet = $p->type_requete;
796
+    $cle_objet = id_table_objet($type_objet);
797
+    $_id_objet = champ_sql($cle_objet, $p);
798
+
799
+    // Récupérer les valeurs sql nécessaires : descriptif, texte et chapo
800
+    // ainsi que le longueur d'introduction donnée dans la description de l'objet.
801
+    $_introduction_longueur = 'null';
802
+    $_ligne = 'array(';
803
+    $trouver_table = charger_fonction('trouver_table', 'base');
804
+    if ($desc = $trouver_table(table_objet_sql($type_objet))) {
805
+        if (isset($desc['field']['descriptif'])) {
806
+            $_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
807
+        }
808
+        if (isset($desc['field']['texte'])) {
809
+            $_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
810
+        }
811
+        if (isset($desc['field']['chapo'])) {
812
+            $_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
813
+        }
814
+        if (isset($desc['introduction_longueur'])) {
815
+            $_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
816
+        }
817
+    }
818
+    $_ligne .= ')';
819
+
820
+    // Récupérer la longueur et la suite passés en paramètres
821
+    $_longueur_ou_suite = 'null';
822
+    if (($v1 = interprete_argument_balise(1, $p)) !== null) {
823
+        $_longueur_ou_suite = $v1;
824
+    }
825
+    $_suite = 'null';
826
+    if (($v2 = interprete_argument_balise(2, $p)) !== null) {
827
+        $_suite = $v2;
828
+    }
829
+
830
+    $p->code = "generer_introduction_entite($_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)";
831
+
832
+    #$p->interdire_scripts = true;
833
+    $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
834
+    return $p;
835 835
 }
836 836
 
837 837
 
@@ -851,15 +851,15 @@  discard block
 block discarded – undo
851 851
  *     Pile complétée par le code à générer
852 852
  **/
853 853
 function balise_LANG_dist($p) {
854
-	$_lang = champ_sql('lang', $p);
855
-	if (!$p->etoile) {
856
-		$p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])";
857
-	} else {
858
-		$p->code = "spip_htmlentities($_lang)";
859
-	}
860
-	$p->interdire_scripts = false;
854
+    $_lang = champ_sql('lang', $p);
855
+    if (!$p->etoile) {
856
+        $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])";
857
+    } else {
858
+        $p->code = "spip_htmlentities($_lang)";
859
+    }
860
+    $p->interdire_scripts = false;
861 861
 
862
-	return $p;
862
+    return $p;
863 863
 }
864 864
 
865 865
 /**
@@ -881,48 +881,48 @@  discard block
 block discarded – undo
881 881
  *     Pile complétée par le code à générer
882 882
  */
883 883
 function balise_LESAUTEURS_dist($p) {
884
-	// Cherche le champ 'lesauteurs' dans la pile
885
-	$_lesauteurs = champ_sql('lesauteurs', $p, false);
886
-
887
-	// Si le champ n'existe pas (cas de spip_articles), on applique
888
-	// le modele lesauteurs.html en passant id_article dans le contexte;
889
-	// dans le cas contraire on prend le champ 'lesauteurs'
890
-	// (cf extension sites/)
891
-	if (
892
-		$_lesauteurs
893
-		and $_lesauteurs != '@$Pile[0][\'lesauteurs\']'
894
-	) {
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;
884
+    // Cherche le champ 'lesauteurs' dans la pile
885
+    $_lesauteurs = champ_sql('lesauteurs', $p, false);
886
+
887
+    // Si le champ n'existe pas (cas de spip_articles), on applique
888
+    // le modele lesauteurs.html en passant id_article dans le contexte;
889
+    // dans le cas contraire on prend le champ 'lesauteurs'
890
+    // (cf extension sites/)
891
+    if (
892
+        $_lesauteurs
893
+        and $_lesauteurs != '@$Pile[0][\'lesauteurs\']'
894
+    ) {
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(' . $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(' . $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(' . $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(' . $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 ($p->code === null || !strlen($p->code)) {
1655
-		$p->code = "''";
1656
-	}
1657
-	$p->interdire_scripts = false;
1653
+    $p->code = interprete_argument_balise(1, $p);
1654
+    if ($p->code === null || !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,20 +1761,20 @@  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 1779
 
1780 1780
 
@@ -1810,55 +1810,55 @@  discard block
 block discarded – undo
1810 1810
  **/
1811 1811
 function balise_CACHE_dist($p) {
1812 1812
 
1813
-	if ($p->param) {
1814
-		$duree = valeur_numerique($p->param[0][1][0]->texte);
1815
-
1816
-		// noter la duree du cache dans un entete proprietaire
1817
-
1818
-		$code = "'<'.'" . '?php header("X-Spip-Cache: '
1819
-			. $duree
1820
-			. '"); ?' . "'.'>'";
1821
-
1822
-		// Remplir le header Cache-Control
1823
-		// cas #CACHE{0}
1824
-		if ($duree == 0) {
1825
-			$code .= ".'<'.'"
1826
-				. '?php header("Cache-Control: no-cache, must-revalidate"); ?'
1827
-				. "'.'><'.'"
1828
-				. '?php header("Pragma: no-cache"); ?'
1829
-				. "'.'>'";
1830
-		}
1831
-
1832
-		// recuperer les parametres suivants
1833
-		$i = 1;
1834
-		while (isset($p->param[0][++$i])) {
1835
-			$pa = ($p->param[0][$i][0]->texte);
1836
-
1837
-			if (
1838
-				$pa == 'cache-client'
1839
-				and $duree > 0
1840
-			) {
1841
-				$code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1842
-					. $duree
1843
-					. '"); ?' . "'.'>'";
1844
-				// il semble logique, si on cache-client, de ne pas invalider
1845
-				$pa = 'statique';
1846
-			}
1847
-
1848
-			if (
1849
-				$pa == 'statique'
1850
-				and $duree > 0
1851
-			) {
1852
-				$code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1853
-			}
1854
-		}
1855
-	} else {
1856
-		$code = "''";
1857
-	}
1858
-	$p->code = $code;
1859
-	$p->interdire_scripts = false;
1860
-
1861
-	return $p;
1813
+    if ($p->param) {
1814
+        $duree = valeur_numerique($p->param[0][1][0]->texte);
1815
+
1816
+        // noter la duree du cache dans un entete proprietaire
1817
+
1818
+        $code = "'<'.'" . '?php header("X-Spip-Cache: '
1819
+            . $duree
1820
+            . '"); ?' . "'.'>'";
1821
+
1822
+        // Remplir le header Cache-Control
1823
+        // cas #CACHE{0}
1824
+        if ($duree == 0) {
1825
+            $code .= ".'<'.'"
1826
+                . '?php header("Cache-Control: no-cache, must-revalidate"); ?'
1827
+                . "'.'><'.'"
1828
+                . '?php header("Pragma: no-cache"); ?'
1829
+                . "'.'>'";
1830
+        }
1831
+
1832
+        // recuperer les parametres suivants
1833
+        $i = 1;
1834
+        while (isset($p->param[0][++$i])) {
1835
+            $pa = ($p->param[0][$i][0]->texte);
1836
+
1837
+            if (
1838
+                $pa == 'cache-client'
1839
+                and $duree > 0
1840
+            ) {
1841
+                $code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1842
+                    . $duree
1843
+                    . '"); ?' . "'.'>'";
1844
+                // il semble logique, si on cache-client, de ne pas invalider
1845
+                $pa = 'statique';
1846
+            }
1847
+
1848
+            if (
1849
+                $pa == 'statique'
1850
+                and $duree > 0
1851
+            ) {
1852
+                $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1853
+            }
1854
+        }
1855
+    } else {
1856
+        $code = "''";
1857
+    }
1858
+    $p->code = $code;
1859
+    $p->interdire_scripts = false;
1860
+
1861
+    return $p;
1862 1862
 }
1863 1863
 
1864 1864
 
@@ -1890,13 +1890,13 @@  discard block
 block discarded – undo
1890 1890
  *     Pile complétée par le code à générer
1891 1891
  */
1892 1892
 function balise_INSERT_HEAD_dist($p) {
1893
-	$p->code = "'<'.'"
1894
-		. '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?'
1895
-		. "'.'>'";
1896
-	$p->code .= ". pipeline('insert_head','<!-- insert_head -->')";
1897
-	$p->interdire_scripts = false;
1893
+    $p->code = "'<'.'"
1894
+        . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?'
1895
+        . "'.'>'";
1896
+    $p->code .= ". pipeline('insert_head','<!-- insert_head -->')";
1897
+    $p->interdire_scripts = false;
1898 1898
 
1899
-	return $p;
1899
+    return $p;
1900 1900
 }
1901 1901
 
1902 1902
 /**
@@ -1914,10 +1914,10 @@  discard block
 block discarded – undo
1914 1914
  *     Pile complétée par le code à générer
1915 1915
  */
1916 1916
 function balise_INSERT_HEAD_CSS_dist($p) {
1917
-	$p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')";
1918
-	$p->interdire_scripts = false;
1917
+    $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')";
1918
+    $p->interdire_scripts = false;
1919 1919
 
1920
-	return $p;
1920
+    return $p;
1921 1921
 }
1922 1922
 
1923 1923
 /**
@@ -1932,11 +1932,11 @@  discard block
 block discarded – undo
1932 1932
  *     Pile complétée par le code à générer
1933 1933
  **/
1934 1934
 function balise_INCLUDE_dist($p) {
1935
-	if (function_exists('balise_INCLURE')) {
1936
-		return balise_INCLURE($p);
1937
-	} else {
1938
-		return balise_INCLURE_dist($p);
1939
-	}
1935
+    if (function_exists('balise_INCLURE')) {
1936
+        return balise_INCLURE($p);
1937
+    } else {
1938
+        return balise_INCLURE_dist($p);
1939
+    }
1940 1940
 }
1941 1941
 
1942 1942
 /**
@@ -1970,66 +1970,66 @@  discard block
 block discarded – undo
1970 1970
  *     Pile complétée par le code à générer
1971 1971
  **/
1972 1972
 function balise_INCLURE_dist($p) {
1973
-	$id_boucle = $p->id_boucle;
1974
-	// la lang n'est pas passe de facon automatique par argumenter
1975
-	// mais le sera pas recuperer_fond, sauf si etoile=>true est passe
1976
-	// en option
1977
-
1978
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false);
1979
-
1980
-	// erreur de syntaxe = fond absent
1981
-	// (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
1982
-	if (!$_contexte) {
1983
-		$contexte = [];
1984
-	}
1985
-
1986
-	if (isset($_contexte['fond'])) {
1987
-		$f = $_contexte['fond'];
1988
-		// toujours vrai :
1989
-		if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) {
1990
-			$f = $r[1];
1991
-			unset($_contexte['fond']);
1992
-		} else {
1993
-			spip_log('compilation de #INCLURE a revoir');
1994
-		}
1995
-
1996
-		// #INCLURE{doublons}
1997
-		if (isset($_contexte['doublons'])) {
1998
-			$_contexte['doublons'] = "'doublons' => \$doublons";
1999
-		}
2000
-
2001
-		// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
2002
-		$flag_env = false;
2003
-		if (isset($_contexte['env']) or isset($_contexte['self'])) {
2004
-			$flag_env = true;
2005
-			unset($_contexte['env']);
2006
-		}
2007
-
2008
-		$_options = [];
2009
-		if (isset($_contexte['ajax'])) {
2010
-			$_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2011
-			unset($_contexte['ajax']);
2012
-		}
2013
-		if ($p->etoile) {
2014
-			$_options[] = "'etoile'=>true";
2015
-		}
2016
-		$_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2017
-
2018
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2019
-		if ($flag_env) {
2020
-			$_l = "array_merge(\$Pile[0],$_l)";
2021
-		}
2022
-
2023
-		$p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''");
2024
-	} elseif (!isset($_contexte[1])) {
2025
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2026
-		erreur_squelette($msg, $p);
2027
-	} else {
2028
-		$p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2029
-	}
2030
-
2031
-	$p->interdire_scripts = false; // la securite est assuree par recuperer_fond
2032
-	return $p;
1973
+    $id_boucle = $p->id_boucle;
1974
+    // la lang n'est pas passe de facon automatique par argumenter
1975
+    // mais le sera pas recuperer_fond, sauf si etoile=>true est passe
1976
+    // en option
1977
+
1978
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false);
1979
+
1980
+    // erreur de syntaxe = fond absent
1981
+    // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
1982
+    if (!$_contexte) {
1983
+        $contexte = [];
1984
+    }
1985
+
1986
+    if (isset($_contexte['fond'])) {
1987
+        $f = $_contexte['fond'];
1988
+        // toujours vrai :
1989
+        if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) {
1990
+            $f = $r[1];
1991
+            unset($_contexte['fond']);
1992
+        } else {
1993
+            spip_log('compilation de #INCLURE a revoir');
1994
+        }
1995
+
1996
+        // #INCLURE{doublons}
1997
+        if (isset($_contexte['doublons'])) {
1998
+            $_contexte['doublons'] = "'doublons' => \$doublons";
1999
+        }
2000
+
2001
+        // Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
2002
+        $flag_env = false;
2003
+        if (isset($_contexte['env']) or isset($_contexte['self'])) {
2004
+            $flag_env = true;
2005
+            unset($_contexte['env']);
2006
+        }
2007
+
2008
+        $_options = [];
2009
+        if (isset($_contexte['ajax'])) {
2010
+            $_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2011
+            unset($_contexte['ajax']);
2012
+        }
2013
+        if ($p->etoile) {
2014
+            $_options[] = "'etoile'=>true";
2015
+        }
2016
+        $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2017
+
2018
+        $_l = 'array(' . join(",\n\t", $_contexte) . ')';
2019
+        if ($flag_env) {
2020
+            $_l = "array_merge(\$Pile[0],$_l)";
2021
+        }
2022
+
2023
+        $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''");
2024
+    } elseif (!isset($_contexte[1])) {
2025
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2026
+        erreur_squelette($msg, $p);
2027
+    } else {
2028
+        $p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2029
+    }
2030
+
2031
+    $p->interdire_scripts = false; // la securite est assuree par recuperer_fond
2032
+    return $p;
2033 2033
 }
2034 2034
 
2035 2035
 
@@ -2057,69 +2057,69 @@  discard block
 block discarded – undo
2057 2057
  **/
2058 2058
 function balise_MODELE_dist($p) {
2059 2059
 
2060
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
2061
-
2062
-	// erreur de syntaxe = fond absent
2063
-	// (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
2064
-	if (!$_contexte) {
2065
-		$_contexte = [];
2066
-	}
2067
-
2068
-	if (!isset($_contexte[1])) {
2069
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']];
2070
-		erreur_squelette($msg, $p);
2071
-	} else {
2072
-		$nom = $_contexte[1];
2073
-		unset($_contexte[1]);
2074
-
2075
-		if (preg_match("/^\s*'[^']*'/s", $nom)) {
2076
-			$nom = "'modeles/" . substr($nom, 1);
2077
-		} else {
2078
-			$nom = "'modeles/' . $nom";
2079
-		}
2080
-
2081
-		$flag_env = false;
2082
-		if (isset($_contexte['env'])) {
2083
-			$flag_env = true;
2084
-			unset($_contexte['env']);
2085
-		}
2086
-
2087
-		// Incoherence dans la syntaxe du contexte. A revoir.
2088
-		// Reserver la cle primaire de la boucle courante si elle existe
2089
-		if (isset($p->boucles[$p->id_boucle]->primary)) {
2090
-			$primary = $p->boucles[$p->id_boucle]->primary;
2091
-			if (!strpos($primary, ',')) {
2092
-				$id = champ_sql($primary, $p);
2093
-				$_contexte[] = "'$primary'=>" . $id;
2094
-				$_contexte[] = "'id'=>" . $id;
2095
-			}
2096
-		}
2097
-		$_contexte[] = "'recurs'=>(++\$recurs)";
2098
-		$connect = '';
2099
-		if (isset($p->boucles[$p->id_boucle])) {
2100
-			$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2101
-		}
2102
-
2103
-		$_options = memoriser_contexte_compil($p);
2104
-		$_options = "'compil'=>array($_options), 'trim'=>true";
2105
-		if (isset($_contexte['ajax'])) {
2106
-			$_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2107
-			unset($_contexte['ajax']);
2108
-		}
2109
-
2110
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2111
-		if ($flag_env) {
2112
-			$_l = "array_merge(\$Pile[0],$_l)";
2113
-		}
2114
-
2115
-		$page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect));
2116
-
2117
-		$p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n";
2118
-
2119
-		$p->interdire_scripts = false; // securite assuree par le squelette
2120
-	}
2121
-
2122
-	return $p;
2060
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
2061
+
2062
+    // erreur de syntaxe = fond absent
2063
+    // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
2064
+    if (!$_contexte) {
2065
+        $_contexte = [];
2066
+    }
2067
+
2068
+    if (!isset($_contexte[1])) {
2069
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']];
2070
+        erreur_squelette($msg, $p);
2071
+    } else {
2072
+        $nom = $_contexte[1];
2073
+        unset($_contexte[1]);
2074
+
2075
+        if (preg_match("/^\s*'[^']*'/s", $nom)) {
2076
+            $nom = "'modeles/" . substr($nom, 1);
2077
+        } else {
2078
+            $nom = "'modeles/' . $nom";
2079
+        }
2080
+
2081
+        $flag_env = false;
2082
+        if (isset($_contexte['env'])) {
2083
+            $flag_env = true;
2084
+            unset($_contexte['env']);
2085
+        }
2086
+
2087
+        // Incoherence dans la syntaxe du contexte. A revoir.
2088
+        // Reserver la cle primaire de la boucle courante si elle existe
2089
+        if (isset($p->boucles[$p->id_boucle]->primary)) {
2090
+            $primary = $p->boucles[$p->id_boucle]->primary;
2091
+            if (!strpos($primary, ',')) {
2092
+                $id = champ_sql($primary, $p);
2093
+                $_contexte[] = "'$primary'=>" . $id;
2094
+                $_contexte[] = "'id'=>" . $id;
2095
+            }
2096
+        }
2097
+        $_contexte[] = "'recurs'=>(++\$recurs)";
2098
+        $connect = '';
2099
+        if (isset($p->boucles[$p->id_boucle])) {
2100
+            $connect = $p->boucles[$p->id_boucle]->sql_serveur;
2101
+        }
2102
+
2103
+        $_options = memoriser_contexte_compil($p);
2104
+        $_options = "'compil'=>array($_options), 'trim'=>true";
2105
+        if (isset($_contexte['ajax'])) {
2106
+            $_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2107
+            unset($_contexte['ajax']);
2108
+        }
2109
+
2110
+        $_l = 'array(' . join(",\n\t", $_contexte) . ')';
2111
+        if ($flag_env) {
2112
+            $_l = "array_merge(\$Pile[0],$_l)";
2113
+        }
2114
+
2115
+        $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect));
2116
+
2117
+        $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n";
2118
+
2119
+        $p->interdire_scripts = false; // securite assuree par le squelette
2120
+    }
2121
+
2122
+    return $p;
2123 2123
 }
2124 2124
 
2125 2125
 
@@ -2143,21 +2143,21 @@  discard block
 block discarded – undo
2143 2143
  *     Pile complétée par le code à générer
2144 2144
  **/
2145 2145
 function balise_SET_dist($p) {
2146
-	$_nom = interprete_argument_balise(1, $p);
2147
-	$_val = interprete_argument_balise(2, $p);
2146
+    $_nom = interprete_argument_balise(1, $p);
2147
+    $_val = interprete_argument_balise(2, $p);
2148 2148
 
2149
-	if (!$_nom or !$_val) {
2150
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']];
2151
-		erreur_squelette($err_b_s_a, $p);
2152
-	}
2153
-	// affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4
2154
-	// cf https://bugs.php.net/bug.php?id=65845
2155
-	else {
2156
-		$p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)";
2157
-	}
2149
+    if (!$_nom or !$_val) {
2150
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']];
2151
+        erreur_squelette($err_b_s_a, $p);
2152
+    }
2153
+    // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4
2154
+    // cf https://bugs.php.net/bug.php?id=65845
2155
+    else {
2156
+        $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)";
2157
+    }
2158 2158
 
2159
-	$p->interdire_scripts = false; // la balise ne renvoie rien
2160
-	return $p;
2159
+    $p->interdire_scripts = false; // la balise ne renvoie rien
2160
+    return $p;
2161 2161
 }
2162 2162
 
2163 2163
 
@@ -2187,12 +2187,12 @@  discard block
 block discarded – undo
2187 2187
  *     Pile complétée par le code à générer
2188 2188
  **/
2189 2189
 function balise_GET_dist($p) {
2190
-	$p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance
2191
-	if (function_exists('balise_ENV')) {
2192
-		return balise_ENV($p, '$Pile["vars"]??[]');
2193
-	} else {
2194
-		return balise_ENV_dist($p, '$Pile["vars"]??[]');
2195
-	}
2190
+    $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance
2191
+    if (function_exists('balise_ENV')) {
2192
+        return balise_ENV($p, '$Pile["vars"]??[]');
2193
+    } else {
2194
+        return balise_ENV_dist($p, '$Pile["vars"]??[]');
2195
+    }
2196 2196
 }
2197 2197
 
2198 2198
 
@@ -2215,22 +2215,22 @@  discard block
 block discarded – undo
2215 2215
  *     Pile complétée par le code à générer
2216 2216
  **/
2217 2217
 function balise_DOUBLONS_dist($p) {
2218
-	if ($type = interprete_argument_balise(1, $p)) {
2219
-		if ($famille = interprete_argument_balise(2, $p)) {
2220
-			$type .= '.' . $famille;
2221
-		}
2222
-		$p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2223
-		if (!$p->etoile) {
2224
-			$p->code = 'array_filter(array_map("intval",explode(",",'
2225
-				. $p->code . ')))';
2226
-		}
2227
-	} else {
2228
-		$p->code = '$doublons';
2229
-	}
2218
+    if ($type = interprete_argument_balise(1, $p)) {
2219
+        if ($famille = interprete_argument_balise(2, $p)) {
2220
+            $type .= '.' . $famille;
2221
+        }
2222
+        $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2223
+        if (!$p->etoile) {
2224
+            $p->code = 'array_filter(array_map("intval",explode(",",'
2225
+                . $p->code . ')))';
2226
+        }
2227
+    } else {
2228
+        $p->code = '$doublons';
2229
+    }
2230 2230
 
2231
-	$p->interdire_scripts = false;
2231
+    $p->interdire_scripts = false;
2232 2232
 
2233
-	return $p;
2233
+    return $p;
2234 2234
 }
2235 2235
 
2236 2236
 
@@ -2253,18 +2253,18 @@  discard block
 block discarded – undo
2253 2253
  *     Pile complétée par le code à générer
2254 2254
  **/
2255 2255
 function balise_PIPELINE_dist($p) {
2256
-	$_pipe = interprete_argument_balise(1, $p);
2257
-	if (!$_pipe) {
2258
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']];
2259
-		erreur_squelette($err_b_s_a, $p);
2260
-	} else {
2261
-		$_flux = interprete_argument_balise(2, $p);
2262
-		$_flux = $_flux ?: "''";
2263
-		$p->code = "pipeline( $_pipe , $_flux )";
2264
-		$p->interdire_scripts = false;
2265
-	}
2256
+    $_pipe = interprete_argument_balise(1, $p);
2257
+    if (!$_pipe) {
2258
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']];
2259
+        erreur_squelette($err_b_s_a, $p);
2260
+    } else {
2261
+        $_flux = interprete_argument_balise(2, $p);
2262
+        $_flux = $_flux ?: "''";
2263
+        $p->code = "pipeline( $_pipe , $_flux )";
2264
+        $p->interdire_scripts = false;
2265
+    }
2266 2266
 
2267
-	return $p;
2267
+    return $p;
2268 2268
 }
2269 2269
 
2270 2270
 
@@ -2289,10 +2289,10 @@  discard block
 block discarded – undo
2289 2289
  *     Pile complétée par le code à générer
2290 2290
  **/
2291 2291
 function balise_EDIT_dist($p) {
2292
-	$p->code = "''";
2293
-	$p->interdire_scripts = false;
2292
+    $p->code = "''";
2293
+    $p->interdire_scripts = false;
2294 2294
 
2295
-	return $p;
2295
+    return $p;
2296 2296
 }
2297 2297
 
2298 2298
 
@@ -2315,11 +2315,11 @@  discard block
 block discarded – undo
2315 2315
  *     Pile complétée par le code à générer
2316 2316
  **/
2317 2317
 function balise_TOTAL_UNIQUE_dist($p) {
2318
-	$_famille = interprete_argument_balise(1, $p);
2319
-	$_famille = $_famille ?: "''";
2320
-	$p->code = "unique('', $_famille, true)";
2318
+    $_famille = interprete_argument_balise(1, $p);
2319
+    $_famille = $_famille ?: "''";
2320
+    $p->code = "unique('', $_famille, true)";
2321 2321
 
2322
-	return $p;
2322
+    return $p;
2323 2323
 }
2324 2324
 
2325 2325
 /**
@@ -2342,19 +2342,19 @@  discard block
 block discarded – undo
2342 2342
  *     Pile complétée par le code à générer
2343 2343
  **/
2344 2344
 function balise_ARRAY_dist($p) {
2345
-	$_code = [];
2346
-	$n = 1;
2347
-	do {
2348
-		$_key = interprete_argument_balise($n++, $p);
2349
-		$_val = interprete_argument_balise($n++, $p);
2350
-		if ($_key and $_val) {
2351
-			$_code[] = "$_key => $_val";
2352
-		}
2353
-	} while ($_key && $_val);
2354
-	$p->code = 'array(' . join(', ', $_code) . ')';
2355
-	$p->interdire_scripts = false;
2345
+    $_code = [];
2346
+    $n = 1;
2347
+    do {
2348
+        $_key = interprete_argument_balise($n++, $p);
2349
+        $_val = interprete_argument_balise($n++, $p);
2350
+        if ($_key and $_val) {
2351
+            $_code[] = "$_key => $_val";
2352
+        }
2353
+    } while ($_key && $_val);
2354
+    $p->code = 'array(' . join(', ', $_code) . ')';
2355
+    $p->interdire_scripts = false;
2356 2356
 
2357
-	return $p;
2357
+    return $p;
2358 2358
 }
2359 2359
 
2360 2360
 /**
@@ -2373,15 +2373,15 @@  discard block
 block discarded – undo
2373 2373
  *     Pile complétée par le code à générer
2374 2374
  */
2375 2375
 function balise_LISTE_dist($p) {
2376
-	$_code = [];
2377
-	$n = 1;
2378
-	while ($_val = interprete_argument_balise($n++, $p)) {
2379
-		$_code[] = $_val;
2380
-	}
2381
-	$p->code = 'array(' . join(', ', $_code) . ')';
2382
-	$p->interdire_scripts = false;
2376
+    $_code = [];
2377
+    $n = 1;
2378
+    while ($_val = interprete_argument_balise($n++, $p)) {
2379
+        $_code[] = $_val;
2380
+    }
2381
+    $p->code = 'array(' . join(', ', $_code) . ')';
2382
+    $p->interdire_scripts = false;
2383 2383
 
2384
-	return $p;
2384
+    return $p;
2385 2385
 }
2386 2386
 
2387 2387
 
@@ -2415,21 +2415,21 @@  discard block
 block discarded – undo
2415 2415
  *     Pile complétée par le code à générer
2416 2416
  **/
2417 2417
 function balise_AUTORISER_dist($p) {
2418
-	$_code = [];
2419
-	$p->descr['session'] = true; // faire un cache par session
2418
+    $_code = [];
2419
+    $p->descr['session'] = true; // faire un cache par session
2420 2420
 
2421
-	$n = 1;
2422
-	while ($_v = interprete_argument_balise($n++, $p)) {
2423
-		$_code[] = $_v;
2424
-	}
2421
+    $n = 1;
2422
+    while ($_v = interprete_argument_balise($n++, $p)) {
2423
+        $_code[] = $_v;
2424
+    }
2425 2425
 
2426
-	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2427
-		', ',
2428
-		$_code
2429
-	) . ')?" ":"")';
2430
-	$p->interdire_scripts = false;
2426
+    $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2427
+        ', ',
2428
+        $_code
2429
+    ) . ')?" ":"")';
2430
+    $p->interdire_scripts = false;
2431 2431
 
2432
-	return $p;
2432
+    return $p;
2433 2433
 }
2434 2434
 
2435 2435
 
@@ -2453,15 +2453,15 @@  discard block
 block discarded – undo
2453 2453
  *     Pile complétée par le code à générer
2454 2454
  **/
2455 2455
 function balise_PLUGIN_dist($p) {
2456
-	$plugin = interprete_argument_balise(1, $p);
2457
-	$plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
2458
-	$type_info = interprete_argument_balise(2, $p);
2459
-	$type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2456
+    $plugin = interprete_argument_balise(1, $p);
2457
+    $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
2458
+    $type_info = interprete_argument_balise(2, $p);
2459
+    $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2460 2460
 
2461
-	$f = chercher_filtre('info_plugin');
2462
-	$p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2461
+    $f = chercher_filtre('info_plugin');
2462
+    $p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2463 2463
 
2464
-	return $p;
2464
+    return $p;
2465 2465
 }
2466 2466
 
2467 2467
 /**
@@ -2482,9 +2482,9 @@  discard block
 block discarded – undo
2482 2482
  *     Pile complétée par le code à générer
2483 2483
  **/
2484 2484
 function balise_AIDER_dist($p) {
2485
-	$_motif = interprete_argument_balise(1, $p);
2486
-	$p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')";
2487
-	return $p;
2485
+    $_motif = interprete_argument_balise(1, $p);
2486
+    $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')";
2487
+    return $p;
2488 2488
 }
2489 2489
 
2490 2490
 /**
@@ -2510,16 +2510,16 @@  discard block
 block discarded – undo
2510 2510
  *     Pile complétée par le code à générer
2511 2511
  **/
2512 2512
 function balise_ACTION_FORMULAIRE($p) {
2513
-	if (!$_url = interprete_argument_balise(1, $p)) {
2514
-		$_url = "(\$Pile[0]['action'] ?? '')";
2515
-	}
2516
-	if (!$_form = interprete_argument_balise(2, $p)) {
2517
-		$_form = "(\$Pile[0]['form'] ?? '')";
2518
-	}
2519
-
2520
-	// envoyer le nom du formulaire que l'on traite
2521
-	// transmettre les eventuels args de la balise formulaire
2522
-	$p->code = "	'<span class=\"form-hidden\">' .
2513
+    if (!$_url = interprete_argument_balise(1, $p)) {
2514
+        $_url = "(\$Pile[0]['action'] ?? '')";
2515
+    }
2516
+    if (!$_form = interprete_argument_balise(2, $p)) {
2517
+        $_form = "(\$Pile[0]['form'] ?? '')";
2518
+    }
2519
+
2520
+    // envoyer le nom du formulaire que l'on traite
2521
+    // transmettre les eventuels args de la balise formulaire
2522
+    $p->code = "	'<span class=\"form-hidden\">' .
2523 2523
 	form_hidden($_url) .
2524 2524
 	'<input name=\'formulaire_action\' type=\'hidden\'
2525 2525
 		value=\'' . $_form . '\' />' .
@@ -2530,9 +2530,9 @@  discard block
 block discarded – undo
2530 2530
 	(\$Pile[0]['_hidden'] ?? '') .
2531 2531
 	'</span>'";
2532 2532
 
2533
-	$p->interdire_scripts = false;
2533
+    $p->interdire_scripts = false;
2534 2534
 
2535
-	return $p;
2535
+    return $p;
2536 2536
 }
2537 2537
 
2538 2538
 
@@ -2573,25 +2573,25 @@  discard block
 block discarded – undo
2573 2573
  */
2574 2574
 function balise_BOUTON_ACTION_dist($p) {
2575 2575
 
2576
-	$args = [];
2577
-	for ($k = 1; $k <= 6; $k++) {
2578
-		$_a = interprete_argument_balise($k, $p);
2579
-		if (!$_a) {
2580
-			$_a = "''";
2581
-		}
2582
-		$args[] = $_a;
2583
-	}
2584
-	// supprimer les args vides
2585
-	while (end($args) == "''" and count($args) > 2) {
2586
-		array_pop($args);
2587
-	}
2588
-	$args = implode(',', $args);
2576
+    $args = [];
2577
+    for ($k = 1; $k <= 6; $k++) {
2578
+        $_a = interprete_argument_balise($k, $p);
2579
+        if (!$_a) {
2580
+            $_a = "''";
2581
+        }
2582
+        $args[] = $_a;
2583
+    }
2584
+    // supprimer les args vides
2585
+    while (end($args) == "''" and count($args) > 2) {
2586
+        array_pop($args);
2587
+    }
2588
+    $args = implode(',', $args);
2589 2589
 
2590
-	$bouton_action = chercher_filtre('bouton_action');
2591
-	$p->code = "$bouton_action($args)";
2592
-	$p->interdire_scripts = false;
2590
+    $bouton_action = chercher_filtre('bouton_action');
2591
+    $p->code = "$bouton_action($args)";
2592
+    $p->interdire_scripts = false;
2593 2593
 
2594
-	return $p;
2594
+    return $p;
2595 2595
 }
2596 2596
 
2597 2597
 
@@ -2610,10 +2610,10 @@  discard block
 block discarded – undo
2610 2610
  *     Pile complétée par le code à générer
2611 2611
  */
2612 2612
 function balise_SLOGAN_SITE_SPIP_dist($p) {
2613
-	$p->code = "\$GLOBALS['meta']['slogan_site']";
2613
+    $p->code = "\$GLOBALS['meta']['slogan_site']";
2614 2614
 
2615
-	#$p->interdire_scripts = true;
2616
-	return $p;
2615
+    #$p->interdire_scripts = true;
2616
+    return $p;
2617 2617
 }
2618 2618
 
2619 2619
 
@@ -2637,10 +2637,10 @@  discard block
 block discarded – undo
2637 2637
  *     Pile complétée par le code à générer
2638 2638
  */
2639 2639
 function balise_HTML5_dist($p) {
2640
-	$p->code = html5_permis() ? "' '" : "''";
2641
-	$p->interdire_scripts = false;
2640
+    $p->code = html5_permis() ? "' '" : "''";
2641
+    $p->interdire_scripts = false;
2642 2642
 
2643
-	return $p;
2643
+    return $p;
2644 2644
 }
2645 2645
 
2646 2646
 
@@ -2666,61 +2666,61 @@  discard block
 block discarded – undo
2666 2666
  *     Pile complétée par le code à générer
2667 2667
  */
2668 2668
 function balise_TRI_dist($p, $liste = 'true') {
2669
-	$b = index_boucle_mere($p);
2670
-	// s'il n'y a pas de nom de boucle, on ne peut pas trier
2671
-	if ($b === '') {
2672
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
2673
-		erreur_squelette($msg, $p);
2674
-		$p->code = "''";
2669
+    $b = index_boucle_mere($p);
2670
+    // s'il n'y a pas de nom de boucle, on ne peut pas trier
2671
+    if ($b === '') {
2672
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
2673
+        erreur_squelette($msg, $p);
2674
+        $p->code = "''";
2675 2675
 
2676
-		return $p;
2677
-	}
2678
-	$boucle = $p->boucles[$b];
2676
+        return $p;
2677
+    }
2678
+    $boucle = $p->boucles[$b];
2679 2679
 
2680
-	// s'il n'y a pas de tri_champ, c'est qu'on se trouve
2681
-	// dans un boucle recursive ou qu'on a oublie le critere {tri}
2682
-	if (!isset($boucle->modificateur['tri_champ'])) {
2683
-		$msg = ['zbug_champ_hors_critere', [
2684
-			'champ' => zbug_presenter_champ($p),
2685
-			'critere' => 'tri'
2686
-		]];
2687
-		erreur_squelette($msg, $p);
2688
-		$p->code = "''";
2680
+    // s'il n'y a pas de tri_champ, c'est qu'on se trouve
2681
+    // dans un boucle recursive ou qu'on a oublie le critere {tri}
2682
+    if (!isset($boucle->modificateur['tri_champ'])) {
2683
+        $msg = ['zbug_champ_hors_critere', [
2684
+            'champ' => zbug_presenter_champ($p),
2685
+            'critere' => 'tri'
2686
+        ]];
2687
+        erreur_squelette($msg, $p);
2688
+        $p->code = "''";
2689 2689
 
2690
-		return $p;
2691
-	}
2690
+        return $p;
2691
+    }
2692 2692
 
2693
-	$_champ = interprete_argument_balise(1, $p);
2694
-	// si pas de champ, renvoyer le critere de tri utilise
2695
-	if (!$_champ) {
2696
-		$p->code = $boucle->modificateur['tri_champ'];
2693
+    $_champ = interprete_argument_balise(1, $p);
2694
+    // si pas de champ, renvoyer le critere de tri utilise
2695
+    if (!$_champ) {
2696
+        $p->code = $boucle->modificateur['tri_champ'];
2697 2697
 
2698
-		return $p;
2699
-	}
2700
-	// forcer la jointure si besoin, et si le champ est statique
2701
-	if (preg_match(",^'([\w.]+)'$,i", $_champ, $m)) {
2702
-		index_pile($b, $m[1], $p->boucles, '', null, true, false);
2703
-	}
2698
+        return $p;
2699
+    }
2700
+    // forcer la jointure si besoin, et si le champ est statique
2701
+    if (preg_match(",^'([\w.]+)'$,i", $_champ, $m)) {
2702
+        index_pile($b, $m[1], $p->boucles, '', null, true, false);
2703
+    }
2704 2704
 
2705
-	$_libelle = interprete_argument_balise(2, $p);
2706
-	$_libelle = $_libelle ?: $_champ;
2705
+    $_libelle = interprete_argument_balise(2, $p);
2706
+    $_libelle = $_libelle ?: $_champ;
2707 2707
 
2708
-	$_class = interprete_argument_balise(3, $p);
2709
-	// si champ = ">" c'est un lien vers le tri croissant : de gauche a droite ==> 1
2710
-	// si champ = "<" c'est un lien vers le tri decroissant : (sens inverse) == -1
2711
-	$_issens = "in_array($_champ,array('>','<'))";
2712
-	$_sens = "(strpos('< >',$_champ)-1)";
2708
+    $_class = interprete_argument_balise(3, $p);
2709
+    // si champ = ">" c'est un lien vers le tri croissant : de gauche a droite ==> 1
2710
+    // si champ = "<" c'est un lien vers le tri decroissant : (sens inverse) == -1
2711
+    $_issens = "in_array($_champ,array('>','<'))";
2712
+    $_sens = "(strpos('< >',$_champ)-1)";
2713 2713
 
2714
-	$_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom'];
2715
-	$_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
2716
-	$_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')";
2717
-	$_on = '$s?(' . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)";
2714
+    $_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom'];
2715
+    $_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
2716
+    $_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')";
2717
+    $_on = '$s?(' . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)";
2718 2718
 
2719
-	$p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : '') . ')';
2720
-	//$p->code = "''";
2721
-	$p->interdire_scripts = false;
2719
+    $p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : '') . ')';
2720
+    //$p->code = "''";
2721
+    $p->interdire_scripts = false;
2722 2722
 
2723
-	return $p;
2723
+    return $p;
2724 2724
 }
2725 2725
 
2726 2726
 
@@ -2741,21 +2741,21 @@  discard block
 block discarded – undo
2741 2741
  *     Pile complétée par le code à générer
2742 2742
  */
2743 2743
 function balise_SAUTER_dist($p) {
2744
-	$id_boucle = $p->id_boucle;
2744
+    $id_boucle = $p->id_boucle;
2745 2745
 
2746
-	if (empty($p->boucles[$id_boucle])) {
2747
-		$msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']];
2748
-		erreur_squelette($msg, $p);
2749
-	} else {
2750
-		$_saut = interprete_argument_balise(1, $p);
2751
-		$_compteur = "\$Numrows['$id_boucle']['compteur_boucle']";
2752
-		$_total = "(\$Numrows['$id_boucle']['total'] ?? null)";
2746
+    if (empty($p->boucles[$id_boucle])) {
2747
+        $msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']];
2748
+        erreur_squelette($msg, $p);
2749
+    } else {
2750
+        $_saut = interprete_argument_balise(1, $p);
2751
+        $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']";
2752
+        $_total = "(\$Numrows['$id_boucle']['total'] ?? null)";
2753 2753
 
2754
-		$p->code = "vide($_compteur=\$iter->skip($_saut,$_total))";
2755
-	}
2756
-	$p->interdire_scripts = false;
2754
+        $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))";
2755
+    }
2756
+    $p->interdire_scripts = false;
2757 2757
 
2758
-	return $p;
2758
+    return $p;
2759 2759
 }
2760 2760
 
2761 2761
 
@@ -2777,22 +2777,22 @@  discard block
 block discarded – undo
2777 2777
  *     Pile complétée par le code à générer
2778 2778
  */
2779 2779
 function balise_PUBLIE_dist($p) {
2780
-	if (!$_type = interprete_argument_balise(1, $p)) {
2781
-		$_type = _q($p->type_requete);
2782
-		$_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
2783
-	} else {
2784
-		$_id = interprete_argument_balise(2, $p);
2785
-	}
2780
+    if (!$_type = interprete_argument_balise(1, $p)) {
2781
+        $_type = _q($p->type_requete);
2782
+        $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
2783
+    } else {
2784
+        $_id = interprete_argument_balise(2, $p);
2785
+    }
2786 2786
 
2787
-	$connect = '';
2788
-	if (isset($p->boucles[$p->id_boucle])) {
2789
-		$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2790
-	}
2787
+    $connect = '';
2788
+    if (isset($p->boucles[$p->id_boucle])) {
2789
+        $connect = $p->boucles[$p->id_boucle]->sql_serveur;
2790
+    }
2791 2791
 
2792
-	$p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2793
-	$p->interdire_scripts = false;
2792
+    $p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2793
+    $p->interdire_scripts = false;
2794 2794
 
2795
-	return $p;
2795
+    return $p;
2796 2796
 }
2797 2797
 
2798 2798
 /**
@@ -2821,12 +2821,12 @@  discard block
 block discarded – undo
2821 2821
  *     Pile complétée par le code à générer
2822 2822
  */
2823 2823
 function balise_PRODUIRE_dist($p) {
2824
-	$balise_inclure = charger_fonction('INCLURE', 'balise');
2825
-	$p = $balise_inclure($p);
2824
+    $balise_inclure = charger_fonction('INCLURE', 'balise');
2825
+    $p = $balise_inclure($p);
2826 2826
 
2827
-	$p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code);
2827
+    $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code);
2828 2828
 
2829
-	return $p;
2829
+    return $p;
2830 2830
 }
2831 2831
 
2832 2832
 /**
@@ -2845,13 +2845,13 @@  discard block
 block discarded – undo
2845 2845
  *     Pile complétée par le code à générer
2846 2846
  */
2847 2847
 function balise_LARGEUR_ECRAN_dist($p) {
2848
-	$_class = interprete_argument_balise(1, $p);
2849
-	if (!$_class) {
2850
-		$_class = 'null';
2851
-	}
2852
-	$p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))";
2848
+    $_class = interprete_argument_balise(1, $p);
2849
+    if (!$_class) {
2850
+        $_class = 'null';
2851
+    }
2852
+    $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))";
2853 2853
 
2854
-	return $p;
2854
+    return $p;
2855 2855
 }
2856 2856
 
2857 2857
 
@@ -2867,14 +2867,14 @@  discard block
 block discarded – undo
2867 2867
  *     Pile complétée par le code à générer
2868 2868
  **/
2869 2869
 function balise_CONST_dist($p) {
2870
-	$_const = interprete_argument_balise(1, $p);
2871
-	if (!strlen($_const)) {
2872
-		$p->code = "''";
2873
-	}
2874
-	else {
2875
-		$p->code = "(defined($_const)?constant($_const):'')";
2876
-	}
2877
-	$p->interdire_scripts = false;
2878
-
2879
-	return $p;
2870
+    $_const = interprete_argument_balise(1, $p);
2871
+    if (!strlen($_const)) {
2872
+        $p->code = "''";
2873
+    }
2874
+    else {
2875
+        $p->code = "(defined($_const)?constant($_const):'')";
2876
+    }
2877
+    $p->interdire_scripts = false;
2878
+
2879
+    return $p;
2880 2880
 }
Please login to merge, or discard this patch.
ecrire/public/cacher.php 1 patch
Indentation   +320 added lines, -320 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
 /**
@@ -27,9 +27,9 @@  discard block
 block discarded – undo
27 27
  * @return string
28 28
  */
29 29
 function generer_nom_fichier_cache($contexte, $page) {
30
-	$u = md5(var_export([$contexte, $page], true));
30
+    $u = md5(var_export([$contexte, $page], true));
31 31
 
32
-	return $u . '.cache';
32
+    return $u . '.cache';
33 33
 }
34 34
 
35 35
 /**
@@ -45,26 +45,26 @@  discard block
 block discarded – undo
45 45
  * @return string
46 46
  */
47 47
 function cache_chemin_fichier($nom_cache, $ecrire = false) {
48
-	static $l1, $l2;
49
-	if (is_null($l1)) {
50
-		$length = (defined('_CACHE_PROFONDEUR_STOCKAGE') ? min(8, max(_CACHE_PROFONDEUR_STOCKAGE, 2)) : 4);
51
-		$l1 = intval(floor($length / 2));
52
-		$l2 = $length - $l1;
53
-	}
54
-	$d = substr($nom_cache, 0, $l1);
55
-	$u = substr($nom_cache, $l1, $l2);
56
-
57
-	if ($ecrire) {
58
-		$rep = sous_repertoire(_DIR_CACHE, '', false, true);
59
-		$rep = sous_repertoire($rep, 'calcul/', false, true);
60
-		$rep = sous_repertoire($rep, $d, false, true);
61
-	}
62
-	else {
63
-		// en lecture on essaye pas de creer les repertoires, on va au plus vite
64
-		$rep = _DIR_CACHE . "calcul/$d/";
65
-	}
66
-
67
-	return $rep . $u . '.cache';
48
+    static $l1, $l2;
49
+    if (is_null($l1)) {
50
+        $length = (defined('_CACHE_PROFONDEUR_STOCKAGE') ? min(8, max(_CACHE_PROFONDEUR_STOCKAGE, 2)) : 4);
51
+        $l1 = intval(floor($length / 2));
52
+        $l2 = $length - $l1;
53
+    }
54
+    $d = substr($nom_cache, 0, $l1);
55
+    $u = substr($nom_cache, $l1, $l2);
56
+
57
+    if ($ecrire) {
58
+        $rep = sous_repertoire(_DIR_CACHE, '', false, true);
59
+        $rep = sous_repertoire($rep, 'calcul/', false, true);
60
+        $rep = sous_repertoire($rep, $d, false, true);
61
+    }
62
+    else {
63
+        // en lecture on essaye pas de creer les repertoires, on va au plus vite
64
+        $rep = _DIR_CACHE . "calcul/$d/";
65
+    }
66
+
67
+    return $rep . $u . '.cache';
68 68
 }
69 69
 
70 70
 /**
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
  * @return bool
76 76
  */
77 77
 function ecrire_cache($nom_cache, $valeur) {
78
-	return ecrire_fichier(cache_chemin_fichier($nom_cache, true), serialize(['nom_cache' => $nom_cache, 'valeur' => $valeur]));
78
+    return ecrire_fichier(cache_chemin_fichier($nom_cache, true), serialize(['nom_cache' => $nom_cache, 'valeur' => $valeur]));
79 79
 }
80 80
 
81 81
 /**
@@ -85,38 +85,38 @@  discard block
 block discarded – undo
85 85
  * @return mixed
86 86
  */
87 87
 function lire_cache($nom_cache) {
88
-	$tmp = [];
89
-	if (
90
-		file_exists($f = cache_chemin_fichier($nom_cache))
91
-		and lire_fichier($f, $tmp)
92
-		and $tmp = unserialize($tmp)
93
-		and $tmp['nom_cache'] == $nom_cache
94
-		and isset($tmp['valeur'])
95
-	) {
96
-		return $tmp['valeur'];
97
-	}
98
-
99
-	return false;
88
+    $tmp = [];
89
+    if (
90
+        file_exists($f = cache_chemin_fichier($nom_cache))
91
+        and lire_fichier($f, $tmp)
92
+        and $tmp = unserialize($tmp)
93
+        and $tmp['nom_cache'] == $nom_cache
94
+        and isset($tmp['valeur'])
95
+    ) {
96
+        return $tmp['valeur'];
97
+    }
98
+
99
+    return false;
100 100
 }
101 101
 
102 102
 // Parano : on signe le cache, afin d'interdire un hack d'injection
103 103
 // dans notre memcache
104 104
 function cache_signature(&$page) {
105
-	if (!isset($GLOBALS['meta']['cache_signature'])) {
106
-		include_spip('inc/acces');
107
-		include_spip('auth/sha256.inc');
108
-		ecrire_meta(
109
-			'cache_signature',
110
-			spip_sha256(
111
-				$_SERVER['DOCUMENT_ROOT']
112
-				. ($_SERVER['SERVER_SIGNATURE'] ?? '')
113
-				. creer_uniqid()
114
-			),
115
-			'non'
116
-		);
117
-	}
118
-
119
-	return crc32($GLOBALS['meta']['cache_signature'] . $page['texte']);
105
+    if (!isset($GLOBALS['meta']['cache_signature'])) {
106
+        include_spip('inc/acces');
107
+        include_spip('auth/sha256.inc');
108
+        ecrire_meta(
109
+            'cache_signature',
110
+            spip_sha256(
111
+                $_SERVER['DOCUMENT_ROOT']
112
+                . ($_SERVER['SERVER_SIGNATURE'] ?? '')
113
+                . creer_uniqid()
114
+            ),
115
+            'non'
116
+        );
117
+    }
118
+
119
+    return crc32($GLOBALS['meta']['cache_signature'] . $page['texte']);
120 120
 }
121 121
 
122 122
 /**
@@ -130,14 +130,14 @@  discard block
 block discarded – undo
130 130
  * @return array
131 131
  */
132 132
 function gzip_page($page) {
133
-	if (function_exists('gzcompress') and strlen($page['texte']) > 16 * 1024) {
134
-		$page['gz'] = true;
135
-		$page['texte'] = gzcompress($page['texte']);
136
-	} else {
137
-		$page['gz'] = false;
138
-	}
139
-
140
-	return $page;
133
+    if (function_exists('gzcompress') and strlen($page['texte']) > 16 * 1024) {
134
+        $page['gz'] = true;
135
+        $page['texte'] = gzcompress($page['texte']);
136
+    } else {
137
+        $page['gz'] = false;
138
+    }
139
+
140
+    return $page;
141 141
 }
142 142
 
143 143
 /**
@@ -152,10 +152,10 @@  discard block
 block discarded – undo
152 152
  * @return void
153 153
  */
154 154
 function gunzip_page(&$page) {
155
-	if ($page['gz']) {
156
-		$page['texte'] = gzuncompress($page['texte']);
157
-		$page['gz'] = false; // ne pas gzuncompress deux fois une meme page
158
-	}
155
+    if ($page['gz']) {
156
+        $page['texte'] = gzuncompress($page['texte']);
157
+        $page['gz'] = false; // ne pas gzuncompress deux fois une meme page
158
+    }
159 159
 }
160 160
 
161 161
 /**
@@ -171,72 +171,72 @@  discard block
 block discarded – undo
171 171
  */
172 172
 /// https://code.spip.net/@cache_valide
173 173
 function cache_valide(&$page, $date) {
174
-	$now = $_SERVER['REQUEST_TIME'];
175
-
176
-	// Apparition d'un nouvel article post-date ?
177
-	if (
178
-		isset($GLOBALS['meta']['post_dates'])
179
-		and $GLOBALS['meta']['post_dates'] == 'non'
180
-		and isset($GLOBALS['meta']['date_prochain_postdate'])
181
-		and $now > $GLOBALS['meta']['date_prochain_postdate']
182
-	) {
183
-		spip_log('Un article post-date invalide le cache');
184
-		include_spip('inc/rubriques');
185
-		calculer_prochain_postdate(true);
186
-	}
187
-
188
-	if (defined('_VAR_NOCACHE') and _VAR_NOCACHE) {
189
-		return -1;
190
-	}
191
-	if (isset($GLOBALS['meta']['cache_inhib']) and $_SERVER['REQUEST_TIME'] < $GLOBALS['meta']['cache_inhib']) {
192
-		return -1;
193
-	}
194
-	if (defined('_NO_CACHE')) {
195
-		return (_NO_CACHE == 0 and !isset($page['texte'])) ? 1 : _NO_CACHE;
196
-	}
197
-
198
-	// pas de cache ? on le met a jour, sauf pour les bots (on leur calcule la page sans mise en cache)
199
-	if (!$page or !isset($page['texte']) or !isset($page['entetes']['X-Spip-Cache'])) {
200
-		return _IS_BOT ? -1 : 1;
201
-	}
202
-
203
-	// controle de la signature
204
-	if ($page['sig'] !== cache_signature($page)) {
205
-		return _IS_BOT ? -1 : 1;
206
-	}
207
-
208
-	// #CACHE{n,statique} => on n'invalide pas avec derniere_modif
209
-	// cf. ecrire/public/balises.php, balise_CACHE_dist()
210
-	if (!isset($page['entetes']['X-Spip-Statique']) or $page['entetes']['X-Spip-Statique'] !== 'oui') {
211
-		// Cache invalide par la meta 'derniere_modif'
212
-		// sauf pour les bots, qui utilisent toujours le cache
213
-		if (
214
-			!_IS_BOT
215
-			and $GLOBALS['derniere_modif_invalide']
216
-			and isset($GLOBALS['meta']['derniere_modif'])
217
-			and $date < $GLOBALS['meta']['derniere_modif']
218
-		) {
219
-			return 1;
220
-		}
221
-	}
222
-
223
-	// Sinon comparer l'age du fichier a sa duree de cache
224
-	$duree = intval($page['entetes']['X-Spip-Cache']);
225
-	$cache_mark = ($GLOBALS['meta']['cache_mark'] ?? 0);
226
-	if ($duree == 0) {  #CACHE{0}
227
-	return -1;
228
-	} // sauf pour les bots, qui utilisent toujours le cache
229
-	else {
230
-		if (
231
-			(!_IS_BOT and $date + $duree < $now)
232
-			# le cache est anterieur a la derniere purge : l'ignorer, meme pour les bots
233
-			or $date < $cache_mark
234
-		) {
235
-			return _IS_BOT ? -1 : 1;
236
-		} else {
237
-			return 0;
238
-		}
239
-	}
174
+    $now = $_SERVER['REQUEST_TIME'];
175
+
176
+    // Apparition d'un nouvel article post-date ?
177
+    if (
178
+        isset($GLOBALS['meta']['post_dates'])
179
+        and $GLOBALS['meta']['post_dates'] == 'non'
180
+        and isset($GLOBALS['meta']['date_prochain_postdate'])
181
+        and $now > $GLOBALS['meta']['date_prochain_postdate']
182
+    ) {
183
+        spip_log('Un article post-date invalide le cache');
184
+        include_spip('inc/rubriques');
185
+        calculer_prochain_postdate(true);
186
+    }
187
+
188
+    if (defined('_VAR_NOCACHE') and _VAR_NOCACHE) {
189
+        return -1;
190
+    }
191
+    if (isset($GLOBALS['meta']['cache_inhib']) and $_SERVER['REQUEST_TIME'] < $GLOBALS['meta']['cache_inhib']) {
192
+        return -1;
193
+    }
194
+    if (defined('_NO_CACHE')) {
195
+        return (_NO_CACHE == 0 and !isset($page['texte'])) ? 1 : _NO_CACHE;
196
+    }
197
+
198
+    // pas de cache ? on le met a jour, sauf pour les bots (on leur calcule la page sans mise en cache)
199
+    if (!$page or !isset($page['texte']) or !isset($page['entetes']['X-Spip-Cache'])) {
200
+        return _IS_BOT ? -1 : 1;
201
+    }
202
+
203
+    // controle de la signature
204
+    if ($page['sig'] !== cache_signature($page)) {
205
+        return _IS_BOT ? -1 : 1;
206
+    }
207
+
208
+    // #CACHE{n,statique} => on n'invalide pas avec derniere_modif
209
+    // cf. ecrire/public/balises.php, balise_CACHE_dist()
210
+    if (!isset($page['entetes']['X-Spip-Statique']) or $page['entetes']['X-Spip-Statique'] !== 'oui') {
211
+        // Cache invalide par la meta 'derniere_modif'
212
+        // sauf pour les bots, qui utilisent toujours le cache
213
+        if (
214
+            !_IS_BOT
215
+            and $GLOBALS['derniere_modif_invalide']
216
+            and isset($GLOBALS['meta']['derniere_modif'])
217
+            and $date < $GLOBALS['meta']['derniere_modif']
218
+        ) {
219
+            return 1;
220
+        }
221
+    }
222
+
223
+    // Sinon comparer l'age du fichier a sa duree de cache
224
+    $duree = intval($page['entetes']['X-Spip-Cache']);
225
+    $cache_mark = ($GLOBALS['meta']['cache_mark'] ?? 0);
226
+    if ($duree == 0) {  #CACHE{0}
227
+    return -1;
228
+    } // sauf pour les bots, qui utilisent toujours le cache
229
+    else {
230
+        if (
231
+            (!_IS_BOT and $date + $duree < $now)
232
+            # le cache est anterieur a la derniere purge : l'ignorer, meme pour les bots
233
+            or $date < $cache_mark
234
+        ) {
235
+            return _IS_BOT ? -1 : 1;
236
+        } else {
237
+            return 0;
238
+        }
239
+    }
240 240
 }
241 241
 
242 242
 /**
@@ -251,59 +251,59 @@  discard block
 block discarded – undo
251 251
  */
252 252
 function creer_cache(&$page, &$chemin_cache) {
253 253
 
254
-	// Ne rien faire si on est en preview, debug, ou si une erreur
255
-	// grave s'est presentee (compilation du squelette, MySQL, etc)
256
-	// le cas var_nocache ne devrait jamais arriver ici (securite)
257
-	// le cas spip_interdire_cache correspond a une ereur SQL grave non anticipable
258
-	if (
259
-		(defined('_VAR_NOCACHE') and _VAR_NOCACHE)
260
-		or defined('spip_interdire_cache')
261
-	) {
262
-		return;
263
-	}
264
-
265
-	// Si la page c1234 a un invalideur de session 'zz', sauver dans
266
-	// 'tmp/cache/MD5(chemin_cache)_zz'
267
-	if (
268
-		isset($page['invalideurs'])
269
-		and isset($page['invalideurs']['session'])
270
-	) {
271
-		// on verifie que le contenu du chemin cache indique seulement
272
-		// "cache sessionne" ; sa date indique la date de validite
273
-		// des caches sessionnes
274
-		if (!$tmp = lire_cache($chemin_cache)) {
275
-			spip_log('Creation cache sessionne ' . $chemin_cache);
276
-			$tmp = [
277
-				'invalideurs' => ['session' => ''],
278
-				'lastmodified' => $_SERVER['REQUEST_TIME']
279
-			];
280
-			ecrire_cache($chemin_cache, $tmp);
281
-		}
282
-		$chemin_cache = generer_nom_fichier_cache(
283
-			['chemin_cache' => $chemin_cache],
284
-			['session' => $page['invalideurs']['session']]
285
-		);
286
-	}
287
-
288
-	// ajouter la date de production dans le cache lui meme
289
-	// (qui contient deja sa duree de validite)
290
-	$page['lastmodified'] = $_SERVER['REQUEST_TIME'];
291
-
292
-	// compresser le contenu si besoin
293
-	$pagez = gzip_page($page);
294
-
295
-	// signer le contenu
296
-	$pagez['sig'] = cache_signature($pagez);
297
-
298
-	// l'enregistrer, compresse ou non...
299
-	$ok = ecrire_cache($chemin_cache, $pagez);
300
-
301
-	spip_log((_IS_BOT ? 'Bot:' : '') . "Creation du cache $chemin_cache pour "
302
-		. $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'), _LOG_INFO);
303
-
304
-	// Inserer ses invalideurs
305
-	include_spip('inc/invalideur');
306
-	maj_invalideurs($chemin_cache, $page);
254
+    // Ne rien faire si on est en preview, debug, ou si une erreur
255
+    // grave s'est presentee (compilation du squelette, MySQL, etc)
256
+    // le cas var_nocache ne devrait jamais arriver ici (securite)
257
+    // le cas spip_interdire_cache correspond a une ereur SQL grave non anticipable
258
+    if (
259
+        (defined('_VAR_NOCACHE') and _VAR_NOCACHE)
260
+        or defined('spip_interdire_cache')
261
+    ) {
262
+        return;
263
+    }
264
+
265
+    // Si la page c1234 a un invalideur de session 'zz', sauver dans
266
+    // 'tmp/cache/MD5(chemin_cache)_zz'
267
+    if (
268
+        isset($page['invalideurs'])
269
+        and isset($page['invalideurs']['session'])
270
+    ) {
271
+        // on verifie que le contenu du chemin cache indique seulement
272
+        // "cache sessionne" ; sa date indique la date de validite
273
+        // des caches sessionnes
274
+        if (!$tmp = lire_cache($chemin_cache)) {
275
+            spip_log('Creation cache sessionne ' . $chemin_cache);
276
+            $tmp = [
277
+                'invalideurs' => ['session' => ''],
278
+                'lastmodified' => $_SERVER['REQUEST_TIME']
279
+            ];
280
+            ecrire_cache($chemin_cache, $tmp);
281
+        }
282
+        $chemin_cache = generer_nom_fichier_cache(
283
+            ['chemin_cache' => $chemin_cache],
284
+            ['session' => $page['invalideurs']['session']]
285
+        );
286
+    }
287
+
288
+    // ajouter la date de production dans le cache lui meme
289
+    // (qui contient deja sa duree de validite)
290
+    $page['lastmodified'] = $_SERVER['REQUEST_TIME'];
291
+
292
+    // compresser le contenu si besoin
293
+    $pagez = gzip_page($page);
294
+
295
+    // signer le contenu
296
+    $pagez['sig'] = cache_signature($pagez);
297
+
298
+    // l'enregistrer, compresse ou non...
299
+    $ok = ecrire_cache($chemin_cache, $pagez);
300
+
301
+    spip_log((_IS_BOT ? 'Bot:' : '') . "Creation du cache $chemin_cache pour "
302
+        . $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'), _LOG_INFO);
303
+
304
+    // Inserer ses invalideurs
305
+    include_spip('inc/invalideur');
306
+    maj_invalideurs($chemin_cache, $page);
307 307
 }
308 308
 
309 309
 
@@ -318,15 +318,15 @@  discard block
 block discarded – undo
318 318
  * @return void
319 319
  */
320 320
 function nettoyer_petit_cache($prefix, $duree = 300) {
321
-	// determiner le repertoire a purger : 'tmp/CACHE/rech/'
322
-	$dircache = sous_repertoire(_DIR_CACHE, $prefix);
323
-	if (spip_touch($dircache . 'purger_' . $prefix, $duree, true)) {
324
-		foreach (preg_files($dircache, '[.]txt$') as $f) {
325
-			if ($_SERVER['REQUEST_TIME'] - (@file_exists($f) ? @filemtime($f) : 0) > $duree) {
326
-				spip_unlink($f);
327
-			}
328
-		}
329
-	}
321
+    // determiner le repertoire a purger : 'tmp/CACHE/rech/'
322
+    $dircache = sous_repertoire(_DIR_CACHE, $prefix);
323
+    if (spip_touch($dircache . 'purger_' . $prefix, $duree, true)) {
324
+        foreach (preg_files($dircache, '[.]txt$') as $f) {
325
+            if ($_SERVER['REQUEST_TIME'] - (@file_exists($f) ? @filemtime($f) : 0) > $duree) {
326
+                spip_unlink($f);
327
+            }
328
+        }
329
+    }
330 330
 }
331 331
 
332 332
 
@@ -356,133 +356,133 @@  discard block
 block discarded – undo
356 356
  */
357 357
 function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$lastmodified) {
358 358
 
359
-	# fonction de cache minimale : dire "non on ne met rien en cache"
360
-	# $use_cache = -1; return;
361
-
362
-	// Second appel, destine a l'enregistrement du cache sur le disque
363
-	if (isset($chemin_cache)) {
364
-		return creer_cache($page, $chemin_cache);
365
-	}
366
-
367
-	// Toute la suite correspond au premier appel
368
-	$contexte_implicite = $page['contexte_implicite'];
369
-
370
-	// Cas ignorant le cache car completement dynamique
371
-	if (
372
-		(!empty($_SERVER['REQUEST_METHOD']) and $_SERVER['REQUEST_METHOD'] === 'POST')
373
-		or _request('connect')
374
-	) {
375
-		$use_cache = -1;
376
-		$lastmodified = 0;
377
-		$chemin_cache = '';
378
-		$page = [];
379
-
380
-		return;
381
-	}
382
-
383
-	// Controler l'existence d'un cache nous correspondant
384
-	$chemin_cache = generer_nom_fichier_cache($contexte, $page);
385
-	$lastmodified = 0;
386
-
387
-	// charger le cache s'il existe (et si il a bien le bon hash = anticollision)
388
-	if (!$page = lire_cache($chemin_cache)) {
389
-		$page = [];
390
-	}
391
-
392
-	// s'il est sessionne, charger celui correspondant a notre session
393
-	if (
394
-		isset($page['invalideurs'])
395
-		and isset($page['invalideurs']['session'])
396
-	) {
397
-		$chemin_cache_session = generer_nom_fichier_cache(
398
-			['chemin_cache' => $chemin_cache],
399
-			['session' => spip_session()]
400
-		);
401
-		if (
402
-			$page_session = lire_cache($chemin_cache_session)
403
-			and $page_session['lastmodified'] >= $page['lastmodified']
404
-		) {
405
-			$page = $page_session;
406
-		} else {
407
-			$page = [];
408
-		}
409
-	}
410
-
411
-
412
-	// Faut-il effacer des pages invalidees (en particulier ce cache-ci) ?
413
-	if (isset($GLOBALS['meta']['invalider'])) {
414
-		// ne le faire que si la base est disponible
415
-		if (spip_connect()) {
416
-			include_spip('inc/invalideur');
417
-			retire_caches($chemin_cache); # API invalideur inutile
418
-			supprimer_fichier(_DIR_CACHE . $chemin_cache);
419
-			if (isset($chemin_cache_session) and $chemin_cache_session) {
420
-				supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
421
-			}
422
-		}
423
-	}
424
-
425
-	// Si un calcul, recalcul [ou preview, mais c'est recalcul] est demande,
426
-	// on supprime le cache
427
-	if (
428
-		defined('_VAR_MODE') &&
429
-		_VAR_MODE &&
430
-		(isset($_COOKIE['spip_session']) ||
431
-			isset($_COOKIE['spip_admin']) ||
432
-			@file_exists(_ACCESS_FILE_NAME))
433
-	) {
434
-		$page = ['contexte_implicite' => $contexte_implicite]; // ignorer le cache deja lu
435
-		include_spip('inc/invalideur');
436
-		retire_caches($chemin_cache); # API invalideur inutile
437
-		supprimer_fichier(_DIR_CACHE . $chemin_cache);
438
-		if (isset($chemin_cache_session) and $chemin_cache_session) {
439
-			supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
440
-		}
441
-	}
442
-
443
-	// $delais par defaut
444
-	// pour toutes les pages sans #CACHE{} hors modeles/ et espace privé
445
-	// qui sont a cache nul par defaut
446
-	if (!isset($GLOBALS['delais'])) {
447
-		if (!defined('_DUREE_CACHE_DEFAUT')) {
448
-			define('_DUREE_CACHE_DEFAUT', 24 * 3600);
449
-		}
450
-		$GLOBALS['delais'] = _DUREE_CACHE_DEFAUT;
451
-	}
452
-
453
-	// determiner la validite de la page
454
-	if ($page) {
455
-		$use_cache = cache_valide($page, $page['lastmodified'] ?? 0);
456
-		// le contexte implicite n'est pas stocke dans le cache, mais il y a equivalence
457
-		// par le nom du cache. On le reinjecte donc ici pour utilisation eventuelle au calcul
458
-		$page['contexte_implicite'] = $contexte_implicite;
459
-		if (!$use_cache) {
460
-			// $page est un cache utilisable
461
-			gunzip_page($page);
462
-
463
-			return;
464
-		}
465
-	} else {
466
-		$page = ['contexte_implicite' => $contexte_implicite];
467
-		$use_cache = cache_valide($page, 0); // fichier cache absent : provoque le calcul
468
-	}
469
-
470
-	// Si pas valide mais pas de connexion a la base, le garder quand meme
471
-	if (!spip_connect()) {
472
-		if (isset($page['texte'])) {
473
-			gunzip_page($page);
474
-			$use_cache = 0;
475
-		} else {
476
-			spip_log("Erreur base de donnees, impossible utiliser $chemin_cache");
477
-			include_spip('inc/minipres');
478
-
479
-			return minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'), ['status' => 503]);
480
-		}
481
-	}
482
-
483
-	if ($use_cache < 0) {
484
-		$chemin_cache = '';
485
-	}
486
-
487
-	return;
359
+    # fonction de cache minimale : dire "non on ne met rien en cache"
360
+    # $use_cache = -1; return;
361
+
362
+    // Second appel, destine a l'enregistrement du cache sur le disque
363
+    if (isset($chemin_cache)) {
364
+        return creer_cache($page, $chemin_cache);
365
+    }
366
+
367
+    // Toute la suite correspond au premier appel
368
+    $contexte_implicite = $page['contexte_implicite'];
369
+
370
+    // Cas ignorant le cache car completement dynamique
371
+    if (
372
+        (!empty($_SERVER['REQUEST_METHOD']) and $_SERVER['REQUEST_METHOD'] === 'POST')
373
+        or _request('connect')
374
+    ) {
375
+        $use_cache = -1;
376
+        $lastmodified = 0;
377
+        $chemin_cache = '';
378
+        $page = [];
379
+
380
+        return;
381
+    }
382
+
383
+    // Controler l'existence d'un cache nous correspondant
384
+    $chemin_cache = generer_nom_fichier_cache($contexte, $page);
385
+    $lastmodified = 0;
386
+
387
+    // charger le cache s'il existe (et si il a bien le bon hash = anticollision)
388
+    if (!$page = lire_cache($chemin_cache)) {
389
+        $page = [];
390
+    }
391
+
392
+    // s'il est sessionne, charger celui correspondant a notre session
393
+    if (
394
+        isset($page['invalideurs'])
395
+        and isset($page['invalideurs']['session'])
396
+    ) {
397
+        $chemin_cache_session = generer_nom_fichier_cache(
398
+            ['chemin_cache' => $chemin_cache],
399
+            ['session' => spip_session()]
400
+        );
401
+        if (
402
+            $page_session = lire_cache($chemin_cache_session)
403
+            and $page_session['lastmodified'] >= $page['lastmodified']
404
+        ) {
405
+            $page = $page_session;
406
+        } else {
407
+            $page = [];
408
+        }
409
+    }
410
+
411
+
412
+    // Faut-il effacer des pages invalidees (en particulier ce cache-ci) ?
413
+    if (isset($GLOBALS['meta']['invalider'])) {
414
+        // ne le faire que si la base est disponible
415
+        if (spip_connect()) {
416
+            include_spip('inc/invalideur');
417
+            retire_caches($chemin_cache); # API invalideur inutile
418
+            supprimer_fichier(_DIR_CACHE . $chemin_cache);
419
+            if (isset($chemin_cache_session) and $chemin_cache_session) {
420
+                supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
421
+            }
422
+        }
423
+    }
424
+
425
+    // Si un calcul, recalcul [ou preview, mais c'est recalcul] est demande,
426
+    // on supprime le cache
427
+    if (
428
+        defined('_VAR_MODE') &&
429
+        _VAR_MODE &&
430
+        (isset($_COOKIE['spip_session']) ||
431
+            isset($_COOKIE['spip_admin']) ||
432
+            @file_exists(_ACCESS_FILE_NAME))
433
+    ) {
434
+        $page = ['contexte_implicite' => $contexte_implicite]; // ignorer le cache deja lu
435
+        include_spip('inc/invalideur');
436
+        retire_caches($chemin_cache); # API invalideur inutile
437
+        supprimer_fichier(_DIR_CACHE . $chemin_cache);
438
+        if (isset($chemin_cache_session) and $chemin_cache_session) {
439
+            supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
440
+        }
441
+    }
442
+
443
+    // $delais par defaut
444
+    // pour toutes les pages sans #CACHE{} hors modeles/ et espace privé
445
+    // qui sont a cache nul par defaut
446
+    if (!isset($GLOBALS['delais'])) {
447
+        if (!defined('_DUREE_CACHE_DEFAUT')) {
448
+            define('_DUREE_CACHE_DEFAUT', 24 * 3600);
449
+        }
450
+        $GLOBALS['delais'] = _DUREE_CACHE_DEFAUT;
451
+    }
452
+
453
+    // determiner la validite de la page
454
+    if ($page) {
455
+        $use_cache = cache_valide($page, $page['lastmodified'] ?? 0);
456
+        // le contexte implicite n'est pas stocke dans le cache, mais il y a equivalence
457
+        // par le nom du cache. On le reinjecte donc ici pour utilisation eventuelle au calcul
458
+        $page['contexte_implicite'] = $contexte_implicite;
459
+        if (!$use_cache) {
460
+            // $page est un cache utilisable
461
+            gunzip_page($page);
462
+
463
+            return;
464
+        }
465
+    } else {
466
+        $page = ['contexte_implicite' => $contexte_implicite];
467
+        $use_cache = cache_valide($page, 0); // fichier cache absent : provoque le calcul
468
+    }
469
+
470
+    // Si pas valide mais pas de connexion a la base, le garder quand meme
471
+    if (!spip_connect()) {
472
+        if (isset($page['texte'])) {
473
+            gunzip_page($page);
474
+            $use_cache = 0;
475
+        } else {
476
+            spip_log("Erreur base de donnees, impossible utiliser $chemin_cache");
477
+            include_spip('inc/minipres');
478
+
479
+            return minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'), ['status' => 503]);
480
+        }
481
+    }
482
+
483
+    if ($use_cache < 0) {
484
+        $chemin_cache = '';
485
+    }
486
+
487
+    return;
488 488
 }
Please login to merge, or discard this patch.
ecrire/public/aiguiller.php 1 patch
Indentation   +289 added lines, -289 removed lines patch added patch discarded remove patch
@@ -11,164 +11,164 @@  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
 function securiser_redirect_action($redirect) {
18
-	// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
19
-	if (strpos($redirect, '%') !== false) {
20
-		$r2 = urldecode($redirect);
21
-		if (($r3 = securiser_redirect_action($r2)) !== $r2) {
22
-			return $r3;
23
-		}
24
-	}
25
-	if (
26
-		(tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
27
-		and !defined('_AUTORISER_ACTION_ABS_REDIRECT')
28
-	) {
29
-		// si l'url est une url du site, on la laisse passer sans rien faire
30
-		// c'est encore le plus simple
31
-		$base = $GLOBALS['meta']['adresse_site'] . '/';
32
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
33
-			return $redirect;
34
-		}
35
-		$base = url_de_base();
36
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
37
-			return $redirect;
38
-		}
18
+    // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
19
+    if (strpos($redirect, '%') !== false) {
20
+        $r2 = urldecode($redirect);
21
+        if (($r3 = securiser_redirect_action($r2)) !== $r2) {
22
+            return $r3;
23
+        }
24
+    }
25
+    if (
26
+        (tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
27
+        and !defined('_AUTORISER_ACTION_ABS_REDIRECT')
28
+    ) {
29
+        // si l'url est une url du site, on la laisse passer sans rien faire
30
+        // c'est encore le plus simple
31
+        $base = $GLOBALS['meta']['adresse_site'] . '/';
32
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
33
+            return $redirect;
34
+        }
35
+        $base = url_de_base();
36
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
37
+            return $redirect;
38
+        }
39 39
 
40
-		return '';
41
-	}
40
+        return '';
41
+    }
42 42
 
43
-	return $redirect;
43
+    return $redirect;
44 44
 }
45 45
 
46 46
 // https://code.spip.net/@traiter_appels_actions
47 47
 function traiter_appels_actions() {
48
-	// cas de l'appel qui renvoie une redirection (302) ou rien (204)
49
-	if ($action = _request('action')) {
50
-		include_spip('base/abstract_sql'); // chargement systematique pour les actions
51
-		include_spip('inc/autoriser');
52
-		include_spip('inc/headers');
53
-		include_spip('inc/actions');
54
-		// des actions peuvent appeler _T
55
-		if (!isset($GLOBALS['spip_lang'])) {
56
-			include_spip('inc/lang');
57
-			utiliser_langue_visiteur();
58
-		}
59
-		// si l'action est provoque par un hit {ajax}
60
-		// il faut transmettre l'env ajax au redirect
61
-		// on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
62
-		if (
63
-			($v = _request('var_ajax'))
64
-			and ($v !== 'form')
65
-			and ($args = _request('var_ajax_env'))
66
-			and ($url = _request('redirect'))
67
-		) {
68
-			$url = parametre_url($url, 'var_ajax', $v, '&');
69
-			$url = parametre_url($url, 'var_ajax_env', $args, '&');
70
-			set_request('redirect', $url);
71
-		} else {
72
-			if (_request('redirect')) {
73
-				set_request('redirect', securiser_redirect_action(_request('redirect')));
74
-			}
75
-		}
76
-		$var_f = charger_fonction($action, 'action');
77
-		$var_f();
78
-		if (!isset($GLOBALS['redirect'])) {
79
-			$GLOBALS['redirect'] = _request('redirect');
80
-			if ($_SERVER['REQUEST_METHOD'] == 'POST') {
81
-				$GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
82
-			}
83
-			$GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
84
-		}
85
-		if ($url = $GLOBALS['redirect']) {
86
-			// si l'action est provoque par un hit {ajax}
87
-			// il faut transmettre l'env ajax au redirect
88
-			// qui a pu etre defini par l'action
89
-			if (
90
-				($v = _request('var_ajax'))
91
-				and ($v !== 'form')
92
-				and ($args = _request('var_ajax_env'))
93
-			) {
94
-				$url = parametre_url($url, 'var_ajax', $v, '&');
95
-				$url = parametre_url($url, 'var_ajax_env', $args, '&');
96
-				// passer l'ancre en variable pour pouvoir la gerer cote serveur
97
-				$url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
98
-			}
99
-			$url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
100
-			redirige_par_entete($url);
101
-		}
48
+    // cas de l'appel qui renvoie une redirection (302) ou rien (204)
49
+    if ($action = _request('action')) {
50
+        include_spip('base/abstract_sql'); // chargement systematique pour les actions
51
+        include_spip('inc/autoriser');
52
+        include_spip('inc/headers');
53
+        include_spip('inc/actions');
54
+        // des actions peuvent appeler _T
55
+        if (!isset($GLOBALS['spip_lang'])) {
56
+            include_spip('inc/lang');
57
+            utiliser_langue_visiteur();
58
+        }
59
+        // si l'action est provoque par un hit {ajax}
60
+        // il faut transmettre l'env ajax au redirect
61
+        // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
62
+        if (
63
+            ($v = _request('var_ajax'))
64
+            and ($v !== 'form')
65
+            and ($args = _request('var_ajax_env'))
66
+            and ($url = _request('redirect'))
67
+        ) {
68
+            $url = parametre_url($url, 'var_ajax', $v, '&');
69
+            $url = parametre_url($url, 'var_ajax_env', $args, '&');
70
+            set_request('redirect', $url);
71
+        } else {
72
+            if (_request('redirect')) {
73
+                set_request('redirect', securiser_redirect_action(_request('redirect')));
74
+            }
75
+        }
76
+        $var_f = charger_fonction($action, 'action');
77
+        $var_f();
78
+        if (!isset($GLOBALS['redirect'])) {
79
+            $GLOBALS['redirect'] = _request('redirect');
80
+            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
81
+                $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
82
+            }
83
+            $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
84
+        }
85
+        if ($url = $GLOBALS['redirect']) {
86
+            // si l'action est provoque par un hit {ajax}
87
+            // il faut transmettre l'env ajax au redirect
88
+            // qui a pu etre defini par l'action
89
+            if (
90
+                ($v = _request('var_ajax'))
91
+                and ($v !== 'form')
92
+                and ($args = _request('var_ajax_env'))
93
+            ) {
94
+                $url = parametre_url($url, 'var_ajax', $v, '&');
95
+                $url = parametre_url($url, 'var_ajax_env', $args, '&');
96
+                // passer l'ancre en variable pour pouvoir la gerer cote serveur
97
+                $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
98
+            }
99
+            $url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
100
+            redirige_par_entete($url);
101
+        }
102 102
 
103
-		// attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
104
-		// et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
105
-		if (
106
-			!headers_sent()
107
-			and !ob_get_length()
108
-		) {
109
-			http_status(204);
110
-		} // No Content
111
-		return true;
112
-	}
103
+        // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
104
+        // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
105
+        if (
106
+            !headers_sent()
107
+            and !ob_get_length()
108
+        ) {
109
+            http_status(204);
110
+        } // No Content
111
+        return true;
112
+    }
113 113
 
114
-	return false;
114
+    return false;
115 115
 }
116 116
 
117 117
 
118 118
 // https://code.spip.net/@refuser_traiter_formulaire_ajax
119 119
 function refuser_traiter_formulaire_ajax() {
120
-	if (
121
-		$v = _request('var_ajax')
122
-		and $v == 'form'
123
-		and $form = _request('formulaire_action')
124
-		and $args = _request('formulaire_action_args')
125
-		and decoder_contexte_ajax($args, $form) !== false
126
-	) {
127
-		// on est bien dans le contexte de traitement d'un formulaire en ajax
128
-		// mais traiter ne veut pas
129
-		// on le dit a la page qui va resumbit
130
-		// sans ajax
131
-		include_spip('inc/actions');
132
-		ajax_retour('noajax', false);
133
-		exit;
134
-	}
120
+    if (
121
+        $v = _request('var_ajax')
122
+        and $v == 'form'
123
+        and $form = _request('formulaire_action')
124
+        and $args = _request('formulaire_action_args')
125
+        and decoder_contexte_ajax($args, $form) !== false
126
+    ) {
127
+        // on est bien dans le contexte de traitement d'un formulaire en ajax
128
+        // mais traiter ne veut pas
129
+        // on le dit a la page qui va resumbit
130
+        // sans ajax
131
+        include_spip('inc/actions');
132
+        ajax_retour('noajax', false);
133
+        exit;
134
+    }
135 135
 }
136 136
 
137 137
 // https://code.spip.net/@traiter_appels_inclusions_ajax
138 138
 function traiter_appels_inclusions_ajax() {
139
-	// traiter les appels de bloc ajax (ex: pagination)
140
-	if (
141
-		$v = _request('var_ajax')
142
-		and $v !== 'form'
143
-		and $args = _request('var_ajax_env')
144
-	) {
145
-		include_spip('inc/filtres');
146
-		include_spip('inc/actions');
147
-		if (
148
-			$args = decoder_contexte_ajax($args)
149
-			and $fond = $args['fond']
150
-		) {
151
-			include_spip('public/assembler');
152
-			$contexte = calculer_contexte();
153
-			$contexte = array_merge($args, $contexte);
154
-			$page = recuperer_fond($fond, $contexte, ['trim' => false]);
155
-			$texte = $page;
156
-			if ($ancre = _request('var_ajax_ancre')) {
157
-				// pas n'importe quoi quand meme dans la variable !
158
-				$ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
159
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
160
-			}
161
-		} else {
162
-			include_spip('inc/headers');
163
-			http_response_code(400);
164
-			$texte = _L('signature ajax bloc incorrecte');
165
-		}
166
-		ajax_retour($texte, false);
139
+    // traiter les appels de bloc ajax (ex: pagination)
140
+    if (
141
+        $v = _request('var_ajax')
142
+        and $v !== 'form'
143
+        and $args = _request('var_ajax_env')
144
+    ) {
145
+        include_spip('inc/filtres');
146
+        include_spip('inc/actions');
147
+        if (
148
+            $args = decoder_contexte_ajax($args)
149
+            and $fond = $args['fond']
150
+        ) {
151
+            include_spip('public/assembler');
152
+            $contexte = calculer_contexte();
153
+            $contexte = array_merge($args, $contexte);
154
+            $page = recuperer_fond($fond, $contexte, ['trim' => false]);
155
+            $texte = $page;
156
+            if ($ancre = _request('var_ajax_ancre')) {
157
+                // pas n'importe quoi quand meme dans la variable !
158
+                $ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
159
+                $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
160
+            }
161
+        } else {
162
+            include_spip('inc/headers');
163
+            http_response_code(400);
164
+            $texte = _L('signature ajax bloc incorrecte');
165
+        }
166
+        ajax_retour($texte, false);
167 167
 
168
-		return true; // on a fini le hit
169
-	}
168
+        return true; // on a fini le hit
169
+    }
170 170
 
171
-	return false;
171
+    return false;
172 172
 }
173 173
 
174 174
 // au 1er appel, traite les formulaires dynamiques charger/verifier/traiter
@@ -177,173 +177,173 @@  discard block
 block discarded – undo
177 177
 
178 178
 // https://code.spip.net/@traiter_formulaires_dynamiques
179 179
 function traiter_formulaires_dynamiques($get = false) {
180
-	static $post = [];
181
-	static $done = false;
180
+    static $post = [];
181
+    static $done = false;
182 182
 
183
-	if ($get) {
184
-		return $post;
185
-	}
186
-	if ($done) {
187
-		return false;
188
-	}
189
-	$done = true;
183
+    if ($get) {
184
+        return $post;
185
+    }
186
+    if ($done) {
187
+        return false;
188
+    }
189
+    $done = true;
190 190
 
191
-	if (
192
-		!($form = _request('formulaire_action')
193
-		and $args = _request('formulaire_action_args'))
194
-	) {
195
-		return false;
196
-	} // le hit peut continuer normalement
191
+    if (
192
+        !($form = _request('formulaire_action')
193
+        and $args = _request('formulaire_action_args'))
194
+    ) {
195
+        return false;
196
+    } // le hit peut continuer normalement
197 197
 
198
-	// verifier que le post est licite (du meme auteur ou d'une session anonyme)
199
-	$sign = _request('formulaire_action_sign');
200
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
201
-		if (empty($sign)) {
202
-			spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
203
-			return false;
204
-		}
205
-		$securiser_action = charger_fonction('securiser_action', 'inc');
206
-		$secu = $securiser_action($form, $args, '', -1);
207
-		if ($sign !== $secu['hash']) {
208
-			spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR);
209
-			return false;
210
-		}
211
-	}
212
-	else {
213
-		if (!empty($sign)) {
214
-			spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR);
215
-			return false;
216
-		}
217
-	}
198
+    // verifier que le post est licite (du meme auteur ou d'une session anonyme)
199
+    $sign = _request('formulaire_action_sign');
200
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
201
+        if (empty($sign)) {
202
+            spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
203
+            return false;
204
+        }
205
+        $securiser_action = charger_fonction('securiser_action', 'inc');
206
+        $secu = $securiser_action($form, $args, '', -1);
207
+        if ($sign !== $secu['hash']) {
208
+            spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR);
209
+            return false;
210
+        }
211
+    }
212
+    else {
213
+        if (!empty($sign)) {
214
+            spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR);
215
+            return false;
216
+        }
217
+    }
218 218
 
219
-	include_spip('inc/filtres');
220
-	if (($args = decoder_contexte_ajax($args, $form)) === false) {
221
-		spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR);
219
+    include_spip('inc/filtres');
220
+    if (($args = decoder_contexte_ajax($args, $form)) === false) {
221
+        spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR);
222 222
 
223
-		return false; // continuons le hit comme si de rien etait
224
-	} else {
225
-		include_spip('inc/lang');
226
-		// sauvegarder la lang en cours
227
-		$old_lang = $GLOBALS['spip_lang'];
228
-		// changer la langue avec celle qui a cours dans le formulaire
229
-		// on la depile de $args car c'est un argument implicite masque
230
-		changer_langue(array_shift($args));
223
+        return false; // continuons le hit comme si de rien etait
224
+    } else {
225
+        include_spip('inc/lang');
226
+        // sauvegarder la lang en cours
227
+        $old_lang = $GLOBALS['spip_lang'];
228
+        // changer la langue avec celle qui a cours dans le formulaire
229
+        // on la depile de $args car c'est un argument implicite masque
230
+        changer_langue(array_shift($args));
231 231
 
232 232
 
233
-		// inclure mes_fonctions et autres filtres avant verifier/traiter
234
-		include_fichiers_fonctions();
235
-		// ainsi que l'API SQL bien utile dans verifier/traiter
236
-		include_spip('base/abstract_sql');
233
+        // inclure mes_fonctions et autres filtres avant verifier/traiter
234
+        include_fichiers_fonctions();
235
+        // ainsi que l'API SQL bien utile dans verifier/traiter
236
+        include_spip('base/abstract_sql');
237 237
 
238
-		/**
239
-		 * Pipeline exécuté lors de la soumission d'un formulaire,
240
-		 * mais avant l'appel de la fonction de vérification.
241
-		 */
242
-		pipeline(
243
-			'formulaire_receptionner',
244
-			[
245
-				'args' => ['form' => $form, 'args' => $args],
246
-				'data' => null,
247
-			]
248
-		);
238
+        /**
239
+         * Pipeline exécuté lors de la soumission d'un formulaire,
240
+         * mais avant l'appel de la fonction de vérification.
241
+         */
242
+        pipeline(
243
+            'formulaire_receptionner',
244
+            [
245
+                'args' => ['form' => $form, 'args' => $args],
246
+                'data' => null,
247
+            ]
248
+        );
249 249
 
250
-		$verifier = charger_fonction('verifier', "formulaires/$form/", true);
251
-		$post["erreurs_$form"] = pipeline(
252
-			'formulaire_verifier',
253
-			[
254
-				'args' => ['form' => $form, 'args' => $args],
255
-				'data' => $verifier ? call_user_func_array($verifier, $args) : []
256
-			]
257
-		);
258
-		// prise en charge CVT multi etape si besoin
259
-		if (_request('cvtm_prev_post')) {
260
-			include_spip('inc/cvt_multietapes');
261
-			$post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
262
-				['form' => $form, 'args' => $args],
263
-				$post["erreurs_$form"]
264
-			);
265
-		}
250
+        $verifier = charger_fonction('verifier', "formulaires/$form/", true);
251
+        $post["erreurs_$form"] = pipeline(
252
+            'formulaire_verifier',
253
+            [
254
+                'args' => ['form' => $form, 'args' => $args],
255
+                'data' => $verifier ? call_user_func_array($verifier, $args) : []
256
+            ]
257
+        );
258
+        // prise en charge CVT multi etape si besoin
259
+        if (_request('cvtm_prev_post')) {
260
+            include_spip('inc/cvt_multietapes');
261
+            $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
262
+                ['form' => $form, 'args' => $args],
263
+                $post["erreurs_$form"]
264
+            );
265
+        }
266 266
 
267
-		// accessibilite : si des erreurs mais pas de message general l'ajouter
268
-		if ((isset($post["erreurs_$form"]) and is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) and !isset($post["erreurs_$form"]['message_erreur'])) {
269
-			$post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
270
-				is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0,
271
-				'avis_1_erreur_saisie',
272
-				'avis_nb_erreurs_saisie'
273
-			);
274
-		}
267
+        // accessibilite : si des erreurs mais pas de message general l'ajouter
268
+        if ((isset($post["erreurs_$form"]) and is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) and !isset($post["erreurs_$form"]['message_erreur'])) {
269
+            $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
270
+                is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0,
271
+                'avis_1_erreur_saisie',
272
+                'avis_nb_erreurs_saisie'
273
+            );
274
+        }
275 275
 
276
-		// si on ne demandait qu'une verif json
277
-		if (_request('formulaire_action_verifier_json')) {
278
-			include_spip('inc/json');
279
-			include_spip('inc/actions');
280
-			ajax_retour(json_encode($post["erreurs_$form"], JSON_THROW_ON_ERROR), 'text/plain');
276
+        // si on ne demandait qu'une verif json
277
+        if (_request('formulaire_action_verifier_json')) {
278
+            include_spip('inc/json');
279
+            include_spip('inc/actions');
280
+            ajax_retour(json_encode($post["erreurs_$form"], JSON_THROW_ON_ERROR), 'text/plain');
281 281
 
282
-			return true; // on a fini le hit
283
-		}
284
-		$retour = '';
285
-		if (isset($post["erreurs_$form"]) and ((is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0)) {
286
-			$rev = '';
287
-			if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
288
-				$rev = call_user_func_array($traiter, $args);
289
-			}
282
+            return true; // on a fini le hit
283
+        }
284
+        $retour = '';
285
+        if (isset($post["erreurs_$form"]) and ((is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0)) {
286
+            $rev = '';
287
+            if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
288
+                $rev = call_user_func_array($traiter, $args);
289
+            }
290 290
 
291
-			$rev = pipeline(
292
-				'formulaire_traiter',
293
-				[
294
-					'args' => ['form' => $form, 'args' => $args],
295
-					'data' => $rev
296
-				]
297
-			);
298
-			// le retour de traiter est
299
-			// un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
300
-			// il permet le pipelinage, en particulier
301
-			// en y passant l'id de l'objet cree/modifie
302
-			// si message_erreur est present, on considere que le traitement a echoue
303
-			$post["message_ok_$form"] = '';
304
-			// on peut avoir message_ok et message_erreur
305
-			if (isset($rev['message_ok'])) {
306
-				$post["message_ok_$form"] = $rev['message_ok'];
307
-			}
291
+            $rev = pipeline(
292
+                'formulaire_traiter',
293
+                [
294
+                    'args' => ['form' => $form, 'args' => $args],
295
+                    'data' => $rev
296
+                ]
297
+            );
298
+            // le retour de traiter est
299
+            // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
300
+            // il permet le pipelinage, en particulier
301
+            // en y passant l'id de l'objet cree/modifie
302
+            // si message_erreur est present, on considere que le traitement a echoue
303
+            $post["message_ok_$form"] = '';
304
+            // on peut avoir message_ok et message_erreur
305
+            if (isset($rev['message_ok'])) {
306
+                $post["message_ok_$form"] = $rev['message_ok'];
307
+            }
308 308
 
309
-			// verifier si traiter n'a pas echoue avec une erreur :
310
-			if (isset($rev['message_erreur'])) {
311
-				$post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
312
-				// si il y a une erreur on ne redirige pas
313
-			} else {
314
-				// sinon faire ce qu'il faut :
315
-				if (isset($rev['editable'])) {
316
-					$post["editable_$form"] = $rev['editable'];
317
-				}
318
-				// si une redirection est demandee, appeler redirigae_formulaire qui choisira
319
-				// le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
320
-				if (isset($rev['redirect']) and $rev['redirect']) {
321
-					include_spip('inc/headers');
322
-					[$masque, $message] = redirige_formulaire($rev['redirect'], '', 'ajaxform');
323
-					$post["message_ok_$form"] .= $message;
324
-					$retour .= $masque;
325
-				}
326
-			}
327
-		}
328
-		// si le formulaire a ete soumis en ajax, on le renvoie direct !
329
-		if (_request('var_ajax')) {
330
-			if (find_in_path('formulaire_.php', 'balise/', true)) {
331
-				include_spip('inc/actions');
332
-				include_spip('public/assembler');
333
-				array_unshift($args, $form);
334
-				$retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
335
-				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
336
-				// sans cela le formulaire n'est pas actif apres le hit ajax
337
-				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
338
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
339
-				ajax_retour($retour, false);
309
+            // verifier si traiter n'a pas echoue avec une erreur :
310
+            if (isset($rev['message_erreur'])) {
311
+                $post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
312
+                // si il y a une erreur on ne redirige pas
313
+            } else {
314
+                // sinon faire ce qu'il faut :
315
+                if (isset($rev['editable'])) {
316
+                    $post["editable_$form"] = $rev['editable'];
317
+                }
318
+                // si une redirection est demandee, appeler redirigae_formulaire qui choisira
319
+                // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
320
+                if (isset($rev['redirect']) and $rev['redirect']) {
321
+                    include_spip('inc/headers');
322
+                    [$masque, $message] = redirige_formulaire($rev['redirect'], '', 'ajaxform');
323
+                    $post["message_ok_$form"] .= $message;
324
+                    $retour .= $masque;
325
+                }
326
+            }
327
+        }
328
+        // si le formulaire a ete soumis en ajax, on le renvoie direct !
329
+        if (_request('var_ajax')) {
330
+            if (find_in_path('formulaire_.php', 'balise/', true)) {
331
+                include_spip('inc/actions');
332
+                include_spip('public/assembler');
333
+                array_unshift($args, $form);
334
+                $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
335
+                // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
336
+                // sans cela le formulaire n'est pas actif apres le hit ajax
337
+                // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
338
+                $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
339
+                ajax_retour($retour, false);
340 340
 
341
-				return true; // on a fini le hit
342
-			}
343
-		}
344
-		// restaurer la lang en cours
345
-		changer_langue($old_lang);
346
-	}
341
+                return true; // on a fini le hit
342
+            }
343
+        }
344
+        // restaurer la lang en cours
345
+        changer_langue($old_lang);
346
+    }
347 347
 
348
-	return false; // le hit peut continuer normalement
348
+    return false; // le hit peut continuer normalement
349 349
 }
Please login to merge, or discard this patch.