REST Service for POPCORN - ILIAS
alex
2025-06-25 0b0a4bb1f5b6814525e82b5e684a6968e9e9120c
GS-2169
2 files added
3 files modified
196 ■■■■ changed files
app.js 4 ●●● patch | view | raw | blame | history
lib/libIlias.js 59 ●●●●● patch | view | raw | blame | history
php/globus-ilias-rest/api.php 51 ●●●●● patch | view | raw | blame | history
test/testAbmelden.js 41 ●●●●● patch | view | raw | blame | history
test/testAnmelden.js 41 ●●●●● patch | view | raw | blame | history
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) {
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()
}
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;
//     }
// }
?>
test/testAbmelden.js
New file
@@ -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")
   })
})
/////////////////////////////////////////////////////////////////////////
test/testAnmelden.js
New file
@@ -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")
   })
})
/////////////////////////////////////////////////////////////////////////