diff options
| author | Arne Schröder, M. A. <schroeder@data-quest.de> | 2024-12-19 13:38:22 +0000 |
|---|---|---|
| committer | Rasmus Fuhse <fuhse@data-quest.de> | 2024-12-19 13:38:22 +0000 |
| commit | 7cbba1ec8a0de90e02632fe06beebb2e672a07a2 (patch) | |
| tree | 07c203bcfa1f022b105940b34191c797251ae7fd /app/controllers | |
| parent | 147a30d22cad9f074a2f2a968a156e021ae59f33 (diff) | |
Resolve "Accountmanagement für verknüpfte ILIAS-Accounts in Stud.IP"
Closes #4263
Merge request studip/studip!3368
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/admin/ilias_interface.php | 2 | ||||
| -rw-r--r-- | app/controllers/admin/user.php | 12 | ||||
| -rw-r--r-- | app/controllers/my_ilias_accounts.php | 64 |
3 files changed, 78 insertions, 0 deletions
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://<URL zur ILIAS-Installation>'), '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 */ |
