aboutsummaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorArne Schröder, M. A. <schroeder@data-quest.de>2024-12-19 13:38:22 +0000
committerRasmus Fuhse <fuhse@data-quest.de>2024-12-19 13:38:22 +0000
commit7cbba1ec8a0de90e02632fe06beebb2e672a07a2 (patch)
tree07c203bcfa1f022b105940b34191c797251ae7fd /app/controllers
parent147a30d22cad9f074a2f2a968a156e021ae59f33 (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.php2
-rw-r--r--app/controllers/admin/user.php12
-rw-r--r--app/controllers/my_ilias_accounts.php64
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
*/