aboutsummaryrefslogtreecommitdiff
path: root/js/database.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/database.js')
-rw-r--r--js/database.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/js/database.js b/js/database.js
new file mode 100644
index 0000000..3297a11
--- /dev/null
+++ b/js/database.js
@@ -0,0 +1,48 @@
+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 };