19declare(strict_types=1);
25use Psr\Http\Message\ServerRequestInterface;
82 $this->ref_id = $a_ref_id;
84 $this->
lng = $DIC->language();
85 $this->
lng->loadLanguageModule(
'auth');
88 $this->
tabs = $DIC->tabs();
89 $this->
ctrl = $DIC->ctrl();
90 $this->
logger = $DIC->logger()->auth();
91 $this->
access = $DIC->access();
92 $this->review =
$DIC->rbac()->review();
93 $this->
error = $DIC[
'ilErr'];
94 $this->
upload = $DIC->upload();
95 $this->body =
$DIC->http()->request()->getParsedBody();
97 $http_wrapper =
$DIC->http()->wrapper();
98 $this->
toolbar = $DIC->toolbar();
100 $this->tpl =
$DIC->ui()->mainTemplate();
101 $this->
http = $DIC->http();
102 $this->
ui = $DIC->ui()->factory();
103 $this->
renderer = $DIC->ui()->renderer();
105 $this->
factory = $DIC->ui()->factory();
106 $this->request =
$DIC->http()->request();
107 $this->
profile = $DIC[
'user']->getProfile();
110 if ($http_wrapper->query()->has(self::POST_VALUE) && $http_wrapper->query()->retrieve(
114 $this->mapping_template = $http_wrapper->query()->retrieve(self::POST_VALUE,
$refinery->kindlyTo()->int());
121 $this->
error->raiseError($this->
lng->txt(
'msg_no_perm_read'), $this->error->WARNING);
127 return $this->
access->checkAccess($a_permission,
'', $this->ref_id);
134 switch ($this->
ctrl->getNextClass()) {
136 $cmd = $this->
ctrl->getCmd(self::DEFAULT_CMD);
158 $form->setTitle($this->
lng->txt(
'auth_oidc_settings_title'));
159 $form->setFormAction($this->
ctrl->getFormAction($this));
162 $this->
lng->txt(
'auth_oidc_settings_activation'),
165 $activation->setChecked($this->
settings->getActive());
166 $form->addItem($activation);
169 $this->
lng->txt(
'auth_oidc_settings_provider'),
177 $this->
lng->txt(
'auth_oidc_settings_client_id'),
185 $this->
lng->txt(
'auth_oidc_settings_secret'),
188 $secret->setSkipSyntaxCheck(
true);
189 $secret->setRetype(
false);
190 $secret->setRequired(
false);
191 if ($this->
settings->getSecret() !==
'') {
192 $secret->setValue(
'******');
194 $form->addItem($secret);
197 $this->
lng->txt(
'auth_oidc_settings_le'),
200 $login_element->setRequired(
true);
201 $login_element->setValue((
string) $this->
settings->getLoginElementType());
202 $form->addItem($login_element);
205 $this->
lng->txt(
'auth_oidc_settings_txt'),
208 $login_element->addOption($text_option);
215 $text->setMaxLength(120);
216 $text->setInfo($this->
lng->txt(
'auth_oidc_settings_txt_val_info'));
217 $text_option->addSubItem(
$text);
220 $this->
lng->txt(
'auth_oidc_settings_img'),
223 $login_element->addOption($img_option);
229 $image->setAllowDeletion(
false);
231 if ($this->
settings->hasImageFile()) {
232 $image->setImage($this->
settings->getImageFilePath());
234 $image->setInfo($this->
lng->txt(
'auth_oidc_settings_img_file_info'));
235 $img_option->addSubItem($image);
238 $this->
lng->txt(
'auth_oidc_settings_login_options'),
241 $login_options->setValue((
string) $this->
settings->getLoginPromptType());
244 $this->
lng->txt(
'auth_oidc_settings_login_option_enforce'),
247 $enforce->setInfo($this->
lng->txt(
'auth_oidc_settings_login_option_enforce_info'));
248 $login_options->addOption($enforce);
251 $this->
lng->txt(
'auth_oidc_settings_login_option_default'),
254 $default->setInfo($this->
lng->txt(
'auth_oidc_settings_login_option_default_info'));
255 $login_options->addOption($default);
257 $form->addItem($login_options);
260 $this->
lng->txt(
'auth_oidc_settings_logout_scope'),
263 $logout_scope->setValue((
string) $this->
settings->getLogoutScope());
266 $this->
lng->txt(
'auth_oidc_settings_logout_scope_global'),
269 $global_scope->setInfo($this->
lng->txt(
'auth_oidc_settings_logout_scope_global_info'));
270 $logout_scope->addOption($global_scope);
273 $this->
lng->txt(
'auth_oidc_settings_logout_scope_local'),
276 $ilias_scope->setInfo($this->
lng->txt(
'auth_oidc_settings_logout_scope_local_info'));
277 $logout_scope->addOption($ilias_scope);
279 $form->addItem($logout_scope);
282 $this->
lng->txt(
'auth_oidc_settings_custom_session_duration_type'),
285 $use_custom_session->setOptionTitle(
286 $this->
lng->txt(
'auth_oidc_settings_custom_session_duration_option')
288 $use_custom_session->setChecked($this->
settings->isCustomSession());
289 $form->addItem($use_custom_session);
292 $this->
lng->txt(
'auth_oidc_settings_session_duration'),
295 $session->setValue((
string) $this->
settings->getSessionDuration());
296 $session->setSuffix($this->
lng->txt(
'minutes'));
297 $session->setMinValue(5);
298 $session->setMaxValue(1440);
299 $session->setRequired(
true);
300 $use_custom_session->addSubItem($session);
303 $form->addCommandButton(
'saveSettings', $this->
lng->txt(
'save'));
307 $user_sync->setTitle($this->
lng->txt(
'auth_oidc_settings_section_user_sync'));
308 $form->addItem($user_sync);
311 $this->
lng->txt(
'auth_oidc_settings_user_sync'),
314 $sync->setChecked($this->
settings->isSyncAllowed());
315 $sync->setInfo($this->
lng->txt(
'auth_oidc_settings_user_sync_info'));
316 $sync->setValue(
'1');
317 $form->addItem($sync);
320 $this->
lng->txt(
'auth_oidc_settings_default_role'),
323 $roles->setValue((
string) $this->
settings->getRole());
324 $roles->setInfo($this->
lng->txt(
'auth_oidc_settings_default_role_info'));
326 $roles->setRequired(
true);
327 $sync->addSubItem($roles);
330 $this->
lng->txt(
'auth_oidc_settings_user_attr'),
333 $user_attr->setValue($this->
settings->getUidField());
334 $user_attr->setRequired(
true);
335 $form->addItem($user_attr);
338 foreach ($form->getItems() as $item) {
343 $item->setDisabled(
true);
355 if (!$form->checkInput()) {
356 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_check_input'));
357 $form->setValuesByPost();
362 $this->
settings->setActive((
bool) $form->getInput(
'activation'));
363 $this->
settings->setProvider((
string) $form->getInput(
'provider'));
364 $this->
settings->setClientId((
string) $form->getInput(
'client_id'));
365 if ((
string) $form->getInput(
'secret') !==
'' && strcmp($form->getInput(
'secret'),
'******') !== 0) {
366 $this->
settings->setSecret((
string) $form->getInput(
'secret'));
369 $this->
settings->setLoginElementType((
int) $form->getInput(
'le'));
370 $this->
settings->setLoginElementText((
string) $form->getInput(
'le_text'));
371 $this->
settings->setLoginPromptType((
int) $form->getInput(
'login_prompt'));
372 $this->
settings->setLogoutScope((
int) $form->getInput(
'logout_scope'));
373 $this->
settings->useCustomSession((
bool) $form->getInput(
'custom_session'));
374 $this->
settings->setSessionDuration((
int) $form->getInput(
'session_duration'));
375 $this->
settings->allowSync((
bool) $form->getInput(
'sync'));
376 $this->
settings->setRole((
int) $form->getInput(
'role'));
377 $this->
settings->setUidField((
string) $form->getInput(
'username'));
379 $fileData = (array) $form->getInput(
'le_img');
381 if ((
string) ($fileData[
'tmp_name'] ??
'') !==
'') {
387 $this->
mainTemplate->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
388 $this->
ctrl->redirect($this,
'settings');
394 if (!$this->
upload->hasBeenProcessed()) {
398 foreach ($this->
upload->getResults() as $single_file_upload) {
399 if ($single_file_upload->isOK()) {
401 $this->
upload->moveFilesTo(
405 $this->
settings->setLoginElementImage($single_file_upload->getName());
408 }
catch (\
ILIAS\Filesystem\Exception\IllegalStateException
$e) {
409 $this->
logger->warning(
'Upload failed with message: ' . $e->getMessage());
419 $this->review->getGlobalRoles(),
426 if ($a_with_select_option) {
427 $select[0] = $this->
lng->txt(
'links_select_one');
429 foreach ($global_roles as $role_id) {
458 $this->
toolbar->setFormAction($this->
ctrl->getFormAction($this));
459 $this->
toolbar->addFormButton($this->
lng->txt(
'auth_oidc_discover_scopes'),
'discoverScopesFromServer');
462 $form = $this->initScopesForm();
463 $this->tpl->setContent($this->
renderer->render($form));
466 private function initScopesForm():
Form
475 $form = $this->
ui->input()->container()->form()->standard(
476 $has_write_access ? $this->
ctrl->getFormAction($this,
'saveScopes') : $this->ctrl->getFormAction($this,
'scopes'),
480 if (!$has_write_access) {
481 $form = $form->withSubmitLabel($this->
lng->txt(
'refresh'));
490 $type = $this->
settings->getValidateScopes();
498 $found_scopes = $this->
settings->getSupportedScopesFromUrl(
$url);
499 if ($found_scopes ===
true) {
500 $this->
mainTemplate->setOnScreenMessage(
'success', $this->
lng->txt(
'auth_oidc_discover_scopes_info'));
513 $disabled_input = $this->
ui
516 ->text($this->
lng->txt(
'auth_oidc_settings_default_scopes'),
'')
519 ->withDedicatedName(
'default_scope')
520 ->withDisabled(
true);
522 $scopeValues = $this->
settings->getAdditionalScopes();
524 $tag_input = $this->
ui
528 $this->
lng->txt(
'auth_oidc_settings_additional_scopes'),
530 )->withValue($scopeValues)
531 ->withDedicatedName(
'custom_scope')
532 ->withByline($this->
lng->txt(
'auth_oidc_settings_additional_scopes_info'));
533 $group1 = $this->
ui->input()->field()->group(
535 $this->
lng->txt(
'auth_oidc_settings_validate_scope_default')
537 $group2 = $this->
ui->input()->field()->group(
539 $this->
lng->txt(
'auth_oidc_settings_discovery_url') => $this->ui
543 $this->lng->txt(
'auth_oidc_settings_discovery_url')
545 ->withAdditionalTransformation($this->trimIfStringTrafo())
547 $this->settings->getCustomDiscoveryUrl() ??
''
550 $this->lng->txt(
'auth_oidc_settings_validate_scope_custom')
552 $group3 = $this->
ui->input()->field()->group(
554 $this->
lng->txt(
'auth_oidc_settings_validate_scope_none')
556 $url_validation = $this->
ui->input()->field()->switchableGroup(
562 $this->
lng->txt(
'auth_oidc_settings_validate_scopes')
563 )->withDedicatedName(
'validate_scopes')->withValue($this->
settings->getValidateScopes());
564 $group = $this->
ui->input()->field()->group(
565 [$disabled_input, $tag_input, $url_validation]
567 $ui_container[] = $group;
569 if (!$has_write_access) {
570 foreach ($ui_container as $key => $item) {
571 $ui_container[$key] = $item->withDisabled(
true);
575 return $ui_container;
587 $form = $this->initScopesForm();
588 if ($this->request->getMethod() ===
'POST') {
589 $request_form = $form->withRequest($this->request);
590 $result = $request_form->getData();
591 if ($result ===
null) {
592 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_check_input'));
597 foreach ($form->getInputs() as $group => $groups) {
598 foreach ($groups->getInputs() as $key => $input) {
599 $dedicated_name = $input->getDedicatedName();
600 $result_data = $result[$group][$key];
601 if ($dedicated_name ===
'validate_scopes') {
602 $type = (
int) $result_data[0];
603 $url = array_pop($result_data[1]);
604 } elseif ($dedicated_name ===
'custom_scope') {
605 $custom_scopes = $result_data;
617 $this->
settings->setAdditionalScopes((array) $custom_scopes);
618 $this->
settings->setValidateScopes((
int) $type);
623 $this->
mainTemplate->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
624 $this->
ctrl->redirect($this,
'scopes');
627 if ($this->failed_validation_messages !==
'') {
628 $this->failed_validation_messages = $this->
lng->txt(
632 $this->failed_validation_messages = $this->
lng->txt(
'err_check_input');
635 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->failed_validation_messages,
true);
636 $this->
ctrl->redirect($this,
'scopes');
650 $discoveryURL =
$url;
653 $discoveryURL =
null;
657 $validation_result = $discoveryURL !==
null ? $this->
settings->validateScopes(
661 if (!empty($validation_result)) {
663 $this->failed_validation_messages =
665 $this->
lng->txt(
'auth_oidc_settings_invalid_scopes'),
666 implode(
',', $validation_result[1])
669 $this->failed_validation_messages = sprintf(
670 $this->
lng->txt(
'auth_oidc_settings_discovery_error'),
671 $validation_result[1]
684 $this->failed_validation_messages =
$e->getMessage();
697 $form = $this->initUserMappingForm();
698 if ($this->request->getMethod() ===
'POST' &&
699 $this->request->getQueryParams()[
'opic'] ===
'opic_user_data_mapping') {
700 $request_form = $form->withRequest($this->request);
701 $result = $request_form->getData();
702 if ($result ===
null) {
703 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_check_input'));
708 foreach ($this->
settings->getProfileMappingFields() as $field => $lng_key) {
712 foreach ($this->user_defined_fields as $field) {
719 $this->
mainTemplate->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
720 $this->
ctrl->redirect($this, self::STAB_PROFILE);
725 $form = $this->initUserMappingForm();
726 $request_form = $form->withRequest($this->request);
727 $result = $request_form->getData();
728 foreach ($form->getInputs() as $group => $groups) {
729 foreach ($groups->getInputs() as $key => $input) {
730 $dedicated_name = $input->getDedicatedName();
731 $result_data = $result[$group][$key];
733 if ($dedicated_name === $field . self::VALUE_STRING) {
734 $this->
settings->setProfileMappingFieldValue(
738 } elseif ($dedicated_name === $field . self::UPDATE_STRING) {
739 $this->
settings->setProfileMappingFieldUpdate(
766 $form->setTitle($this->
lng->txt(
'auth_oidc_role_mapping_table'));
767 $form->setFormAction($this->
ctrl->getFormAction($this, self::STAB_ROLES));
772 'role_map_' . $role_id
774 $role_map->setInfo($this->
lng->txt(
'auth_oidc_role_info'));
775 $role_map->setValue($this->
settings->getRoleMappingValueForId((
int) $role_id));
776 $form->addItem($role_map);
780 'role_map_update_' . $role_id
782 $update->setOptionTitle($this->
lng->txt(
'auth_oidc_update_role_info'));
783 $update->setValue(
'1');
784 $update->setChecked(!$this->
settings->getRoleMappingUpdateForId((
int) $role_id));
785 $form->addItem($update);
789 $form->addCommandButton(
'saveRoles', $this->
lng->txt(
'save'));
791 foreach ($form->getItems() as $item) {
796 $item->setDisabled(
true);
808 if ($form->checkInput()) {
814 $role_settings[(
int) $role_id][
'update'] = !$form->getInput(
'role_map_update_' . $role_id);
815 $role_settings[(
int) $role_id][
'value'] =
'';
817 $input_role = trim($form->getInput(
'role_map_' . $role_id));
818 if ($input_role ===
'') {
822 $role_params = explode(
'::', $input_role);
825 if (count($role_params) !== 2) {
826 if ($form->getItemByPostVar(
'role_map_' . $role_id)) {
827 $form->getItemByPostVar(
'role_map_' . $role_id)->setAlert($this->
lng->txt(
'msg_wrong_format'));
832 $role_settings[(
int) $role_id][
'value'] = $input_role;
836 $form->setValuesByPost();
837 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_check_input'));
842 $this->
settings->setRoleMappings($role_settings);
844 $this->
mainTemplate->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
845 $this->
ctrl->redirect($this,
'roles');
848 $form->setValuesByPost();
850 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_check_input'));
857 $this->
tabs->addSubTab(
859 $this->
lng->txt(
'auth_oidc_' . self::STAB_SETTINGS),
860 $this->ctrl->getLinkTarget($this, self::STAB_SETTINGS)
865 $this->
tabs->addSubTab(
867 $this->
lng->txt(
'auth_oidc_' . self::STAB_SCOPES),
868 $this->ctrl->getLinkTarget($this, self::STAB_SCOPES)
871 $this->
tabs->addSubTab(
873 $this->
lng->txt(
'auth_oidc_' . self::STAB_PROFILE),
874 $this->ctrl->getLinkTarget($this, self::STAB_PROFILE)
876 $this->
tabs->addSubTab(
878 $this->
lng->txt(
'auth_oidc_' . self::STAB_ROLES),
879 $this->ctrl->getLinkTarget($this, self::STAB_ROLES)
883 $this->
tabs->activateSubTab($active_tab);
892 if ((
int) $this->mapping_template === self::VIEW_TAB_EFFECTIVE_MAPPING) {
902 if ($this->mapping_template === self::VIEW_TAB_EFFECTIVE_MAPPING) {
904 $this->
factory->link()->standard(
905 $this->lng->txt(
'auth_oidc_here'),
906 'https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims'
907 )->withOpenInNewViewport(
true)
909 $message = sprintf($this->
lng->txt(
'auth_odic_scope_tab_info'),
$url);
912 $this->
factory->link()->standard(
913 $this->lng->txt(
'auth_oidc_here'),
914 $this->ctrl->getLinkTarget($this, self::STAB_SCOPES)
917 $tab_name = $this->
lng->txt(
'auth_oidc_configured_scopes');
918 $message = sprintf($this->
lng->txt(
'auth_odic_scope_info'),
$url, $tab_name);
921 $this->
mainTemplate->setOnScreenMessage(
'info', $message);
926 $mapping = $this->attribute_mapping_template->getMappingRulesByAdditionalScopes(
927 $this->
settings->getAdditionalScopes()
930 if (count($mapping) > 0) {
931 $this->
settings->clearProfileMaps();
934 foreach ($mapping as $field => $item) {
935 $this->
settings->setProfileMappingFieldValue(
944 private function initUserMappingForm():
Form
949 foreach ($this->
settings->getProfileMappingFields() as $mapping => $lang) {
953 foreach ($this->user_defined_fields as $field) {
958 if (!$has_write_access) {
959 foreach ($ui_container as $key => $item) {
960 $ui_container[$key] = $item->withDisabled(
true);
964 $this->
ctrl->setParameter(
967 'opic_user_data_mapping'
976 $has_write_access ? $this->
ctrl->getFormAction($this,
'saveProfileMapping') : $this->ctrl->getFormAction($this,
'profile'),
980 if (!$has_write_access) {
981 $form = $form->withSubmitLabel($this->
lng->txt(
'refresh'));
995 $value = $this->
settings->getProfileMappingFieldValue(self::
UDF_STRING . $definition->getIdentifier());
996 $update = $this->
settings->getProfileMappingFieldUpdate(self::UDF_STRING . $definition->getIdentifier());
998 $text_input = $this->
ui
1001 ->text($definition->getLabel($this->lng),
'')
1004 ->withDedicatedName(self::UDF_STRING . $definition->getIdentifier() . self::VALUE_STRING);
1005 $checkbox_input = $this->
ui
1007 ->field()->checkbox(
'', $this->
lng->txt(
'auth_oidc_update_field_info'))
1008 ->withValue($update)
1009 ->withDedicatedName(
1010 self::UDF_STRING . $definition->getIdentifier() . self::UPDATE_STRING
1012 $group = $this->
ui->input()->field()->group(
1013 [$text_input, $checkbox_input]
1015 $ui_container[] = $group;
1017 return $ui_container;
1026 $value = $this->
settings->getProfileMappingFieldValue($mapping);
1027 $update = $this->
settings->getProfileMappingFieldUpdate($mapping);
1029 $text_input = $this->
ui
1033 ->withAdditionalTransformation($this->trimIfStringTrafo())
1035 ->withDedicatedName($mapping . self::VALUE_STRING);
1036 $checkbox_input = $this->
ui
1039 ->checkbox(
'', $this->
lng->txt(
'auth_oidc_update_field_info'))
1040 ->withValue($update)
1041 ->withDedicatedName($mapping . self::UPDATE_STRING);
1042 $group = $this->
ui->input()->field()->group(
1048 $ui_container[] = $group;
1050 return $ui_container;
1055 if ($this->user_defined_fields ===
null) {
1056 $this->user_defined_fields = $this->
profile->getAllUserDefinedFields();
1062 $form = $this->initUserMappingForm();
1065 $active = self::EFFECTIVE_ATTRIBUTE_MAPPING_TAB;
1067 $target = $this->
http->request()->getRequestTarget();
1070 $this->refinery->kindlyTo()->int()
1076 $this->
lng->txt(
'auth_oidc_saved_values') =>
"$target&" . self::POST_VALUE .
'=' . self::SAVED_VALUES,
1079 ) =>
"$target&" . self::POST_VALUE .
'=' . self::DEFAULT_VALUES,
1082 $aria_label =
'change_the_currently_displayed_mode';
1083 $active_label = $this->
lng->txt(
'auth_oidc_saved_values');
1084 if ($active !== self::EFFECTIVE_ATTRIBUTE_MAPPING_TAB) {
1087 $view_control = $this->
factory->viewControl()->mode($actions, $aria_label)->withActive($active_label);
1089 $this->tpl->setContent($this->
renderer->render([$view_control, $form]));
1096 $this->tpl->setOnScreenMessage(
1097 $this->tpl::MESSAGE_TYPE_FAILURE,
1098 $this->
lng->txt(
'permission_denied'),
1101 $this->
ctrl->redirect($this,
'settings');
1107 return $this->
refinery->custom()->transformation(
static function (array $values): array {
1114 return $this->
refinery->custom()->transformation(
static function ($value) {
1115 if (is_string($value)) {
1116 $value = trim($value);
Builds a Color from either hex- or rgb values.
static stripSlashesRecursive($a_data, bool $a_strip_html=true, string $a_allow="")
Class ilCtrl provides processing control methods.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Error Handling & global info handling.
Component logger with individual log levels by component id.
static _lookupTitle(int $obj_id)
final const OPEN_ID_CONFIGURED_SCOPES
buildScopeSelection(array $ui_container, bool $has_write_access)
updateProfileMappingFieldValue(string $field)
readonly Profile $profile
ServerRequestInterface $request
saniziteArrayElementsTrafo()
roles(?ilPropertyFormGUI $form=null)
readonly ilLogger $logger
ilOpenIdAttributeMappingTemplate $attribute_mapping_template
array $user_defined_fields
checkAccessBool(string $a_permission)
redirectToSettingsScreenIfNoURLIsConfigured()
const EFFECTIVE_ATTRIBUTE_MAPPING_TAB
readonly FileUpload $upload
readonly ilGlobalTemplateInterface $mainTemplate
readonly ilOpenIdConnectSettings $settings
const VIEW_TAB_EFFECTIVE_MAPPING
setSubTabs(string $active_tab)
settings(?ilPropertyFormGUI $form=null)
prepareRoleSelection(bool $a_with_select_option=true)
readonly ilAccessHandler $access
checkAccess(string $a_permission)
string $failed_validation_messages
saveImageFromHttpRequest()
const URL_VALIDATION_PROVIDER_STRING
ilGlobalTemplateInterface $tpl
discoverScopesFromServer()
readonly ilErrorHandling $error
buildUserMappingInputForUserData(string $lang, string $mapping, array $ui_container)
buildUserMappingInputFormUDF(ILIAS\User\Profile\Fields\Field $definition, array $ui_container)
validateDiscoveryUrl(int $type, ?string $url, array $scopes)
readonly ilRbacReview $review
ILIAS Refinery Factory $refinery
__construct(int $a_ref_id)
const LOGIN_ELEMENT_TYPE_IMG
const VALIDATION_ISSUE_INVALID_SCOPE
const URL_VALIDATION_PROVIDER
const URL_VALIDATION_CUSTOM
const LOGOUT_SCOPE_GLOBAL
const URL_VALIDATION_NONE
const LOGIN_ELEMENT_TYPE_TXT
This class represents an option in a radio group.
class ilRbacReview Contains Review functions of core Rbac.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a text property in a property form.
static _sortIds(array $a_ids, string $a_table, string $a_field, string $a_id_name)
Function that sorts ids by a given table field using WHERE IN E.g: __sort(array(6,...
This is how the factory for UI elements looks.
An entity that renders components to a string output.
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
static http()
Fetches the global http state from ILIAS.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.