From b9e31706c33cd5ac10fa66a3a88cb54a5327220c Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Fri, 20 Jun 2025 15:40:04 +0000
Subject: [PATCH] GS-2156

---
 lib/db.js                     |   10 +++++
 lib/libIlias.js               |   23 ++++++-----
 app.js                        |    5 ++
 vue/src/components/Header.vue |    7 ++-
 bin/getUdf.js                 |   20 ++++++++++
 test/testImportIliasUser.js   |   15 +++++--
 6 files changed, 62 insertions(+), 18 deletions(-)

diff --git a/app.js b/app.js
index 3928423..3db466b 100644
--- a/app.js
+++ b/app.js
@@ -109,6 +109,11 @@
       }
    })
 
+   .post("/api/user", async function (req, res) {
+      const user = req.body
+      const res2 = await libIlias.importIliasUser(user) // TODO import or update if already available
+      return res.send(res2)
+   })
 
    .delete("/api/user", async function (req, res) { // DELETE ALL users
       const res2 = await libIlias.deleteAllUsers()
diff --git a/bin/getUdf.js b/bin/getUdf.js
new file mode 100644
index 0000000..b5613a9
--- /dev/null
+++ b/bin/getUdf.js
@@ -0,0 +1,20 @@
+const db = require("../lib/db")
+const yargs = require("yargs")
+
+/////////////////////////////////////////////////////////////////////////
+
+const argv = yargs
+   // .usage("$0 <ref_id>", "get user defined fields",)
+   .strict()
+   .parse()
+
+
+run(argv)
+   .then(console.log)
+   .catch(console.error)
+   .finally(process.exit)
+
+async function run({ref_id}) {
+   return await db.getUdf()
+}
+
diff --git a/lib/db.js b/lib/db.js
index 531e5cf..72d6bc0 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -40,6 +40,7 @@
    getKursTeilnehmer,
    getKursTeilnehmerCount,
 
+   getUdf,
 }
 
 /////////////////////////////////////////////////////////////////////////
@@ -350,3 +351,12 @@
    const [results] = await pool.query(q)
    return results
 }
+
+/////// UDF ////////////////////////////////////////////////////////////////
+
+async function getUdf() {
+   const pool = await poolP
+   const q = `SELECT field_id, field_name, field_type from ${database}.udf_definition;`
+   const [results] = await pool.query(q)
+   return results
+}
diff --git a/lib/libIlias.js b/lib/libIlias.js
index 5dd90ab..b261889 100644
--- a/lib/libIlias.js
+++ b/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")
@@ -59,29 +60,29 @@
    })
    let url2 = `${url}?${sp.toString()}`
    console.log(url2)
+
+   console.log(user)
+   const udfDef = await db.getUdf()
+   const udfMap = _.keyBy(udfDef, "field_name")
+   user.udf = _.mapKeys(user.udf, function (value, key) {
+      return udfMap[key].field_id
+   })
+   console.log(user)
+   // return "jo"
+
    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
    }
 }
 
diff --git a/test/testImportIliasUser.js b/test/testImportIliasUser.js
index 70bd7e1..c4c6092 100644
--- a/test/testImportIliasUser.js
+++ b/test/testImportIliasUser.js
@@ -21,11 +21,16 @@
       department: "Bananenpflücker",
       institution: "Globus Budapest",
       roleIdGlobal: 4,
-      udf_Markt: "Markt UDF",
-      udf: { // ACHTUNG: Die Nummer enspricht der id in der Tabelle udf_definition und kann je nach Reihenfolge anders sein!
-         1: "Markt UDF",
-         2: "Marktnummer UDF",
-         3: "Personal UDF",
+      // udf_Markt: "Markt UDF",
+      udf: {
+         // ACHTUNG: Die Nummer enspricht der id in der Tabelle udf_definition und kann je nach Reihenfolge anders sein!
+         // wird in importIliasUser() aufgelöst aus dem Namen
+         // 1: "Markt UDF",
+         // 2: "Marktnummer UDF",
+         // 3: "Personal UDF",
+         "Markt": "Markt UDF 2",
+         "Marktnummer": "Marktnummer UDF 2",
+         "Personalnummer": "Personal UDF 2",
       },
    }
 
diff --git a/vue/src/components/Header.vue b/vue/src/components/Header.vue
index 94784b0..455fe20 100644
--- a/vue/src/components/Header.vue
+++ b/vue/src/components/Header.vue
@@ -2,7 +2,10 @@
 
 import {reindex, apiTokenValid, deleteApiToken, routerBase} from "../lib/api"
 
-
+async function doReindex () {
+   await reindex()
+   location.reload()
+}
 
 </script>
 
@@ -15,7 +18,7 @@
       <RouterLink :to="`${routerBase}/ui/kurs`">Courses</RouterLink>
       <div style="flex-grow: 1" />
       <div>
-         <button type="button" title="reindex search index" @click="reindex()">♻</button>
+         <button type="button" title="reindex search index" @click="doReindex">♻</button>
       </div>
       <div v-if="apiTokenValid">
          <button type="button" @click="deleteApiToken()">logout</button>

--
Gitblit v1.8.0