‪TYPO3CMS  11.5
UserInformationService.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use TYPO3\CMS\Backend\Utility\BackendUtility;
26 
32 {
36  protected ‪$iconFactory;
37 
39  {
40  $this->iconFactory = ‪$iconFactory;
41  }
42 
48  public function ‪getGroupInformation(int $groupId): array
49  {
50  $usergroupRecord = BackendUtility::getRecord('be_groups', $groupId);
51  if (!$usergroupRecord) {
52  return [];
53  }
54 
55  $user = GeneralUtility::makeInstance(BackendUserAuthentication::class);
56  $user->enablecolumns = [
57  'deleted' => true,
58  ];
59 
60  // Setup dummy user to allow fetching all group data
61  // @see \TYPO3\CMS\Core\Authentication\BackendUserAuthentication::fetchGroups
62  $user->user = [
63  'uid' => PHP_INT_MAX,
64  'options' => 3,
65  // The below admin flag is required to prevent workspace access checks,
66  // triggered by workspaceInit() in fetchGroupData(). Those would fail
67  // due to insufficient permissions of the dummy user and therefore might
68  // result in generating superfluous log entries.
69  'admin' => 1,
70  'workspace_id' => 0,
71  'realName' => 'fakeUser',
72  'email' => 'fake.user@typo3.org',
73  'TSconfig' => '',
74  'category_perms' => '',
75  $user->usergroup_column => $groupId,
76  ];
77  $user->fetchGroupData();
78 
79  $data = $this->‪convert($user);
80  $data['group'] = $usergroupRecord;
81 
82  return $data;
83  }
84 
91  public function ‪getUserInformation(int $userId): array
92  {
93  $user = GeneralUtility::makeInstance(BackendUserAuthentication::class);
94  $user->enablecolumns = [
95  'deleted' => true,
96  ];
97  $user->setBeUserByUid($userId);
98  if (!$user->user) {
99  return [];
100  }
101  $user->fetchGroupData();
102 
103  return $this->‪convert($user);
104  }
105 
113  protected function ‪convert(BackendUserAuthentication $user): array
114  {
115  // usergroups
116  $data = [
117  'user' => $user->user ?? [],
118  'groups' => [
119  'inherit' => $user->userGroupsUID,
120  'direct' => ‪GeneralUtility::trimExplode(',', $user->user['usergroup'] ?? '', true),
121  ],
122  'modules' => [],
123  ];
124  $data['groups']['diff'] = array_diff($data['groups']['inherit'], $data['groups']['direct']);
125  foreach ($data['groups'] as $type => $groups) {
126  foreach ($groups as $key => $id) {
127  $record = BackendUtility::getRecord('be_groups', (int)$id);
128  if (isset($record['uid'])) {
129  $recordId = $record['uid'];
130  $data['groups']['all'][$recordId]['row'] = $record;
131  $data['groups']['all'][$recordId][$type] = 1;
132  }
133  }
134  }
135 
136  // languages
137  $siteLanguages = $this->‪getAllSiteLanguages();
138  $userLanguages = ‪GeneralUtility::trimExplode(',', $user->groupData['allowed_languages'] ?? '', true);
139  asort($userLanguages);
140  foreach ($userLanguages as $languageId) {
141  $languageId = (int)$languageId;
142  $record = $siteLanguages[$languageId];
143  if ($record) {
144  $data['languages'][$languageId] = $record;
145  }
146  }
147 
148  // table permissions
149  $data['tables']['tables_select'] = [];
150  $data['tables']['tables_modify'] = [];
151  foreach (['tables_select', 'tables_modify'] as $tableField) {
152  $temp = ‪GeneralUtility::trimExplode(',', $user->groupData[$tableField] ?? '', true);
153  foreach ($temp as $tableName) {
154  if (isset(‪$GLOBALS['TCA'][$tableName]['ctrl']['title'])) {
155  $data['tables'][$tableField][$tableName] = ‪$GLOBALS['TCA'][$tableName]['ctrl']['title'];
156  }
157  }
158  }
159  $data['tables']['all'] = array_replace($data['tables']['tables_select'] ?? [], $data['tables']['tables_modify'] ?? []);
160 
161  // DB mounts
162  $dbMounts = ‪GeneralUtility::trimExplode(',', $user->groupData['webmounts'] ?? '', true);
163  asort($dbMounts);
164  foreach ($dbMounts as $mount) {
165  $record = BackendUtility::getRecord('pages', (int)$mount);
166  if ($record) {
167  $data['dbMounts'][] = $record;
168  }
169  }
170 
171  // File mounts
172  $fileMounts = ‪GeneralUtility::trimExplode(',', $user->groupData['filemounts'] ?? '', true);
173  asort($fileMounts);
174  foreach ($fileMounts as $mount) {
175  $record = BackendUtility::getRecord('sys_filemounts', (int)$mount);
176  if ($record) {
177  $data['fileMounts'][] = $record;
178  }
179  }
180 
181  // Modules
182  $modules = ‪GeneralUtility::trimExplode(',', $user->groupData['modules'] ?? '', true);
183  foreach ($modules as $module) {
184  $data['modules'][$module] = ‪$GLOBALS['TBE_MODULES']['_configuration'][$module] ?? '';
185  }
186  $data['modules'] = array_filter($data['modules']);
187 
188  // Categories
189  $categories = $user->getCategoryMountPoints();
190  foreach ($categories as $category) {
191  $record = BackendUtility::getRecord('sys_category', $category);
192  if ($record) {
193  $data['categories'][$category] = $record;
194  }
195  }
196 
197  // workspaces
198  if (‪ExtensionManagementUtility::isLoaded('workspaces')) {
199  $data['workspaces'] = [
200  'loaded' => true,
201  'record' => $user->workspaceRec,
202  ];
203  }
204 
205  // file & folder permissions
206  $filePermissions = $user->groupData['file_permissions'] ?? '';
207  if ($filePermissions) {
208  $items = ‪GeneralUtility::trimExplode(',', $filePermissions, true);
209  foreach (‪$GLOBALS['TCA']['be_groups']['columns']['file_permissions']['config']['items'] as $availableItem) {
210  if (in_array($availableItem[1], $items, true)) {
211  $data['fileFolderPermissions'][] = $availableItem;
212  }
213  }
214  }
215 
216  // tsconfig
217  $data['tsconfig'] = $user->getTSConfig();
218 
219  // non_exclude_fields
220  $fieldListTmp = ‪GeneralUtility::trimExplode(',', $user->groupData['non_exclude_fields'] ?? '', true);
221  $fieldList = [];
222  foreach ($fieldListTmp as $item) {
223  $itemParts = explode(':', $item);
224  $itemTable = $itemParts[0];
225  $itemField = $itemParts[1] ?? '';
226  if (!empty($itemField) && isset(‪$GLOBALS['TCA'][$itemTable]['ctrl']['title'])) {
227  $fieldList[$itemTable]['label'] = ‪$GLOBALS['TCA'][$itemTable]['ctrl']['title'];
228  $fieldList[$itemTable]['fields'][$itemField] = ‪$GLOBALS['TCA'][$itemTable]['columns'][$itemField]['label'] ?? $itemField;
229  }
230  }
231  ksort($fieldList);
232  foreach ($fieldList as &$fieldListItem) {
233  ksort($fieldListItem['fields']);
234  }
235  $data['non_exclude_fields'] = $fieldList;
236 
237  // page types
238  $specialItems = ‪$GLOBALS['TCA']['pages']['columns']['doktype']['config']['items'];
239  foreach ($specialItems as $specialItem) {
240  $value = $specialItem[1];
241  if (!GeneralUtility::inList($user->groupData['pagetypes_select'] ?? '', $value)) {
242  continue;
243  }
244  $label = $specialItem[0];
245  $icon = $this->iconFactory->mapRecordTypeToIconIdentifier('pages', ['doktype' => $specialItem[1]]);
246  $data['pageTypes'][] = ['label' => $label, 'value' => $value, 'icon' => $icon];
247  }
248 
249  return $data;
250  }
251 
252  protected function ‪getAllSiteLanguages(): array
253  {
254  $siteLanguages = [];
255  foreach (GeneralUtility::makeInstance(SiteFinder::class)->getAllSites() as $site) {
256  foreach ($site->getAllLanguages() as $languageId => $language) {
257  if (isset($siteLanguages[$languageId])) {
258  // Language already provided by another site, check if values differ
259  if (!str_contains($siteLanguages[$languageId]['title'], $language->getTitle())) {
260  // Language already provided by another site, but with a different title
261  $siteLanguages[$languageId]['title'] .= ', ' . $language->getTitle();
262  }
263  if ($siteLanguages[$languageId]['flagIconIdentifier'] !== $language->getFlagIdentifier()) {
264  // Language already provided by another site, but with a different flag icon identifier
265  $siteLanguages[$languageId]['flagIconIdentifier'] = 'flags-multiple';
266  }
267  } else {
268  $siteLanguages[$languageId] = [
269  'title' => $language->getTitle(),
270  'flagIconIdentifier' => $language->getFlagIdentifier(),
271  ];
272  }
273  }
274  }
275  return $siteLanguages;
276  }
277 }
‪TYPO3\CMS\Beuser\Service\UserInformationService\__construct
‪__construct(IconFactory $iconFactory)
Definition: UserInformationService.php:37
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode($delim, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:999
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\getTSConfig
‪array getTSConfig()
Definition: BackendUserAuthentication.php:1000
‪TYPO3\CMS\Beuser\Service\UserInformationService\$iconFactory
‪IconFactory $iconFactory
Definition: UserInformationService.php:35
‪TYPO3\CMS\Core\Site\SiteFinder
Definition: SiteFinder.php:31
‪TYPO3\CMS\Beuser\Service\UserInformationService\getAllSiteLanguages
‪getAllSiteLanguages()
Definition: UserInformationService.php:251
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\getCategoryMountPoints
‪array getCategoryMountPoints()
Definition: BackendUserAuthentication.php:1324
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Beuser\Service\UserInformationService\convert
‪array convert(BackendUserAuthentication $user)
Definition: UserInformationService.php:112
‪TYPO3\CMS\Beuser\Service\UserInformationService\getUserInformation
‪array getUserInformation(int $userId)
Definition: UserInformationService.php:90
‪TYPO3\CMS\Beuser\Service
Definition: UserInformationService.php:18
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Beuser\Service\UserInformationService\getGroupInformation
‪array getGroupInformation(int $groupId)
Definition: UserInformationService.php:47
‪TYPO3\CMS\Beuser\Service\UserInformationService
Definition: UserInformationService.php:32
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\isLoaded
‪static bool isLoaded($key)
Definition: ExtensionManagementUtility.php:114