aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-09-25 19:35:24 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-09-25 21:00:12 +0200
commitb3d770918fcb181e01a7cfeb1bc13a0ec55c22c5 (patch)
treed5dcc728c1f081485da291b513c9f6842d1afdda /src
parent576fe6814be88534f5fe4a8e4703b909b1800f5f (diff)
downloadbycs-sol-b3d770918fcb181e01a7cfeb1bc13a0ec55c22c5.tar.gz
bycs-sol-b3d770918fcb181e01a7cfeb1bc13a0ec55c22c5.zip
coaching: link to each student's cockpit
Diffstat (limited to 'src')
-rw-r--r--src/coaching.js12
-rw-r--r--src/utils-mock.js9
-rw-r--r--src/utils-prod.js14
3 files changed, 32 insertions, 3 deletions
diff --git a/src/coaching.js b/src/coaching.js
index 8b97784..2fd2429 100644
--- a/src/coaching.js
+++ b/src/coaching.js
@@ -1,10 +1,12 @@
import { fetchStudents } from "./student-ENV.ts";
-import { getName } from "./utils-ENV.js";
+import { getName, getActivityUrl } from "./utils-ENV.js";
let name;
async function loadGroup() {
+ const cockpitUrlPromise = getActivityUrl("Cockpit");
+
const students = await fetchStudents();
const graduationPromises = [];
document.getElementById("group-content").style.display = "block";
@@ -34,13 +36,17 @@ async function loadGroup() {
for (const li of listEntries) {
const student = li.student;
- if (!student.graduation.coaches.includes(name))
- continue;
+ if (!student.graduation.coaches.includes(name)) continue;
const n = document.createElement("span");
n.classList.add("group-member-name");
n.innerHTML = `${student.name}`;
li.appendChild(n);
+ n.addEventListener("click", async function () {
+ const cockpitUrl = new URL(await cockpitUrlPromise, window.location.origin);
+ cockpitUrl.searchParams.append("userToLoad", student.id);
+ window.location = cockpitUrl;
+ });
for (const col of ["green", "orange", "red"]) {
const s = document.createElement("span");
diff --git a/src/utils-mock.js b/src/utils-mock.js
index 7ee3779..5457700 100644
--- a/src/utils-mock.js
+++ b/src/utils-mock.js
@@ -38,6 +38,15 @@ export function getUserId() {
return fetchStudentsMock.filter((s) => s.name === name)[0].id;
}
+export function getActivityUrl(name) {
+ switch (name) {
+ case "Cockpit":
+ return "cockpit.html";
+ default:
+ return "";
+ }
+}
+
export function getCourseId() {
return "1337";
}
diff --git a/src/utils-prod.js b/src/utils-prod.js
index 7af3406..bc5868f 100644
--- a/src/utils-prod.js
+++ b/src/utils-prod.js
@@ -40,6 +40,20 @@ export function getCourseId() {
return String(M.cfg.courseId);
}
+export async function getActivityUrl(name) {
+ 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");
+ for (const n of courseDoc.querySelectorAll(".activity-name-area")) {
+ if (n.textContent.includes(name)) {
+ const match = /id=(\d+)/.exec(n.querySelector(".aalink").href);
+ return `/mod/page/view.php?id=${match[1]}`;
+ }
+ }
+
+ return "";
+}
+
export function getSesskey() {
// M is exported by Moodle
return String(M.cfg.sesskey);