Valider fc781769 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
et après longue discussion sur #3

Dans le yaml de description d'un modèle on peut utiliser pour l'option defaut d'une saisie, la syntaxe suivante :
`fonction:_<xxxfonctionphparbitraire>`

Exemple d'usage :
````
    saisie: 'input'
    options:
      nom: 'id_article'
      label: 'Numéro d'article'
      obligatoire: 'oui'
      defaut: 'fonction:_request("id_article")'
````

Autre exemple :

````
    saisie: 'input'
    options:
      nom: 'id_article'
      label: 'Numéro d'article'
      obligatoire: 'oui'
      defaut: 'fonction:lire_config("monplugin/monreglage")'
````

Attention, lorsque le formulaire est chargé, les _request sont modifés
(logiques!). Mais du coup on passe systémaiquement les id_xx de
l'environnement appelant dans _request.
parent 98f96859
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -7,10 +7,11 @@ function formulaires_inserer_modeles_charger_dist($formulaire_modele, $modalbox,
	include_spip('inc/inserer_modeles');
	$env = unserialize($env);
	$contexte = array();
	// Toujours transmettre les id_(article/rubrique/breve...)
	// Toujours transmettre les id_(article/rubrique/breve...), et les garder en _request pour pouvoir s'en servir après dans l'interprétation du .yaml
	foreach ($env as $var => $val) {
		if (substr($var, 0, 3) == 'id_' && is_numeric($val)) {
			$contexte[$var] = $val;
			set_request($var, $val);
		}
	}
	if ((!_request('formulaire_modele') && $formulaire_modele=='') || _request('annuler')) {
@@ -58,7 +59,7 @@ function formulaires_inserer_modeles_charger_dist($formulaire_modele, $modalbox,
				$_modalbox_retour = parametre_url($_modalbox_retour, $var, $val, '&');
			}
		}
		// Dans le cas ou une saisie ouvre une nouvelle modalbox, il faut transmettre le param modalbox au retour
		// Dans le cas où une saisie ouvre une nouvelle modalbox, il faut transmettre le param modalbox au retour
		// sinon le bouton submit ne fermera pas la modalbox
		$_modalbox_retour = parametre_url($_modalbox_retour, 'modalbox', 'oui', '&');
		$contexte['_modalbox_retour'] = $_modalbox_retour;
@@ -75,6 +76,7 @@ function formulaires_inserer_modeles_verifier_dist($formulaire_modele, $modalbox
	}

	if (_request('inserer')) {
		$env = unserialize($env);
		include_spip('inc/saisies');
		include_spip('inc/inserer_modeles');
		$infos = charger_infos_formulaire_modele(_request('formulaire_modele'));
@@ -86,6 +88,7 @@ function formulaires_inserer_modeles_verifier_dist($formulaire_modele, $modalbox

function formulaires_inserer_modeles_traiter_dist($formulaire_modele, $modalbox, $env) {
	if (_request('inserer')) {
		$env = unserialize($env);
		include_spip('inc/saisies');
		include_spip('inc/inserer_modeles');
		$infos = charger_infos_formulaire_modele(_request('formulaire_modele'));
+29 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -60,8 +60,36 @@ 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]['parametres'] = inserer_modeles_definir_defaut($infos_formulaires_modeles[$formulaire]['parametres']);
		}
	}

	return $infos_formulaires_modeles[$formulaire];
}

/**
 * Lis une description tabulaire des saisies de description d'un modeles
 * Cherche les paramètres defaut
 * si présent, regarde si appelle à une fonction
 * et l'appliquer au options de base
 * et cela recursivement aux sous saisies
 * @param array $saisies
 * @return array()
*/
function inserer_modeles_definir_defaut($saisies) {
	foreach ($saisies as &$saisie) {
		if (!is_array($saisie)) {
			return $tableau;
		}
		$options = &$saisie['options'];
		if (isset($options['defaut']) and strpos($options['defaut'], 'fonction:') === 0) {
			$defaut = &$options['defaut'];
			$eval = '$defaut = '.str_replace('fonction:', '', $defaut).';';
			eval($eval);
		}

		if (isset($saisie['saisies'])) {
			$saisie['saisies'] = inserer_modeles_definir_defaut($saisie['saisies']);
		}
	}
	return $saisies;
}