From bd6201de55e67c83f2185ec0495e375783e744db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20Schr=C3=B6der=2C=20M=2E=20A?= Date: Wed, 26 Mar 2025 11:26:46 +0000 Subject: =?UTF-8?q?Resolve=20"ILIAS-Schnittstelle:=20Inkompatibilit=C3=A4t?= =?UTF-8?q?=20mit=20ILIAS=209"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #4995 Merge request studip/studip!3888 --- app/controllers/admin/ilias_interface.php | 60 +++++++---- app/controllers/course/ilias_interface.php | 9 +- app/controllers/my_ilias_accounts.php | 3 +- app/views/admin/ilias_interface/edit_content.php | 20 ++-- app/views/admin/ilias_interface/index.php | 2 +- app/views/admin/ilias_interface/soap_methods.php | 8 +- app/views/course/ilias_interface/add_groups.php | 7 +- app/views/course/ilias_interface/add_object.php | 12 +-- app/views/course/ilias_interface/index.php | 8 +- app/views/course/ilias_interface/view_object.php | 4 +- lib/ilias_interface/ConnectedIlias.class.php | 116 ++++++++++++++++----- lib/ilias_interface/IliasModule.class.php | 8 +- lib/ilias_interface/IliasSoap.class.php | 75 ++++++-------- lib/ilias_interface/studip_referrer_9x.php | 125 +++++++++++++++++++++++ phpstan.neon.dist | 1 + 15 files changed, 327 insertions(+), 131 deletions(-) create mode 100644 lib/ilias_interface/studip_referrer_9x.php diff --git a/app/controllers/admin/ilias_interface.php b/app/controllers/admin/ilias_interface.php index 37b1664..c327c29 100644 --- a/app/controllers/admin/ilias_interface.php +++ b/app/controllers/admin/ilias_interface.php @@ -124,7 +124,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController $this->valid_url = false; $this->ilias_version = ''; $this->ilias_version_date = ''; - $this->clients = []; + $this->ilias_clients = []; if ($index === 'new') { // default values $this->ilias_config = [ @@ -170,7 +170,7 @@ class Admin_IliasInterfaceController extends AuthenticatedController // get ILIAS server info if (Request::get('ilias_url')) { $info = ConnectedIlias::getIliasInfo(Request::get('ilias_url')); - if (count($info)) { + if (is_array($info) && count($info)) { $this->valid_url = true; $this->ilias_config['url'] = Request::get('ilias_url'); $this->ilias_config['http_connection_timeout'] = (int) Request::get('ilias_http_connection_timeout'); @@ -247,8 +247,18 @@ class Admin_IliasInterfaceController extends AuthenticatedController */ public function edit_content_action($index) { - $this->ilias_config = $this->ilias_configs[$index]; $this->ilias_index = $index; + $this->ilias_datafields = []; + + $connected_ilias = new ConnectedIlias($index); + $this->ilias_config = $connected_ilias->ilias_config; + + if ($admin_id = $connected_ilias->soap_client->lookupUser($this->ilias_config['admin'])) { + $user = $connected_ilias->soap_client->getUser($admin_id); + if (!empty($user) && array_key_exists('udfs', $user)) { + $this->ilias_datafields = $user['udfs']; + } + } } /** @@ -257,8 +267,11 @@ class Admin_IliasInterfaceController extends AuthenticatedController */ public function edit_permissions_action($index) { - $this->ilias_config = $this->ilias_configs[$index]; $this->ilias_index = $index; + + $connected_ilias = new ConnectedIlias($index); + $this->ilias_config = $connected_ilias->ilias_config; + $this->global_roles = $connected_ilias->soap_client->getRoles('global', -1); } /** @@ -420,28 +433,31 @@ class Admin_IliasInterfaceController extends AuthenticatedController */ public function soap_methods_action($index) { - if ($this->ilias_configs[$index]['is_active']) { - $ilias = new ConnectedIlias($index); - $this->soap_methods = $ilias->getSoapMethods(); - ksort($this->soap_methods); - $this->ilias_index = $index; - if (Request::get('ilias_soap_method')) { - $this->ilias_soap_method = Request::get('ilias_soap_method'); - foreach ($this->soap_methods[Request::get('ilias_soap_method')] as $param) { - switch ($param) { - case "sid" : $this->params[$param] = $ilias->soap_client->getSID(); - break; - case "user_id" : $this->params[$param] = $ilias->user->getId(); - break; - } + $ilias = new ConnectedIlias($index); + + $this->soap_methods = $ilias->getSoapMethods(); + ksort($this->soap_methods); + $this->ilias_index = $index; + if (Request::get('ilias_soap_method')) { + $this->ilias_soap_method = Request::get('ilias_soap_method'); + foreach ($this->soap_methods[Request::get('ilias_soap_method')] as $param) { + switch ($param) { + case "sid" : $this->params[$param] = $ilias->soap_client->getSID(); + break; + case "user_id" : $this->params[$param] = is_object($ilias->user) ? $ilias->user->getId() : ''; + break; } - } elseif (Request::get('ilias_call')) { - $params = []; - foreach ($this->soap_methods[Request::get('ilias_call')] as $param) { + } + } elseif (Request::get('ilias_call')) { + $params = []; + foreach ($this->soap_methods[Request::get('ilias_call')] as $param) { + if ($param === 'user_ids') { + $params[$param] = [Request::get('ilias_soap_param_'.$param)]; + } else { $params[$param] = Request::get('ilias_soap_param_'.$param); } - $this->result = $ilias->soap_client->call(Request::get('ilias_call'), $params); } + $this->result = $ilias->soap_client->call(Request::get('ilias_call'), $params); } } } diff --git a/app/controllers/course/ilias_interface.php b/app/controllers/course/ilias_interface.php index 96196da..ee34048 100644 --- a/app/controllers/course/ilias_interface.php +++ b/app/controllers/course/ilias_interface.php @@ -26,9 +26,8 @@ class Course_IliasInterfaceController extends AuthenticatedController { parent::before_filter($action, $args); - if (Request::isXhr()) { - $this->dialog = true; - } + $this->dialog = Request::isXhr(); + if (!Config::Get()->ILIAS_INTERFACE_ENABLE ) { throw new AccessDeniedException(_('ILIAS-Interface ist nicht aktiviert.')); } else @@ -173,7 +172,7 @@ class Course_IliasInterfaceController extends AuthenticatedController Icon::create('group2') )->asDialog('size=auto'); } - if ($this->author_permission) { + if ($this->author_permission && !empty($this->ilias_interface_config['show_tools_page'])) { $widget->addLink( _('Externe Accounts verwalten'), $this->url_for('my_ilias_accounts'), @@ -380,7 +379,7 @@ class Course_IliasInterfaceController extends AuthenticatedController } // exclude all modules that are already assigned to course foreach ($this->ilias_modules as $module_id => $module) { - if ($course_modules[$this->ilias_index][$module_id]) { + if (!empty($course_modules[$this->ilias_index][$module_id])) { unset($this->ilias_modules[$module_id]); } } diff --git a/app/controllers/my_ilias_accounts.php b/app/controllers/my_ilias_accounts.php index fc4c00d..01ce191 100644 --- a/app/controllers/my_ilias_accounts.php +++ b/app/controllers/my_ilias_accounts.php @@ -217,8 +217,7 @@ class MyIliasAccountsController extends AuthenticatedController } // refer to ILIAS target file - header('Location: '. $this->ilias->getTargetFile() . $parameters); - $this->render_nothing(); + $this->redirect($this->ilias->getTargetFile() . $parameters); } } } diff --git a/app/views/admin/ilias_interface/edit_content.php b/app/views/admin/ilias_interface/edit_content.php index ce48668..a45c5fc 100644 --- a/app/views/admin/ilias_interface/edit_content.php +++ b/app/views/admin/ilias_interface/edit_content.php @@ -11,43 +11,43 @@ - + = 50400) && (ConnectedIlias::getIntVersion($ilias_config['version']) < 60000)) : ?>