1<?php 2/** 3 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4 * @author Esther Brunner <wikidesign@gmail.com> 5 */ 6 7// must be run within Dokuwiki 8if (!defined('DOKU_INC')) die(); 9 10class helper_plugin_avatar extends DokuWiki_Plugin { 11 12 function getMethods() { 13 $result = array(); 14 $result[] = array( 15 'name' => 'getXHTML', 16 'desc' => 'returns the XHTML to display an avatar', 17 'params' => array( 18 'user or mail' => 'string', 19 'title (optional)' => 'string', 20 'align (optional)' => 'string', 21 'size (optional)' => 'integer'), 22 'return' => array('xhtml' => 'string'), 23 ); 24 return $result; 25 } 26 27 /** 28 * Returns the XHTML of the Avatar 29 */ 30 function getXHTML($user, $title = '', $align = '', $size = NULL) { 31 32 // determine the URL of the avatar image 33 $src = $this->_getAvatarURL($user, $title, $size); 34 35 // output with vcard photo microformat 36 return '<img src="'.$src.'" class="media'.$align.' photo fn"'. 37 ' title="'.$title.'" alt="'.$title.'" width="'.$size.'"'. 38 ' height="'.$size.'" />'; 39 } 40 41 /** 42 * Main function to determine the avatar to use 43 */ 44 function _getAvatarURL($user, &$title, &$size) { 45 global $auth; 46 47 if (!$size || !is_int($size)) $size = $this->getConf('size'); 48 49 if(is_array($user)) { 50 $mail = $user['mail']; 51 $name = $user['name']; 52 $user = $user['user']; 53 } else { 54 $mail = $user; 55 } 56 57 // check first if a local image for the given user exists 58 $userinfo = $auth->getUserData($user); 59 if (is_array($userinfo)) { 60 if (($userinfo['name']) && (!$title)) $title = hsc($userinfo['name']); 61 $ns = $this->getConf('namespace'); 62 $formats = array('.png', '.jpg', '.gif'); 63 foreach ($formats as $format) { 64 if(isset($user)) $user_img = mediaFN($ns.':'.$user.$format); 65 if(isset($name)) $name_img = mediaFN($ns.':'.$name.$format); 66 if(@file_exists($user_img)) {; 67 $src = ml($ns.':'.$user.$format, array('w' => $size, 'h' => $size)); 68 break; 69 } elseif(@file_exists($name_img)) { 70 $src = ml($ns.':'.$name.$format, array('w' => $size, 'h' => $size)); 71 } 72 } 73 if (empty($src)) $mail = $userinfo['mail']; 74 } 75 76 if (empty($src)) { 77 $seed = md5(dokuwiki\Utf8\PhpString::strtolower($mail)); 78 79 if (function_exists('imagecreatetruecolor')) { 80 // we take the monster ID as default 81 $file = 'monsterid.php?seed='.$seed.'&size='.$size.'&.png'; 82 83 } else { 84 // GDlib is not availble - resort to default images 85 switch ($size) { 86 case 20: case 40: case 80: 87 $file = 'images/default_'.$size.'.png'; 88 break; 89 default: 90 $file = 'images/default_120.png'; 91 } 92 } 93 $default = ml(DOKU_URL.'/lib/plugins/avatar/'.$file, 'cache=recache', true, '&', true); 94 95 // do not pass invalid or empty emails to gravatar site... 96 if (mail_isvalid($mail)){ 97 if (is_ssl()) { 98 $src = 'https://secure.gravatar.com/'; 99 } else { 100 $src = 'http://www.gravatar.com/'; 101 } 102 $src .= 'avatar/'.$seed.'?s='.$size.'&d='.$this->getConf('default').'&r='.$this->getConf('rating').'&.jpg'; 103 $src = ml($src); 104 // show only default image if invalid or empty email given 105 } else { 106 $src = $default; 107 } 108 } 109 110 if (!$title) $title = obfuscate($mail); 111 112 return $src; 113 } 114} 115// vim:ts=4:sw=4:et:enc=utf-8: 116