@falkenslab/moodle-driver 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/areas/activities/build.d.ts +47 -10
- package/dist/areas/activities/build.js +157 -24
- package/dist/areas/activities/build.js.map +1 -1
- package/dist/areas/activities/conditions.d.ts +77 -0
- package/dist/areas/activities/conditions.js +216 -0
- package/dist/areas/activities/conditions.js.map +1 -0
- package/dist/areas/activities/content.d.ts +3 -0
- package/dist/areas/activities/content.js +1 -0
- package/dist/areas/activities/content.js.map +1 -1
- package/dist/areas/assignments/grader.d.ts +32 -0
- package/dist/areas/assignments/grader.js +66 -2
- package/dist/areas/assignments/grader.js.map +1 -1
- package/dist/areas/assignments/grading.d.ts +69 -6
- package/dist/areas/assignments/grading.js +173 -13
- package/dist/areas/assignments/grading.js.map +1 -1
- package/dist/areas/assignments/student.d.ts +14 -0
- package/dist/areas/assignments/student.js +43 -2
- package/dist/areas/assignments/student.js.map +1 -1
- package/dist/areas/backup/backup.d.ts +86 -0
- package/dist/areas/backup/backup.js +368 -0
- package/dist/areas/backup/backup.js.map +1 -0
- package/dist/areas/calendar/calendar.d.ts +27 -0
- package/dist/areas/calendar/calendar.js +115 -9
- package/dist/areas/calendar/calendar.js.map +1 -1
- package/dist/areas/completion/completion.d.ts +3 -0
- package/dist/areas/completion/completion.js.map +1 -1
- package/dist/areas/courses/list.d.ts +2 -0
- package/dist/areas/courses/list.js.map +1 -1
- package/dist/areas/courses/reset.d.ts +51 -0
- package/dist/areas/courses/reset.js +123 -0
- package/dist/areas/courses/reset.js.map +1 -0
- package/dist/areas/courses/state.d.ts +17 -0
- package/dist/areas/courses/state.js +37 -6
- package/dist/areas/courses/state.js.map +1 -1
- package/dist/areas/courses/structure.d.ts +14 -2
- package/dist/areas/courses/structure.js +11 -5
- package/dist/areas/courses/structure.js.map +1 -1
- package/dist/areas/forums/discussions.d.ts +8 -0
- package/dist/areas/forums/discussions.js +10 -0
- package/dist/areas/forums/discussions.js.map +1 -1
- package/dist/areas/forums/grading.d.ts +49 -0
- package/dist/areas/forums/grading.js +125 -0
- package/dist/areas/forums/grading.js.map +1 -0
- package/dist/areas/forums/posts.d.ts +37 -0
- package/dist/areas/forums/posts.js +141 -6
- package/dist/areas/forums/posts.js.map +1 -1
- package/dist/areas/grades/export.d.ts +38 -0
- package/dist/areas/grades/export.js +88 -0
- package/dist/areas/grades/export.js.map +1 -0
- package/dist/areas/grades/gradebook.d.ts +50 -0
- package/dist/areas/grades/gradebook.js +120 -0
- package/dist/areas/grades/gradebook.js.map +1 -1
- package/dist/areas/grades/singleview.d.ts +39 -0
- package/dist/areas/grades/singleview.js +186 -0
- package/dist/areas/grades/singleview.js.map +1 -0
- package/dist/areas/h5p/h5p.d.ts +2 -0
- package/dist/areas/h5p/h5p.js +12 -7
- package/dist/areas/h5p/h5p.js.map +1 -1
- package/dist/areas/lessons/lessons.d.ts +1 -0
- package/dist/areas/lessons/lessons.js.map +1 -1
- package/dist/areas/messages/messages.d.ts +32 -0
- package/dist/areas/messages/messages.js +44 -2
- package/dist/areas/messages/messages.js.map +1 -1
- package/dist/areas/participants/enrolments.d.ts +60 -0
- package/dist/areas/participants/enrolments.js +218 -0
- package/dist/areas/participants/enrolments.js.map +1 -0
- package/dist/areas/participants/groups.d.ts +75 -0
- package/dist/areas/participants/groups.js +201 -0
- package/dist/areas/participants/groups.js.map +1 -0
- package/dist/areas/participants/methods.d.ts +56 -0
- package/dist/areas/participants/methods.js +154 -0
- package/dist/areas/participants/methods.js.map +1 -0
- package/dist/areas/participants/participants.d.ts +11 -0
- package/dist/areas/participants/participants.js +24 -19
- package/dist/areas/participants/participants.js.map +1 -1
- package/dist/areas/questions/banks.d.ts +36 -1
- package/dist/areas/questions/banks.js +140 -17
- package/dist/areas/questions/banks.js.map +1 -1
- package/dist/areas/quizzes/attempts.d.ts +2 -0
- package/dist/areas/quizzes/attempts.js +9 -0
- package/dist/areas/quizzes/attempts.js.map +1 -1
- package/dist/areas/quizzes/grading.d.ts +50 -0
- package/dist/areas/quizzes/grading.js +131 -0
- package/dist/areas/quizzes/grading.js.map +1 -0
- package/dist/areas/quizzes/results.d.ts +3 -0
- package/dist/areas/quizzes/results.js +2 -1
- package/dist/areas/quizzes/results.js.map +1 -1
- package/dist/areas/quizzes/structure.d.ts +65 -9
- package/dist/areas/quizzes/structure.js +222 -23
- package/dist/areas/quizzes/structure.js.map +1 -1
- package/dist/areas/ratings/ratings.d.ts +26 -0
- package/dist/areas/ratings/ratings.js +108 -0
- package/dist/areas/ratings/ratings.js.map +1 -0
- package/dist/areas/reports/dates.d.ts +18 -0
- package/dist/areas/reports/dates.js +134 -0
- package/dist/areas/reports/dates.js.map +1 -0
- package/dist/areas/reports/reports.d.ts +143 -0
- package/dist/areas/reports/reports.js +267 -0
- package/dist/areas/reports/reports.js.map +1 -0
- package/dist/areas/scorm/scorm.d.ts +1 -0
- package/dist/areas/scorm/scorm.js.map +1 -1
- package/dist/areas/site/users.d.ts +7 -1
- package/dist/areas/site/users.js +9 -2
- package/dist/areas/site/users.js.map +1 -1
- package/dist/areas/surveys/choice.d.ts +2 -0
- package/dist/areas/surveys/choice.js +6 -3
- package/dist/areas/surveys/choice.js.map +1 -1
- package/dist/areas/surveys/surveys.d.ts +3 -0
- package/dist/areas/surveys/surveys.js +1 -0
- package/dist/areas/surveys/surveys.js.map +1 -1
- package/dist/areas/workshops/workshops.d.ts +133 -0
- package/dist/areas/workshops/workshops.js +335 -0
- package/dist/areas/workshops/workshops.js.map +1 -0
- package/dist/browser/background.d.ts +43 -0
- package/dist/browser/background.js +164 -0
- package/dist/browser/background.js.map +1 -0
- package/dist/browser/host.d.ts +30 -0
- package/dist/browser/host.js +373 -0
- package/dist/browser/host.js.map +1 -0
- package/dist/browser/manager.d.ts +9 -0
- package/dist/browser/manager.js +8 -0
- package/dist/browser/manager.js.map +1 -1
- package/dist/categories.d.ts +1 -0
- package/dist/categories.js +67 -0
- package/dist/categories.js.map +1 -1
- package/dist/cli/args.d.ts +8 -0
- package/dist/cli/args.js +49 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/background.d.ts +23 -0
- package/dist/cli/background.js +128 -0
- package/dist/cli/background.js.map +1 -0
- package/dist/cli/command.d.ts +66 -0
- package/dist/cli/command.js +328 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands.generated.js +2635 -577
- package/dist/cli/commands.generated.js.map +1 -1
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.js +2 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/main.js +30 -10
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/run.d.ts +3 -14
- package/dist/cli/run.js +9 -185
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/shell.d.ts +9 -0
- package/dist/cli/shell.js +233 -0
- package/dist/cli/shell.js.map +1 -0
- package/dist/client.d.ts +71 -8
- package/dist/client.js +75 -8
- package/dist/client.js.map +1 -1
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/files.d.ts +5 -0
- package/dist/core/files.js +7 -3
- package/dist/core/files.js.map +1 -1
- package/dist/core/forms.d.ts +33 -3
- package/dist/core/forms.js +105 -8
- package/dist/core/forms.js.map +1 -1
- package/dist/core/http.d.ts +7 -0
- package/dist/core/http.js +28 -7
- package/dist/core/http.js.map +1 -1
- package/dist/core/login.d.ts +3 -0
- package/dist/core/login.js +2 -0
- package/dist/core/login.js.map +1 -1
- package/dist/core/session.d.ts +12 -1
- package/dist/core/session.js +12 -1
- package/dist/core/session.js.map +1 -1
- package/dist/index.d.ts +35 -11
- package/dist/index.js +32 -12
- package/dist/index.js.map +1 -1
- package/dist/internals.d.ts +9 -1
- package/dist/internals.js +9 -4
- package/dist/internals.js.map +1 -1
- package/dist/options.d.ts +2 -0
- package/dist/options.js.map +1 -1
- package/dist/testing/fakeMoodle.d.ts +9 -2
- package/dist/testing/fakeMoodle.js +5 -3
- package/dist/testing/fakeMoodle.js.map +1 -1
- package/dist/testing/index.d.ts +7 -0
- package/dist/testing/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { COMPLETION_STATES } from "../courses/structure.js";
|
|
2
|
+
import { dateSelectorDate, dateSelectorValues } from "../../core/forms.js";
|
|
3
|
+
import { inPage } from "../../core/inPage.js";
|
|
4
|
+
import { moodleErrorMessage, openSitePage } from "../../core/session.js";
|
|
5
|
+
import { MoodleError } from "../../core/errors.js";
|
|
6
|
+
function time(value, what) {
|
|
7
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
8
|
+
if (Number.isNaN(date.getTime()))
|
|
9
|
+
throw new MoodleError(`${what} isn't a date: "${String(value)}". Give it as an ISO date (2026-11-30T18:00:00Z).`, "invalid-input");
|
|
10
|
+
return Math.floor(date.getTime() / 1000);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Moodle's availability JSON for `restrictions`. A grade condition takes the activity's grade item
|
|
14
|
+
* from `gradeItems` (activity id to grade item id, from the gradebook setup).
|
|
15
|
+
*/
|
|
16
|
+
export function restrictionsJson(restrictions, gradeItems = new Map()) {
|
|
17
|
+
const nodes = restrictions.conditions.map((condition) => {
|
|
18
|
+
switch (condition.type) {
|
|
19
|
+
case "date": {
|
|
20
|
+
const dates = [];
|
|
21
|
+
if (condition.from !== undefined)
|
|
22
|
+
dates.push({ type: "date", d: ">=", t: time(condition.from, "A date condition's from") });
|
|
23
|
+
if (condition.until !== undefined)
|
|
24
|
+
dates.push({ type: "date", d: "<", t: time(condition.until, "A date condition's until") });
|
|
25
|
+
if (dates.length === 0)
|
|
26
|
+
throw new MoodleError("A date condition needs from, until or both.", "invalid-input");
|
|
27
|
+
// A range is one condition: both dates, whatever the match of the others.
|
|
28
|
+
return dates.length === 1 ? dates[0] : { op: "&", c: dates };
|
|
29
|
+
}
|
|
30
|
+
case "grade": {
|
|
31
|
+
const id = gradeItems.get(condition.activityId);
|
|
32
|
+
if (id === undefined)
|
|
33
|
+
throw new MoodleError(`Activity ${condition.activityId} has no grade item in the course's gradebook, so no grade condition can name it.`, "not-found");
|
|
34
|
+
return { type: "grade", id, ...(condition.min !== undefined ? { min: condition.min } : {}), ...(condition.max !== undefined ? { max: condition.max } : {}) };
|
|
35
|
+
}
|
|
36
|
+
case "completion": {
|
|
37
|
+
const e = COMPLETION_STATES.indexOf(condition.state);
|
|
38
|
+
if (e < 0)
|
|
39
|
+
throw new MoodleError(`A completion condition's state is one of ${COMPLETION_STATES.join(", ")}, not "${String(condition.state)}".`, "invalid-input");
|
|
40
|
+
return { type: "completion", cm: condition.activityId, e };
|
|
41
|
+
}
|
|
42
|
+
case "group":
|
|
43
|
+
return { type: "group", id: condition.groupId };
|
|
44
|
+
case "other":
|
|
45
|
+
return condition.json;
|
|
46
|
+
default:
|
|
47
|
+
throw new MoodleError(`Unknown restriction type "${String(condition.type)}": date, grade, completion or group.`, "invalid-input");
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const shown = !restrictions.hidden;
|
|
51
|
+
// As Moodle's own form writes it: one eye per condition for "all", one for the whole set for "any".
|
|
52
|
+
const tree = restrictions.match === "any" ? { op: "|", c: nodes, show: shown } : { op: "&", c: nodes, showc: nodes.map(() => shown) };
|
|
53
|
+
return JSON.stringify(tree);
|
|
54
|
+
}
|
|
55
|
+
const iso = (seconds) => new Date(Number(seconds) * 1000).toISOString();
|
|
56
|
+
/** The plain terms of one node of Moodle's tree; a grade item maps back to its activity through `gradeActivities`. */
|
|
57
|
+
function restrictionOf(node, gradeActivities) {
|
|
58
|
+
if (typeof node.op === "string") {
|
|
59
|
+
// A date range, as restrictionsJson writes it.
|
|
60
|
+
const tree = node;
|
|
61
|
+
const [a, b] = tree.c;
|
|
62
|
+
if (tree.op === "&" && tree.c.length === 2 && a?.type === "date" && b?.type === "date" && a.d === ">=" && b.d === "<")
|
|
63
|
+
return { type: "date", from: iso(a.t), until: iso(b.t) };
|
|
64
|
+
return { type: "other", json: node };
|
|
65
|
+
}
|
|
66
|
+
const leaf = node;
|
|
67
|
+
switch (leaf.type) {
|
|
68
|
+
case "date":
|
|
69
|
+
return leaf.d === ">=" ? { type: "date", from: iso(leaf.t) } : { type: "date", until: iso(leaf.t) };
|
|
70
|
+
case "grade": {
|
|
71
|
+
const activityId = gradeActivities.get(Number(leaf.id));
|
|
72
|
+
if (activityId === undefined)
|
|
73
|
+
return { type: "other", json: leaf };
|
|
74
|
+
return { type: "grade", activityId, ...(typeof leaf.min === "number" ? { min: leaf.min } : {}), ...(typeof leaf.max === "number" ? { max: leaf.max } : {}) };
|
|
75
|
+
}
|
|
76
|
+
case "completion": {
|
|
77
|
+
const state = COMPLETION_STATES[Number(leaf.e)];
|
|
78
|
+
return state ? { type: "completion", activityId: Number(leaf.cm), state } : { type: "other", json: leaf };
|
|
79
|
+
}
|
|
80
|
+
case "group":
|
|
81
|
+
return leaf.id !== undefined ? { type: "group", groupId: Number(leaf.id) } : { type: "other", json: leaf };
|
|
82
|
+
default:
|
|
83
|
+
return { type: "other", json: leaf };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Whether Moodle's availability JSON has a grade condition (reading it back needs the gradebook). */
|
|
87
|
+
export function hasGradeCondition(json) {
|
|
88
|
+
return /"type"\s*:\s*"grade"/.test(json);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The restrictions in Moodle's availability JSON, in plain terms; undefined when there are none. A
|
|
92
|
+
* negated set ("must not") has no plain terms: it comes whole as one `other` condition.
|
|
93
|
+
*/
|
|
94
|
+
export function parseRestrictions(json, gradeActivities = new Map()) {
|
|
95
|
+
if (!json || json.trim() === "")
|
|
96
|
+
return undefined;
|
|
97
|
+
let tree;
|
|
98
|
+
try {
|
|
99
|
+
tree = JSON.parse(json);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
if (!tree.c || tree.c.length === 0)
|
|
105
|
+
return undefined;
|
|
106
|
+
// Hidden when its one eye is closed, or every condition's is.
|
|
107
|
+
const hidden = tree.showc ? tree.showc.length > 0 && tree.showc.every((shown) => !shown) : tree.show === false;
|
|
108
|
+
if (tree.op === "!&" || tree.op === "!|")
|
|
109
|
+
return { conditions: [{ type: "other", json: tree }], hidden };
|
|
110
|
+
return { conditions: tree.c.map((node) => restrictionOf(node, gradeActivities)), match: tree.op === "|" ? "any" : "all", hidden };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The course's grade items by the activity they belong to, from the gradebook setup page (each item's
|
|
114
|
+
* row links to its activity): Moodle's grade condition names a grade item, not an activity. An
|
|
115
|
+
* activity with several items (a forum's whole-forum grade and ratings) maps to the first.
|
|
116
|
+
*/
|
|
117
|
+
export async function gradeItemsByActivity(context, siteUrl, courseId) {
|
|
118
|
+
const page = await openSitePage(context, siteUrl, `grade/edit/tree/index.php?id=${courseId}`);
|
|
119
|
+
try {
|
|
120
|
+
if ((await page.locator("body#page-grade-edit-tree-index #grade_edit_tree_table").count()) === 0) {
|
|
121
|
+
throw new MoodleError(`Course ${courseId}'s gradebook setup can't be read, and a grade condition needs it: ${(await moodleErrorMessage(page)) ?? "you aren't allowed to manage its grades"}`, "not-available");
|
|
122
|
+
}
|
|
123
|
+
const pairs = await page.evaluate(() => {
|
|
124
|
+
const doc = globalThis.document;
|
|
125
|
+
const found = [];
|
|
126
|
+
for (const row of Array.from(doc.querySelectorAll("#grade_edit_tree_table tr[data-itemid]"))) {
|
|
127
|
+
const link = Array.from(row.querySelectorAll("a[href]"))
|
|
128
|
+
.map((a) => /\/mod\/[a-z0-9_]+\/view\.php\?(?:.*&)?id=(\d+)/.exec(a.getAttribute("href") ?? "")?.[1])
|
|
129
|
+
.find((id) => id !== undefined);
|
|
130
|
+
if (link)
|
|
131
|
+
found.push([Number(link), Number(row.getAttribute("data-itemid"))]);
|
|
132
|
+
}
|
|
133
|
+
return found;
|
|
134
|
+
});
|
|
135
|
+
const items = new Map();
|
|
136
|
+
for (const [activityId, itemId] of pairs)
|
|
137
|
+
if (!items.has(activityId))
|
|
138
|
+
items.set(activityId, itemId);
|
|
139
|
+
return items;
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
await page.close().catch(() => undefined);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** The completion conditions in plain terms, by the form field each stands for. */
|
|
146
|
+
const COMPLETION_FIELDS = { view: "completionview", grade: "completionusegrade", passGrade: "completionpassgrade", submit: "completionsubmit" };
|
|
147
|
+
/** Which of `names` the form in `page` has, as fields a person can see (hidden twins aside). */
|
|
148
|
+
function fieldsPresent(page, names) {
|
|
149
|
+
return page.evaluate((names) => {
|
|
150
|
+
const doc = globalThis.document;
|
|
151
|
+
return names.filter((name) => Array.from(doc.querySelectorAll(`form.mform [name="${name}"]`)).some((field) => field.type !== "hidden"));
|
|
152
|
+
}, names);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The form values for `completion` in an activity's form, in the order to set them (each enables the
|
|
156
|
+
* next): conditions not given are turned off. Refuses a condition the module's form doesn't have.
|
|
157
|
+
*/
|
|
158
|
+
export async function completionValues(page, completion) {
|
|
159
|
+
const present = new Set(await fieldsPresent(page, ["completion", ...Object.values(COMPLETION_FIELDS), "completionexpected[enabled]"]));
|
|
160
|
+
const module = (await page.evaluate(() => globalThis.document.querySelector('form.mform [name="modulename"]')?.value)) ?? "activity";
|
|
161
|
+
if (!present.has("completion"))
|
|
162
|
+
throw new MoodleError(`This ${module}'s form has no completion settings: completion tracking is off in the course or on the site.`, "not-available");
|
|
163
|
+
if (completion === "none")
|
|
164
|
+
return { completion: 0 };
|
|
165
|
+
if (completion === "manual")
|
|
166
|
+
return { completion: 1 };
|
|
167
|
+
const wanted = { ...completion, grade: completion.grade || completion.passGrade };
|
|
168
|
+
const missing = Object.keys(COMPLETION_FIELDS).filter((key) => wanted[key] && !present.has(COMPLETION_FIELDS[key]));
|
|
169
|
+
if (missing.length > 0)
|
|
170
|
+
throw new MoodleError(`This ${module} has no completion condition ${missing.join(", ")}: its form has no such field.`, "invalid-input");
|
|
171
|
+
const values = { completion: 2 };
|
|
172
|
+
if (present.has(COMPLETION_FIELDS.view))
|
|
173
|
+
values[COMPLETION_FIELDS.view] = Boolean(wanted.view);
|
|
174
|
+
if (present.has(COMPLETION_FIELDS.submit))
|
|
175
|
+
values[COMPLETION_FIELDS.submit] = Boolean(wanted.submit);
|
|
176
|
+
if (present.has(COMPLETION_FIELDS.grade))
|
|
177
|
+
values[COMPLETION_FIELDS.grade] = Boolean(wanted.grade);
|
|
178
|
+
// A radio, enabled by the grade condition.
|
|
179
|
+
if (wanted.grade && present.has(COMPLETION_FIELDS.passGrade))
|
|
180
|
+
values[COMPLETION_FIELDS.passGrade] = wanted.passGrade ? 1 : 0;
|
|
181
|
+
if (present.has("completionexpected[enabled]")) {
|
|
182
|
+
values["completionexpected[enabled]"] = wanted.expected !== undefined;
|
|
183
|
+
if (wanted.expected !== undefined) {
|
|
184
|
+
const expected = new Date(time(wanted.expected, "completion.expected") * 1000);
|
|
185
|
+
Object.assign(values, await dateSelectorValues(page, "completionexpected", expected));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return values;
|
|
189
|
+
}
|
|
190
|
+
/** An activity's completion in plain terms, from its form; undefined when the form has no completion settings. */
|
|
191
|
+
export async function readCompletion(page) {
|
|
192
|
+
const read = await inPage(page, (fields) => {
|
|
193
|
+
const doc = globalThis.document;
|
|
194
|
+
const radio = doc.querySelector('form.mform input[type="radio"][name="completion"]:checked');
|
|
195
|
+
if (!radio)
|
|
196
|
+
return undefined;
|
|
197
|
+
const on = (name) => doc.querySelector(`form.mform input[type="checkbox"][name="${name}"]`)?.checked ?? false;
|
|
198
|
+
const pass = doc.querySelector(`form.mform input[type="radio"][name="${fields.passGrade}"]:checked`)?.value === "1";
|
|
199
|
+
return { mode: radio.value, view: on(fields.view), grade: on(fields.grade), passGrade: pass, submit: on(fields.submit) };
|
|
200
|
+
}, COMPLETION_FIELDS);
|
|
201
|
+
if (!read)
|
|
202
|
+
return undefined;
|
|
203
|
+
if (read.mode === "0")
|
|
204
|
+
return "none";
|
|
205
|
+
if (read.mode === "1")
|
|
206
|
+
return "manual";
|
|
207
|
+
const expected = await dateSelectorDate(page, "completionexpected");
|
|
208
|
+
return {
|
|
209
|
+
...(read.view ? { view: true } : {}),
|
|
210
|
+
...(read.grade ? { grade: true } : {}),
|
|
211
|
+
...(read.grade && read.passGrade ? { passGrade: true } : {}),
|
|
212
|
+
...(read.submit ? { submit: true } : {}),
|
|
213
|
+
...(expected ? { expected: expected.toISOString() } : {}),
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../../src/areas/activities/conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,16 @@ import type { BrowserContext } from "playwright-core";
|
|
|
2
2
|
import type { Trail } from "../../options.js";
|
|
3
3
|
import { type MediaItem } from "../../core/text.js";
|
|
4
4
|
import { MoodleError } from "../../core/errors.js";
|
|
5
|
+
/** The modules whose content `activityContent` reads. */
|
|
5
6
|
export declare const CONTENT_TYPES: readonly ["page", "book", "label", "url", "resource", "folder"];
|
|
7
|
+
/** One of `CONTENT_TYPES`. */
|
|
6
8
|
export type ContentType = (typeof CONTENT_TYPES)[number];
|
|
7
9
|
/** The activity isn't of the given type, or the person can't view it. */
|
|
8
10
|
export declare class NotViewableError extends MoodleError {
|
|
9
11
|
name: string;
|
|
10
12
|
constructor(message: string);
|
|
11
13
|
}
|
|
14
|
+
/** What `activityContent` read of an activity: only the fields of its type are present. */
|
|
12
15
|
export interface ActivityContent {
|
|
13
16
|
activity: {
|
|
14
17
|
id: number;
|
|
@@ -2,6 +2,7 @@ import { pause, readingSeconds } from "../../core/pace.js";
|
|
|
2
2
|
import { openSitePage } from "../../core/session.js";
|
|
3
3
|
import { readMedia, readTexts } from "../../core/text.js";
|
|
4
4
|
import { MoodleError } from "../../core/errors.js";
|
|
5
|
+
/** The modules whose content `activityContent` reads. */
|
|
5
6
|
export const CONTENT_TYPES = ["page", "book", "label", "url", "resource", "folder"];
|
|
6
7
|
// A book has a reasonable number of chapters; the bound stops a loop on a broken "next" link.
|
|
7
8
|
const MAX_CHAPTERS = 200;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/areas/activities/content.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/areas/activities/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,9 @@ export interface MoodleParticipant {
|
|
|
22
22
|
requiregrading: boolean;
|
|
23
23
|
grantedextension: boolean;
|
|
24
24
|
submissionstatus: string;
|
|
25
|
+
/** With group submissions, the group the participant submits for (absent or 0 for none). */
|
|
26
|
+
groupid?: number;
|
|
27
|
+
groupname?: string;
|
|
25
28
|
}
|
|
26
29
|
/** The dates `mod_assign_get_participant` gives for one participant (Unix seconds; 0 is none). */
|
|
27
30
|
export interface MoodleParticipantDates {
|
|
@@ -64,5 +67,34 @@ export declare function panelGrade(page: Page, panelHtml: string): Promise<{
|
|
|
64
67
|
gradebookGrade?: string;
|
|
65
68
|
feedback?: string;
|
|
66
69
|
}>;
|
|
70
|
+
/** The marking workflow's states, as Moodle names them ("notmarked" is the grading form's empty choice). */
|
|
71
|
+
export declare const WORKFLOW_STATES: readonly ["notmarked", "inmarking", "readyforreview", "inreview", "readyforrelease", "released"];
|
|
72
|
+
/** One of `WORKFLOW_STATES`: where a submission is in the marking workflow. */
|
|
73
|
+
export type WorkflowState = (typeof WORKFLOW_STATES)[number];
|
|
74
|
+
/** What a grading panel's form says beyond the grade, read by field names. */
|
|
75
|
+
export interface PanelState {
|
|
76
|
+
/** The feedback files' draft area, where the assignment has feedback files on. */
|
|
77
|
+
draftId?: string;
|
|
78
|
+
sesskey?: string;
|
|
79
|
+
/** Where the assignment uses the marking workflow. */
|
|
80
|
+
workflowState?: WorkflowState;
|
|
81
|
+
/** Where it allocates markers: the ones allocated (Moodle 5.2 allows several per submission). */
|
|
82
|
+
markers?: {
|
|
83
|
+
id: number;
|
|
84
|
+
name: string;
|
|
85
|
+
}[];
|
|
86
|
+
}
|
|
87
|
+
export declare function readPanelState(page: Page, html: string): Promise<PanelState>;
|
|
88
|
+
/** The files at the top of a draft area of the person's, as the file manager lists them. */
|
|
89
|
+
export declare function draftAreaFiles(context: BrowserContext, siteUrl: string, sesskey: string, draftId: string): Promise<{
|
|
90
|
+
name: string;
|
|
91
|
+
url: string;
|
|
92
|
+
}[]>;
|
|
93
|
+
/**
|
|
94
|
+
* Makes a draft area hold exactly `files` (local paths): what's in it is deleted, as the file
|
|
95
|
+
* manager's "Delete" does, then they're uploaded from Moodle's own grading page for the participant,
|
|
96
|
+
* the page whose file picker the grader uses (it carries the upload repository).
|
|
97
|
+
*/
|
|
98
|
+
export declare function replaceDraftFiles(context: BrowserContext, siteUrl: string, activityId: number, userId: number, sesskey: string, draftId: string, files: string[]): Promise<void>;
|
|
67
99
|
/** Submits a serialized grading form; Moodle answers warnings when it refuses it. */
|
|
68
100
|
export declare function submitGradingForm(context: BrowserContext, siteUrl: string, instanceId: number, userId: number, serialized: string): Promise<void>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { callService } from "../../core/ajax.js";
|
|
2
|
-
import { setFields } from "../../core/forms.js";
|
|
3
|
-
import {
|
|
2
|
+
import { setFields, uploadToDraft } from "../../core/forms.js";
|
|
3
|
+
import { siteFetch } from "../../core/http.js";
|
|
4
|
+
import { NotLoggedInError, openSitePage } from "../../core/session.js";
|
|
4
5
|
import { MoodleError } from "../../core/errors.js";
|
|
5
6
|
/** The id isn't an assignment's course module, or the person can't grade it. */
|
|
6
7
|
export class NotAnAssignmentError extends MoodleError {
|
|
@@ -154,6 +155,69 @@ export async function panelGrade(page, panelHtml) {
|
|
|
154
155
|
return { grade: grade || undefined, ...(gradebook && gradebook !== "-" ? { gradebookGrade: gradebook } : {}), feedback: feedback || undefined };
|
|
155
156
|
});
|
|
156
157
|
}
|
|
158
|
+
/** The marking workflow's states, as Moodle names them ("notmarked" is the grading form's empty choice). */
|
|
159
|
+
export const WORKFLOW_STATES = ["notmarked", "inmarking", "readyforreview", "inreview", "readyforrelease", "released"];
|
|
160
|
+
export function readPanelState(page, html) {
|
|
161
|
+
return page.evaluate((html) => {
|
|
162
|
+
const g = globalThis;
|
|
163
|
+
const fields = Array.from(new g.DOMParser().parseFromString(html, "text/html").querySelectorAll("form.gradeform [name]"));
|
|
164
|
+
// The feedback files plugin names its file manager after the participant: files_<userid>_filemanager.
|
|
165
|
+
const draft = fields.find((field) => /^files_\d+_filemanager$/.test(field.name));
|
|
166
|
+
const workflow = fields.find((field) => field.name === "workflowstate");
|
|
167
|
+
const markerFields = fields.filter((field) => /^allocatedmarker\[\d+\]$/.test(field.name));
|
|
168
|
+
const markers = markerFields.filter((field) => Number(field.value) > 0).map((field) => ({ id: Number(field.value), name: (field.selectedOptions?.[0]?.textContent ?? "").trim() }));
|
|
169
|
+
return {
|
|
170
|
+
draftId: draft?.value || undefined,
|
|
171
|
+
sesskey: fields.find((field) => field.name === "sesskey")?.value || undefined,
|
|
172
|
+
...(workflow ? { workflowState: (workflow.value || "notmarked") } : {}),
|
|
173
|
+
...(markerFields.length > 0 ? { markers } : {}),
|
|
174
|
+
};
|
|
175
|
+
}, html);
|
|
176
|
+
}
|
|
177
|
+
async function draftFilesRequest(context, siteUrl, action, fields) {
|
|
178
|
+
const { status, url, body } = await siteFetch(context, new URL(`repository/draftfiles_ajax.php?action=${action}`, siteUrl).href, {
|
|
179
|
+
method: "POST",
|
|
180
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
181
|
+
body: new URLSearchParams(fields).toString(),
|
|
182
|
+
});
|
|
183
|
+
// Without a session, Moodle sends the request to its login page.
|
|
184
|
+
if (new URL(url).pathname.includes("/login/"))
|
|
185
|
+
throw new NotLoggedInError();
|
|
186
|
+
try {
|
|
187
|
+
return JSON.parse(body);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
throw new GradingError(`Moodle's file manager answered ${status} to "${action}" with something other than JSON.`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** The files at the top of a draft area of the person's, as the file manager lists them. */
|
|
194
|
+
export async function draftAreaFiles(context, siteUrl, sesskey, draftId) {
|
|
195
|
+
const listing = await draftFilesRequest(context, siteUrl, "list", { sesskey, itemid: draftId, filepath: "/" });
|
|
196
|
+
return (listing.list ?? []).filter((file) => file.type === "file").map((file) => ({ name: file.filename, url: file.url }));
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Makes a draft area hold exactly `files` (local paths): what's in it is deleted, as the file
|
|
200
|
+
* manager's "Delete" does, then they're uploaded from Moodle's own grading page for the participant,
|
|
201
|
+
* the page whose file picker the grader uses (it carries the upload repository).
|
|
202
|
+
*/
|
|
203
|
+
export async function replaceDraftFiles(context, siteUrl, activityId, userId, sesskey, draftId, files) {
|
|
204
|
+
const listing = await draftFilesRequest(context, siteUrl, "list", { sesskey, itemid: draftId, filepath: "/" });
|
|
205
|
+
const existing = (listing.list ?? []).map((file) => ({ filename: file.filename, filepath: file.filepath }));
|
|
206
|
+
if (existing.length > 0) {
|
|
207
|
+
const deleted = await draftFilesRequest(context, siteUrl, "deleteselected", { sesskey, itemid: draftId, selected: JSON.stringify(existing) });
|
|
208
|
+
if (!Array.isArray(deleted))
|
|
209
|
+
throw new GradingError("Moodle didn't delete the feedback files there were: nothing was graded.");
|
|
210
|
+
}
|
|
211
|
+
if (files.length === 0)
|
|
212
|
+
return;
|
|
213
|
+
const page = await openSitePage(context, siteUrl, `mod/assign/view.php?id=${activityId}&action=grade&userid=${userId}`);
|
|
214
|
+
try {
|
|
215
|
+
await uploadToDraft(page, draftId, files);
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
await page.close().catch(() => undefined);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
157
221
|
/** Submits a serialized grading form; Moodle answers warnings when it refuses it. */
|
|
158
222
|
export async function submitGradingForm(context, siteUrl, instanceId, userId, serialized) {
|
|
159
223
|
const warnings = await callService(context, siteUrl, "mod_assign_submit_grading_form", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grader.js","sourceRoot":"","sources":["../../../src/areas/assignments/grader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grader.js","sourceRoot":"","sources":["../../../src/areas/assignments/grader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { BrowserContext, Page } from "playwright-core";
|
|
2
|
-
import { type PluginContent } from "./grader.js";
|
|
2
|
+
import { type PluginContent, type WorkflowState } from "./grader.js";
|
|
3
3
|
import { type FieldValue } from "../../core/forms.js";
|
|
4
|
+
/** A participant's submission to an assignment, as `assignmentSubmissions` reads it for the grader. */
|
|
4
5
|
export interface Submission {
|
|
5
6
|
userId: number;
|
|
6
7
|
fullName: string;
|
|
@@ -17,18 +18,45 @@ export interface Submission {
|
|
|
17
18
|
cutoffDate?: string;
|
|
18
19
|
/** Per submission plugin; only for submitted and draft submissions. */
|
|
19
20
|
content?: PluginContent[];
|
|
21
|
+
/**
|
|
22
|
+
* The feedback files the participant has, where the assignment takes them: as the grader's file
|
|
23
|
+
* manager holds them, a working copy (`draftfile.php`) that `downloadFile` saves while the session lasts.
|
|
24
|
+
*/
|
|
25
|
+
feedbackFiles?: {
|
|
26
|
+
name: string;
|
|
27
|
+
url: string;
|
|
28
|
+
}[];
|
|
29
|
+
/** With group submissions, the group the participant submits for; absent for none (Moodle's "Default group"). */
|
|
30
|
+
group?: {
|
|
31
|
+
id: number;
|
|
32
|
+
name: string;
|
|
33
|
+
};
|
|
34
|
+
/** With the marking workflow, the submission's state ("notmarked" before any). */
|
|
35
|
+
workflowState?: WorkflowState;
|
|
36
|
+
/** With marker allocation, the markers allocated to it. */
|
|
37
|
+
markers?: {
|
|
38
|
+
id: number;
|
|
39
|
+
name: string;
|
|
40
|
+
}[];
|
|
20
41
|
}
|
|
21
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Every participant's submission to an assignment, with the group they submit for (group
|
|
44
|
+
* submissions), and, unless `includeContent` is false, its content, the feedback files they have,
|
|
45
|
+
* its marking workflow state and markers (all from each participant's grading panel).
|
|
46
|
+
*/
|
|
22
47
|
export declare function assignmentSubmissions(context: BrowserContext, siteUrl: string, activityId: number, { includeContent }?: {
|
|
23
48
|
includeContent?: boolean | undefined;
|
|
24
49
|
}): Promise<Submission[]>;
|
|
25
50
|
/**
|
|
26
51
|
* Grades a participant as the grader does: a grade (simple grading), a rubric's level per criterion
|
|
27
52
|
* or a marking guide's score per criterion (by their ids, from `rubric()`), remarks per criterion,
|
|
28
|
-
* feedback comments (HTML),
|
|
29
|
-
*
|
|
53
|
+
* feedback comments (HTML), feedback files (local paths that replace the ones the participant has;
|
|
54
|
+
* `[]` removes them), whether to notify, and any other grading field by name. Returns the grade
|
|
55
|
+
* saved and the gradebook's grade, the total Moodle computes for a rubric or a guide, and the
|
|
56
|
+
* feedback files after saving when they were given. Throws `GradingError` when Moodle refuses the
|
|
57
|
+
* grade, or when files are given to an assignment without feedback files.
|
|
30
58
|
*/
|
|
31
|
-
export declare function gradeSubmission(context: BrowserContext, siteUrl: string, activityId: number, userId: number, { grade, rubric, guide, remarks, feedback, notify, fields, }: {
|
|
59
|
+
export declare function gradeSubmission(context: BrowserContext, siteUrl: string, activityId: number, userId: number, { grade, rubric, guide, remarks, feedback, feedbackFiles, workflowState, applyToGroup, notify, fields, }: {
|
|
32
60
|
grade?: string | number;
|
|
33
61
|
/** Criterion id → level id. */
|
|
34
62
|
rubric?: Record<number, number>;
|
|
@@ -37,20 +65,33 @@ export declare function gradeSubmission(context: BrowserContext, siteUrl: string
|
|
|
37
65
|
/** Criterion id → remark, for a rubric or a guide. */
|
|
38
66
|
remarks?: Record<number, string>;
|
|
39
67
|
feedback?: string;
|
|
68
|
+
/** Local paths (absolute): the participant's feedback files afterwards. */
|
|
69
|
+
feedbackFiles?: string[];
|
|
70
|
+
/** With the marking workflow: the state to leave the submission in ("released" shows the grade). */
|
|
71
|
+
workflowState?: WorkflowState;
|
|
72
|
+
/** With group submissions: grade every member of the participant's group alike (Moodle's default), or only them. */
|
|
73
|
+
applyToGroup?: boolean;
|
|
40
74
|
notify?: boolean;
|
|
41
75
|
fields?: Record<string, FieldValue>;
|
|
42
76
|
}): Promise<{
|
|
77
|
+
workflowState?: "notmarked" | "inmarking" | "readyforreview" | "inreview" | "readyforrelease" | "released" | undefined;
|
|
78
|
+
feedbackFiles?: {
|
|
79
|
+
name: string;
|
|
80
|
+
url: string;
|
|
81
|
+
}[] | undefined;
|
|
43
82
|
grade?: string;
|
|
44
83
|
gradebookGrade?: string;
|
|
45
84
|
feedback?: string;
|
|
46
85
|
changed: string;
|
|
47
86
|
}>;
|
|
87
|
+
/** A criterion of a rubric or a marking guide, with the ids grading takes. */
|
|
48
88
|
export interface GradingCriterion {
|
|
49
89
|
id: number;
|
|
50
90
|
/** A rubric criterion's description; a guide criterion's short name. */
|
|
51
91
|
description: string;
|
|
52
92
|
/** A guide criterion's description for students and for markers. */
|
|
53
93
|
details?: string;
|
|
94
|
+
/** A guide criterion's description for markers only. */
|
|
54
95
|
markers?: string;
|
|
55
96
|
/** A rubric criterion's levels, by the ids grading takes. */
|
|
56
97
|
levels?: {
|
|
@@ -61,6 +102,7 @@ export interface GradingCriterion {
|
|
|
61
102
|
/** A guide criterion's maximum score. */
|
|
62
103
|
maxScore?: number;
|
|
63
104
|
}
|
|
105
|
+
/** How an assignment is graded: its method and, for advanced grading, its criteria. */
|
|
64
106
|
export interface GradingDefinition {
|
|
65
107
|
/** "simple" for a plain grade (or a scale), "rubric" or "guide" for advanced grading. */
|
|
66
108
|
method: "simple" | "rubric" | "guide";
|
|
@@ -79,8 +121,29 @@ export declare function rubric(context: BrowserContext, siteUrl: string, activit
|
|
|
79
121
|
} & GradingDefinition>;
|
|
80
122
|
/**
|
|
81
123
|
* Grants participants an extension until a date, through the assignment's extension form (several at
|
|
82
|
-
* once as its bulk action does). Moodle refuses a date before the assignment's due date
|
|
124
|
+
* once as its bulk action does). Moodle refuses a date before the assignment's due date, and a person
|
|
125
|
+
* without its "grant extension" capability only on saving (the form opens for anyone, confirmed
|
|
126
|
+
* empirically on the sandbox, 5.2): both throw.
|
|
83
127
|
*/
|
|
84
128
|
export declare function grantExtension(context: BrowserContext, siteUrl: string, activityId: number, userIds: number[], until: Date): Promise<{
|
|
85
129
|
changed: string;
|
|
86
130
|
}>;
|
|
131
|
+
/**
|
|
132
|
+
* Sets the marking workflow state of participants' submissions, as the grading table's "Set marking
|
|
133
|
+
* workflow state" does; "released" shows them their grades, notifying them when `notify` is true
|
|
134
|
+
* (the form's default is not to). With several markers, it sets the submission's overall state.
|
|
135
|
+
*/
|
|
136
|
+
export declare function setWorkflowState(context: BrowserContext, siteUrl: string, activityId: number, userIds: number[], state: Exclude<WorkflowState, "notmarked">, { notify }?: {
|
|
137
|
+
notify?: boolean;
|
|
138
|
+
}): Promise<{
|
|
139
|
+
changed: string;
|
|
140
|
+
}>;
|
|
141
|
+
/**
|
|
142
|
+
* Allocates a marker (the user id of someone who can grade; several where the assignment uses
|
|
143
|
+
* several markers per submission) to participants' submissions, as the grading table's "Allocate
|
|
144
|
+
* marker" does. Moodle leaves alone submissions past marking (marking completed, in review, ready
|
|
145
|
+
* for release, released).
|
|
146
|
+
*/
|
|
147
|
+
export declare function allocateMarker(context: BrowserContext, siteUrl: string, activityId: number, userIds: number[], markerId: number | number[]): Promise<{
|
|
148
|
+
changed: string;
|
|
149
|
+
}>;
|