Depuis le passage à la version 4.0.1 de SPIP les formulaires de mon plugin ne marche plus (ils ont un fichier editer_xxx dans le dossier action).
J’ai vu qu’une partie du code de la fonction balise_FORMULAIRE__contexte dans /ecrire/balise/formulaire_.php a été commenté car deprecated (si je décommente ça marche).
Comment je dois modifier mes fichiers editer_xxx dans action pour corriger?
SPIP 4.0.1 sous PHP 7.4.26
<?php
/**
* Ce fichier gere la creation et la modification dans la base des points de situation twitter
*
* @author George Kandalaft
* @author Claude Hillion
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* fonction chargee en cas de demande de creation d'un point de situation twitter via l'interface utilisateur.
* Elle appelle la fonction pst_inserer.
*/
function action_editer_pst_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// Si pas de id_pst ? on cree un nouveau point de situation, mais seulement si 'oui' en argument.
if (!$id_pst = intval($arg)) {
if ($arg != 'oui') {
include_spip('inc/headers');
redirige_url_ecrire();
}
$id_pst = pst_inserer();
}
return array($id_pst, $err);
}
/**
* permet de creer dans la table spip_psts un nouveau pst
*/
function pst_inserer($set = null) {
$champs = is_array($set) ? $set : array();
// Envoyer aux plugins
$champs = pipeline('pre_insertion', array(
'args' => array(
'table' => 'spip_psts',
),
'data' => $champs
));
$id_pst = sql_insertq('spip_psts', $champs);
pipeline(
'post_insertion',
array(
'args' => array(
'table' => 'spip_psts',
'id_objet' => $id_pst
),
'data' => $champs
)
);
return $id_pst;
}
Bien vu pour la piste que tu cites. As-tu activé les logs verbeux, si jamais ça vient de la nouvelle protection des formulaires par un jeton, tu auras des infos dans formulaires.log.
Quand tu dis « les formulaires de mon plugin ne marche plus » quel est le message d’erreur exact que tu as ?
Si c’est le bug de l’action pas signée on est redirigé vers minipres avec « action interdite ».
Si c’est un défaut de signature on a un message du genre « impossible de prendre en compte votre saisie, ressayez ».
C’est ça ecrire/public/aiguiller.php:202: spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
Le message est « Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau. » quand je clique sur enregistrer.
Evidemment quand je décommente le block à la ligne 273 de formulaire_.php, ça marche.
« oups une erreur innatendue » ça c’est quand le formulaire est posté en ajax et que la réponse a un status qui n’est pas 200. Du coup il faut « essayer à nouveau » comme te propose le message : le formulaire sera posté sans ajax et tu verras si tu arrive sur la minipres ou si c’est une autre erreur (ça pourrait aussi être une fatale…)
donc en effet il y a un truc que tu fais pas bien dans le traiter() de ton formulaire et tu arrives dans action_editer_pst() avec un arg null, du coup ça bloque ici (Je peux pas en dire plus sans voir le code)