From 7cbba1ec8a0de90e02632fe06beebb2e672a07a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20Schr=C3=B6der=2C=20M=2E=20A=2E?= Date: Thu, 19 Dec 2024 13:38:22 +0000 Subject: =?UTF-8?q?Resolve=20"Accountmanagement=20f=C3=BCr=20verkn=C3=BCpf?= =?UTF-8?q?te=20ILIAS-Accounts=20in=20Stud.IP"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #4263 Merge request studip/studip!3368 --- app/controllers/admin/ilias_interface.php | 2 + app/controllers/admin/user.php | 12 ++++ app/controllers/my_ilias_accounts.php | 64 +++++++++++++++++++++ app/views/admin/ilias_interface/edit_content.php | 4 ++ app/views/admin/user/edit.php | 37 +++++++++++- .../my_ilias_accounts/administrate_account.php | 65 ++++++++++++++++++++++ lib/ilias_interface/ConnectedIlias.php | 17 ++++-- lib/ilias_interface/IliasUser.php | 3 +- 8 files changed, 197 insertions(+), 7 deletions(-) create mode 100644 app/views/my_ilias_accounts/administrate_account.php diff --git a/app/controllers/admin/ilias_interface.php b/app/controllers/admin/ilias_interface.php index d0e59ea..750e33d 100644 --- a/app/controllers/admin/ilias_interface.php +++ b/app/controllers/admin/ilias_interface.php @@ -129,6 +129,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController 'url' => _('https://'), 'client' => '', 'ldap_enable' => '', + 'reconnect_accounts' => false, 'no_account_updates' => false, 'admin' => 'ilias_soap_admin', 'admin_pw' => '', @@ -351,6 +352,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController $this->ilias_configs[$index]['course_veranstaltungsnummer'] = Request::get('ilias_course_veranstaltungsnummer'); } $this->ilias_configs[$index]['delete_ilias_users'] = Request::get('ilias_delete_ilias_users'); + $this->ilias_configs[$index]['reconnect_accounts'] = Request::bool('ilias_reconnect_accounts', false); $this->ilias_configs[$index]['delete_ilias_courses'] = Request::get('ilias_delete_ilias_courses'); $this->ilias_configs[$index]['category_create_on_add_module'] = Request::get('ilias_category_create_on_add_module'); $this->ilias_configs[$index]['category_to_desktop'] = Request::get('ilias_category_to_desktop'); diff --git a/app/controllers/admin/user.php b/app/controllers/admin/user.php index 4af6b42..9a61059 100644 --- a/app/controllers/admin/user.php +++ b/app/controllers/admin/user.php @@ -415,6 +415,18 @@ class Admin_UserController extends AuthenticatedController $this->user_roles = $this->user->getRoles(); + // get ilias account data + if ($GLOBALS['perm']->have_perm('root') && Config::get()->ILIAS_INTERFACE_ENABLE) { + $this->ilias_list = []; + foreach (Config::get()->ILIAS_INTERFACE_SETTINGS as $ilias_index => $ilias_config) { + if ($ilias_config['is_active']) { + $this->ilias_list[$ilias_index] = new ConnectedIlias($ilias_index); + $this->ilias_list[$ilias_index]->soap_client->clearCache(); + $this->ilias_user[$ilias_index] = new IliasUser($ilias_index, $ilias_config['version'], $user_id); + } + } + } + // Änderungen speichern if (Request::submitted('edit')) { CSRFProtection::verifyUnsafeRequest(); diff --git a/app/controllers/my_ilias_accounts.php b/app/controllers/my_ilias_accounts.php index b82ec7d..84060ac 100644 --- a/app/controllers/my_ilias_accounts.php +++ b/app/controllers/my_ilias_accounts.php @@ -162,6 +162,70 @@ class MyIliasAccountsController extends AuthenticatedController } /** + * Administrate account for ILIAS installation + * @param $user_id studip user id + * @param $index Index of ILIAS installation + * @param $mode action type + */ + public function administrate_account_action($user_id, $index) + { + if (!$GLOBALS['perm']->have_perm('root')) { + throw new AccessDeniedException(); + } + + $ilias_configs = Config::get()->ILIAS_INTERFACE_SETTINGS; + if ($ilias_configs[$index]['is_active']) { + $this->ilias = new ConnectedIlias($index); + $this->ilias_index = $index; + $this->ilias_login = ''; + $this->matched_user = false; + $this->external_account_login = ''; + $this->external_account_id = false; + $this->user_exists = false; + $this->user = new IliasUser($index, $ilias_configs[$index]['version'], $user_id); + + if (Request::submitted('lookup_account')) { + $this->ilias_login = trim(Request::option('ilias_login')); + $this->matched_user = $this->ilias->soap_client->lookupUser($this->ilias_login); + if (empty($this->matched_user)) { + PageLayout::postError(sprintf(_('Es wurde kein Account mit dem Loginnamen "%s" gefunden.'), htmlReady($this->ilias_login))); + } else { + PageLayout::postInfo(sprintf(_('Account "%s" wurde gefunden.'), htmlReady($this->ilias_login))); + } + } elseif (Request::submitted('connect_account')) { + $new_user = $this->ilias->soap_client->getUser(Request::option('ilias_user_id')); + if ($new_user['usr_id'] && $new_user['login']) { + $this->user->id = $new_user['usr_id']; + $this->user->login = $new_user['login']; + $this->user->setConnection(IliasUser::USER_TYPE_ORIGINAL); + PageLayout::postSuccess(_('Account zugeordnet.')); + } + } elseif (Request::submitted('disconnect_account')) { + if ($this->user->unsetConnection(true)) { + PageLayout::postSuccess(_('Account-Zuordnung entfernt.')); + } + } elseif (Request::submitted('new_account')) { + $this->ilias->user = new IliasUser($index, $ilias_configs[$index]['version'], $user_id); + $this->ilias->soap_client->setCachingStatus(false); + $this->ilias->soap_client->clearCache(); + $this->ilias->newUser(); + PageLayout::postSuccess(_('Account angelegt.')); + } + + // check if connection is valid / available + if ($this->user->isConnected()) { + $existing_user = $this->ilias->soap_client->getUser($this->user->id); + if ($existing_user && $existing_user['usr_id'] === $this->user->id) { + $this->user_exists = true; + } + } else { + $this->external_account_login = $ilias_configs[$index]['user_prefix'] . $this->user->studip_login; + $this->external_account_id = $this->ilias->soap_client->lookupUser($this->external_account_login); + } + } + } + + /** * Redirect to ILIAS installation * @param $index Index of ILIAS installation */ diff --git a/app/views/admin/ilias_interface/edit_content.php b/app/views/admin/ilias_interface/edit_content.php index d0eb47e..77c76eb 100644 --- a/app/views/admin/ilias_interface/edit_content.php +++ b/app/views/admin/ilias_interface/edit_content.php @@ -39,6 +39,10 @@ +