19 declare(strict_types=1);
    45         'visible' => 
'user_visible_in_profile',
    46         'changeable' => 
'changeable',
    47         'searchable' => 
'header_searchable',
    48         'required' => 
'required_field',
    50         'course_export' => 
'course_export',
    51         'group_export' => 
'group_export',
    52         'prg_export' => 
'prg_export',
    53         'visib_reg' => 
'header_visible_registration',
    54         'visib_lua' => 
'usr_settings_visib_lua',
    55         'changeable_lua' => 
'usr_settings_changeable_lua'    82         bool $a_call_by_reference
    87         $this->
event = $DIC[
'ilAppEventHandler'];
    88         $this->
filesystem = $DIC->filesystem()->storage();
    89         $this->
upload = $DIC[
'upload'];
    90         $this->db = $DIC[
'ilDB'];
   101         $this->
lng->loadLanguageModule(
'search');
   102         $this->
lng->loadLanguageModule(
'user');
   103         $this->
lng->loadLanguageModule(
'tos');
   104         $this->
ctrl->saveParameter(
   118         $this->requested_ids = $this->user_request->getIds();
   125         $translation = (!isset($properties[
'lang_var']) || $properties[
'lang_var'] === 
'')
   127             : $properties[
'lang_var'];
   129         if ($field_name === 
'country') {
   130             $translation = 
'country_free_text';
   132         if ($field_name === 
'sel_country') {
   133             $translation = 
'country_selection';
   136         return $this->
lng->txt($translation);
   141         $this->user_owner_id = $a_id;
   151         $next_class = $this->
ctrl->getNextClass($this);
   152         $cmd = $this->
ctrl->getCmd();
   155         switch ($next_class) {
   156             case 'ilusertablegui':
   161                 $u_table->initFilter();
   162                 $this->
ctrl->setReturn(
   166                 $this->
ctrl->forwardCommand($u_table);
   169             case 'ilpermissiongui':
   171                 $this->
ctrl->forwardCommand($perm_gui);
   174             case 'ilrepositorysearchgui':
   175                 if (!$this->
access->checkRbacOrPositionPermissionAccess(
   180                     $this->
ilias->raiseError(
   181                         $this->
lng->txt(
'permission_denied'),
   182                         $this->
ilias->error_obj->MESSAGE
   187                 $user_search->setTitle($this->
lng->txt(
'search_user_extended')); 
   188                 $user_search->enableSearchableCheck(
false);
   189                 $user_search->setUserLimitations(
false);
   190                 $user_search->setCallback(
   192                     'searchResultHandler',
   195                 $user_search->addUserAccessFilterCallable([$this, 
'searchUserAccessFilterCallable']);
   196                 $this->tabs_gui->setTabActive(
'search_user_extended');
   197                 $this->
ctrl->setReturn(
   201                 $this->
ctrl->forwardCommand($user_search);
   204             case 'ilcustomuserfieldsgui':
   206                 $this->tabs_gui->setTabActive(
'settings');
   208                 $this->tabs_gui->activateSubTab(
'user_defined_fields');
   210                     $this->requested_ref_id,
   211                     $this->user_request->getFieldId()
   213                 $this->
ctrl->forwardCommand($cf);
   216             case 'iluserstartingpointgui':
   218                 $this->tabs_gui->setTabActive(
'settings');
   220                 $this->tabs_gui->activateSubTab(
'starting_points');
   222                 $this->
ctrl->forwardCommand($cf);
   225             case strtolower(SettingsGUI::class):
   227                 $this->tabs_gui->setTabActive(
'settings');
   229                 $this->tabs_gui->activateSubTab(
'user_profile_info');
   230                 $this->
ctrl->forwardCommand(
   239                         new PromptRepository(
   264         $utab->resetOffset();
   265         $utab->resetFilter();
   274         $this->
ctrl->setParameterByClass(
   279         $this->
ctrl->redirectByClass(
   280             [
'iladministrationgui', 
'ilobjusergui'],
   291         $utab->resetOffset();
   292         $utab->writeFilterToSession();
   294         $this->tabs_gui->activateTab(
'usrf');
   302         if ($this->rbac_system->checkAccess(
'create_usr', $this->object->getRefId())
   303             || $this->rbac_system->checkAccess(
'cat_administrate_users', $this->object->getRefId())) {
   305                 $this->ui_factory->link()->standard(
   306                     $this->
lng->txt(
'usr_add'),
   307                     $this->
ctrl->getLinkTarget($this, 
'addUser')
   312                 $this->ui_factory->link()->standard(
   313                     $this->
lng->txt(
'import_users'),
   314                     $this->
ctrl->getLinkTarget($this, 
'importUserForm')
   319         $list_of_users = null;
   321             && $this->
access->checkRbacOrPositionPermissionAccess(
   326             $list_of_users = $this->
access->filterUserIdsByRbacOrPositionOfCurrentUser(
   340         $utab->addFilterItemValue(
   346         $this->tpl->setContent($utab->getHTML());
   352         $auto->addUserAccessFilterCallable(\Closure::fromCallable([$this, 
'filterUserIdsByRbacOrPositionOfCurrentUser']));
   353         $auto->setSearchFields([
'login', 
'firstname', 
'lastname', 
'email', 
'second_email']);
   354         $auto->enableFieldSearchableCheck(
false);
   355         $auto->setMoreLinkAvailable(
true);
   357         if ($this->user_request->getFetchAll()) {
   361         echo $auto->getList($this->user_request->getTerm());
   370         return $this->
access->filterUserIdsByRbacOrPositionOfCurrentUser(
   380         $this->
ctrl->redirect(
   394         $d = $this->obj_definition->getCreatableSubObjects($this->
object->getType());
   396         if (!$this->rbac_system->checkAccess(
   398             $this->object->getRefId()
   404             foreach (
$d as $row) {
   406                 if ($row[
'max'] > 0) {
   408                     for ($i = 0, $iMax = count($this->data[
'ctrl']); $i < $iMax; $i++) {
   409                         if ($this->data[
'ctrl'][$i][
'type'] == $row[
'name']) {
   414                 if ($row[
'max'] == 
'' || $count < $row[
'max']) {
   415                     $subobj[] = $row[
'name'];
   420         if (is_array($subobj)) {
   427             $this->tpl->setCurrentBlock(
'add_object');
   428             $this->tpl->setVariable(
   432             $this->tpl->setVariable(
   436             $this->tpl->setVariable(
   438                 $this->
lng->txt(
'add')
   440             $this->tpl->parseCurrentBlock();
   446         $this->
ctrl->redirect(
   454         $this->
ctrl->redirectByClass(
   455             'ilrepositorysearchgui',
   463             $this->
ilias->raiseError(
   464                 $this->
lng->txt(
'msg_no_perm_write'),
   465                 $this->
ilias->error_obj->WARNING
   476                 if (!$obj->getActive()) {
   477                     $obj->setLoginAttempts(0);
   487         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'user_activated'), 
true);
   489         if ($this->user_request->getFrSearch()) {
   490             $this->
ctrl->redirectByClass(
   491                 'ilRepositorySearchGUI',
   495             $this->
ctrl->redirect(
   505             $this->
ilias->raiseError(
   506                 $this->
lng->txt(
'msg_no_perm_write'),
   507                 $this->
ilias->error_obj->WARNING
   526         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'user_deactivated'), 
true);
   528         if ($this->user_request->getFrSearch()) {
   529             $this->
ctrl->redirectByClass(
   530                 'ilRepositorySearchGUI',
   534             $this->
ctrl->redirect(
   544             $this->
ilias->raiseError(
   545                 $this->
lng->txt(
'msg_no_perm_write'),
   546                 $this->
ilias->error_obj->WARNING
   556                 $obj->setTimeLimitUnlimited(
true);
   557                 $obj->setTimeLimitFrom(null);
   558                 $obj->setTimeLimitUntil(null);
   559                 $obj->setTimeLimitMessage(
'');
   565         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'access_free_granted'), 
true);
   567         if ($this->user_request->getFrSearch()) {
   568             $this->
ctrl->redirectByClass(
   569                 'ilRepositorySearchGUI',
   573             $this->
ctrl->redirect(
   582         bool $a_from_search = 
false   587         $this->tpl->setContent($a_form->getHTML());
   594         bool $a_from_search = 
false   598             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'));
   604         $form->
setTitle($this->
lng->txt(
'time_limit_add_time_limit_for_selected'));
   606             $this->
ctrl->getFormAction(
   608                 'confirmaccessRestrict'   613             $this->
lng->txt(
'access_from'),
   617         $from->setRequired(
true);
   621             $this->
lng->txt(
'access_until'),
   625         $to->setShowTime(
true);
   629             'confirmaccessRestrict',
   630             $this->
lng->txt(
'confirm')
   634             $this->
lng->txt(
'cancel')
   639             $ufield->setValue((
string) $user_id);
   644         if ($a_from_search || $this->user_request->getFrSearch()) {
   646             $field->setValue(
'1');
   667         if ($timeuntil <= $timefrom) {
   668             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'time_limit_not_valid'));
   673             $this->
ilias->raiseError(
   674                 $this->
lng->txt(
'msg_no_perm_write'),
   675                 $this->
ilias->error_obj->WARNING
   684                 $obj->setTimeLimitUnlimited(
false);
   685                 $obj->setTimeLimitFrom((
int) $timefrom);
   686                 $obj->setTimeLimitUntil((
int) $timeuntil);
   687                 $obj->setTimeLimitMessage(
'');
   691         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'access_restricted'), 
true);
   693         if ($this->user_request->getFrSearch()) {
   694             $this->
ctrl->redirectByClass(
   695                 'ilRepositorySearchGUI',
   699             $this->
ctrl->redirect(
   709         if (!$this->rbac_system->checkAccess(
   711             $this->object->getRefId()
   713             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'msg_no_perm_delete'), 
true);
   714             $this->
ctrl->redirect(
   720         $ids = $this->user_request->getIds();
   722             $this->
user->getId(),
   725             $this->
ilias->raiseError(
   726                 $this->
lng->txt(
'msg_no_delete_yourself'),
   727                 $this->
ilias->error_obj->WARNING
   732         foreach ($ids as 
$id) {
   739         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'user_deleted'), 
true);
   741         if ($this->user_request->getFrSearch()) {
   742             $this->
ctrl->redirectByClass(
   743                 'ilRepositorySearchGUI',
   747             $this->
ctrl->redirect(
   760         if ($this->getSelectAllPostArray()[
'select_cmd_all']) {
   768             if (!$this->
access->checkAccess(
   773                 $this->
access->checkRbacOrPositionPermissionAccess(
   779                 $filtered_users = $this->
access->filterUserIdsByRbacOrPositionOfCurrentUser(
   786                 $utab->addFilterItemValue(
   792             return $utab->getUserIdsForFilter();
   794             return $this->
access->filterUserIdsByRbacOrPositionOfCurrentUser(
   805         return $this->
access->checkRbacOrPositionPermissionAccess(
   814         bool $a_from_search = 
false   818             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'no_checkbox'));
   823         if (!$a_from_search) {
   824             $this->tabs_gui->activateTab(
'obj_usrf');
   826             $this->tabs_gui->activateTab(
'search_user_extended');
   845         if (strcmp($action, 
'addToClipboard') === 0) {
   852         if (!$a_from_search) {
   853             $cancel = 
'cancelUserFolderAction';
   855             $cancel = 
'cancelSearchAction';
   860         $cgui->setFormAction($this->
ctrl->getFormAction($this));
   861         $cgui->setHeaderText($this->
lng->txt(
'info_' . $action . 
'_sure'));
   863             $this->
lng->txt(
'cancel'),
   867             $this->
lng->txt(
'confirm'),
   871         if ($a_from_search) {
   872             $cgui->addHiddenItem(
   878         foreach ($user_ids as 
$id) {
   883                 $login = $this->
lng->txt(
'never');
   903         $this->tpl->setContent($cgui->getHTML());
   910         if (!$this->
access->checkRbacOrPositionPermissionAccess(
   915             $this->
ilias->raiseError(
   916                 $this->
lng->txt(
'permission_denied'),
   917                 $this->
ilias->error_obj->MESSAGE
   922             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'msg_no_delete_yourself'));
   939             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'no_deactivate_yourself'));
   966         $this->tabs_gui->clearTargets();
   967         $this->tabs_gui->setBackTarget(
   968             $this->
lng->txt(
'usrf'),
   969             $this->
ctrl->getLinkTarget(
   975             !$this->rbac_system->checkAccess(
'create_usr', $this->object->getRefId())
   976             && !$this->
access->checkAccess(
'cat_administrate_users', 
'', $this->object->getRefId())
   978             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'permission_denied'));
   982         $this->tpl->setContent($this->
form->getHTML());
   991             $this->
lng->txt(
'import_file'),
   995         $fi->setRequired(
true);
   996         $this->
form->addItem($fi);
   998         $this->
form->addCommandButton(
   999             'importUserRoleAssignment',
  1000             $this->
lng->txt(
'import')
  1002         $this->
form->addCommandButton(
  1004             $this->
lng->txt(
'cancel')
  1007         $this->
form->setTitle($this->
lng->txt(
'import_users'));
  1008         $this->
form->setFormAction($this->
ctrl->getFormAction($this));
  1013         return (strtolower($this->user_request->getBaseClass()) === 
'iladministrationgui');
  1019         if ($this->
filesystem->hasDir($import_dir)) {
  1024             $this->
ctrl->redirect(
  1029             $this->
ctrl->redirectByClass(
  1042         $importDir = 
'user_import/usr_' . $this->
user->getId() . 
'_' . mb_substr(session_id(), 0, 8);
  1052         $this->tabs_gui->clearTargets();
  1053         $this->tabs_gui->setBackTarget(
  1054             $this->
lng->txt(
'usrf'),
  1055             $this->
ctrl->getLinkTarget(
  1062         if ($this->
form->checkInput()) {
  1068             $this->tpl->setContent($message . $this->ui_renderer->render($form));
  1070             $this->
form->setValuesByPost();
  1071             $this->tpl->setContent($this->
form->getHTML());
  1081         $global_roles_assignment_info = null;
  1082         $local_roles_assignment_info = null;
  1085             $xml_file_full_path,
  1088         $import_parser->startParsing();
  1092         $xml_file_name = explode(
  1096         $roles_import_filename = $this->ui_factory->input()->field()
  1097             ->text($this->
lng->txt(
'import_file'))
  1098             ->withDisabled(
true)
  1099             ->withValue(end($xml_file_name));
  1101         $roles_import_count = $this->ui_factory->input()->field()
  1102             ->numeric($this->
lng->txt(
'num_users'))
  1103             ->withDisabled(
true)
  1104             ->withValue($import_parser->getUserCount());
  1107             $xml_file_full_path,
  1110         $import_parser->startParsing();
  1112         $roles = $import_parser->getCollectedRoles();
  1113         $all_gl_roles = $this->rbac_review->getRoleListByObject(
ROLE_FOLDER_ID);
  1115         $roles_of_user = $this->rbac_review->assignedRoles($this->
user->getId());
  1116         foreach ($all_gl_roles as $obj_data) {
  1129                 $gl_roles[$obj_data[
'obj_id']] = $obj_data[
'title'];
  1134         $got_globals = 
false;
  1135         $global_selects = [];
  1136         foreach ($roles as $role_id => $role) {
  1137             if ($role[
'type'] === 
'Global') {
  1138                 $select_options = [];
  1139                 if (!$got_globals) {
  1140                     $global_roles_assignment_info = $this->ui_factory->input()->field()
  1141                         ->text($this->
lng->txt(
'roles_of_import_global'))
  1142                         ->withDisabled(
true)
  1143                         ->withValue($this->
lng->txt(
'assign_global_role'));
  1145                     $select_options[] = $this->
lng->txt(
'usrimport_ignore_role');
  1148                 foreach ($gl_roles as $key => $value) {
  1149                     $select_options[$role_id . 
'-' . $key] = $value;
  1153                 $pre_select = array_search(
  1158                     switch ($role[
'name']) {
  1159                         case 'Administrator':    
  1160                             $pre_select = array_search(
  1167                             $pre_select = array_search(
  1174                             $pre_select = array_search(
  1181                             $pre_select = array_search(
  1188                             $pre_select = array_search(
  1196                 $select = $this->ui_factory->input()->field()
  1201                     ->withValue($pre_select);
  1203                 if (!$got_globals) {
  1204                     $got_globals = 
true;
  1205                     $global_selects[] = $select->withRequired(
true);
  1207                     $global_selects[] = $select;
  1213         $got_locals = 
false;
  1214         foreach ($roles as $role_id => $role) {
  1215             if ($role[
'type'] == 
'Local') {
  1222             $local_roles_assignment_info = $this->ui_factory->input()->field()
  1223                 ->text($this->
lng->txt(
'roles_of_import_local'))
  1224                 ->withDisabled(
true)
  1225                 ->withValue($this->
lng->txt(
'assign_local_role'));
  1237                 foreach ($roles as $role_id => $role) {
  1238                     if ($role[
'type'] == 
'Local') {
  1239                         $searchName = (strpos($role[
'name'], 
'#') === 0) ? $role[
'name'] : 
'#' . $role[
'name'];
  1240                         $matching_role_ids = $roleMailboxSearch->searchRoleIdsByAddressString($searchName);
  1241                         foreach ($matching_role_ids as $mid) {
  1246                                 $loc_roles[] = $mid;
  1255                 $loc_roles = $this->rbac_review->getAssignableRolesInSubtree($this->
object->getRefId());
  1260             foreach ($loc_roles as $key => $loc_role) {
  1262                 $rolf = $this->rbac_review->getFoldersAssignedToRole(
  1272                     !$this->rbac_review->isDeleted($rolf[0]) &&
  1273                     $this->rbac_system->checkAccess(
  1290                     if ($this->tree->isInTree($rolf[0])) {
  1293                         $tmpPath = $this->tree->getPathFull($rolf[0]);
  1294                         $tmpPath[] = $rolf[0];
  1296                         for ($i = 1, $n = count($tmpPath) - 1; $i < $n; $i++) {
  1297                             if ($i < 3 || $i > $n - 3) {
  1298                                 $path_array[] = $tmpPath[$i][
'title'];
  1299                             } elseif ($i == 3 || $i == $n - 3) {
  1300                                 $path_array[] = 
'...';
  1303                             $is_in_subtree |= $tmpPath[$i][
'obj_id'] == $this->
object->getId();
  1308                             array_reverse($path_array)
  1311                         $path = 
'<b>Rolefolder ' . $rolf[0] . 
' not found in tree! (Role ' . $loc_role . 
')</b>';
  1313                     $roleMailboxAddress = (new \ilRoleMailboxAddress($loc_role))->value();
  1314                     $l_roles[$loc_role] = $roleMailboxAddress . 
', ' . 
$path;
  1318             natcasesort($l_roles);
  1319             $l_roles[
'ignore'] = $this->
lng->txt(
'usrimport_ignore_role');
  1322             $local_selects = [];
  1323             foreach ($roles as $role_id => $role) {
  1324                 if ($role[
'type'] == 
'Local') {
  1325                     $searchName = (strpos($role[
'name'], 
'#') === 0) ? $role[
'name'] : 
'#' . $role[
'name'];
  1326                     $matching_role_ids = $roleMailboxSearch->searchRoleIdsByAddressString($searchName);
  1327                     $pre_select = count($matching_role_ids) == 1 ? $role_id . 
'-' . $matching_role_ids[0] : 
'ignore';
  1329                     $selectable_roles = [];
  1334                         $selectable_roles[
'ignore'] = $this->
lng->txt(
'usrimport_ignore_role');
  1335                         foreach ($matching_role_ids as 
$id) {
  1336                             $selectable_roles[$role_id . 
'-' . 
$id] = $l_roles[
$id];
  1339                         foreach ($l_roles as $local_role_id => $value) {
  1340                             if ($local_role_id !== 
'ignore') {
  1341                                 $selectable_roles[$role_id . 
'-' . $local_role_id] = $value;
  1346                     if (count($selectable_roles) > 0) {
  1347                         $select = $this->ui_factory->input()->field()
  1348                             ->select($role[
'name'], $selectable_roles)
  1349                             ->withRequired(
true);
  1350                         if (array_key_exists($pre_select, $selectable_roles)) {
  1351                             $select = $select->withValue($pre_select);
  1353                         $local_selects[] = $select;
  1364         $conflict_action_select = $this->ui_factory->input()->field()
  1366                 $this->
lng->txt(
'conflict_handling'),
  1371                     $this->
lng->txt(
'usrimport_conflict_handling_info')
  1375             ->withRequired(
true);
  1378         $this->
lng->loadLanguageModule(
'mail');
  1380         $mail_section = null;
  1381         if (trim($amail[
'body'] ?? 
'') != 
'' && trim($amail[
'subject'] ?? 
'') != 
'') {
  1382             $send_checkbox = $this->ui_factory->input()->field()->checkbox($this->
lng->txt(
'user_send_new_account_mail'))
  1385             $mail_section = $this->ui_factory->input()->field()->section(
  1387                 $this->
lng->txt(
'mail_account_mail')
  1391         $file_info_section = $this->ui_factory->input()->field()->section(
  1393                 'filename' => $roles_import_filename,
  1394                 'import_count' => $roles_import_count,
  1396             $this->
lng->txt(
'file_info')
  1399         $form_action = $this->
ctrl->getFormActionByClass(self::class, 
'importUsers');
  1402             'file_info' => $file_info_section
  1405         if (!empty($global_selects)) {
  1406             $global_role_info_section = $this->ui_factory->input()
  1408                 ->section([$global_roles_assignment_info], $this->
lng->txt(
'global_role_assignment'));
  1409             $global_role_selection_section = $this->ui_factory->input()->field()->section($global_selects, 
'');
  1410             $form_elements[
'global_role_info'] = $global_role_info_section;
  1411             $form_elements[
'global_role_selection'] = $global_role_selection_section;
  1414         if (!empty($local_selects)) {
  1415             $local_role_info_section = $this->ui_factory->input()->field()->section(
  1416                 [$local_roles_assignment_info],
  1417                 $this->
lng->txt(
'local_role_assignment')
  1419             $local_role_selection_section = $this->ui_factory->input()->field()->section(
  1424             $form_elements[
'local_role_info'] = $local_role_info_section;
  1425             $form_elements[
'local_role_selection'] = $local_role_selection_section;
  1428         $form_elements[
'conflict_action'] = $this->ui_factory->input()->field()->section([$conflict_action_select], 
'');
  1430         if ($mail_section !== null) {
  1431             $form_elements[
'send_mail'] = $mail_section;
  1434         return [$this->ui_factory->input()->container()->form()->standard(
  1447         if (!$this->
upload->hasBeenProcessed()) {
  1448             $this->
upload->process();
  1452         if ($this->
filesystem->hasDir($import_dir)) {
  1457         foreach ($this->
upload->getResults() as $single_file_upload) {
  1458             $file_name = $single_file_upload->getName();
  1459             $parts = pathinfo($file_name);
  1462             if (!$single_file_upload->isOK()) {
  1464                 $this->
ilias->raiseError(
  1465                     $this->
lng->txt(
'no_import_file_found'),
  1466                     $this->
ilias->error_obj->MESSAGE
  1471             $this->
upload->moveFilesTo(
  1477             if ($single_file_upload->getMimeType() == 
'application/zip') {
  1480                     . $this->
user->getId() . 
'_' . session_id() . 
'/' . $file_name;
  1481                 $this->dic->legacyArchives()->unzip($full_path);
  1484                 $file_list = $this->
filesystem->listContents($import_dir);
  1486                 foreach ($file_list as $key => $a_file) {
  1491                         unset($file_list[$key]);
  1492                         $xml_file = $a_file->getPath();
  1498                 foreach ($file_list as $a_file) {
  1499                     $this->
filesystem->delete($a_file->getPath());
  1502                 if (is_null($xml_file)) {
  1505                         '.' . 
$parts[
'extension']
  1507                     $xml_file = $import_dir . 
'/' . $subdir . 
'/' . $subdir . 
'.xml';
  1513                 $xml_file = $file->getPath();
  1519                 $this->
ilias->raiseError(
  1520                     $this->
lng->txt(
'no_xml_file_found_in_zip')
  1521                     . 
' ' . $subdir . 
'/' . $subdir . 
'.xml',
  1522                     $this->
ilias->error_obj->MESSAGE
  1540                 $this->tpl->setOnScreenMessage(
  1543                         $this->
lng->txt(
'verification_failure_log')
  1547                 $this->
ctrl->redirectByClass(self::class, 
'importUserForm');
  1560         $file_list = $this->
filesystem->listContents($import_dir);
  1562         if (count($file_list) > 1) {
  1564             $this->tpl->setOnScreenMessage($this->
lng->txt(
'usrimport_wrong_file_count'), 
true);
  1567         $xml_file = $file_list[0]->getPath();
  1572         if (!$this->user_request->isPost()) {
  1573             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'usrimport_form_not_evaluabe'), 
true);
  1578         $result = $form->getData();
  1580         if ($result === null) {
  1581             $this->tpl->setContent($this->ui_renderer->render($form));
  1585         $rule = $result[
'conflict_action'][0] ?? 1;
  1588         $local_role_selection = (array) ($result[
'local_role_selection'] ?? []);
  1589         $global_role_selection = (array) ($result[
'global_role_selection'] ?? []);
  1590         $roles = array_merge(
  1591             $local_role_selection,
  1592             $global_role_selection
  1595         $role_assignment = [];
  1596         foreach ($roles as $value) {
  1601             if (count($keys) === 2) {
  1602                 $role_assignment[$keys[0]] = $keys[1];
  1616         if (!empty($role_assignment)) {
  1617             $global_roles = $this->rbac_review->getGlobalRoles();
  1618             $roles_of_user = $this->rbac_review->assignedRoles($this->
user->getId());
  1619             foreach ($role_assignment as $role_id_string) {
  1620                 $role_id = $this->
refinery->byTrying([
  1621                     $this->
refinery->kindlyTo()->int(),
  1624                 if ($role_id === null) {
  1636         if (isset($result[
'send_mail'])) {
  1637             $import_parser->setSendMail($result[
'send_mail'][0]);
  1640         $import_parser->setRoleAssignment($role_assignment);
  1641         $import_parser->startParsing();
  1646         switch ($import_parser->getErrorLevel()) {
  1648                 $this->tpl->setOnScreenMessage(
  1650                     $this->
lng->txt(
'user_imported'),
  1655                 $this->tpl->setOnScreenMessage(
  1657                     $this->
lng->txt(
'user_imported_with_warnings')
  1658                     . $import_parser->getProtocolAsHTML(
  1659                         $this->
lng->txt(
'import_warning_log')
  1665                 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'user_import_failed'), 
true);
  1671             $this->
ctrl->redirect(
  1676             $this->
ctrl->redirectByClass(
  1685         array $roles_of_user,
  1686         array $global_roles,
  1705                 $this->tpl->setOnScreenMessage(
  1707                     $this->
lng->txt(
'usrimport_with_specified_role_not_permitted'),
  1715         $rolf = $this->rbac_review->getFoldersAssignedToRole(
  1719         if ($this->rbac_review->isDeleted($rolf[0])
  1720             || !$this->rbac_system->checkAccess(
  1726             $this->tpl->setOnScreenMessage(
  1728                 $this->
lng->txt(
'usrimport_with_specified_role_not_permitted'),
  1742         $show_blocking_time_in_days = $this->
settings->get(
'loginname_change_blocking_time') / 86400;
  1743         $show_blocking_time_in_days = (float) $show_blocking_time_in_days;
  1748             'lua' => $aset->isLocalUserAdministrationEnabled(),
  1749             'lrua' => $aset->isUserAccessRestricted(),
  1750             'allow_change_loginname' => (bool) $this->
settings->get(
'allow_change_loginname'),
  1751             'create_history_loginname' => (bool) $this->
settings->get(
'create_history_loginname'),
  1752             'reuse_of_loginnames' => (bool) $this->
settings->get(
'reuse_of_loginnames'),
  1753             'loginname_change_blocking_time' => $show_blocking_time_in_days,
  1754             'user_reactivate_code' => (
int) $this->
settings->get(
'user_reactivate_code'),
  1755             'user_own_account' => (
int) $this->
settings->get(
'user_delete_own_account'),
  1756             'user_own_account_email' => $this->
settings->get(
'user_delete_own_account_email'),
  1757             'dpro_withdrawal_usr_deletion' => (bool) $this->
settings->get(
'dpro_withdrawal_usr_deletion'),
  1758             'tos_withdrawal_usr_deletion' => (bool) $this->
settings->get(
'tos_withdrawal_usr_deletion'),
  1759             'login_max_attempts' => $security->getLoginMaxAttempts() > 0 ? $security->getLoginMaxAttempts() : 
'',
  1760             'ps_prevent_simultaneous_logins' => (
int) $security->isPreventionOfSimultaneousLoginsEnabled(),
  1761             'password_assistance' => (bool) $this->
settings->get(
'password_assistance'),
  1762             'letter_avatars' => (
int) $this->
settings->get(
'letter_avatars'),
  1763             'password_change_on_first_login_enabled' => $security->isPasswordChangeOnFirstLoginEnabled() ? 1 : 0,
  1764             'password_max_age' => $security->getPasswordMaxAge()
  1768         $this->
form->setValuesByArray(
  1771                 $passwordPolicySettings,
  1772                 [
'pw_policy_hash' => md5(
  1775                         $passwordPolicySettings
  1782         $this->tpl->setContent($this->
form->getHTML());
  1805         if ($this->
form->checkInput()) {
  1807             if ($this->
form->getInput(
'allow_change_loginname') === 
'1' &&
  1808                !is_numeric($this->
form->getInput(
'loginname_change_blocking_time'))) {
  1810                 $this->
form->getItemByPostVar(
'loginname_change_blocking_time')
  1811                            ->setAlert($this->
lng->txt(
'loginname_change_blocking_time_invalidity_info'));
  1817             $security->setPasswordCharsAndNumbersEnabled(
  1818                 (
bool) $this->
form->getInput(
'password_chars_and_numbers_enabled')
  1820             $security->setPasswordSpecialCharsEnabled(
  1821                 (
bool) $this->
form->getInput(
'password_special_chars_enabled')
  1823             $security->setPasswordMinLength(
  1824                 (
int) $this->
form->getInput(
'password_min_length')
  1826             $security->setPasswordMaxLength(
  1827                 (
int) $this->
form->getInput(
'password_max_length')
  1829             $security->setPasswordNumberOfUppercaseChars(
  1830                 (
int) $this->
form->getInput(
'password_ucase_chars_num')
  1832             $security->setPasswordNumberOfLowercaseChars(
  1833                 (
int) $this->
form->getInput(
'password_lowercase_chars_num')
  1835             $security->setPasswordMaxAge(
  1836                 (
int) $this->
form->getInput(
'password_max_age')
  1838             $security->setLoginMaxAttempts(
  1839                 (
int) $this->
form->getInput(
'login_max_attempts')
  1841             $security->setPreventionOfSimultaneousLogins(
  1842                 (
bool) $this->
form->getInput(
'ps_prevent_simultaneous_logins')
  1844             $security->setPasswordChangeOnFirstLoginEnabled(
  1845                 (
bool) $this->
form->getInput(
'password_change_on_first_login_enabled')
  1847             $security->setPasswordMustNotContainLoginnameStatus(
  1848                 (
bool) $this->
form->getInput(
'password_must_not_contain_loginame')
  1851             if ($security->validate($this->form) !== null) {
  1863                     'allow_change_loginname',
  1864                     $this->
form->getInput(
'allow_change_loginname')
  1867                     'create_history_loginname',
  1868                     $this->
form->getInput(
'create_history_loginname')
  1871                     'reuse_of_loginnames',
  1872                     $this->
form->getInput(
'reuse_of_loginnames')
  1874                 $save_blocking_time_in_seconds = (string) ((
int) $this->
form->getInput(
  1875                     'loginname_change_blocking_time'  1878                     'loginname_change_blocking_time',
  1879                     $save_blocking_time_in_seconds
  1882                     'user_reactivate_code',
  1883                     $this->
form->getInput(
'user_reactivate_code')
  1887                     'user_delete_own_account',
  1888                     $this->
form->getInput(
'user_own_account')
  1891                     'user_delete_own_account_email',
  1892                     $this->
form->getInput(
'user_own_account_email')
  1895                     'dpro_withdrawal_usr_deletion',
  1896                     $this->
form->getInput(
'dpro_withdrawal_usr_deletion') === 
'1' ? 
'1' : 
'0'  1899                     'tos_withdrawal_usr_deletion',
  1900                     $this->
form->getInput(
'tos_withdrawal_usr_deletion') === 
'1' ? 
'1' : 
'0'  1904                     'password_assistance',
  1905                     $this->
form->getInput(
'password_assistance')
  1910                     $this->
form->getInput(
'letter_avatars')
  1913                 $requestPasswordReset = 
false;
  1914                 if ($this->
form->getInput(
'pw_policy_hash')) {
  1915                     $oldSettingsHash = $this->
form->getInput(
'pw_policy_hash');
  1916                     $currentSettingsHash = md5(
  1922                     $requestPasswordReset = ($oldSettingsHash !== $currentSettingsHash);
  1925                 if ($requestPasswordReset) {
  1926                     $this->
ctrl->redirect(
  1928                         'askForUserPasswordReset'  1931                     $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'saved_successfully'));
  1934                 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'form_input_not_valid'));
  1937             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'form_input_not_valid'));
  1939         $this->
form->setValuesByPost();
  1940         $this->tpl->setContent($this->
form->getHTML());
  1945         LocalUserPasswordManager::getInstance()->resetLastPasswordChangeForLocalUsers();
  1946         $this->
lng->loadLanguageModule(
'ps');
  1948         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'ps_passwd_policy_change_force_user_reset_succ'), 
true);
  1949         $this->
ctrl->redirect(
  1957         $this->
lng->loadLanguageModule(
'ps');
  1959         $this->tpl->setOnScreenMessage(
  1961             $this->
lng->txt(
'ps_passwd_policy_changed_force_user_reset')
  1965             $this->ui_factory->button()->standard(
  1966                 $this->
lng->txt(
'yes'),
  1967                 $this->
ctrl->getLinkTargetByClass(self::class, 
'forceUserPasswordReset')
  1972             $this->ui_factory->button()->standard(
  1973                 $this->
lng->txt(
'no'),
  1974                 $this->
ctrl->getLinkTargetByClass(self::class, 
'generalSettings')
  1982         $this->tabs_gui->setTabActive(
'settings');
  1983         $this->tabs_gui->setSubTabActive(
'general_settings');
  1986         $this->
form->setFormAction(
  1987             $this->
ctrl->getFormAction(
  1989                 'saveGeneralSettings'  1993         $this->
form->setTitle($this->
lng->txt(
'general_settings'));
  1996             $this->
lng->txt(
'enable_local_user_administration'),
  1999         $lua->setInfo($this->
lng->txt(
'enable_local_user_administration_info'));
  2000         $lua->setValue(
'1');
  2001         $this->
form->addItem($lua);
  2004             $this->
lng->txt(
'restrict_user_access'),
  2007         $lrua->setInfo($this->
lng->txt(
'restrict_user_access_info'));
  2008         $lrua->setValue(
'1');
  2009         $this->
form->addItem($lrua);
  2012             $this->
lng->txt(
'user_account_code_setting'),
  2013             'user_reactivate_code'  2015         $code->setInfo($this->
lng->txt(
'user_account_code_setting_info'));
  2016         $this->
form->addItem($code);
  2019             $this->
lng->txt(
'user_allow_delete_own_account'),
  2022         $this->
form->addItem($own);
  2024             $this->
lng->txt(
'user_delete_own_account_notification_email'),
  2025             'user_own_account_email'  2027         $own->addSubItem($own_email);
  2029         $this->
lng->loadLanguageModule(
'tos');
  2030         $this->
lng->loadLanguageModule(
'dpro');
  2031         $this->
form->addItem($this->
checkbox(
'tos_withdrawal_usr_deletion'));
  2032         $this->
form->addItem($this->
checkbox(
'dpro_withdrawal_usr_deletion'));
  2034         $allow_client_maintenance = $this->
settings->get(
  2035             'session_allow_client_maintenance',
  2039         $this->
lng->loadLanguageModule(
'ps');
  2042         $pass->setTitle($this->
lng->txt(
'ps_password_settings'));
  2043         $this->
form->addItem($pass);
  2046             $this->
lng->txt(
'ps_password_change_on_first_login_enabled'),
  2047             'password_change_on_first_login_enabled'  2049         $check->setInfo($this->
lng->txt(
'ps_password_change_on_first_login_enabled_info'));
  2053             $this->
lng->txt(
'ps_password_must_not_contain_loginame'),
  2054             'password_must_not_contain_loginame'  2056         $check->setInfo($this->
lng->txt(
'ps_password_must_not_contain_loginame_info'));
  2060             $this->
lng->txt(
'ps_password_chars_and_numbers_enabled'),
  2061             'password_chars_and_numbers_enabled'  2064         $check->setInfo($this->
lng->txt(
'ps_password_chars_and_numbers_enabled_info'));
  2068             $this->
lng->txt(
'ps_password_special_chars_enabled'),
  2069             'password_special_chars_enabled'  2072         $check->setInfo($this->
lng->txt(
'ps_password_special_chars_enabled_info'));
  2076             $this->
lng->txt(
'ps_password_min_length'),
  2077             'password_min_length'  2079         $text->setInfo($this->
lng->txt(
'ps_password_min_length_info'));
  2081         $text->setMaxLength(2);
  2085             $this->
lng->txt(
'ps_password_max_length'),
  2086             'password_max_length'  2088         $text->setInfo($this->
lng->txt(
'ps_password_max_length_info'));
  2090         $text->setMaxLength(3);
  2094             $this->
lng->txt(
'ps_password_uppercase_chars_num'),
  2095             'password_ucase_chars_num'  2097         $text->setInfo($this->
lng->txt(
'ps_password_uppercase_chars_num_info'));
  2098         $text->setMinValue(0);
  2100         $text->setMaxLength(3);
  2104             $this->
lng->txt(
'ps_password_lowercase_chars_num'),
  2105             'password_lowercase_chars_num'  2107         $text->setInfo($this->
lng->txt(
'ps_password_lowercase_chars_num_info'));
  2108         $text->setMinValue(0);
  2110         $text->setMaxLength(3);
  2114             $this->
lng->txt(
'ps_password_max_age'),
  2117         $text->setInfo($this->
lng->txt(
'ps_password_max_age_info'));
  2119         $text->setMaxLength(3);
  2124             $this->
lng->txt(
'enable_password_assistance'),
  2125             'password_assistance'  2127         $cb->setInfo($this->
lng->txt(
'password_assistance_info'));
  2128         $this->
form->addItem($cb);
  2131         $pass->setTitle($this->
lng->txt(
'ps_security_protection'));
  2132         $this->
form->addItem($pass);
  2135             $this->
lng->txt(
'ps_login_max_attempts'),
  2136             'login_max_attempts'  2138         $text->setInfo($this->
lng->txt(
'ps_login_max_attempts_info'));
  2139         $text->allowDecimals(
false);
  2140         $text->setMinValue(1);
  2143         $text->setMaxLength(2);
  2148             $this->
lng->txt(
'ps_prevent_simultaneous_logins'),
  2149             'ps_prevent_simultaneous_logins'  2151         $objCb->setValue(
'1');
  2152         $objCb->setInfo($this->
lng->txt(
'ps_prevent_simultaneous_logins_info'));
  2153         $this->
form->addItem($objCb);
  2156         $log->setTitle($this->
lng->txt(
'loginname_settings'));
  2157         $this->
form->addItem($log);
  2160             $this->
lng->txt(
'allow_change_loginname'),
  2161             'allow_change_loginname'  2163         $chbChangeLogin->setValue(
'1');
  2164         $this->
form->addItem($chbChangeLogin);
  2166             $this->
lng->txt(
'history_loginname'),
  2167             'create_history_loginname'  2169         $chbCreateHistory->setInfo($this->
lng->txt(
'loginname_history_info'));
  2170         $chbCreateHistory->setValue(
'1');
  2172         $chbChangeLogin->addSubItem($chbCreateHistory);
  2174             $this->
lng->txt(
'reuse_of_loginnames_contained_in_history'),
  2175             'reuse_of_loginnames'  2177         $chbReuseLoginnames->setValue(
'1');
  2178         $chbReuseLoginnames->setInfo($this->
lng->txt(
'reuse_of_loginnames_contained_in_history_info'));
  2180         $chbChangeLogin->addSubItem($chbReuseLoginnames);
  2182             $this->
lng->txt(
'loginname_change_blocking_time'),
  2183             'loginname_change_blocking_time'  2185         $chbChangeBlockingTime->allowDecimals(
true);
  2186         $chbChangeBlockingTime->setSuffix($this->
lng->txt(
'days'));
  2187         $chbChangeBlockingTime->setInfo($this->
lng->txt(
'loginname_change_blocking_time_info'));
  2188         $chbChangeBlockingTime->setSize(10);
  2189         $chbChangeBlockingTime->setMaxLength(10);
  2190         $chbChangeLogin->addSubItem($chbChangeBlockingTime);
  2193             $this->
lng->txt(
'usr_letter_avatars'),
  2197         $la->setInfo($this->
lng->txt(
'usr_letter_avatars_info'));
  2198         $this->
form->addItem($la);
  2200         $passwordPolicySettingsHash = new \ilHiddenInputGUI(
'pw_policy_hash');
  2201         $this->
form->addItem($passwordPolicySettingsHash);
  2203         $this->
form->addCommandButton(
  2204             'saveGeneralSettings',
  2205             $this->
lng->txt(
'save')
  2221         $this->
lng->loadLanguageModule(
'administration');
  2222         $this->
lng->loadLanguageModule(
'mail');
  2223         $this->
lng->loadLanguageModule(
'chatroom');
  2225         $this->tabs_gui->activateTab(
'settings');
  2226         $this->tabs_gui->activateSubTab(
'standard_fields');
  2232         if ($this->confirm_change) {
  2233             $tab->setConfirmChange();
  2235         $this->tpl->setContent($tab->getHTML());
  2248         $checked = $this->user_request->getChecked();
  2249         $selected = $this->user_request->getSelect();
  2255         $up->skipField(
'username');
  2256         $field_properties = $up->getStandardFields();
  2257         $profile_fields = array_keys($field_properties);
  2260         foreach ($profile_fields as $field) {
  2261             if (($checked[
'required_' . $field] ?? 
false) &&
  2262                 !(
int) ($checked[
'visib_reg_' . $field] ?? null)
  2270             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'invalid_visible_required_options_selected'));
  2271             $this->confirm_change = 1;
  2277         $fixed_required_fields = [
  2284             'hide_own_online_status' => 0
  2288         if ($action == 
'save') {
  2293         if ($this->handleChangeListeners($changed_fields, $field_properties)) {
  2297         foreach ($profile_fields as $field) {
  2302                     (
bool) ($checked[
'searchable_' . $field] ?? 
false)
  2306             if (!($checked[
'visible_' . $field] ?? 
false) && !($field_properties[$field][
'visible_hide'] ?? 
false)) {
  2318             if (!($checked[
'changeable_' . $field] ?? 
false) &&
  2319                 !($field_properties[$field][
'changeable_hide'] ?? 
false)) {
  2332             if (($checked[
'visib_reg_' . $field] ?? 
false) && !($field_properties[$field][
'visib_reg_hide'] ?? 
false)) {
  2334                     'usr_settings_visib_reg_' . $field,
  2339                     'usr_settings_visib_reg_' . $field,
  2344             if ($checked[
'visib_lua_' . $field] ?? 
false) {
  2346                     'usr_settings_visib_lua_' . $field,
  2351                     'usr_settings_visib_lua_' . $field,
  2356             if ((
int) ($checked[
'changeable_lua_' . $field] ?? 
false)) {
  2358                     'usr_settings_changeable_lua_' . $field,
  2363                     'usr_settings_changeable_lua_' . $field,
  2368             if (($checked[
'export_' . $field] ?? 
false) && !($field_properties[$field][
'export_hide'] ?? 
false)) {
  2369                 $this->
ilias->setSetting(
  2370                     'usr_settings_export_' . $field,
  2374                 $this->
ilias->deleteSetting(
'usr_settings_export_' . $field);
  2378             if (($checked[
'course_export_' . $field] ?? 
false) && !($field_properties[$field][
'course_export_hide'] ?? 
false)) {
  2379                 $this->
ilias->setSetting(
  2380                     'usr_settings_course_export_' . $field,
  2384                 $this->
ilias->deleteSetting(
'usr_settings_course_export_' . $field);
  2388             if (($checked[
'group_export_' . $field] ?? 
false) && !($field_properties[$field][
'group_export_hide'] ?? 
false)) {
  2389                 $this->
ilias->setSetting(
  2390                     'usr_settings_group_export_' . $field,
  2394                 $this->
ilias->deleteSetting(
'usr_settings_group_export_' . $field);
  2397             if (($checked[
'prg_export_' . $field] ?? 
false) && !($field_properties[$field][
'prg_export_hide'] ?? 
false)) {
  2398                 $this->
ilias->setSetting(
  2399                     'usr_settings_prg_export_' . $field,
  2403                 $this->
ilias->deleteSetting(
'usr_settings_prg_export_' . $field);
  2406             $is_fixed = array_key_exists(
  2408                 $fixed_required_fields
  2410             if (($is_fixed && $fixed_required_fields[$field]) || (!$is_fixed && ($checked[
'required_' . $field] ?? 
false))) {
  2411                 $this->
ilias->setSetting(
  2412                     'require_' . $field,
  2416                 $this->
ilias->deleteSetting(
'require_' . $field);
  2420         $this->
ilias->setSetting(
  2421             'session_reminder_lead_time',
  2422             $this->user_request->getDefaultSessionReminder()
  2425         if (isset($checked[
'export_preferences']) && $checked[
'export_preferences'] === 1) {
  2426             $this->
ilias->setSetting(
  2427                 'usr_settings_export_preferences',
  2431             $this->
ilias->deleteSetting(
'usr_settings_export_preferences');
  2434         $this->
ilias->setSetting(
  2435             'mail_incoming_mail',
  2436             $selected[
'default_mail_incoming_mail'] ?? 
'0'  2438         $this->
ilias->setSetting(
  2439             'chat_osc_accept_msg',
  2440             $selected[
'default_chat_osc_accept_msg'] ?? 
'n'  2442         $this->
ilias->setSetting(
  2443             'chat_broadcast_typing',
  2444             $selected[
'default_chat_broadcast_typing'] ?? 
'n'  2446         $this->
ilias->setSetting(
  2447             'bs_allow_to_contact_me',
  2448             $selected[
'default_bs_allow_to_contact_me'] ?? 
'n'  2450         $this->
ilias->setSetting(
  2451             'hide_own_online_status',
  2452             $selected[
'default_hide_own_online_status'] ?? 
'n'  2455         if ($this->usrFieldChangeListenersAccepted && count($changed_fields) > 0) {
  2456             $this->
event->raise(
  2457                 'components/ILIAS/User',
  2458                 'onUserFieldAttributesChanged',
  2463         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'usr_settings_saved'));
  2469         $this->usrFieldChangeListenersAccepted = 
true;
  2477         array $interested_change_listeners
  2479         $post = $this->user_request->getParsedBody();
  2481         $confirmDialog->setHeaderText($this->
lng->txt(
'usr_field_change_components_listening'));
  2482         $confirmDialog->setFormAction($this->
ctrl->getFormActionByClass(
  2486         $confirmDialog->setConfirm($this->
lng->txt(
'confirm'), 
'confirmUsrFieldChangeListeners');
  2487         $confirmDialog->setCancel($this->
lng->txt(
'cancel'), 
'settings');
  2490             'tpl.usr_field_change_listener_confirm.html',
  2493             'components/ILIAS/User'  2496         foreach ($interested_change_listeners as $interested_change_listener) {
  2497             $tpl->
setVariable(
'FIELD_NAME', $interested_change_listener->getName());
  2498             foreach ($interested_change_listener->getAttributes() as $attribute) {
  2500                 foreach ($attribute->getComponents() as $component) {
  2513         $confirmDialog->addItem(
'', 
'0', 
$tpl->
get());
  2515         foreach (
$post[
'chb'] as $postVar => $value) {
  2516             $confirmDialog->addHiddenItem(
"chb[{$postVar}]", $value);
  2518         foreach (
$post[
'select'] as $postVar => $value) {
  2519             $confirmDialog->addHiddenItem(
"select[{$postVar}]", $value);
  2521         foreach (
$post[
'current'] as $postVar => $value) {
  2522             $confirmDialog->addHiddenItem(
"current[{$postVar}]", $value);
  2524         $this->tpl->setContent($confirmDialog->getHTML());
  2532     private function handleChangeListeners(
  2533         array $changed_fields,
  2534         array $field_properties
  2536         if (count($changed_fields) > 0) {
  2537             $interested_change_listeners = [];
  2538             foreach ($field_properties as $field_name => $properties) {
  2539                 if (!isset($properties[
'change_listeners'])) {
  2543                 foreach ($properties[
'change_listeners'] as $change_listener_class_name) {
  2547                     $listener = 
new $change_listener_class_name($this->dic);
  2548                     foreach ($changed_fields as $changed_field) {
  2549                         $attribute_name = $changed_field->getAttributeName();
  2550                         $description_for_field = $listener->getDescriptionForField($field_name, $attribute_name);
  2551                         if ($description_for_field !== null && $description_for_field !== 
'') {
  2552                             $interested_change_listener = null;
  2553                             foreach ($interested_change_listeners as $interested_listener) {
  2554                                 if ($interested_listener->getFieldName() === $field_name) {
  2555                                     $interested_change_listener = $interested_listener;
  2560                             if ($interested_change_listener === null) {
  2566                                 $interested_change_listeners[] = $interested_change_listener;
  2569                             $interested_attribute = $interested_change_listener->addAttribute($attribute_name);
  2570                             $interested_attribute->addComponent(
  2571                                 $listener->getComponentName(),
  2572                                 $description_for_field
  2579             if (!$this->usrFieldChangeListenersAccepted && count($interested_change_listeners) > 0) {
  2593         $changed_fields = [];
  2594         $post = $this->user_request->getParsedBody();
  2596             !isset(
$post[
'chb'])
  2597             && !is_array(
$post[
'chb'])
  2598             && !isset(
$post[
'current'])
  2599             && !is_array(
$post[
'current'])
  2601             return $changed_fields;
  2604         $old = 
$post[
'current'];
  2605         $new = 
$post[
'chb'];
  2607         foreach ($old as $key => $old_value) {
  2608             if (!isset($new[$key])) {
  2609                 $is_boolean = filter_var($old_value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
  2610                 $new[$key] = $is_boolean ? 
'0' : $old_value;
  2614         $oldToNewDiff = array_diff_assoc($old, $new);
  2616         foreach ($oldToNewDiff as $key => $old_value) {
  2620         return $changed_fields;
  2628         $action[-1] = $this->
lng->txt(
'all_users');
  2629         $action[1] = $this->
lng->txt(
'usr_active_only');
  2630         $action[0] = $this->
lng->txt(
'usr_inactive_only');
  2631         $action[2] = $this->
lng->txt(
'usr_limited_access_only');
  2632         $action[3] = $this->
lng->txt(
'usr_without_courses');
  2633         $action[4] = $this->
lng->txt(
'usr_filter_lastlogin');
  2634         $action[5] = $this->
lng->txt(
'usr_filter_coursemember');
  2635         $action[6] = $this->
lng->txt(
'usr_filter_groupmember');
  2636         $action[7] = $this->
lng->txt(
'usr_filter_role');
  2653         $files = $this->user_request->getFiles();
  2654         if (count($files) == 0) {
  2655             $this->
ilias->raiseError(
  2656                 $this->
lng->txt(
'no_checkbox'),
  2657                 $this->
ilias->error_obj->MESSAGE
  2661         if (count($files) > 1) {
  2662             $this->
ilias->raiseError(
  2663                 $this->
lng->txt(
'select_max_one_item'),
  2664                 $this->
ilias->error_obj->MESSAGE
  2668         $file = basename($files[0]);
  2670         $export_dir = $this->
object->getExportDirectory();
  2672             $export_dir . 
'/' . $file,
  2679         $files = $this->user_request->getFiles();
  2680         if (count($files) == 0) {
  2681             $this->
ilias->raiseError(
  2682                 $this->
lng->txt(
'no_checkbox'),
  2683                 $this->
ilias->error_obj->MESSAGE
  2688         $cgui->setFormAction($this->
ctrl->getFormAction($this));
  2689         $cgui->setHeaderText($this->
lng->txt(
'info_delete_sure'));
  2691             $this->
lng->txt(
'cancel'),
  2692             'cancelDeleteExportFile'  2695             $this->
lng->txt(
'confirm'),
  2700         foreach ($files as $file) {
  2706                 $this->
lng->txt(
'obj_usrf')
  2710         $this->tpl->setContent($cgui->getHTML());
  2715         $this->
ctrl->redirectByClass(
  2716             'ilobjuserfoldergui',
  2724         $files = $this->user_request->getFiles();
  2725         $export_dir = $this->
object->getExportDirectory();
  2726         foreach ($files as $file) {
  2727             $file = basename($file);
  2729             $exp_file = $export_dir . 
'/' . $file;
  2730             if (is_file($exp_file)) {
  2734         $this->
ctrl->redirectByClass(
  2735             'ilobjuserfoldergui',
  2748         $this->
object->buildExportFile($this->user_request->getExportType());
  2749         $this->
ctrl->redirect(
  2760             'userfolder_export_excel_x86',
  2761             'userfolder_export_csv',
  2762             'userfolder_export_xml'  2765         foreach ($export_types as 
$type) {
  2766             $this->
ctrl->setParameterByClass(self::class, 
'export_type', $type);
  2767             $options[] = $this->ui_factory->button()->shy(
  2768                 $this->
lng->txt($type),
  2769                 $this->
ctrl->getLinkTargetByClass(self::class, 
'performExport')
  2772         $type_selection = $this->ui_factory->dropdown()->standard($options)
  2773             ->withLabel($this->
lng->txt(
'create_export_file'));
  2780         $table = new \ilUserExportFileTableGUI(
  2785         $table->parse($this->
object->getExportFiles());
  2787         $this->tpl->setContent($table->getHTML());
  2792         $this->
lng->loadLanguageModule(
'meta');
  2793         $this->
lng->loadLanguageModule(
'mail');
  2799         $form->
setTitle($this->
lng->txt(
'user_new_account_mail'));
  2802         $langs = $this->
lng->getInstalledLanguages();
  2803         foreach ($langs as $lang_key) {
  2806             $title = $this->
lng->txt(
'meta_l_' . $lang_key);
  2807             if ($lang_key == $this->
lng->getDefaultLanguage()) {
  2808                 $title .= 
' (' . $this->
lng->txt(
'default') . 
')';
  2812             $header->setTitle($title);
  2816                 $this->
lng->txt(
'subject'),
  2817                 'subject_' . $lang_key
  2819             $subj->setValue($amail[
'subject'] ?? 
'');
  2823                 $this->
lng->txt(
'mail_salutation_general'),
  2824                 'sal_g_' . $lang_key
  2826             $salg->setValue($amail[
'sal_g'] ?? 
'');
  2830                 $this->
lng->txt(
'mail_salutation_female'),
  2831                 'sal_f_' . $lang_key
  2833             $salf->setValue($amail[
'sal_f'] ?? 
'');
  2837                 $this->
lng->txt(
'mail_salutation_male'),
  2838                 'sal_m_' . $lang_key
  2840             $salm->setValue($amail[
'sal_m'] ?? 
'');
  2844                 $this->
lng->txt(
'message_content'),
  2847             $body->
setValue($amail[
'body'] ?? 
'');
  2849             $body->setCols(100);
  2853                 $this->
lng->txt(
'attachment'),
  2857             if ($amail[
'att_file'] ?? 
false) {
  2858                 $att->setValue($amail[
'att_file']);
  2864             'saveNewAccountMail',
  2865             $this->
lng->txt(
'save')
  2868             'cancelNewAccountMail',
  2869             $this->
lng->txt(
'cancel')
  2879         $this->tabs_gui->setTabActive(
'settings');
  2880         $this->tabs_gui->setSubTabActive(
'user_new_account_mail');
  2882         if ($form === null) {
  2887             'tpl.usrf_new_account_mail.html',
  2890             'components/ILIAS/User'  2899             'TXT_USE_PLACEHOLDERS',
  2900             $this->
lng->txt(
'mail_nacc_use_placeholder')
  2903             'TXT_MAIL_SALUTATION',
  2904             $this->
lng->txt(
'mail_nacc_salutation')
  2908             $this->
lng->txt(
'firstname')
  2912             $this->
lng->txt(
'lastname')
  2916             $this->
lng->txt(
'email')
  2920             $this->
lng->txt(
'mail_nacc_login')
  2924             $this->
lng->txt(
'password')
  2927             'TXT_PASSWORD_BLOCK',
  2928             $this->
lng->txt(
'mail_nacc_pw_block')
  2931             'TXT_NOPASSWORD_BLOCK',
  2932             $this->
lng->txt(
'mail_nacc_no_pw_block')
  2936             $this->
lng->txt(
'mail_nacc_admin_mail')
  2940             $this->
lng->txt(
'mail_nacc_ilias_url')
  2943             'TXT_INSTALLATION_NAME',
  2944             $this->
lng->txt(
'mail_nacc_installation_name')
  2948             $this->
lng->txt(
'mail_nacc_target')
  2952             $this->
lng->txt(
'mail_nacc_target_title')
  2956             $this->
lng->txt(
'mail_nacc_target_type')
  2960             $this->
lng->txt(
'mail_nacc_target_block')
  2964             $this->
lng->txt(
'mail_nacc_if_timelimit')
  2968             $this->
lng->txt(
'mail_nacc_timelimit')
  2971         $this->tpl->setContent($ftpl->get());
  2976         $this->
ctrl->redirect(
  2988         $is_valid_template_syntax = $this->dic->refinery()->custom()->constraint(
function ($value): 
bool {
  2990                 $this->dic->mail()->mustacheFactory()->getBasicEngine()->render((
string) $value, []);
  2995         }, $this->dic->language()->txt(
'mail_template_invalid_tpl_syntax'));
  2997         $valid_templates = 
true;
  2998         $langs = $this->
lng->getInstalledLanguages();
  2999         foreach ($langs as $lang_key) {
  3000             $subject = $this->user_request->getMailSubject($lang_key);
  3002                 $is_valid_template_syntax->check($subject);
  3005                     $is_valid_template_syntax->problemWith($subject)
  3007                 $valid_templates = 
false;
  3010             $body = $this->user_request->getMailBody($lang_key);
  3012                 $is_valid_template_syntax->check($body);
  3015                     $is_valid_template_syntax->problemWith($body)
  3017                 $valid_templates = 
false;
  3020         if (!$valid_templates) {
  3021             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'form_input_not_valid'));
  3026         foreach ($langs as $lang_key) {
  3029                 $this->user_request->getMailSubject($lang_key),
  3030                 $this->user_request->getMailSalutation(
'g', $lang_key),
  3031                 $this->user_request->getMailSalutation(
'f', $lang_key),
  3032                 $this->user_request->getMailSalutation(
'm', $lang_key),
  3033                 $this->user_request->getMailBody($lang_key)
  3036             if ($_FILES[
'att_' . $lang_key][
'tmp_name']) {
  3039                     $_FILES[
'att_' . $lang_key][
'tmp_name'],
  3040                     $_FILES[
'att_' . $lang_key][
'name']
  3044             if ($this->user_request->getMailAttDelete($lang_key)) {
  3049         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'msg_obj_modified'), 
true);
  3050         $this->
ctrl->redirect(
  3063         if ($this->
access->checkRbacOrPositionPermissionAccess(
  3066             $this->object->getRefId()
  3068             $this->tabs_gui->addTarget(
  3070                 $this->
ctrl->getLinkTarget(
  3074                 [
'view', 
'delete', 
'resetFilter', 
'userAction', 
''],
  3080         if ($this->
access->checkRbacOrPositionPermissionAccess(
  3085             $this->tabs_gui->addTarget(
  3086                 'search_user_extended',
  3087                 $this->
ctrl->getLinkTargetByClass(
  3088                     'ilRepositorySearchGUI',
  3092                 'ilrepositorysearchgui',
  3097         if ($this->rbac_system->checkAccess(
  3099             $this->object->getRefId()
  3101             $this->tabs_gui->addTarget(
  3103                 $this->
ctrl->getLinkTarget(
  3108                     'askForUserPasswordReset',
  3109                     'forceUserPasswordReset',
  3112                     'listUserDefinedField',
  3117             $this->tabs_gui->addTarget(
  3119                 $this->
ctrl->getLinkTarget(
  3129         if ($this->rbac_system->checkAccess(
  3131             $this->object->getRefId()
  3133             $this->tabs_gui->addTarget(
  3135                 $this->
ctrl->getLinkTargetByClass(
  3136                     [get_class($this), 
'ilpermissiongui'],
  3139                 [
'perm', 
'info', 
'owner'],
  3149                 $this->tabs_gui->addSubTabTarget(
  3151                     $this->
ctrl->getLinkTarget(
  3158                 $this->tabs_gui->addSubTabTarget(
  3160                     $this->
ctrl->getLinkTarget(
  3164                     [
'settings', 
'saveGlobalUserSettings'],
  3167                 $this->tabs_gui->addSubTabTarget(
  3168                     'user_defined_fields',
  3169                     $this->
ctrl->getLinkTargetByClass(
  3170                         'ilcustomuserfieldsgui',
  3171                         'listUserDefinedFields'  3173                     'listUserDefinedFields',
  3176                 $this->tabs_gui->addSubTabTarget(
  3177                     'user_new_account_mail',
  3178                     $this->
ctrl->getLinkTarget(
  3186                 $this->tabs_gui->addSubTabTarget(
  3188                     $this->
ctrl->getLinkTargetByClass(
  3189                         'iluserstartingpointgui',
  3196                 $this->tabs_gui->addSubTabTarget(
  3197                     'user_profile_info',
  3198                     $this->
ctrl->getLinkTargetByClass(
  3210     public static function _goto(
string $a_user): void
  3214         $a_user = (
int) $a_user;
  3215         $main_tpl = $DIC->ui()->mainTemplate();
  3217         $ilAccess = $DIC[
'ilAccess'];
  3220         $ctrl = $DIC[
'ilCtrl'];
  3224         if ($ilAccess->checkAccess(
  3229             $ctrl->
redirectToURL(
'ilias.php?baseClass=ilAdministrationGUI&ref_id=' . $a_target . 
'&jmpToUser=' . $a_user);
  3232             if ($ilAccess->checkAccess(
  3237                 $main_tpl->setOnScreenMessage(
'failure', sprintf(
  3238                     $lng->
txt(
'msg_no_perm_read_item'),
  3245             $lng->
txt(
'msg_no_perm_read'),
  3255         $jump_to_user = $this->user_request->getJumpToUser();
  3257             $this->
ctrl->setParameterByClass(
  3262             $this->
ctrl->redirectByClass(
  3272             $a_user_ids = $this->
access->filterUserIdsByPositionOfCurrentUser(
  3289         if (!count($a_usr_ids)) {
  3290             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'));
  3294         $this->requested_ids = $a_usr_ids;
  3297         if (stripos($a_cmd, 
'export') !== 
false) {
  3298             $cmd = $a_cmd . 
'Object';
  3299             return $this->$cmd();
  3312         if ($a_search_form) {
  3313             if ($this->rbac_system->checkAccess(
'write', $this->object->getRefId())) {
  3315                     'activate' => $this->
lng->txt(
'activate'),
  3316                     'deactivate' => $this->
lng->txt(
'deactivate'),
  3317                     'accessRestrict' => $this->
lng->txt(
'accessRestrict'),
  3318                     'accessFree' => $this->
lng->txt(
'accessFree')
  3322             if ($this->rbac_system->checkAccess(
'delete', $this->object->getRefId())) {
  3323                 $cmds[
'delete'] = $this->
lng->txt(
'delete');
  3326             if ($this->rbac_system->checkAccess(
'write', $this->object->getRefId())) {
  3328                     'activateUsers' => $this->
lng->txt(
'activate'),
  3329                     'deactivateUsers' => $this->
lng->txt(
'deactivate'),
  3330                     'restrictAccess' => $this->
lng->txt(
'accessRestrict'),
  3331                     'freeAccess' => $this->
lng->txt(
'accessFree')
  3335             if ($this->rbac_system->checkAccess(
'delete', $this->object->getRefId())) {
  3336                 $cmds[
'deleteUsers'] = $this->
lng->txt(
'delete');
  3340         if ($this->rbac_system->checkAccess(
'write', $this->object->getRefId())) {
  3342                 'userfolder_export_excel_x86',
  3343                 'userfolder_export_csv',
  3344                 'userfolder_export_xml'  3346             foreach ($export_types as 
$type) {
  3351                 $cmd = array_pop($cmd);
  3352                 $cmds[
'usrExport' . ucfirst($cmd)] = $this->
lng->txt(
'export') . 
' - ' .
  3353                     $this->
lng->txt($type);
  3359         if ($this->rbac_system->checkAccess(
  3361             $mail->getMailObjectReferenceId()
  3363             $cmds[
'mail'] = $this->
lng->txt(
'send_mail');
  3366         $cmds[
'addToClipboard'] = $this->
lng->txt(
'clipboard_add_btn');
  3375             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'), 
true);
  3376             $this->
ctrl->redirect(
  3383             $this->
object->buildExportFile(
  3387             $this->
ctrl->redirectByClass(
  3388                 'ilobjuserfoldergui',
  3392             $fullname = $this->
object->buildExportFile(
  3398                 $fullname . 
'.xlsx',
  3411             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'), 
true);
  3412             $this->
ctrl->redirect(
  3419             $this->
object->buildExportFile(
  3423             $this->
ctrl->redirectByClass(
  3424                 'ilobjuserfoldergui',
  3428             $fullname = $this->
object->buildExportFile(
  3447             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'), 
true);
  3448             $this->
ctrl->redirect(
  3454             $this->
object->buildExportFile(
  3458             $this->
ctrl->redirectByClass(
  3459                 'ilobjuserfoldergui',
  3463             $fullname = $this->
object->buildExportFile(
  3482             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'), 
true);
  3483             $this->
ctrl->redirect(
  3492         $old_lists->deleteTemporaryLists();
  3497         $list->setTitle(
'-TEMPORARY SYSTEM LIST-');
  3498         $list->setDescription(
'-USER ACCOUNTS MAIL-');
  3499         $list->setCreatedate(date(
'Y-m-d H:i:s'));
  3501         $list_id = $list->getId();
  3505             $list->assignUser((
int) $user_id);
  3511         $umail->persistToStage(
  3512             $mail_data[
'user_id'],
  3513             $mail_data[
'attachments'],
  3514             '#il_ml_' . $list_id,
  3515             $mail_data[
'rcp_cc'],
  3516             $mail_data[
'rcp_bcc'],
  3517             $mail_data[
'm_subject'],
  3518             $mail_data[
'm_message'],
  3519             $mail_data[
'use_placeholders'],
  3520             $mail_data[
'tpl_ctx_id'],
  3521             $mail_data[
'tpl_ctx_params']
  3524         $this->
ctrl->redirectToURL(
  3529                 [
'type' => 
'search_res']
  3536         switch ($a_form_id) {
  3543                     'ps_password_change_on_first_login_enabled' => [
  3544                         $security->isPasswordChangeOnFirstLoginEnabled(),
  3547                     'ps_password_must_not_contain_loginame' => [
  3548                         $security->getPasswordMustNotContainLoginnameStatus(),
  3551                     'ps_password_chars_and_numbers_enabled' => [
  3552                         $security->isPasswordCharsAndNumbersEnabled(),
  3555                     'ps_password_special_chars_enabled' => [
  3556                         $security->isPasswordSpecialCharsEnabled(),
  3559                     'ps_password_min_length' => $security->getPasswordMinLength(),
  3560                     'ps_password_max_length' => $security->getPasswordMaxLength(),
  3561                     'ps_password_uppercase_chars_num' => $security->getPasswordNumberOfUppercaseChars(),
  3562                     'ps_password_lowercase_chars_num' => $security->getPasswordNumberOfLowercaseChars(),
  3563                     'ps_password_max_age' => $security->getPasswordMaxAge()
  3565                 $fields[
'ps_password_settings'] = [null, null, $subitems];
  3568                     'ps_login_max_attempts' => $security->getLoginMaxAttempts(),
  3569                     'ps_prevent_simultaneous_logins' => [
  3570                         $security->isPreventionOfSimultaneousLoginsEnabled(),
  3574                 $fields[
'ps_security_protection'] = [null, null, $subitems];
  3576                 return [[
'generalSettings', $fields]];
  3584             $this->
ctrl->redirect(
  3590         $this->
ctrl->redirectByClass(
  3599         if (!count($users)) {
  3600             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'), 
true);
  3601             $this->
ctrl->redirect(
  3610         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'clipboard_user_added'), 
true);
  3611         $this->
ctrl->redirect(
  3620         $checkbox->setInfo($this->
lng->txt($name . 
'_desc'));
  3621         $checkbox->setValue(
'1');
  3628         if (!$this->
access->checkRbacOrPositionPermissionAccess(
  3633             $this->
ilias->raiseError(
  3634                 $this->
lng->txt(
'permission_denied'),
  3635                 $this->
ilias->error_obj->MESSAGE
 static _getAllUserIds(int $a_filter=0)
 
showFieldChangeComponentsListeningConfirmDialog(array $interested_change_listeners)
 
static get(string $a_var)
 
askForUserPasswordResetObject()
 
searchUserAccessFilterCallable(array $a_user_ids)
 
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ilObjUser $user=null,)
 
static _writeNewAccountMail(string $a_lang, string $a_subject, string $a_sal_g, string $a_sal_f, string $a_sal_m, string $a_body)
 
importUsersObject()
Import Users with new form implementation. 
 
__buildUserFilterSelect()
build select form to distinguish between active and non-active users 
 
static _saveStatus(string $a_key, bool $a_enabled)
 
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item. 
 
static getLogger(string $a_component_id)
Get component logger. 
 
raiseErrorOnMissingWrite()
 
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
if($clientAssertionType !='urn:ietf:params:oauth:client-assertion-type:jwt-bearer'|| $grantType !='client_credentials') $parts
 
forceUserPasswordResetObject()
 
setUserOwnerId(int $a_id)
 
static _isSearchable(string $a_key)
 
Singleton class that stores all security settings. 
 
prepareOutput(bool $show_sub_objects=true)
 
Interface Observer  Contains several chained tasks and infos about them. 
 
cancelSearchActionObject()
 
importUserRoleAssignmentObject()
display form for user import with new FileSystem implementation 
 
UserGUIRequest $user_request
 
initFormGeneralSettings()
 
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string. 
 
isPasswordCharsAndNumbersEnabled()
get boolean if the passwords have to contain characters and numbers 
 
settingsObject()
Global user settings Allows to define global settings for user accounts Note: The Global user setting...
 
getFullname(int $a_max_strlen=0)
 
getUserMultiCommands(bool $a_search_form=false)
 
getPasswordPolicySettingsMap(\ilSecuritySettings $security)
 
static _updateAccountMailAttachment(string $a_lang, string $a_tmp_name, string $a_name)
Update account mail attachment. 
 
setVariable(string $variable, $value='')
Sets the given variable to the given value. 
 
Class ilRoleMailboxSearch. 
 
filterUserIdsByRbacOrPositionOfCurrentUser(array $user_ids)
 
checkUserManipulationAccessBool()
 
static _reset()
Reset all. 
 
showActionConfirmation(string $action, bool $a_from_search=false)
 
confirmaccessRestrictObject()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static _lookupObjId(int $ref_id)
 
getPasswordMaxLength()
get the maximum length for passwords 
 
static deliverFileLegacy(string $a_file, ?string $a_filename=null, ?string $a_mime=null, ?bool $isInline=false, ?bool $removeAfterDelivery=false, ?bool $a_exit_after=true)
 
newAccountMailObject(ilPropertyFormGUI $form=null)
 
setValue(string $a_value)
 
getActionUserIds()
Get selected items for table action. 
 
final const MODE_TEMPORARY
 
confirmaccessFreeObject()
 
getPasswordNumberOfLowercaseChars()
Returns number of lowercase characters required. 
 
TableGUI class for user administration. 
 
Class ilMailRfc822AddressParserFactory. 
 
initUserRoleAssignmentForm(string $xml_file_full_path)
 
Class ilCustomUserFieldsGUI. 
 
const ORG_OP_EDIT_USER_ACCOUNTS
 
confirmUsrFieldChangeListenersObject()
 
getPasswordNumberOfUppercaseChars()
Returns number of uppercase characters required. 
 
static _goto(string $a_user)
 
ilGlobalTemplateInterface $tpl
 
static _lookupTitle(int $obj_id)
 
saveGeneralSettingsObject()
Save user account settings. 
 
static _lookupNewAccountMail(string $a_lang)
 
searchResultHandler(array $a_usr_ids, string $a_cmd)
Handles multi command from repository search gui. 
 
static _getUserFolderId()
 
Class ilUserStartingPointGUI. 
 
confirmDeleteExportFileObject()
 
setVisible(string $field, bool $visible)
Set a profile field being visible. 
 
saveGlobalUserSettingsObject(string $action='')
 
getTranslationForField(string $field_name, array $properties)
 
Class InterestedUserFieldChangeListener. 
 
isPasswordSpecialCharsEnabled()
get boolean if the passwords have to contain special characters 
 
getPasswordMinLength()
get the minimum length for passwords 
 
Class ilObjectGUI Basic methods of all Output classes. 
 
cancelDeleteExportFileObject()
 
setSubTabs(string $a_tab)
 
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory) 
 
Class ilObjForumAdministration. 
 
const USER_FIELD_TRANSLATION_MAPPING
 
static _deleteAccountMailAttachment(string $a_lang)
Delete account mail attachment. 
 
static getDataDir()
get data directory (outside webspace) 
 
addToExternalSettingsForm(int $a_form_id)
 
confirmdeactivateObject()
 
jumpToUserObject()
Jump to edit screen for user. 
 
setChangeable(string $field, bool $changeable)
Set a profile field being changeable. 
 
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
 
downloadExportFileObject()
Download selected export files Sends a selected export file for download. 
 
showPossibleSubObjects()
show possible subobjects (pulldown menu) overwritten to prevent displaying of role templates in local...
 
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block. 
 
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id 
 
getProtocolAsHTML(string $a_log_title)
Returns the protocol as a HTML table. 
 
getErrorLevel()
Returns the error level. 
 
form( $class_path, string $cmd, string $submit_caption="")
 
__construct(Container $dic, ilPlugin $plugin)
 
This class represents a text area property in a property form. 
 
addUserObject()
Add new user. 
 
cancelNewAccountMailObject()
 
verifyXmlData(ilUserImportParser $import_parser)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
const IL_UPDATE_ON_CONFLICT
 
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples 
 
__construct( $a_data, int $a_id, bool $a_call_by_reference)
 
const ilPropertyFormGUI $form
 
redirectToURL(string $target_url)
 
initAccessRestrictionForm(bool $a_from_search=false)
 
const DEFAULT_ALLOW_CLIENT_MAINTENANCE
 
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block. 
 
static _getAssignUsersStatus(int $a_role_id)
 
static _lookupType(int $id, bool $reference=false)
 
Class ChangedUserFieldAttribute. 
 
cancelUserFolderActionObject()
 
bool $usrFieldChangeListenersAccepted
 
static _getInstance()
Get instance of ilSecuritySettings. 
 
saveNewAccountMailObject()
 
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
 
getPasswordMustNotContainLoginnameStatus()
Return whether the password must not contain the loginname or not. 
 
static getInstance(int $a_usr_id)
 
redirectOnRoleWithMissingWrite(int $role_id, array $roles_of_user, array $global_roles, string $import_dir)
 
setAccessRestrictionObject(?ilPropertyFormGUI $a_form=null, bool $a_from_search=false)
 
static _gotoRepositoryRoot(bool $raise_error=false)
Goto repository root. 
 
const IL_IGNORE_ON_CONFLICT
 
ilUserSettingsConfig $user_settings_config
 
addUserAutoCompleteObject()