diff options
author | Marc Alexander <admin@m-a-styles.de> | 2012-11-13 20:06:44 +0100 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2012-11-13 23:22:56 +0100 |
commit | b91702665a2ad555a172d09429d9beaac7ba88a7 (patch) | |
tree | 1c25ca7af8868433d663395cda3bd309dc607ead | |
parent | 075e7755c3d68621dbb01c993c4d3a00645b2fb3 (diff) | |
download | forums-b91702665a2ad555a172d09429d9beaac7ba88a7.tar forums-b91702665a2ad555a172d09429d9beaac7ba88a7.tar.gz forums-b91702665a2ad555a172d09429d9beaac7ba88a7.tar.bz2 forums-b91702665a2ad555a172d09429d9beaac7ba88a7.tar.xz forums-b91702665a2ad555a172d09429d9beaac7ba88a7.zip |
[feature/avatars] Add barebone gravatar driver
PHPBB3-10018
-rw-r--r-- | phpBB/includes/avatar/driver/core/gravatar.php | 148 | ||||
-rw-r--r-- | phpBB/styles/prosilver/template/ucp_avatar_options_gravatar.html | 11 |
2 files changed, 159 insertions, 0 deletions
diff --git a/phpBB/includes/avatar/driver/core/gravatar.php b/phpBB/includes/avatar/driver/core/gravatar.php new file mode 100644 index 0000000000..a9e4d6c491 --- /dev/null +++ b/phpBB/includes/avatar/driver/core/gravatar.php @@ -0,0 +1,148 @@ +<?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_core_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'] == __CLASS__ || $row['avatar_type'] == 'gravatar') && $row['avatar_width']) ? $row['avatar_width'] : $this->request->variable('av_local_width', 0), + 'AV_GRAVATAR_HEIGHT' => (($row['avatar_type'] == __CLASS__ || $row['avatar_type'] == 'gravatar') && $row['avatar_height']) ? $row['avatar_height'] : $this->request->variable('av_local_width', 0), + 'AV_GRAVATAR_EMAIL' => (($row['avatar_type'] == __CLASS__ || $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); + var_dump($width, $height); + + /* + if (!preg_match('#^(http|https|ftp)://#i', $email)) + { + $url = 'http://' . $url; + }*/ + // @todo: check if we need to check emails + + 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, + ); + } +} diff --git a/phpBB/styles/prosilver/template/ucp_avatar_options_gravatar.html b/phpBB/styles/prosilver/template/ucp_avatar_options_gravatar.html new file mode 100644 index 0000000000..c0bae47162 --- /dev/null +++ b/phpBB/styles/prosilver/template/ucp_avatar_options_gravatar.html @@ -0,0 +1,11 @@ +<dl> + <dt><label for="av_gravatar_email">{L_EMAIL_GRAVATAR_AVATAR}{L_COLON}</label><br /><span>{L_EMAIL_GRAVATAR_AVATAR_EXPLAIN}</span></dt> + <dd><input type="text" name="av_gravatar_email" id="av_gravatar_email" value="{AV_GRAVATAR_EMAIL}" class="inputbox" /></dd> +</dl> +<dl> + <dt><label for="width">{L_GRAVATAR_AVATAR_SIZE}{L_COLON}</label><br /><span>{L_GRAVATAR_AVATAR_EXPLAIN}</span></dt> + <dd> + <label for="av_gravatar_width"><input type="text" name="av_gravatar_width" id="av_gravatar_width" size="3" value="{AV_GRAVATAR_WIDTH}" class="inputbox autowidth" /> {L_PIXEL}</label> × + <label for="av_gravatar_height"><input type="text" name="av_gravatar_height" id="av_gravatar_height" size="3" value="{AV_GRAVATAR_HEIGHT}" class="inputbox autowidth" /> {L_PIXEL}</label> + </dd> +</dl> |