Feat : ajout d'un paramètre ajaxCallback qui permet d'indiquer une fonction JS appellée en callback de l'ajaxReload à la fin du traiter. Le retour[message_ok] du traiter est maintenant un array encodé en JSon

This commit is contained in:
cy_altern 2024-09-05 18:56:47 +02:00
parent ae7665ef2f
commit e44c854b7a
4 changed files with 39 additions and 9 deletions

View file

@ -19,6 +19,7 @@
- `proteger`
- `charger_js_titre` oui par defaut => permet de ne pas charger le js d'ajout de l'input titre
- `ajaxReload` le nom d'un bloc ajax à recharger via ajaxReload. dans ce cas, charger_js_titre = non
- `ajaxCallback` le nom d'une fonction JS qui sera appellée en callback de l'ajaxReload (/!\ le JS de cette fonction doit être dans le bloc rechargé)
- `boutonSubmit` non par défaut (= bouton masqué) => oui permet d'afficher le bouton submit du FORMULAIRE_BIGFORM
- `id_document` l'ID du document pour lequel le fichier chargé va remplacer le fichier existant

View file

@ -1,13 +1,36 @@
[(#ENV{objet_ok}|oui)
<div class="formulaire_spip formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV*{message_ok}|oui)
<script>
ajaxReload("#ENV*{message_ok}");
//ajaxReload("#ENV*{message_ok}");
var aa = '#ENV*{message_ok}';
if (aa) {
try {
aa = JSON.parse(aa);
} catch (e) {
// utiliser le catch pour la compat descendante = ENV{message_ok} est une simple string avec le nom du bloc à recharger
ajaxReload(aa);
}
}
//console.log(aa);
if (aa.bloc_ajax !== undefined) {
let bb = '';
if (aa.callback_ajax !== undefined) {
bb = aa.callback_ajax;
}
ajaxReload(
aa.bloc_ajax,
{
callback: eval(bb)
}
);
}
</script>
]
<form class="form_bigform" id="form_bigform[_(#ENV{objet})][_(#ENV{id_objet})]" name="formulaire_#FORM" action="#ENV{action}" method="post" enctype="multipart/form-data"><div>
#ACTION_FORMULAIRE{#ENV{action}}

View file

@ -52,7 +52,6 @@ function formulaires_bigform_verifier_dist($objet, $id_objet, $mode = 'auto', $a
}
function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mode = 'auto', $args = []) {
$options = [];
if (array_key_exists('proteger', $args)) {
$options['proteger'] = true;
@ -82,7 +81,13 @@ function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mo
$retour['redirect'] = $args['redirect'];
}
if (!empty($args['ajaxReload'])) {
$retour['message_ok'] = $args['ajaxReload'];
//$retour['message_ok'] = $args['ajaxReload'];
$Tretour = ['bloc_ajax' => $args['ajaxReload']];
if (!empty($args['ajaxCallback'])) {
$Tretour['callback_ajax'] = $args['ajaxCallback'];
}
$retour['message_ok'] = json_encode($Tretour);
}
return $retour;
}

View file

@ -87,8 +87,10 @@ function inc_bigform_traiter_dist($id_objet, $objet = 'article', $mode = 'auto',
autoriser_exception('associerdocuments', $type, $id_objet);
$autorisation_temp = true;
}
$ajouter_document = charger_fonction('ajouter_documents', 'action');
$Tid_doc = $ajouter_document($id_document, $files, $objet, $id_objet, $mode);
if ($autorisation_temp) {
autoriser_exception('associerdocuments', $type, $id_objet, false);
}
@ -106,7 +108,6 @@ function inc_bigform_traiter_dist($id_objet, $objet = 'article', $mode = 'auto',
include_spip('inc/bigform_obfusquer_doc');
bigform_obfusquer_doc($Tid_doc);
}
}
// si tout s'est bien passé, on supprime le/les anciens logos