aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schröder, M. A. <schroeder@data-quest.de>2023-12-04 11:53:12 +0000
committerAndré Noack <noack@data-quest.de>2023-12-04 11:53:12 +0000
commitd375c5134f04c995378fa7af6e853ef7545614a4 (patch)
treea41ef04ac601f62a57a52805373cb5def4378a59
parentccbcc9c6f3920bb8261d039113691f2a27add80f (diff)
Resolve "ILIAS-Schnittstelle: verwendete SOAP-Methoden getUser und deleteUser existieren in ILIAS 8 nicht mehr"
Closes #3279 Merge request studip/studip!2213
-rw-r--r--lib/elearning/studip_referrer_7x.php (renamed from lib/elearning/studip_referrer.php)8
-rw-r--r--lib/elearning/studip_referrer_8x.php126
-rw-r--r--lib/ilias_interface/ConnectedIlias.class.php4
-rw-r--r--lib/ilias_interface/IliasSoap.class.php110
-rw-r--r--lib/soap/StudipSoapClient_PHP5.class.php6
5 files changed, 220 insertions, 34 deletions
diff --git a/lib/elearning/studip_referrer.php b/lib/elearning/studip_referrer_7x.php
index 7a0257c..e367569 100644
--- a/lib/elearning/studip_referrer.php
+++ b/lib/elearning/studip_referrer_7x.php
@@ -9,14 +9,14 @@
*
*/
-/* ILIAS Version 4.4.x */
+/* ILIAS Version 7.x */
if(file_exists("./ilias.ini.php")){
require_once("./Services/Init/classes/class.ilIniFile.php");
$ilIliasIniFile = new ilIniFile("./ilias.ini.php");
$ilIliasIniFile->read();
$serverSettings = $ilIliasIniFile->readGroup("server");
- if ($serverSettings["studip"] != 1)
+ if (isset($serverSettings["studip"]) && $serverSettings["studip"] != 1)
{
echo 'Option "studip" in ilias.ini.php is not enabled. You need to add studip = "1" to the server section.';
exit();
@@ -40,7 +40,7 @@ if(file_exists("./ilias.ini.php")){
require_once "./include/inc.header.php";
- $base_url= "ilias.php?baseClass=ilPersonalDesktopGUI";
+ $base_url= "ilias.php?baseClass=ilDashboardGUI";
// redirect to specified page
@@ -121,4 +121,4 @@ if(file_exists("./ilias.ini.php")){
exit();
}
}
-?> \ No newline at end of file
+
diff --git a/lib/elearning/studip_referrer_8x.php b/lib/elearning/studip_referrer_8x.php
new file mode 100644
index 0000000..f7552af
--- /dev/null
+++ b/lib/elearning/studip_referrer_8x.php
@@ -0,0 +1,126 @@
+<?php
+/* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
+
+/**
+* redirect script for studip-users
+*
+* @author Arne Schroeder <schroeder@data-quest.de>
+* @author Andre Noack <noack@data-quest.de>
+*
+*/
+
+/* ILIAS Version 8.x */
+
+if(file_exists("./ilias.ini.php")){
+ require_once("./Services/Init/classes/class.ilIniFile.php");
+ $ilIliasIniFile = new ilIniFile("./ilias.ini.php");
+ $ilIliasIniFile->read();
+ $serverSettings = $ilIliasIniFile->readGroup("server");
+ if (isset($serverSettings["studip"]) && $serverSettings["studip"] != 1)
+ {
+ echo 'Option "studip" in ilias.ini.php is not enabled. You need to add studip = "1" to the server section.';
+ exit();
+ }
+
+ $cookie_path = dirname($_SERVER['PHP_SELF']);
+ if (substr($cookie_path,-1) != "/") {
+ $cookie_path .= "/";
+ }
+ if (isset($_GET['sess_id']))
+ {
+ setcookie('PHPSESSID',$_GET['sess_id'],0, $cookie_path);
+ $_COOKIE['PHPSESSID'] = $_GET['sess_id'];
+ }
+
+ if (isset($_GET['client_id']))
+ {
+ setcookie('ilClientId',$_GET['client_id'],0, $cookie_path);
+ $_COOKIE['ilClientId'] = $_GET['client_id'];
+ }
+
+ require_once "./include/inc.header.php";
+
+ $base_url= "ilias.php?baseClass=ilDashboardGUI";
+
+
+ // redirect to specified page
+ $redirect = false;
+ switch($_GET['target'])
+ {
+ case 'start':
+ switch($_GET['type'])
+ {
+ case 'lm':
+ $base_url= "ilias.php?baseClass=ilLMPresentationGUI";
+ break;
+ case 'tst':
+ $base_url= "ilias.php?cmd=infoScreen&cmdClass=ilobjtestgui&baseClass=ilRepositoryGUI";
+ break;
+ case 'svy':
+ $base_url= "ilias.php?cmd=infoScreen&cmdClass=ilObjSurveyGUI&baseClass=ilRepositoryGUI";
+ break;
+ case 'exc':
+ $base_url= "ilias.php?cmd=infoScreen&cmdClass=ilExerciseHandlerGUI&baseClass=ilRepositoryGUI";
+ break;
+ case 'sahs':
+ $base_url = "ilias.php?baseClass=ilSAHSPresentationGUI";
+ break;
+ case 'htlm':
+ $base_url = "ilias.php?baseClass=ilHTLMPresentationGUI";
+ break;
+ case 'glo':
+ $base_url = "ilias.php?baseClass=ilGlossaryPresentationGUI";
+ break;
+ case 'cat':
+ case 'crs':
+ $base_url= "ilias.php?cmd=render&cmdClass=ilrepositorygui&baseClass=ilRepositoryGUI";
+ break;
+ case 'webr':
+ $base_url= "ilias.php?cmd=calldirectlink&baseClass=ilLinkResourceHandlerGUI";
+ break;
+ }
+ break;
+ case 'new':
+ $base_url = "ilias.php?baseClass=ilRepositoryGUI&cmd=create&new_type=".preg_replace('/[^a-z]/', '', $_GET['type']);
+ break;
+ case 'edit':
+ switch($_GET['type'])
+ {
+ case 'lm':
+ $base_url = "ilias.php?baseClass=ilLMEditorGUI";
+ break;
+ case 'tst':
+ $base_url = "ilias.php?baseClass=ilObjTestGUI";
+ break;
+ case 'sahs':
+ $base_url = "ilias.php?baseClass=ilSAHSEditGUI";
+ break;
+ case 'htlm':
+ $base_url = "ilias.php?baseClass=ilHTLMEditorGUI";
+ break;
+ case 'glo':
+ $base_url = "ilias.php?baseClass=ilGlossaryEditorGUI";
+ break;
+ case 'svy':
+ $base_url = "ilias.php?baseClass=ilObjSurveyGUI";
+ break;
+ case 'exc':
+ $base_url = "ilias.php?baseClass=ilExerciseHandlerGUI";
+ break;
+ case 'webr':
+ $base_url = "ilias.php?baseClass=ilLinkResourceHandlerGUI";
+ break;
+ }
+ break;
+ }
+ if ($base_url)
+ {
+ $base_url .= "&ref_id=".(int)$_GET['ref_id'];
+ $token_repository = new ilCtrlTokenRepository();
+ $token = $token_repository->getToken();
+ $base_url .= '&' . ilCtrlInterface::PARAM_CSRF_TOKEN . '=' . $token->getToken();
+ header("Location: " . $base_url);
+ exit();
+ }
+}
+
diff --git a/lib/ilias_interface/ConnectedIlias.class.php b/lib/ilias_interface/ConnectedIlias.class.php
index e2d6327..4303c2e 100644
--- a/lib/ilias_interface/ConnectedIlias.class.php
+++ b/lib/ilias_interface/ConnectedIlias.class.php
@@ -217,13 +217,13 @@ class ConnectedIlias
public function getConnectionSettingsStatus()
{
// check ILIAS version
- if (($this->ilias_int_version < 30000) || ($this->ilias_int_version > 80000)) {
+ if (($this->ilias_int_version < 30000)) {
$this->error[] = _('Die ILIAS-Version ist ungültig.');
return false;
}
// check if url exists
- $check = @get_headers($this->ilias_config['url'] . 'login.php');
+ $check = @get_headers($this->ilias_config['url'] . 'webservice/soap/server.php');
if (strpos($check[0], '200') === false) {
$this->error[] = sprintf(_('Die URL "%s" ist nicht erreichbar.'), $this->ilias_config['url']);
return false;
diff --git a/lib/ilias_interface/IliasSoap.class.php b/lib/ilias_interface/IliasSoap.class.php
index 0ba7dd3..32aadd6 100644
--- a/lib/ilias_interface/IliasSoap.class.php
+++ b/lib/ilias_interface/IliasSoap.class.php
@@ -372,10 +372,10 @@ class IliasSoap extends StudipSoapClient
'sid' => $this->getSID(),
'types' => $types,
'key' => $key,
- 'combination' => $combination
+ 'combination' => $combination,
+ 'user_id' => (int)$user_id
];
- if ($user_id != "")
- $param["user_id"] = $user_id;
+
$result = $this->call('searchObjects', $param);
if ($result)
{
@@ -398,10 +398,10 @@ class IliasSoap extends StudipSoapClient
{
$param = [
'sid' => $this->getSID(),
- 'reference_id' => $ref
+ 'reference_id' => $ref,
+ 'user_id' => (int)$user_id
];
- if ($user_id != "")
- $param["user_id"] = $user_id;
+
$result = $this->call('getObjectByReference', $param);
if ($result != false)
{
@@ -425,7 +425,8 @@ class IliasSoap extends StudipSoapClient
{
$param = [
'sid' => $this->getSID(),
- 'title' => $key
+ 'title' => $key,
+ 'user_id' => 0
];
$result = $this->call('getObjectsByTitle', $param);
if ($result != false)
@@ -459,9 +460,11 @@ class IliasSoap extends StudipSoapClient
{
$param = [
'sid' => $this->getSID(),
- 'title' => $key
+ 'title' => $key,
+ 'user_id' => 0
];
$result = $this->call('getObjectsByTitle', $param);
+
if ($result != false)
{
$objects = $this->parseIliasObject($result);
@@ -501,7 +504,7 @@ class IliasSoap extends StudipSoapClient
$xml = "<!DOCTYPE Objects SYSTEM \"http://www.ilias.uni-koeln.de/download/dtd/ilias_object_0_1.dtd\">
<Objects>
- <Object type=\"$type\">
+ <Object type=\"$type\" obj_id=\"\" >
<Title>
$title
</Title>
@@ -594,11 +597,10 @@ class IliasSoap extends StudipSoapClient
$param = [
'sid' => $this->getSID(),
'ref_id' => $ref_id,
- 'types' => $types
+ 'types' => $types,
+ 'user_id' => (int)$user_id
];
- if ($user_id != "") {
- $param["user_id"] = $user_id;
- }
+
$result = $this->call('getTreeChilds', $param);
$tree_childs = [];
if ($result != false) {
@@ -897,17 +899,47 @@ class IliasSoap extends StudipSoapClient
*
* gets user-data for given user-id
* @access public
- * @param string user_id user-id
+ * @param string $user_id user-id
* @return array user-data
*/
function getUser($user_id)
{
- $param = [
- 'sid' => $this->getSID(),
- 'user_id' => $user_id,
+ if ($this->ilias_version < 80000) {
+ $param = [
+ 'sid' => $this->getSID(),
+ 'user_id' => $user_id
];
- $result = $this->call('getUser', $param); // returns user data array
- return $result;
+ $result = $this->call('getUser', $param); // returns user data array
+ return $result;
+ } else {
+ $param = [
+ 'sid' => $this->getSID(),
+ 'user_ids' => [$user_id],
+ 'attach_roles' => 0,
+ ];
+ $result = $this->call('getUserXML', $param); // returns user xml data
+ if ($result) {
+ $s = simplexml_load_string($result);
+ $user_array = [];
+
+ foreach ($s->User as $user) {
+ $id_parts = explode('usr_', $user->attributes()->Id);
+ if ($id_parts[1] == $user_id) {
+ $user_array['usr_id'] = $user_id;
+ $user_array['user_language'] = (string)$user->attributes()->Language;
+ $user_array['login'] = (string)$user->Login;
+ $user_array['firstname'] = (string)$user->Firstname;
+ $user_array['lastname'] = (string)$user->Lastname;
+ $user_array['title'] = (string)$user->Title;
+ $user_array['email'] = (string)$user->Email;
+ $user_array['active'] = (string)$user->Active;
+ $user_array['authmode'] = (string)$user->AuthMode->attributes()->type;
+ return $user_array;
+ }
+ }
+ }
+ return false;
+ }
}
/**
@@ -1227,17 +1259,45 @@ class IliasSoap extends StudipSoapClient
*
* deletes user-account
* @access public
- * @param string user_id user-id
+ * @param string $user_id user-id
* @return string result
*/
function deleteUser($user_id)
{
$this->clearCache();
- $param = [
- 'sid' => $this->getSID(),
- 'user_id' => $user_id
+ if ($this->ilias_version < 80000) {
+ $param = [
+ 'sid' => $this->getSID(),
+ 'user_id' => $user_id
+ ];
+ return $this->call('deleteUser', $param); // returns boolean
+ } else {
+ $user_data = $this->getUser($user_id);
+ if (!$user_data['login']) {
+ return false;
+ }
+ $usr_xml = '<Users>
+ <User Id="il_0_usr_' . $user_id . '" Action="Delete">
+ <UDFDefinitions></UDFDefinitions><Login>' . $user_data['login'] . '</Login>
+ </User>
+ </Users>';
+
+ $param = [
+ 'sid' => $this->getSID(),
+ 'folder_id' => -1,
+ 'usr_xml' => $usr_xml,
+ 'conflict_rule' => 1,
+ 'send_account_mail' => 0
];
- return $this->call('deleteUser', $param); // returns boolean
+ $result = $this->call('importUsers', $param);
+
+ $s = simplexml_load_string($result);
+
+ if ((string)$s->rows->row->column[3] == "successful") {
+ return (string)$s->rows->row->column[0];
+ }
+ return false;
+ }
}
////////////////////////////
@@ -1453,7 +1513,7 @@ class IliasSoap extends StudipSoapClient
<Course>
<MetaData>
<General Structure=\"Hierarchical\">
- <Identifier Catalog=\"ILIAS\"/>
+ <Identifier Catalog=\"ILIAS\" Entry=\"\"/>
<Title Language=\"$crs_language\">
$crs_title
</Title>
diff --git a/lib/soap/StudipSoapClient_PHP5.class.php b/lib/soap/StudipSoapClient_PHP5.class.php
index 23bfa9c..0aafd4a 100644
--- a/lib/soap/StudipSoapClient_PHP5.class.php
+++ b/lib/soap/StudipSoapClient_PHP5.class.php
@@ -19,7 +19,7 @@ class StudipSoapClient
try {
$this->soap_client = new SoapClient($path, ['trace' => 0]);
} catch (SoapFault $fault) {
- $this->error = "<b>Soap Constructor Error</b><br>" . $fault->faultcode . ": ".$fault->faultstring."<br><br>";
+ $this->error = "Soap Constructor Error " . $fault->faultcode . ": ".$fault->faultstring;
}
}
@@ -33,7 +33,8 @@ class StudipSoapClient
} catch (SoapFault $fault) {
$this->faultstring = $fault->faultstring;
if (!in_array(mb_strtolower($this->faultstring), ["session not valid","session invalid", "session idled"])) {
- $this->error .= "<hr><font size=\"-1\"><b>" . sprintf(_("SOAP-Fehler, Funktion \"%s\":"), $method) . "</b> " . $fault->faultstring . " (" . $fault->faultcode . ")<br>".print_r($params,1).'</font><hr>';
+ unset($params['password']);
+ $this->error .= sprintf(_("SOAP-Fehler, Funktion \"%s\":"), $method) . " " . $fault->faultstring . " (" . $fault->faultcode . ")".print_r($params,1);
error_log($this->error);
}
$this->soap_client->fault = true;
@@ -60,4 +61,3 @@ class StudipSoapClient
return false;
}
}
-?>