REST Service for POPCORN - ILIAS
alex
2025-06-16 aa6770ff4a9442f666cc81a6e39f7b6f2a013024
GS-2160
2 files added
4 files modified
132 ■■■■■ changed files
.run/the function deleteTeilnahme.should delete the Teilnahme of a user.run.xml 21 ●●●●● patch | view | raw | blame | history
app.js 33 ●●●● patch | view | raw | blame | history
lib/libIlias.js 28 ●●●● patch | view | raw | blame | history
php/alex.php 22 ●●●●● patch | view | raw | blame | history
test/testDeleteTeilnahme.js 26 ●●●●● patch | view | raw | blame | history
vue/src/lib/api.js 2 ●●● patch | view | raw | blame | history
.run/the function deleteTeilnahme.should delete the Teilnahme of a user.run.xml
New file
@@ -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>
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})
      }
   })
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
   }
}
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;
    }
}
?>
test/testDeleteTeilnahme.js
New file
@@ -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")
   })
})
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()
}