Envoi d'un mail vide après tentative de récupération d'un mot de passe (Anomalie #621)


Added by Raphaël Hertzog 10 months ago. Updated 10 months ago.


Status:Fermé Start date:06/14/2013
Priority:Normal Due date:
Assignee:Johan Cwiklinski % Done:

100%

Category:Internationnalisation
Target version:-
Version utilisée:0.7.4

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.


Associated revisions

Revision a06f8ac2
Added by Johan Cwiklinski 10 months ago

Check if language code exists when loading Texts; to avoid empty results; fixes #621

History

Updated by Johan Cwiklinski 10 months ago

Deux problèmes ici :
  • 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 :

 1diff --git a/galette/lib/Galette/Entity/Texts.php b/galette/lib/Galette/Entity/Texts.php
 2index 83b6c47..2b1bba6 100644
 3--- a/galette/lib/Galette/Entity/Texts.php
 4+++ b/galette/lib/Galette/Entity/Texts.php
 5@@ -242,7 +242,26 @@ class Texts
 6     */
 7     public function getTexts($ref,$lang)
 8     {
 9-        global $zdb;
10+        global $zdb, $i18n;
11+
12+        //check if language is set and exists
13+        $langs = $i18n->getList();
14+        $is_lang_ok = false;
15+        foreach ( $langs as $l ) {
16+            if ( $lang === $l->getID() ) {
17+                $is_lang_ok = true;
18+                break;
19+            }
20+        }
21+
22+        if ( $is_lang_ok !== true ) {
23+            Analog::log(
24+                'Language ' . $lang . 
25+                ' does not exists. Falling back to default Galette lang.',
26+                Analog::ERROR
27+            );
28+            $lang = $i18n->getID();
29+        }
30
31         try {
32             $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.

  • Assignee set to Johan Cwiklinski
  • Status changed from Nouveau to In Progress
  • Category changed from Core to Internationnalisation

Updated by Raphaël Hertzog 10 months ago

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.

Updated by Johan Cwiklinski 10 months ago

  • % Done changed from 0 to 100
  • Status changed from In Progress to Résolu

Updated by Johan Cwiklinski 10 months ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF