Anomalie #1487
ferméReminder does not suits current requested type ArrayObject Object
100%
Description
Bonjour,
La fonctionalité "Rappels" ne fonctionne pas correctement chez nous. Les mails ne sont pas envoyés.
Dans les logs on trouve plusieurs fois l'erreur "Reminder does not suits current requested type ArrayObject Object", pour différents membres qui devrait recevoir le rappel car cotisation expirée.
2001:912:3064:134::1 - 2020-09-05 17:27:39 - DEBUG - Reminder does not suits current requested type ArrayObject Object ( [storage:ArrayObject:private] => Array ( [id_adh] => 37 [id_statut] => 4 [nom_adh] => DUPOND [prenom_adh] => PIERRE [pseudo_adh] => toto [societe_adh] => [titre_adh] => [ddn_adh] => [sexe_adh] => 1 [adresse_adh] => 1 rue de la gare [adresse2_adh] => [cp_adh] => 69001 [ville_adh] => LYON [pays_adh] => [tel_adh] => [gsm_adh] => [email_adh] => [url_adh] => [icq_adh] => [msn_adh] => [jabber_adh] => [info_adh] => [info_public_adh] => [prof_adh] => [login_adh] => toto [mdp_adh] => $2y$10$2Ee.EXijcepBu7Hx5ga5kW6Fd20aY48uhrM78/2P9AqsPZ3b8y.aC [date_crea_adh] => 2017-06-16 [date_modif_adh] => 2017-06-16 [activite_adh] => 1 [bool_admin_adh] => 0 [bool_exempt_adh] => 0 [bool_display_info] => 1 [date_echeance] => 2020-06-19 [pref_lang] => fr_FR [lieu_naissance] => [gpgid] => [fingerprint] => [parent_id] => [last_reminder] => 2019-06-03 00:00:00 [reminder_type] => 1 ) )
Mis à jour par Frederic CROZET il y a environ 4 ans
Florent G. a écrit :
Bonjour,
La fonctionalité "Rappels" ne fonctionne pas correctement chez nous. Les mails ne sont pas envoyés.Dans les logs on trouve plusieurs fois l'erreur "Reminder does not suits current requested type ArrayObject Object", pour différents membres qui devrait recevoir le rappel car cotisation expirée.
[...]
Hello,
Normal à priori, l'adresse mail de l'adhérent n'est pas renseignée
Mis à jour par Johan Cwiklinski il y a environ 4 ans
- Statut changé de Nouveau à Commentaire
Frederic CROZET a écrit (#note-1):
Florent G. a écrit :
Bonjour,
La fonctionalité "Rappels" ne fonctionne pas correctement chez nous. Les mails ne sont pas envoyés.Dans les logs on trouve plusieurs fois l'erreur "Reminder does not suits current requested type ArrayObject Object", pour différents membres qui devrait recevoir le rappel car cotisation expirée.
[...]
Hello,
Normal à priori, l'adresse mail de l'adhérent n'est pas renseignée
Oui, ça pourrait ne pas aider :)
Il est fort possible que des choses aient été corrigées en 0.9.4.1 ; il faudrait voir si le problème se reproduit avec cette version.
Il faudrait aussi fournir la stack complète de l'erreur.
Mis à jour par Florent G. il y a environ 4 ans
Merci pour vos réponses !
J'étais effectivement tombé sur l'issue #1454 pour l'histoire du compteur sans mail toujours a zéro. Mais ici, je viens de vérifier une seconde fois, ces adhérents ont bien une adresse mail définie dans l'interface web. Si je vérifie en base dans la table galette_adherents, email_adh est bien renseigné correctement
C'est effectivement curieux que [email_adh] soit vide dans le log en debug.
Le log complet: https://postit.hadoly.fr/?9ff27bd7ce65fdeb#4cKwWuqMkfKJ6s2TpLhR3fTZFNDPc8uUQrBC35peiXRw
Mis à jour par Johan Cwiklinski il y a environ 4 ans
#1454 concernait l'affichage uniquement, pas l'envoi des courriels.
Est-ce que les adhérents concernés auraient déjà reçu un rappel, avant que leur cotisation n'expire ? C'est ce que semble supposer le code à première vue (je n'ai pas investigué plus que ça encore).
Mis à jour par Florent G. il y a environ 4 ans
Johan Cwiklinski a écrit (#note-6):
Est-ce que les adhérents concernés auraient déjà reçu un rappel, avant que leur cotisation n'expire ? C'est ce que semble supposer le code à première vue (je n'ai pas investigué plus que ça encore).
C'est tout a fait possible, mais je n'en ait aucune idée, et pas facile a vérifier.
Je me suis posé également la question en voyant le "last_reminder". Mais je ne comprend pas sa valeur. Ça semble issue de la table reminder: https://postit.hadoly.fr/?919bd5f4dc44fe45#FwUHzPkN8uJGJbQ4AJYxy6jqwwyXCy6gkj2H3hCLQmvC
A chaque fois à minuit et sans périodicité entre les occurrences. Est-ce qu'on est d'accord que Galette n'envoie pas automatiquement des rappels ? (il faut obligatoirement une action manuelle dans l'interface web pour déclencher (?)). Ça me surprend aussi qu'il n'y ait que 65 entrée dans cette table. 65 rappels seulement envoyés depuis 2017, ça semble peu sur une base d'environ 80 adhérents aujourd'hui. Mais on a ce soucis d'envoi depuis des années. Avant c'était aléatoire, maintenant rien n'est envoyé, du tout.
Si c'est un comportement attendu de ne pouvoir envoyer un rappel qu'une seule fois à une personne donnée, l'interface web ne permet pas de le comprendre.
Choisissez le ou les rappels que vous souhaitez envoyer :
☑ En retard (prévisualiser) - 14 adhérents ayant une adresse de courriel 0 adhérents sans adresse courriel
On s'attend a ce que 14 mails soient envoyés.
Mis à jour par Johan Cwiklinski il y a environ 4 ans
Florent G. a écrit (#note-7):
Johan Cwiklinski a écrit (#note-6):
Est-ce que les adhérents concernés auraient déjà reçu un rappel, avant que leur cotisation n'expire ? C'est ce que semble supposer le code à première vue (je n'ai pas investigué plus que ça encore).
C'est tout a fait possible, mais je n'en ait aucune idée, et pas facile a vérifier.
Je me suis posé également la question en voyant le "last_reminder". Mais je ne comprend pas sa valeur. Ça semble issue de la table reminder: https://postit.hadoly.fr/?919bd5f4dc44fe45#FwUHzPkN8uJGJbQ4AJYxy6jqwwyXCy6gkj2H3hCLQmvCA chaque fois à minuit et sans périodicité entre les occurrences. Est-ce qu'on est d'accord que Galette n'envoie pas automatiquement des rappels ? (il faut obligatoirement une action manuelle dans l'interface web pour déclencher (?)). Ça me surprend aussi qu'il n'y ait que 65 entrée dans cette table. 65 rappels seulement envoyés depuis 2017, ça semble peu sur une base d'environ 80 adhérents aujourd'hui. Mais on a ce soucis d'envoi depuis des années. Avant c'était aléatoire, maintenant rien n'est envoyé, du tout.
Le fonctionnement des rappels est expliqué dans la doc :
https://doc.galette.eu/fr/master/usermanual/contributions.html#reminders
Rien n'est envoyé par magie ; soit il faut le faire depuis l'interface, soit ça se fait depuis une tâche cron.
Il faudrait voir si le problème se reproduit en 0.9.4.1 (voire en nigthly) ; je crois me souvenir que certains avaient eu des soucis récemment (pas celui là à priori mais pas impossible qu'il y ait un lien) qui ont été solutionnés, il m'a été confirmé que les rappels étaient bien partis ensuite. Reste la possibilité d'un souci dans les données existantes ; difficile à dire.
Mis à jour par Florent G. il y a environ 4 ans
Merci pour les précisions :)
Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.
Sur le git pas de tag 0.9.4.1
git checkout tags/0.9.4.1 error: pathspec 'tags/0.9.4.1' did not match any file(s) known to git.
Mis à jour par Johan Cwiklinski il y a environ 4 ans
Florent G. a écrit (#note-9):
Merci pour les précisions :)
Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.Sur le git pas de tag 0.9.4.1
[...]
Au temps pour moi, la 0.9.4.1 n'est pas releasée encore, il s'agit de la nightly... Je fatigue un peu, désolé :D
https://download.tuxfamily.org/galette/galette-dev.tar.bz2
Il ne devrait plus y avoir de très gros changements dans cette release ; je n'ai pas eu le temps de faire la release elle même, et des soucis ont été déclarés entre temps...
Mis à jour par Frederic CROZET il y a environ 4 ans
Florent G. a écrit (#note-9):
Merci pour les précisions :)
Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.Sur le git pas de tag 0.9.4.1
[...]
En fait, c'est la futur 0.9.4.1 qui est en dev
Tu peux la trouver là : http://download.tuxfamily.org/galette/galette-dev.tar.bz2
Mis à jour par Frederic CROZET il y a environ 4 ans
Frederic CROZET a écrit (#note-11):
Florent G. a écrit (#note-9):
Merci pour les précisions :)
Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.Sur le git pas de tag 0.9.4.1
[...]En fait, c'est la futur 0.9.4.1 qui est en dev
Tu peux la trouver là : http://download.tuxfamily.org/galette/galette-dev.tar.bz2
Oups! Johan a été plus réactif que moi ;)
Mis à jour par Johan Cwiklinski il y a environ 4 ans
Florent G. a écrit (#note-7):
Choisissez le ou les rappels que vous souhaitez envoyer :
☑ En retard (prévisualiser) - 14 adhérents ayant une adresse de courriel 0 adhérents sans adresse courrielOn s'attend a ce que 14 mails soient envoyés.
Précision sur ce point : non. Il y a 14 adhérents en retard, mais le système des rappels a ses propres contraintes, pour envoyer aux bonnes dates, et une seule fois ; en se basant sur l'historique.
Sinon, je n'ai pas été en mesure de reproduire (je n'ai pu y passer que peu de temps, ça n'aide pas). Du nouveau avec la nightly du coup ?
Mis à jour par Johan Cwiklinski il y a environ 4 ans
- Statut changé de Commentaire à In Progress
- Assigné à mis à Johan Cwiklinski
- Version cible mis à 0.9.4.1
Alors, j'ai pur reproduire ; j'ai un correctif. J'ai cafouillé durant mes tests, l'accès au serveur SMTP que j'utilisais m'est bloqué... Aucune idée si c'est temporaire ou pas, je n'ai pas le temps de me pencher sur la question pour le moment.
Voici le correctif :
diff --git a/galette/lib/Galette/Repository/Reminders.php b/galette/lib/Galette/Repository/Reminders.php
index d3686166..1a76a2c1 100644
--- a/galette/lib/Galette/Repository/Reminders.php
+++ b/galette/lib/Galette/Repository/Reminders.php
@@ -90,6 +90,7 @@ class Reminders
{
$this->toremind = array();
$select = $zdb->select(Members::TABLE, 'a');
+ $select->columns([Members::PK, 'date_echeance']);
$select->join(
array('r' => PREFIX_DB . self::TABLE),
'a.' . Members::PK . '=r.reminder_dest',
@@ -101,7 +102,7 @@ class Reminders
)->join(
array('p' => PREFIX_DB . Members::TABLE),
'a.parent_id=p.' . Members::PK,
- array('email_adh'),
+ array(),
$select::JOIN_LEFT
)->where('(a.email_adh != \'\' OR p.email_adh != \'\')')
->where('a.activite_adh=true')
@@ -125,11 +126,17 @@ class Reminders
);
}
- $select->group('a.id_adh')->group('r.reminder_type')->group('p.email_adh');
+ $select->group('a.id_adh')->group('r.reminder_type');
$results = $zdb->execute($select);
foreach ($results as $r) {
+ if ($r->reminder_type < $type) {
+ //sent impending, but is now late. reset last remind.
+ $r->reminder_type = $type;
+ $r->last_reminder = '';
+ }
+
if ($r->reminder_type === null || (int)$r->reminder_type === $type) {
$date_checked = false;
Il faudrait s'assurer que ça fonctionne, y compris sur des fiches "enfants" qui n'ont pas d'adresse de courriel.
Mis à jour par Frederic CROZET il y a environ 4 ans
Hello Johan et Florent,
Si j'ai bien compris ce correctif, il avait un problème de rappel "en retard" suite à des "échéances proches" donc le 3ième rappel.
Effectivement, en regardant mes historiques cron, ils manquent les 3ième rappels.
Par contre, j'ai appliqué le correctif hier soir car j'ai un tache cron hebdomadaire le vendredi à minuit. Et certains membres ont eu un 3ième rappel mais pour seulement et ou deux jours de retard. Les rappels en retard sont pour un puis deux mois après l’expiration de la date d’échéance d'après la documentation ;)
Je reste vigilant pour les prochaines relances avec des fiches enfants sans adresse de courriel.
Merci encore
Mis à jour par Johan Cwiklinski il y a environ 4 ans
Frederic CROZET a écrit (#note-15):
Hello Johan et Florent,
Si j'ai bien compris ce correctif, il avait un problème de rappel "en retard" suite à des "échéances proches" donc le 3ième rappel.
Effectivement, en regardant mes historiques cron, ils manquent les 3ième rappels.
Par contre, j'ai appliqué le correctif hier soir car j'ai un tache cron hebdomadaire le vendredi à minuit. Et certains membres ont eu un 3ième rappel mais pour seulement et ou deux jours de retard. Les rappels en retard sont pour un puis deux mois après l’expiration de la date d’échéance d'après la documentation ;)
Je reste vigilant pour les prochaines relances avec des fiches enfants sans adresse de courriel.
Merci encore
Merci pour le retour :) L'adhérent que j'ai testé avait plus de 600 jours de retard, forcément, je n'ai pas vu le problème :D
Mis à jour par Johan Cwiklinski il y a environ 4 ans
Alors non seulement ils ne partaient pas à la bonne date, mais en plus, ça part tous les jours... Voici un patch modifié qui devrait mieux faire le travail :
diff --git a/galette/lib/Galette/Repository/Reminders.php b/galette/lib/Galette/Repository/Reminders.php
index d3686166..e1b7f24a 100644
--- a/galette/lib/Galette/Repository/Reminders.php
+++ b/galette/lib/Galette/Repository/Reminders.php
@@ -90,18 +90,19 @@ class Reminders
{
$this->toremind = array();
$select = $zdb->select(Members::TABLE, 'a');
+ $select->columns([Members::PK, 'date_echeance']);
$select->join(
array('r' => PREFIX_DB . self::TABLE),
'a.' . Members::PK . '=r.reminder_dest',
array(
'last_reminder' => new Expression('MAX(reminder_date)'),
- 'reminder_type'
+ 'reminder_type' => new Expression('MAX(reminder_type)')
),
$select::JOIN_LEFT
)->join(
array('p' => PREFIX_DB . Members::TABLE),
'a.parent_id=p.' . Members::PK,
- array('email_adh'),
+ array(),
$select::JOIN_LEFT
)->where('(a.email_adh != \'\' OR p.email_adh != \'\')')
->where('a.activite_adh=true')
@@ -125,11 +126,17 @@ class Reminders
);
}
- $select->group('a.id_adh')->group('r.reminder_type')->group('p.email_adh');
+ $select->group('a.id_adh');
$results = $zdb->execute($select);
foreach ($results as $r) {
+ if ($r->reminder_type < $type) {
+ //sent impending, but is now late. reset last remind.
+ $r->reminder_type = $type;
+ $r->last_reminder = '';
+ }
+
if ($r->reminder_type === null || (int)$r->reminder_type === $type) {
$date_checked = false;
Mis à jour par Johan Cwiklinski il y a environ 4 ans
- Statut changé de In Progress à Résolu
- % réalisé changé de 0 à 100
Johan Cwiklinski a écrit (#note-17):
Alors non seulement ils ne partaient pas à la bonne date, mais en plus, ça part tous les jours... Voici un patch modifié qui devrait mieux faire le travail :
[...]
J'ai commité ce dernier patch par erreur (voir 6223858b01b4d6ab56ca3c016764c2dda419baac) ; je n'ai pas eu le loisir de tester les différents cas de figure possibles (j'aurai en fait aimé ajouter des tests automatisés, mais c'est un peu la galère).
En attente de retours donc :)
Mis à jour par Johan Cwiklinski il y a environ 4 ans
- Statut changé de Résolu à Fermé
Je viens d'ajouter quelques tests automatisés, à priori, le patch commité était le bon :)
Mis à jour par Frederic CROZET il y a environ 4 ans
J'ai la dernière nightly et il y a toujours un bug sur les 3ièmes rappels.
Certains membres ont eu un 3ième rappel mais pour seulement -2, -4 et -9 jours de retard.
C'est pas normal?
Mis à jour par Johan Cwiklinski il y a environ 4 ans
- Statut changé de Fermé à In Progress
- % réalisé changé de 100 à 0
Je rouvre puise le souci n'est toujours pas résolu
Mis à jour par Johan Cwiklinski il y a environ 4 ans
Johan Cwiklinski a écrit (#note-19):
Je viens d'ajouter quelques tests automatisés, à priori, le patch commité était le bon :)
Sauf que les tests ne testaient pas le bon cas :(
J'ai revu ma copie, et j'ai essayé de tester tous les cas de figure avec des dates différentes ; et des rappels déjà enregistrés en base. C'est certainement mieux qu'avant, mais ça n'est toujours pas exhaustif (je ne teste par exemple pas de cas avec l'adresse du parent - je n'avais plus le temps d'ajouter d'autres cas :/).
Mis à jour par Johan Cwiklinski il y a environ 4 ans
- Statut changé de In Progress à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 5b1d19c7aa733c9661356ddff9a1f54b228cc1f7.