$avatarProviders */ public function __construct( #[Autowire(service: 'cache.runtime')] protected FrontendInterface $cache, protected DependencyOrderingService $dependencyOrderingService, protected IconFactory $iconFactory, protected array $avatarProviders = [], ) { $this->validateAvatarProviders(); } /** * Renders an avatar based on a Fluid template which contains some base wrapper css classes. * Has a simple caching functionality. Used in Avatar ViewHelper for instance. * Renders avatar of a given backend user record, or of current logged-in backend user. */ public function render(?array $backendUser = null, int $size = 32, bool $showIcon = false): string { if (!is_array($backendUser)) { /** @var array $backendUser */ $backendUser = $this->getBackendUser()->user; } $cacheId = 'avatar_' . sha1($backendUser['uid'] . $size . $showIcon); $avatar = $this->cache->get($cacheId); if (!$avatar) { $icon = $showIcon ? $this->iconFactory->getIconForRecord('be_users', $backendUser, IconSize::SMALL)->render() : ''; $avatar = '' . '' . $this->getImgTag($backendUser, $size) . '' . ($showIcon ? '' . $icon . '' : '') . ''; $this->cache->set($cacheId, $avatar); } return $avatar; } /** * Returns an HTML tag of given backend users avatar. */ protected function getImgTag(array $backendUser, int $size = 32): string { $avatarImage = $this->getImage($backendUser, $size); return ''; } /** * Get Image from first provider that returns one. */ protected function getImage(array $backendUser, int $size): Image { foreach ($this->avatarProviders as $provider) { $avatarImage = $provider->getImage($backendUser, $size); if (!empty($avatarImage)) { return $avatarImage; } } return GeneralUtility::makeInstance( Image::class, (string)PathUtility::getSystemResourceUri('EXT:core/Resources/Public/Icons/T3Icons/svgs/avatar/avatar-default.svg'), $size, $size ); } /** * Validates the registered avatar providers * * @throws \RuntimeException */ protected function validateAvatarProviders(): void { foreach ($this->avatarProviders as $provider) { if (!($provider instanceof AvatarProviderInterface)) { throw new \RuntimeException( sprintf( 'Avatar provider must implement interface "%s", "%s" given.', AvatarProviderInterface::class, get_debug_type($provider), ), 1439317802, ); } } } protected function getBackendUser(): BackendUserAuthentication { return $GLOBALS['BE_USER']; } }