Valider 67ccf4aa rédigé par Maïeul's avatar Maïeul
Parcourir les fichiers

Gérer la triple contraintes sur les formulaires automagique de config

- il faut pouvoir avoir dans le contexte uniquement les saisies du
formulaire courant, et non pas l'ensemble des saisies lié au `meta_casier`
courant
- il faut avoir les saisies courantes (on ne peut pas s'en passer), car
le core se base sur le contexte pour savoir quoi mettre à jour en base
- il faut pouvoir définir les valeurs par défaut de l'ensemble des
saisies courantes, qu'elle soit de forme `toto` ou de forme `toto/truc`

Du coup :
1. Dans le cas des formulaires de config, on pre rempli les defaut avec
le résultat de lire_config
2. Puis on cherche les defaut pour remplir le contexte

C'est pas optimum (triple lecture du tableau) mais les formulaires de
config sont
1. Peu utilisés
2. Rarement énormes
parent 446b5b71
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+35 −12
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -149,23 +149,19 @@ function saisies_formulaire_charger($flux) {
	$saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args'], $flux['args']['je_suis_poste']);

	if ($saisies) {
		// On ajoute au contexte les champs à déclarer
		$contexte = saisies_lister_valeurs_defaut($saisies);

		// Si c'est un formulaire de config, on va chercher le contenu dans lire_config
		// Si c'est un formulaire de config, on va régler automatiquement les defaut
		if (strpos($flux['args']['form'], 'configurer_') === 0) {
			include_spip('inc/config');
			if (isset($contexte['_meta_casier'])) {
				$meta = $contexte['_meta_casier'];
			$par_nom = saisies_lister_par_nom($saisies);
			$contexte = array();
			if (isset($par_nom['_meta_casier'])) {
				$meta = $par_nom['_meta_casier']['options']['defaut'];
			} else {
				$meta = str_replace('configurer_', '', $flux['args']['form']);
			}
			$config = lire_config($meta);
			if (is_array($config)) {
				$contexte = array_merge($contexte, $config);
			$saisies = saisies_preremplir_defaut_depuis_config($saisies, $meta);
	 	}
		}

		$contexte = saisies_lister_valeurs_defaut($saisies);
		// On rajoute ce contexte en défaut de ce qui existe déjà (qui est prioritaire)
		$flux['data'] = array_merge($contexte, $flux['data']);

@@ -182,6 +178,33 @@ function saisies_formulaire_charger($flux) {
	return $flux;
}

/**
 * Pre remplir les options 'defaut' des saisies depuis `lire_config()`
 * @param array $saisies;
 * @param string $meta_case;
 * @return array $saisies
**/
function saisies_preremplir_defaut_depuis_config($saisies, $meta_case) {
	include_spip('inc/config');
	foreach ($saisies as &$saisie) {
		if (isset ($saisie['options']['nom']) and $saisie['options']['nom']!='_meta_casier') {
			$nom = $saisie['options']['nom'];
			$nom = str_replace('[', '/', $nom);
			$nom = str_replace(']', '', $nom);
			$nom = trim($nom, '/');
			$config = lire_config("$meta_case/$nom");
			if ($config !== null) {
				$saisie['options']['defaut'] = $config;
			}
			$contexte[$nom] = isset($saisies['options']['defaut']) ? $saisies['options']['defaut'] : '';
			if (isset($saisie['saisies'])) {
				$saisie['saisies'] = saisies_preremplir_defaut_depuis_config($saisie['saisies'], $meta_case);
			}
		}
	}
	return $saisies;
}

/**
 * Aiguiller CVT vers un squelette propre à Saisies lorsqu'on a déclaré des saisies et qu'il n'y a pas déjà un HTML
 *