Merge pull request #588 from ilosada/4507

C#4507 - Add Gravatar support
1.10.x
Yannick Warnier 11 years ago
commit 8c5b384999
  1. 35
      main/inc/lib/api.lib.php
  2. 58
      main/inc/lib/usermanager.lib.php

@ -1404,9 +1404,9 @@ function _api_format_user($user, $add_password = false)
// Getting user avatar. // Getting user avatar.
$picture_filename = trim($result['picture_uri']); $picture_filename = trim($result['picture_uri']);
$avatar = api_get_path(WEB_CODE_PATH).'img/unknown.jpg'; $result['avatar'] = api_get_path(WEB_CODE_PATH).'img/unknown.jpg';
$avatar_small = api_get_path(WEB_CODE_PATH).'img/unknown_22.jpg'; $result['avatar_small'] = api_get_path(WEB_CODE_PATH).'img/unknown_22.jpg';
$avatar_sys_path = api_get_path(SYS_CODE_PATH).'img/unknown.jpg'; $result['avatar_sys_path'] = api_get_path(SYS_CODE_PATH).'img/unknown.jpg';
$dir = 'upload/users/'.$user_id.'/'; $dir = 'upload/users/'.$user_id.'/';
//if (!empty($picture_filename) && api_is_anonymous() ) { //Why you have to be anonymous? //if (!empty($picture_filename) && api_is_anonymous() ) { //Why you have to be anonymous?
@ -1417,16 +1417,29 @@ function _api_format_user($user, $add_password = false)
} }
$image_sys_path = api_get_path(SYS_CODE_PATH).$dir.$picture_filename; $image_sys_path = api_get_path(SYS_CODE_PATH).$dir.$picture_filename;
if (file_exists($image_sys_path) && !is_dir($image_sys_path)) { if ($picture_filename) {
$avatar = api_get_path(WEB_CODE_PATH).$dir.$picture_filename; if (file_exists($image_sys_path)) {
$avatar_small = api_get_path(WEB_CODE_PATH).$dir.'small_'.$picture_filename; $result['avatar'] = api_get_path(WEB_CODE_PATH).$dir.$picture_filename;
$avatar_sys_path = api_get_path(SYS_CODE_PATH).$dir.$picture_filename; $result['avatar_small'] = api_get_path(WEB_CODE_PATH).$dir.'small_'.$picture_filename;
$result['avatar_sys_path'] = api_get_path(SYS_CODE_PATH).$dir.$picture_filename;
} else if (api_get_configuration_value('gravatar_enabled')) {
$userEmail = isset($user['email']) ? $user['email'] : '';
$gravatarType = api_get_configuration_value('gravatar_type');
$avatarPaths = array(
'avatar' => $result['avatar'],
'avatar_small' => $result['avatar_small'],
'avatar_sys_path' => $result['avatar_sys_path']
);
foreach ($avatarPaths as $key => $value) {
$avatarSize = api_getimagesize($value);
$avatarSize = $avatarSize['width'] > $avatarSize['height'] ?
$avatarSize['width'] :
$avatarSize['height'];
$result[$key] = UserManager::getGravatar($userEmail, $avatarSize, $gravatarType);
}
}
} }
$result['avatar'] = $avatar;
$result['avatar_sys_path'] = $avatar_sys_path;
$result['avatar_small'] = $avatar_small;
if (isset($user['user_is_online'])) { if (isset($user['user_is_online'])) {
$result['user_is_online'] = $user['user_is_online'] == true ? 1 : 0; $result['user_is_online'] = $user['user_is_online'] == true ? 1 : 0;
} }

@ -1244,21 +1244,24 @@ class UserManager
$base = ''; $base = '';
} }
$noPicturePath = array('dir' => $base.'img/', 'file' => 'unknown.jpg');
if (empty($id) || empty($type)) { if (empty($id) || empty($type)) {
return $anonymous ? array('dir' => $base.'img/', 'file' => 'unknown.jpg') : array('dir' => '', 'file' => ''); return $anonymous ? $noPicturePath : array('dir' => '', 'file' => '');
} }
$user_id = intval($id); $user_id = intval($id);
$user_table = Database :: get_main_table(TABLE_MAIN_USER); $user_table = Database :: get_main_table(TABLE_MAIN_USER);
$sql = "SELECT picture_uri FROM $user_table WHERE user_id=".$user_id; $sql = "SELECT email, picture_uri FROM $user_table WHERE user_id=".$user_id;
$res = Database::query($sql); $res = Database::query($sql);
if (!Database::num_rows($res)) { if (!Database::num_rows($res)) {
return $anonymous ? array('dir' => $base.'img/', 'file' => 'unknown.jpg') : array('dir' => '', 'file' => ''); return $anonymous ? $noPicturePath : array('dir' => '', 'file' => '');
} }
$user = Database::fetch_array($res); $user = Database::fetch_array($res);
$picture_filename = trim($user['picture_uri']); $picture_filename = trim($user['picture_uri']);
if (api_get_setting('split_users_upload_directory') === 'true') { if (api_get_setting('split_users_upload_directory') === 'true') {
@ -1271,16 +1274,34 @@ class UserManager
} else { } else {
$dir = $base.'upload/users/'.$user_id.'/'; $dir = $base.'upload/users/'.$user_id.'/';
} }
if (empty($picture_filename) && $anonymous) {
return array('dir' => $base.'img/', 'file' => 'unknown.jpg'); if (!$picture_filename || ($picture_filename && !file_exists($dir.$picture_filename))) {
if ($anonymous) {
return $noPicturePath;
}
if (api_get_configuration_value('gravatar_enabled')) {
$avatarSize = api_getimagesize($noPicturePath['dir'].$noPicturePath['file']);
$avatarSize = $avatarSize['width'] > $avatarSize['height'] ?
$avatarSize['width'] :
$avatarSize['height'];
return array(
'dir' => '',
'file' => self::getGravatar(
$user['email'],
$avatarSize,
api_get_configuration_value('gravatar_type')
)
);
}
} }
return array('dir' => $dir, 'file' => $picture_filename); return array('dir' => $dir, 'file' => $picture_filename);
} }
/** /**
* Creates new user photos in various sizes of a user, or deletes user photos. * Creates new user photos in various sizes of a user, or deletes user photos.
* Note: This method relies on configuration setting from main/inc/conf/profile.conf.php * Note: This method relies on configuration setting from main/inc/conf/profile.conf.php
* @param int $user_id The user internal identitfication number. * @param int $user_id The user internal identification number.
* @param string $file The common file name for the newly created photos. * @param string $file The common file name for the newly created photos.
* It will be checked and modified for compatibility with the file system. * It will be checked and modified for compatibility with the file system.
* If full name is provided, path component is ignored. * If full name is provided, path component is ignored.
@ -5197,4 +5218,29 @@ EOF;
return false; return false;
} }
/**
* Get either a Gravatar URL or complete image tag for a specified email address.
*
* @param string $email The email address
* @param string $s Size in pixels, defaults to 80px [ 1 - 2048 ]
* @param string $d Default imageset to use [ 404 | mm | identicon | monsterid | wavatar ]
* @param string $r Maximum rating (inclusive) [ g | pg | r | x ]
* @param boole $img True to return a complete IMG tag False for just the URL
* @param array $atts Optional, additional key/value attributes to include in the IMG tag
* @return String containing either just a URL or a complete image tag
* @source http://gravatar.com/site/implement/images/php/
*/
public static function getGravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts = array() ) {
$url = 'http://www.gravatar.com/avatar/';
$url .= md5( strtolower( trim( $email ) ) );
$url .= "?s=$s&d=$d&r=$r";
if ( $img ) {
$url = '<img src="' . $url . '"';
foreach ( $atts as $key => $val )
$url .= ' ' . $key . '="' . $val . '"';
$url .= ' />';
}
return $url;
}
} }

Loading…
Cancel
Save