| | |
| | | return res.code(404).send({status: "error", msg: "not found"}) |
| | | } |
| | | }) |
| | | .get("/api/user/teilnahmen/:userId", async function (req, res) { |
| | | const {userid} = req.params |
| | | if(!userid || isNaN(Number(userid))) { |
| | | return res.code(500).send({status: "error", msg: "userid error"}) |
| | | } |
| | | const tn = await db.getUserTeilnahmen(userid) |
| | | if (tn) { |
| | | return res.send(tn) |
| | | } |
| | | else { |
| | | return res.code(404).send({status: "error", msg: "not found"}) |
| | | } |
| | | }) |
| | | |
| | | /////// ref_id / obj_id //////////////////////////////////////////////////////////////// |
| | | |
| | |
| | | getUserByUserId, |
| | | getUserDefinedFields, |
| | | getUserDefinedField, |
| | | getUserTeilnahmen, |
| | | |
| | | getObjIdFromRefId, |
| | | getRefIdFromObjId, |
| | |
| | | // getKursByRefId, |
| | | getKursTeilnehmer, |
| | | getKursTeilnehmerCount, |
| | | |
| | | } |
| | | |
| | | ///////////////////////////////////////////////////////////////////////// |
| | |
| | | const q = `SELECT or2.ref_id, or2.obj_id, od.title, od.description, od.type |
| | | FROM ${database}.object_reference or2 |
| | | INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id |
| | | WHERE od.type = 'crs' AND or2.deleted IS NULL |
| | | WHERE od.type = 'crs' |
| | | AND or2.deleted IS NULL |
| | | ` |
| | | const [results] = await pool.query(q) |
| | | return results |
| | |
| | | results = results.length? results[0] : undefined |
| | | return results |
| | | } |
| | | |
| | | async function getKursItems (ref_id) { |
| | | const pool = await poolP |
| | | // const q = `SELECT or2.ref_id, or2.obj_id, od.title, od.description, od.type |
| | |
| | | |
| | | async function getKursTeilnehmer (ref_id) { |
| | | const pool = await poolP |
| | | const q = `SELECT ci.parent_id, or2.ref_id, or2.obj_id, od.title, od.type, om.usr_id, ud.login, ud.firstname, ud.lastname, ud.active, om.passed, ulm.status |
| | | const q = `SELECT ci.parent_id, |
| | | or2.ref_id, |
| | | or2.obj_id, |
| | | od.title, |
| | | od.type, |
| | | om.usr_id, |
| | | ud.login, |
| | | ud.firstname, |
| | | ud.lastname, |
| | | ud.active, |
| | | om.passed, |
| | | ulm.status, |
| | | ulm.status_changed |
| | | 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 |
| | | INNER JOIN ${database}.obj_members om ON om.obj_id = or2.obj_id |
| | | INNER JOIN ${database}.obj_members om ON om.obj_id = or2.obj_id AND om.member = 1 |
| | | INNER JOIN ${database}.usr_data ud ON ud.usr_id = om.usr_id |
| | | LEFT JOIN ${database}.ut_lp_marks ulm ON ulm.obj_id = or2.obj_id AND ud.usr_id = ulm.usr_id |
| | | WHERE (or2.ref_id = ${ref_id} OR parent_id = ${ref_id}) |
| | |
| | | const pool = await poolP |
| | | const q = `SELECT COUNT(*) as count |
| | | FROM ${database}.crs_items ci |
| | | INNER JOIN ${database}.object_reference or2 ON or2.ref_id = ci.obj_id |
| | | 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 |
| | | INNER JOIN ${database}.obj_members om ON om.obj_id = or2.obj_id |
| | | INNER JOIN ${database}.obj_members om ON om.obj_id = or2.obj_id AND om.member = 1 |
| | | INNER JOIN ${database}.usr_data ud ON ud.usr_id = om.usr_id |
| | | WHERE (or2.ref_id = ${ref_id} OR parent_id = ${ref_id}) |
| | | LEFT JOIN ${database}.ut_lp_marks ulm ON ulm.obj_id = or2.obj_id AND ud.usr_id = ulm.usr_id |
| | | WHERE (or2.ref_id = ${ref_id} |
| | | OR parent_id = ${ref_id}) |
| | | ORDER BY usr_id |
| | | ` |
| | | let [results] = await pool.query(q) |
| | | results = results.length? results[0] : undefined |
| | | return { ref_id, count: results.count } |
| | | } |
| | | |
| | | 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 |
| | | ON ulm.usr_id = om.usr_id AND ulm.obj_id = om.obj_id |
| | | WHERE om.usr_id = ${usr_id} |
| | | AND om.member = 1 |
| | | ` |
| | | const [results] = await pool.query(q) |
| | | return results |
| | | } |
| | |
| | | "@fastify/static": "^8.2.0", |
| | | "@vueuse/core": "^13.3.0", |
| | | "@vueuse/router": "^13.3.0", |
| | | "dayjs": "^1.11.13", |
| | | "dotenv": "^16.5.0", |
| | | "fastify": "^5.3.3", |
| | | "lodash": "^4.17.21", |
| | |
| | | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/dayjs": { |
| | | "version": "1.11.13", |
| | | "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", |
| | | "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/debug": { |
| | | "version": "4.4.1", |
| | | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", |
| | |
| | | "@fastify/static": "^8.2.0", |
| | | "@vueuse/core": "^13.3.0", |
| | | "@vueuse/router": "^13.3.0", |
| | | "dayjs": "^1.11.13", |
| | | "dotenv": "^16.5.0", |
| | | "fastify": "^5.3.3", |
| | | "lodash": "^4.17.21", |
| | |
| | | const res = await fetch(`${apiBase}/user/userid/${userId}?token=${apiToken.value}`) |
| | | return await res.json() |
| | | } |
| | | |
| | | export async function getUserTeilnahmen (userId) { |
| | | const res = await fetch(`${apiBase}/user/teilnahmen/${userId}?token=${apiToken.value}`) |
| | | return await res.json() |
| | | } |
| | |
| | | import {onMounted, reactive, ref} from "vue" |
| | | import {getKurs, getKursItems, getKursTn, iliasBase, routerBase} from "../lib/api.js" |
| | | import LinkExtern from "../components/LinkExtern.vue" |
| | | import dayjs from "dayjs" |
| | | |
| | | const route = useRoute() |
| | | const kursId = route.params.kursId |
| | |
| | | KursTn |
| | | <small>({{ kursTn?.length }})</small> |
| | | </h2> |
| | | <div :style="{columns: kursTn?.length > 16 ? 2 : 1}"> |
| | | <div :style="{columns: kursTn?.length > 16 ? 1 : 1}"> |
| | | <table> |
| | | <thead> |
| | | <tr> |
| | |
| | | <th>lastname</th> |
| | | <th>passed</th> |
| | | <th>status</th> |
| | | <th>status_changed</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | |
| | | <td>{{ tn.lastname }}</td> |
| | | <td>{{ tn.passed }}</td> |
| | | <td>{{ tn.status }}</td> |
| | | <td>{{ dayjs(tn.status_changed).format("DD.MM.YYYY HH:mm:ss") }}</td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | |
| | | |
| | | import {useRoute} from 'vue-router' |
| | | import {onMounted, reactive, ref} from "vue" |
| | | import {getUser, iliasBase} from "../lib/api" |
| | | import {getUser, getUserTeilnahmen, iliasBase} from "../lib/api" |
| | | import LinkExtern from "../components/LinkExtern.vue" |
| | | |
| | | const route = useRoute() |
| | | const userId = route.params.userId |
| | | const user = ref(null) |
| | | const error = ref(null) |
| | | |
| | | const user = ref(null) |
| | | const teilnahmen = ref([]) |
| | | |
| | | onMounted(init) |
| | | |
| | |
| | | const data = await getUser(userId) |
| | | console.log(data) |
| | | user.value = data |
| | | |
| | | const tn = await getUserTeilnahmen(userId) |
| | | console.log(tn) |
| | | teilnahmen.value = tn |
| | | } |
| | | |
| | | </script> |