From 7bdeb341efea0ca705cdff59a83169df2e9f8741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20Schr=C3=B6der=2C=20M=2E=20A?= Date: Fri, 17 Dec 2021 13:12:14 +0000 Subject: =?UTF-8?q?Resolve=20"Anpassung=20der=20ILIAS-Schnittstelle=20f?= =?UTF-8?q?=C3=BCr=20Nutzung=20mit=20ILIAS-seitiger=20LDAP/Shibboleth-Anbi?= =?UTF-8?q?ndung"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/ilias_interface.php | 4 ++- app/controllers/my_ilias_accounts.php | 36 ++++++++++++++---------- app/views/admin/ilias_interface/edit_content.php | 2 +- app/views/admin/ilias_interface/edit_server.php | 14 +++++---- app/views/my_ilias_accounts/index.php | 12 ++++++++ lib/ilias_interface/ConnectedIlias.class.php | 19 +++++++++++++ 6 files changed, 65 insertions(+), 22 deletions(-) diff --git a/app/controllers/admin/ilias_interface.php b/app/controllers/admin/ilias_interface.php index 383fe39..c718e1c 100755 --- a/app/controllers/admin/ilias_interface.php +++ b/app/controllers/admin/ilias_interface.php @@ -134,6 +134,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController 'url' => _('https://'), 'client' => '', 'ldap_enable' => '', + 'no_account_updates' => false, 'admin' => 'ilias_soap_admin', 'admin_pw' => '', @@ -211,7 +212,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController $this->ilias_config = $this->ilias_configs[$index]; $ldap_options = []; foreach (StudipAuthAbstract::GetInstance() as $plugin) { - if ($plugin instanceof StudipAuthLdap) { + if (!($plugin instanceof StudipAuthStandard)) { $ldap_options[] = ''; } } @@ -291,6 +292,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController if (Request::getInstance()->offsetExists('ilias_ldap_enable')) { $this->ilias_configs[$index]['ldap_enable'] = Request::get('ilias_ldap_enable'); } + $this->ilias_configs[$index]['no_account_updates'] = Request::get('ilias_no_account_updates'); $this->ilias_configs[$index]['admin'] = Request::get('ilias_admin'); $this->ilias_configs[$index]['admin_pw'] = Request::get('ilias_admin_pw'); diff --git a/app/controllers/my_ilias_accounts.php b/app/controllers/my_ilias_accounts.php index ca97da7..cc1a77a 100755 --- a/app/controllers/my_ilias_accounts.php +++ b/app/controllers/my_ilias_accounts.php @@ -85,7 +85,7 @@ class MyIliasAccountsController extends AuthenticatedController PageLayout::setTitle($this->module->getTitle()); $this->ilias_index = $index; } else { - PageLayout::postError(_("Diese ILIAS-Installation ist nicht aktiv.")); + PageLayout::postError(_('Diese ILIAS-Installation ist nicht aktiv.')); } } @@ -100,7 +100,7 @@ class MyIliasAccountsController extends AuthenticatedController $this->ilias_ref_id = $this->ilias->user->getCategory(); $this->ilias_index = $index; } else { - PageLayout::postError(_("Diese ILIAS-Installation ist nicht aktiv.")); + PageLayout::postError(_('Diese ILIAS-Installation ist nicht aktiv.')); } } @@ -131,7 +131,7 @@ class MyIliasAccountsController extends AuthenticatedController case 'update' : // update user account if ($this->ilias->updateUser($GLOBALS['user'])) { - PageLayout::postSuccess(_("ILIAS-Account aktualisiert.")); + PageLayout::postSuccess(_('ILIAS-Account aktualisiert.')); } break; case 'add' : @@ -144,17 +144,17 @@ class MyIliasAccountsController extends AuthenticatedController $this->ilias->user->setPassword(''); $this->ilias->user->setId($user_id); $this->ilias->user->setConnection(IliasUser::USER_TYPE_ORIGINAL); - PageLayout::postSuccess(_("ILIAS-Account zugeordnet.")); + PageLayout::postSuccess(_('ILIAS-Account zugeordnet.')); $this->ilias->soap_client->clearCache(); } } else { // wrong login - PageLayout::postError(_("Login fehlgeschlagen. Die Zuordnung konnte nicht geändert werden.")); + PageLayout::postError(_('Login fehlgeschlagen. Die Zuordnung konnte nicht geändert werden.')); } break; case 'remove' : $this->ilias->user->unsetConnection(); - PageLayout::postSuccess(_("Account-Zuordnung entfernt.")); + PageLayout::postSuccess(_('Account-Zuordnung entfernt.')); break; } } @@ -177,16 +177,22 @@ class MyIliasAccountsController extends AuthenticatedController $module_id = $this->ilias->user->category; } // display error message if session is invalid - if (!$session_id) { - PageLayout::postError(sprintf(_("Automatischer Login für %s-Installation (Nutzername %s) fehlgeschlagen."), + if (! $this->ilias->user->isConnected() && $this->ilias->ilias_config['no_account_updates']) { + PageLayout::postError(sprintf( + _('Sie haben im System %s noch keinen Account. Loggen Sie sich zuerst in %s ein, um ILIAS-Lernobjekte in Stud.IP nutzen zu können.'), + htmlReady($this->ilias->getName()), + ''.htmlReady($this->ilias->getName()).'' + )); + } elseif (!$session_id) { + PageLayout::postError(sprintf(_('Automatischer Login für %s-Installation (Nutzername %s) fehlgeschlagen.'), htmlReady($this->ilias->getName()), htmlReady($this->ilias->user->getUsername()))); } elseif (($target == 'new') AND ! $module_id) { - PageLayout::postError(sprintf(_("Keine Kategorie zum Anlegen neuer Lernobjekte in der %s-Installation vorhanden."), + PageLayout::postError(sprintf(_('Keine Kategorie zum Anlegen neuer Lernobjekte in der %s-Installation vorhanden.'), htmlReady($this->ilias->getName()))); } else { // remove client id from session id - $session_array = explode("::", $session_id); + $session_array = explode('::', $session_id); $session_id = $session_array[0]; if (Request::get('ilias_module_type')) $module_type = Request::get('ilias_module_type'); @@ -194,19 +200,19 @@ class MyIliasAccountsController extends AuthenticatedController // build target link $parameters = '?sess_id='.$session_id; if (!empty($this->ilias->getClientId())) { - $parameters .= "&client_id=".$this->ilias->getClientId(); + $parameters .= '&client_id='.$this->ilias->getClientId(); if ($target) { - $parameters .= "&target=".$target; + $parameters .= '&target='.$target; } if ($module_id) { - $parameters .= "&ref_id=".$module_id; + $parameters .= '&ref_id='.$module_id; } if ($module_type) { - $parameters .= "&type=".$module_type; + $parameters .= '&type='.$module_type; } // refer to ILIAS target file - header("Location: ". $this->ilias->getTargetFile() . $parameters); + header('Location: '. $this->ilias->getTargetFile() . $parameters); $this->render_nothing(); } } diff --git a/app/views/admin/ilias_interface/edit_content.php b/app/views/admin/ilias_interface/edit_content.php index 4e0c51b..908e193 100755 --- a/app/views/admin/ilias_interface/edit_content.php +++ b/app/views/admin/ilias_interface/edit_content.php @@ -28,7 +28,7 @@ + @@ -84,4 +88,4 @@ 'close']) ?> - \ No newline at end of file + diff --git a/app/views/my_ilias_accounts/index.php b/app/views/my_ilias_accounts/index.php index 1dd77d6..a8d1a80 100755 --- a/app/views/my_ilias_accounts/index.php +++ b/app/views/my_ilias_accounts/index.php @@ -98,6 +98,7 @@ $ilias) : ?> + user->getUserName()) : ?> $ilias->user->getUserName() @@ -143,6 +144,17 @@ render() ?> + + + + getName()), + "getAbsolutePath()."\">".htmlReady($ilias->getName())."" + )?> + + + diff --git a/lib/ilias_interface/ConnectedIlias.class.php b/lib/ilias_interface/ConnectedIlias.class.php index 3aed792..2ac9589 100644 --- a/lib/ilias_interface/ConnectedIlias.class.php +++ b/lib/ilias_interface/ConnectedIlias.class.php @@ -324,6 +324,7 @@ class ConnectedIlias } $user_data = $this->user->getUserArray(); $user_data["login"] = $this->ilias_config['user_prefix'].$user_data["login"]; + $user_data['auth_mode'] = 'default'; $user_exists = $this->soap_client->lookupUser($user_data["login"]); //automatische Zuordnung von bestehenden Ilias Accounts @@ -339,6 +340,14 @@ class ConnectedIlias } elseif ($user_exists) { $this->error[] = sprintf(_('Externer Account konnte nicht angelegt werden. Es existiert bereits ein User mit dem Login %s in %s'), $user_data["login"], $this->ilias_config['name']); return false; + } elseif ($this->ilias_config['no_account_updates']) { + $this->error[] = sprintf(_('Sie haben noch keinen ILIAS-Account. Loggen Sie sich zuerst in %s ein, um ILIAS-Lernobjekte in Stud.IP nutzen zu können.'), "ilias_config['url']."\">".$this->ilias_config['name'].""); + return false; + } elseif (! $this->ilias_config['user_prefix'] && + $this->ilias_config['ldap_enable'] && + ($this->user->auth_plugin != 'standard') && + ($this->user->auth_plugin == $this->ilias_config['ldap_enable'])) { + $user_data['external_account'] = $this->user->studip_login; } // set role according to Stud.IP perm @@ -376,6 +385,15 @@ class ConnectedIlias return false; } $update_user = new IliasUser($this->index, $this->ilias_config['version'], $user->id); + // don't update ldap user + if (! $this->ilias_config['user_prefix'] && + $this->ilias_config['ldap_enable'] && + ($update_user->auth_plugin != 'standard') && + ($update_user->auth_plugin == $this->ilias_config['ldap_enable'])) { + return true; + } elseif ($this->ilias_config['no_account_updates']) { + return true; + } // if user is manually connected don't update user data if ($update_user->getUserType() == IliasUser::USER_TYPE_ORIGINAL) { return true; @@ -385,6 +403,7 @@ class ConnectedIlias if ($update_user->isConnected() && $update_user->id && $this->soap_client->lookupUser($update_user->login)) { $user_data = $update_user->getUserArray(); $user_data["login"] = $this->ilias_config['user_prefix'].$user_data["login"]; + $user_data['auth_mode'] = 'default'; // set role according to Stud.IP perm if ($user->perms == "root") { -- cgit v1.0