Anomalie #1410
ferméAjout d'une adhésion : Une erreur est survenue lors de la récupération des dates
100%
Description
Bonjour,
J'ai ajouté :
un nouveau type de contribution Don 'Abandon de frais' (en France au lieu de rembourser les notes de frais, on peut les déduire des impôts)
puis une contribution 'Adhésion membre bienfaiteur'
lorsque j'ajoute une nouvelle adhésion, au moment où je sélectionne 'Adhésion membre bienfaiteur',
une boite de dialogue js/alert m'indique : Une erreur est survenue lors de la récupération des dates
Il y a un problème d'indexation dans $this->post(
'/contribution/dates',..
à la ligne : 'type' => array_keys($contributions_types)[$post['fee_id']],
les id ne se suivent pas (il y a des 'trous' dans la liste retournée par array_keys($contributions_types) issue de $contributions_types = $ct->getList(true);
ce qui déclenche un débordement de tableau
j'ai corrigé par :
'type' => (int)[$post['fee_id']],
ça me parait trop simple, y a t il un loup?
je suppose que si j'avais d'abord ajouté le nouveau type d'adhésion et après de don, je n'aurais pas vu ce bug, les ids se suivant dans la table mysql.
Merci
Manuel
Mis à jour par Johan Cwiklinski il y a presque 5 ans
- Statut changé de Nouveau à Commentaire
Salut,
Je ne suis pas certain d'avoir tout suivi :D Essaie de fournir un patch à l'avenir sur des changements ;)
Ceci étant dit, $ct->getList(true);
va retourner un tableau ayant pour index l'identifiant en base des résultats qui correspondent, et pas de tous les résultats. Il est donc tout à fait normal que les id ne se suivent pas.
Mais si ta nouvelle contribution est bien un don (ie. ne donne pas accès à une extension de l'adhésion), le calcul des date ne devrait juste pas se faire ; non ?
Mis à jour par Manuel Her il y a presque 5 ans
Slt,
Ce n'est pas évident à expliquer :)
un dump de $ct->getList(true); me retourne bien que des types d'adhésions :
array ( 1 => 'cotisation annuelle', 2 => 'cotisation annuelle réduite', 3 => 'cotisation personne morale', 7 => 'cotisation annuelle (dûe)', 8 => 'Adhésion XXXX', 9 => 'Adhésion YYYY', 10 => 'Adhésion annuelle, membre bienfaiteur',)
un dump de array_keys($contributions_types) me retourne :
array ( 0 => 1, 1 => 2, 2 => 3, 3 => 7, 4 => 8, 5 => 9, 6 => 10 ,)
dans le formulaire, si je sélectionne 'Adhésion annuelle, membre bienfaiteur' (le dernier);
$post['fee_id'] contient 10 soit l'index dans la table. il est en dehors du tableau lors de l’exécution de : 'type' => array_keys($contributions_types)[$post['fee_id']] :)
si j'ai bien compris, cet index est le type de la contribution, donc dans ce cas ligne 257,
je ferais simplement : 'type' => (int)$post['fee_id'],
Manuel
Mis à jour par Johan Cwiklinski il y a presque 5 ans
- Catégorie mis à Core
- Statut changé de Commentaire à In Progress
- Assigné à mis à Johan Cwiklinski
- Version cible mis à 0.9.4
Ha ok, je vois oui. Je vais vérifier ça plus globalement, il me semle avoir vu quelque chose de similaire ailleurs dans le code.
Mis à jour par Johan Cwiklinski il y a presque 5 ans
- Statut changé de In Progress à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 718af17694cc3c828804270aab46edf1d32efc8d.