* ``` * * @internal */ final class SwitchUserViewHelper extends AbstractTagBasedViewHelper { /** * @var string */ protected $tagName = 'typo3-backend-switch-user'; public function __construct( private readonly IconFactory $iconFactory ) { parent::__construct(); } public function initializeArguments(): void { parent::initializeArguments(); $this->registerArgument('backendUser', BackendUser::class, 'Target backendUser to switch active session to', true); } public function render(): string { /** @var BackendUser $targetUser */ $targetUser = $this->arguments['backendUser']; $currentUser = self::getBackendUserAuthentication(); if ((int)$targetUser->getUid() === (int)$currentUser->getUserId() || !$targetUser->isActive() || !$currentUser->isAdmin() || $currentUser->getOriginalUserIdWhenInSwitchUserMode() !== null ) { $this->tag->setTagName('span'); $this->tag->addAttribute('class', $this->tag->getAttribute('class') . ' disabled'); $this->tag->addAttribute('disabled', 'disabled'); $this->tag->setContent($this->iconFactory->getIcon('empty-empty', IconSize::SMALL)->render()); } else { $this->tag->addAttribute('title', self::getLanguageService()->sL('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:switchBackMode')); $this->tag->addAttribute('targetUser', (string)$targetUser->getUid()); $this->tag->setContent($this->iconFactory->getIcon('actions-system-backend-user-switch', IconSize::SMALL)->render()); } $this->tag->forceClosingTag(true); return $this->tag->render(); } private static function getBackendUserAuthentication(): BackendUserAuthentication { return $GLOBALS['BE_USER']; } private static function getLanguageService(): LanguageService { return $GLOBALS['LANG']; } }