1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-10-22 12:16:11 +02:00
Files
php-phpbb/phpBB/includes/avatar/driver/gravatar.php
Marc Alexander 517d3f56ac [feature/avatars] Use correct names of input fields
The name of the avatar input fields seem to have been copied from the local
avatar (gallery avatar). Since the input fields have different names in
the template files of the remote and gravatar avatars this will not
properly default to the entered values.
Additionally, the focused driver wasn't correctly filtered causing use to
always default to no avatar.

PHPBB3-10018
2012-11-16 17:39:32 +01:00

141 lines
3.6 KiB
PHP

<?php
/**
*
* @package avatar
* @copyright (c) 2011 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Handles avatars hosted at gravatar.com
* @package avatars
*/
// @todo: rename classes to phpbb_ext_foo_avatar_driver_foo and similar
class phpbb_avatar_driver_gravatar extends phpbb_avatar_driver
{
/**
* We'll need to create a different type of avatar for gravatar
*/
public $custom_html = true;
/**
* @inheritdoc
*/
public function get_data($row, $ignore_config = false)
{
// @todo: add allow_avatar_gravatar to database_update.php etc.
if ($ignore_config || $this->config['allow_avatar_gravatar'])
{
return array(
'src' => $row['avatar'],
'width' => $row['avatar_width'],
'height' => $row['avatar_height'],
);
}
else
{
return array(
'src' => '',
'width' => 0,
'height' => 0,
);
}
}
/**
* @inheritdoc
*/
public function get_custom_html($row, $ignore_config = false, $alt = '')
{
$html = '<img src="http://www.gravatar.com/avatar/' . md5(strtolower(trim($row['avatar']))) .
(($row['avatar_width'] || $row['avatar_height']) ? ('?s=' . max($row['avatar_width'], $row['avatar_height'])) : '') . '" ' .
($row['avatar_width'] ? ('width="' . $row['avatar_width'] . '" ') : '') .
($row['avatar_height'] ? ('height="' . $row['avatar_height'] . '" ') : '') .
'alt="' . ((!empty($user->lang[$alt])) ? $user->lang[$alt] : $alt) . '" />';
return $html;
}
/**
* @inheritdoc
*/
public function prepare_form($template, $row, &$error)
{
$template->assign_vars(array(
'AV_GRAVATAR_WIDTH' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar_width']) ? $row['avatar_width'] : $this->request->variable('av_gravatar_width', 0),
'AV_GRAVATAR_HEIGHT' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar_height']) ? $row['avatar_height'] : $this->request->variable('av_gravatar_width', 0),
'AV_GRAVATAR_EMAIL' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar']) ? $row['avatar'] : '',
));
return true;
}
/**
* @inheritdoc
*/
public function process_form($template, $row, &$error)
{
$email = $this->request->variable('av_gravatar_email', '');
$width = $this->request->variable('av_gravatar_width', 0);
$height = $this->request->variable('av_gravatar_height', 0);
require_once($this->phpbb_root_path . 'includes/functions_user' . $this->phpEx);
$error = array_merge($error, validate_data(array(
'email' => $email,
), array(
'email' => array(
array('string', false, 6, 60),
array('email')),
)));
if (!empty($error))
{
return false;
}
// Make sure getimagesize works...
if (function_exists('getimagesize'))
{
// build URL
// @todo: add https support
$url = 'http://www.gravatar.com/avatar/' . md5(strtolower(trim($email)));
if (($width <= 0 || $height <= 0) && (($image_data = @getimagesize($url)) === false))
{
$error[] = 'UNABLE_GET_IMAGE_SIZE';
return false;
}
if (!empty($image_data) && ($image_data[0] <= 0 || $image_data[1] <= 0))
{
$error[] = 'AVATAR_NO_SIZE';
return false;
}
$width = ($width && $height) ? $width : $image_data[0];
$height = ($width && $height) ? $height : $image_data[1];
}
if ($width <= 0 || $height <= 0)
{
$error[] = 'AVATAR_NO_SIZE';
return false;
}
return array(
'avatar' => $email,
'avatar_width' => $width,
'avatar_height' => $height,
);
}
}