Project

General

Profile

Anomalie #1411

Bug dans PdfContribution::__construct

Added by Manuel Her 8 months ago. Updated 8 months ago.

Status:
Fermé
Priority:
Normal
Assignee:
Category:
Core
Target version:
Start date:
03/09/2020
Due date:
% Done:

100%

Estimated time:
Version utilisée:
Vote:

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

#1

Updated by Johan Cwiklinski 8 months ago

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 ?

#2

Updated by Manuel Her 8 months ago

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

#3

Updated by Johan Cwiklinski 8 months ago

  • Category set to Core
  • Status changed from Nouveau to Résolu
  • Assignee set to Manuel Her
  • Target version set to 0.9.4
  • % Done changed from 0 to 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.

#4

Updated by Johan Cwiklinski 8 months ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF