From 7a62193da9c9bb8f66c1e26cd1cecfc7925d6de0 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Wed, 25 Jun 2025 06:59:23 +0000
Subject: [PATCH] GS-2169
---
lib/db.js | 27 ++++++++++++-
bin/anmelden.js | 25 ++++++++++++
lib/libIlias.js | 19 +++++++++
php/globus-ilias-rest/api.php | 24 +++++++++++
test/testImportIliasUser.js | 7 +++
5 files changed, 97 insertions(+), 5 deletions(-)
diff --git a/bin/anmelden.js b/bin/anmelden.js
new file mode 100644
index 0000000..b5e2688
--- /dev/null
+++ b/bin/anmelden.js
@@ -0,0 +1,25 @@
+const db = require("../lib/db")
+const yargs = require("yargs")
+const {anmelden} = require("../lib/libIlias")
+
+/////////////////////////////////////////////////////////////////////////
+
+const argv = yargs
+ .usage("$0 <usr_id> <course_id>", "User anmelden (ACHTUNG course_id muss obj_id sein!)",)
+ .strict()
+ .version(false)
+ .parse()
+
+/////////////////////////////////////////////////////////////////////////
+
+run(argv)
+ .then(console.log)
+ .catch(console.error)
+ .finally(process.exit)
+
+/////////////////////////////////////////////////////////////////////////
+
+async function run ({usr_id, course_id}) {
+ return await anmelden(usr_id, course_id)
+}
+
diff --git a/lib/db.js b/lib/db.js
index 028b5b0..48215e6 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -41,6 +41,8 @@
getKursTeilnehmerCount,
getUdf,
+
+ getMemberRoleForCourse,
}
/////////////////////////////////////////////////////////////////////////
@@ -355,9 +357,30 @@
/////// UDF ////////////////////////////////////////////////////////////////
-async function getUdf() {
+async function getUdf () {
const pool = await poolP
- const q = `SELECT field_id, field_name, field_type from ${database}.udf_definition;`
+ const q = `SELECT field_id, field_name, field_type
+ from ${database}.udf_definition;`
const [results] = await pool.query(q)
return results
}
+
+/////// ROLLEN ////////////////////////////////////////////////////////////////
+
+async function getMemberRoleForCourse (obj_id) {
+ const pool = await poolP
+ const q = `SELECT obj_id, title, description
+ from object_data od
+ WHERE type = "role" #AND title LIKE 'il_crs_member_157'
+ AND od.description LIKE 'Member%${obj_id}'
+ `
+ const [results] = await pool.query(q)
+ // darf nur einen Treffer ergeben
+ if (results.length) {
+ const {obj_id, title, description} = results[0]
+ return obj_id
+ }
+ else {
+ return null
+ }
+}
diff --git a/lib/libIlias.js b/lib/libIlias.js
index 88a2004..cf06e73 100644
--- a/lib/libIlias.js
+++ b/lib/libIlias.js
@@ -12,11 +12,13 @@
getUser,
importIliasUser,
-
+ anmelden,
deleteUser,
deleteAllUsers,
deleteTeilnahme,
+
+
}
/////////////////////////////////////////////////////////////////////////
@@ -143,3 +145,18 @@
}
}
+/////// Anmelden ////////////////////////////////////////////////////////////////
+
+async function anmelden (usr_id, course_id) {
+ // const role = await db.getMemberRoleForCourse(course_id) // nein es wird relative id gebraucht, siehe php
+ const sp = new URLSearchParams({
+ command: "anmelden",
+ usr_id,
+ course_id,
+ token: iliastoken,
+ })
+ let url2 = `${url}?${sp.toString()}`
+ console.log(url2)
+ const res = await fetch(url2, {method: "POST"})
+ return await res.json()
+}
diff --git a/php/globus-ilias-rest/api.php b/php/globus-ilias-rest/api.php
index d4ca300..aa6a546 100644
--- a/php/globus-ilias-rest/api.php
+++ b/php/globus-ilias-rest/api.php
@@ -68,6 +68,19 @@
$res["msg"] = "User Import OK";
break;
}
+ case "anmelden": // params: usr_id, course_id, role
+ if ($method == "POST") {
+ $usr_id = (int) $_GET["usr_id"];
+ $course_id = (int) $_GET["course_id"];
+ $role = (int) $_GET["role"];
+
+ $res2 = anmelden($usr_id, $course_id, $role);
+ $res["status"] = "ok";
+ $res["msg"] = "Anmelden OK";
+ $res["params"] = array("usr_id"=>$usr_id, "course_id"=>$course_id, "role"=> $role);
+ $res["res2"] = $res2;
+ break;
+ }
case "deleteUser":
if ($method == "DELETE") {
$res["msg"] = deleteUser($obj_id, $dry);
@@ -131,6 +144,15 @@
return $usr_id;
}
+// ACHTUNG course_id muss obj_id sein!
+// die Rolle muss aus dem Kurs gelesen werden
+function anmelden($usr_id, $course_id) {
+ $course = ilObjectFactory::getInstanceByObjId($course_id);
+ $membersObject = $course->getMembersObject();
+ $role = $membersObject::IL_CRS_MEMBER;
+ return $membersObject->add($usr_id, $role);
+}
+
function deleteUser($obj_id, $dry)
{
$usr = ilObjectFactory::getInstanceByObjId($obj_id);
@@ -146,7 +168,7 @@
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);
+// $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()}";
diff --git a/test/testImportIliasUser.js b/test/testImportIliasUser.js
index 7e226da..586ef06 100644
--- a/test/testImportIliasUser.js
+++ b/test/testImportIliasUser.js
@@ -34,8 +34,12 @@
},
}
+ beforeEach(async function () {
+
+ })
+
afterEach(async function () {
- // await deleteUser(lastUserId)
+ await deleteUser(lastUserId)
})
it("should import a new user to ILIAS", async function () {
@@ -60,6 +64,7 @@
})
+/////////////////////////////////////////////////////////////////////////
async function deleteUser (usr_id) {
const res2 = await libIlias.deleteUser(usr_id)
--
Gitblit v1.8.0