Skip to content
Extraits de code Groupes Projets
Valider b0a91a6d rédigé par esj's avatar esj
Parcourir les fichiers

Plutôt que de faire des contorsions dans la compilation de la balise...

Plutôt que de faire des contorsions dans la compilation de la balise #ACTION_FORMULAIRE, il suffisait de remarquer que la balise dynamique appelante a mis dans l'environnement le nom du formulaire CVT dont #ACTION_FORMULAIRE a besoin. Du coup, #FORMULAIRE_CONFIGURER_PLUGIN met son propre nom, ce qui lui permet de reprendre la main pour les fonctions CVT sans obliger les squelettes qui l'utilisent de l'indiquer eux-mêmes dans le 2e argument de #ACTION_FORMULAIRE.

Y a-t-il des cas où #ACTION_FORMULAIRE est appelé autrement qu'avec un unique argument égal à #ENV{action} ? En tout cas, il semble que ces balises dynamiques devraient plus généralement rajouter elles-mêmes ce que rajoute #ACTION_FORMULAIRE: cette balise incompréhensible pour l'utilisateur serait ainsi éliminée, et le code du compilateur gagnerait en clarté en regroupant en un seul endroit toute la production de ces input-hidden.
parent 41a00f76
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -79,65 +79,40 @@ function balise_FORMULAIRE__contexte($form, $args) ...@@ -79,65 +79,40 @@ function balise_FORMULAIRE__contexte($form, $args)
{ {
// tester si ce formulaire vient d'etre poste (memes arguments) // tester si ce formulaire vient d'etre poste (memes arguments)
// pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page // pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page
$je_suis_poste = false; // si poste, on recupere les erreurs
if ($post_form = _request('formulaire_action')
AND ($post_args = _request('formulaire_action_args'))
AND is_array($post_args = decoder_contexte_ajax($post_args,$post_form))) {
// enlever le faux attribut de langue masque
array_shift($post_args);
if ($args === $post_args){
$je_suis_poste = true;
}
}
// init $p = _request('formulaire_action_args');
$erreurs = $valeurs = array();
$message_ok = $message_erreur = "";
$editable = true;
// si le formulaire vient d'etre poste, on recupere les erreurs if ($p) {
if ($je_suis_poste){ $p = decoder_contexte_ajax($p, _request('formulaire_action'));
// enlever le faux attribut de langue masque
if (is_array($p)) array_shift($p);
}
if ($args === $p) {
$je_suis_poste = true;
$post = traiter_formulaires_dynamiques(true); $post = traiter_formulaires_dynamiques(true);
$erreurs = isset($post["erreurs_$form"])?$post["erreurs_$form"]:array(); $e = "erreurs_$form";
$message_ok = ""; $erreurs = isset($post[$e]) ? $post[$e] : array();
if (isset($post["message_ok_$form"])) $editable = "editable_$form";
$message_ok = $post["message_ok_$form"]; $editable = (!isset($post[$e]))
elseif(isset($erreurs['message_ok'])) || count($erreurs)
$message_ok = $erreurs["message_ok"]; || (isset($post[$editable]) && $post[$editable]);
$message_erreur = isset($erreurs['message_erreur'])?$erreurs['message_erreur']:""; } else {
$editable = (!isset($post["erreurs_$form"])) || count($erreurs) || $editable = true;
(isset($post["editable_$form"]) && $post["editable_$form"]); $je_suis_poste = false;
$erreurs = $post = array();
} }
if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true)) $valeurs = formulaire__charger($form, $args, $je_suis_poste);
$valeurs = call_user_func_array($charger_valeurs,$args);
$valeurs = pipeline(
'formulaire_charger',
array(
'args'=>array('form'=>$form,'args'=>$args,'je_suis_poste'=>$je_suis_poste),
'data'=>$valeurs)
);
// si $valeurs n'est pas un tableau, le formulaire n'est pas applicable // si $valeurs n'est pas un tableau, le formulaire n'est pas applicable
// C'est plus fort qu'editable qui est gere par le squelette // C'est plus fort qu'editable qui est gere par le squelette
// Idealement $valeur doit etre alors un message explicatif. // Idealement $valeur doit etre alors un message explicatif.
if (!is_array($valeurs)) return is_string($valeurs) ? $valeurs : ''; if (!is_array($valeurs)) return is_string($valeurs) ? $valeurs : '';
// reperer les valeurs particulieres editable, message_ok et message_erreur
if (isset($valeurs['editable'])){
$editable = $valeurs['editable'];
unset($valeurs['editable']);
}
foreach(array('message_ok','message_erreur') as $k){
if (isset($valeurs[$k])){
if (!$je_suis_poste) $$k = $valeurs[$k];
unset($valeurs[$k]);
}
}
// charger peut passer une action si le formulaire ne tourne pas sur self() // charger peut passer une action si le formulaire ne tourne pas sur self()
// ou une action vide si elle ne sert pas // ou une action vide si elle ne sert pas
$action = isset($valeurs['action'])?$valeurs['action']:self(); $action = (isset($valeurs['action'])) ? $valeurs['action'] : self();
// bug IEx : si action finit par / // bug IEx : si action finit par /
// IE croit que le <form ... action=../ > est autoferme // IE croit que le <form ... action=../ > est autoferme
if (substr($action,-1)=='/') { if (substr($action,-1)=='/') {
...@@ -148,14 +123,14 @@ function balise_FORMULAIRE__contexte($form, $args) ...@@ -148,14 +123,14 @@ function balise_FORMULAIRE__contexte($form, $args)
// recuperer la saisie en cours si erreurs // recuperer la saisie en cours si erreurs
// seulement si c'est ce formulaire qui est poste // seulement si c'est ce formulaire qui est poste
// ou si on le demande explicitement par le parametre _forcer_request = true // ou si on le demande explicitement par le parametre _forcer_request = true
$dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']));
foreach(array_keys($valeurs) as $champ){ foreach(array_keys($valeurs) as $champ){
if (substr($champ,0,1)!=='_'){ if ($champ[0]!=='_') {
if ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request'])) { if ($dispo AND (($v = _request($champ))!==NULL))
if (($v = _request($champ))!==NULL) $valeurs[$champ] = $v;
$valeurs[$champ] = $v;
}
if ($action) if ($action)
$action = parametre_url($action,$champ,''); // nettoyer l'url des champs qui vont etre saisis $action = parametre_url($action,$champ,'');
// nettoyer l'url des champs qui vont etre saisis
// proteger les ' et les " dans les champs que l'on va injecter // proteger les ' et les " dans les champs que l'on va injecter
$valeurs[$champ] = protege_champ($valeurs[$champ]); $valeurs[$champ] = protege_champ($valeurs[$champ]);
} }
...@@ -174,23 +149,43 @@ function balise_FORMULAIRE__contexte($form, $args) ...@@ -174,23 +149,43 @@ function balise_FORMULAIRE__contexte($form, $args)
"<input type='hidden' name='arg' value='".$secu['arg']."' />" "<input type='hidden' name='arg' value='".$secu['arg']."' />"
. "<input type='hidden' name='hash' value='".$secu['hash']."' />"; . "<input type='hidden' name='hash' value='".$secu['hash']."' />";
} }
// empiler la lang en tant que premier argument implicite du CVT // empiler la lang en tant que premier argument implicite du CVT
// pour permettre de la restaurer au moment du Verifier et du Traiter // pour permettre de la restaurer au moment du Verifier et du Traiter
array_unshift($args, $GLOBALS['spip_lang']); array_unshift($args, $GLOBALS['spip_lang']);
return array_merge( $valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form);
$valeurs, $valeurs['erreurs'] = $erreurs;
array( $valeurs['action'] = $action;
'form' => $form, $valeurs['form'] = $form;
'action' => $action,
'formulaire_args' => encoder_contexte_ajax($args,$form), if (!isset($valeurs['id'])) $valeurs['id'] = 'new';
'id' => isset($valeurs['id'])?$valeurs['id']:'new',
'erreurs' => $erreurs, if ($editable) $valeurs['editable'] = $editable;
'message_ok' => $message_ok,
'message_erreur' => $message_erreur, if (isset($erreurs['message_erreur']))
'editable' => $editable?' ':'' $valeurs['message_erreur'] = $erreurs['message_erreur'];
));
if (isset($post["message_ok_$form"]))
$valeurs['message_ok'] = $post["message_ok_$form"];
elseif (isset($erreurs['message_ok']))
$valeurs['message_ok'] = $erreurs["message_ok"];
return $valeurs;
} }
function formulaire__charger($form, $args, $poste)
{
if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true))
$valeurs = call_user_func_array($charger_valeurs,$args);
else $valeurs = array();
$valeurs = pipeline(
'formulaire_charger',
array(
'args'=>array('form'=>$form,'args'=>$args,'je_suis_poste'=>$poste),
'data'=>$valeurs)
);
return $valeurs;
}
?> ?>
...@@ -1206,16 +1206,14 @@ function balise_AIDER_dist($p) { ...@@ -1206,16 +1206,14 @@ function balise_AIDER_dist($p) {
function balise_ACTION_FORMULAIRE($p){ function balise_ACTION_FORMULAIRE($p){
$_url = interprete_argument_balise(1,$p); $_url = interprete_argument_balise(1,$p);
if (!$_form = interprete_argument_balise(2,$p)){ if (!$_form = interprete_argument_balise(2,$p)){
$f = $p->descr['sourcefile']; $_form = "@\$Pile[0]['form']";
$f = basename($f, '.' . _EXTENSION_SQUELETTES);
$_form = "'".addslashes($f)."'";
} }
$p->code = ""; $p->code = "";
if (strlen($_url)) if (strlen($_url))
$p->code .= " . (form_hidden($_url))"; $p->code .= " . (form_hidden($_url))";
if (strlen($_form))
$p->code .= $p->code .=
// envoyer le nom du formulaire que l'on traite // envoyer le nom du formulaire que l'on traite
". '<input type=\'hidden\' name=\'formulaire_action\' value=\'' . $_form . '\' />'" ". '<input type=\'hidden\' name=\'formulaire_action\' value=\'' . $_form . '\' />'"
// transmettre les eventuels args de la balise formulaire // transmettre les eventuels args de la balise formulaire
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter