Anomalie #621
ferméEnvoi d'un mail vide après tentative de récupération d'un mot de passe
100%
Description
J'ai eu plusieurs cas de personnes qui ont reçues un mail vide après avoir demandé à récupérer leur mot de passe.
Dans le premier cas, son compte était inactif et après réactivation, le mail généré n'était plus vide. Mais en fait après réactivation, le gars s'est d'abord logué avec succès avec son vieux mot de passe avant de retenter la récupération du mot de passe à ma demande. Donc si cela se trouve, cette connexion réussie a entrainé l'enregistrement d'une valeur dans pref_lang et le problème est identique au problème ci-dessous. Ceci dit il serait peut-être pas mal de fournir une réponse un peu plus explicite du genre "votre compte est désactivé, prenez contact avec votre bureau pour le réactiver".
Dans le second cas, le problème réel est que "pref_lang" de l'adhérent était NULL (j'avais 93 adhérents dans ce cas). Il semblerait bien que la mise à jour ne définisse pas correctement ce champ... ou alors que le formulaire de récupération de mot de passe ne soit pas capable de générer une valeur de fallback si ce champ est NULL.
Mis à jour par Johan Cwiklinski il y a plus de 11 ans
- Assigné à mis à Johan Cwiklinski
- Catégorie changé de Core à I18n
- Statut changé de Nouveau à In Progress
- pas de fallback sur la langue si elle est absente,
- pas de langue pour certains adhérents.
Pour le premier, on peut ajouter un test ; voici le patch :
diff --git a/galette/lib/Galette/Entity/Texts.php b/galette/lib/Galette/Entity/Texts.php
index 83b6c47..2b1bba6 100644
--- a/galette/lib/Galette/Entity/Texts.php
+++ b/galette/lib/Galette/Entity/Texts.php
@@ -242,7 +242,26 @@ class Texts
*/
public function getTexts($ref,$lang)
{
- global $zdb;
+ global $zdb, $i18n;
+
+ //check if language is set and exists
+ $langs = $i18n->getList();
+ $is_lang_ok = false;
+ foreach ( $langs as $l ) {
+ if ( $lang === $l->getID() ) {
+ $is_lang_ok = true;
+ break;
+ }
+ }
+
+ if ( $is_lang_ok !== true ) {
+ Analog::log(
+ 'Language ' . $lang .
+ ' does not exists. Falling back to default Galette lang.',
+ Analog::ERROR
+ );
+ $lang = $i18n->getID();
+ }
try {
$select = new \Zend_Db_Select($zdb->db);
Pour le second souci, c'est autre chose... Lorsque l'on crée un objet Adhérent, la langue est par défaut définie sur la langue de Galette ; puis elle est modifiée lors de l'envoi du formulaire d'inscription. Je ne parviens pas à comprendre comment ces adhérents se sont retrouvés avec une langue à NULL, je n'ai pas le cas dans mes différentes bases, et ne parviens pas à le reproduire :/
Il est possible de définir la langue par défaut de Galette au chargement de l'adhérent, c'est probablement ce que je vais faire pour éviter des problèmes à d'autres endroits avec la langue.
Mis à jour par Raphaël Hertzog il y a plus de 11 ans
Les comptes avec pref_lang=NULL sont d'anciens comptes créés sûrement à l'époque de la version 0.6x de galette. Donc c'est sûrement la mise à jour qui n'a pas correctement initialisée le champ.
Mis à jour par Johan Cwiklinski il y a plus de 11 ans
- Statut changé de In Progress à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit a06f8ac26f97886436a2c255029c584a228afd44.