REST Service for POPCORN - ILIAS
alex
2025-06-19 7a2f304888c58f61cfd0a918ae9ea573a8d729ba
GS-2156
1 files added
3 files modified
137 ■■■■■ changed files
lib/libIlias.js 72 ●●●●● patch | view | raw | blame | history
php/globus-ilias-rest/api.php 16 ●●●●● patch | view | raw | blame | history
settings.default.json 2 ●●● patch | view | raw | blame | history
test/testImportIliasUser.js 47 ●●●●● patch | view | raw | blame | history
lib/libIlias.js
@@ -1,6 +1,8 @@
/* Lib for interacting with customized ILIAS php */
module.exports = {
   importIliasUser,
   deleteUser,
   deleteAllUsers,
   deleteTeilnahme,
@@ -14,6 +16,75 @@
const {url, iliastoken} = settings.ilias
/////////////////////////////////////////////////////////////////////////
/////// 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),
 *             },
 *         ],
 *     }
 * @param user
 * @returns {Promise<any>}
 */
async function importIliasUser (user) {
   const sp = new URLSearchParams({
      command: "importUser",
      token: iliastoken,
   })
   let url2 = `${url}?${sp.toString()}`
   console.log(url2)
   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
   } 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
   }
}
/////// USER DELETE ////////////////////////////////////////////////////////////////
async function deleteUser (obj_id, dry = false) {
   const sp = new URLSearchParams({
@@ -71,3 +142,4 @@
      throw ex
   }
}
php/globus-ilias-rest/api.php
@@ -50,6 +50,14 @@
                    $res["status"] = "ok";
                    break;
                }
            case "importUser":
                if ($method == "POST") {
                    $body = file_get_contents('php://input');
                    $data = json_decode($body, true);
                    $res["usr_id"] = importUser($data);
                    $res["status"] = "ok";
                    break;
                }
            case "deleteUser":
                if ($method == "DELETE") {
                    $res["msg"] = deleteUser($obj_id, $dry);
@@ -84,6 +92,14 @@
###############################
function importUser($data) {
    $user = new ilObjUser();
    $user->assignData($data);
    $usr_id = $user->create();
    $user->saveAsNew();
    return $usr_id;
}
function deleteUser($obj_id, $dry)
{
    $usr = ilObjectFactory::getInstanceByObjId($obj_id);
settings.default.json
@@ -14,7 +14,7 @@
   },
   "ilias": {
      "urlDoc": "Url of custom ILIAS PHP file",
      "url": "http://192.168.178.84:8060/alex.php",
      "url": "http://192.168.178.84:8060/globus-ilias-rest/api.php",
      "iliastoken": "jkhHKhui899HUKHBzGHtgoiedko2393490"
   }
}
test/testImportIliasUser.js
New file
@@ -0,0 +1,47 @@
const expect = require("chai").expect
const settings = require("../settings")
const libIlias = require("../lib/libIlias")
/////////////////////////////////////////////////////////////////////////
describe("the function importIliasUser", function () {
   const user = {
      // Action: "Insert",
      login: "affoReloaded",
      passwd: "test1234",
      passwd_type: "plain",
      firstname: "Adolfo",
      lastname: "de la Cruz",
      email: "alex@gorillaeis.com",
      gender: "m",
      department: "Bananenpflücker",
      institution: "Globus Budapest",
      roleIdGlobal: 4,
      userDefinedField: [
         {
            name: "Markt",
            value: "Markt UDF",
         },
         {
            name: "Marktnummer",
            value: "Marktnummer UDF",
         },
         {
            name: "Personalnummer",
            value: "Personalnummer UDF",
         },
      ],
   }
   it("should import a new user to ILIAS", async function () {
      const res = await libIlias.importIliasUser(user)
      console.dir(res, {depth:null})
      // expect(res.method).to.equal("DELETE")
      // expect(res.command).to.equal("deleteUser")
      // expect(res.obj_id).to.equal(obj_id)
      // expect(res.status).to.equal("ok")
   })
})