Config
- PHP 8.4.21
- SPIP 4.4.13
- Abos 4.3.2
Erreur
Lors de l'ajout d'un abonnement à un auteur dans le backoffice via le bouton "abonner", erreur fatale :
[Mon May 18 15:28:26.967684 2026] [proxy_fcgi:error] [pid 2283912:tid 2283955] [client 86.68.127.82:0] AH01071:
Got error 'PHP message: PHP Fatal error: Uncaught TypeError: Unsupported operand types: string * float
in plugins/abos/prix/abooffre.php:13
Stack trace:
#0 plugins/abos/abos/abonner.php(85): prix_abooffre_dist()
#1 plugins/abos/formulaires/distribuer_abonnement.php(203): abos_abonner_dist()
#2 ecrire/public/aiguiller.php(296): formulaires_distribuer_abonnement_traiter()
#3 ecrire/index.php(72): traiter_formulaires_dynamiques()
#4 {main}
thrown in plugins/abos/prix/abooffre.php on line 13', referer: https://xxx.com/ecrire/?exec=auteur&id_auteur=199749
Pour reproduire
- Créer une offre d'abonnement :
Prix HT 1ère écheance : vide
Prix HT renouvellement (si différent) : vide
taxe : 0
- Sur la fiche d'un auteur, cliquer sur Abonner, et choisir cette offre d'abonnement : patatra
Diagnostic
Dans la fonction de prix TTC d'une offre, on se retrouve avec ces valeurs :
- $prix :
(string) ''
- $taxe :
(double) 0.0
Et donc la ligne $prix += $prix * $taxe; provoque l'erreur
Normalement l'API de prix est censée éviter ce genre de mélange, mais là elle est pas implémentée et utilisée de façon kosher.
- Il faudrait une fonction pour le prix ht, et y déplacer la logique de
abos_abonner_dist()
- Il faudrait une fonction pour la taxe
- Et pour les appels, toujours faire appel à l'API et non pas aux fonctions personnalisées pour tel objet
En patch rapide je propose de simplement caster la valeur de $prix_ht dans prix_abooffre_dist() (sans typer l'argument car ça obligerait à vérifier tous les appelants)
Config
Erreur
Lors de l'ajout d'un abonnement à un auteur dans le backoffice via le bouton "abonner", erreur fatale :
Pour reproduire
Prix HT 1ère écheance: videPrix HT renouvellement (si différent): videtaxe:0Diagnostic
Dans la fonction de prix TTC d'une offre, on se retrouve avec ces valeurs :
(string) ''(double) 0.0Et donc la ligne
$prix += $prix * $taxe;provoque l'erreurNormalement l'API de prix est censée éviter ce genre de mélange, mais là elle est pas implémentée et utilisée de façon kosher.
abos_abonner_dist()En patch rapide je propose de simplement caster la valeur de
$prix_htdansprix_abooffre_dist()(sans typer l'argument car ça obligerait à vérifier tous les appelants)