From 0b0a4bb1f5b6814525e82b5e684a6968e9e9120c Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Wed, 25 Jun 2025 07:55:22 +0000
Subject: [PATCH] GS-2169
---
test/testAbmelden.js | 41 ++++++++++
lib/libIlias.js | 59 +++++++++-----
app.js | 4
php/globus-ilias-rest/api.php | 51 +++++++-----
test/testAnmelden.js | 41 ++++++++++
5 files changed, 152 insertions(+), 44 deletions(-)
diff --git a/app.js b/app.js
index 97cce6f..d4cc17b 100644
--- a/app.js
+++ b/app.js
@@ -210,7 +210,9 @@
const {refId, usrId} = req.params
if (!refId || !usrId) throw {status: "error", msg: "refId and usrId requried"}
try {
- let data = await libIlias.deleteTeilnahme(refId, usrId)
+ const {obj_id: course_id} = await db.getObjIdFromRefId(refId)
+ let data = await libIlias.abmelden(usrId, course_id)
+ // let data = await libIlias.deleteTeilnahme(refId, usrId)
if (!data) throw {statusCode: 404, message: "Teilnahme not found"}
return res.send(data)
} catch (ex) {
diff --git a/lib/libIlias.js b/lib/libIlias.js
index cf06e73..489d1da 100644
--- a/lib/libIlias.js
+++ b/lib/libIlias.js
@@ -12,11 +12,13 @@
getUser,
importIliasUser,
+
anmelden,
+ abmelden,
deleteUser,
deleteAllUsers,
- deleteTeilnahme,
+ // deleteTeilnahme,
}
@@ -124,28 +126,28 @@
return res
}
-async function deleteTeilnahme (ref_id, usr_id, dry = false) {
- const {obj_id} = await getObjIdFromRefId(ref_id)
- const sp = new URLSearchParams({
- command: "deleteTeilnahme",
- obj_id,
- usr_id,
- dry: dry ? "1" : "0",
- token: iliastoken,
- })
- let url2 = `${url}?${sp.toString()}`
- console.log("libIlias.deleteTeilnahme >>>", url2)
- let res
- try {
- res = await fetch(url2, {method: "DELETE"})
- return await res.json()
- } catch (ex) {
- console.error(ex)
- throw ex
- }
-}
+// async function deleteTeilnahme (ref_id, usr_id, dry = false) {
+// const {obj_id} = await getObjIdFromRefId(ref_id)
+// const sp = new URLSearchParams({
+// command: "deleteTeilnahme",
+// course_id: obj_id,
+// usr_id,
+// dry: dry ? "1" : "0",
+// token: iliastoken,
+// })
+// let url2 = `${url}?${sp.toString()}`
+// console.log("libIlias.deleteTeilnahme >>>", url2)
+// let res
+// try {
+// res = await fetch(url2, {method: "DELETE"})
+// return await res.json()
+// } catch (ex) {
+// console.error(ex)
+// throw ex
+// }
+// }
-/////// Anmelden ////////////////////////////////////////////////////////////////
+/////// Anmelden / Abmelden ////////////////////////////////////////////////////////////////
async function anmelden (usr_id, course_id) {
// const role = await db.getMemberRoleForCourse(course_id) // nein es wird relative id gebraucht, siehe php
@@ -160,3 +162,16 @@
const res = await fetch(url2, {method: "POST"})
return await res.json()
}
+
+async function abmelden (usr_id, course_id) {
+ const sp = new URLSearchParams({
+ command: "abmelden",
+ usr_id,
+ course_id,
+ token: iliastoken,
+ })
+ let url2 = `${url}?${sp.toString()}`
+ console.log(url2)
+ const res = await fetch(url2, {method: "DELETE"})
+ return await res.json()
+}
diff --git a/php/globus-ilias-rest/api.php b/php/globus-ilias-rest/api.php
index aa6a546..d2b1b45 100644
--- a/php/globus-ilias-rest/api.php
+++ b/php/globus-ilias-rest/api.php
@@ -87,11 +87,13 @@
$res["status"] = "ok";
break;
}
- case "deleteTeilnahme":
+// case "deleteTeilnahme":
+ case "abmelden":
if ($method == "DELETE") {
$usr_id = (int) $_GET["usr_id"];
- $res["usr_id"] = $usr_id;
- $res["msg"] = deleteTeilnahme($obj_id, $usr_id, $dry);
+ $res["usr_id"] = (int) $usr_id;
+ $course_id = (int) $_GET["course_id"];
+ $res["msg"] = abmelden($usr_id, $course_id);
$res["status"] = "ok";
break;
}
@@ -153,6 +155,12 @@
return $membersObject->add($usr_id, $role);
}
+function abmelden($usr_id, $course_id) {
+ $course = ilObjectFactory::getInstanceByObjId($course_id);
+ $membersObject = $course->getMembersObject();
+ return $membersObject->delete($usr_id);
+}
+
function deleteUser($obj_id, $dry)
{
$usr = ilObjectFactory::getInstanceByObjId($obj_id);
@@ -166,23 +174,24 @@
}
}
-function deleteTeilnahme($obj_id, $usr_id, $dry) {
- # beim Löschen durch den Kurs wird zwar die Teilnahme gelöscht, aber nicht die Rollenzugehörigkeit
-// $course = ilObjectFactory::getInstanceByObjId($obj_id);
-
- $parti = ilCourseParticipant::_getInstanceByObjId($obj_id, $usr_id); ## Achtung die usr_id hier ist Admin id??
- #return "parti.isParticipant() = {$parti->isParticipant()}";
-
- $msg = "deleted user({$usr_id}) teilnahme for course '{$course->getTitle()}' ({$obj_id})";
- if ($dry == "0") {
- #$course->_deleteUser($usr_id);
- #$course->deleteUser($usr_id); ## undefined
- $parti->delete($usr_id);
- return $msg;
- } else {
- $msg = "DRY:: ".$msg;
- return $msg;
- }
-}
+// ACHTUNG Funktion "abmelden" benutzen
+// function deleteTeilnahme($obj_id, $usr_id, $dry) {
+// # beim Löschen durch den Kurs wird zwar die Teilnahme gelöscht, aber nicht die Rollenzugehörigkeit
+// // $course = ilObjectFactory::getInstanceByObjId($obj_id);
+//
+// $parti = ilCourseParticipant::_getInstanceByObjId($obj_id, $usr_id); ## Achtung die usr_id hier ist Admin id??
+// #return "parti.isParticipant() = {$parti->isParticipant()}";
+//
+// $msg = "deleted user({$usr_id}) teilnahme for course '{$course->getTitle()}' ({$obj_id})";
+// if ($dry == "0") {
+// #$course->_deleteUser($usr_id);
+// #$course->deleteUser($usr_id); ## undefined
+// $parti->delete($usr_id);
+// return $msg;
+// } else {
+// $msg = "DRY:: ".$msg;
+// return $msg;
+// }
+// }
?>
diff --git a/test/testAbmelden.js b/test/testAbmelden.js
new file mode 100644
index 0000000..c1d56c8
--- /dev/null
+++ b/test/testAbmelden.js
@@ -0,0 +1,41 @@
+const expect = require("chai").expect
+
+const settings = require("../settings")
+const libIlias = require("../lib/libIlias")
+const db = require("../lib/db")
+const testData = require("./data")
+
+/////////////////////////////////////////////////////////////////////////
+
+describe("the function anmelden", function () {
+
+ const kurs = testData.kurs // TODO
+ const user = testData.user
+
+ let kursId = 31938
+ let userId = 31954
+
+ beforeEach(async function () {
+ // TODO add kurs
+ // const res = await libIlias.importIliasUser(user)
+ // userId = res.usr_id
+ })
+
+ afterEach(async function () {
+ // await libIlias.deleteUser(userId)
+ // TODO delete kurs
+ })
+
+ it("should import a new user to ILIAS", async function () {
+ console.log("++abmelden", userId, kursId)
+ const res = await libIlias.abmelden(userId, kursId)
+ console.dir(res, {depth: null})
+ expect(res).to.have.property("status").and.to.equal("ok")
+ expect(res.command).to.equal("abmelden")
+ expect(res.method).to.equal("DELETE")
+ })
+
+})
+
+/////////////////////////////////////////////////////////////////////////
+
diff --git a/test/testAnmelden.js b/test/testAnmelden.js
new file mode 100644
index 0000000..280a530
--- /dev/null
+++ b/test/testAnmelden.js
@@ -0,0 +1,41 @@
+const expect = require("chai").expect
+
+const settings = require("../settings")
+const libIlias = require("../lib/libIlias")
+const db = require("../lib/db")
+const testData = require("./data")
+
+/////////////////////////////////////////////////////////////////////////
+
+describe("the function anmelden", function () {
+
+ const kurs = testData.kurs // TODO
+ const user = testData.user
+
+ let kursId = 31938
+ let userId = 31954
+
+ beforeEach(async function () {
+ // TODO add kurs
+ // const res = await libIlias.importIliasUser(user)
+ // userId = res.usr_id
+ })
+
+ afterEach(async function () {
+ // await libIlias.deleteUser(userId)
+ // TODO delete kurs
+ })
+
+ it("should import a new user to ILIAS", async function () {
+ console.log("++anmelden", userId, kursId)
+ const res = await libIlias.anmelden(userId, kursId)
+ console.dir(res, {depth: null})
+ expect(res).to.have.property("status").and.to.equal("ok")
+ expect(res.command).to.equal("anmelden")
+ expect(res.method).to.equal("POST")
+ })
+
+})
+
+/////////////////////////////////////////////////////////////////////////
+
--
Gitblit v1.8.0