ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
AdminTabs.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24use ILIAS\User\Settings\ConfigurationGUI as UserSettingsConfigurationGUI;
25use ILIAS\User\Settings\NewAccountMail\SettingsGUI as NewAccountMailSettingsGUI;
26use ILIAS\User\Settings\StartingPoint\SettingsGUI as StartingPointSettingsGUI;
27use ILIAS\User\Profile\Fields\ConfigurationGUI as ProfileFieldsConfigurationGUI;
28use ILIAS\User\Profile\Prompt\SettingsGUI as ProfileSettingsGUI;
30
32{
33 private const TAB_ID_ACCOUNTS = 'accounts';
34 private const TAB_ID_EXTENDED_SEARCH = 'search_user_extended';
35 private const TAB_ID_SETTINGS = 'settings';
36 private const TAB_ID_PROFILE = 'profile';
37 private const TAB_ID_EXPORT = 'export';
38 private const TAB_ID_PERMISSIONS = 'perm_settings';
39
40 private const SUBTAB_ID_SETTINGS_AMIN = 'admin_settings';
41 private const SUBTAB_ID_SETTINGS_USER = 'user_settings';
42 private const SUBTAB_ID_SETTINGS_NEW_ACCOUNT_MAIL = 'new_account_mail';
43 private const SUBTAB_ID_SETTINGS_STARTING_POINTS = 'starting_points';
44
45 private const SUBTAB_ID_PROFILE_FIELDS = 'fields';
46 private const SUBTAB_ID_PROFILE_INFO = 'profile_info';
47
49 AdminSettingsGUI::class,
50 UserSettingsConfigurationGUI::class,
51 NewAccountMailSettingsGUI::class,
52 StartingPointSettingsGUI::class
53 ];
54
56 ProfileFieldsConfigurationGUI::class,
57 ProfileSettingsGUI::class
58 ];
59
60 public function __construct(
61 private readonly \ilTabsGUI $tabs_gui,
62 private readonly Language $lng,
63 private readonly \ilCtrl $ctrl,
64 private readonly \ilAccess $access,
65 private readonly int $ref_id
66 ) {
67 }
68
69 public function initializeTabs(): void
70 {
71 if ($this->readAccessToAccountsGranted()) {
72 $this->addAccountsTab();
73 $this->addExtendedSearchTab();
74 }
75
76 if ($this->editSettingsAccessGranted()) {
77 $this->addSettingsTab();
78 $this->addProfileTab();
79 $this->addExportTab();
80 $this->initializeSubTabs();
81 }
82
83 if ($this->accessToPermissionsGranted()) {
84 $this->addPermissionsTab();
85 }
86
87 $this->activateTab();
88 }
89
90 private function addAccountsTab(): void
91 {
92 $this->tabs_gui->addTab(
93 self::TAB_ID_ACCOUNTS,
94 $this->lng->txt('usrf'),
95 $this->ctrl->getLinkTargetByClass(
96 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class],
97 'view'
98 )
99 );
100 }
101
102 private function addSettingsTab(): void
103 {
104 $this->tabs_gui->addTab(
105 self::TAB_ID_SETTINGS,
106 $this->lng->txt('settings'),
107 $this->ctrl->getLinkTargetByClass(
108 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, AdminSettingsGUI::class],
109 'show'
110 )
111 );
112 }
113
114 private function addProfileTab(): void
115 {
116 $this->tabs_gui->addTab(
117 self::TAB_ID_PROFILE,
118 $this->lng->txt('profile'),
119 $this->ctrl->getLinkTargetByClass(
120 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, ProfileFieldsConfigurationGUI::class],
121 'show'
122 )
123 );
124 }
125
126 private function addExportTab(): void
127 {
128 $this->tabs_gui->addTab(
129 self::TAB_ID_EXPORT,
130 $this->lng->txt('export'),
131 $this->ctrl->getLinkTargetByClass(
132 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, \ilExportGUI::class],
133 'export'
134 )
135 );
136 }
137
138 private function addPermissionsTab(): void
139 {
140 $this->tabs_gui->addTab(
141 self::TAB_ID_PERMISSIONS,
142 $this->lng->txt('perm_settings'),
143 $this->ctrl->getLinkTargetByClass(
144 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, \ilPermissionGUI::class],
145 'perm'
146 )
147 );
148 }
149
150 private function addExtendedSearchTab(): void
151 {
152 $this->tabs_gui->addTab(
153 self::TAB_ID_EXTENDED_SEARCH,
154 $this->lng->txt('search_user_extended'),
155 $this->ctrl->getLinkTargetByClass(
156 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, \ilRepositorySearchGUI::class],
157 ''
158 )
159 );
160 }
161
162 private function activateTab(): void
163 {
164 if ($this->checkCmdClassInArray(self::CMD_CLASSES_WITH_SETTINGS_SUBTABS)) {
165 $this->tabs_gui->activateTab(self::TAB_ID_SETTINGS);
166 $this->activateSettingsSubTab();
167 return;
168 }
169
170 if ($this->checkCmdClassInArray(self::CMD_CLASSES_WITH_PROFILE_SUBTABS)) {
171 $this->tabs_gui->activateTab(self::TAB_ID_PROFILE);
172 $this->activateProfileSubTab();
173 return;
174 }
175
176 switch ($this->ctrl->getCmdClass()) {
177 case strtolower(\ilObjUserFolderGUI::class):
178 $this->tabs_gui->activateTab(self::TAB_ID_ACCOUNTS);
179 break;
180 case strtolower(\ilRepositorySearchGUI::class):
181 $this->tabs_gui->activateTab(self::TAB_ID_EXTENDED_SEARCH);
182 break;
183 case strtolower(\ilExportGUI::class):
184 $this->tabs_gui->activateTab(self::TAB_ID_EXPORT);
185 break;
186 case strtolower(\ilPermissionGUI::class):
187 $this->tabs_gui->activateTab(self::TAB_ID_PERMISSIONS);
188 break;
189 }
190 }
191
192 private function initializeSubTabs(): void
193 {
194 if ($this->checkCmdClassInArray(self::CMD_CLASSES_WITH_SETTINGS_SUBTABS)) {
195 $this->addSettingsSubTabs();
196 return;
197 }
198
199 if ($this->checkCmdClassInArray(self::CMD_CLASSES_WITH_PROFILE_SUBTABS)) {
200 $this->addProfileSubTabs();
201 return;
202 }
203 }
204
205 private function addSettingsSubTabs(): void
206 {
207 $this->tabs_gui->addSubTab(
208 self::SUBTAB_ID_SETTINGS_AMIN,
209 $this->lng->txt('administrative_settings'),
210 $this->ctrl->getLinkTargetByClass(
211 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, AdminSettingsGUI::class],
212 'show'
213 )
214 );
215 $this->tabs_gui->addSubTab(
216 self::SUBTAB_ID_SETTINGS_USER,
217 $this->lng->txt('user_settings'),
218 $this->ctrl->getLinkTargetByClass(
219 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, UserSettingsConfigurationGUI::class],
220 'show'
221 )
222 );
223 $this->tabs_gui->addSubTab(
224 self::SUBTAB_ID_SETTINGS_NEW_ACCOUNT_MAIL,
225 $this->lng->txt('registration_user_new_account_mail'),
226 $this->ctrl->getLinkTargetByClass(
227 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, NewAccountMailSettingsGUI::class],
228 'show'
229 )
230 );
231 $this->tabs_gui->addSubTab(
232 self::SUBTAB_ID_SETTINGS_STARTING_POINTS,
233 $this->lng->txt('starting_points'),
234 $this->ctrl->getLinkTargetByClass(
235 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, StartingPointSettingsGUI::class],
236 'startingPoints'
237 )
238 );
239 }
240
241 private function addProfileSubTabs(): void
242 {
243 $this->tabs_gui->addSubTab(
244 self::SUBTAB_ID_PROFILE_FIELDS,
245 $this->lng->txt('profile_fields'),
246 $this->ctrl->getLinkTargetByClass(
247 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, ProfileFieldsConfigurationGUI::class],
248 'show'
249 )
250 );
251 $this->tabs_gui->addSubTab(
252 self::SUBTAB_ID_PROFILE_INFO,
253 $this->lng->txt('user_profile_info'),
254 $this->ctrl->getLinkTargetByClass(
255 [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, ProfileSettingsGUI::class],
256 ''
257 )
258 );
259 }
260
261 private function activateSettingsSubTab(): void
262 {
263 switch ($this->ctrl->getNextClass()) {
264 case strtolower(AdminSettingsGUI::class):
265 $this->tabs_gui->activateSubTab(self::SUBTAB_ID_SETTINGS_AMIN);
266 break;
267 case strtolower(UserSettingsConfigurationGUI::class):
268 $this->tabs_gui->activateSubTab(self::SUBTAB_ID_SETTINGS_USER);
269 break;
270 case strtolower(NewAccountMailSettingsGUI::class):
271 $this->tabs_gui->activateSubTab(self::SUBTAB_ID_SETTINGS_NEW_ACCOUNT_MAIL);
272 break;
273 case strtolower(StartingPointSettingsGUI::class):
274 $this->tabs_gui->activateSubTab(self::SUBTAB_ID_SETTINGS_STARTING_POINTS);
275 break;
276 }
277 }
278
279 private function activateProfileSubTab(): void
280 {
281 switch ($this->ctrl->getNextClass()) {
282 case strtolower(ProfileFieldsConfigurationGUI::class):
283 $this->tabs_gui->activateSubTab(self::SUBTAB_ID_PROFILE_FIELDS);
284 break;
285 case strtolower(ProfileSettingsGUI::class):
286 $this->tabs_gui->activateSubTab(self::SUBTAB_ID_PROFILE_INFO);
287 break;
288 }
289 }
290
291 private function accessToPermissionsGranted(): bool
292 {
293 return $this->access->checkAccess(
294 'edit_permission',
295 '',
296 $this->ref_id
297 );
298 }
299
300 private function readAccessToAccountsGranted(): bool
301 {
302 return $this->access->checkRbacOrPositionPermissionAccess(
303 'read',
305 $this->ref_id
306 );
307 }
308
309 private function editSettingsAccessGranted(): bool
310 {
311 return $this->access->checkRbacOrPositionPermissionAccess(
312 'write',
314 $this->ref_id
315 );
316 }
317
318 private function checkCmdClassInArray(array $class_array): bool
319 {
320 $cmd_class = $this->ctrl->getNextClass();
321 return array_filter(
322 $class_array,
323 static fn(string $class): bool => $cmd_class === strtolower($class)
324 ) !== [];
325 }
326}
checkCmdClassInArray(array $class_array)
Definition: AdminTabs.php:318
__construct(private readonly \ilTabsGUI $tabs_gui, private readonly Language $lng, private readonly \ilCtrl $ctrl, private readonly \ilAccess $access, private readonly int $ref_id)
Definition: AdminTabs.php:60
@ilCtrl_Calls ILIAS\User\Settings\NewAccountMail\SettingsGUI: ILIAS\User\Settings\NewAccountMail\Uplo...
Class ilAccessHandler Checks access for ILIAS objects.
Class ilCtrl provides processing control methods.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$ref_id
Definition: ltiauth.php:66
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: AdminTabs.php:21
global $lng
Definition: privfeed.php:31