| 
<?php/**
 * Generates URLs for Gravatar.com service using e-mails. Also caches the results.
 *
 * @author Stanis Shramko <mailto:[email protected]>
 * @version 1.0
 * @license LGPL
 * @link http://www.gravatar.com
 * @link http://webfari.ru
 * @copyright Webfari
 */
 class GravatarUrlGenerator {
 
 /**
 * Keeps the URL of Gravatar script
 */
 const GRAVATAR_URL = 'http://www.gravatar.com/avatar.php';
 
 /**
 * Contains the possible ratings
 *
 * @var array
 */
 private static $GRAVATAR_RATINGS = array('G', 'PG', 'R', 'X');
 
 /**
 * Keeps the URLs for Gravatars in the simple hash structure; acts as a cache
 *
 * @var array
 */
 private static $gravatarsCache = array();
 
 /**
 * Returns the Gravatar URL
 *
 * @param $email string email
 * @param $rating rating from GRAVATAR_RATINGS
 * @param $size integer means the size
 * @param $default string default URL if there is no pic
 * @param $useCache boolean to cache the results or not
 * @return string the URL
 */
 public function generateUrl($email, $rating = "G", $size = 80,
 $default = 'http://en.gravatar.com/images/gravatars/no_gravatar.gif', $useCache = true)
 {
 $email = md5(strtolower($email));
 $rating = in_array($rating, self::$GRAVATAR_RATINGS) ? $rating : self::$GRAVATAR_RATINGS[0];
 $size = (int)$size;
 if ($useCache) {
 if (isset(self::$gravatarsCache[$email][$rating . $size])) {
 return self::$gravatarsCache[$email][$rating . $size];
 }
 }
 $args = array(
 'gravatar_id' => $email,
 'default' => $default,
 'size' => $size,
 'rating' => $rating
 );
 $url = self::GRAVATAR_URL . '?' . http_build_query($args);
 if ($useCache) {
 self::$gravatarsCache[$email][$rating . $size] = $url;
 }
 return $url;
 }
 
 }
 
 ?>
 |