Projet

Général

Profil

Actions

Anomalie #1411

fermé

Bug dans PdfContribution::__construct

Ajouté par Manuel Her il y a presque 5 ans. Mis à jour il y a presque 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
Core
Version cible:
Début:
09/03/2020
Echéance:
% réalisé:

100%

Temps estimé:
Version utilisée:

Description

Bonjour,

Il y a un problème à la ligne 81 :
$member = new Adherent($zdb, $this->contrib->member);

$this->contrib->member contient bien l'id de l'adhérent, mais il est de type string et non int

du coup Adherent::__construct ne charge pas l'adhérent
if ($args == null || is_int($args)) {
if (is_int($args) && $args > 0) {
$this->load($args); <----- pas executé
} else {

Si je cast en int :
$member = new Adherent($zdb, (int) $this->contrib->member);

ça fonctionne, mais n'y a t-il pas un autre problème ?

Je suis en Php 7.2.24.

Manuel

Mis à jour par Johan Cwiklinski il y a presque 5 ans

Ce devrait bien être un int (peut être même directement dans $this->contrib à vrai dire), mais caster est généralement la bonne solution.

Je ne vois pas d'autre problème ici ; tu pensais à quelque chose de particulier ?

Mis à jour par Manuel Her il y a presque 5 ans

Après analyse, le problème viendrait des variables $_POST récupérées lors de :
$post = $request->getParsedBody();
dans
$app->post(
'/contribution/{type:fee|donation}/{action:add|edit}[/{id:\d+}]',

lors de l'appel de check(), id_adh est de type string (comme toutes les variables $_POST me semble t-il)
$valid = $contrib->check($post, $required, $disabled);

le cast devrait être fait rapidement; ligne 397 de Contribution.php
case Adherent::PK:
if ($value != '') {
$this->_member = (int) $value;
}
break;

J'ai retiré le cast dans PdfContribution et ça fonctionne.

Le fonctionnement de is_int($args) (utilisé dans le constructeur de la classe Adherent) doit être différent suivant les versions de php?

Manuel

Mis à jour par Johan Cwiklinski il y a presque 5 ans

  • Catégorie mis à Core
  • Statut changé de Nouveau à Résolu
  • Assigné à mis à Manuel Her
  • Version cible mis à 0.9.4
  • % réalisé changé de 0 à 100

Manuel Her a écrit :

Après analyse, le problème viendrait des variables $_POST récupérées lors de :
$post = $request->getParsedBody();
dans
$app->post(
'/contribution/{type:fee|donation}/{action:add|edit}[/{id:\d+}]',

lors de l'appel de check(), id_adh est de type string (comme toutes les variables $_POST me semble t-il)

Ouaip, il n'y a pas de type par défaut, tout est en string.

$valid = $contrib->check($post, $required, $disabled);

le cast devrait être fait rapidement; ligne 397 de Contribution.php
case Adherent::PK:
if ($value != '') {
$this->_member = (int) $value;
}
break;

J'ai retiré le cast dans PdfContribution et ça fonctionne.

Nickel :)

Le fonctionnement de is_int($args) (utilisé dans le constructeur de la classe Adherent) doit être différent suivant les versions de php?

Non, is_int a toujours eu un fonctionnement identique.

J'intègre ton correctif rapidement, merci.

Mis à jour par Johan Cwiklinski il y a presque 5 ans

  • Statut changé de Résolu à Fermé
Actions

Formats disponibles : Atom PDF