1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
import { getCourseId, getSesskey } from "./utils-ENV.js";
export class Activity {
id: number;
title: string;
constructor(id: number, title: string) {
this.id = id;
this.title = title;
}
async update(text: string) {
const url = `https://lernplattform.bycs.de/course/modedit.php?update=${this.id}`;
const editRes = await fetch(url);
const editDoc = new DOMParser().parseFromString(await editRes.text(), "text/html");
const form = editDoc.querySelector<HTMLFormElement>('div[role="main"] > form');
const formData = new FormData(form!);
formData.set("page[text]", text);
formData.set("submitbutton", "Speichern und anzeigen");
return await fetch("/course/modedit.php", {
method: "POST",
body: formData,
});
}
}
export class Course {
id: Number;
title: string;
activities: Promise<Array<Activity>>;
constructor(id: number, title: string, courseDoc?: Document) {
this.id = id;
this.title = title;
this.activities = this.fetchActivities(courseDoc);
}
async fetchActivities(courseDoc?: Document) {
if (typeof courseDoc === "undefined") {
const courseUrl = `https://lernplattform.bycs.de/course/view.php?id=${this.id}`;
const courseRes = await fetch(courseUrl);
courseDoc = new DOMParser().parseFromString(await courseRes.text(), "text/html");
}
const activities = [];
for (const n of courseDoc.querySelectorAll(".activity-name-area")) {
const url = n.querySelector<HTMLAnchorElement>(".aalink")?.href!;
const match = /id=(\d+)/.exec(url);
const a = new Activity(Number(match![1]), n.textContent.trim());
activities.push(a);
}
return activities;
}
async getActivity(name: string) {
const activities = await this.activities;
for (const a of activities) {
if (a.title.includes(name)) {
return a;
}
}
return null;
}
}
export async function fetchCourse(courseId?: number) {
if (typeof courseId === "undefined") {
courseId = Number(getCourseId());
}
const courseUrl = `https://lernplattform.bycs.de/course/view.php?id=${courseId}`;
const courseRes = await fetch(courseUrl);
const courseDoc = new DOMParser().parseFromString(await courseRes.text(), "text/html");
return new Course(courseId, courseDoc.querySelector("h1")?.innerText!, courseDoc);
}
export async function fetchCourses(pattern: string) {
const params = {
index: 0,
methodname: "core_course_get_enrolled_courses_by_timeline_classification",
args: {
offset: 0,
limit: 0,
classification: "search",
sort: "fullname",
customfieldname: "schule",
customfieldvalue: "Gymnasium Messestadt Riem",
searchvalue: pattern,
requiredfields: [
"id",
"fullname",
"shortname",
"showcoursecategory",
"showshortname",
"visible",
"enddate",
],
},
};
const coursesRes = await fetch(
`/lib/ajax/service.php?sesskey=${getSesskey()}&info=core_course_get_enrolled_courses_by_timeline_classification`,
{
method: "POST",
body: JSON.stringify([params]),
},
);
const coursesJSON = JSON.parse(await coursesRes.text());
const courses = [];
for (const o of coursesJSON[0].data.courses) {
const c = new Course(o.id, o.fullname);
courses.push(c);
}
return courses;
}
|