Hello,
Pour le plugin Boussole, j’ai eu besoin de créer une action sans argument qui redirige en fin de traitement sur la page en cours.
J’ai donc créé un bouton d’action pour faire :
[(#BOUTON_ACTION{
<:boussole:bouton_actualiser_caches:>,
#URL_ACTION_AUTEUR{serveur_actualiser_caches, ‘’, #SELF},
‘’, ‘’, ‘’})]
Ensuite, dans l’action j’ai :
-
sécurisé l’action en faisant :
$securiser_action = charger_fonction(‘securiser_action’, ‘inc’);
$securiser_action(); -
vérifié les autorisation
-
lancé le traitement sur les caches
-
rien d’autre, je n’ai pas choisi de faire une redirection par défaut
Bizarrement, j’ai d’abord récupéré systématiquement un accès interdit.
J’ai supprimé la sécurisation pour tester et là pas de souci le traitement a bien été effectué mais pas de redirection, donc pas de rafraissimenent de la page.
J’ai donc regardé le code généré par le form et je me suis aperçu que l’attribut action du form était incorrect, l’url de redirection étant affectée au paramètre arg et non redirect.
En effet, en regardant le code de la fonction balise_url
function balise_URL_ACTION_AUTEUR_dist($p) {
$p->descr[‘session’] = true;
$p->code = interprete_argument_balise(1,$p);
$args = interprete_argument_balise(2,$p);
if ($args != “’’” && $args!==NULL)
$p->code .= “,”.$args;
$redirect = interprete_argument_balise(3,$p);
if ($redirect != “’’” && $redirect!==NULL)
$p->code .= “,”.$redirect;
$p->code = “generer_action_auteur(” . $p->code . “)”;
$p->interdire_scripts = false;
return $p;
}
on voit que si l’argument 2 est vide on ne met pas de virgule donc si l’argument 3 est non vide il devient automatiquement l’argument 2 ce qui est erroné.
En enlevant le test if ($args != “’’” && $args!==NULL) tout fonctionne à nouveau, la sécurisation et la redirection.
Est ce que mon analyse est bonne parce que j’ai jamais trop senti les actions ? Si oui, est ce la bonne correction ?