Posted by SirAntuans on Mar 3, 2010
Implementar Gravatar en Php Nuke

Implementar Gravatar en Php Nuke

Gravatar tu avatar global …disponible en portales como WordPress entre otros , ¿pero que hay de Php Nuke?, nukeros  tengo una buena noticia que darles y es que sin hacer grandes cambios podemos implementar Gravatar para el perfil Nuke.

Descarga este archivo Clase Gravatar (166 descargas) , descomprímelo y copialo a la carpeta includes de tu nuke (tomado de Clase Gravatar )

Localiza el archivo index.php del modulo Your_Account e inserta el siguiente bloque  antes de la función userCheck (este bloque nos servira para obtener el email del perfil nuke y con ese dato ir a buscar el avatar)

#Uso de Gravatar
include_once("includes/classGravatar.php");

function getemailfromuid($uid)
{
    global $prefix, $db, $user_prefix;
    $sql = "SELECT user_email, username,user_id FROM " . $user_prefix .
        "_users WHERE user_id='$uid'";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $correo_obtenido = $row[user_email];
    return $correo_obtenido;
}

O bien podemos insertar el código anterior en el archivo mainfile.php justo al final del archivo antes del ” ?> ”

Hasta ahí vamos bien?, perfecto ubica en el mismo archivo index.php del modulo Your_Account la función llamada avatarlinksave, donde vamos a incluir una pequeña corrección para que al ingresar una “G” ó “g” en el área donde se definen imagenes remotas, vayamos directo a gravatar.com a obtener el avatar, sin afectar la funcionalidad actual, ya que si introduces un link remoto este seguirá funcionando como de costumbre.

busca en tu archivo index.php funcion avatarlinksave:

   $sql = "SELECT * FROM " . $prefix .
        "_bbconfig WHERE config_name = 'allow_avatar_remote'";
    $result = $db->sql_query($sql);
    if ($row = $db->sql_fetchrow($result)) {
        $allow_avatar_remote = $row['config_value'];
    } else {
        $allow_avatar_remote = 0;
    }
    if (is_user($user) and $allow_avatar_remote) {
        getusrinfo($user);
        cookiedecode($user);
        include ("header.php");
        title("Seleccion de Avatar Correcta!");
        OpenTable();
        nav();
        CloseTable();

Justo después del CloseTable() introducimos lo siguiente:

#Uso de Gravatar      
        if ((strlen($avatar)==1)&&(strtoupper($avatar)=="G")){
            $correouser =getemailfromuid(intval($cookie[0]));
            #$default = "tu imagen default"; // Optional
            $gravatar = new Gravatar($correouser, $default);
            $gravatar->size = 80;
            $gravatar->rating = "G";
            $gravatar->border = "FF0000";
            $avatar = $gravatar->getSrc();
            $gravatarON = true;     
        } else{
            $gravatarON =false;
        }
#End Uso Gravatar

Posterior a el código descrito encontramos:

        OpenTable();
        if (!preg_match("#^http:\/\/#i", $avatar)) {
            $avatar = "http://" . $avatar;
        }

Justo después de esta condición y antes del ” if (preg_match(“#^(http:\/\/” ….) insertamos

#Uso de Gravatar
    if ($gravatarON){
            $db->sql_query("UPDATE " . $user_prefix . "_users SET user_avatar='$avatar', user_avatar_type='2' WHERE user_id = '" .
                intval($cookie[0]) . "'");
            echo "
Avatar for " . $cookie[1] .                 " Saved!


";             echo "
Tu nuevo Gravatar :

\"\"

[ Back to Profile | Done ]

";         } else {

Y antes del siguiente CloseTable() , cerramos el if

    } //End- Uso de Gravatar

 La función queda así:

function avatarlinksave($avatar)
{
    global $user_prefix, $db, $module_name, $user, $cookie, $prefix;
    $sql = "SELECT * FROM " . $prefix .
        "_bbconfig WHERE config_name = 'allow_avatar_remote'";
    $result = $db->sql_query($sql);
    if ($row = $db->sql_fetchrow($result)) {
        $allow_avatar_remote = $row['config_value'];
    } else {
        $allow_avatar_remote = 0;
    }
    if (is_user($user) and $allow_avatar_remote) {
        getusrinfo($user);
        cookiedecode($user);
        include ("header.php");
        title("Seleccion de Avatar Correcta!");
        OpenTable();
        nav();
        CloseTable();
#Uso de Gravatar      
        if ((strlen($avatar)==1)&&(strtoupper($avatar)=="G")){
            $correouser =getemailfromuid(intval($cookie[0]));
            $default = ""; // Optional
            $gravatar = new Gravatar($correouser, $default);
            $gravatar->size = 80;
            $gravatar->rating = "G";
            $gravatar->border = "FF0000";
            $avatar = $gravatar->getSrc();
            $gravatarON = true;     
        } else{
            $gravatarON =false;
        }
#End Uso Gravatar
        OpenTable();
        if (!preg_match("#^http:\/\/#i", $avatar)) {
            $avatar = "http://" . $avatar;
        }
#Uso de Gravatar
    if ($gravatarON){
            $db->sql_query("UPDATE " . $user_prefix . "_users SET user_avatar='$avatar', user_avatar_type='2' WHERE user_id = '" .
                intval($cookie[0]) . "'");
            echo "
Avatar for " . $cookie[1] .                 " Saved!


";             echo "
Tu nuevo Gravatar :

\"\"

[ Back to Profile | Done ]

";         } else {         if (preg_match("#^(http:\/\/[a-z0-9\-]+?\.([a-z0-9\-]+\.)*[a-z]+\/.*?\.(gif|jpg|png)$)#is",             $avatar) && !eregi(".php", $avatar) && !eregi(".js", $avatar) && !eregi(".cgi",             $avatar)) {             $db->sql_query("UPDATE " . $user_prefix . "_users SET user_avatar='$avatar', user_avatar_type='2' WHERE user_id = '" .                 intval($cookie[0]) . "'");             echo "
Avatar for " . $cookie[1] .                 " Saved!


";             if (ereg("(http)", $avatar)) {                 echo "
Your New Avatar:

\"\"

[ Back to Profile | Done ]

";             } elseif ($avatar) {                 echo "
Your New Avatar:

\"\"

[ Back to Profile | Done ]

";             }         } else {             echo "
Error: Wrong avatar format! Avatars can only be gif, jpg, or png format.
" .                 _GOBACK . "
";         }     } //End- Uso de Gravatar         CloseTable();         include ("footer.php");     } }

Ahora editemos el archivo usercp_avatar.php ubicado en la carpeta includes, y localiza la función user_avatar_url

Aqui tenemos algunas variantes , les presento la función completa la cual pueden reemplazar sin contratiempos , estoy marcando en negritas los cambios relevantes, agregamos la variable cookie en globales y recuperamos el avatar de gravatar de la misma forma que en Your_Account, cabe mencionar que debido a que Gravatar nos regresa un link incluyendo un archivo .php, no tenemos que filtrarlo y sigue sin ser afectada al funcionalidad actual.

function user_avatar_url($mode, &$error, &$error_msg, $avatar_filename)
{
 global $lang,$cookie;
#Uso de Gravatar      
    if ((strlen($avatar_filename)==1)&&(strtoupper($avatar_filename)=="G")){
        $correouser =getemailfromuid(intval($cookie[0]));
        $default = ""; // Optional
        $gravatar = new Gravatar($correouser, $default);
        $gravatar->size = 80;
        $gravatar->rating = "G";
        $gravatar->border = "FF0000";
        $avatar_filename = $gravatar->getSrc();
        $gravatarON = true;     
    } else{
        $gravatarON =false;
    }
#End Uso Gravatar  

 if ( !preg_match('#^(http)|(ftp):\/\/#i', $avatar_filename) )
 {
  $avatar_filename = 'http://' . $avatar_filename;
 }
 
 $avatar_filename = substr($avatar_filename, 0, 100);
    if($gravatarON==false)
      if ( !preg_match("#^((ht|f)tp://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png))$)#is", $avatar_filename) )
    {
        $error = true;
     $error_msg = ( !empty($error_msg) ) ? $error_msg . '
' . $lang['Wrong_remote_avatar_format'] : $lang['Wrong_remote_avatar_format'];         return;     }     return ( $mode == 'editprofile' ) ? ", user_avatar = '" . str_replace("\'", "''", $avatar_filename) . "', user_avatar_type = " . USER_AVATAR_REMOTE : ''; }

 

Resumen:

  • Copiamos el archivo classGravatar.php a la carpeta includes
  • Ubicamos el archivo index.php (modulo Your_Account)
  • Insertamos el include del archivo classGravatar.php
  • Insertamos la función getemailfromuid($uid)
  • Ubicamos la función avatarlinksave($avatar) e incluimos los bloques mencionados

Con los cambios descritos, desde el perfil nuke si en lugar de introducir una dirección remota solo escribes una “G” el mod recupera la imagen que tengas cargada en Gravatar.php

*OPCIONAL* si desde que tus usuarios se registran quieres que su avatar se cargue automáticamente ubica la función activate() en el index.php del dir Your_Account

Y justo antes del código :

          $db->sql_query("INSERT INTO " . $user_prefix .
                "_users (user_id, username, user_email, user_password, user_avatar, user_avatar_type, user_regdate, user_lang,idstatus) VALUES (NULL, '" .
                $row['username'] . "', '" . $row['user_email'] . "', '$user_password', '$user_avatar', '$user_avatar_type', '" .
                $row['user_regdate'] . "', '$language','$esinvitado')");
            $result2 = $db->sql_query("SELECT user_id FROM " . $user_prefix .
                "_users WHERE username='" . $row['username'] . "'");
            $row2 = $db->sql_fetchrow($result2);
            $guserid = intval($row2['user_id']);
  

Agrega lo siguiente :

       $default = ""; // Optional
            $gravatar = new Gravatar($row['user_email'], $default);
            $gravatar->size = 80;
            $gravatar->rating = "G";
            $gravatar->border = "FF0000";
            $avatar = $gravatar->getSrc();
            if ($avatar == $default) {
                $user_avatar_type = 3;  
                $user_avatar = "gallery/blank.gif";
            } else {
                $user_avatar_type = 2;  
                $user_avatar = $avatar;
            }

El código tiene un pequeño bug pero funciona perfectamente (notan a que me refiero??) bueno se los dejo de tarea.

Si tienes algo que comentar puedes escribir aca : Foro

Post a Comment

Comments are closed.

Pin It on Pinterest

Share This