From 582df8885a3573a728394b473b826616f8969316 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Wed, 5 Aug 2026 11:51:51 +0200 Subject: convert a lot of js to typescript and use a single graduation DB --- src/database.js | 160 -------------------------------------------------------- 1 file changed, 160 deletions(-) delete mode 100644 src/database.js (limited to 'src/database.js') diff --git a/src/database.js b/src/database.js deleted file mode 100644 index e929896..0000000 --- a/src/database.js +++ /dev/null @@ -1,160 +0,0 @@ -import { getCourseId } from "./utils-ENV.js"; - -const DB_TEMPLATE_LIST_HEADER = ` - - - - - - - -`; -const DB_TEMPLATE_LIST_ENTRY = ` - - - - - -`; -const DB_TEMPLATE_LIST_FOOTER = ` - -
Json
##timeadded####user##[[Json]]
-`; - -let studentDbs = populateStudentDbs(); - -const ID_QUERY_PARAM_REGEX = /[?&]id=(\d+)/ - -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'); - - let dbs = new Map(); - for (const link of courseDoc.querySelectorAll("div.activityname a.aalink")) { - if (link.textContent.trim() === "Submit Datenbank") { - const dbId = link.href.match(ID_QUERY_PARAM_REGEX)[1] - dbs.set("submit", new DB(dbId)); - continue; - } - - const match = link.textContent.match(/(\d+)(Shadow|Public|Submit)/); - if (!match) continue; - const studentId = match[1]; - const dbType = match[2]; - const dbId = link.href.match(ID_QUERY_PARAM_REGEX)[1] - - if (!dbs.has(studentId)) { - dbs.set(studentId, {}); - } - - dbs.get(studentId)[dbType.toLowerCase()] = new DB(dbId); - } - - return dbs; -} - -async function getSubmitDb() { - const dbs = await studentDbs; - return dbs.get("submit"); -} - -class DB { - constructor(id) { - this.id = id; - } - - async fetchEntries(params) { - return loadFromDatabaseActivity(this.id, params) - } - - async saveEntry(json) { - return addEntryToDatabaseActivity(this.id, json); - } - - static async getStudentDbs(student) { - const dbs = await studentDbs; - return dbs.get(student.id); - } -} - -async function loadFromDatabaseActivity(id, params) { - let dbUrl = `${window.location.origin}/mod/data/view.php?id=${id}&mode=list&perpage=1000`; - // TODO(muhq): Why does this not include entries? - if (params) { - dbUrl += "&filter=1&advanced=1"; - for (const param in params) { - dbUrl += `&${param}=${encodeURIComponent(params[param])}` - } - } - - const dbRes = await fetch(encodeURI(dbUrl)); - const dbDoc = new DOMParser().parseFromString(await dbRes.text(), 'text/html'); - let data = []; - dbDoc.querySelectorAll('.db-row').forEach(row => { - let entry = {}; - row.querySelectorAll('.db-cell').forEach(field => { - const key = field.dataset.key; - let value; - // Moodle includes the full date in the title attribute of the included span - if (key === "date") { - value = field.querySelector("span").title; - } else { - value = field.innerText.trim(); - } - entry[key] = value; - }); - data.push(entry); - }); - return data; -} - -async function loadFromStudentDatabase(student, type) { - const dbs = await DB.getStudentDbs(student); - const db = dbs[type]; - return await db.fetchEntries() -} - -async function addEntryToDatabaseActivity(id, json) { - const url = `/mod/data/edit.php?id=${id}`; - const editRes = await fetch(url); - const editDoc = new DOMParser().parseFromString(await editRes.text(), 'text/html'); - const form = editDoc.querySelector('div[role="main"] > form'); - - const formData = new FormData(form); - - for (const key of formData.keys()) { - if (key.startsWith("field_")) { - formData.set(key, json); - // We found our json key - break; - } - } - formData.set("saveandview", "Speichern"); - - return await fetch("/mod/data/edit.php", { - method: "POST", - // Set the FormData instance as the request body - body: formData, - }); -} - -async function addEntryToStudentDatabase(student, type, json) { - let db; - // global submit database - if (type === "submit") { - db = await getSubmitDb(); - // individuell databases - } else { - const dbs = await DB.getStudentDbs(student); - db = dbs[type]; - } - await db.saveEntry(json); -} - -export { - DB, - getSubmitDb, - loadFromDatabaseActivity, loadFromStudentDatabase, - addEntryToDatabaseActivity, addEntryToStudentDatabase, -}; -- cgit v1.2.3