async function loadFromDatabase(id, params) { let dbUrl = `/mod/data/view.php?d=${id}`; dbUrl += "&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; const value = field.innerText.trim(); entry[key] = value; }); data.push(entry); }); return data; } async function addEntryToDatabaseActivity(id, params) { 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 in params) { const formKey = key.replace("f_", "field_"); formData.set(formKey, params[key]); } formData.set("saveandview", "Speichern"); return await fetch("/mod/data/edit.php", { method: "POST", // Set the FormData instance as the request body body: formData, }); } export { loadFromDatabase, addEntryToDatabaseActivity };