Browse Source

Fix #3804 : les fonctions cvt multi etapes sont appelees par le core explicitement pour passer apres les pipelines

+ on ajoute un pipeline formulaire_verifier_etape qui recoit le numero d'etape en args et permet donc de traiter les cvtmulti proprement depuis les plugins
3.2
Cerdic 6 years ago
parent
commit
b73a49c977
  1. 9
      ecrire/balise/formulaire_.php
  2. 88
      ecrire/inc/cvt_multietapes.php
  3. 4
      ecrire/paquet.xml
  4. 9
      ecrire/public/aiguiller.php

9
ecrire/balise/formulaire_.php

@ -287,6 +287,15 @@ function formulaire__charger($form, $args, $poste) {
)
);
// prise en charge CVT multi etape
if (is_array($valeurs) and isset($valeurs['_etapes'])) {
include_spip('inc/cvt_multietapes');
$valeurs = cvtmulti_formulaire_charger_etapes(
array('form' => $form, 'args' => $args, 'je_suis_poste' => $poste),
$valeurs
);
}
// si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline !
if (is_array($valeurs)) {
if (!isset($valeurs['_pipelines'])) {

88
ecrire/inc/cvt_multietapes.php

@ -157,41 +157,66 @@ function cvtmulti_sauver_post($form, $je_suis_poste, &$valeurs) {
* Reperer une demande de formulaire CVT multi page
* et la reformater
*
* @param <type> $flux
* @return <type>
* @deprecated : appel direct de cvtmulti_formulaire_charger_etapes par le core
* @param array $flux
* @return array
*/
function cvtmulti_formulaire_charger($flux) {
#var_dump($flux['data']['_etapes']);
if (is_array($flux['data'])
and isset($flux['data']['_etapes'])
) {
$form = $flux['args']['form'];
$je_suis_poste = $flux['args']['je_suis_poste'];
$nb_etapes = $flux['data']['_etapes'];
$flux['data'] = cvtmulti_formulaire_charger_etapes($flux['args'], $flux['data']);
}
return $flux;
}
/**
* Charger une etape du cvt multi
* @param $args
* @param $valeurs
* @return array
*/
function cvtmulti_formulaire_charger_etapes($args, $valeurs) {
if (!isset($valeurs['_etape'])) {
$form = $args['form'];
$je_suis_poste = $args['je_suis_poste'];
$nb_etapes = $valeurs['_etapes'];
$etape = _request('_etape');
$etape = min(max($etape, 1), $nb_etapes);
set_request('_etape', $etape);
$flux['data']['_etape'] = $etape;
$valeurs['_etape'] = $etape;
// sauver les posts de cette etape pour les avoir a la prochaine etape
$flux['data'] = cvtmulti_sauver_post($form, $je_suis_poste, $flux['data']);
#var_dump($flux['data']);
$valeurs = cvtmulti_sauver_post($form, $je_suis_poste, $valeurs);
}
return $flux;
return $valeurs;
}
/**
* Verifier les etapes de saisie
*
* @deprecated : appel direct de cvtmulti_formulaire_verifier_etapes par le core
* @param array $flux
* @return array
*/
function cvtmulti_formulaire_verifier($flux) {
$flux['data'] = cvtmulti_formulaire_verifier_etapes($flux['args'], $flux['data']);
return $flux;
}
/**
* Verifier les etapes de saisie
*
* @param array $args
* @param $erreurs
* @return array
*/
function cvtmulti_formulaire_verifier_etapes($args, $erreurs) {
#var_dump('Pipe verifier');
if ($form = $flux['args']['form']
if ($form = $args['form']
and ($e = cvtmulti_recuperer_post_precedents($form)) !== false
) {
// recuperer l'etape saisie et le nombre d'etapes total
@ -199,20 +224,30 @@ function cvtmulti_formulaire_verifier($flux) {
$etape_demandee = _request('aller_a_etape'); // possibilite de poster en entier dans aller_a_etape
// lancer les verifs pour chaque etape deja saisie de 1 a $etape
$erreurs = array();
$erreurs_etapes = array();
$derniere_etape_ok = 0;
$e = 0;
while ($e < $etape and $e < $etapes) {
$e++;
$erreurs[$e] = array();
$erreurs_etapes[$e] = array();
if ($verifier = charger_fonction("verifier_$e", "formulaires/$form/", true)) {
$erreurs[$e] = call_user_func_array($verifier, $flux['args']['args']);
$erreurs_etapes[$e] = call_user_func_array($verifier, $args['args']);
} elseif ($verifier = charger_fonction("verifier_etape", "formulaires/$form/", true)) {
$args = $flux['args']['args'];
array_unshift($args, $e);
$erreurs[$e] = call_user_func_array($verifier, $args);
$a = $args['args'];
array_unshift($a, $e);
$erreurs_etapes[$e] = call_user_func_array($verifier, $a);
}
if ($derniere_etape_ok == $e - 1 and !count($erreurs[$e])) {
// et on appelle un pipeline dedie aux etapes, plus easy
$args['etape'] = $e;
$erreurs_etapes[$e] = pipeline(
'formulaire_verifier_etape',
array(
'args' => $args,
'data' => $erreurs_etapes[$e]
)
);
if ($derniere_etape_ok == $e - 1 and !count($erreurs_etapes[$e])) {
$derniere_etape_ok = $e;
}
// possibilite de poster dans _retour_etape_x
@ -224,7 +259,7 @@ function cvtmulti_formulaire_verifier($flux) {
// si la derniere etape OK etait la derniere
// on renvoie le flux inchange et ca declenche traiter
if ($derniere_etape_ok == $etapes and !$etape_demandee) {
return $flux;
return $erreurs;
} else {
$etape = $derniere_etape_ok + 1;
if ($etape_demandee > 0 and $etape_demandee < $etape) {
@ -233,20 +268,19 @@ function cvtmulti_formulaire_verifier($flux) {
$etape = min($etape, $etapes);
#var_dump("prochaine etape $etape");
// retourner les erreurs de l'etape ciblee
$flux['data'] = isset($erreurs[$etape]) ? $erreurs[$etape] : array();
$erreurs = isset($erreurs_etapes[$etape]) ? $erreurs_etapes[$etape] : array();
// Ne pas se tromper dans le texte du message d'erreur : la clé '_etapes' n'est pas une erreur !
if ($flux['data']) {
$flux['data']['message_erreur'] = singulier_ou_pluriel(count($flux['data']), 'avis_1_erreur_saisie',
'avis_nb_erreurs_saisie');
if ($erreurs) {
$erreurs['message_erreur'] = singulier_ou_pluriel(count($erreurs), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
} else {
$flux['data']['message_erreur'] = "";
$erreurs['message_erreur'] = "";
}
$flux['data']['_etapes'] = "etape suivante $etape";
$erreurs['_etapes'] = "etape suivante $etape";
set_request('_etape', $etape);
}
}
return $flux;
return $erreurs;
}
/**

4
ecrire/paquet.xml

@ -73,11 +73,11 @@
<pipeline nom="editer_contenu_objet" action="" />
<pipeline nom="exec_init" action="" />
<pipeline nom="filtrer_liste_plugins" action="" />
<pipeline nom="formulaire_charger" action="cvtmulti_formulaire_charger" inclure="inc/cvt_multietapes.php" />
<pipeline nom="formulaire_charger" action="cvtconf_formulaire_charger" inclure="inc/cvt_configurer.php" />
<pipeline nom="formulaire_charger" action="cvtautosave_formulaire_charger" inclure="inc/cvt_autosave.php" />
<pipeline nom="formulaire_receptionner" action="" />
<pipeline nom="formulaire_verifier" action="cvtmulti_formulaire_verifier" inclure="inc/cvt_multietapes.php" />
<pipeline nom="formulaire_verifier" action="" />
<pipeline nom="formulaire_verifier_etape" action="" />
<pipeline nom="formulaire_traiter" action="cvtconf_formulaire_traiter" inclure="inc/cvt_configurer.php" />
<pipeline nom="formulaire_traiter" action="cvtautosave_formulaire_traiter" inclure="inc/cvt_autosave.php" />
<pipeline nom="formulaire_fond" action="" />

9
ecrire/public/aiguiller.php

@ -215,6 +215,15 @@ function traiter_formulaires_dynamiques($get = false) {
'data' => $verifier ? call_user_func_array($verifier, $args) : array()
)
);
// prise en charge CVT multi etape si besoin
if (_request('cvtm_prev_post')) {
include_spip('inc/cvt_multietapes');
$post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
array('form' => $form, 'args' => $args),
$post["erreurs_$form"]
);
}
// accessibilite : si des erreurs mais pas de message general l'ajouter
if (count($post["erreurs_$form"]) and !isset($post["erreurs_$form"]['message_erreur'])) {
$post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_$form"]),

Loading…
Cancel
Save