REST Service for POPCORN - ILIAS
alex
2025-06-06 f42f57ec003e2d00b0be156eaa30dac68cb2862f
lib/db.js
@@ -33,6 +33,7 @@
   getKurse,
   getKurs,
   getKursItems,
   getKursItems2,
   // getKursByObjId,
   // getKursByRefId,
   getKursTeilnehmer,
@@ -78,30 +79,26 @@
async function getUserByLogin (login) {
   const sel = `usr_id, login, firstname, lastname, gender, email, institution, street, city, zipcode, country, department, active`
   // TODO user defined fields
   // TODO check args for SQL Injection
   const pool = await poolP
   const [results, fields] = await pool.query(
      `SELECT ${sel}
       FROM ${database}.usr_data AS ud
       WHERE login = '${login}'
         AND login REGEXP '^[0-9]+$'`
       WHERE login = '${login}'`
   )
   return joinUDF(results[0])
}
async function getUserByUserId (userId) {
   const sel = `usr_id, login, firstname, lastname, gender, email, institution, street, city, zipcode, country, department, active`
   // TODO user defined fields
   // TODO check args for SQL Injection
   const pool = await poolP
   const [results, fields] = await pool.query(
      `SELECT ${sel}
       FROM ${database}.usr_data AS ud
       WHERE usr_id = '${userId}'
         AND login REGEXP '^[0-9]+$'`
       WHERE usr_id = '${userId}'`
   )
   return joinUDF(results[0])
}
@@ -188,7 +185,7 @@
async function getKurs (ref_id) {
   const pool = await poolP
   const q = `SELECT or2.ref_id, or2.obj_id, od.title, od.description, od.type
   const q = `SELECT or2.ref_id, or2.obj_id, od.title, od.description, od.type, od.create_date
              FROM ${database}.object_reference or2
                       INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id
              WHERE or2.ref_id = '${ref_id}'
@@ -213,6 +210,33 @@
                 OR parent_id = ${ref_id}
                  AND or2.deleted is NULL
   `
   const [results] = await pool.query(q)
   return results
}
async function getKursItems2 (ref_id) {
   const pool = await poolP
   const q = `
WITH RECURSIVE tree (parent_id, obj_id, ref_id, title, type  ) AS (
    SELECT ci.parent_id, or2.obj_id , ci.obj_id as ref_id, od.title, od.type
    FROM ${database}.crs_items ci
    INNER JOIN ${database}.object_reference or2 ON or2.ref_id = ci.obj_id
    INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id
    WHERE  ci.obj_id = ${ref_id} -- Kurs ref_id
      AND or2.deleted is NULL
    UNION ALL
    SELECT child.parent_id, or2.obj_id , child.obj_id as ref_id, od.title, od.type
    FROM ${database}.crs_items child
    INNER JOIN ${database}.object_reference or2 ON or2.ref_id = child.obj_id
    INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id
    JOIN tree ON child.parent_id = tree.ref_id
    WHERE or2.deleted is NULL
)
SELECT * FROM tree
ORDER BY tree.ref_id
`
   const [results] = await pool.query(q)
   return results
}
@@ -266,15 +290,17 @@
async function getUserTeilnahmen (usr_id) {
   const pool = await poolP
   const q = `SELECT om.obj_id, om.usr_id, od.title, ulm.status, om.passed, ulm.status_changed
              FROM ilias_globusfachtest.obj_members om
                       INNER JOIN ilias_globusfachtest.usr_data ud ON ud.usr_id = om.usr_id
                       INNER JOIN ilias_globusfachtest.object_data od ON od.obj_id = om.obj_id
                       LEFT JOIN ilias_globusfachtest.ut_lp_marks ulm
   const q = `SELECT om.obj_id, or2.ref_id , om.usr_id, od.title , ulm.status, om.passed, ulm.status_changed
              FROM ${database}.obj_members om
                       INNER JOIN ${database}.object_reference or2 ON or2.obj_id = om.obj_id
                       INNER JOIN ${database}.usr_data ud ON ud.usr_id = om.usr_id
                       INNER JOIN ${database}.object_data od ON od.obj_id = om.obj_id
                       LEFT JOIN ${database}.ut_lp_marks ulm
                                 ON ulm.usr_id = om.usr_id AND ulm.obj_id = om.obj_id
              WHERE om.usr_id = ${usr_id}
                AND om.member = 1
   `
   console.log(q)
   const [results] = await pool.query(q)
   return results
}