Projet

Général

Profil

Anomalie #621

Envoi d'un mail vide après tentative de récupération d'un mot de passe

Ajouté par Raphaël Hertzog il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
Internationnalisation
Version cible:
-
Début:
14/06/2013
Echéance:
% réalisé:

100%

Version utilisée:

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.

Révisions associées

Révision a06f8ac2
Ajouté par Johan Cwiklinski il y a plus de 3 ans

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

Historique

#1 Mis à jour par Johan Cwiklinski il y a plus de 3 ans

  • Assigné à mis à Johan Cwiklinski
  • Catégorie changé de Core à Internationnalisation
  • Statut changé de Nouveau à In Progress
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 :

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.

#2 Mis à jour par Raphaël Hertzog il y a plus de 3 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.

#3 Mis à jour par Johan Cwiklinski il y a plus de 3 ans

  • Statut changé de In Progress à Résolu
  • % réalisé changé de 0 à 100

#4 Mis à jour par Johan Cwiklinski il y a plus de 3 ans

  • Statut changé de Résolu à Fermé

Formats disponibles : Atom PDF