Valider a8953318 rédigé par tcharlss's avatar tcharlss
Parcourir les fichiers

feat: fonction d'API pour encapsuler les noms des saisies avec un préfixe

`saisies_encapsuler_noms($saisies, 'mon_prefixe')`

Exemple avant/après :
- `bidule`        → `prefixe[bidule]`
- `machin[chose]` → `prefixe[machin][chose]`

Cela permet d'avoir toutes les valeurs postées dans un unique tableau.
Après transformation, on pourra faire `_request(<prefixe>)` pour les récupérer.

Utilisation possible : on mélange les saisies de plusieurs formulaires, et on a dans ce cas besoin de cloisonner les valeurs.

Refs: #252
parent 2eb2a877
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+42 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -403,6 +403,48 @@ function saisies_transformer_noms($saisies, $masque, $remplacement) {
	return saisies_transformer_option($saisies, 'nom', $masque, $remplacement);
}

/**
 * Transforme tous les noms en les encapsulant avec un préfixe.
 *
 * Cela permet d'avoir toutes les valeurs postées dans un unique tableau.
 * Après transformation, on pourra faire `_request(<prefixe>)` pour les récupérer.
 *
 * Utilisation possible : on mélange les saisies de plusieurs formulaires,
 * et on a dans ce cas besoin de cloisonner les valeurs.
 *
 * @example Avant/après
 * - bidule        → prefixe[bidule]
 * - machin[chose] → prefixe[machin][chose]
 *
 * @param array $saisies
 *   Un tableau décrivant les saisies
 * @param string $prefixe
 *   Préfixe
 * @param boolean $recursif
 *   Pour procéder récursivement dans les fieldsets
 * @return void
 */
function saisies_encapsuler_noms(array $saisies, string $prefixe, bool $recursif = true) {
	$saisies = saisies_mapper_option(
		$saisies,
		'nom',
		function ($nom) use ($prefixe) {
			// Soit c'est déjà un tableau : machin[truc]
			if (($pos = strpos($nom, '[')) !== false) {
				$nom = "{$prefixe}[" . substr_replace($nom, ']', $pos, 0);
			// Soit c'est un nom simple : machin
			} else {
				$nom = "{$prefixe}[{$nom}]";
			}
			return $nom;
		},
		[],
		$recursif
	);

	return $saisies;
}

/**
 * Transforme toutes les options textuelles d'un certain nom, avec un preg_replace.
 *