Notice sur statut quand il n'y a pas l'autorisation de modifier l'objet
Description du bug / Comment le reproduire
Nous utilisons le plugin billetteries (https://git.spip.net/spip-contrib-extensions/billetteries) et nous faisons appel à son formulaire formulaires/editer_billet.php et donc à sa fonction traiter() pour que des visiteurs puisse prendre un ticket.
À la création du billet, nous cherchons à lui appliquer d'emblée le statut "valide". Mais le visiteur n'ayant pas le droit de modifier son billet, on se retrouve dans objet_instituer() dans ce cas-là : https://git.spip.net/spip/ecrire/-/blob/5.x/action/editer_objet.php?ref_type=heads#L420
Ce qui déclenche les warnings suivants, quelques lignes plus bas :
Warning: Undefined array key "statut" in /var/www/html/ecrire/action/editer_objet.php on line 431 Warning: Undefined array key "statut" in /var/www/html/ecrire/action/editer_objet.php on line 432
Piste de résolution
On peut toujours faire cela :
- $champs['statut'] == 'publie'
- || $champs['statut'] == 'prop' && !in_array($statut_ancien, ['publie', 'prop'])
+ ($champs['statut'] ?? '') == 'publie'
+ || ($champs['statut'] ?? '') == 'prop' && !in_array($statut_ancien, ['publie', 'prop'])
Mais je ne trouve pas ça forcément très propre...
Ou plus haut donc, renvoyer un $champs['statut'] quelconque, null ou '' ?
Informations techniques
- Version de SPIP : 4.3
- Version de PHP : 8.2