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;
&& 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();
}
}