Enabling Gravatars on pMachine Pro
This is a simple hack that will get gravatars displayed on you pMachine pro comments, it will also cache them locally incase gravatar.com goes down.
open your pMachine/pm/lib/comments.fns.php
find the function weblog_comments()
insert this line
$gravatarlink=GetGravatar($email);
at about line 612
it should look something like
$if_email = ''; $if_email_as_link = ''; $if_email_or_url_as_link = ''; $if_email_as_name = $name; $if_email_or_url_as_name = $name; $if_url_or_email_as_name = $name; $if_url_as_name = $name; $gravitarlink=GetGravatar($email);
further down in the function find the bit that defines the tags to go in the comment template around line 780 and add
'%%gravatar%%' => $gravatarlink
so it will look like
'0' => date("Z",$t_stamp),
'' => $avatar,
'Member' => $moderation_level,
'%%gravatar%%' => $gravatarlink
);
once thats done you can now include the %%gravatar%% tag into your comment display template to display the commentors gravatar
Add these functions to the bottom of the file
function wp_gravatar_info($md5 = '') {
//taken from gravatar plugin for wordpress
if ('' == $md5) { return false; }
$r = array();
$foo = @file("http://www.gravatar.com/info/md5/$md5");
if (! $foo) return false;
array_shift($foo); // strip leading declaration
array_shift($foo); // strip opening
array_pop($foo); // strip closing
foreach ($foo as $bar) {
$matched = array();
preg_match_all("/([^<>])+/", $bar, $matched);
$r[$matched[0][1]] = $matched[0][2];
}
return $r;
}
function Download_Gravatar($id, $local, $remote)
{
// we don't know about this gravatar yet, let's look for it
$response = wp_gravatar_info($id);
if ('200' == $response
)
{
// it's not an error, so let's make a local copy
if ( (is_writeable($local)) && (ini_get('allow_url_fopen')) )
{
$cached = copy ($remote.$id, $local.$id.".TMP");
if (! $cached)
{
// looks like the copy failed, delete the TMP
unlink($local.$id.".TMP");
return 0;
} else
{
// we copied successfully
rename($local.$id.".TMP", $local.$id);
return 1;
}
}
} else {
return 0;
}
}
function Gravitar_Cached($id, $local, $remote)
{
$cachetime="34200";
if(file_exists($local.$id))
//if the file exists on the server
{
//check its date
$now=time();
$ftime=filemtime($local.$id);
//echo "boo".filectime($remote.$id);
if($now-$ftime>$cachetime)
//if the time difference is more then the cache time then get a newer copy
{
//download it
Download_Gravatar($id, $local, $remote);
}
return 1;
}else
{
//download it its new
return Download_Gravatar($id, $local, $remote);
}
}
function GetGravatar($email)
//function to return the gravitar requiered
{
$gravatar_url="http://www.gravatar.com/avatar.php?gravatar_id=";
$gravatar_id=md5($email);
$gravatar_local=$_SERVER['DOCUMENT_ROOT'] . "/pMachine/gravatarcache/";
$gravatar_local_url=$_SERVER['SERVER_ROOT'] . "/pMachine/gravatarcache/";
$gravatar_none=$_SERVER['SERVER_ROOT'] . "/pMachine/gravatarcache/none.gif";
if(Gravitar_Cached($gravatar_id, $gravatar_local, $gravatar_url))
{
$gravatar_path=$gravatar_local_url.$gravatar_id;
$gravatar = "
";
}else
{
$gravatar_path=$gravatar_none;
$gravatar = "
class='gravatar' alt='Get your own gravatar from www.gravatar.com' width=80 height=80 xsrc='$gravatar_path'>";
}
return $gravatar;
}
you will need to create a /pMachine/gravatarcache directory on your server and add a none.gif to represents an unknown gravatar in the even one isn’t returned by the server (I suspect theres a flaw here but I havnt been able to test it)
You might want to modify the image using css and modify the template code to get things to show how you want
