Valider 73c8ee18 rédigé par Maïeul's avatar Maïeul
Parcourir les fichiers

Suite demande de baloo sur contrib.

https://contrib.spip.net/Plugin-Inserer-Modeles#comment507475-507472

Voici une proposition d'amélioration. Dans le yaml de description d'un
modèles, on peut mettre pour chaque paramètre d'une saisie une forme
`_depuis_XXX`, où XXX désigne l'endroit où l'on va chercher le
paramètre.

Pour l'heure, XXX se limite à
- config > va chercher dans lire_config()
- request > va chercher dans _request()

Si jamais le résultat de la recherche est positive, cela rempace.

Exemple d'usage :
````
    saisie: 'input'
    options:
      nom: 'id_article'
      label: 'Numéro d'article'
      obligatoire: 'oui'
      defaut_depuis_request: 'id_article'
````

Tout cela passe par une courte fonction inserer_modeles_charger_depuis_source().
Je me demande toutefois si on ne pourrait pas mettre cela directement
dans saisies, avec une fonction
saisies_charger_parametre_depuis_source(), car le besoin est peut être
générique.
parent 25e0c13f
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+33 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -60,8 +60,40 @@ function charger_infos_formulaire_modele($formulaire) {
		if ($chemin = find_in_path($formulaire, 'modeles/')) {
			include_spip('inc/yaml');
			$infos_formulaires_modeles[$formulaire] = yaml_charger_inclusions(yaml_decode_file($chemin));
			$infos_formulaires_modeles[$formulaire] = inserer_modeles_charger_depuis_source($infos_formulaires_modeles[$formulaire]);
		}
	}

	return $infos_formulaires_modeles[$formulaire];
}

/**
 * Lis une description tabulaire des saisies de description d'un modeles
 * Cherche les paramètres finissant en _depuis_request
 * si présent, cherche la valeur correspondant dans _request ou dans lire_config
 * et l'appliquer au paramètres de base
 * et cela recursivement
 * @param array $tableau
 * @return array()
*/
function inserer_modeles_charger_depuis_source($tableau) {
	if (!is_array($tableau)) {
		return $tableau;
	}
	$fonctions = array(
		'_request' => '_request',
		'_config' => 'lire_config'
	);
	$tableau = array_map('inserer_modeles_charger_depuis_source', $tableau);
	foreach ($tableau as $cle => $valeur) {
		foreach ($fonctions as $fcourt => $freelle) {
			if (stripos($cle, $fcourt)) {
				if ($result = $freelle($valeur)) {
					$tableau[str_replace("_depuis$fcourt",'',$cle)] = $result;
					unset($tableau[$cle]);
				}
			break;
			}
		}
	}
	return $tableau;
}