www.bimminger.at

Tipps / Programmieren

Programmieren

Mit PHP auf ILIAS via SOAP zugreifen


ILIAS lässt sich eigentlich sehr schön via SOAP steuern. Leider habe ich im Web keine schöne Doku oder entsprechende Erklärungen zu den Funktionen gefunden. Darum hier mal zusammengefasst was ich für Erkenntnisse erarbeitet habe. Das Dokument soll nur als Info dienen, es ist keineswegs als vollständig zu sehen. Ich möchte nur beispielhaft zeigen was möglich ist.

Für den Zugriff via SOAP habe ich auf die Bibliothek nusoap gesetzt.

Ein simples Beispiel


Mit diesem Beispiel wird gezeigt wie vom Login weg ein User und ein Kurs via SOAP in ILIAS erzeugt werden kann und der User auch dem Kurs zugeteilt wird. Der Einfachheit halber lasse ich jetzt mal für die Erklärung das Abfangen von Fehlern (SOAP und Rückmeldungen von ILIAS) weg. Mit ILIAS 4.1.3. haben diese Funktionen für mich so gepasst.


login - Zuerst der Login


Ein Login ist natürlich nur Möglich wenn das Webservice in der ILIAS-Administration aktiviert wurde.

require_once("./nusoap/nusoap.php");
$wsdlUrl = "http://ihrserver.com/ilias-ordner/webservice/soap/server.php?wsdl"; //Die URL zum SOAP-Service
$iliasClient = new nusoap_client($wsdlUrl, true);

$login = array();
$login["client"]  = "ILIAS";  //Der Name des Ilias-Clients wie er bei der Installation angegeben wurde
$login["username"]  = "username"; //DerILIAS-Login-Name mit dem via ILIAS Inhalte angelegt werden dürfen
$login["password"] = "passwort"; //Das zugehörige Passwort

$session = $iliasClient->call("login", $login);

addUser - User anlegen

$userData = array();
$userData["login"] = "andi";  //Der eindeutige Login-Name
$userData["passwd"] = "passwort"; //Das Passwort zum Login 			
$userData["firstname"] = "Andreas";
$userData["lastname"] = "Bimminger";
$userData["title"] = "Mag.";
$userData["email"] = "your@email.com";
$userData["gender"] = "m";  //m oder f
$userData["language"] = "de";
$userData["active"] = 1; 	//Sonst ist der User inaktiv
$userData["import_id"] = 1234567; //Externe ID. 

$IdDerGlobalenRolle = 4;  //In meinem Fall die Rolle "User" - zuvor in der Administration an meine Bedürfnisse angepasst.

$iliasUser = $iliasClient->call("addUser", array($session, $userData, $IdDerGlobalenRolle));

addObject - Eine ILIAS-Kategorie anlegen

$bereichXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
$bereichXML.= "<!DOCTYPE Objects PUBLIC \"-//ILIAS//DTD ILIAS Repositoryobjects//EN\" \"http://ihrserver.com/ilias-ordner/xml/ilias_object_4_0.dtd\">";
$bereichXML.= "<Objects>";
$bereichXML.= "<Object type=\"cat\">";
$bereichXML.= "<Title>Name des Bereichs</Title>";
$bereichXML.= "<Description>Beschreibung zum Bereich</Description>";
$bereichXML.= "<Owner>123</Owner>";  //Die ID des ILIAS Users der für den Bereich verantwortlich ist
$bereichXML.= "</Object>";
$bereichXML.= "</Objects>";

$iliasTopKategorie = 45;  //Die ID der Kategorie unter der die Kategorie abgelegt werden soll.
$iliasKategorie = $iliasClient->call("addObject", array($session, $iliasTopKategorie, $bereichXML));

addRoleFromTemplate - Eine Rolle anlegen

$rolleXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
$rolleXML.= "<!DOCTYPE Roles PUBLIC \"-//ILIAS//DTD ILIAS Roles//EN\" \"http://ihrserver.com/ilias-ordner/xml/ilias_role_object_3_10.dtd\">";
$rolleXML.= "<Roles>";
$rolleXML.= "<Role role_type=\"Local\">";
$rolleXML.= "<Title>Rollentitel</Title>";
$rolleXML.= "<Description>Beschreibung zur Rolle</Description>";
$rolleXML.= "</Role>";
$rolleXML.= "</Roles>";

$iliasVorlagenRolle = 174; //Die ID zur Vorlagenrolle, hab ich in der Admin angelegt und vererbe ich in Bereiche runter. Damit werden die entsprechenden Rechte übernommen.
$iliasRolle = $iliasClient->call("addRoleFromTemplate", array($session, $iliasKategorie, $rolleXML, $iliasVorlagenRolle));

addUserRoleEntry - Den User zur Rolle hinzufügen

$iliasClient->call("addUserRoleEntry", array($session, $iliasUser, $iliasRolle));

addCourse - Einen Kurs anlegen

$kursXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
$kursXML.= "<!DOCTYPE Roles PUBLIC \"-//ILIAS//DTD ILIAS Roles//EN\" \"http://ihrserver.com/ilias-ordner/xml/ilias_course_3_10.dt\">";
$kursXML.= "<Course>";
$kursXML.= "<MetaData>";
$kursXML.= "<General Structure=\"Hierarchical\">";
$kursXML.= "<Identifier Catalog=\"ILIAS\"></Identifier>";
$kursXML.= "<Title>Kursname</Title>";
$kursXML.= "<Description>Kursbeschreibung</Description>";
$kursXML.= "</General>";
$kursXML.= "</MetaData>";
$kursXML.= "<Admin>123</Admin>";    //Die ID des ILIAS Users der für den Kurs verantwortlich ist
$kursXML.= "<Settings>";
$kursXML.= "<Availability><Unlimited></Unlimited></Availability>";
$kursXML.= "</Settings>";
$kursXML.= "</Course>";

$iliasKurs = $iliasClient->call("addCourse", array($session, $iliasKategorie, $kursXML));

assignCourseMember - Person zum Kurs anmelden

$typString = "Member"; //Oder der Tutor mit "Tutor"

$check = $iliasClient->call("assignCourseMember", array($session, $iliasKurs, $iliasUser, $typString));

Zum Schluss der Logout

$iliasClient->call("logout", array($session);





Weitere infos


Ich habe mir die Infos in erster Linie aus dem xml-Verzeichnis von ILIAS bzw. auch von der Webseite ilias.de / ILIASSoapWebservice. Für die IDs sollte man in der ILIAs-Administration einfach hin und wieder einen Blick auf den verlinkten Parameter "obj_id" werfen. Bei den meisten Funktion erhält man auch genau diese IDs als Ergebniswert zurück.


getError - SOAP-Fehler auslesen


Vernünftig ist es die obigen Code-Schnippsel als eigene Funktionen oder komplett als eine eigene Klasse umzusetzen und dabei dann auch auf Fehlermeldungen zu achten. Zum Beispiel auch auslesbar via:

echo $iliasClient->getError();