Removed broken alt-attribute in avatar img tags
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / user / avatar / Gravatar.class.php
CommitLineData
320f4a6d
MW
1<?php
2namespace wcf\data\user\avatar;
3use wcf\system\exception\SystemException;
4use wcf\system\request\LinkHandler;
320f4a6d 5use wcf\system\WCF;
5242f6d5 6use wcf\util\FileUtil;
d949e64b 7use wcf\util\StringUtil;
320f4a6d
MW
8
9/**
10 * Represents a gravatar.
11 *
12 * @author Marcel Werk
2b6cb5c2 13 * @copyright 2001-2015 WoltLab GmbH
320f4a6d 14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
f4f05aa5 15 * @package com.woltlab.wcf
320f4a6d
MW
16 * @subpackage data.user.avatar
17 * @category Community Framework
18 * @see http://www.gravatar.com
19 */
20class Gravatar extends DefaultAvatar {
21 /**
22 * gravatar base url
23 * @var string
24 */
25 const GRAVATAR_BASE = 'http://gravatar.com/avatar/%s?s=%d&r=g&d=%s';
26
27 /**
28 * gravatar local cache location
29 * @var string
30 */
4ae7fdc1 31 const GRAVATAR_CACHE_LOCATION = 'images/avatars/gravatars/%s-%s.%s';
320f4a6d
MW
32
33 /**
34 * gravatar expire time (days)
35 * @var integer
36 */
37 const GRAVATAR_CACHE_EXPIRE = 7;
38
39 /**
40 * user id
06355ec3 41 * @var integer
320f4a6d
MW
42 */
43 public $userID = 0;
44
45 /**
46 * gravatar e-mail address
47 * @var string
48 */
49 public $gravatar = '';
50
4ae7fdc1
MW
51 /**
52 * file extension of the gravatar image
53 * @var string
54 */
55 public $fileExtension = 'png';
56
320f4a6d
MW
57 /**
58 * urls of this gravatar
59 * @var array<string>
60 */
61 protected $url = array();
62
63 /**
64 * Creates a new Gravatar object.
65 *
66 * @param integer $userID
67 * @param string $gravatar
68 */
4ae7fdc1 69 public function __construct($userID, $gravatar, $fileExtension = 'png') {
320f4a6d
MW
70 $this->userID = $userID;
71 $this->gravatar = $gravatar;
4ae7fdc1 72 $this->fileExtension = $fileExtension;
320f4a6d
MW
73 }
74
75 /**
0ad90fc3 76 * @see \wcf\data\user\avatar\IUserAvatar::getURL()
320f4a6d
MW
77 */
78 public function getURL($size = null) {
79 if ($size === null) $size = $this->size;
d949e64b
MW
80 else {
81 switch ($size) {
82 case 16:
83 case 24:
84 $size = 32;
85 break;
86 case 48:
ba5df26e 87 case 64:
d949e64b
MW
88 $size = 96;
89 break;
90 }
91 }
320f4a6d
MW
92
93 if (!isset($this->url[$size])) {
94 // try to use cached gravatar
4ae7fdc1 95 $cachedFilename = sprintf(self::GRAVATAR_CACHE_LOCATION, md5(mb_strtolower($this->gravatar)), $size, $this->fileExtension);
320f4a6d
MW
96 if (file_exists(WCF_DIR.$cachedFilename) && filemtime(WCF_DIR.$cachedFilename) > (TIME_NOW - (self::GRAVATAR_CACHE_EXPIRE * 86400))) {
97 $this->url[$size] = WCF::getPath().$cachedFilename;
98 }
99 else {
100 $this->url[$size] = LinkHandler::getInstance()->getLink('GravatarDownload', array(
e3369fd2 101 'forceFrontend' => true
320f4a6d
MW
102 ), 'userID='.$this->userID.'&size='.$size);
103 }
104 }
105
106 return $this->url[$size];
107 }
108
109 /**
110 * Checks a given email address for gravatar support.
111 *
112 * @param string $email
113 * @return boolean
114 */
115 public static function test($email) {
956b05f1 116 $gravatarURL = sprintf(self::GRAVATAR_BASE, md5(mb_strtolower($email)), 80, GRAVATAR_DEFAULT_TYPE);
320f4a6d
MW
117 try {
118 $tmpFile = FileUtil::downloadFileFromHttp($gravatarURL, 'gravatar');
119 @unlink($tmpFile);
120 return true;
121 }
122 catch (SystemException $e) {
123 return false;
124 }
125 }
126
d949e64b
MW
127 /**
128 * @see \wcf\data\user\avatar\IUserAvatar::getImageTag()
129 */
130 public function getImageTag($size = null) {
131 if ($size === null) $size = $this->size;
1a6e8c52 132
d949e64b
MW
133 $retinaSize = null;
134 switch ($size) {
135 case 16:
136 $retinaSize = 32;
137 break;
138 case 24:
139 case 32:
140 case 48:
141 $retinaSize = 96;
142 break;
143 case 96:
144 $retinaSize = 128;
145 break;
146 }
147
27509f81 148 return '<img src="'.StringUtil::encodeHTML($this->getURL($size)).'" '.($retinaSize !== null ? ('srcset="'.StringUtil::encodeHTML($this->getURL($retinaSize)).' 2x" ') : '').'style="width: '.$size.'px; height: '.$size.'px" alt="" class="userAvatarImage" />';
d949e64b
MW
149 }
150
320f4a6d 151 /**
0ad90fc3 152 * @see \wcf\data\user\avatar\IUserAvatar::canCrop()
320f4a6d
MW
153 */
154 public function canCrop() {
155 return false;
156 }
157}