<optiontype>boolean</optiontype>
<defaultvalue>1</defaultvalue>
</option>
- <option name="module_gravatar">
- <categoryname>module.user</categoryname>
- <optiontype>boolean</optiontype>
- <defaultvalue>0</defaultvalue>
- </option>
<option name="module_users_online">
<categoryname>module.user</categoryname>
<optiontype>boolean</optiontype>
<defaultvalue>initials</defaultvalue>
<selectoptions>initials:wcf.acp.option.avatar_default_type.initials
silhouette:wcf.acp.option.avatar_default_type.silhouette</selectoptions>
- </option>
- <option name="gravatar_default_type">
- <categoryname>user.avatar</categoryname>
- <optiontype>select</optiontype>
- <defaultvalue>404</defaultvalue>
- <options>module_gravatar</options>
- <selectoptions>404:wcf.acp.option.gravatar_default_type.404
-identicon:wcf.acp.option.gravatar_default_type.identicon
-wavatar:wcf.acp.option.gravatar_default_type.wavatar
-monsterid:wcf.acp.option.gravatar_default_type.monsterid
-retro:wcf.acp.option.gravatar_default_type.retro</selectoptions>
</option>
<!-- /user.avatar -->
<!-- user.signature -->
<option name="desktop_notification_package_id"/>
<option name="http_send_x_frame_options"/>
<option name="cache_source_memcached_host"/>
+ <option name="module_gravatar"/>
+ <option name="gravatar_default_type"/>
</delete>
</data>
</dl>
{/if}
- {if MODULE_GRAVATAR}
- <dl class="avatarType{if $errorField == 'gravatar'} formError{/if}">
- <dt><img src="https://secure.gravatar.com/avatar/{@$__wcf->user->email|strtolower|md5}?s=96{if GRAVATAR_DEFAULT_TYPE != '404'}&d={@GRAVATAR_DEFAULT_TYPE}{/if}" alt="" class="userAvatarImage icon96"></dt>
- <dd>
- <label><input type="radio" name="avatarType" value="gravatar"{if $avatarType == 'gravatar'} checked{/if}> {lang}wcf.user.avatar.type.gravatar{/lang}</label>
- {if $errorField == 'gravatar'}
- <small class="innerError">
- {if $errorType == 'notFound'}{lang}wcf.user.avatar.type.gravatar.error.notFound{/lang}{/if}
- </small>
- {/if}
- <small>{lang}wcf.user.avatar.type.gravatar.description{/lang}</small>
- </dd>
- </dl>
- {/if}
-
{event name='avatarFields'}
</div>
\define('MODULE_COOKIE_POLICY_PAGE', 1);
\define('MODULE_ATTACHMENT', 1);
\define('MODULE_SMILEY', 1);
-\define('MODULE_GRAVATAR', 1);
\define('MODULE_USERS_ONLINE', 1);
\define('MODULE_USER_RANK', 1);
\define('MODULE_USER_SIGNATURE', 1);
\define('FACEBOOK_PRIVATE_KEY', '');
\define('GOOGLE_PUBLIC_KEY', '');
\define('GOOGLE_PRIVATE_KEY', '');
-\define('GRAVATAR_DEFAULT_TYPE', '404');
\define('SIGNATURE_MAX_IMAGE_HEIGHT', 150);
\define('USER_TITLE_MAX_LENGTH', 25);
\define('USER_FORBIDDEN_TITLES', '');
->columns([
NotNullInt10DatabaseTableColumn::create('packageID'),
]),
+ PartialDatabaseTable::create('wcf1_user')
+ ->columns([
+ TinyintDatabaseTableColumn::create('enableGravatar')
+ ->drop(),
+ VarcharDatabaseTableColumn::create('gravatarFileExtension')
+ ->drop(),
+ ]),
];
</dd>
</dl>
- {if MODULE_GRAVATAR}
- <dl class="avatarType{if $errorType[gravatar]|isset} formError{/if}">
- <dt><img src="https://secure.gravatar.com/avatar/{@$user->email|strtolower|md5}?s=96{if GRAVATAR_DEFAULT_TYPE != '404'}&d={@GRAVATAR_DEFAULT_TYPE}{/if}" alt="" class="userAvatarImage icon96"></dt>
- <dd>
- <label><input type="radio" name="avatarType" value="gravatar"{if $avatarType == 'gravatar'} checked{/if}> {lang}wcf.user.avatar.type.gravatar{/lang}</label>
-
- {if $errorType[gravatar]|isset}
- <small class="innerError">
- {if $errorType[gravatar] == 'notFound'}{lang}wcf.user.avatar.type.gravatar.error.notFound{/lang}{/if}
- </small>
- {/if}
- </dd>
- </dl>
- {/if}
-
{event name='avatarFields'}
</section>
}
}
- if ($this->user->avatarID || $this->user->enableGravatar) {
+ if ($this->user->avatarID) {
$data['avatarURL'] = $this->user->getAvatar()->getURL();
}
namespace wcf\acp\form;
use wcf\data\style\Style;
-use wcf\data\user\avatar\Gravatar;
use wcf\data\user\avatar\UserAvatar;
use wcf\data\user\avatar\UserAvatarAction;
use wcf\data\user\cover\photo\UserCoverPhoto;
if ($this->user->avatarID) {
$this->avatarType = 'custom';
- } elseif (MODULE_GRAVATAR && $this->user->enableGravatar) {
- $this->avatarType = 'gravatar';
}
}
}
$avatarData = [];
- switch ($this->avatarType) {
- case 'none':
- $avatarData = [
- 'avatarID' => null,
- 'enableGravatar' => 0,
- ];
- break;
-
- case 'custom':
- $avatarData = [
- 'enableGravatar' => 0,
- ];
- break;
-
- case 'gravatar':
- $avatarData = [
- 'avatarID' => null,
- 'enableGravatar' => 1,
- ];
- break;
+ if ($this->avatarType === 'none') {
+ $avatarData = [
+ 'avatarID' => null,
+ ];
}
$this->additionalFields = \array_merge($this->additionalFields, $avatarData);
*/
protected function validateAvatar()
{
- if ($this->avatarType != 'custom' && $this->avatarType != 'gravatar') {
+ if ($this->avatarType != 'custom') {
$this->avatarType = 'none';
}
throw new UserInputException('customAvatar');
}
break;
-
- case 'gravatar':
- if (!MODULE_GRAVATAR) {
- $this->avatarType = 'none';
- break;
- }
-
- // test gravatar
- if (!Gravatar::test($this->user->email)) {
- throw new UserInputException('gravatar', 'notFound');
- }
}
} catch (UserInputException $e) {
$this->errorType[$e->getField()] = $e->getType();
+++ /dev/null
-<?php
-
-namespace wcf\action;
-
-use wcf\data\user\avatar\Gravatar;
-use wcf\data\user\avatar\UserAvatar;
-use wcf\data\user\User;
-use wcf\data\user\UserEditor;
-use wcf\system\exception\IllegalLinkException;
-use wcf\system\exception\SystemException;
-use wcf\util\FileUtil;
-use wcf\util\HTTPRequest;
-
-/**
- * Downloads and caches gravatars.
- *
- * @author Marcel Werk
- * @copyright 2001-2019 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package WoltLabSuite\Core\Action
- * @deprecated 5.4 Gravatar is questionable from a privacy perspective.
- */
-class GravatarDownloadAction extends AbstractAction
-{
- /**
- * user id
- * @var int
- */
- public $userID = 0;
-
- /**
- * user object
- * @var User
- */
- public $user;
-
- /**
- * avatar size
- * @var int
- */
- public $size = UserAvatar::AVATAR_SIZE;
-
- /**
- * @inheritDoc
- */
- public function readParameters()
- {
- parent::readParameters();
-
- if (isset($_REQUEST['userID'])) {
- $this->userID = \intval($_REQUEST['userID']);
- }
- $this->user = new User($this->userID);
- if (!$this->user->userID) {
- throw new IllegalLinkException();
- }
- }
-
- /**
- * @inheritDoc
- */
- public function execute()
- {
- parent::execute();
-
- if ($this->user->enableGravatar && MODULE_GRAVATAR) {
- $fileExtension = ($this->user->gravatarFileExtension ?: 'png');
-
- // try to use cached gravatar
- $cachedFilename = \sprintf(
- Gravatar::GRAVATAR_CACHE_LOCATION,
- \md5(\mb_strtolower($this->user->email)),
- $this->size,
- $fileExtension
- );
- if (\file_exists(WCF_DIR . $cachedFilename) && \filemtime(WCF_DIR . $cachedFilename) > (TIME_NOW - (Gravatar::GRAVATAR_CACHE_EXPIRE * 86400))) {
- @\header('Content-Type: image/png');
- @\readfile(WCF_DIR . $cachedFilename);
-
- exit;
- }
-
- // try to download new version
- $gravatarURL = \sprintf(
- Gravatar::GRAVATAR_BASE,
- \md5(\mb_strtolower($this->user->email)),
- $this->size,
- GRAVATAR_DEFAULT_TYPE
- );
- try {
- $request = new HTTPRequest($gravatarURL);
- $request->execute();
- $reply = $request->getReply();
-
- // get mime type and file extension
- $fileExtension = 'png';
- $mimeType = 'image/png';
- if (isset($reply['headers']['Content-Type'])) {
- switch ($reply['headers']['Content-Type']) {
- case 'image/jpeg':
- $mimeType = 'image/jpeg';
- $fileExtension = 'jpg';
- break;
- case 'image/gif':
- $mimeType = 'image/gif';
- $fileExtension = 'gif';
- break;
- }
- }
-
- // save file
- $cachedFilename = \sprintf(
- Gravatar::GRAVATAR_CACHE_LOCATION,
- \md5(\mb_strtolower($this->user->email)),
- $this->size,
- $fileExtension
- );
- \file_put_contents(WCF_DIR . $cachedFilename, $reply['body']);
- FileUtil::makeWritable(WCF_DIR . $cachedFilename);
-
- // update file extension
- if ($fileExtension != $this->user->gravatarFileExtension) {
- $editor = new UserEditor($this->user);
- $editor->update([
- 'gravatarFileExtension' => $fileExtension,
- ]);
- }
-
- @\header('Content-Type: ' . $mimeType);
- @\readfile(WCF_DIR . $cachedFilename);
-
- exit;
- } catch (SystemException $e) {
- // disable gravatar
- $editor = new UserEditor($this->user);
- $editor->update([
- 'enableGravatar' => 0,
- ]);
- }
- }
-
- // fallback to default avatar
- @\header('Content-Type: image/svg+xml');
- @\readfile(WCF_DIR . 'images/avatars/avatar-default.svg');
-
- exit;
- }
-}
* @property-read int $disableAvatar is `1` if the user's avatar has been disabled, otherwise `0`
* @property-read string $disableAvatarReason reason why the user's avatar is disabled
* @property-read int $disableAvatarExpires timestamp at which the user's avatar will automatically be enabled again
- * @property-read int $enableGravatar is `1` if the user uses a gravatar as avatar, otherwise `0`
- * @property-read string $gravatarFileExtension extension of the user's gravatar file
* @property-read string $signature text of the user's signature
* @property-read int $signatureEnableHtml is `1` if HTML will rendered in the user's signature, otherwise `0`
* @property-read int $disableSignature is `1` if the user's signature has been disabled, otherwise `0`
use wcf\data\trophy\TrophyCache;
use wcf\data\user\avatar\AvatarDecorator;
use wcf\data\user\avatar\DefaultAvatar;
-use wcf\data\user\avatar\Gravatar;
use wcf\data\user\avatar\IUserAvatar;
use wcf\data\user\avatar\UserAvatar;
use wcf\data\user\cover\photo\DefaultUserCoverPhoto;
} else {
$this->avatar = new UserAvatar(null, $this->getDecoratedObject()->data);
}
- } elseif (MODULE_GRAVATAR && $this->enableGravatar) {
- $this->avatar = new Gravatar(
- $this->userID,
- $this->email,
- ($this->gravatarFileExtension ?: 'png')
- );
} else {
$parameters = ['avatar' => null];
EventHandler::getInstance()->fireAction($this, 'getAvatar', $parameters);
$userEditor = new UserEditor($user->getDecoratedObject());
$userEditor->update([
'avatarID' => $avatar->avatarID,
- 'enableGravatar' => 0,
]);
} catch (\Exception $e) {
$editor = new UserAvatarEditor($avatar);
+++ /dev/null
-<?php
-
-namespace wcf\data\user\avatar;
-
-use GuzzleHttp\Psr7\Request;
-use Psr\Http\Client\ClientExceptionInterface;
-use wcf\system\io\HttpFactory;
-use wcf\system\request\LinkHandler;
-use wcf\system\WCF;
-
-/**
- * Represents a gravatar.
- *
- * @author Marcel Werk
- * @copyright 2001-2019 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package WoltLabSuite\Core\Data\User\Avatar
- * @see http://www.gravatar.com
- * @deprecated 5.4 Gravatar is questionable from a privacy perspective.
- */
-class Gravatar extends DefaultAvatar
-{
- /**
- * gravatar base url
- * @var string
- */
- const GRAVATAR_BASE = 'http://gravatar.com/avatar/%s?s=%d&r=g&d=%s';
-
- /**
- * gravatar local cache location
- * @var string
- */
- const GRAVATAR_CACHE_LOCATION = 'images/avatars/gravatars/%s-%s.%s';
-
- /**
- * gravatar expire time (days)
- * @var int
- */
- const GRAVATAR_CACHE_EXPIRE = 7;
-
- /**
- * user id
- * @var int
- */
- public $userID = 0;
-
- /**
- * gravatar e-mail address
- * @var string
- */
- public $gravatar = '';
-
- /**
- * file extension of the gravatar image
- * @var string
- */
- public $fileExtension = 'png';
-
- /**
- * urls of this gravatar
- * @var string
- */
- protected $url = '';
-
- /**
- * Creates a new Gravatar object.
- *
- * @param int $userID
- * @param string $gravatar
- * @param string $fileExtension
- */
- public function __construct($userID, $gravatar, $fileExtension = 'png')
- {
- $this->userID = $userID;
- $this->gravatar = $gravatar;
- $this->fileExtension = $fileExtension;
- }
-
- /**
- * @inheritDoc
- */
- public function getURL($size = null)
- {
- if (empty($this->url)) {
- // try to use cached gravatar
- $cachedFilename = \sprintf(
- self::GRAVATAR_CACHE_LOCATION,
- \md5(\mb_strtolower($this->gravatar)),
- $this->size,
- $this->fileExtension
- );
- if (\file_exists(WCF_DIR . $cachedFilename) && \filemtime(WCF_DIR . $cachedFilename) > (TIME_NOW - (self::GRAVATAR_CACHE_EXPIRE * 86400))) {
- $this->url = WCF::getPath() . $cachedFilename;
- } else {
- $this->url = LinkHandler::getInstance()->getLink('GravatarDownload', [
- 'forceFrontend' => true,
- ], 'userID=' . $this->userID);
- }
- }
-
- return $this->url;
- }
-
- /**
- * @inheritDoc
- */
- public function getSafeURL(?int $size = null): string
- {
- return $this->getURL($size);
- }
-
- /**
- * Checks a given email address for gravatar support.
- *
- * @param string $email
- * @return bool
- */
- public static function test($email)
- {
- $gravatarURL = \sprintf(self::GRAVATAR_BASE, \md5(\mb_strtolower($email)), 80, GRAVATAR_DEFAULT_TYPE);
- $client = HttpFactory::getDefaultClient();
- $request = new Request('GET', $gravatarURL);
-
- try {
- $response = $client->send($request);
-
- if ($response->getStatusCode() === 200) {
- return true;
- }
- } catch (ClientExceptionInterface $e) {
- // Ignore exception, because we return false anyways.
- }
-
- return false;
- }
-}
$userEditor->update([
'avatarID' => $avatarID,
- 'enableGravatar' => 0,
]);
// delete old avatar
{
parent::__construct();
- $this->sqlSelects .= "user_table.username, user_table.email, user_table.disableAvatar, user_table.enableGravatar, user_table.gravatarFileExtension";
+ $this->sqlSelects .= "user_table.username, user_table.email, user_table.disableAvatar";
$this->sqlSelects .= ", user_avatar.*";
$this->sqlJoins .= "
{
parent::__construct();
- $this->sqlSelects .= "user_table.username, user_table.email, user_table.disableAvatar, user_table.enableGravatar, user_table.gravatarFileExtension";
+ $this->sqlSelects .= "user_table.username, user_table.email, user_table.disableAvatar";
$this->sqlSelects .= ", user_avatar.*";
$this->sqlJoins .= "
namespace wcf\form;
-use wcf\data\user\avatar\Gravatar;
use wcf\data\user\avatar\UserAvatarAction;
use wcf\data\user\UserAction;
use wcf\system\exception\PermissionDeniedException;
throw new PermissionDeniedException();
}
- if ($this->avatarType != 'custom' && $this->avatarType != 'gravatar') {
+ if ($this->avatarType != 'custom') {
$this->avatarType = 'none';
}
throw new UserInputException('custom');
}
break;
-
- case 'gravatar':
- if (!MODULE_GRAVATAR) {
- $this->avatarType = 'none';
- break;
- }
-
- // test gravatar
- if (!Gravatar::test(WCF::getUser()->email)) {
- throw new UserInputException('gravatar', 'notFound');
- }
- break;
}
}
// update user
$data = [];
- switch ($this->avatarType) {
- case 'none':
- $data = [
- 'avatarID' => null,
- 'enableGravatar' => 0,
- ];
- break;
-
- case 'custom':
- $data = [
- 'enableGravatar' => 0,
- ];
- break;
-
- case 'gravatar':
- $data = [
- 'avatarID' => null,
- 'enableGravatar' => 1,
- ];
- break;
+ if ($this->avatarType === 'none') {
+ $data = [
+ 'avatarID' => null,
+ ];
}
$this->objectAction = new UserAction([WCF::getUser()], 'update', [
'data' => \array_merge($this->additionalFields, $data),
// because of the changed avatar
UserGroupAssignmentHandler::getInstance()->checkUsers([WCF::getUser()->userID]);
- // reset gravatar cache
- if ($this->avatarType == 'gravatar') {
- $pattern = WCF_DIR . \sprintf(
- Gravatar::GRAVATAR_CACHE_LOCATION,
- \md5(\mb_strtolower(WCF::getUser()->email)),
- '*',
- '*'
- );
- $files = \glob($pattern);
- if (!empty($files)) {
- foreach ($files as $file) {
- @\unlink($file);
- }
- }
- }
-
UserProfileHandler::getInstance()->reloadUserProfile();
$this->saved();
if (empty($_POST)) {
if (WCF::getUser()->avatarID) {
$this->avatarType = 'custom';
- } elseif (MODULE_GRAVATAR && WCF::getUser()->enableGravatar) {
- $this->avatarType = 'gravatar';
}
}
}
use wcf\acp\form\UserAddForm;
use wcf\data\blacklist\entry\BlacklistEntry;
use wcf\data\object\type\ObjectType;
-use wcf\data\user\avatar\Gravatar;
use wcf\data\user\group\UserGroup;
use wcf\data\user\User;
use wcf\data\user\UserAction;
$this->groupIDs = UserGroup::getGroupIDsByType([UserGroup::EVERYONE, UserGroup::GUESTS]);
}
- // check gravatar support
- if (MODULE_GRAVATAR && Gravatar::test($this->email)) {
- $this->additionalFields['enableGravatar'] = 1;
- }
-
// create user
$data = [
'data' => \array_merge($this->additionalFields, [
// Multi-domain setups were removed in 5.6.
\define('DESKTOP_NOTIFICATION_PACKAGE_ID', 1);
+
+ // Gravatars were removed in 6.0.
+ \define('MODULE_GRAVATAR', 0);
+ \define('GRAVATAR_DEFAULT_TYPE', '404');
}
/**
const AVATAR = 1;
/**
- * value of the "user has a gravatar" option
- * @var int
+ * @deprecated 6.0 This value is reserved for backwards compatibility with existing conditions.
*/
const GRAVATAR = 2;
break;
case self::GRAVATAR:
- $objectList->getConditionBuilder()->add('user_table.enableGravatar = ?', [1]);
+ $objectList->getConditionBuilder()->add('1 = 0');
break;
}
}
{
switch ($condition->userAvatar) {
case self::NO_AVATAR:
- return !$user->avatarID && !$user->enableGravatar;
- break;
+ return !$user->avatarID;
case self::AVATAR:
return $user->avatarID != 0;
- break;
case self::GRAVATAR:
- return $user->enableGravatar;
- break;
+ return false;
}
}
self::NO_AVATAR => 'wcf.user.condition.avatar.noAvatar',
self::AVATAR => 'wcf.user.condition.avatar.avatar',
];
- if (MODULE_GRAVATAR) {
- $options[self::GRAVATAR] = 'wcf.user.condition.avatar.gravatar';
- }
return $options;
}
<item name="wcf.acp.option.category.user.password"><![CDATA[Kennwort]]></item>
<item name="wcf.acp.option.category.user.ban"><![CDATA[Filter]]></item>
<item name="wcf.acp.option.category.user.3rdPartyAuth"><![CDATA[Authentifizierung über Drittanbieter]]></item>
- <item name="wcf.acp.option.module_gravatar"><![CDATA[Gravatare (veraltet / nicht empfohlen)]]></item>
- <item name="wcf.acp.option.module_gravatar.description"><![CDATA[Aus Datenschutzgründen ist die Verwendung von Gravataren nicht empfohlen. Sie wird in einer zukünftigen Version entfernt.]]></item>
<item name="wcf.acp.option.module_users_online"><![CDATA[„Benutzer online“-Anzeige]]></item>
<item name="wcf.acp.option.module_user_rank"><![CDATA[Benutzerränge]]></item>
<item name="wcf.acp.option.module_user_signature"><![CDATA[Signaturen]]></item>
<item name="wcf.acp.option.user_authentication_failure_expiration.description"><![CDATA[Legt fest nach welchem Zeitraum protokollierte Anmeldeversuche gelöscht werden.]]></item>
<item name="wcf.acp.option.signature_secret"><![CDATA[Geheimer Schlüssel]]></item>
<item name="wcf.acp.option.signature_secret.description"><![CDATA[Ein geheimer Schlüssel, welcher zur Überprüfung von übertragenen Daten bestimmter Funktionen dient. Dieser Schlüssel ist vertraulich zu behandeln! Der Schlüssel wurde bei der Installation zufällig generiert und sollte nur in Ausnahmefällen geändert werden. <strong>Achtung</strong>: Dieser Schlüssel muss mindestens 15 Zeichen lang sein.]]></item>
- <item name="wcf.acp.option.gravatar_default_type"><![CDATA[Standard Gravatar-Typ]]></item>
- <item name="wcf.acp.option.gravatar_default_type.description"><![CDATA[Der <a class="externalURL" href="https://de.gravatar.com/site/implement/images/#default-image">Standard-Gravatar-Typ</a>, wenn einer E-Mail kein Gravatar zugeordnet werden kann.]]></item>
- <item name="wcf.acp.option.gravatar_default_type.404"><![CDATA[Kein Standard-Gravatar]]></item>
- <item name="wcf.acp.option.gravatar_default_type.identicon"><![CDATA[Identicon]]></item>
- <item name="wcf.acp.option.gravatar_default_type.wavatar"><![CDATA[Wavatar]]></item>
- <item name="wcf.acp.option.gravatar_default_type.monsterid"><![CDATA[Monster-ID]]></item>
- <item name="wcf.acp.option.gravatar_default_type.retro"><![CDATA[Retro]]></item>
<item name="wcf.acp.option.search_engine"><![CDATA[Suche]]></item>
<item name="wcf.acp.option.search_engine.mysql"><![CDATA[MySQL FULLTEXT (Standard)]]></item>
<item name="wcf.acp.option.enable_pluginstore_widget"><![CDATA[Empfohlene Plugins anzeigen]]></item>
<category name="wcf.user.avatar">
<item name="wcf.user.avatar"><![CDATA[Avatar]]></item>
<item name="wcf.user.avatar.edit"><![CDATA[Avatar verwalten]]></item>
- <item name="wcf.user.avatar.error.disabled"><![CDATA[Der Administrator hat{if $__wcf->user->avatarID || $__wcf->user->enableGravatar} {if LANGUAGE_USE_INFORMAL_VARIANT}deinen{else}Ihren{/if} derzeitigen Avatar gesperrt und{/if} {if LANGUAGE_USE_INFORMAL_VARIANT}dir{else}Ihnen{/if} die weitere Nutzungsberechtigung der Avatar-Funktion {if !$__wcf->user->disableAvatarReason}entzogen.{else} aus folgenden Gründen entzogen: {$__wcf->user->disableAvatarReason}{/if}]]></item>
+ <item name="wcf.user.avatar.error.disabled"><![CDATA[Der Administrator hat{if $__wcf->user->avatarID} {if LANGUAGE_USE_INFORMAL_VARIANT}deinen{else}Ihren{/if} derzeitigen Avatar gesperrt und{/if} {if LANGUAGE_USE_INFORMAL_VARIANT}dir{else}Ihnen{/if} die weitere Nutzungsberechtigung der Avatar-Funktion {if !$__wcf->user->disableAvatarReason}entzogen.{else} aus folgenden Gründen entzogen: {$__wcf->user->disableAvatarReason}{/if}]]></item>
<item name="wcf.user.avatar.type.custom"><![CDATA[Eigenen Avatar hochladen]]></item>
<item name="wcf.user.avatar.type.custom.description"><![CDATA[Eigene Avatare dürfen die Dateiendungen {"\n"|str_replace:', ':$__wcf->session->getPermission('user.profile.avatar.allowedFileExtensions')} und maximal eine Dateigröße von {@$__wcf->session->getPermission('user.profile.avatar.maxSize')|filesize} besitzen. Die Mindestgröße für Avatare liegt bei 128×128 Pixel.]]></item>
- <item name="wcf.user.avatar.type.gravatar"><![CDATA[Gravatar verwenden]]></item>
- <item name="wcf.user.avatar.type.gravatar.description"><![CDATA[Bei einem Gravatar handelt es sich um einen global verfügbaren Avatar (Global Recognized Avatar), welcher mit {if LANGUAGE_USE_INFORMAL_VARIANT}deiner{else}Ihrer{/if} E-Mail-Adresse („{$__wcf->user->email}“) verknüpft ist. Auf der folgenden Website {if LANGUAGE_USE_INFORMAL_VARIANT}kannst du{else}können Sie{/if} einen Gravatar anlegen: <a href="https://www.gravatar.com" class="externalURL"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank"{/if}>www.gravatar.com</a>]]></item>
- <item name="wcf.user.avatar.type.gravatar.error.notFound"><![CDATA[Zu {if LANGUAGE_USE_INFORMAL_VARIANT}deiner{else}Ihrer{/if} E-Mail-Adresse konnte kein Gravatar gefunden werden.]]></item>
<item name="wcf.user.avatar.type.none"><![CDATA[Keinen Avatar verwenden]]></item>
<item name="wcf.user.avatar.type.none.description"><![CDATA[Bereits hochgeladene Avatare werden bei Auswahl dieser Option gelöscht.]]></item>
<item name="wcf.user.avatar.upload.error.badImage"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Du hast{else}Sie haben{/if} kein gültiges Bild hochgeladen.]]></item>
<item name="wcf.user.condition.activityPoints"><![CDATA[Punkte]]></item>
<item name="wcf.user.condition.avatar"><![CDATA[Avatar]]></item>
<item name="wcf.user.condition.avatar.avatar"><![CDATA[Eigener Avatar]]></item>
- <item name="wcf.user.condition.avatar.gravatar"><![CDATA[Gravatar]]></item>
<item name="wcf.user.condition.avatar.noAvatar"><![CDATA[Kein Avatar]]></item>
<item name="wcf.user.condition.conditionGroup.contents"><![CDATA[Inhalte]]></item>
<item name="wcf.user.condition.conditionGroup.general"><![CDATA[Allgemeine Daten]]></item>
<item name="wcf.acp.option.category.general.cache.memcached"/>
<item name="wcf.acp.option.category.general.cache.memcached.description"/>
<item name="wcf.acp.option.cache_source_type.memcached"/>
+ <item name="wcf.acp.option.module_gravatar"/>
+ <item name="wcf.acp.option.module_gravatar.description"/>
+ <item name="wcf.acp.option.gravatar_default_type"/>
+ <item name="wcf.acp.option.gravatar_default_type.description"/>
+ <item name="wcf.acp.option.gravatar_default_type.404"/>
+ <item name="wcf.acp.option.gravatar_default_type.identicon"/>
+ <item name="wcf.acp.option.gravatar_default_type.wavatar"/>
+ <item name="wcf.acp.option.gravatar_default_type.monsterid"/>
+ <item name="wcf.acp.option.gravatar_default_type.retro"/>
+ <item name="wcf.user.avatar.type.gravatar"/>
+ <item name="wcf.user.avatar.type.gravatar.description"/>
+ <item name="wcf.user.avatar.type.gravatar.error.notFound"/>
+ <item name="wcf.user.condition.avatar.gravatar"/>
</delete>
</language>
<item name="wcf.acp.option.category.user.password"><![CDATA[Password]]></item>
<item name="wcf.acp.option.category.user.ban"><![CDATA[Filter]]></item>
<item name="wcf.acp.option.category.user.3rdPartyAuth"><![CDATA[Third-Party Authentication]]></item>
- <item name="wcf.acp.option.module_gravatar"><![CDATA[Gravatars (Deprecated / Not Recommended)]]></item>
- <item name="wcf.acp.option.module_gravatar.description"><![CDATA[Enabling Gravatar support is not recommended due to privacy concerns. Gravatar support will be removed in a future version.]]></item>
<item name="wcf.acp.option.module_users_online"><![CDATA[Users online list]]></item>
<item name="wcf.acp.option.module_user_rank"><![CDATA[User ranks]]></item>
<item name="wcf.acp.option.module_user_signature"><![CDATA[Signatures]]></item>
<item name="wcf.acp.option.user_authentication_failure_expiration.description"><![CDATA[Failed login attempt logs will be removed after the following days. Raising the limit will provide a longer history, but at the expense of increased database storage usage.]]></item>
<item name="wcf.acp.option.signature_secret"><![CDATA[Secret Key]]></item>
<item name="wcf.acp.option.signature_secret.description"><![CDATA[A secret key that serves the purpose of validating data to prevent tampering. Keep this key secret! A random key was generated for you during installation, you don’t need to change it. Note: This key must be at least 15 characters long.]]></item>
- <item name="wcf.acp.option.gravatar_default_type"><![CDATA[Default Gravatar Type]]></item>
- <item name="wcf.acp.option.gravatar_default_type.description"><![CDATA[The <a class="externalURL" href="https://de.gravatar.com/site/implement/images/#default-image">default Gravatar type</a> used if no matching Gravatar was found.]]></item>
- <item name="wcf.acp.option.gravatar_default_type.404"><![CDATA[No default Gravatar]]></item>
- <item name="wcf.acp.option.gravatar_default_type.identicon"><![CDATA[Identicon]]></item>
- <item name="wcf.acp.option.gravatar_default_type.wavatar"><![CDATA[Wavatar]]></item>
- <item name="wcf.acp.option.gravatar_default_type.monsterid"><![CDATA[Monster id]]></item>
- <item name="wcf.acp.option.gravatar_default_type.retro"><![CDATA[Retro]]></item>
<item name="wcf.acp.option.search_engine"><![CDATA[Search Engine]]></item>
<item name="wcf.acp.option.search_engine.mysql"><![CDATA[Use MySQL FULLTEXT (default)]]></item>
<item name="wcf.acp.option.enable_pluginstore_widget"><![CDATA[Display recommended products]]></item>
<category name="wcf.user.avatar">
<item name="wcf.user.avatar"><![CDATA[Avatar]]></item>
<item name="wcf.user.avatar.edit"><![CDATA[Avatar Management]]></item>
- <item name="wcf.user.avatar.error.disabled"><![CDATA[The administrators {if $__wcf->user->avatarID || $__wcf->user->enableGravatar}have banned your avatar and {/if}disallowed you from using an avatar{if $__wcf->user->disableAvatarReason}: {$__wcf->user->disableAvatarReason}{/if}.]]></item>
+ <item name="wcf.user.avatar.error.disabled"><![CDATA[The administrators {if $__wcf->user->avatarID}have banned your avatar and {/if}disallowed you from using an avatar{if $__wcf->user->disableAvatarReason}: {$__wcf->user->disableAvatarReason}{/if}.]]></item>
<item name="wcf.user.avatar.type.custom"><![CDATA[Upload Your Avatar]]></item>
<item name="wcf.user.avatar.type.custom.description"><![CDATA[You may use the following file extensions “{"\n"|str_replace:', ':$__wcf->session->getPermission('user.profile.avatar.allowedFileExtensions')}” for your avatar with a maximum file size of {@$__wcf->session->getPermission('user.profile.avatar.maxSize')|filesize}. The minimum dimensions are 128×128 pixels.]]></item>
- <item name="wcf.user.avatar.type.gravatar"><![CDATA[Use Gravatar]]></item>
- <item name="wcf.user.avatar.type.gravatar.description"><![CDATA[Gravatar (Global Recognized Avatar) provides a globally reusable avatar connected with your email address “{$__wcf->user->email}”. Visit <a href="https://www.gravatar.com" class="externalURL"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank"{/if}>www.gravatar.com</a> to set up or change your avatar.]]></item>
- <item name="wcf.user.avatar.type.gravatar.error.notFound"><![CDATA[Your email address is not connected with a gravatar.]]></item>
<item name="wcf.user.avatar.type.none"><![CDATA[Do Not Use Avatar]]></item>
<item name="wcf.user.avatar.type.none.description"><![CDATA[Your current avatar will be deleted.]]></item>
<item name="wcf.user.avatar.upload.error.badImage"><![CDATA[Your avatar is invalid.]]></item>
<item name="wcf.user.condition.activityPoints"><![CDATA[Points]]></item>
<item name="wcf.user.condition.avatar"><![CDATA[Avatar]]></item>
<item name="wcf.user.condition.avatar.avatar"><![CDATA[Custom Avatar]]></item>
- <item name="wcf.user.condition.avatar.gravatar"><![CDATA[Gravatar]]></item>
<item name="wcf.user.condition.avatar.noAvatar"><![CDATA[No Avatar]]></item>
<item name="wcf.user.condition.conditionGroup.contents"><![CDATA[Contents]]></item>
<item name="wcf.user.condition.conditionGroup.general"><![CDATA[General Data]]></item>
<item name="wcf.acp.option.category.general.cache.memcached"/>
<item name="wcf.acp.option.category.general.cache.memcached.description"/>
<item name="wcf.acp.option.cache_source_type.memcached"/>
+ <item name="wcf.acp.option.module_gravatar"/>
+ <item name="wcf.acp.option.module_gravatar.description"/>
+ <item name="wcf.acp.option.gravatar_default_type"/>
+ <item name="wcf.acp.option.gravatar_default_type.description"/>
+ <item name="wcf.acp.option.gravatar_default_type.404"/>
+ <item name="wcf.acp.option.gravatar_default_type.identicon"/>
+ <item name="wcf.acp.option.gravatar_default_type.wavatar"/>
+ <item name="wcf.acp.option.gravatar_default_type.monsterid"/>
+ <item name="wcf.acp.option.gravatar_default_type.retro"/>
+ <item name="wcf.user.avatar.type.gravatar"/>
+ <item name="wcf.user.avatar.type.gravatar.description"/>
+ <item name="wcf.user.avatar.type.gravatar.error.notFound"/>
+ <item name="wcf.user.condition.avatar.gravatar"/>
</delete>
</language>
disableAvatar TINYINT(1) NOT NULL DEFAULT 0,
disableAvatarReason TEXT,
disableAvatarExpires INT(10) NOT NULL DEFAULT 0,
- enableGravatar TINYINT(1) NOT NULL DEFAULT 0,
- gravatarFileExtension VARCHAR(3) NOT NULL DEFAULT '',
signature TEXT,
signatureEnableHtml TINYINT(1) NOT NULL DEFAULT 0,
disableSignature TINYINT(1) NOT NULL DEFAULT 0,