Valider 93214520 rédigé par esj's avatar esj
Parcourir les fichiers

Complément à {{{#FORMULAIRE_CONFIGURER_PLUGIN}}}, qui maintenant sait...

Complément à {{{#FORMULAIRE_CONFIGURER_PLUGIN}}}, qui maintenant sait retrouver la fonction {{{_verifier}}} propre à un squelette (cf [15759] [15726] et [15753]). Je réexpose le tout vu les incompréhensions que ça a amené sur spip-dev.

Cette balise admet deux arguments, un nom du plugin (autrement dit le nom d'un sous-répertoire de DIR_PLUGINS) et un nom de squelette dans le sous-répertoire {{{formulaires}}} de ce plugin. Si ce deuxième argument est absent, il est pris conventionnellement égal à {{{configurer_}}}''préfixe_du_plugin''.

Le contexte de ce squelette est égal à la table des métas associée à ce plugin le nom de cette table étant calculé par la fonction {{{formulaires_configurer_plugin_charger_dist}}}.

Le traitement des saisies  consiste à écrire dans cette table des metas les valeurs (chaîne vide si abstentes) que {{{$_POST}}} indique pour tous les noms trouvés dans le formulaire, à l'aide d'une RegExp (pas totalement fiable) repérant les attributs {{{name}}} dans le formulaire. Ce traitement est assuré par la fonction {{{formulaires_configurer_plugin_traiter_dist}}}.

Pour la vérification, la fonction {{{formulaires_configurer_plugin_traiter_dist}}} délègue le travail à la fonction {{{formulaires}}}''_nom_du_squelette''{{{_verifier}}} si elle existe, et sinon ne fait rien.

Ces trois fonctions sont donc communes à tous les formulaires de configuration de tous les plugins voulant les utiliser, ainsi que leurs fonctions auxilaires (nomenclatures des saisies notamment). Elles peuvent évidemment être surchargées.

Pour fonctionner correctement, les formulaires référencés (implicitement ou non) par cette balise doivent utiliser {{{#ACTION_FORMULAIRE}}} avec comme deuxième argument {{{configurer_plugin}}}, afin que le trio de fonctions ci-dessus décrit soit effectivement utilisé. Voir un exemple dans le [http://zone.spip.org/trac/spip-zone/changeset/38755 plugin Association 2].
parent bcb62083
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+41 −26
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,45 +12,60 @@

if (!defined("_ECRIRE_INC_VERSION")) return;


function formulaires_configurer_plugin_charger_dist($plugin, $form='') {

	$get_infos = charger_fonction('get_infos','plugins');
	$infos = $get_infos($plugin);
	if (!isset($infos['prefix'])) return array('erreur' => "$plugin ?");
	$meta = isset($infos['meta']) ? $infos['meta']
	  : ($infos['prefix'] . '_metas');
	return $GLOBALS[$meta];
	$infos = formulaires_configurer_plugin_infos($plugin, $form);
	if (!is_array($infos)) return $infos;
	return $GLOBALS[$infos['meta']];
}

function formulaires_configurer_plugin_verifier_dist($plugin, $form='') {
	$infos = formulaires_configurer_plugin_infos($plugin, $form);
	if (!is_array($infos)) return $infos;
	$formulaire = $infos['configurer_plugin'];
	$f = charger_fonction('verifier', "formulaires/$formulaire", true);
	return $f ? $f($plugin, $form) : array();
}

#function formulaires_configurer_plugin_verifier_dist(){
#  spip_log("formulaires_configurer_plugin_verifier_dist $plugin, $form");
#  return array();
#}
function formulaires_configurer_plugin_traiter_dist($plugin, $form=''){

	$infos = formulaires_configurer_plugin_infos($plugin, $form);
	if (!is_array($infos)) return $infos;
	$form = $infos['configurer_plugin'];
	$meta = $infos['meta'];
	foreach (formulaires_configurer_plugin_recense($form) as $regs) {
		$k = $regs[3];
		ecrire_meta($k, _request($k), 'oui', $meta);
	}
	return array('redirect' => generer_url_ecrire($infos['prefix']));
}

// version amelioree de la RegExp de cfg_formulaire.
define('_EXTRAIRE_SAISIES', 
	'#<(?:(select|textarea)|input type=["\'](text|password|checkbox|radio|hidden|file)["\']) name=["\'](\w+)(\[\w*\])?["\'](?: class=["\']([^\'"]*)["\'])?( multiple=)?[^>]*?>#ims');

// determiner la liste des noms des saisies d'un formulaire
// (a refaire avec SAX)
function formulaires_configurer_plugin_recense($form)
{
	$f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/');
	$f = $f ? file_get_contents($f) : '';
	if (preg_match_all(_EXTRAIRE_SAISIES, $f, $r, PREG_SET_ORDER))
		return $r;
	return array();

function formulaires_configurer_plugin_traiter_dist($plugin, $form=''){
}

// Recuperer la version compilee de plugin.xml et normaliser
function formulaires_configurer_plugin_infos($plugin, $form=''){

	$get_infos = charger_fonction('get_infos','plugins');
	$infos = $get_infos($plugin);
	if (!isset($infos['prefix'])) return array('erreur' => "$plugin ?");
	if (!is_array($infos) OR !isset($infos['prefix']))
		return _T('erreur_plugin_nom_manquant');
	$prefix = $infos['prefix'];
	$meta = isset($infos['meta']) ? $infos['meta'] : ($prefix . '_metas');

	if (!$form) $form = 'configurer_' . $prefix;
	$f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/');
	$formulaire = $f ? file_get_contents($f) : '';
	if (preg_match_all(_EXTRAIRE_SAISIES, $formulaire, $r, PREG_SET_ORDER)) {
		foreach($r as $regs) {
			$k = $regs[3];
			$v = _request($k);
			ecrire_meta($k, $v, 'oui', $meta);
		}
	}
	return array('redirect' => generer_url_ecrire($prefix));
	$infos['configurer_plugin'] = $form ? $form : "configurer_$prefix";
	if (!isset($infos['meta'])) $infos['meta'] = ($prefix . '_metas');
	return $infos;
}
?>