aboutsummaryrefslogtreecommitdiff
path: root/js/database.js
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-07-01 16:26:22 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-07-01 16:26:22 +0200
commite189096ad58993ac00f440ccf5dacf4b760b95a7 (patch)
tree97d33fda50da791b39e083e9ef74469ba1a8bed4 /js/database.js
parent6b010b8501bcc4b914b310136b536ffffc0c715b (diff)
downloadbycs-sol-e189096ad58993ac00f440ccf5dacf4b760b95a7.tar.gz
bycs-sol-e189096ad58993ac00f440ccf5dacf4b760b95a7.zip
db: find student databases and use them
Diffstat (limited to 'js/database.js')
-rw-r--r--js/database.js44
1 files changed, 43 insertions, 1 deletions
diff --git a/js/database.js b/js/database.js
index 673011f..627acbe 100644
--- a/js/database.js
+++ b/js/database.js
@@ -19,6 +19,28 @@ const DB_TEMPLATE_LIST_FOOTER = `
</table>
`;
+let studentDbs = null;
+
+async function populateStudentDbs() {
+ const courseUrl = `https://lernplattform.bycs.de/course/view.php?id=${getCourseId()}`;
+ const courseRes = await fetch(courseUrl);
+ const courseDoc = new DOMParser().parseFromString(await courseRes.text(), 'text/html');
+
+ studentDbs = new Map();
+ for (const link of courseDoc.querySelectorAll("div.activityname > a.aalink")) {
+ const match = link.textContent.match(/(\d+)(Shadow|Public|Submit)/);
+ const studentId = match[1];
+ const dbType = match[2];
+ const dbId = link.href.match(/[?&]id=(\d+)/)[1]
+
+ if (!studentDbs.has(studentId)) {
+ studentDbs.set(studentId, {});
+ }
+
+ studentDbs.get(studentId)[dbType.lower()] = new DB(dbId);
+ }
+}
+
class DB {
constructor(id) {
this.id = id;
@@ -31,6 +53,12 @@ class DB {
async saveEntry(json) {
return addEntryToDatabaseActivity(this.id, json);
}
+
+ static async getStudentDbs(student) {
+ if (!studentDbs)
+ await populateStudentDbs();
+ return studentDbs[student.id];
+ }
}
async function loadFromDatabaseActivity(id, params) {
@@ -58,6 +86,11 @@ async function loadFromDatabaseActivity(id, params) {
return data;
}
+async function loadFromStudentDatabase(student, type) {
+ const db = await DB.getStudentDbs(student)[type];
+ return await db.fetchEntries()
+}
+
async function addEntryToDatabaseActivity(id, json) {
const url = `/mod/data/edit.php?id=${id}`;
const editRes = await fetch(url);
@@ -82,4 +115,13 @@ async function addEntryToDatabaseActivity(id, json) {
});
}
-export { DB, loadFromDatabaseActivity, addEntryToDatabaseActivity };
+async function addEntryToStudentDatabase(student, type, json) {
+ const db = await DB.getStudentDbs(student)[type];
+ await db.saveEntry(json);
+}
+
+export {
+ DB,
+ loadFromDatabaseActivity, loadFromStudentDatabase,
+ addEntryToDatabaseActivity, addEntryToStudentDatabase,
+};