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

Introduction de {{{#FORMULAIRE_CONFIGURER_PLUGIN}}}, suite du chantier visant...

Introduction de {{{#FORMULAIRE_CONFIGURER_PLUGIN}}}, suite du chantier visant à remplacer CFG (cf [15726] et [15753]).

Cette balise admet au moins un argument, savoir le nom du plugin (donc le nom du sous-répertoire de DIR_PLUGINS) qu'il faut configurer. Ce répertoire doit contenir un sous-répertoire nommé {{{formulaires}}} contenant au moins un squelette. Le nom de celui-ci est donné soit par le 2e argument de la balise s'il est présent, soit est pris conventionnelle égal à {{{configurer_}}}{{préfixe_du_plugin}}}. Le contexte (calculé par une fonction {{{_charger}}}) est égal à la table des métas associée à ce plugins. Le traitement des saisies (fonction {{{_traiter}}}) 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. Ces deux fonctions sont donc communes à tous les formulaires de configuration de tous les plugins voulant les utiliser. Il n'y a pas de fonction {{{_verifier}}}, faute de savoir que vérifier pour chacun (interface à définir pour arranger ça).

Pour fonctionner correctement, les formulaires référencés (implicitement ou non) par cette balise doivent utiliser {{{#ACTION_FORMULAIRE}}} avec comme deuxième argument le nom du plugin. Voir un exemple dans le [http://zone.spip.org/trac/spip-zone/changeset/38755 plugin Association 2].
parent 7729c962
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -56,6 +56,7 @@ ecrire/action/tourner.php -text
ecrire/action/virtualiser.php -text
ecrire/auth/sha256.inc.php -text
ecrire/balise/formulaire_.php -text
ecrire/balise/formulaire_configurer_plugin.php -text
ecrire/balise/index.php -text
ecrire/balise/logo_.php -text
ecrire/balise/url_.php -text
@@ -449,6 +450,7 @@ prive/formulaires/configurer_identite.html -text
prive/formulaires/configurer_identite.php -text
prive/formulaires/configurer_langage.html -text
prive/formulaires/configurer_langage.php -text
prive/formulaires/configurer_plugin.php -text
prive/formulaires/configurer_preferences.html -text
prive/formulaires/configurer_preferences.php -text
prive/formulaires/editer_article.html -text
+41 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2010                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

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)
// on ne peut rien dire sur l'existence du squelette lors de la compil

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".
// Pour le calcul du contexte, c'est comme la balise #FORMULAIRE_.

function balise_FORMULAIRE_CONFIGURER_PLUGIN_dyn($plugin='', $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_");
	return array(_DIR_PLUGINS . $plugin . '/formulaires/' . $form,
		     3600, 
		     balise_FORMULAIRE__contexte("configurer_plugin", func_get_args()));
}

?>
+56 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2010                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

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];
}

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

// 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');


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

	$get_infos = charger_fonction('get_infos','plugins');
	$infos = $get_infos($plugin);
	if (!isset($infos['prefix'])) return array('erreur' => "$plugin ?");
	$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));
}
?>