From 4d6a5d858db94eee5a059ddd605072eb752393c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20Schr=C3=B6der=2C=20M=2E=20A=2E?= 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 | 50 ++++----- app/controllers/course/ilias_interface.php | 9 +- app/controllers/my_ilias_accounts.php | 5 +- app/views/admin/ilias_interface/edit_content.php | 22 ++-- 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 +- app/views/my_ilias_accounts/my_courses.php | 6 +- lib/ilias_interface/ConnectedIlias.php | 116 ++++++++++++++++----- lib/ilias_interface/IliasModule.php | 8 +- lib/ilias_interface/IliasSoap.php | 75 ++++++-------- lib/ilias_interface/studip_referrer_9x.php | 125 +++++++++++++++++++++++ lib/modules/IliasInterfaceModule.php | 2 +- phpstan.neon.dist | 1 + 17 files changed, 322 insertions(+), 138 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 38fa8fa..dfb8f0a 100644 --- a/app/controllers/admin/ilias_interface.php +++ b/app/controllers/admin/ilias_interface.php @@ -122,7 +122,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,14 +247,15 @@ 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 (array_key_exists('udfs', $user)) { + if (!empty($user) && array_key_exists('udfs', $user)) { $this->ilias_datafields = $user['udfs']; } } @@ -266,10 +267,10 @@ 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); } @@ -504,28 +505,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 492ae80..d79ed0b 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 d17ceb7..2a3bd22 100644 --- a/app/controllers/my_ilias_accounts.php +++ b/app/controllers/my_ilias_accounts.php @@ -158,7 +158,7 @@ class MyIliasAccountsController extends AuthenticatedController } // filter by semester - if (Config::get()->ILIAS_INTERFACE_BASIC_SETTINGS['show_course_paths']) { + if (!empty(Config::get()->ILIAS_INTERFACE_BASIC_SETTINGS['show_course_paths'])) { $this->courses_list[$ilias_list_index][$crs_id]['path'] = $ilias->soap_client->getPath($crs_id); if ( $this->selected_semester @@ -404,8 +404,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 77c76eb..2fdc534 100644 --- a/app/views/admin/ilias_interface/edit_content.php +++ b/app/views/admin/ilias_interface/edit_content.php @@ -12,30 +12,30 @@ - + = 50400) && (ConnectedIlias::getIntVersion($ilias_config['version']) < 60000)) : ?>