Changeset 88543 in spip-zone for _plugins_/gravatar


Ignore:
Timestamp:
Apr 9, 2015, 3:59:47 PM (5 years ago)
Author:
cedric@…
Message:

Refactoring de la fonction gravatar : au lieu des tests succesifs encapsules difficiles a comprendre et maintenir, on fait une sequence de tests qui permettent tous de sortir si pas de mise a jour necessaire
l'argument $default peut prendre aussi bien une valeur defaut de l'API gravatar qu'un chemin vers une image
la balise #GRAVATAR peur prendre une valeur par defaut de l'API en 3e argument et pas seulement un chemin vers une image
on propose la valeur "retro" par defaut en plus
dans le formulaire de configuration on affiche les images d'exemple a la taille configuree, pour mieux se rendre compte

Location:
_plugins_/gravatar
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gravatar/balise/gravatar.php

    r88520 r88543  
    3535        if (!$_default) $_default = "''";
    3636
    37         $p->code = "inserer_attribut(filtrer('image_reduire',sinon(gravatar($_email),$_default), (\$s=$_size) ?\$s: 80), 'alt', '')";
     37        $p->code = "inserer_attribut(filtrer('image_graver',filtrer('image_reduire',gravatar($_email,$_default), (\$s=$_size) ?\$s: 80)), 'alt', '')";
    3838        return $p;
    3939
  • _plugins_/gravatar/formulaires/configurer_gravatar.html

    r47736 r88543  
    1515                                <div class="choix">
    1616                                        <input type="radio" name="image_defaut" class="radio" value="404" id="image_defaut_404"[ (#ENV{image_defaut,'404'}|=={404}|oui)checked="checked"]/>
    17                                         <span class="demo">[(#CHEMIN{rien.gif}|gravatar_balise_img)]</span>
     17                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},#CHEMIN{rien.gif}})]</span>
    1818                                        <label for="image_defaut_404"><:gravatar:label_image_defaut_404:></label>
    1919                                </div>
    2020                                <div class="choix">
    2121                                        <input type="radio" name="image_defaut" class="radio" value="images/gravatar.png" id="image_defaut_png"[ (#ENV{image_defaut,'404'}|=={images/gravatar.png}|oui)checked="checked"]/>
    22                                         <span class="demo">[(#CHEMIN{images/gravatar.png}|gravatar_balise_img)]</span>
     22                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},#CHEMIN{images/gravatar.png}})]</span>
    2323                                        <label for="image_defaut_png"><:gravatar:label_image_defaut_png:></label>
    2424                                </div>
    2525                                <div class="choix">
    2626                                        <input type="radio" name="image_defaut" class="radio" value="0" id="image_defaut_gravatar"[ (#ENV{image_defaut,'404'}|=={0}|oui)checked="checked"]/>
    27                                         <span class="demo">[(#VAL{email@example.org}|gravatar{'0'}|gravatar_balise_img)]</span>
     27                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},0})]</span>
    2828                                        <label for="image_defaut_gravatar"><:gravatar:label_image_defaut_gravatar:></label>
    2929                                </div>
    3030                                <div class="choix">
    3131                                        <input type="radio" name="image_defaut" class="radio" value="identicon" id="image_defaut_identicon"[ (#ENV{image_defaut,'404'}|=={identicon}|oui)checked="checked"]/>
    32                                         <span class="demo">[(#VAL{email@example.org}|gravatar{identicon}|gravatar_balise_img)]</span>
     32                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},identicon})]</span>
    3333                                        <label for="image_defaut_identicon"><:gravatar:label_image_defaut_identicon:></label>
    3434                                </div>
    3535                                <div class="choix">
    3636                                        <input type="radio" name="image_defaut" class="radio" value="monsterid" id="image_defaut_monsterid"[ (#ENV{image_defaut,'404'}|=={monsterid}|oui)checked="checked"]/>
    37                                         <span class="demo">[(#VAL{email@example.org}|gravatar{monsterid}|gravatar_balise_img)]</span>
     37                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},monsterid})]</span>
    3838                                        <label for="image_defaut_monsterid"><:gravatar:label_image_defaut_monsterid:></label>
    3939                                </div>
    4040                                <div class="choix">
    4141                                        <input type="radio" name="image_defaut" class="radio" value="wavatar" id="image_defaut_wavatar"[ (#ENV{image_defaut,'404'}|=={wavatar}|oui)checked="checked"]/>
    42                                         <span class="demo">[(#VAL{email@example.org}|gravatar{wavatar}|gravatar_balise_img)]</span>
     42                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},wavatar})]</span>
    4343                                        <label for="image_defaut_wavatar"><:gravatar:label_image_defaut_wavatar:></label>
     44                                </div>
     45                                <div class="choix">
     46                                        <input type="radio" name="image_defaut" class="radio" value="retro" id="image_defaut_retro"[ (#ENV{image_defaut,'404'}|=={retro}|oui)checked="checked"]/>
     47                                        <span class="demo">[(#GRAVATAR{email@example.org,#ENV**{taille},retro})]</span>
     48                                        <label for="image_defaut_retro"><:gravatar:label_image_defaut_retro:></label>
    4449                                </div>
    4550            </li>
     
    5762<style type="text/css">
    5863.formulaire_#FORM .editer_image_defaut .choix {margin:5px 0;}
    59 .formulaire_#FORM .editer_image_defaut .choix span img {width:32px;height:32px;}
     64.formulaire_#FORM .editer_image_defaut .choix .demo img {vertical-align: middle;border:1px solid #ddd;}
    6065</style>
  • _plugins_/gravatar/gravatar_fonctions.php

    r88538 r88543  
    157157        static $max=10; // et en tout etat de cause pas plus de 10 nouveaux
    158158
    159         // eviter une requete quand on peut
    160         if (!strlen($email) OR !email_valide($email))
     159        // eviter une requete quand l'email est invalide
     160        if (!$email=trim($email)
     161                OR !strlen($email)
     162                OR !email_valide($email))
    161163                return '';
    162164
     
    177179        else
    178180                $gravatar_id = md5(strtolower($email).$GLOBALS['meta']['gravatar_salt']);
    179         $gravatar_id .= ($default=='404'?"":"-$default");
     181
     182        $gravatar_default = '';
     183        if (in_array($default,array('404','mm','identicon','monsterid','wavatar','retro'))){
     184                $gravatar_default = $default;
     185                $default = '';
     186        }
     187        elseif(strpos($default,".")!==false AND file_exists($default)){
     188                $gravatar_default = '404';
     189        }
     190        else{
     191                $default = '';
     192        }
     193
     194        $gravatar_id .= ($gravatar_default=='404'?"":"-$gravatar_default");
    180195        $gravatar_cache = $tmp.$gravatar_id.'.jpg';
    181196
    182         $duree = 0;
    183        
    184         if (!file_exists($lock_file) OR $_SERVER['REQUEST_TIME']-filemtime($lock_file)>_GRAVATAR_CACHE_DELAY_LOCK){
    185 
    186                 if ((!file_exists($gravatar_cache)
    187                         OR (
    188                                 (($duree = $_SERVER['REQUEST_TIME']-filemtime($gravatar_cache))>_GRAVATAR_CACHE_DELAY_REFRESH)
    189                                 AND $nb>0
    190                         ))
    191                 ){
    192                         if ($duree){
    193                                 spip_log("Actualiser gravatar anciennete $duree s (cache maxi " . _GRAVATAR_CACHE_DELAY_REFRESH . "s)", "gravatar");
     197        $gravatar = "";
     198        // On verifie si le gravatar existe en controlant la taille du fichier
     199        if (@filesize($gravatar_cache)) {
     200                $gravatar = $gravatar_cache;
     201        }
     202        // sinon si default est un chemin d'image, le prendre en fallback
     203        elseif($default){
     204                $gravatar = $default;
     205        }
     206
     207
     208        // si on est locke, on utilise ce qu'on a
     209        if (file_exists($lock_file)
     210                AND $_SERVER['REQUEST_TIME']-filemtime($lock_file)<_GRAVATAR_CACHE_DELAY_LOCK){
     211                return $gravatar;
     212        }
     213
     214        // si on a un cache valide, on l'utilise
     215        $vides = false;
     216        if ($gravatar==$gravatar_cache){
     217                $duree = $_SERVER['REQUEST_TIME']-filemtime($gravatar_cache);
     218                if ($duree<_GRAVATAR_CACHE_DELAY_REFRESH OR $nb--<=0){
     219                        return $gravatar;
     220                }
     221                spip_log("Actualiser gravatar existant anciennete $duree s (cache maxi " . _GRAVATAR_CACHE_DELAY_REFRESH . "s)", "gravatar");
     222        }
     223        // si c'est un email sans gravatar connu (deja verifie), on ne reverifie pas que passe un delai suffisant
     224        else {
     225                lire_fichier($tmp . 'vides.txt', $vides);
     226                $vides = @unserialize($vides);
     227                if ($vides===false) $vides = array();
     228                if (isset($vides[$gravatar_id])){
     229                        $duree_vide = $_SERVER['REQUEST_TIME']-$vides[$gravatar_id];
     230                        if ($duree_vide<_GRAVATAR_CACHE_DELAY_CHECK_NEW OR $nb--<=0){
     231                                return $gravatar;
    194232                        }
    195                         lire_fichier($tmp . 'vides.txt', $vides);
    196                         $vides = @unserialize($vides);
    197                         if ($vides===false) $vides = array();
    198                         if ($duree
    199                                 OR (
    200                                         (!isset($vides[$gravatar_id]) OR (($duree_vide = time()-$vides[$gravatar_id])>_GRAVATAR_CACHE_DELAY_CHECK_NEW))
    201                                         AND $max-->0
    202                                 )
    203                         ){
    204                                 if ($duree_vide){
    205                                         spip_log("Actualiser gravatar vide $duree_vide s (cache maxi " . _GRAVATAR_CACHE_DELAY_CHECK_NEW . "s)", "gravatar");
    206                                 }
    207 
    208                                 $nb--;
    209                                 include_spip("inc/distant");
    210                                 spip_timer('gravatar');
    211                                 if ($gravatar
    212                                         = recuperer_page(_GRAVATAR_HOST . '/avatar/' . $md5_email . ($default ? "?d=$default" : "") . "&s=" . _TAILLE_MAX_GRAVATAR)
    213                                 ){
    214                                         spip_log('gravatar ok pour ' . $email);
    215                                         ecrire_fichier($gravatar_cache, $gravatar);
    216                                         // si c'est un png, le convertir en jpg
    217                                         $a = @getimagesize($gravatar_cache);
    218                                         if ($a[2]==3) // png
    219                                         {
    220                                                 if (!file_exists($gravatar_cache . '.png')){ // pour eviter un warning sous windows si le fichier existe deja
    221                                                         rename($gravatar_cache, $gravatar_cache . '.png');
    222                                                 }
    223                                                 include_spip('inc/filtres_images');
    224                                                 $img = imagecreatefrompng($gravatar_cache . '.png');
    225                                                 // Compatibilite avec la 2.1
    226                                                 if (function_exists('_image_imagejpg')){
    227                                                         _image_imagejpg($img, $gravatar_cache);
    228                                                 } else
    229                                                         image_imagejpg($img, $gravatar_cache);
    230                                         }
    231                                         if (isset($vides[$gravatar_id])){
    232                                                 unset($vides[$gravatar_id]);
    233                                                 ecrire_fichier($tmp . 'vides.txt', serialize($vides));
    234                                         }
    235                                 } else {
    236                                         $dt = spip_timer('gravatar', true);
    237                                         // si ca a ete trop long, ne pas ressayer (IP serveur ban par gravatar ?)
    238                                         if ($dt>10000){
    239                                                 $nb = 0;
    240                                                 @touch($lock_file);
    241                                                 spip_log("gravatar.com trop long a repondre, on lock $lock_file", "gravatar");
    242                                         }
    243                                         // si on a pas eu de reponse mais qu'un cache existe le prolonger pour eviter de rechecker tout le temps
    244                                         if ($duree){
    245                                                 @touch($gravatar_cache);
    246                                         } else {
    247                                                 $vides[$gravatar_id] = time();
    248                                                 ecrire_fichier($tmp . 'vides.txt', serialize($vides));
    249                                         }
    250                                 }
    251 
    252                                 gravatar_verifier_index($tmp);
     233                        spip_log("Actualiser gravatar vide $duree_vide s (cache maxi " . _GRAVATAR_CACHE_DELAY_CHECK_NEW . "s)", "gravatar");
     234                }
     235                else {
     236                        spip_log("Recherche nouveau gravatar", "gravatar");
     237                }
     238        }
     239
     240        // pas trop de requetes sur un seul tour
     241        if ($max--<=0){
     242                return $gravatar;
     243        }
     244
     245        include_spip("inc/distant");
     246        spip_timer('gravatar');
     247        $url_gravatar = _GRAVATAR_HOST
     248                . '/avatar/'
     249                . $md5_email
     250                . ".jpg"
     251                . ($gravatar_default ? "?d=$gravatar_default" : "")
     252                . "&s=" . _TAILLE_MAX_GRAVATAR;
     253
     254        // recuperation OK ?
     255        $gravatar_bin = recuperer_page($url_gravatar);
     256        $dt = spip_timer('gravatar', true);
     257        if ($gravatar_bin){
     258                spip_log('recuperer gravatar OK pour ' . $email,"gravatar");
     259                ecrire_fichier($gravatar_cache, $gravatar_bin);
     260                // si c'est un png, le convertir en jpg
     261                $a = @getimagesize($gravatar_cache);
     262                // png ?
     263                if ($a[2]==3) {
     264                        // pour eviter un warning sous windows si le fichier existe deja
     265                        if (file_exists($gravatar_cache . '.png')){
     266                                @unlink($gravatar_cache . '.png');
    253267                        }
    254                 }
    255 
    256         }
    257 
    258         // On verifie si le gravatar existe en controlant la taille du fichier
    259         if (@filesize($gravatar_cache))
    260                 return $gravatar_cache;
    261         else
    262                 return '';
    263 }
    264 
    265 ?>
     268                        rename($gravatar_cache, $gravatar_cache . '.png');
     269                        include_spip('inc/filtres_images');
     270                        $img = imagecreatefrompng($gravatar_cache . '.png');
     271                        // Compatibilite avec la 2.1
     272                        if (function_exists('_image_imagejpg')){
     273                                _image_imagejpg($img, $gravatar_cache);
     274                        }
     275                        else {
     276                                image_imagejpg($img, $gravatar_cache);
     277                        }
     278                }
     279                if (is_array($vides) AND isset($vides[$gravatar_id])){
     280                        unset($vides[$gravatar_id]);
     281                        ecrire_fichier($tmp . 'vides.txt', serialize($vides));
     282                }
     283
     284                if ($gravatar!==$gravatar_cache){
     285                        gravatar_verifier_index($tmp);
     286                        $gravatar = $gravatar_cache;
     287                }
     288        }
     289        else {
     290                // si ca a ete trop long, ne pas ressayer (IP serveur ban par gravatar ?)
     291                if ($dt>10000){
     292                        $nb = 0;
     293                        @touch($lock_file);
     294                        spip_log("gravatar.com trop long a repondre, on lock $lock_file", "gravatar");
     295                }
     296                // si on a pas eu de reponse mais qu'un cache existe le prolonger pour eviter de rechecker tout le temps
     297                if ($gravatar===$gravatar_cache){
     298                        @touch($gravatar_cache);
     299                }
     300                else {
     301                        $vides[$gravatar_id] = time();
     302                        ecrire_fichier($tmp . 'vides.txt', serialize($vides));
     303                }
     304        }
     305
     306        return $gravatar;
     307}
  • _plugins_/gravatar/lang/gravatar_fr.php

    r84620 r88543  
    2525        'label_image_defaut_png' => '<tt>images/gravatar.png</tt>',
    2626        'label_image_defaut_wavatar' => '<i>Wavatar</i> (généré d’après l’adresse email)',
     27        'label_image_defaut_retro' => '<i>Retro</i> (généré d’après l’adresse email)',
    2728        'label_taille' => 'Taille des gravatars',
    2829
  • _plugins_/gravatar/paquet.xml

    r88521 r88543  
    22        prefix="gravatar"
    33        categorie="communication"
    4         version="1.5.8"
     4        version="1.6.0"
    55        etat="stable"
    66        compatibilite="[2.0.0;3.1.*]"
  • _plugins_/gravatar/plugin.xml

    r88521 r88543  
    33        <auteur>Thomas Beaumanoir, [Clever Age->http://www.clever-age.com], Fil et Cedric</auteur>
    44        <icon>images/gravatar-64.png</icon>
    5         <version>1.5.8</version>
     5        <version>1.6.0</version>
    66        <etat>stable</etat>
    77        <slogan>
Note: See TracChangeset for help on using the changeset viewer.