Completed
Push — master ( 4856a4...255be8 )
by cam
01:31
created
ecrire/balise/formulaire_.php 1 patch
Indentation   +267 added lines, -267 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,25 +35,25 @@  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
-		$texte = array_map('protege_champ', $texte);
40
-	} else {
41
-		// ne pas corrompre une valeur serialize
42
-		if ((preg_match(',^[abis]:\d+[:;],', $texte) and @unserialize($texte) != false) or is_null($texte)) {
43
-			return $texte;
44
-		}
45
-		if (
46
-			is_string($texte)
47
-			and $texte
48
-			and strpbrk($texte, "&\"'<>") !== false
49
-		) {
50
-			$texte = spip_htmlspecialchars($texte, ENT_QUOTES);
51
-		} elseif (is_bool($texte)) {
52
-			$texte = ($texte ? '1' : '');
53
-		}
54
-	}
55
-
56
-	return $texte;
38
+    if (is_array($texte)) {
39
+        $texte = array_map('protege_champ', $texte);
40
+    } else {
41
+        // ne pas corrompre une valeur serialize
42
+        if ((preg_match(',^[abis]:\d+[:;],', $texte) and @unserialize($texte) != false) or is_null($texte)) {
43
+            return $texte;
44
+        }
45
+        if (
46
+            is_string($texte)
47
+            and $texte
48
+            and strpbrk($texte, "&\"'<>") !== false
49
+        ) {
50
+            $texte = spip_htmlspecialchars($texte, ENT_QUOTES);
51
+        } elseif (is_bool($texte)) {
52
+            $texte = ($texte ? '1' : '');
53
+        }
54
+    }
55
+
56
+    return $texte;
57 57
 }
58 58
 
59 59
 /**
@@ -67,17 +67,17 @@  discard block
 block discarded – undo
67 67
  *     - false : pas de squelette trouvé
68 68
  **/
69 69
 function existe_formulaire($form) {
70
-	if (substr($form, 0, 11) == 'FORMULAIRE_') {
71
-		$form = strtolower(substr($form, 11));
72
-	} else {
73
-		$form = strtolower($form);
74
-	}
70
+    if (substr($form, 0, 11) == 'FORMULAIRE_') {
71
+        $form = strtolower(substr($form, 11));
72
+    } else {
73
+        $form = strtolower($form);
74
+    }
75 75
 
76
-	if (!$form) {
77
-		return '';
78
-	} // on ne sait pas, le nom du formulaire n'est pas fourni ici
76
+    if (!$form) {
77
+        return '';
78
+    } // on ne sait pas, le nom du formulaire n'est pas fourni ici
79 79
 
80
-	return trouver_fond($form, 'formulaires/') ? $form : false;
80
+    return trouver_fond($form, 'formulaires/') ? $form : false;
81 81
 }
82 82
 
83 83
 /**
@@ -86,31 +86,31 @@  discard block
 block discarded – undo
86 86
  * @return false|array
87 87
  */
88 88
 function test_formulaire_inclus_par_modele() {
89
-	$trace = debug_backtrace(null, 20);
90
-	$trace_fonctions = array_column($trace, 'function');
91
-	$trace_fonctions = array_map('strtolower', $trace_fonctions);
92
-
93
-	// regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn
94
-	if (
95
-		function_exists('arguments_balise_dyn_depuis_modele')
96
-		and $form = arguments_balise_dyn_depuis_modele(null, 'read')
97
-	) {
98
-		if (in_array('balise_formulaire__dyn', $trace_fonctions)) {
99
-			$k = array_search('balise_formulaire__dyn', $trace_fonctions);
100
-			if ($trace[$k]['args'][0] === $form) {
101
-				return $trace[$k]['args'];
102
-			}
103
-		}
104
-	}
105
-
106
-	// fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil,
107
-	// mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette
108
-	if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) {
109
-		$k = array_search('inclure_modele', $trace_fonctions);
110
-		// les arguments de recuperer_fond() passes par inclure_modele()
111
-		return $trace[$k - 1]['args'][1]['args'];
112
-	}
113
-	return false;
89
+    $trace = debug_backtrace(null, 20);
90
+    $trace_fonctions = array_column($trace, 'function');
91
+    $trace_fonctions = array_map('strtolower', $trace_fonctions);
92
+
93
+    // regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn
94
+    if (
95
+        function_exists('arguments_balise_dyn_depuis_modele')
96
+        and $form = arguments_balise_dyn_depuis_modele(null, 'read')
97
+    ) {
98
+        if (in_array('balise_formulaire__dyn', $trace_fonctions)) {
99
+            $k = array_search('balise_formulaire__dyn', $trace_fonctions);
100
+            if ($trace[$k]['args'][0] === $form) {
101
+                return $trace[$k]['args'];
102
+            }
103
+        }
104
+    }
105
+
106
+    // fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil,
107
+    // mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette
108
+    if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) {
109
+        $k = array_search('inclure_modele', $trace_fonctions);
110
+        // les arguments de recuperer_fond() passes par inclure_modele()
111
+        return $trace[$k - 1]['args'][1]['args'];
112
+    }
113
+    return false;
114 114
 }
115 115
 
116 116
 /**
@@ -125,30 +125,30 @@  discard block
 block discarded – undo
125 125
  **/
126 126
 function balise_FORMULAIRE__dist($p) {
127 127
 
128
-	// Cas d'un #FORMULAIRE_TOTO inexistant : renvoyer la chaine vide.
129
-	// mais si #FORMULAIRE_{toto} on ne peut pas savoir a la compilation, continuer
130
-	if (existe_formulaire($p->nom_champ) === false) {
131
-		$p->code = "''";
132
-		$p->interdire_scripts = false;
133
-
134
-		return $p;
135
-	}
136
-
137
-	// sinon renvoyer un code php dynamique
138
-	$p = calculer_balise_dynamique($p, $p->nom_champ, []);
139
-
140
-	if (!test_espace_prive()
141
-	  and !empty($p->descr['sourcefile'])
142
-	  and $f = $p->descr['sourcefile']
143
-	  and basename(dirname($f)) === 'modeles') {
144
-		// un modele est toujours inséré en texte dans son contenant
145
-		// donc si on est dans le public avec un cache on va perdre le dynamisme
146
-		// et on risque de mettre en cache les valeurs pre-remplies du formulaire
147
-		// on injecte donc le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
148
-		$p->code = "'<'.'?php echo (".texte_script($p->code)."); ?'.'>'";
149
-		// dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)
150
-	}
151
-	return $p;
128
+    // Cas d'un #FORMULAIRE_TOTO inexistant : renvoyer la chaine vide.
129
+    // mais si #FORMULAIRE_{toto} on ne peut pas savoir a la compilation, continuer
130
+    if (existe_formulaire($p->nom_champ) === false) {
131
+        $p->code = "''";
132
+        $p->interdire_scripts = false;
133
+
134
+        return $p;
135
+    }
136
+
137
+    // sinon renvoyer un code php dynamique
138
+    $p = calculer_balise_dynamique($p, $p->nom_champ, []);
139
+
140
+    if (!test_espace_prive()
141
+      and !empty($p->descr['sourcefile'])
142
+      and $f = $p->descr['sourcefile']
143
+      and basename(dirname($f)) === 'modeles') {
144
+        // un modele est toujours inséré en texte dans son contenant
145
+        // donc si on est dans le public avec un cache on va perdre le dynamisme
146
+        // et on risque de mettre en cache les valeurs pre-remplies du formulaire
147
+        // on injecte donc le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
148
+        $p->code = "'<'.'?php echo (".texte_script($p->code)."); ?'.'>'";
149
+        // dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)
150
+    }
151
+    return $p;
152 152
 }
153 153
 
154 154
 /**
@@ -168,17 +168,17 @@  discard block
 block discarded – undo
168 168
  *     - string : texte à afficher directement
169 169
  */
170 170
 function balise_FORMULAIRE__dyn($form, ...$args) {
171
-	$form = existe_formulaire($form);
172
-	if (!$form) {
173
-		return '';
174
-	}
171
+    $form = existe_formulaire($form);
172
+    if (!$form) {
173
+        return '';
174
+    }
175 175
 
176
-	$contexte = balise_FORMULAIRE__contexte($form, $args);
177
-	if (!is_array($contexte)) {
178
-		return $contexte;
179
-	}
176
+    $contexte = balise_FORMULAIRE__contexte($form, $args);
177
+    if (!is_array($contexte)) {
178
+        return $contexte;
179
+    }
180 180
 
181
-	return ["formulaires/$form", 3600, $contexte];
181
+    return ["formulaires/$form", 3600, $contexte];
182 182
 }
183 183
 
184 184
 /**
@@ -192,84 +192,84 @@  discard block
 block discarded – undo
192 192
  *     Contexte d'environnement à envoyer au squelette
193 193
  **/
194 194
 function balise_FORMULAIRE__contexte($form, $args) {
195
-	// tester si ce formulaire vient d'etre poste (memes arguments)
196
-	// pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page
197
-	// si poste, on recupere les erreurs
198
-
199
-	$je_suis_poste = false;
200
-	if (
201
-		$post_form = _request('formulaire_action')
202
-		and $post_form == $form
203
-		and $p = _request('formulaire_action_args')
204
-		and is_array($p = decoder_contexte_ajax($p, $post_form))
205
-	) {
206
-		// enlever le faux attribut de langue masque
207
-		array_shift($p);
208
-		if (formulaire__identifier($form, $args, $p)) {
209
-			$je_suis_poste = true;
210
-		}
211
-	}
212
-
213
-	$editable = true;
214
-	$erreurs = $post = [];
215
-	if ($je_suis_poste) {
216
-		$post = traiter_formulaires_dynamiques(true);
217
-		$e = "erreurs_$form";
218
-		$erreurs = isset($post[$e]) ? $post[$e] : [];
219
-		$editable = "editable_$form";
220
-		$editable = (!isset($post[$e]))
221
-			|| count($erreurs)
222
-			|| (isset($post[$editable]) && $post[$editable]);
223
-	}
224
-
225
-	$valeurs = formulaire__charger($form, $args, $je_suis_poste);
226
-
227
-	// si $valeurs n'est pas un tableau, le formulaire n'est pas applicable
228
-	// C'est plus fort qu'editable qui est gere par le squelette
229
-	// Idealement $valeur doit etre alors un message explicatif.
230
-	if (!is_array($valeurs)) {
231
-		return is_string($valeurs) ? $valeurs : '';
232
-	}
233
-
234
-	// charger peut passer une action si le formulaire ne tourne pas sur self()
235
-	// ou une action vide si elle ne sert pas
236
-	$action = (isset($valeurs['action'])) ? $valeurs['action'] : self('&amp;', true);
237
-	// bug IEx : si action finit par /
238
-	// IE croit que le <form ... action=../ > est autoferme
239
-	if (substr($action, -1) == '/') {
240
-		// on ajoute une ancre pour feinter IE, au pire ca tue l'ancre qui finit par un /
241
-		$action .= '#';
242
-	}
243
-
244
-	// recuperer la saisie en cours si erreurs
245
-	// seulement si c'est ce formulaire qui est poste
246
-	// ou si on le demande explicitement par le parametre _forcer_request = true
247
-	$dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']));
248
-	foreach (array_keys($valeurs) as $champ) {
249
-		if ($champ[0] !== '_' and !in_array($champ, ['message_ok', 'message_erreur', 'editable'])) {
250
-			if ($dispo and (($v = _request($champ)) !== null)) {
251
-				$valeurs[$champ] = $v;
252
-			}
253
-			// nettoyer l'url des champs qui vont etre saisis
254
-			if ($action) {
255
-				$action = parametre_url($action, $champ, '');
256
-			}
257
-			// proteger les ' et les " dans les champs que l'on va injecter
258
-			$valeurs[$champ] = protege_champ($valeurs[$champ]);
259
-		}
260
-	}
261
-
262
-	if ($action) {
263
-		// nettoyer l'url
264
-		$action = parametre_url($action, 'formulaire_action', '');
265
-		$action = parametre_url($action, 'formulaire_action_args', '');
266
-	}
267
-
268
-	/**
269
-	 * @deprecated
270
-	 * 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
271
-	 */
272
-	/*
195
+    // tester si ce formulaire vient d'etre poste (memes arguments)
196
+    // pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page
197
+    // si poste, on recupere les erreurs
198
+
199
+    $je_suis_poste = false;
200
+    if (
201
+        $post_form = _request('formulaire_action')
202
+        and $post_form == $form
203
+        and $p = _request('formulaire_action_args')
204
+        and is_array($p = decoder_contexte_ajax($p, $post_form))
205
+    ) {
206
+        // enlever le faux attribut de langue masque
207
+        array_shift($p);
208
+        if (formulaire__identifier($form, $args, $p)) {
209
+            $je_suis_poste = true;
210
+        }
211
+    }
212
+
213
+    $editable = true;
214
+    $erreurs = $post = [];
215
+    if ($je_suis_poste) {
216
+        $post = traiter_formulaires_dynamiques(true);
217
+        $e = "erreurs_$form";
218
+        $erreurs = isset($post[$e]) ? $post[$e] : [];
219
+        $editable = "editable_$form";
220
+        $editable = (!isset($post[$e]))
221
+            || count($erreurs)
222
+            || (isset($post[$editable]) && $post[$editable]);
223
+    }
224
+
225
+    $valeurs = formulaire__charger($form, $args, $je_suis_poste);
226
+
227
+    // si $valeurs n'est pas un tableau, le formulaire n'est pas applicable
228
+    // C'est plus fort qu'editable qui est gere par le squelette
229
+    // Idealement $valeur doit etre alors un message explicatif.
230
+    if (!is_array($valeurs)) {
231
+        return is_string($valeurs) ? $valeurs : '';
232
+    }
233
+
234
+    // charger peut passer une action si le formulaire ne tourne pas sur self()
235
+    // ou une action vide si elle ne sert pas
236
+    $action = (isset($valeurs['action'])) ? $valeurs['action'] : self('&amp;', true);
237
+    // bug IEx : si action finit par /
238
+    // IE croit que le <form ... action=../ > est autoferme
239
+    if (substr($action, -1) == '/') {
240
+        // on ajoute une ancre pour feinter IE, au pire ca tue l'ancre qui finit par un /
241
+        $action .= '#';
242
+    }
243
+
244
+    // recuperer la saisie en cours si erreurs
245
+    // seulement si c'est ce formulaire qui est poste
246
+    // ou si on le demande explicitement par le parametre _forcer_request = true
247
+    $dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']));
248
+    foreach (array_keys($valeurs) as $champ) {
249
+        if ($champ[0] !== '_' and !in_array($champ, ['message_ok', 'message_erreur', 'editable'])) {
250
+            if ($dispo and (($v = _request($champ)) !== null)) {
251
+                $valeurs[$champ] = $v;
252
+            }
253
+            // nettoyer l'url des champs qui vont etre saisis
254
+            if ($action) {
255
+                $action = parametre_url($action, $champ, '');
256
+            }
257
+            // proteger les ' et les " dans les champs que l'on va injecter
258
+            $valeurs[$champ] = protege_champ($valeurs[$champ]);
259
+        }
260
+    }
261
+
262
+    if ($action) {
263
+        // nettoyer l'url
264
+        $action = parametre_url($action, 'formulaire_action', '');
265
+        $action = parametre_url($action, 'formulaire_action_args', '');
266
+    }
267
+
268
+    /**
269
+     * @deprecated
270
+     * 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
271
+     */
272
+    /*
273 273
 	if (isset($valeurs['_action'])) {
274 274
 		$securiser_action = charger_fonction('securiser_action', 'inc');
275 275
 		$secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1);
@@ -279,59 +279,59 @@  discard block
 block discarded – undo
279 279
 	}
280 280
 	*/
281 281
 
282
-	// empiler la lang en tant que premier argument implicite du CVT
283
-	// pour permettre de la restaurer au moment du Verifier et du Traiter
284
-	array_unshift($args, $GLOBALS['spip_lang']);
285
-
286
-	$valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form);
287
-	$valeurs['erreurs'] = $erreurs;
288
-	$valeurs['action'] = $action;
289
-	$valeurs['form'] = $form;
290
-
291
-	$valeurs['formulaire_sign'] = '';
292
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
293
-		$securiser_action = charger_fonction('securiser_action', 'inc');
294
-		$secu = $securiser_action($valeurs['form'], $valeurs['formulaire_args'], '', -1);
295
-		$valeurs['formulaire_sign'] = $secu['hash'];
296
-	}
297
-
298
-	if (!isset($valeurs['id'])) {
299
-		$valeurs['id'] = 'new';
300
-	}
301
-	// editable peut venir de charger() ou de traiter() sinon
302
-	if (!isset($valeurs['editable'])) {
303
-		$valeurs['editable'] = $editable;
304
-	}
305
-	// dans tous les cas, renvoyer un espace ou vide (et pas un booleen)
306
-	$valeurs['editable'] = ($valeurs['editable'] ? ' ' : '');
307
-
308
-	if ($je_suis_poste) {
309
-		$valeurs['message_erreur'] = '';
310
-		if (isset($erreurs['message_erreur'])) {
311
-			$valeurs['message_erreur'] = $erreurs['message_erreur'];
312
-		}
313
-
314
-		$valeurs['message_ok'] = '';
315
-		if (isset($post["message_ok_$form"])) {
316
-			$valeurs['message_ok'] = $post["message_ok_$form"];
317
-		} elseif (isset($erreurs['message_ok'])) {
318
-			$valeurs['message_ok'] = $erreurs['message_ok'];
319
-		}
320
-
321
-		// accessibilite : encapsuler toutes les erreurs dans un role='alert'
322
-		// uniquement si c'est une string et au premier niveau (on ne touche pas au tableaux)
323
-		// et si $k ne commence pas par un _ (c'est bien une vrai erreur sur un vrai champ)
324
-		if (html5_permis()) {
325
-			foreach ($erreurs as $k => $v) {
326
-				if (is_string($v) and strlen(trim($v)) and strpos($k, '_') !== 0) {
327
-					// on encapsule dans un span car ces messages sont en general simple, juste du texte, et deja dans un span dans le form
328
-					$valeurs['erreurs'][$k] = "<span role='alert'>" . $erreurs[$k] . '</span>';
329
-				}
330
-			}
331
-		}
332
-	}
333
-
334
-	return $valeurs;
282
+    // empiler la lang en tant que premier argument implicite du CVT
283
+    // pour permettre de la restaurer au moment du Verifier et du Traiter
284
+    array_unshift($args, $GLOBALS['spip_lang']);
285
+
286
+    $valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form);
287
+    $valeurs['erreurs'] = $erreurs;
288
+    $valeurs['action'] = $action;
289
+    $valeurs['form'] = $form;
290
+
291
+    $valeurs['formulaire_sign'] = '';
292
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
293
+        $securiser_action = charger_fonction('securiser_action', 'inc');
294
+        $secu = $securiser_action($valeurs['form'], $valeurs['formulaire_args'], '', -1);
295
+        $valeurs['formulaire_sign'] = $secu['hash'];
296
+    }
297
+
298
+    if (!isset($valeurs['id'])) {
299
+        $valeurs['id'] = 'new';
300
+    }
301
+    // editable peut venir de charger() ou de traiter() sinon
302
+    if (!isset($valeurs['editable'])) {
303
+        $valeurs['editable'] = $editable;
304
+    }
305
+    // dans tous les cas, renvoyer un espace ou vide (et pas un booleen)
306
+    $valeurs['editable'] = ($valeurs['editable'] ? ' ' : '');
307
+
308
+    if ($je_suis_poste) {
309
+        $valeurs['message_erreur'] = '';
310
+        if (isset($erreurs['message_erreur'])) {
311
+            $valeurs['message_erreur'] = $erreurs['message_erreur'];
312
+        }
313
+
314
+        $valeurs['message_ok'] = '';
315
+        if (isset($post["message_ok_$form"])) {
316
+            $valeurs['message_ok'] = $post["message_ok_$form"];
317
+        } elseif (isset($erreurs['message_ok'])) {
318
+            $valeurs['message_ok'] = $erreurs['message_ok'];
319
+        }
320
+
321
+        // accessibilite : encapsuler toutes les erreurs dans un role='alert'
322
+        // uniquement si c'est une string et au premier niveau (on ne touche pas au tableaux)
323
+        // et si $k ne commence pas par un _ (c'est bien une vrai erreur sur un vrai champ)
324
+        if (html5_permis()) {
325
+            foreach ($erreurs as $k => $v) {
326
+                if (is_string($v) and strlen(trim($v)) and strpos($k, '_') !== 0) {
327
+                    // on encapsule dans un span car ces messages sont en general simple, juste du texte, et deja dans un span dans le form
328
+                    $valeurs['erreurs'][$k] = "<span role='alert'>" . $erreurs[$k] . '</span>';
329
+                }
330
+            }
331
+        }
332
+    }
333
+
334
+    return $valeurs;
335 335
 }
336 336
 
337 337
 /**
@@ -343,51 +343,51 @@  discard block
 block discarded – undo
343 343
  * @return array
344 344
  */
345 345
 function formulaire__charger($form, $args, $poste) {
346
-	if ($charger_valeurs = charger_fonction('charger', "formulaires/$form", true)) {
347
-		$valeurs = call_user_func_array($charger_valeurs, $args);
348
-	} else {
349
-		$valeurs = [];
350
-	}
351
-
352
-	$valeurs = pipeline(
353
-		'formulaire_charger',
354
-		[
355
-			'args' => ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
356
-			'data' => $valeurs
357
-		]
358
-	);
359
-
360
-	// prise en charge CVT multi etape
361
-	if (is_array($valeurs) and isset($valeurs['_etapes'])) {
362
-		include_spip('inc/cvt_multietapes');
363
-		$valeurs = cvtmulti_formulaire_charger_etapes(
364
-			['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
365
-			$valeurs
366
-		);
367
-	}
368
-
369
-	// si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline !
370
-	if (is_array($valeurs)) {
371
-		if (!isset($valeurs['_pipelines'])) {
372
-			$valeurs['_pipelines'] = [];
373
-		}
374
-		// l'ancien argument _pipeline devient maintenant _pipelines
375
-		// reinjectons le vieux _pipeline au debut de _pipelines
376
-		if (isset($valeurs['_pipeline'])) {
377
-			$pipe = is_array($valeurs['_pipeline']) ? reset($valeurs['_pipeline']) : $valeurs['_pipeline'];
378
-			$args = is_array($valeurs['_pipeline']) ? end($valeurs['_pipeline']) : [];
379
-
380
-			$pipelines = [$pipe => $args];
381
-			$valeurs['_pipelines'] = array_merge($pipelines, $valeurs['_pipelines']);
382
-		}
383
-
384
-		// et enfin, ajoutons systematiquement un pipeline sur le squelette du formulaire
385
-		// qui constitue le cas le plus courant d'utilisation du pipeline recuperer_fond
386
-		// (performance, cela evite de s'injecter dans recuperer_fond utilise pour *tous* les squelettes)
387
-		$valeurs['_pipelines']['formulaire_fond'] = ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste];
388
-	}
389
-
390
-	return $valeurs;
346
+    if ($charger_valeurs = charger_fonction('charger', "formulaires/$form", true)) {
347
+        $valeurs = call_user_func_array($charger_valeurs, $args);
348
+    } else {
349
+        $valeurs = [];
350
+    }
351
+
352
+    $valeurs = pipeline(
353
+        'formulaire_charger',
354
+        [
355
+            'args' => ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
356
+            'data' => $valeurs
357
+        ]
358
+    );
359
+
360
+    // prise en charge CVT multi etape
361
+    if (is_array($valeurs) and isset($valeurs['_etapes'])) {
362
+        include_spip('inc/cvt_multietapes');
363
+        $valeurs = cvtmulti_formulaire_charger_etapes(
364
+            ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
365
+            $valeurs
366
+        );
367
+    }
368
+
369
+    // si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline !
370
+    if (is_array($valeurs)) {
371
+        if (!isset($valeurs['_pipelines'])) {
372
+            $valeurs['_pipelines'] = [];
373
+        }
374
+        // l'ancien argument _pipeline devient maintenant _pipelines
375
+        // reinjectons le vieux _pipeline au debut de _pipelines
376
+        if (isset($valeurs['_pipeline'])) {
377
+            $pipe = is_array($valeurs['_pipeline']) ? reset($valeurs['_pipeline']) : $valeurs['_pipeline'];
378
+            $args = is_array($valeurs['_pipeline']) ? end($valeurs['_pipeline']) : [];
379
+
380
+            $pipelines = [$pipe => $args];
381
+            $valeurs['_pipelines'] = array_merge($pipelines, $valeurs['_pipelines']);
382
+        }
383
+
384
+        // et enfin, ajoutons systematiquement un pipeline sur le squelette du formulaire
385
+        // qui constitue le cas le plus courant d'utilisation du pipeline recuperer_fond
386
+        // (performance, cela evite de s'injecter dans recuperer_fond utilise pour *tous* les squelettes)
387
+        $valeurs['_pipelines']['formulaire_fond'] = ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste];
388
+    }
389
+
390
+    return $valeurs;
391 391
 }
392 392
 
393 393
 /**
@@ -406,9 +406,9 @@  discard block
 block discarded – undo
406 406
  * @return bool
407 407
  */
408 408
 function formulaire__identifier($form, $args, $p) {
409
-	if ($identifier_args = charger_fonction('identifier', "formulaires/$form", true)) {
410
-		return call_user_func_array($identifier_args, $args) === call_user_func_array($identifier_args, $p);
411
-	}
409
+    if ($identifier_args = charger_fonction('identifier', "formulaires/$form", true)) {
410
+        return call_user_func_array($identifier_args, $args) === call_user_func_array($identifier_args, $p);
411
+    }
412 412
 
413
-	return $args === $p;
413
+    return $args === $p;
414 414
 }
Please login to merge, or discard this patch.