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
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 "<center><font class=\"content\">Avatar for " . $cookie[1] .
" Saved!</center></font><br><br>";
echo "<center>Tu nuevo Gravatar :<br><br><IMG alt=\"\" src=\"$avatar\"><br><br>[ <a href=\"modules.php?name=$module_name&op=edituser\">Back to Profile</a> | <a href=\"modules.php?name=$module_name\">Done</a> ]<br><br></center>";
} 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 "<center><font class=\"content\">Avatar for " . $cookie[1] .
" Saved!</center></font><br><br>";
echo "<center>Tu nuevo Gravatar :<br><br><IMG alt=\"\" src=\"$avatar\"><br><br>[ <a href=\"modules.php?name=$module_name&op=edituser\">Back to Profile</a> | <a href=\"modules.php?name=$module_name\">Done</a> ]<br><br></center>";
} 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 "<center><font class=\"content\">Avatar for " . $cookie[1] .
" Saved!</center></font><br><br>";
if (ereg("(http)", $avatar)) {
echo "<center>Your New Avatar:<br><br><IMG alt=\"\" src=\"$avatar\"><br><br>[ <a href=\"modules.php?name=$module_name&op=edituser\">Back to Profile</a> | <a href=\"modules.php?name=$module_name\">Done</a> ]<br><br></center>";
} elseif ($avatar) {
echo "<center>Your New Avatar:<br><br><IMG alt=\"\" src=\"modules/Forums/images/avatars/$avatar\"><br><br>[ <a href=\"modules.php?name=$module_name&op=edituser\">Back to Profile</a> | <a href=\"modules.php?name=$module_name\">Done</a> ]<br><br></center>";
}
} else {
echo "<center><b>Error:</b> Wrong avatar format! Avatars can only be gif, jpg, or png format.<br />" .
_GOBACK . "</center>";
}
} //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 . '<br />' . $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:
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 , es funcional.