diff --git a/system/src/Grav/Common/User/Traits/UserTrait.php b/system/src/Grav/Common/User/Traits/UserTrait.php index 8f97b5032..91c41aa11 100644 --- a/system/src/Grav/Common/User/Traits/UserTrait.php +++ b/system/src/Grav/Common/User/Traits/UserTrait.php @@ -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);