From aa6770ff4a9442f666cc81a6e39f7b6f2a013024 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Mon, 16 Jun 2025 11:59:20 +0000
Subject: [PATCH] GS-2160
---
lib/libIlias.js | 28 ++++++++-
app.js | 33 ++++++++--
.run/the function deleteTeilnahme.should delete the Teilnahme of a user.run.xml | 21 +++++++
test/testDeleteTeilnahme.js | 26 ++++++++
vue/src/lib/api.js | 2
php/alex.php | 22 +++++++
6 files changed, 119 insertions(+), 13 deletions(-)
diff --git a/.run/the function deleteTeilnahme.should delete the Teilnahme of a user.run.xml b/.run/the function deleteTeilnahme.should delete the Teilnahme of a user.run.xml
new file mode 100644
index 0000000..38f6c73
--- /dev/null
+++ b/.run/the function deleteTeilnahme.should delete the Teilnahme of a user.run.xml
@@ -0,0 +1,21 @@
+<component name="ProjectRunConfigurationManager">
+ <configuration default="false" name="the function deleteTeilnahme.should delete the Teilnahme of a user" type="mocha-javascript-test-runner" nameIsGenerated="true">
+ <node-interpreter>project</node-interpreter>
+ <node-options />
+ <mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
+ <working-directory>$PROJECT_DIR$</working-directory>
+ <pass-parent-env>true</pass-parent-env>
+ <envs>
+ <env name="NODE_ENV" value="dev" />
+ </envs>
+ <ui>bdd</ui>
+ <extra-mocha-options />
+ <test-kind>TEST</test-kind>
+ <test-file>$PROJECT_DIR$/test/testDeleteTeilnahme.js</test-file>
+ <test-names>
+ <name value="the function deleteTeilnahme" />
+ <name value="should delete the Teilnahme of a user" />
+ </test-names>
+ <method v="2" />
+ </configuration>
+</component>
\ No newline at end of file
diff --git a/app.js b/app.js
index 0faab46..3b298c8 100644
--- a/app.js
+++ b/app.js
@@ -166,7 +166,7 @@
return res.code(404).send({status: "error", msg: "not found"})
}
})
- .get("/api/kurs/teilnehmer/:refId", async function (req, res) {
+ .get("/api/kurs/:refId/teilnehmer", async function (req, res) {
const {refId} = req.params
let data = await db.getKursTeilnehmer(refId)
if (data) {
@@ -176,14 +176,31 @@
return res.code(404).send({status: "error", msg: "not found"})
}
})
- .get("/api/kurs/teilnehmer/:refId/count", async function (req, res) {
- const {refId} = req.params
- let data = await db.getKursTeilnehmerCount(refId)
- if (data) {
+ // .get("/api/kurs/:refId/teilnehmer/count", async function (req, res) {
+ // const {refId} = req.params
+ // let data = await db.getKursTeilnehmerCount(refId)
+ // if (data) {
+ // return res.send(data)
+ // }
+ // else {
+ // return res.code(404).send({status: "error", msg: "not found"})
+ // }
+ // })
+
+ .delete("/api/kurs/:refId/teilnehmer/:usrId", async function (req, res) {
+ const {refId, usrId} = req.params
+ if (!refId || !usrId) throw {status: "error", msg: "refId and usrId requried"}
+ try {
+ let data = await libIlias.deleteTeilnahme(refId, usrId)
+ if (!data) throw {statusCode: 404, message: "Teilnahme not found"}
return res.send(data)
- }
- else {
- return res.code(404).send({status: "error", msg: "not found"})
+ } catch (ex) {
+ console.error(ex)
+ const msg = ex.msg ?? ex.message ?? ex.toString()
+ if (ex.statusCode) {
+ return res.code(ex.statusCode).send({status: "error", msg})
+ }
+ return res.code(500).send({status: "error", msg})
}
})
diff --git a/lib/libIlias.js b/lib/libIlias.js
index 506aa7c..6d608f5 100644
--- a/lib/libIlias.js
+++ b/lib/libIlias.js
@@ -2,11 +2,13 @@
module.exports = {
deleteUser,
+ deleteTeilnahme,
}
/////////////////////////////////////////////////////////////////////////
const settings = require("../settings")
+const {getObjIdFromRefId} = require("./db")
const {url} = settings.ilias
/////////////////////////////////////////////////////////////////////////
@@ -15,12 +17,30 @@
const sp = new URLSearchParams({
command: "deleteUser",
obj_id,
- dry : dry ? "1" : "0",
+ dry: dry ? "1" : "0",
})
let url2 = `${url}?${sp.toString()}`
console.log("libIlias.deleteUser >>>", url2)
const res = await fetch(url2, {method: "DELETE"})
- // console.log(res)
- const data = await res.json()
- return data
+ return await res.json()
+}
+
+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",
+ })
+ 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
+ }
}
diff --git a/php/alex.php b/php/alex.php
index be5251b..82a2306 100644
--- a/php/alex.php
+++ b/php/alex.php
@@ -32,6 +32,14 @@
$res["status"] = "ok";
break;
}
+ case "deleteTeilnahme":
+ if ($method == "DELETE") {
+ $usr_id = (int) $_GET["usr_id"];
+ $res["usr_id"] = $usr_id;
+ $res["msg"] = deleteTeilnahme($obj_id, $usr_id, $dry);
+ $res["status"] = "ok";
+ break;
+ }
default:
http_response_code(500);
$res = array("status" => "error", "msg" => "unknown command or method");
@@ -64,4 +72,18 @@
}
}
+function deleteTeilnahme($obj_id, $usr_id, $dry) {
+ $course = ilObjectFactory::getInstanceByObjId($obj_id);
+ #$members = $course->getMembersObject(); # ilCourseParticipants # sackgasse
+ $msg = "deleted user({$usr_id}) teilnahme for course '{$course->getTitle()}' ({$obj_id})";
+ #return json_encode($members, JSON_PRETTY_PRINT);
+ if ($dry == "0") {
+ $course->_deleteUser($usr_id);
+ return $msg;
+ } else {
+ $msg = "DRY:: ".$msg;
+ return $msg;
+ }
+}
+
?>
diff --git a/test/testDeleteTeilnahme.js b/test/testDeleteTeilnahme.js
new file mode 100644
index 0000000..4a03647
--- /dev/null
+++ b/test/testDeleteTeilnahme.js
@@ -0,0 +1,26 @@
+const expect = require("chai").expect
+
+const settings = require("../settings")
+const libIlias = require("../lib/libIlias")
+const db = require("../lib/db")
+
+/////////////////////////////////////////////////////////////////////////
+
+describe("the function deleteTeilnahme", function () {
+
+ it("should delete the Teilnahme of a user", async function () {
+ const ref_id = 150
+ const {obj_id} = await db.getObjIdFromRefId(ref_id) // 9915
+ const usr_id = 1446
+
+
+ const res = await libIlias.deleteTeilnahme(ref_id, usr_id, false)
+ console.log(res)
+ expect(res.method).to.equal("DELETE")
+ expect(res.command).to.equal("deleteTeilnahme")
+ expect(res.obj_id).to.equal(obj_id)
+ expect(res.usr_id).to.equal(usr_id)
+ expect(res.status).to.equal("ok")
+ })
+
+})
diff --git a/vue/src/lib/api.js b/vue/src/lib/api.js
index 545620e..7ba18d1 100644
--- a/vue/src/lib/api.js
+++ b/vue/src/lib/api.js
@@ -36,7 +36,7 @@
}
export async function getKursTn (kursId) {
- let resKurs = await fetch(`${apiBase}/kurs/teilnehmer/${kursId}?token=${apiToken.value}`)
+ let resKurs = await fetch(`${apiBase}/kurs/${kursId}/teilnehmer?token=${apiToken.value}`)
return await resKurs.json()
}
--
Gitblit v1.8.0