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

Retour sur #FORMULAIRE_CONFIGURER_PLUGIN (remplace [15760]).

Cette balise ne prend plus qu'un seul argument, un squelette de formulaire. Elle verifie son existence et fournit un trio de fonctions CVT par défaut pour son utilisation. Pour chacune des 3 fonctions, s'il existe une fonction homonyme au nom du squelette, c'est elle qui prend la main. Sinon, le comportement par défaut proposé  consiste à trouver la table des métas associée à ce formulaire pour y lire les valeurs (fonction {{{_charger}}}) et les y écrire (fonction {{{_traiter}}}). Rien n'est fait pour la fonction {{{_verifier}}}).

Le chemin d'accès au squelette détermine la table des métas associée. S'il commence par {{{_DIR_PLUGINS}}} (autrement dit si le formulaire a été trouvé dans un plugin), la table des métas associée est celle du plugin (qui est par défaut le préfixe du plugin, suivi de {{{_metas}}}). Sinon c'est la table des métas standard.

A noter que cette balise ne s'applique plus forcément à un plugin et qu'elle devrait donc changer de nom ({{{#GERER}}} ou {{{#REMPLIR}}} sembleraient plus appropriés). 

A noter aussi que la fonction booléenne {{{existe_formulaire}}} renvoie maintenant le chemin, alors qu'elle renvoyait auparavant son argument initial ce qui n'était pas très utile.
parent a24c6106
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -35,7 +35,8 @@ function existe_formulaire($form)

	if (!$form) return ''; // on ne sait pas, le nom du formulaire n'est pas fourni ici

	return find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/') ? $form : false;
	$path = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/');
	return $path ? $path : false;
}


@@ -59,8 +60,7 @@ function balise_FORMULAIRE__dist($p) {
// http://doc.spip.org/@balise_FORMULAIRE__dyn
function balise_FORMULAIRE__dyn($form)
{
	$form = existe_formulaire($form);
	if (!$form) return '';
	if (!existe_formulaire($form)) return '';

	// deux moyen d'arriver ici : 
	// soit #FORMULAIRE_XX reroute avec 'FORMULAIRE_XX' ajoute en premier arg
+5 −10
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,27 +12,22 @@

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

// Comme l'emplacement du squelette est calculable
// (nom du plugin en premier argument, nom eventuel du skel en 2e)
// Comme l'emplacement du squelette est calcule (par l'argument de la balise)
// on ne peut rien dire sur l'existence du squelette lors de la compil
// On pourrait toutefois traiter le cas de l'argument qui est une constante.

function balise_FORMULAIRE_CONFIGURER_PLUGIN_dist($p) {

	return calculer_balise_dynamique($p, $p->nom_champ, array());
}

// A l'execution on dispose des arguments, en particulier le premier
// le nom du repertoire ou doit se trouver le squelette.
// Si 2e arg n'est pas la pour donner son nom, c'est "configurer_$prefixe".
// A l'execution on dispose du nom du squelette, on verifie qu'il existe.
// Pour le calcul du contexte, c'est comme la balise #FORMULAIRE_.

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

	$get_infos = charger_fonction('get_infos','plugins');
	$infos = !$plugin ? array() : $get_infos($plugin);
	if (!isset($infos['prefix'])) return ''; // plugin in{connu|actif}
	if (!$form) $form = 'configurer_' . $infos['prefix'];
	include_spip("balise/formulaire_");
	if (!existe_formulaire($form)) return '';
	return array('formulaires/' . $form,
		     3600, 
		     balise_FORMULAIRE__contexte("configurer_plugin", func_get_args()));
+40 −25
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,32 +12,41 @@

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

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

	$infos = formulaires_configurer_plugin_infos($plugin, $form);
function formulaires_configurer_plugin_charger_dist($form)
{
	$f = charger_fonction('charger', "formulaires/$form", true);
	if ($f)
		return $f($form);
	else {
		$infos = formulaires_configurer_plugin_infos($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_traiter_dist($plugin, $form=''){
function formulaires_configurer_plugin_verifier_dist($form)
{
#	$f = charger_fonction('verifier', "formulaires/$form", true);
	return $f ? $f($form) : array();
}

	$infos = formulaires_configurer_plugin_infos($plugin, $form);
	if (!is_array($infos)) return $infos;
	$form = $infos['configurer_plugin'];
function formulaires_configurer_plugin_traiter_dist($form)
{
	$f = charger_fonction('traiter', "formulaires/$form", true);
	if ($f)
		return $f($form);
	else {
		$infos = formulaires_configurer_plugin_infos($form);
		if (!is_array($infos)) return $infos; // fait ci-dessus en fait
		$vars = formulaires_configurer_plugin_recense($infos['path']);
		$meta = $infos['meta'];
	foreach (formulaires_configurer_plugin_recense($form) as $regs) {
		foreach ($vars as $regs) {
			$k = $regs[3];
			ecrire_meta($k, _request($k), 'oui', $meta);
		}
	return array('redirect' => generer_url_ecrire($infos['prefix']));
		return !isset($infos['prefix']) ? array()
		: array('redirect' => generer_url_ecrire($infos['prefix']));
	}
}

// version amelioree de la RegExp de cfg_formulaire.
@@ -48,8 +57,7 @@ define('_EXTRAIRE_SAISIES',
// (a refaire avec SAX)
function formulaires_configurer_plugin_recense($form)
{
	$f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/');
	$f = $f ? file_get_contents($f) : '';
	$f = file_get_contents($form);
	if (preg_match_all(_EXTRAIRE_SAISIES, $f, $r, PREG_SET_ORDER))
		return $r;
	return array();
@@ -57,14 +65,21 @@ function formulaires_configurer_plugin_recense($form)
}

// Recuperer la version compilee de plugin.xml et normaliser
function formulaires_configurer_plugin_infos($plugin, $form=''){
// Si ce n'est pas un plugin, dire qu'il faut prendre la table std des meta.
function formulaires_configurer_plugin_infos($form){

	include_spip("balise/formulaire_");
	$path = existe_formulaire($form);
	if (!$path) return ''; // cas traite en amont normalement.
	if (!preg_match('@' . _DIR_PLUGINS . '/?([^/]+)/@', $path, $plugin))
		return array('path' => $path, 'meta' => 'meta');
	$plugin = $plugin[1];
	$get_infos = charger_fonction('get_infos','plugins');
	$infos = $get_infos($plugin);
	if (!is_array($infos) OR !isset($infos['prefix']))
		return _T('erreur_plugin_nom_manquant');
	$prefix = $infos['prefix'];
	$infos['configurer_plugin'] = $form ? $form : "configurer_$prefix";
	$infos['path'] = $path;
	if (!isset($infos['meta'])) $infos['meta'] = ($prefix . '_metas');
	return $infos;
}