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