mirror of
https://github.com/getgrav/grav.git
synced 2025-02-20 19:56:53 +01:00
Make new avatar logic more robust
This commit is contained in:
parent
499b25aad8
commit
e0deeeb551
|
|
@ -16,7 +16,8 @@ use Grav\Common\Page\Medium\Medium;
|
|||
use Grav\Common\Page\Medium\StaticImageMedium;
|
||||
use Grav\Common\User\Authentication;
|
||||
use Grav\Common\Utils;
|
||||
use Gregwar\Image\Image;
|
||||
use Multiavatar;
|
||||
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
|
||||
use function is_array;
|
||||
use function is_string;
|
||||
|
||||
|
|
@ -176,40 +177,50 @@ trait UserTrait
|
|||
}
|
||||
}
|
||||
|
||||
$avatar_url = '';
|
||||
$email = $this->get('email');
|
||||
$hashcode = $this->get('avatar_hash');
|
||||
$avatar_generator = Grav::instance()['config']->get('system.accounts.avatar', 'multiavatar');
|
||||
|
||||
if ($hashcode || $email) {
|
||||
$hash = $hashcode ?: md5(strtolower(trim($email)));
|
||||
switch ($avatar_generator) {
|
||||
case 'gravatar':
|
||||
$avatar_url = 'https://www.gravatar.com/avatar/' . $hash;
|
||||
break;
|
||||
default:
|
||||
return $this->generateMultiavatar($hash);
|
||||
if ($avatar_generator === 'gravatar') {
|
||||
if (!$email) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$hash = md5(strtolower(trim($email)));
|
||||
|
||||
return 'https://www.gravatar.com/avatar/' . $hash;
|
||||
}
|
||||
|
||||
return $avatar_url;
|
||||
$hash = $this->get('avatar_hash');
|
||||
if (!$hash) {
|
||||
$username = $this->get('username');
|
||||
$hash = md5(strtolower(trim($email ?? $username)));
|
||||
}
|
||||
|
||||
return $this->generateMultiavatar($hash);
|
||||
}
|
||||
|
||||
protected function generateMultiavatar($hash) {
|
||||
/**
|
||||
* @param string $hash
|
||||
* @return string
|
||||
*/
|
||||
protected function generateMultiavatar(string $hash): string
|
||||
{
|
||||
/** @var UniformResourceLocator $locator */
|
||||
$locator = Grav::instance()['locator'];
|
||||
|
||||
$storage = Grav::instance()['locator']->findResource('image://multiavatar', true, true);
|
||||
$avatar_file = "$storage/$hash.svg";
|
||||
$avatar_url = "/user/images/multiavatar/$hash.svg";
|
||||
$storage = $locator->findResource('image://multiavatar', true, true);
|
||||
$avatar_file = "{$storage}/{$hash}.svg";
|
||||
|
||||
if (!file_exists($storage)) {
|
||||
Folder::create($storage);
|
||||
}
|
||||
|
||||
if (!file_exists($avatar_file)) {
|
||||
$mavatar = new \Multiavatar();
|
||||
$mavatar = new Multiavatar();
|
||||
|
||||
file_put_contents($avatar_file, $mavatar->generate($hash, null, null));
|
||||
}
|
||||
|
||||
$avatar_url = $locator->findResource("image://multiavatar/{$hash}.svg", false, true);
|
||||
|
||||
return Utils::url($avatar_url);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user