const DB_TEMPLATE_LIST_HEADER = ` `; const DB_TEMPLATE_LIST_ENTRY = ` `; const DB_TEMPLATE_LIST_FOOTER = `
Json
##timeadded## ##user## [[Json]]
`; class DB { constructor(id) { this.id = id; } async fetchEntries(params) { return loadFromDatabaseActivity(this.id, params) } async saveEntry(json) { return addEntryToDatabaseActivity(this.id, json); } } 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; const value = field.innerText.trim(); entry[key] = value; }); data.push(entry); }); return data; } 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 in formData.keys()) { if (k.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, }); } export { DB, loadFromDatabaseActivity, addEntryToDatabaseActivity };