Communauté Elgg francophone

Créer un compteAide  
Connexion
Aide, trucs et astuces
Le groupe pour poser ses questions et partager ses trucs et astuces sur Elgg

Bug avatar qui ne s'affiche pas

Démarré par abFab le 21 janvier 2010 Réponses (2)

Bonjour,

 

Je viens de tomber sur un bug certes très particulier, mais au cas où...

Pour reproduire ce bug, il vous faut :

- un user avec un nom contenant un "."

- le cache activé.

 

Et dans ce cas précis, lorsque vous uploaderez un nouvel avatar, il ne s'affichera pas. Les images seront bien uploadées et crées (avec toutes les sizes)... mais un bout de code dans "mod/profile/icondirect.php" fait que le chemin où chercher ces images n'est pas le bon.

Dans mod/profile/icondirect.php nous avons la variable $matrix qui est créée à partir des 5 premières lettres du nom d'utilisateur :

            $matrix = '';
            $length = 5;
            if (sizeof($userarray) < $length) $length = sizeof($userarray);
            for ($n = 0; $n < $length; $n++) {
                $matrix .= $userarray[$n] . "/";
            }   

Cette variable est ensuite utilisée pour aller chercher les images du profil (stockées dans la zone de data, dans le répertoire profile justement). Or si le nom d'utilisateur contient un "." (par exemple "to.to"), le chemin ne sera pas bon ("t/o/./t/o/"), parce que le vrai chemin contient un "_" en lieu et place du "." (ce qui est compréhensible parce que sous unix, un répertoire "." signifie le répertoire actuel) (il sera donc "t/o/_/t/o/).

J'ai modifié cette partie du script par :

            $matrix = '';
            $length = 5;
            if (sizeof($userarray) < $length) $length = sizeof($userarray);
            for ($n = 0; $n < $length; $n++) {
// Correction de bug. Si un username contient un "." alors il faut le remplacer par "_"
                if ( $userarray[$n] == "." ) {
                $matrix .= "_/";
                }else{
                $matrix .= $userarray[$n] . "/";
                }
            }   

 

... et ça ne plante plus... l'avatar apparait bien.

Réponses

  • abFab le 21 janvier 2010

    Bonjour,

     

    Je viens de tomber sur un bug certes très particulier, mais au cas où...

    Pour reproduire ce bug, il vous faut :

    - un user avec un nom contenant un "."

    - le cache activé.

     

    Et dans ce cas précis, lorsque vous uploaderez un nouvel avatar, il ne s'affichera pas. Les images seront bien uploadées et crées (avec toutes les sizes)... mais un bout de code dans "mod/profile/icondirect.php" fait que le chemin où chercher ces images n'est pas le bon.

    Dans mod/profile/icondirect.php nous avons la variable $matrix qui est créée à partir des 5 premières lettres du nom d'utilisateur :

                $matrix = '';
                $length = 5;
                if (sizeof($userarray) < $length) $length = sizeof($userarray);
                for ($n = 0; $n < $length; $n++) {
                    $matrix .= $userarray[$n] . "/";
                }   

    Cette variable est ensuite utilisée pour aller chercher les images du profil (stockées dans la zone de data, dans le répertoire profile justement). Or si le nom d'utilisateur contient un "." (par exemple "to.to"), le chemin ne sera pas bon ("t/o/./t/o/"), parce que le vrai chemin contient un "_" en lieu et place du "." (ce qui est compréhensible parce que sous unix, un répertoire "." signifie le répertoire actuel) (il sera donc "t/o/_/t/o/).

    J'ai modifié cette partie du script par :

                $matrix = '';
                $length = 5;
                if (sizeof($userarray) < $length) $length = sizeof($userarray);
                for ($n = 0; $n < $length; $n++) {
    // Correction de bug. Si un username contient un "." alors il faut le remplacer par "_"
                    if ( $userarray[$n] == "." ) {
                    $matrix .= "_/";
                    }else{
                    $matrix .= $userarray[$n] . "/";
                    }
                }   

     

    ... et ça ne plante plus... l'avatar apparait bien.

  • Fabrice Collette le 23 janvier 2010

    Le pb c'est que cette fonction est liée à la fonction make_file_matrix de la class file de elgg qui definit l'emplacement où sont stockés les images et les fichiers d'un membre .... tu risques donc de trouver des incohérences ensuite .... et surtout, de la même manière que elgg ne trouve pas les images d'avatar, il ne trouvera pas les fichiers (entre autres) d'un membre avec un username contenant un "." .

    Pour avoir une solution qui marche pour tout, il faudrait soit interdire les "." dans un username (elgg ne le fait pas en standard) soit modifier la fonction make_file_matrix dans le core .... ça justifierait un track à mon avis.

    a+