Completed
Push — master ( d9afd7...2268c9 )
by cam
01:30 queued 11s
created
ecrire/inc/pipelines_ecrire.php 1 patch
Indentation   +225 added lines, -225 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Pipelines
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 
@@ -35,36 +35,36 @@  discard block
 block discarded – undo
35 35
  * @return string          Contenu complété des scripts javascripts, dont jQuery
36 36
  **/
37 37
 function f_jQuery_prive($texte) {
38
-	$x = '';
39
-	$jquery_plugins = pipeline(
40
-		'jquery_plugins',
41
-		[
42
-			'prive/javascript/jquery.js',
43
-			'prive/javascript/jquery.form.js',
44
-			'prive/javascript/jquery.autosave.js',
45
-			'prive/javascript/jquery.placeholder-label.js',
46
-			'prive/javascript/ajaxCallback.js',
47
-			'prive/javascript/js.cookie.js',
48
-			'prive/javascript/spip_barre.js',
49
-		]
50
-	);
51
-	foreach (array_unique($jquery_plugins) as $script) {
52
-		if ($script = find_in_path(supprimer_timestamp($script))) {
53
-			$script = timestamp($script);
54
-			$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
55
-		}
56
-	}
57
-	// inserer avant le premier script externe ou a la fin
58
-	if (
59
-		preg_match(',<script[^><]*src=,', $texte, $match)
60
-		and $p = strpos($texte, (string) $match[0])
61
-	) {
62
-		$texte = substr_replace($texte, $x, $p, 0);
63
-	} else {
64
-		$texte .= $x;
65
-	}
38
+    $x = '';
39
+    $jquery_plugins = pipeline(
40
+        'jquery_plugins',
41
+        [
42
+            'prive/javascript/jquery.js',
43
+            'prive/javascript/jquery.form.js',
44
+            'prive/javascript/jquery.autosave.js',
45
+            'prive/javascript/jquery.placeholder-label.js',
46
+            'prive/javascript/ajaxCallback.js',
47
+            'prive/javascript/js.cookie.js',
48
+            'prive/javascript/spip_barre.js',
49
+        ]
50
+    );
51
+    foreach (array_unique($jquery_plugins) as $script) {
52
+        if ($script = find_in_path(supprimer_timestamp($script))) {
53
+            $script = timestamp($script);
54
+            $x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
55
+        }
56
+    }
57
+    // inserer avant le premier script externe ou a la fin
58
+    if (
59
+        preg_match(',<script[^><]*src=,', $texte, $match)
60
+        and $p = strpos($texte, (string) $match[0])
61
+    ) {
62
+        $texte = substr_replace($texte, $x, $p, 0);
63
+    } else {
64
+        $texte .= $x;
65
+    }
66 66
 
67
-	return $texte;
67
+    return $texte;
68 68
 }
69 69
 
70 70
 
@@ -77,42 +77,42 @@  discard block
 block discarded – undo
77 77
  * @return string
78 78
  */
79 79
 function affichage_final_prive_title_auto($texte) {
80
-	if (
81
-		strpos($texte, '<title>') === false
82
-		and
83
-		(preg_match(',<h1[^>]*>(.+)</h1>,Uims', $texte, $match)
84
-			or preg_match(',<h[23][^>]*>(.+)</h[23]>,Uims', $texte, $match))
85
-		and $match = textebrut(trim($match[1]))
86
-		and ($p = strpos($texte, '<head>')) !== false
87
-	) {
88
-		if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']['nom_site']))) {
89
-			$nom_site_spip = _T('info_mon_site_spip');
90
-		}
80
+    if (
81
+        strpos($texte, '<title>') === false
82
+        and
83
+        (preg_match(',<h1[^>]*>(.+)</h1>,Uims', $texte, $match)
84
+            or preg_match(',<h[23][^>]*>(.+)</h[23]>,Uims', $texte, $match))
85
+        and $match = textebrut(trim($match[1]))
86
+        and ($p = strpos($texte, '<head>')) !== false
87
+    ) {
88
+        if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']['nom_site']))) {
89
+            $nom_site_spip = _T('info_mon_site_spip');
90
+        }
91 91
 
92
-		$titre = '<title>['
93
-			. $nom_site_spip
94
-			. '] ' . $match
95
-			. '</title>';
92
+        $titre = '<title>['
93
+            . $nom_site_spip
94
+            . '] ' . $match
95
+            . '</title>';
96 96
 
97
-		$texte = substr_replace($texte, $titre, $p + 6, 0);
98
-	}
97
+        $texte = substr_replace($texte, $titre, $p + 6, 0);
98
+    }
99 99
 
100
-	return $texte;
100
+    return $texte;
101 101
 }
102 102
 
103 103
 
104 104
 // Fonction standard pour le pipeline 'boite_infos'
105 105
 function f_boite_infos($flux) {
106
-	$args = $flux['args'];
107
-	$type = $args['type'];
108
-	unset($args['row']);
109
-	if (!trouver_fond($type, 'prive/objets/infos/')) {
110
-		$type = 'objet';
111
-	}
112
-	$args['espace_prive'] = 1;
113
-	$flux['data'] .= recuperer_fond("prive/objets/infos/$type", $args);
106
+    $args = $flux['args'];
107
+    $type = $args['type'];
108
+    unset($args['row']);
109
+    if (!trouver_fond($type, 'prive/objets/infos/')) {
110
+        $type = 'objet';
111
+    }
112
+    $args['espace_prive'] = 1;
113
+    $flux['data'] .= recuperer_fond("prive/objets/infos/$type", $args);
114 114
 
115
-	return $flux;
115
+    return $flux;
116 116
 }
117 117
 
118 118
 
@@ -131,97 +131,97 @@  discard block
 block discarded – undo
131 131
  * @return array Données du pipeline
132 132
  */
133 133
 function f_afficher_blocs_ecrire($flux) {
134
-	static $o = [];
135
-	if (is_string($fond = $flux['args']['fond'])) {
136
-		$exec = $flux['args']['contexte']['exec'] ?? _request('exec');
137
-		if (!isset($o[$exec])) {
138
-			$o[$exec] = trouver_objet_exec($exec);
139
-		}
140
-		// cas particulier
141
-		if ($exec == 'infos_perso') {
142
-			$flux['args']['contexte']['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
143
-		}
144
-		$typepage = ($flux['args']['contexte']['type-page'] ?? $exec);
145
-		if ($fond == "prive/squelettes/navigation/$typepage") {
146
-			$flux['data']['texte'] = pipeline(
147
-				'affiche_gauche',
148
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
149
-			);
150
-		} elseif ($fond == "prive/squelettes/extra/$typepage") {
151
-			include_spip('inc/presentation_mini');
152
-			$flux['data']['texte'] = pipeline(
153
-				'affiche_droite',
154
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
155
-			) . liste_objets_bloques(
156
-				$exec,
157
-				$flux['args']['contexte']
158
-			);
159
-		} elseif ($fond == "prive/squelettes/hierarchie/$typepage" and $o[$exec]) {
160
-			// id non defini sur les formulaire de nouveaux objets
161
-			$id = isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) ? intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) : 0;
162
-			$flux['data']['texte'] = pipeline(
163
-				'affiche_hierarchie',
164
-				['args' => ['objet' => $o[$exec]['type'], 'id_objet' => $id], 'data' => $flux['data']['texte']]
165
-			);
166
-		} elseif ($fond == "prive/squelettes/contenu/$typepage") {
167
-			// Préparation du marqueur affiche_milieu
168
-			// Si c'est la page d'un objet pas en édition, on l'encapsule dans un div
169
-			$est_page_objet = !empty($o[$exec]['type']);
170
-			$est_en_edition = (isset($o[$exec]['edition']) and $o[$exec]['edition'] === true);
171
-			$encapsuler_milieu = ($est_page_objet and !$est_en_edition);
172
-			$flux['data']['texte'] = afficher_blocs_ecrire_preparer_marqueur(
173
-				$flux['data']['texte'],
174
-				'<!--affiche_milieu-->',
175
-				'<div id=["\']wysiwyg',
176
-				$encapsuler_milieu ? '<div class="affiche_milieu">' : '',
177
-				$encapsuler_milieu ? '</div>' : ''
178
-			);
179
-			if (
180
-				$o[$exec]
181
-				and $objet = $o[$exec]['type']
182
-				and $o[$exec]['edition'] == false
183
-				and isset($flux['args']['contexte'][$o[$exec]['id_table_objet']])
184
-				and $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']])
185
-			) {
186
-				// inserer le formulaire de traduction
187
-				$flux['data']['texte'] = str_replace('<!--affiche_milieu-->', recuperer_fond(
188
-					'prive/objets/editer/traductions',
189
-					['objet' => $objet, 'id_objet' => $id, 'espace_prive' => 1]
190
-				) . '<!--affiche_milieu-->', $flux['data']['texte']);
191
-				$flux['data']['texte'] = pipeline('afficher_fiche_objet', [
192
-					'args' => [
193
-						'contexte' => $flux['args']['contexte'],
194
-						'type' => $objet,
195
-						'id' => $id
196
-					],
197
-					'data' => $flux['data']['texte']
198
-				]);
199
-			}
200
-			$flux['data']['texte'] = pipeline(
201
-				'affiche_milieu',
202
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
203
-			);
204
-		} elseif ($fond == 'prive/squelettes/inclure/pied') {
205
-			$flux['data']['texte'] = pipeline(
206
-				'affiche_pied',
207
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
208
-			);
209
-		} elseif (
210
-			strncmp($fond, 'prive/objets/contenu/', 21) == 0
211
-			and $objet = basename($fond)
212
-			and $objet == substr($fond, 21)
213
-			and isset($o[$objet])
214
-			and $o[$objet]
215
-		) {
216
-			$id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]);
217
-			$flux['data']['texte'] = pipeline('afficher_contenu_objet', [
218
-				'args' => ['type' => $objet, 'id_objet' => $id, 'contexte' => $flux['args']['contexte']],
219
-				'data' => $flux['data']['texte']
220
-			]);
221
-		}
222
-	}
134
+    static $o = [];
135
+    if (is_string($fond = $flux['args']['fond'])) {
136
+        $exec = $flux['args']['contexte']['exec'] ?? _request('exec');
137
+        if (!isset($o[$exec])) {
138
+            $o[$exec] = trouver_objet_exec($exec);
139
+        }
140
+        // cas particulier
141
+        if ($exec == 'infos_perso') {
142
+            $flux['args']['contexte']['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
143
+        }
144
+        $typepage = ($flux['args']['contexte']['type-page'] ?? $exec);
145
+        if ($fond == "prive/squelettes/navigation/$typepage") {
146
+            $flux['data']['texte'] = pipeline(
147
+                'affiche_gauche',
148
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
149
+            );
150
+        } elseif ($fond == "prive/squelettes/extra/$typepage") {
151
+            include_spip('inc/presentation_mini');
152
+            $flux['data']['texte'] = pipeline(
153
+                'affiche_droite',
154
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
155
+            ) . liste_objets_bloques(
156
+                $exec,
157
+                $flux['args']['contexte']
158
+            );
159
+        } elseif ($fond == "prive/squelettes/hierarchie/$typepage" and $o[$exec]) {
160
+            // id non defini sur les formulaire de nouveaux objets
161
+            $id = isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) ? intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) : 0;
162
+            $flux['data']['texte'] = pipeline(
163
+                'affiche_hierarchie',
164
+                ['args' => ['objet' => $o[$exec]['type'], 'id_objet' => $id], 'data' => $flux['data']['texte']]
165
+            );
166
+        } elseif ($fond == "prive/squelettes/contenu/$typepage") {
167
+            // Préparation du marqueur affiche_milieu
168
+            // Si c'est la page d'un objet pas en édition, on l'encapsule dans un div
169
+            $est_page_objet = !empty($o[$exec]['type']);
170
+            $est_en_edition = (isset($o[$exec]['edition']) and $o[$exec]['edition'] === true);
171
+            $encapsuler_milieu = ($est_page_objet and !$est_en_edition);
172
+            $flux['data']['texte'] = afficher_blocs_ecrire_preparer_marqueur(
173
+                $flux['data']['texte'],
174
+                '<!--affiche_milieu-->',
175
+                '<div id=["\']wysiwyg',
176
+                $encapsuler_milieu ? '<div class="affiche_milieu">' : '',
177
+                $encapsuler_milieu ? '</div>' : ''
178
+            );
179
+            if (
180
+                $o[$exec]
181
+                and $objet = $o[$exec]['type']
182
+                and $o[$exec]['edition'] == false
183
+                and isset($flux['args']['contexte'][$o[$exec]['id_table_objet']])
184
+                and $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']])
185
+            ) {
186
+                // inserer le formulaire de traduction
187
+                $flux['data']['texte'] = str_replace('<!--affiche_milieu-->', recuperer_fond(
188
+                    'prive/objets/editer/traductions',
189
+                    ['objet' => $objet, 'id_objet' => $id, 'espace_prive' => 1]
190
+                ) . '<!--affiche_milieu-->', $flux['data']['texte']);
191
+                $flux['data']['texte'] = pipeline('afficher_fiche_objet', [
192
+                    'args' => [
193
+                        'contexte' => $flux['args']['contexte'],
194
+                        'type' => $objet,
195
+                        'id' => $id
196
+                    ],
197
+                    'data' => $flux['data']['texte']
198
+                ]);
199
+            }
200
+            $flux['data']['texte'] = pipeline(
201
+                'affiche_milieu',
202
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
203
+            );
204
+        } elseif ($fond == 'prive/squelettes/inclure/pied') {
205
+            $flux['data']['texte'] = pipeline(
206
+                'affiche_pied',
207
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
208
+            );
209
+        } elseif (
210
+            strncmp($fond, 'prive/objets/contenu/', 21) == 0
211
+            and $objet = basename($fond)
212
+            and $objet == substr($fond, 21)
213
+            and isset($o[$objet])
214
+            and $o[$objet]
215
+        ) {
216
+            $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]);
217
+            $flux['data']['texte'] = pipeline('afficher_contenu_objet', [
218
+                'args' => ['type' => $objet, 'id_objet' => $id, 'contexte' => $flux['args']['contexte']],
219
+                'data' => $flux['data']['texte']
220
+            ]);
221
+        }
222
+    }
223 223
 
224
-	return $flux;
224
+    return $flux;
225 225
 }
226 226
 
227 227
 /**
@@ -249,36 +249,36 @@  discard block
 block discarded – undo
249 249
  */
250 250
 function afficher_blocs_ecrire_preparer_marqueur(?string $texte, string $marqueur, string $inserer_avant, string $ouvrir = '', string $fermer = ''): ?string {
251 251
 
252
-	if ($texte) {
253
-		$encapsuler = (($ouvrir and $fermer) ? true : false);
254
-		$marqueur_pos = strpos($texte, $marqueur);
255
-		$full_marqueur = "$ouvrir$marqueur$fermer";
252
+    if ($texte) {
253
+        $encapsuler = (($ouvrir and $fermer) ? true : false);
254
+        $marqueur_pos = strpos($texte, $marqueur);
255
+        $full_marqueur = "$ouvrir$marqueur$fermer";
256 256
 
257
-		// Le marqueur est absent : on l'ajoute avant l'élément indiqué
258
-		if ($marqueur_pos  === false) {
259
-			$texte = preg_replace(
260
-				",$inserer_avant,",
261
-				"$full_marqueur\\0",
262
-				$texte
263
-			);
264
-		// Le marqueur est présent mais pas encapsulé : on ajoute les balises ouvrantes et fermantes.
265
-		// Pour vérifier, on prend le texte précédent et on regarde si ça correspond à la balise ouvrante.
266
-		// Il ne faut donc aucun espace blanc en trop.
267
-		} elseif (
268
-			$marqueur_pos !== false
269
-			and $encapsuler
270
-			and substr($texte, $marqueur_pos - strlen($ouvrir), strlen($ouvrir)) !== $ouvrir
271
-		) {
272
-			$texte = substr_replace(
273
-				$texte,
274
-				$full_marqueur,
275
-				$marqueur_pos,
276
-				strlen($marqueur)
277
-			);
278
-		}
279
-	}
257
+        // Le marqueur est absent : on l'ajoute avant l'élément indiqué
258
+        if ($marqueur_pos  === false) {
259
+            $texte = preg_replace(
260
+                ",$inserer_avant,",
261
+                "$full_marqueur\\0",
262
+                $texte
263
+            );
264
+        // Le marqueur est présent mais pas encapsulé : on ajoute les balises ouvrantes et fermantes.
265
+        // Pour vérifier, on prend le texte précédent et on regarde si ça correspond à la balise ouvrante.
266
+        // Il ne faut donc aucun espace blanc en trop.
267
+        } elseif (
268
+            $marqueur_pos !== false
269
+            and $encapsuler
270
+            and substr($texte, $marqueur_pos - strlen($ouvrir), strlen($ouvrir)) !== $ouvrir
271
+        ) {
272
+            $texte = substr_replace(
273
+                $texte,
274
+                $full_marqueur,
275
+                $marqueur_pos,
276
+                strlen($marqueur)
277
+            );
278
+        }
279
+    }
280 280
 
281
-	return $texte;
281
+    return $texte;
282 282
 }
283 283
 
284 284
 /**
@@ -289,23 +289,23 @@  discard block
 block discarded – undo
289 289
  * @return string
290 290
  */
291 291
 function f_queue_affiche_milieu($flux) {
292
-	$args = $flux['args'];
293
-	$res = '';
294
-	foreach ($args as $key => $arg) {
295
-		if (preg_match(',^id_,', $key) and is_numeric($arg) and $arg = intval($arg)) {
296
-			$objet = preg_replace(',^id_,', '', $key);
297
-			$res .= recuperer_fond(
298
-				'modeles/object_jobs_list',
299
-				['id_objet' => $arg, 'objet' => $objet, 'espace_prive' => 1],
300
-				['ajax' => true]
301
-			);
302
-		}
303
-	}
304
-	if ($res) {
305
-		$flux['data'] = $res . $flux['data'];
306
-	}
292
+    $args = $flux['args'];
293
+    $res = '';
294
+    foreach ($args as $key => $arg) {
295
+        if (preg_match(',^id_,', $key) and is_numeric($arg) and $arg = intval($arg)) {
296
+            $objet = preg_replace(',^id_,', '', $key);
297
+            $res .= recuperer_fond(
298
+                'modeles/object_jobs_list',
299
+                ['id_objet' => $arg, 'objet' => $objet, 'espace_prive' => 1],
300
+                ['ajax' => true]
301
+            );
302
+        }
303
+    }
304
+    if ($res) {
305
+        $flux['data'] = $res . $flux['data'];
306
+    }
307 307
 
308
-	return $flux;
308
+    return $flux;
309 309
 }
310 310
 
311 311
 /**
@@ -319,39 +319,39 @@  discard block
 block discarded – undo
319 319
  * @return array|bool
320 320
  */
321 321
 function trouver_objet_exec(?string $exec) {
322
-	static $objet_exec = [];
323
-	if (!$exec) {
324
-		return false;
325
-	}
326
-	// cas particulier
327
-	if ($exec === 'infos_perso') {
328
-		$exec = 'auteur';
329
-		set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']);
330
-	}
331
-	if (!isset($objet_exec[$exec])) {
332
-		$objet_exec[$exec] = false;
333
-		$infos = lister_tables_objets_sql();
334
-		foreach ($infos as $t => $info) {
335
-			if ($exec === $info['url_edit'] and $info['editable']) {
336
-				return $objet_exec[$exec] = [
337
-					'edition' => $exec == $info['url_voir'] ? '' : true,
338
-					'table_objet_sql' => $t,
339
-					'table' => $info['table_objet'],
340
-					'type' => $info['type'],
341
-					'id_table_objet' => id_table_objet($info['type'])
342
-				];
343
-			}
344
-			if ($exec === $info['url_voir']) {
345
-				return $objet_exec[$exec] = [
346
-					'edition' => false,
347
-					'table_objet_sql' => $t,
348
-					'table' => $info['table_objet'],
349
-					'type' => $info['type'],
350
-					'id_table_objet' => id_table_objet($info['type'])
351
-				];
352
-			}
353
-		}
354
-	}
322
+    static $objet_exec = [];
323
+    if (!$exec) {
324
+        return false;
325
+    }
326
+    // cas particulier
327
+    if ($exec === 'infos_perso') {
328
+        $exec = 'auteur';
329
+        set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']);
330
+    }
331
+    if (!isset($objet_exec[$exec])) {
332
+        $objet_exec[$exec] = false;
333
+        $infos = lister_tables_objets_sql();
334
+        foreach ($infos as $t => $info) {
335
+            if ($exec === $info['url_edit'] and $info['editable']) {
336
+                return $objet_exec[$exec] = [
337
+                    'edition' => $exec == $info['url_voir'] ? '' : true,
338
+                    'table_objet_sql' => $t,
339
+                    'table' => $info['table_objet'],
340
+                    'type' => $info['type'],
341
+                    'id_table_objet' => id_table_objet($info['type'])
342
+                ];
343
+            }
344
+            if ($exec === $info['url_voir']) {
345
+                return $objet_exec[$exec] = [
346
+                    'edition' => false,
347
+                    'table_objet_sql' => $t,
348
+                    'table' => $info['table_objet'],
349
+                    'type' => $info['type'],
350
+                    'id_table_objet' => id_table_objet($info['type'])
351
+                ];
352
+            }
353
+        }
354
+    }
355 355
 
356
-	return $objet_exec[$exec];
356
+    return $objet_exec[$exec];
357 357
 }
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(0, 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(0, 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 4.0
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 4.0
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.