REST Service for POPCORN - ILIAS
alex
2025-07-11 e02fc7b5dd8008ef2a0f2746f324a64b6d9cb64a
lib/libIlias.js
@@ -1,4 +1,5 @@
/* Lib for interacting with customized ILIAS php */
const _ = require("lodash")
const settings = require("../settings")
const {getObjIdFromRefId} = require("./db")
const db = require("./db")
@@ -8,47 +9,55 @@
/////////////////////////////////////////////////////////////////////////
module.exports = {
   getUser,
   importIliasUser,
   anmelden,
   abmelden,
   deleteUser,
   deleteAllUsers,
   deleteTeilnahme,
   // deleteTeilnahme,
}
/////////////////////////////////////////////////////////////////////////
/////// GET USER ////////////////////////////////////////////////////////////////
async function getUser (usr_id) {
   const sp = new URLSearchParams({
      command: "getUser",
      usr_id,
      token: iliastoken,
   })
   let url2 = `${url}?${sp.toString()}`
   const res = await fetch(url2, {method: "GET"})
   return await res.json() //
}
/////// USER IMPORT ////////////////////////////////////////////////////////////////
/**
 * Format in POPCORN für SOAP; ausprobieren ob das hier auch funktioniert, v.a. die user-defined-fields
 * {
 *         Action: "Insert",
 *         login: formatSapNr(dbMa.sapNr),
 *         password: passGen(12),
 *         firstname: dbMa.vorname,
 *         lastname: dbMa.nachname,
 *         email: email,
 *         gender: mapSex[dbMa.geschlecht],
 *         // GS-1894: Azubis wird der Ausbildungsberuf auch als Abteilung angezeigt
 *         department: getDepartment(dbMa),
 *         institution: dbMa.markt.markt,
 *         roleIdGlobal: 4,
 *         userDefinedField: [
 *             {
 *                 name: "Markt",
 *                 value: dbMa.markt.markt,
 *             },
 *             {
 *                 name: "Marktnummer",
 *                 value: dbMa.markt.nr,
 *             },
 *             {
 *                 name: "Personalnummer",
 *                 value: formatSapNr(dbMa.sapNr),
 *             },
 *         ],
 *     }
 *   const user = {
 *       login: "123456789",
 *       passwd: "123456789",
 *       passwd_type: "plain",
 *       firstname: "Adolfo",
 *       lastname: "de la Cruz",
 *       email: "alex@gorillaeis.com",
 *       gender: "m",
 *       department: "Bananenpflücker",
 *       institution: "Globus Budapest",
 *       role: 4, // assigned global role id
 *       udf: {
 *          "Markt": "Markt UDF 2",
 *          "Marktnummer": "Marktnummer UDF 2",
 *          "Personalnummer": "Personal UDF 2",
 *       },
 *    }
 * @param user
 * @returns {Promise<any>}
 */
@@ -58,30 +67,24 @@
      token: iliastoken,
   })
   let url2 = `${url}?${sp.toString()}`
   console.log(url2)
   const udfDef = await db.getUdf()
   const udfMap = _.keyBy(udfDef, "field_name")
   user.udf = _.mapKeys(user.udf, function (value, key) {
      return udfMap[key].field_id
   })
   const res = await fetch(url2, {
      method: "POST",
      body: JSON.stringify(user)
   })
   // const data = await res.json()
   // return data
   const text = await res.text()
   try {
      const json = JSON.parse(text)
      return json
      return JSON.parse(text)
   } catch (ex) {
      console.error(ex.message)
      console.log(text)
      throw ex
   }
   try {
      return data
   } catch (ex) {
      const text = await res.text()
      console.error(text)
      return false
   }
}
@@ -123,24 +126,54 @@
   return res
}
async function deleteTeilnahme (ref_id, usr_id, dry = false) {
   const {obj_id} = await getObjIdFromRefId(ref_id)
// 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 / Abmelden ////////////////////////////////////////////////////////////////
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: "deleteTeilnahme",
      obj_id,
      command: "anmelden",
      usr_id,
      dry: dry ? "1" : "0",
      course_id,
      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
   }
   console.log(url2)
   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()
}