19declare(strict_types=1);
21use Psr\Http\Message\ServerRequestInterface;
80 $this->
ctrl = $DIC->ctrl();
81 $this->
lng = $DIC->language();
82 $this->
lng->loadLanguageModule(
'auth');
84 $this->authSession =
$DIC[
'ilAuthSession'];
85 $this->eventHandler =
$DIC->event();
86 $this->setting =
$DIC->settings();
87 $this->
access = $DIC->access();
88 $this->db =
$DIC->database();
89 $this->
help = $DIC->help();
90 $this->
http = $DIC->http();
92 $this->ui_factory =
$DIC->ui()->factory();
93 $this->ui_renderer =
$DIC->ui()->renderer();
95 $this->
ctrl->saveParameter($this, [
'rep_ref_id',
'lang',
'target',
'client_id']);
96 $this->
user->setLanguage($this->
lng->getLangKey());
97 $this->
help->setScreenIdComponent(
'init');
102 self::$forced_cmd = $cmd;
107 if (self::$forced_cmd) {
109 self::$forced_cmd =
'';
117 return $this->
refinery->custom()->transformation(
static function (array $values): array {
118 return array_merge(...$values);
124 return $this->
refinery->custom()->transformation(
static function (array $values): array {
125 $processed_values = array_merge(
127 isset($values[self::PROP_PASSWORD]) ? [self::PROP_PASSWORD => $values[self::PROP_PASSWORD]] : []
130 return $processed_values;
136 return $this->
http->wrapper()->query()->retrieve(
138 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
152 'doStandardAuthentication',
153 'doLTIAuthentication'
161 $next_class = $this->
ctrl->getNextClass($this) ??
'';
163 switch (strtolower($next_class)) {
164 case strtolower(ilLoginPageGUI::class):
167 case strtolower(ilAccountRegistrationGUI::class):
171 case strtolower(ilPasswordAssistanceGUI::class):
175 case strtolower(ilAccessibilityControlConceptGUI::class):
180 if (method_exists($this, $cmd)) {
199 $this->
ctrl->redirectByClass(ilAccountRegistrationGUI::class);
204 $this->
ctrl->saveParameterByClass(ilPasswordAssistanceGUI::class,
'key');
205 $this->
ctrl->redirectByClass(ilPasswordAssistanceGUI::class);
218 if ($this->authSession->isValid() && $this->authSession->getUserId() > 0 && !$this->user->isAnonymous()) {
222 $is_forced_login = $this->
http->wrapper()->query()->retrieve(
225 $this->refinery->kindlyTo()->string(),
226 $this->refinery->always(
227 $this->http->wrapper()->post()->retrieve(
229 $this->refinery->byTrying([
230 $this->refinery->kindlyTo()->string(),
231 $this->refinery->always(
'')
238 if ($is_forced_login) {
240 $this->
logger->debug(
'Force login');
242 if ($this->authSession->isValid()) {
244 $this->
logger->debug(
'Valid session -> logout current user');
246 $this->authSession->logout();
248 $this->eventHandler->raise(
249 'components/ILIAS/Authentication',
252 'username' => $this->
user->getLogin(),
253 'is_explicit_logout' =>
false,
257 $this->dic->user()->setId($this->authSession->getUserId());
258 $this->dic->user()->read();
261 $this->
logger->debug(
'Show login page');
262 foreach (
$messages as $type => $content) {
263 $this->
mainTemplate->setOnScreenMessage($type, $content);
270 if ($this->authSession->isValid()) {
271 $this->
logger->debug(
'Valid session -> redirect to starting page');
276 $this->
logger->debug(
'No valid session -> show login');
284 $this->
help->setSubScreenId(
'login');
286 $this->
getLogger()->debug(
'Showing login page');
288 $extUid = $this->
http->wrapper()->query()->retrieve(
290 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
293 $soapPw = $this->
http->wrapper()->query()->retrieve(
295 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
304 $credentials->setUsername($extUid);
305 $credentials->setPassword($soapPw);
306 $credentials->tryAuthenticationOnLoginPage();
309 $frontend->tryAuthenticationOnLoginPage();
318 $page_editor_html = $this->
showLoginForm($page_editor_html, $form);
326 if ($this->authSession->isExpired() || $this->http->wrapper()->query()->has(
'session_expired')) {
327 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'auth_err_expired'));
328 } elseif ($this->
http->wrapper()->query()->has(
'reg_confirmation_msg')) {
329 $this->
lng->loadLanguageModule(
'registration');
330 $message_key = $this->
http->wrapper()->query()->retrieve(
331 'reg_confirmation_msg',
332 $this->
refinery->kindlyTo()->string()
334 $message_type = $message_key ===
'reg_account_confirmation_successful' ?
338 $this->
lng->txt($message_key)
342 if ($page_editor_html !==
'') {
343 $tpl->setVariable(
'LPE', $page_editor_html);
346 if ($this->authSession->isExpired()) {
349 $this->dic->user()->setId($this->authSession->getUserId());
350 $this->dic->user()->read();
353 $this->
mainTemplate->setPermanentLink(
'auth',
null,
'login');
364 $gtpl->setContent($tpl->get());
365 $gtpl->printToStdout(
'DEFAULT',
false,
true);
381 foreach ($message_types as $message_type) {
391 ?
string $username =
null,
394 $this->
help->setSubScreenId(
'code_input');
396 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'time_limit_reached'));
399 $tpl->setVariable(
'FORM', $this->ui_renderer->render($form ?? $this->buildCodeForm($username)));
405 $this->
lng->loadLanguageModule(
'auth');
407 $field_factory = $this->ui_factory->input()->field();
409 $username_field = $field_factory
411 ->withRequired(
true);
412 if ($username !==
null) {
413 $username_field = $username_field->withValue($username);
416 return $this->ui_factory
421 $this->
ctrl->getFormAction($this,
'processCode'),
423 $field_factory->section(
425 self::PROP_CODE => $field_factory
427 $this->lng->txt(
'auth_account_code'),
428 $this->lng->txt(
'auth_account_code_info')
430 ->withRequired(
true),
432 self::PROP_USERNAME => $username_field,
434 $this->lng->txt(
'auth_account_code_title'),
438 ->withSubmitLabel($this->
lng->txt(
'send'))
439 ->withAdditionalTransformation($this->mergeValuesTrafo())
440 ->withAdditionalTransformation($this->saniziteArrayElementsTrafo());
445 $form = $this->buildCodeForm();
448 if ($this->
http->request()->getMethod() ===
'POST') {
449 $form = $form->withRequest($this->
http->request());
450 $form_data = $form->getData();
451 $form_valid = $form_data !==
null;
456 $code = $form_data[self::PROP_CODE];
457 $uname = $form_data[self::PROP_USERNAME];
461 $this->showLoginPage();
464 $invalid_code =
false;
466 if ($valid_until ===
'0') {
469 if (is_numeric($valid_until)) {
470 $valid_until = strtotime(
'+' . $valid_until .
'days');
472 $valid_until = explode(
'-', $valid_until);
473 $valid_until = mktime(
477 (
int) $valid_until[1],
478 (
int) $valid_until[2],
479 (
int) $valid_until[0]
481 if ($valid_until < time()) {
482 $invalid_code =
true;
486 if (!$invalid_code) {
492 if (!$invalid_code) {
502 $this->
ctrl->setParameter($this,
'cu', 1);
503 $this->
lng->loadLanguageModule(
'auth');
509 $this->
ctrl->redirect($this,
'showLoginPage');
513 $this->
lng->loadLanguageModule(
'user');
514 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'user_account_code_not_valid'));
516 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'form_input_not_valid'));
519 $this->showCodeForm($uname, $form);
524 $field_factory = $this->ui_factory->input()->field();
529 $auth_mode = $field_factory->radio($this->
lng->txt(
'auth_selection'))->withRequired(
true);
530 $visible_auth_methods = [];
532 if (isset($option[
'hide_in_ui']) && $option[
'hide_in_ui']) {
536 $auth_mode = $auth_mode->withOption((
string) $key, $option[
'txt']);
538 if (isset($option[
'checked'])) {
539 $auth_mode = $auth_mode->withValue($key);
541 $visible_auth_methods[] = $key;
544 if (count($visible_auth_methods) === 1) {
545 $auth_mode = $field_factory->hidden()->withRequired(
true)->withValue(current($visible_auth_methods));
548 $fields[self::PROP_AUTH_MODE] = $auth_mode;
552 self::PROP_USERNAME => $field_factory
553 ->text($this->
lng->txt(
'username'))
556 $this->
refinery->custom()->constraint(
557 static function (
string $value):
bool {
558 return $value !==
'';
560 static function (Closure
$lng,
string $value):
string {
561 return $lng(
'auth_required_username');
565 self::PROP_PASSWORD => $field_factory
566 ->password($this->
lng->txt(
'password'))
567 ->withRevelation(
true)
570 $this->
refinery->custom()->constraint(
571 static function (
string $value):
bool {
572 return $value !==
'';
574 static function (Closure
$lng,
string $value):
string {
575 return $lng(
'auth_required_password');
579 ->withAdditionalTransformation(
580 $this->
refinery->custom()->transformation(
582 return $value->toString();
588 $sections = [$field_factory->section($fields, $this->
lng->txt(
'login_to_ilias_via_login_form'))];
590 return $this->ui_factory
594 ->standard($this->
ctrl->getFormAction($this,
'doStandardAuthentication'), $sections)
595 ->withDedicatedName(
'login_form')
596 ->withSubmitLabel($this->
lng->txt(
'log_in'))
603 $this->getLogger()->debug(
'Trying lti authentication');
606 $credentials->initFromRequest();
615 $frontend = $frontend_factory->getFrontend(
621 $frontend->authenticate();
623 setcookie(session_name(), session_id(), [
626 'domain' => IL_COOKIE_DOMAIN,
634 if (is_array($lti_context_ids) && isset($lti_context_ids[0])) {
640 switch ($status->getStatus()) {
647 $this->
ctrl->redirect($this,
'showAccountMigration');
651 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt($status->getReason()),
true);
652 $this->
ctrl->redirect($this,
'showLoginPage');
655 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
656 $this->showLoginPage();
661 $this->getLogger()->debug(
'Trying apache authentication');
664 $credentials->initFromRequest();
671 $frontend_factory = new \ilAuthFrontendFactory();
673 $frontend = $frontend_factory->getFrontend(
679 $frontend->authenticate();
681 switch ($status->getStatus()) {
683 if ($credentials->hasValidTargetUrl()) {
686 'Authentication successful. Redirecting to starting page: %s',
687 $credentials->getTargetUrl()
690 $this->
ctrl->redirectToURL($credentials->getTargetUrl());
693 'Authentication successful, but no valid target URL given. Redirecting to default starting page.'
699 $this->
ctrl->redirect($this,
'showAccountMigration');
703 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason(),
true);
704 $this->
ctrl->redirectToURL(
706 $this->
ctrl->getLinkTarget($this,
'showLoginPage',
'',
false,
false),
712 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
713 $this->showLoginPage();
718 $form = $this->buildStandardLoginForm();
721 if ($this->
http->request()->getMethod() ===
'POST') {
722 $form = $form->withRequest($this->
http->request());
723 $form_data = $form->getData();
724 $form_valid = $form_data !==
null;
728 $this->showLoginPage($form);
732 $this->getLogger()->debug(
'Trying to authenticate user.');
734 $auth_callback =
function () use ($form_data) {
736 $credentials->setUsername($form_data[self::PROP_USERNAME]);
737 $credentials->setPassword($form_data[self::PROP_PASSWORD]);
741 $credentials->setAuthMode($form_data[self::PROP_AUTH_MODE]);
745 $providers = $provider_factory->getProviders($credentials);
751 $frontend = $frontend_factory->getFrontend(
757 $frontend->authenticate();
762 if (($auth_duration = $this->setting->get(
'auth_duration')) !==
null) {
763 $duration = $this->
http->durations()->callbackDuration((
int) $auth_duration);
764 $status =
$duration->stretch($auth_callback);
766 $status = $auth_callback();
769 switch ($status->getStatus()) {
772 'Authentication successful; Redirecting to starting page.'
779 $this->showLoginPage($this->buildCodeForm($uname));
783 $this->
ctrl->redirect($this,
'showAccountMigration');
787 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason());
788 $this->showLoginPage($form);
793 string $page_editor_html,
798 return $this->substituteLoginPageElements(
801 $this->ui_renderer->render($form ?? $this->buildStandardLoginForm()),
809 if ($page_editor_html !==
'') {
810 return $page_editor_html;
813 return $page_editor_html;
818 $target = $this->initTargetFromQuery();
820 if ($this->setting->get(
'shib_active')) {
821 $tpl =
new ilTemplate(
'tpl.login_form_shibboleth.html',
true,
true,
'components/ILIAS/Init');
827 $federation_name = $this->setting->get(
'shib_federation_name');
828 $admin_mail =
' <a href="mailto:' . $this->setting->get(
'admin_email') .
'">ILIAS ' . $this->
lng->txt(
831 if ($this->setting->get(
'shib_hos_type') ===
'external_wayf') {
832 $tpl->setCurrentBlock(
'shibboleth_login');
833 $tpl->setVariable(
'TXT_SHIB_LOGIN', $this->
lng->txt(
'login_to_ilias_via_shibboleth'));
834 $tpl->setVariable(
'IL_TARGET', $target);
835 $tpl->setVariable(
'TXT_SHIB_FEDERATION_NAME', $this->setting->get(
'shib_federation_name'));
836 $tpl->setVariable(
'TXT_SHIB_LOGIN_BUTTON', $this->setting->get(
'shib_login_button'));
838 'TXT_SHIB_LOGIN_INSTRUCTIONS',
840 $this->
lng->txt(
'shib_general_login_instructions'),
845 $tpl->setVariable(
'TXT_SHIB_CUSTOM_LOGIN_INSTRUCTIONS', $this->setting->get(
'shib_login_instructions'));
846 $tpl->parseCurrentBlock();
847 } elseif ($this->setting->get(
'shib_hos_type') ==
'embedded_wayf') {
848 $tpl->setCurrentBlock(
'shibboleth_custom_login');
849 $customInstructions = stripslashes($this->setting->get(
'shib_login_instructions'));
850 $tpl->setVariable(
'TXT_SHIB_CUSTOM_LOGIN_INSTRUCTIONS', $customInstructions);
851 $tpl->parseCurrentBlock();
853 $tpl->setCurrentBlock(
'shibboleth_wayf_login');
854 $tpl->setVariable(
'TXT_SHIB_LOGIN', $this->
lng->txt(
'login_to_ilias_via_shibboleth'));
855 $tpl->setVariable(
'TXT_SHIB_FEDERATION_NAME', $this->setting->get(
'shib_federation_name'));
857 'TXT_SELECT_HOME_ORGANIZATION',
859 $this->
lng->txt(
'shib_select_home_organization'),
860 $this->setting->get(
'shib_federation_name')
863 $tpl->setVariable(
'TXT_CONTINUE', $this->
lng->txt(
'btn_next'));
864 $tpl->setVariable(
'TXT_SHIB_HOME_ORGANIZATION', $this->
lng->txt(
'shib_home_organization'));
866 'TXT_SHIB_LOGIN_INSTRUCTIONS',
868 $this->
lng->txt(
'shib_general_wayf_login_instructions'),
872 $tpl->setVariable(
'TXT_SHIB_CUSTOM_LOGIN_INSTRUCTIONS', $this->setting->get(
'shib_login_instructions'));
876 $tpl->setVariable(
'TXT_SHIB_INVALID_SELECTION', $ilShibbolethWAYF->showNotice());
877 $tpl->setVariable(
'SHIB_IDP_LIST', $ilShibbolethWAYF->generateSelection());
878 $tpl->setVariable(
'ILW_TARGET', $target);
879 $tpl->parseCurrentBlock();
882 return $this->substituteLoginPageElements(
886 '[list-shibboleth-login-form]',
891 return $page_editor_html;
899 string $page_editor_html,
900 string $element_html,
902 string $fallback_tplvar
904 if ($page_editor_html ===
'') {
905 $tpl->setVariable($fallback_tplvar, $element_html);
906 return $page_editor_html;
909 if (stripos($page_editor_html, $placeholder) ===
false) {
910 $tpl->setVariable($fallback_tplvar, $element_html);
911 return $page_editor_html;
914 return str_replace($placeholder, $element_html, $page_editor_html);
921 $ipe_language = $ipe_settings->getIliasEditorLanguage($this->
lng->getLangKey());
922 if (!$ipe_language) {
935 $page_gui->setStyleId(0);
937 $page_gui->setPresentationTitle(
'');
938 $page_gui->setTemplateOutput(
false);
939 $page_gui->setHeader(
'');
941 return $page_gui->showPage();
948 $rtpl =
new ilTemplate(
'tpl.login_registration_links.html',
true,
true,
'components/ILIAS/Init');
952 $rtpl->setCurrentBlock(
'new_registration');
953 $rtpl->setVariable(
'REGISTER', $this->
lng->txt(
'registration'));
956 $this->
ctrl->getLinkTargetByClass(ilAccountRegistrationGUI::class)
958 $rtpl->parseCurrentBlock();
961 if ($this->setting->get(
'password_assistance')) {
962 $rtpl->setCurrentBlock(
'password_assistance');
963 $rtpl->setVariable(
'FORGOT_PASSWORD', $this->
lng->txt(
'forgot_password'));
964 $rtpl->setVariable(
'FORGOT_USERNAME', $this->
lng->txt(
'forgot_username'));
966 'CMD_FORGOT_PASSWORD',
967 $this->
ctrl->getLinkTargetByClass(ilPasswordAssistanceGUI::class)
970 'CMD_FORGOT_USERNAME',
971 $this->
ctrl->getLinkTargetByClass(ilPasswordAssistanceGUI::class,
'showUsernameAssistanceForm')
973 $rtpl->setVariable(
'LANG_ID', $this->
lng->getLangKey());
974 $rtpl->parseCurrentBlock();
979 $rtpl->setCurrentBlock(
'homelink');
982 '?client_id=' .
CLIENT_ID .
'&lang=' . $this->
lng->getLangKey()
984 $rtpl->setVariable(
'TXT_HOME', $this->
lng->txt(
'home'));
985 $rtpl->parseCurrentBlock();
988 return $this->substituteLoginPageElements(
992 '[list-registration-link]',
993 'REG_PWD_CLIENT_LINKS'
1002 if (0 === $this->
user->getId()) {
1006 $page_editor_html = $this->substituteLoginPageElements(
1009 $DIC[
'legalDocuments']->loginPageHTML(TermsOfService::ID),
1010 '[list-user-agreement]',
1013 $page_editor_html = $this->substituteLoginPageElements(
1016 $DIC[
'legalDocuments']->loginPageHTML(DataProtection::ID),
1017 '[list-dpro-agreement]',
1021 return $page_editor_html;
1028 '[list-language-selection]',
1029 '[list-registration-link]',
1030 '[list-user-agreement]',
1031 '[list-dpro-agreement]',
1032 '[list-login-form]',
1033 '[list-saml-login]',
1034 '[list-shibboleth-login-form]',
1035 '[list-openid-connect-login]'
1044 $field_factory = $this->ui_factory->input()->field();
1046 $keep = $field_factory->group(
1048 self::PROP_USERNAME => $field_factory->text($this->lng->txt(
'login'))->withRequired(
true),
1049 self::PROP_PASSWORD => $field_factory
1050 ->password($this->lng->txt(
'password'))
1051 ->withRequired(
true)
1052 ->withRevelation(
true)
1053 ->withAdditionalTransformation(
1054 $this->refinery->custom()->transformation(
1056 return $value->toString();
1061 $this->
lng->txt(
'auth_account_migration_keep'),
1062 $this->lng->txt(
'auth_info_migrate')
1065 $new = $field_factory->group(
1067 $this->
lng->txt(
'auth_account_migration_new'),
1068 $this->lng->txt(
'auth_info_add')
1072 self::PROP_ACCOUNT_MIGRATION => $field_factory->switchableGroup(
1074 self::PROP_ACCOUNT_MIGRATION_MIGRATE => $keep,
1075 self::PROP_ACCOUNT_MIGRATION_NEW => $new,
1077 $this->
lng->txt(
'auth_account_migration_name')
1078 )->withRequired(
true)->withValue(self::PROP_ACCOUNT_MIGRATION_MIGRATE)
1081 $sections = [$field_factory->section($fields, $this->
lng->txt(
'auth_account_migration'))];
1083 return $this->ui_factory->input()
1086 ->standard($this->
ctrl->getFormAction($this,
'migrateAccount'), $sections)
1087 ->withDedicatedName(
'login_form')
1088 ->withSubmitLabel($this->
lng->txt(
'save'))
1089 ->withAdditionalTransformation($this->mergeValuesTrafo())
1090 ->withAdditionalTransformation($this->saniziteArrayElementsTrafo());
1097 $this->
help->setSubScreenId(
'account_migration');
1099 $tpl = self::initStartUpTemplate(
'tpl.login_account_migration.html');
1100 $tpl->setVariable(
'MIG_FORM', $this->ui_renderer->render($form ?? $this->buildAccountMigrationForm()));
1106 self::printToGlobalTemplate($tpl);
1111 $form = $this->buildAccountMigrationForm();
1112 $form_valid =
false;
1114 if ($this->
http->request()->getMethod() ===
'POST') {
1115 $form = $form->withRequest($this->
http->request());
1116 $form_data = $form->getData();
1117 $form_valid = $form_data !==
null;
1121 $this->showAccountMigration($form, $this->
lng->txt(
'form_input_not_valid'));
1125 $account_migration = $form_data[self::PROP_ACCOUNT_MIGRATION];
1126 $account_migration_mode = $account_migration[0];
1127 if ($account_migration_mode === self::PROP_ACCOUNT_MIGRATION_MIGRATE) {
1128 $this->doMigration($account_migration[1]);
1129 } elseif ($account_migration_mode === self::PROP_ACCOUNT_MIGRATION_NEW) {
1130 $this->doMigrationNewAccount();
1132 $this->showAccountMigration(
1134 $this->
lng->txt(
'form_input_not_valid')
1145 $provider = $provider_factory->getProviderByAuthMode(
1150 $this->
logger->debug(
'Using provider: ' . get_class(
$provider) .
' for further processing.');
1156 $frontend = $frontend_factory->getFrontend(
1163 if ($frontend->migrateAccountNew()) {
1167 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
1168 $this->
ctrl->redirect($this,
'showAccountMigration');
1176 $username = $migration_request_data[self::PROP_USERNAME];
1177 $password = $migration_request_data[self::PROP_PASSWORD];
1179 $this->
logger->debug(
'Starting account migration for user: ' .
ilSession::get(
'mig_ext_account'));
1182 $credentials->setUsername($username);
1183 $credentials->setPassword($password);
1192 $frontend = $frontend_factory->getFrontend(
1198 $frontend->authenticate();
1200 switch ($status->getStatus()) {
1202 $this->getLogger()->debug(
'Account migration: authentication successful for ' . $username);
1204 $provider = $provider_factory->getProviderByAuthMode(
1209 $frontend = $frontend_factory->getFrontend(
1216 if ($frontend->migrateAccount(
$GLOBALS[
'DIC'][
'ilAuthSession'])) {
1220 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'),
true);
1221 $this->
ctrl->redirect($this,
'showAccountMigration');
1225 $this->getLogger()->info(
'Account migration failed for user ' . $username);
1226 $this->showAccountMigration(
null,
$GLOBALS[
'lng']->txt(
'err_wrong_login'));
1232 if (!$this->authSession->isExpired() &&
1233 $this->authSession->isAuthenticated() &&
1238 $this->
help->setSubScreenId(
'logout');
1240 $tpl = self::initStartUpTemplate(
'tpl.logout.html');
1243 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
1248 $tpl->setCurrentBlock(
'homelink');
1249 $tpl->setVariable(
'CLIENT_ID',
'?client_id=' .
$client_id .
'&lang=' . $this->
lng->getLangKey());
1250 $tpl->setVariable(
'TXT_HOME', $this->
lng->txt(
'home'));
1251 $tpl->parseCurrentBlock();
1254 $tpl->setVariable(
'LPE', $this->getAuthPageEditorHtml(AuthPageEditorContext::LOGOUT));
1255 $tpl->setVariable(
'TXT_PAGEHEADLINE', $this->
lng->txt(
'logout'));
1256 $tpl->setVariable(
'TXT_LOGIN', $this->
lng->txt(
'login_to_ilias'));
1259 '?client_id=' .
$client_id .
'&cmd=force_login&lang=' . $this->
lng->getLangKey()
1262 self::printToGlobalTemplate($tpl);
1265 private function doLogout(): void
1268 $legal_documents = $this->dic[
'legalDocuments'];
1270 $this->eventHandler->raise(
1271 'components/ILIAS/Authentication',
1274 'user_id' => $this->
user->getId()
1278 $user_language = $this->
user->getLanguage();
1280 $used_external_auth_mode =
ilSession::get(
'used_external_auth_mode');
1283 $this->authSession->logout();
1291 $target = $legal_documents->logoutTarget($target);
1292 $url = $target->asURI();
1294 $this->eventHandler->raise(
1295 'components/ILIAS/Authentication',
1298 'username' => $this->
user->getLogin(),
1299 'is_explicit_logout' =>
true,
1300 'used_external_auth_mode' => $used_external_auth_mode,
1301 'logout_target' =>
$url
1306 $this->mainTemplate::MESSAGE_TYPE_INFO,
1307 $this->
lng->txt(
'logout_text') . $legal_documents->logoutText(),
1314 $this->
ctrl->setParameter($this,
'lang', $user_language);
1316 $this->
ctrl->redirectToURL((
string)
$url);
1322 $tpl = self::initStartUpTemplate([
'agreement.html',
'components/ILIAS/LegalDocuments'],
true,
false);
1323 $tpl->setVariable(
'CONTENT',
$DIC[
'legalDocuments']->agreeContent(self::class, __FUNCTION__));
1324 self::printToGlobalTemplate($tpl);
1329 if ($this->authSession->isValid()) {
1330 if (!$this->
user->isAnonymous() || (
1332 $this->httpRequest->getServerParams()[
'SERVER_NAME']
1345 $this->showLoginPage();
1351 public static function _checkGoto(
string $a_target)
1355 $component_factory =
$DIC[
'component.factory'];
1357 $access =
$DIC->access();
1359 foreach ($component_factory->getActivePluginsInSlot(
'uihk') as $ui_plugin) {
1361 $gui_class = $ui_plugin->getUIClassInstance();
1362 $resp = $gui_class->checkGotoHook($a_target);
1363 if (isset(
$resp[
'target']) && is_string(
$resp[
'target']) &&
$resp[
'target'] !==
'') {
1364 $a_target =
$resp[
'target'];
1369 if ($a_target ===
'') {
1373 $t_arr = explode(
'_', $a_target);
1376 if ($type ===
'git') {
1380 if ($type ===
'pg' | $type ===
'st') {
1384 $class =
$DIC[
'objDefinition']->getClassName($type);
1385 if ($class ===
'') {
1390 $full_class =
'ilObj' . $class .
'Access';
1392 $ret = call_user_func([$full_class,
'_checkGoto'], $a_target);
1397 !str_contains($a_target,
'_wsp') &&
1398 !
$DIC->user()->isAnonymous() &&
1399 !
$DIC[
'objDefinition']->isAdministrationObject($type) &&
1400 $DIC[
'objDefinition']->isRBACObject($type)) {
1403 if ($t_arr[0] ===
'pg') {
1404 if (isset($t_arr[2])) {
1410 $ref_id = array_shift($ref_ids);
1426 foreach (
$path as $path_ref_id) {
1427 $redirect_infopage =
false;
1428 $add_member_role =
false;
1434 if (!$access->
doActivationCheck(
'read',
'', $path_ref_id,
$DIC->user()->getId(), $pobj_id, $ptype) ||
1435 !$access->
doStatusCheck(
'read',
'', $path_ref_id,
$DIC->user()->getId(), $pobj_id, $ptype)) {
1438 } elseif ($ptype ===
'crs') {
1441 if (!$participants->isAssigned()) {
1444 $block_obj[] = $path_ref_id;
1445 $add_member_role =
true;
1447 $redirect_infopage =
true;
1450 } elseif ($ptype ===
'grp') {
1455 if ($group_obj->isRegistrationEnabled()) {
1456 $block_obj[] = $path_ref_id;
1457 $add_member_role =
true;
1459 $redirect_infopage =
true;
1465 if ($add_member_role) {
1467 $DIC->rbac()->system()->resetPACache(
$DIC->user()->getId(), $path_ref_id);
1468 if (!
$DIC->rbac()->system()->checkAccess(
'join', $path_ref_id)) {
1469 $redirect_infopage =
true;
1471 $DIC->rbac()->system()->addTemporaryRole(
1472 $DIC->user()->getId(),
1479 if ($redirect_infopage) {
1480 if (
$DIC->rbac()->system()->checkAccess(
'visible', $path_ref_id)) {
1482 'ilias.php?baseClass=ilRepositoryGUI&ref_id=' . $path_ref_id .
'&cmd=infoScreen'
1492 if ($block_obj !== [] &&
$DIC->rbac()->system()->checkAccess(
'read',
$ref_id)) {
1499 'ilias.php?baseClass=ilRepositoryGUI&ref_id=' . array_shift($block_obj)
1507 private function confirmRegistration(): void
1509 $this->
lng->loadLanguageModule(
'registration');
1512 $regitration_hash = trim(
1513 $this->
http->wrapper()->query()->retrieve(
1515 $this->refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
1518 if ($regitration_hash ===
'') {
1521 $this->
lng->txt(
'reg_confirmation_hash_not_passed'),
1524 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $this->
lng->getLangKey()));
1535 if ($oRegSettings->passwordGenerationEnabled()) {
1537 $password = $passwords[0];
1546 ))->withEmailConfirmationRegistrationMode();
1548 if ($user->
getPref(
'reg_target') ??
'') {
1549 $accountMail = $accountMail->withPermanentLinkTarget($user->
getPref(
'reg_target'));
1552 $accountMail->send($user, $password);
1556 $this->
lng->txt(
'reg_account_confirmation_successful'),
1559 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $user->
getLanguage()));
1562 $soap_client->setResponseTimeout(1);
1563 $soap_client->enableWSDL(
true);
1564 $soap_client->init();
1567 'Triggered soap call (background process) for deletion of inactive user objects with expired confirmation hash values (dual opt in) ...'
1571 'deleteExpiredDualOptInUserObjects',
1574 $exception->getCode()
1580 $this->
lng->txt($exception->getMessage()),
1583 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $this->
lng->getLangKey()));
1587 $this->
lng->txt($exception->getMessage()),
1590 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $this->
lng->getLangKey()));
1600 bool $a_show_back =
false,
1601 bool $a_show_logout =
false
1607 $tpl->addBlockfile(
'CONTENT',
'content',
'tpl.startup_screen.html',
'components/ILIAS/Init');
1609 $view_title =
$DIC->language()->txt(
'login_to_ilias');
1614 $tpl->setCurrentBlock(
'link_item_bl');
1615 $tpl->setVariable(
'LINK_TXT', $view_title);
1616 $tpl->setVariable(
'LINK_URL',
'login.php?cmd=force_login&' .
$param);
1617 $tpl->parseCurrentBlock();
1621 $tpl->setVariable(
'LINK_URL',
'index.php?' .
$param);
1622 $tpl->setVariable(
'LINK_TXT',
$DIC->language()->txt(
'home'));
1623 $tpl->parseCurrentBlock();
1625 } elseif ($a_show_logout) {
1626 $view_title =
$DIC->language()->txt(
'logout');
1627 $tpl->setCurrentBlock(
'link_item_bl');
1628 $tpl->setVariable(
'LINK_TXT', $view_title);
1629 $tpl->setVariable(
'LINK_URL', self::logoutUrl());
1630 $tpl->parseCurrentBlock();
1633 if (is_array($a_tmpl)) {
1634 $template_file = $a_tmpl[0];
1635 $template_dir = $a_tmpl[1];
1637 $template_file = $a_tmpl;
1638 $template_dir =
'components/ILIAS/Init';
1641 $tpl->addBlockFile(
'STARTUP_CONTENT',
'startup_content', $template_file, $template_dir);
1643 PageContentProvider::setViewTitle($view_title);
1644 $short_title = trim(
$DIC->settings()->get(
'short_inst_name') ??
'');
1645 if ($short_title ===
'') {
1646 $short_title =
'ILIAS';
1648 PageContentProvider::setShortTitle($short_title);
1650 $header_title = ilObjSystemFolder::_getHeaderTitle();
1651 PageContentProvider::setTitle($header_title);
1659 $tpl =
new ilTemplate(
'tpl.login_form_saml.html',
true,
true,
'components/ILIAS/Saml');
1662 $target = $this->initTargetFromQuery();
1663 if ($target !==
'') {
1667 $tpl->setVariable(
'SAML_SCRIPT_URL',
'./saml.php' . $return);
1668 $tpl->setVariable(
'TXT_LOGIN', $this->
lng->txt(
'saml_log_in'));
1669 $tpl->setVariable(
'LOGIN_TO_ILIAS_VIA_SAML', $this->
lng->txt(
'login_to_ilias_via_saml'));
1670 $tpl->setVariable(
'TXT_SAML_LOGIN_TXT', $this->
lng->txt(
'saml_login_form_txt'));
1671 $tpl->setVariable(
'TXT_SAML_LOGIN_INFO_TXT', $this->
lng->txt(
'saml_login_form_info_txt'));
1673 return $this->substituteLoginPageElements(
1677 '[list-saml-login]',
1682 return $page_editor_html;
1688 if ($oidc_settings->getActive()) {
1689 $tpl =
new ilTemplate(
'tpl.login_element.html',
true,
true,
'components/ILIAS/OpenIdConnect');
1691 $this->
lng->loadLanguageModule(
'auth');
1692 $tpl->setVariable(
'TXT_OIDCONNECT_HEADER', $this->
lng->txt(
'auth_oidc_login_element_info'));
1694 $target = $this->initTargetFromQuery();
1695 $target_str = empty($target) ?
'' : (
'?target=' . $target);
1696 switch ($oidc_settings->getLoginElementType()) {
1698 $tpl->setVariable(
'SCRIPT_OIDCONNECT_T',
'./openidconnect.php' . $target_str);
1699 $tpl->setVariable(
'TXT_OIDC', $oidc_settings->getLoginElemenText());
1703 $tpl->setVariable(
'SCRIPT_OIDCONNECT_I',
'./openidconnect.php' . $target_str);
1704 $tpl->setVariable(
'IMG_SOURCE', $oidc_settings->getImageFilePath());
1708 return $this->substituteLoginPageElements(
1712 '[list-openid-connect-login]',
1713 'OPEN_ID_CONNECT_LOGIN_FORM'
1717 return $page_editor_html;
1722 $this->getLogger()->debug(
'Trying openid connect authentication');
1725 $credentials->initFromRequest();
1734 $frontend = $frontend_factory->getFrontend(
1740 $frontend->authenticate();
1742 switch ($status->getStatus()) {
1744 $this->
logger->debug(
'Authentication successful; Redirecting to starting page.');
1745 if ($credentials->getRedirectionTarget()) {
1752 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason(),
true);
1753 $this->
ctrl->redirect($this,
'showLoginPage');
1756 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
1757 $this->showLoginPage();
1762 $this->getLogger()->debug(
'Trying saml authentication');
1763 $request = $this->httpRequest;
1764 $params = $request->getQueryParams();
1767 $auth = $factory->auth();
1769 if (isset(
$params[
'action']) &&
$params[
'action'] ===
'logout') {
1770 $logout_url =
$params[
'logout_url'] ??
'';
1771 $this->
logger->info(sprintf(
'Requested SAML logout: %s', $logout_url));
1772 $auth->logout($logout_url);
1779 if (isset(
$params[
'returnTo'])) {
1780 $auth->storeParam(
'target',
$params[
'returnTo']);
1783 $this->
logger->debug(
'Started SAML authentication request');
1784 if (!$auth->isAuthenticated()) {
1786 if (!isset($request->getQueryParams()[
'idpentityid'], $request->getQueryParams()[
'saml_idp_id'])) {
1788 if (count($activeIdps) === 1) {
1789 $idp = current($activeIdps);
1793 'Found exactly one active IDP with id %s: %s',
1799 $this->
ctrl->setParameter($this,
'idpentityid', $idp->getEntityId());
1800 $this->
ctrl->setParameter($this,
'saml_idp_id', $idp->getIdpId());
1801 $this->
ctrl->setTargetScript(
'saml.php');
1802 $this->
ctrl->redirect($this,
'doSamlAuthentication');
1803 } elseif ($activeIdps === []) {
1804 $this->
logger->debug(
'Did not find any active IDP, skipp authentication process');
1805 $this->
ctrl->redirect($this,
'showLoginPage');
1807 $this->
logger->debug(
'Found multiple active IPDs, presenting IDP selection...');
1808 $this->showSamlIdpSelection($auth, $activeIdps);
1813 $auth->storeParam(
'idpId', (
int) $request->getQueryParams()[
'saml_idp_id']);
1814 $this->
logger->debug(sprintf(
'Stored relevant IDP id in session: %s', $auth->getParam(
'idpId')));
1817 $auth = $factory->auth();
1819 $this->
logger->debug(
'Checking SAML authentication status...');
1820 $auth->protectResource();
1822 'SAML authentication successful, continuing with ILIAS internal authentication process...'
1825 $idpId = (
int) $auth->getParam(
'idpId');
1829 'Internal SAML IDP id fetched from session: %s',
1836 'No valid internal IDP id found (most probably due to IDP initiated SSO), trying fallback determination...'
1838 $authData = $auth->getAuthDataArray();
1839 if (isset($authData[
'saml:sp:IdP'])) {
1843 'Searching active ILIAS IDP by entity id "%s" results in: %s',
1844 $authData[
'saml:sp:IdP'],
1850 'Could not execute fallback determination, no IDP entity ID found SAML authentication session data'
1855 $target = $auth->popParam(
'target');
1857 $this->
logger->debug(sprintf(
'Retrieved "target" parameter: %s', print_r($target,
true)));
1860 $credentials->initFromRequest();
1863 $provider = $provider_factory->getProviderByAuthMode(
1871 $credentials->setReturnTo($target);
1873 $target = $credentials->getReturnTo();
1880 $frontend = $frontend_factory->getFrontend(
1886 $frontend->authenticate();
1888 switch ($status->getStatus()) {
1890 $this->
logger->debug(
'Authentication successful; Redirecting to starting page.');
1895 $this->
ctrl->redirect($this,
'showAccountMigration');
1899 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason(),
true);
1900 $this->
ctrl->redirect($this,
'showLoginPage');
1903 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
1904 $this->showLoginPage();
1912 $this->
help->setSubScreenId(
'saml_idp_selection');
1914 self::initStartUpTemplate([
'tpl.saml_idp_selection.html',
'components/ILIAS/Saml']);
1916 $this->
ctrl->setTargetScript(
'saml.php');
1918 foreach ($idps as $idp) {
1919 $this->
ctrl->setParameter($this,
'saml_idp_id', $idp->getIdpId());
1920 $this->
ctrl->setParameter($this,
'idpentityid', urlencode($idp->getEntityId()));
1922 $items[] = $this->ui_factory->link()->standard(
1923 $idp->getEntityId(),
1924 $this->ctrl->getLinkTarget($this,
'doSamlAuthentication')
1929 $this->ui_factory->panel()->standard(
1930 $this->
lng->txt(
'auth_saml_idp_selection_table_title'),
1932 $this->ui_factory->messageBox()->info($this->lng->txt(
'auth_saml_idp_selection_table_desc')),
1933 $this->ui_factory->listing()->unordered(
1935 fn($item) => $this->ui_renderer->render($item),
1952 public static function logoutUrl(array $parameters = []): string
1956 $defaults = [
'lang' =>
$DIC->user()->getCurrentLanguage()];
1957 $parameters =
'&' . http_build_query(array_merge($defaults, $parameters));
1959 $DIC->ctrl()->setTargetScript(
'logout.php');
1960 $url =
$DIC->ctrl()->getLinkTargetByClass([self::class],
'doLogout') . $parameters;
1961 $DIC->ctrl()->setTargetScript(
'ilias.php');
const IL_COOKIE_PATH(isset($_GET['client_id']))
Customizing of pimple-DIC for ILIAS.
Builds a Color from either hex- or rgb values.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilAccountRegistrationGUI.
Class ilAccountRegistrationMail.
static stripSlashesRecursive($a_data, bool $a_strip_html=true, string $a_allow="")
Auth credentials for lti oauth based authentication.
const int CONTEXT_STANDARD_FORM
Authentication with id and password.
const string MIG_TRIGGER_AUTHMODE
const string MIG_EXTERNAL_ACCOUNT
static getInstance(AuthPageEditorContext $context)
const int STATUS_AUTHENTICATION_FAILED
const int STATUS_CODE_ACTIVATION_REQUIRED
const int STATUS_ACCOUNT_MIGRATION_REQUIRED
const int STATUS_AUTHENTICATED
static getInstance()
Get status instance.
static _getMultipleAuthModeOptions(ilLanguage $lng)
const int AUTH_OPENID_CONNECT
static _hasMultipleAuthenticationMethods()
const int AUTH_PROVIDER_LTI
static _getInstanceByObjId(int $a_obj_id, int $a_usr_id)
special template class to simplify handling of ITX/PEAR
static _isParticipant(int $a_ref_id, int $a_usr_id)
Static function to check if a user is a participant of the container object.
static goToPublicSection()
go to public section
static redirectToStartingPage(string $target='')
static _lookupContObjID(int $a_id)
get learning module id for lm object
static lookupId(string $a_lang_key)
Lookup obj_id of language.
static getLogger(string $a_component_id)
Get component logger.
Component logger with individual log levels by component id.
static getAuthSettingsRefId()
static _registrationEnabled(int $a_obj_id)
Registration enabled? Method is in Access class, since it is needed by Access/ListGUI.
static _isActivated(int $a_obj_id)
Is activated.
static getContentStylePath(int $a_style_id, bool $add_random=true, bool $add_token=true)
get content style path static (to avoid full reading)
static getSyntaxStylePath()
static _isAnonymous(int $usr_id)
getPref(string $a_keyword)
static _verifyRegistrationHash(string $a_hash)
setTimeLimitUntil(?int $a_until)
setLastPasswordChangeTS(int $a_last_password_change_ts)
setPasswd(string $a_str, string $a_type=ilObjUser::PASSWD_PLAIN)
setActive(bool $active, int $owner=0)
set user active state and updates system fields appropriately
static _lookupId(string|array $a_user_str)
setTimeLimitUnlimited(bool $unlimited)
static _lookupLogin(int $a_user_id)
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
static _lookupType(int $id, bool $reference=false)
static _getAllReferences(int $id)
get all reference ids for object ID
static _lookupObjId(int $ref_id)
const LOGIN_ELEMENT_TYPE_IMG
const LOGIN_ELEMENT_TYPE_TXT
static _existsAndNotEmpty(string $a_parent_type, int $a_id, string $a_lang="-")
checks whether page exists and is not empty (may return true on some empty pages)
static getDefaultMemberRole(int $a_ref_id)
Class for user related exception handling in ILIAS.
static getCodeValidUntil(string $code)
static useCode(string $code)
static isUnusedCode(string $code)
static applyAccessLimits(ilObjUser $user, string $code)
static applyRoleAssignments(ilObjUser $user, string $code)
Class for user related exception handling in ILIAS.
Class ilObjAuthSettingsGUI.
static _lookupRegistrationType()
static getActiveIdpList()
static geIdpIdByEntityId(string $entityId)
static generatePasswords(int $a_number)
Generate a number of passwords.
static get(string $a_var)
static setClosingContext(int $a_context)
set closing context (for statistics)
static set(string $a_var, $a_val)
Set a value.
const int SESSION_CLOSE_USER
@ilCtrl_Calls ilStartUpGUI: ilAccountRegistrationGUI, ilPasswordAssistanceGUI, ilLoginPageGUI,...
showShibbolethLoginForm(string $page_editor_html)
static string $forced_cmd
substituteLoginPageElements( $tpl, string $page_editor_html, string $element_html, string $placeholder, string $fallback_tplvar)
ServerRequestInterface $httpRequest
static logoutUrl(array $parameters=[])
Return the logout URL with a valid CSRF token.
showLoginInformation(string $page_editor_html, ilGlobalTemplateInterface $tpl)
showOpenIdConnectLoginForm(string $page_editor_html)
ilAppEventHandler $eventHandler
doStandardAuthentication()
saniziteArrayElementsTrafo()
const PROP_ACCOUNT_MIGRATION_MIGRATE
showLoginForm(string $page_editor_html, ?ILIAS\UI\Component\Input\Container\Form\Form $form=null)
doOpenIdConnectAuthentication()
static initStartUpTemplate( $a_tmpl, bool $a_show_back=false, bool $a_show_logout=false)
This method enriches the global template with some user interface elements (language selection,...
const PROP_ACCOUNT_MIGRATION_NEW
ilGlobalTemplateInterface $mainTemplate
getAuthPageEditorHtml(AuthPageEditorContext $ipe_context)
ILIAS UI Renderer $ui_renderer
getSafePostCommands()
This method must return a list of safe POST commands.
checkForcedCommand(string $cmd)
static setForcedCommand(string $cmd)
static printToGlobalTemplate($tpl)
__construct(?ilObjUser $user=null, ?ilGlobalTemplateInterface $mainTemplate=null, ?ServerRequestInterface $httpRequest=null)
ilAuthSession $authSession
ILIAS UI Factory $ui_factory
showAccountMigration(?ILIAS\UI\Component\Input\Container\Form\Form $form=null, string $message='')
buildCodeForm(?string $username=null)
showSamlLoginForm(string $page_editor_html)
retrieveMessagesFromSession()
doMigration(array $migration_request_data)
jumpToPasswordAssistance()
getUnsafeGetCommands()
This method must return a list of unsafe GET commands.
RefineryFactory $refinery
showLoginPageOrStartupPage()
showLoginPage(?ILIAS\UI\Component\Input\Container\Form\Form $form=null)
purgePlaceholders(string $page_editor_html)
showSamlIdpSelection(ilSamlAuth $auth, array $idps)
showLegalDocumentsLinks(string $page_editor_html)
showCodeForm(?string $username=null, ?ILIAS\UI\Component\Input\Container\Form\Form $form=null)
const PROP_ACCOUNT_MIGRATION
showRegistrationLinks(string $page_editor_html)
buildAccountMigrationForm()
special template class to simplify handling of ITX/PEAR
static getStartingPointAsUrl()
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
static appendUrlParameterString(string $a_url, string $a_par, bool $xml_style=false)
static redirect(string $a_script)
static setCookie(string $a_cookie_name, string $a_cookie_value='', bool $a_also_set_super_global=true, bool $a_set_cookie_invalid=false)
const MESSAGE_TYPE_QUESTION
const MESSAGE_TYPE_SUCCESS
const MESSAGE_TYPE_FAILURE
An entity that renders components to a string output.
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
doActivationCheck(string $a_permission, string $a_cmd, int $a_ref_id, int $a_user_id, int $a_obj_id, string $a_type)
check for activation and centralized offline status.
doStatusCheck(string $a_permission, string $a_cmd, int $a_ref_id, int $a_user_id, int $a_obj_id, string $a_type)
object type specific check
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
static http()
Fetches the global http state from ILIAS.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
if(!file_exists('../ilias.ini.php'))