/* Lib for interacting with customized ILIAS php */
|
const _ = require("lodash")
|
const settings = require("../settings")
|
const {getObjIdFromRefId} = require("./db")
|
const db = require("./db")
|
const {url, iliastoken} = settings.ilias
|
const search = require("./search")
|
|
/////////////////////////////////////////////////////////////////////////
|
|
module.exports = {
|
ping,
|
|
getUser,
|
|
importIliasUser,
|
|
createKurs,
|
|
anmelden,
|
abmelden,
|
|
deleteUser,
|
deleteAllUsers,
|
// deleteTeilnahme,
|
|
|
}
|
|
/////////////////////////////////////////////////////////////////////////
|
|
async function ping() {
|
const sp = new URLSearchParams({
|
command: "ping",
|
token: iliastoken,
|
})
|
let url2 = `${url}?${sp.toString()}`
|
const res = await fetch(url2, {method: "GET"})
|
return await res.json() //
|
}
|
|
/////// 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
|
* 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>}
|
*/
|
async function importIliasUser (user) {
|
const sp = new URLSearchParams({
|
command: "importUser",
|
token: iliastoken,
|
})
|
let url2 = `${url}?${sp.toString()}`
|
|
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 text = await res.text()
|
try {
|
return JSON.parse(text)
|
} catch (ex) {
|
console.error(ex.message)
|
console.log(text)
|
throw ex
|
}
|
}
|
|
/////// USER DELETE ////////////////////////////////////////////////////////////////
|
|
async function deleteUser (obj_id, dry = false) {
|
const sp = new URLSearchParams({
|
command: "deleteUser",
|
obj_id,
|
// dry: "1",
|
dry: dry ? "1" : "0",
|
token: iliastoken,
|
})
|
let url2 = `${url}?${sp.toString()}`
|
const res = await fetch(url2, {method: "DELETE"})
|
const data = await res.json()
|
// TODO update search index
|
return data //
|
}
|
|
async function deleteAllUsers () {
|
const {data: users} = await db.getUsers(0, 100000)
|
const res = {
|
command: "deleteAllUsers",
|
start: new Date(),
|
end: new Date(),
|
duration: null,
|
count: 0,
|
userIds: [],
|
}
|
for (const user of users) {
|
await deleteUser(user.usr_id)
|
res.count += 1
|
res.userIds.push(user.usr_id)
|
}
|
res.end = new Date()
|
res.duration = res.end - res.start
|
// TODO update search index
|
return res
|
}
|
|
// 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
|
// }
|
// }
|
|
/////// KURS ////////////////////////////////////////////////////////////////
|
|
async function createKurs(kurs) {
|
const sp = new URLSearchParams({
|
command: "createKurs",
|
token: iliastoken,
|
})
|
let url2 = `${url}?${sp.toString()}`
|
const res = await fetch(url2, {
|
method: "POST",
|
body: JSON.stringify(kurs),
|
})
|
return await res.json()
|
}
|
|
|
/////// 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: "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()
|
}
|
|
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()
|
}
|