diff --git a/typo3/sysext/backend/Classes/Backend/ToolbarItems/UserToolbarItem.php b/typo3/sysext/backend/Classes/Backend/ToolbarItems/UserToolbarItem.php index 0a4c44fb580b558924a06be811ffb80d72b3e1ba..4b36257c9594fca8d80bc95e8c1ba328816b8f99 100644 --- a/typo3/sysext/backend/Classes/Backend/ToolbarItems/UserToolbarItem.php +++ b/typo3/sysext/backend/Classes/Backend/ToolbarItems/UserToolbarItem.php @@ -17,6 +17,8 @@ namespace TYPO3\CMS\Backend\Backend\ToolbarItems; use TYPO3\CMS\Backend\Domain\Repository\Module\BackendModuleRepository; use TYPO3\CMS\Backend\Toolbar\ToolbarItemInterface; use TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\Database\Connection; +use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Fluid\View\StandaloneView; @@ -71,15 +73,37 @@ class UserToolbarItem implements ToolbarItemInterface && isset($backendUser->uc['recentSwitchedToUsers']) && is_array($backendUser->uc['recentSwitchedToUsers']) ) { - foreach ($backendUser->uc['recentSwitchedToUsers'] as $userUid) { - $backendUserRecord = BackendUtility::getRecord('be_users', $userUid); - $backendUserRecord['switchUserLink'] = BackendUtility::getModuleUrl( + $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('be_users'); + $result = $queryBuilder + ->select('uid', 'username', 'realName') + ->from('be_users') + ->where( + $queryBuilder->expr()->in('uid', $queryBuilder->createNamedParameter($backendUser->uc['recentSwitchedToUsers'], Connection::PARAM_INT_ARRAY)) + )->execute(); + + // Flip the array to have a "sorted" list of items + $mostRecentUsers = array_flip($backendUser->uc['recentSwitchedToUsers']); + + while ($row = $result->fetch()) { + $row['switchUserLink'] = BackendUtility::getModuleUrl( 'system_BeuserTxBeuser', - [ - 'SwitchUser' => $backendUserRecord['uid'] - ] + [ + 'SwitchUser' => $row['uid'] + ] ); - $mostRecentUsers[] = $backendUserRecord; + + $mostRecentUsers[$row['uid']] = $row; + } + + // Remove any item that is not an array (means, the stored uid is not available anymore) + $mostRecentUsers = array_filter($mostRecentUsers, function ($record) { + return is_array($record); + }); + + $availableUsers = array_keys($mostRecentUsers); + if (!empty(array_diff($backendUser->uc['recentSwitchedToUsers'], $availableUsers))) { + $backendUser->uc['recentSwitchedToUsers'] = $availableUsers; + $backendUser->writeUC(); } } diff --git a/typo3/sysext/backend/Resources/Private/Language/locallang.xlf b/typo3/sysext/backend/Resources/Private/Language/locallang.xlf index a2d1f3efae28eaf2e53e79f0b2a8bf2c6aa9895c..415e7351619cd8f65fef65cb0d7206dda1b5f134 100644 --- a/typo3/sysext/backend/Resources/Private/Language/locallang.xlf +++ b/typo3/sysext/backend/Resources/Private/Language/locallang.xlf @@ -20,7 +20,7 @@ Have a nice day.</source> </trans-unit> <trans-unit id="usermodule.su.list"> - <source>Recently 'switched to' users</source> + <source>Recently switched to</source> </trans-unit> <trans-unit id="usermodule.su.tooltip"> <source>Switch to user %s</source>