getArguments(); $moduleData = $request->getAttribute('moduleData'); if (in_array((string)($arguments['action'] ?? ''), ['list', 'groups', 'online', 'filemounts'], true) && (string)$moduleData->get('defaultAction') !== (string)$arguments['action'] ) { $moduleData->set('defaultAction', (string)$arguments['action']); $this->getBackendUser()->pushModuleData($moduleData->getModuleIdentifier(), $moduleData->toArray()); } return parent::processRequest($request); } /** * Init module state. * This isn't done within __construct() since the controller * object is only created once in extbase when multiple actions are called in * one call. When those change module state, the second action would see old state. */ public function initializeAction(): void { $this->moduleData = $this->request->getAttribute('moduleData'); $this->moduleTemplate = $this->moduleTemplateFactory->create($this->request); $this->moduleTemplate->setTitle(LocalizationUtility::translate('beuser.modules.user_management:title')); $this->moduleTemplate->setLayout(ModuleLayout::NORMAL); $this->moduleTemplate->setFlashMessageQueue($this->getFlashMessageQueue()); } /** * Assign default variables to ModuleTemplate view */ protected function initializeView(): void { $this->moduleTemplate->assignMultiple([ 'dateFormat' => $GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], 'timeFormat' => $GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'], ]); // Load JavaScript modules $this->pageRenderer->loadJavaScriptModule('@typo3/backend/context-menu.js'); $this->pageRenderer->loadJavaScriptModule('@typo3/backend/modal.js'); $this->pageRenderer->loadJavaScriptModule('@typo3/backend/element/status-indicator-element.js'); $this->pageRenderer->loadJavaScriptModule('@typo3/beuser/backend-user-listing.js'); } /** * Default action, forwarding the request to either a defined default action or the default entry point "list" */ public function indexAction(): ResponseInterface { $moduleData = $this->request->getAttribute('moduleData'); if ($moduleData->has('defaultAction') && in_array((string)$moduleData->get('defaultAction'), ['list', 'groups', 'online', 'filemounts'], true) ) { return new ForwardResponse((string)$moduleData->get('defaultAction')); } return new ForwardResponse('list'); } /** * Displays all BackendUsers */ public function listAction(?Demand $demand = null, int $currentPage = 1, string $operation = ''): ResponseInterface { $backendUser = $this->getBackendUser(); if ($operation === 'reset-filters') { // Reset the module data demand object $this->moduleData->set('demand', []); $demand = null; } if ($demand === null) { $demand = Demand::fromUc((array)$this->moduleData->get('demand', [])); } else { $this->moduleData->set('demand', $demand->forUc()); } $backendUser->pushModuleData($this->moduleData->getModuleIdentifier(), $this->moduleData->toArray()); $compareUserList = array_keys((array)$this->moduleData->get('compareUserList', [])); $backendUsers = $this->backendUserRepository->findDemanded($demand); $paginator = new QueryResultPaginator($backendUsers, $currentPage, 50); $pagination = new SimplePagination($paginator); $backendUserGroups = $this->eventDispatcher->dispatch( new AfterBackendGroupFilterListIsAssembledEvent( $this->request, array_merge([''], $this->backendUserGroupRepository->findAll()->toArray()) ) )->backendGroups; $this->moduleTemplate->assignMultiple([ 'onlineBackendUsers' => $this->getOnlineBackendUsers(), 'demand' => $demand, 'paginator' => $paginator, 'pagination' => $pagination, 'totalAmountOfBackendUsers' => $backendUsers->count(), 'backendUserGroups' => $backendUserGroups, 'compareUserUidList' => array_combine($compareUserList, $compareUserList), 'currentUserUid' => $backendUser->user['uid'] ?? null, 'compareUserList' => !empty($compareUserList) ? $this->backendUserRepository->findByUidList($compareUserList) : '', ]); $this->addMainMenu('list'); $createEditorButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL)) ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.editor.create', 'beuser')) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_users' => [0 => 'new']], 'module' => 'backend_user_management', 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($createEditorButton); $createAdminButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL)) ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.admin.create', 'beuser')) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_users' => [0 => 'new']], 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), 'defVals' => ['be_users' => ['admin' => 1]], ])); $this->moduleTemplate->addButtonToButtonBar($createAdminButton, ButtonBar::BUTTON_POSITION_LEFT, 2); $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUsers', 'beuser'), ['action' => 'list'] ); $this->pageRenderer->loadJavaScriptModule('@typo3/backend/switch-user.js'); return $this->moduleTemplate->renderResponse('BackendUser/List'); } /** * Views all currently logged in BackendUsers and their sessions */ public function onlineAction(): ResponseInterface { $onlineUsersAndSessions = []; $onlineUsers = $this->backendUserRepository->findOnline(); foreach ($onlineUsers as $onlineUser) { $onlineUsersAndSessions[] = [ 'backendUser' => $onlineUser, 'sessions' => $this->backendUserSessionRepository->findByBackendUser($onlineUser), ]; } $currentSessionId = $this->backendUserSessionRepository->getPersistedSessionIdentifier($this->getBackendUser()); $this->moduleTemplate->assignMultiple([ 'onlineUsersAndSessions' => $onlineUsersAndSessions, 'currentSessionId' => $currentSessionId, ]); $this->addMainMenu('online'); $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:onlineUsers', 'beuser'), ['action' => 'online'] ); return $this->moduleTemplate->renderResponse('BackendUser/Online'); } public function showAction(int $uid = 0): ResponseInterface { $data = $this->userInformationService->getUserInformation($uid); $this->moduleTemplate->assignMultiple([ 'data' => $data, 'showUid' => $this->getBackendUser()->shallDisplayDebugInformation(), ]); $this->addMainMenu('show'); $this->moduleTemplate->addButtonToButtonBar($this->componentFactory->createBackButton((string)$this->backendUriBuilder->buildUriFromRoute('backend_user_management'))); $editButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-open', IconSize::SMALL)) ->setTitle(LocalizationUtility::translate('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.edit')) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_users' => [$uid => 'edit']], 'module' => 'backend_user_management', 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($editButton, ButtonBar::BUTTON_POSITION_LEFT, 2); $addUserButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL)) ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.backendUser.create', 'beuser')) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_users' => [0 => 'new']], 'module' => 'backend_user_management', 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($addUserButton, ButtonBar::BUTTON_POSITION_LEFT, 3); $username = empty($data['user']['username']) ? '' : ': ' . $data['user']['username']; $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser', 'beuser') . $username, ['action' => 'show', 'uid' => $uid] ); return $this->moduleTemplate->renderResponse('BackendUser/Show'); } /** * Compare backend users from demand */ public function compareAction(): ResponseInterface { $compareUserList = array_keys((array)$this->moduleData->get('compareUserList', [])); if (empty($compareUserList)) { return $this->redirect('list'); } $compareData = []; foreach ($compareUserList as $uid) { if ($compareInformation = $this->userInformationService->getUserInformation($uid)) { $compareData[] = $compareInformation; } } $this->moduleTemplate->assignMultiple([ 'compareUserList' => $compareData, 'onlineBackendUsers' => $this->getOnlineBackendUsers(), 'showUid' => $this->getBackendUser()->shallDisplayDebugInformation(), ]); $this->addMainMenu('compare'); $this->moduleTemplate->addButtonToButtonBar($this->componentFactory->createBackButton((string)$this->backendUriBuilder->buildUriFromRoute('backend_user_management'))); $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:compareBackendUsers', 'beuser'), ['action' => 'compare'] ); return $this->moduleTemplate->renderResponse('BackendUser/Compare'); } protected function initializeInitiatePasswordResetAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Starts the password reset process for a selected user. */ public function initiatePasswordResetAction(int $user): ResponseInterface { $context = GeneralUtility::makeInstance(Context::class); /** @var BackendUser|null $userObject */ $userObject = $this->backendUserRepository->findByUid($user); if (!$userObject || !$userObject->isPasswordResetEnabled() || !$context->getAspect('backend.user')->isAdmin()) { // Add an error message $this->addFlashMessage( LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:flashMessage.resetPassword.error.text', 'beuser') ?? '', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:flashMessage.resetPassword.error.title', 'beuser') ?? '', ContextualFeedbackSeverity::ERROR ); } else { GeneralUtility::makeInstance(PasswordReset::class)->initiateReset( $this->request, $context, $userObject->getEmail() ); $this->addFlashMessage( LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:flashMessage.resetPassword.success.text', 'beuser', [$userObject->getEmail()]) ?? '', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:flashMessage.resetPassword.success.title', 'beuser') ?? '' ); } return $this->redirect('list'); } protected function initializeAddToCompareListAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Attaches one backend user to the compare list */ public function addToCompareListAction(int $uid): ResponseInterface { $this->addToCompareList('compareUserList', $uid); return $this->redirect('list'); } protected function initializeRemoveFromCompareListAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Removes given backend user to the compare list */ public function removeFromCompareListAction(int $uid, int $redirectToCompare = 0): ResponseInterface { $this->removeFromCompareList('compareUserList', $uid); if ($redirectToCompare) { return $this->redirect('compare'); } return $this->redirect('list'); } protected function initializeRemoveAllFromCompareListAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Removes all backend users from the compare list */ public function removeAllFromCompareListAction(): ResponseInterface { $this->cleanCompareList('compareUserList'); return $this->redirect('list'); } protected function initializeTerminateBackendUserSessionAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Terminate BackendUser session and logout corresponding client * Redirects to onlineAction with message */ protected function terminateBackendUserSessionAction(string $sessionId): ResponseInterface { // terminating value of persisted session ID $success = $this->backendUserSessionRepository->terminateSessionByIdentifier($sessionId); if ($success) { $this->addFlashMessage(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser.online.flashMessage.terminateSessionSuccess', 'beuser') ?? ''); } return $this->redirect('online'); } /** * Displays all BackendUserGroups */ public function groupsAction(?BackendUserGroup $userGroupDto = null, int $currentPage = 1, string $operation = ''): ResponseInterface { $backendUser = $this->getBackendUser(); if ($operation === 'reset-filters') { $this->moduleData->set('userGroupDto', []); $userGroupDto = null; } if ($userGroupDto === null) { $userGroupDto = BackendUserGroup::fromUc((array)$this->moduleData->get('userGroupDto', [])); } else { $this->moduleData->set('userGroupDto', $userGroupDto->forUc()); } $backendUser->pushModuleData($this->moduleData->getModuleIdentifier(), $this->moduleData->toArray()); $backendUserGroups = $this->backendUserGroupRepository->findByFilter($userGroupDto); $paginator = new QueryResultPaginator($backendUserGroups, $currentPage, 50); $pagination = new SimplePagination($paginator); $compareGroupUidList = array_keys((array)$this->moduleData->get('compareGroupUidList', [])); $this->moduleTemplate->assignMultiple( [ 'paginator' => $paginator, 'pagination' => $pagination, 'totalAmountOfBackendUserGroups' => $backendUserGroups->count(), 'compareGroupUidList' => array_map(static function (int $value): int { // uid as key and force value to 1 return 1; }, array_flip($compareGroupUidList)), 'compareGroupList' => !empty($compareGroupUidList) ? $this->backendUserGroupRepository->findByUidList($compareGroupUidList) : [], 'userGroupDto' => $userGroupDto, ] ); $this->addMainMenu('groups'); $addGroupButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL)) ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.backendUserGroup.create', 'beuser')) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_groups' => [0 => 'new']], 'module' => 'backend_user_management', 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($addGroupButton); $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroupsMenu', 'beuser'), ['action' => 'groups'] ); return $this->moduleTemplate->renderResponse('BackendUserGroup/List'); } /** * Show a single backend user group. */ public function showGroupAction(int $uid = 0): ResponseInterface { $data = $this->userInformationService->getGroupInformation($uid); $this->moduleTemplate->assignMultiple([ 'data' => $data, 'showUid' => $this->getBackendUser()->shallDisplayDebugInformation(), ]); $this->addMainMenu('showGroup'); $this->moduleTemplate->addButtonToButtonBar($this->componentFactory->createBackButton((string)$this->backendUriBuilder->buildUriFromRoute('backend_user_management', ['action' => 'groups']))); $editButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-open', IconSize::SMALL)) ->setTitle( LocalizationUtility::translate( 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.edit' ) ) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_groups' => [$uid => 'edit']], 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($editButton, ButtonBar::BUTTON_POSITION_LEFT, 2); $addUserButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL)) ->setTitle( LocalizationUtility::translate( 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.backendUserGroup.create', 'beuser' ) ) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['be_groups' => [0 => 'new']], 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($addUserButton, ButtonBar::BUTTON_POSITION_LEFT, 3); $backendGroupTitle = empty($data['group']['title']) ? '' : ': ' . $data['group']['title']; $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate( 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroup', 'beuser' ) . $backendGroupTitle, ['action' => 'showGroup', 'uid' => $uid] ); return $this->moduleTemplate->renderResponse('BackendUserGroup/Show'); } public function compareGroupsAction(): ResponseInterface { $compareGroupUidList = array_keys((array)$this->moduleData->get('compareGroupUidList', [])); $compareData = []; foreach ($compareGroupUidList as $uid) { if ($compareInformation = $this->userInformationService->getGroupInformation($uid)) { $compareData[] = $compareInformation; } } if (empty($compareData)) { return $this->redirect('groups'); } $this->moduleTemplate->assignMultiple([ 'compareGroupList' => $compareData, 'showUid' => $this->getBackendUser()->shallDisplayDebugInformation(), ]); $this->addMainMenu('compareGroups'); $this->moduleTemplate->addButtonToButtonBar($this->componentFactory->createBackButton($this->uriBuilder->uriFor('groups'))); $this->moduleTemplate->getDocHeaderComponent()->setShortcutContext( 'backend_user_management', LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:compareBackendUsersGroups', 'beuser'), ['action' => 'compareGroups'] ); return $this->moduleTemplate->renderResponse('BackendUserGroup/Compare'); } protected function initializeAddGroupToCompareListAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Attaches one backend user group to the compare list */ public function addGroupToCompareListAction(int $uid): ResponseInterface { $this->addToCompareList('compareGroupUidList', $uid); return $this->redirect('groups'); } protected function initializeRemoveGroupFromCompareListAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Removes given backend user group to the compare list */ public function removeGroupFromCompareListAction(int $uid, int $redirectToCompare = 0): ResponseInterface { $this->removeFromCompareList('compareGroupUidList', $uid); if ($redirectToCompare) { return $this->redirect('compareGroups'); } return $this->redirect('groups'); } protected function initializeRemoveAllGroupsFromCompareListAction(): void { $this->assertAllowedHttpMethod($this->request, 'POST'); } /** * Removes all backend user groups from the compare list */ public function removeAllGroupsFromCompareListAction(): ResponseInterface { $this->cleanCompareList('compareGroupUidList'); return $this->redirect('groups'); } protected function filemountsAction(int $currentPage = 1): ResponseInterface { $filemounts = $this->eventDispatcher->dispatch( new AfterFilemountsListIsAssembledEvent( $this->request, $this->fileMountRepository->findAll()->toArray() ) )->filemounts; $this->addMainMenu('filemounts'); $paginator = new ArrayPaginator($filemounts, $currentPage, 50); $pagination = new SimplePagination($paginator); $this->moduleTemplate->assignMultiple( [ 'paginator' => $paginator, 'pagination' => $pagination, 'totalAmountOfFilemounts' => count($filemounts), ] ); $addFilemountButton = $this->componentFactory->createLinkButton() ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL)) ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemount.create', 'beuser')) ->setShowLabelText(true) ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['sys_filemounts' => [0 => 'new']], 'module' => 'backend_user_management', 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), ])); $this->moduleTemplate->addButtonToButtonBar($addFilemountButton); return $this->moduleTemplate->renderResponse('Filemount/List'); } /** * Create an array with the uids of online users as the keys * [ * 1 => true, * 5 => true * ] */ protected function getOnlineBackendUsers(): array { $onlineUsers = $this->backendUserSessionRepository->findAllActive(); $onlineBackendUsers = []; foreach ($onlineUsers as $onlineUser) { $onlineBackendUsers[$onlineUser['ses_userid']] = true; } return $onlineBackendUsers; } /** * Doc header main drop down */ protected function addMainMenu(string $currentAction): void { $this->uriBuilder->setRequest($this->request); $menu = $this->componentFactory->createMenu(); $menu->setIdentifier('BackendUserModuleMenu'); $menu->setLabel( LocalizationUtility::translate( 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:modulemenu.label', 'backend', ) ); $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUsers', 'beuser')) ->setHref($this->uriBuilder->uriFor('list')) ->setActive($currentAction === 'list') ); if ($currentAction === 'show') { $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserDetails', 'beuser')) ->setHref($this->uriBuilder->uriFor('show')) ->setActive(true) ); } if ($currentAction === 'compare') { $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:compareBackendUsers', 'beuser')) ->setHref($this->uriBuilder->uriFor('list')) ->setActive(true) ); } $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroupsMenu', 'beuser')) ->setHref($this->uriBuilder->uriFor('groups')) ->setActive($currentAction === 'groups') ); if ($currentAction === 'showGroup') { $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroupDetails', 'beuser')) ->setHref($this->uriBuilder->uriFor('showGroup')) ->setActive(true) ); } if ($currentAction === 'compareGroups') { $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:compareBackendUsersGroups', 'beuser')) ->setHref($this->uriBuilder->uriFor('compareGroups')) ->setActive(true) ); } $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:onlineUsers', 'beuser')) ->setHref($this->uriBuilder->uriFor('online')) ->setActive($currentAction === 'online') ); $menu->addMenuItem( $this->componentFactory->createMenuItem() ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemounts', 'beuser')) ->setHref($this->uriBuilder->uriFor('filemounts')) ->setActive($currentAction === 'filemounts') ); $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu); } /** * Attaches the given uid to the requested compare list */ protected function addToCompareList(string $listIdentifier, int $uid): void { $compareList = (array)$this->moduleData->get($listIdentifier, []); $compareList[$uid] = true; $this->moduleData->set($listIdentifier, $compareList); $this->getBackendUser()->pushModuleData($this->moduleData->getModuleIdentifier(), $this->moduleData->toArray()); } /** * Removes the given uid from the requested compare list */ protected function removeFromCompareList(string $listIdentifier, int $uid): void { $compareList = (array)$this->moduleData->get($listIdentifier, []); unset($compareList[$uid]); $this->moduleData->set($listIdentifier, $compareList); $this->getBackendUser()->pushModuleData($this->moduleData->getModuleIdentifier(), $this->moduleData->toArray()); } /** * Removes all items from the requested compare list */ protected function cleanCompareList(string $listIdentifier): void { $this->moduleData->set($listIdentifier, []); $this->getBackendUser()->pushModuleData($this->moduleData->getModuleIdentifier(), $this->moduleData->toArray()); } protected function getBackendUser(): BackendUserAuthentication { return $GLOBALS['BE_USER']; } }