@falkenslab/moodle-driver 0.4.0 → 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 +36 -1
- package/dist/areas/messages/messages.js +60 -4
- 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 +2636 -578
- 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
|
@@ -20,13 +20,16 @@ export declare function overrideCompletion(context: BrowserContext, siteUrl: str
|
|
|
20
20
|
state: CompletionState;
|
|
21
21
|
overridden: boolean;
|
|
22
22
|
}>;
|
|
23
|
+
/** A participant's completion of one activity in the progress report. */
|
|
23
24
|
export interface CompletionCell {
|
|
24
25
|
activityId: number;
|
|
25
26
|
state: CompletionState;
|
|
27
|
+
/** Whether the person marks it complete themselves, or Moodle does by its conditions. */
|
|
26
28
|
tracking: "manual" | "auto";
|
|
27
29
|
/** A teacher set it, not the person or Moodle. */
|
|
28
30
|
overridden: boolean;
|
|
29
31
|
}
|
|
32
|
+
/** A course's progress report (`completionReport`): the activities that track completion, and each participant's. */
|
|
30
33
|
export interface CompletionReport {
|
|
31
34
|
activities: {
|
|
32
35
|
id: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/areas/completion/completion.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,yFAAyF;AACzF,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACrC,IAAI,GAAG,iBAAiB,CAAC;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,uCAAuC;AACvC,SAAS,eAAe,CAAC,KAAc,EAAE,UAAkB;IACzD,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB;QAAE,OAAO,IAAI,eAAe,CAAC,YAAY,UAAU,qFAAqF,CAAC,CAAC;IACtL,IAAI,KAAK,CAAC,SAAS,KAAK,sBAAsB;QAAE,OAAO,IAAI,eAAe,CAAC,wCAAwC,UAAU,YAAY,CAAC,CAAC;IAC3I,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,IAAI,KAAK,CAAC,SAAS,KAAK,cAAc;QAAE,OAAO,IAAI,eAAe,CAAC,uDAAuD,UAAU,GAAG,CAAC,CAAC;IAChL,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB,EAAE,IAAa;IAC7G,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,4DAA4D,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3I,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,YAAY,UAAU,WAAW,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;AACrF,CAAC;AAED,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAAe,EACf,UAAkB,EAClB,MAAc,EACd,KAAsB;IAEtB,IAAI,KAAmD,CAAC;IACxD,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,qDAAqD,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,QAAQ,MAAM,6BAA6B,UAAU,WAAW,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AAChJ,CAAC;
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/areas/completion/completion.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,yFAAyF;AACzF,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACrC,IAAI,GAAG,iBAAiB,CAAC;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,uCAAuC;AACvC,SAAS,eAAe,CAAC,KAAc,EAAE,UAAkB;IACzD,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB;QAAE,OAAO,IAAI,eAAe,CAAC,YAAY,UAAU,qFAAqF,CAAC,CAAC;IACtL,IAAI,KAAK,CAAC,SAAS,KAAK,sBAAsB;QAAE,OAAO,IAAI,eAAe,CAAC,wCAAwC,UAAU,YAAY,CAAC,CAAC;IAC3I,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,IAAI,KAAK,CAAC,SAAS,KAAK,cAAc;QAAE,OAAO,IAAI,eAAe,CAAC,uDAAuD,UAAU,GAAG,CAAC,CAAC;IAChL,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB,EAAE,IAAa;IAC7G,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,4DAA4D,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3I,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,YAAY,UAAU,WAAW,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;AACrF,CAAC;AAED,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAAe,EACf,UAAkB,EAClB,MAAc,EACd,KAAsB;IAEtB,IAAI,KAAmD,CAAC;IACxD,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,qDAAqD,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,QAAQ,MAAM,6BAA6B,UAAU,WAAW,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AAChJ,CAAC;AAkBD,sGAAsG;AACtG,MAAM,UAAU,oBAAoB,CAAC,IAAU;IAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAOxB,MAAM,GAAG,GAAI,UAA0C,CAAC,QAAQ,CAAC;QACjE,MAAM,MAAM,GAA2B,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QACxH,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,mDAAmD,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxH,MAAM,KAAK,GAAG,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvI,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACrG,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,kCAAkC,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvB,iFAAiF;YACjF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACpG,MAAM,IAAI,GAAG,sDAAsD,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/H,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChJ,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAsB,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAuB,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE,KAAK,KAAyB,EAAE;IACnI,MAAM,MAAM,GAAqB,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,oCAAoC,QAAQ,UAAU,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClJ,IAAI,CAAC;YACH,uFAAuF;YACvF,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1G,MAAM,IAAI,eAAe,CAAC,wBAAwB,QAAQ,sEAAsE,CAAC,CAAC;YACpI,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/D,8FAA8F;gBAC9F,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAC9B,KAAK,MAAM,GAAG,IAAI,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YACnC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -3,7 +3,9 @@ import { type FieldValue } from "../../core/forms.js";
|
|
|
3
3
|
import { MoodleError } from "../../core/errors.js";
|
|
4
4
|
/** Which courses by their dates; "all" includes those the person hid from their dashboard. */
|
|
5
5
|
export declare const COURSE_CLASSIFICATIONS: readonly ["all", "inprogress", "future", "past"];
|
|
6
|
+
/** One of `COURSE_CLASSIFICATIONS`. */
|
|
6
7
|
export type CourseClassification = (typeof COURSE_CLASSIFICATIONS)[number];
|
|
8
|
+
/** A course the person is enrolled in, as `listCourses` lists it. */
|
|
7
9
|
export interface Course {
|
|
8
10
|
id: number;
|
|
9
11
|
shortname: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/areas/courses/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/areas/courses/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { BrowserContext, Page } from "playwright-core";
|
|
2
|
+
import { type FieldValue } from "../../core/forms.js";
|
|
3
|
+
/** What `resetCourse` can delete, each one the reset form's fields for it, in every module the course has. */
|
|
4
|
+
export interface ResetDeletions {
|
|
5
|
+
/** Assignments' submissions. */
|
|
6
|
+
submissions?: boolean;
|
|
7
|
+
/** Attempts at quizzes, lessons, SCORM and H5P activities. */
|
|
8
|
+
attempts?: boolean;
|
|
9
|
+
/** Every forum post. */
|
|
10
|
+
posts?: boolean;
|
|
11
|
+
/** Every grade in the gradebook (its items stay). */
|
|
12
|
+
grades?: boolean;
|
|
13
|
+
/** Assignments', quizzes' and lessons' user and group overrides. */
|
|
14
|
+
overrides?: boolean;
|
|
15
|
+
/** Choice answers. */
|
|
16
|
+
choices?: boolean;
|
|
17
|
+
/** The course's calendar events. */
|
|
18
|
+
events?: boolean;
|
|
19
|
+
/** Groups and groupings (with them, their members). */
|
|
20
|
+
groups?: boolean;
|
|
21
|
+
/** Activity and course completion data. */
|
|
22
|
+
completion?: boolean;
|
|
23
|
+
notes?: boolean;
|
|
24
|
+
comments?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** One line of the report Moodle shows after resetting: the component, what it did, and its error when it failed. */
|
|
27
|
+
export interface ResetStatus {
|
|
28
|
+
component: string;
|
|
29
|
+
item: string;
|
|
30
|
+
done: boolean;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
/** The table Moodle shows after resetting: per component, each task and its status (an error icon and message when it failed). */
|
|
34
|
+
export declare function readResetReport(page: Page): Promise<ResetStatus[] | undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* Resets a course for a new year, as Moodle's reset form does: deletes only what's named in `delete`
|
|
37
|
+
* (in every module of the course that has it), unenrols the people with `unenrolRoles` (role ids),
|
|
38
|
+
* moves the course's start date to `start` (and its activities' dates with it), and sets any other of
|
|
39
|
+
* the form's fields by name (`fields`). Nothing is deleted unless asked: the form's own defaults are
|
|
40
|
+
* unticked first. It can't be undone. Returns Moodle's report: per component, what it did and its
|
|
41
|
+
* errors. Needs `moodle/course:reset`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resetCourse(context: BrowserContext, siteUrl: string, courseId: number, { delete: deletions, unenrolRoles, start, fields }: {
|
|
44
|
+
delete?: ResetDeletions;
|
|
45
|
+
unenrolRoles?: number[];
|
|
46
|
+
start?: Date;
|
|
47
|
+
fields?: Record<string, FieldValue>;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
changed: string;
|
|
50
|
+
report: ResetStatus[];
|
|
51
|
+
}>;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { dateSelectorValues, openForm, setFields } from "../../core/forms.js";
|
|
2
|
+
import { NotLoggedInError, moodleErrorMessage } from "../../core/session.js";
|
|
3
|
+
import { MoodleError } from "../../core/errors.js";
|
|
4
|
+
import { CourseError } from "./list.js";
|
|
5
|
+
// The reset form's fields for each deletion, by their names in Moodle 5.2's form (course/reset_form.php and each module's).
|
|
6
|
+
const FIELDS = {
|
|
7
|
+
submissions: ["reset_assign_submissions"],
|
|
8
|
+
attempts: ["reset_quiz_attempts", "reset_lesson", "reset_scorm", "reset_h5pactivity"],
|
|
9
|
+
posts: ["reset_forum_all"],
|
|
10
|
+
grades: ["reset_gradebook_grades"],
|
|
11
|
+
overrides: ["reset_assign_user_overrides", "reset_assign_group_overrides", "reset_quiz_user_overrides", "reset_quiz_group_overrides", "reset_lesson_user_overrides", "reset_lesson_group_overrides"],
|
|
12
|
+
choices: ["reset_choice"],
|
|
13
|
+
events: ["reset_events"],
|
|
14
|
+
groups: ["reset_groups_remove", "reset_groupings_remove"],
|
|
15
|
+
completion: ["reset_completion"],
|
|
16
|
+
notes: ["reset_notes"],
|
|
17
|
+
comments: ["reset_comments"],
|
|
18
|
+
};
|
|
19
|
+
/** Unticks everything the reset form ticks by default: its checkboxes, the roles to unenrol, the new dates. */
|
|
20
|
+
function clearForm(page) {
|
|
21
|
+
return page.evaluate(() => {
|
|
22
|
+
const g = globalThis;
|
|
23
|
+
for (const field of Array.from(g.document.querySelectorAll("form.mform input[type='checkbox'], form.mform select[multiple]"))) {
|
|
24
|
+
if (field.type === "checkbox")
|
|
25
|
+
field.checked = false;
|
|
26
|
+
else
|
|
27
|
+
for (const option of Array.from(field.options ?? []))
|
|
28
|
+
option.selected = false;
|
|
29
|
+
field.dispatchEvent(new g.Event("change", { bubbles: true }));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** The table Moodle shows after resetting: per component, each task and its status (an error icon and message when it failed). */
|
|
34
|
+
export function readResetReport(page) {
|
|
35
|
+
return page.evaluate(() => {
|
|
36
|
+
const doc = globalThis.document;
|
|
37
|
+
const table = doc.querySelector('[role="main"] table.generaltable') ?? doc.querySelector("table.generaltable");
|
|
38
|
+
if (!table)
|
|
39
|
+
return undefined;
|
|
40
|
+
return Array.from(table.querySelectorAll("tbody tr")).flatMap((row) => {
|
|
41
|
+
const cells = Array.from(row.querySelectorAll("td"));
|
|
42
|
+
if (cells.length < 3)
|
|
43
|
+
return [];
|
|
44
|
+
const [component, item, status] = cells.map((cell) => (cell.textContent ?? "").replace(/\s+/g, " ").trim());
|
|
45
|
+
// A failed task has Moodle's "invalid" icon before its message; a done one only the word.
|
|
46
|
+
const failed = cells[2].querySelector(".icon, img") !== null;
|
|
47
|
+
return [{ component: component, item: item, done: !failed, ...(failed ? { error: status } : {}) }];
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resets a course for a new year, as Moodle's reset form does: deletes only what's named in `delete`
|
|
53
|
+
* (in every module of the course that has it), unenrols the people with `unenrolRoles` (role ids),
|
|
54
|
+
* moves the course's start date to `start` (and its activities' dates with it), and sets any other of
|
|
55
|
+
* the form's fields by name (`fields`). Nothing is deleted unless asked: the form's own defaults are
|
|
56
|
+
* unticked first. It can't be undone. Returns Moodle's report: per component, what it did and its
|
|
57
|
+
* errors. Needs `moodle/course:reset`.
|
|
58
|
+
*/
|
|
59
|
+
export async function resetCourse(context, siteUrl, courseId, { delete: deletions = {}, unenrolRoles = [], start, fields = {} }) {
|
|
60
|
+
const unknown = Object.keys(deletions).filter((key) => !(key in FIELDS));
|
|
61
|
+
if (unknown.length > 0)
|
|
62
|
+
throw new MoodleError(`Unknown things to delete: ${unknown.join(", ")}. Use ${Object.keys(FIELDS).join(", ")}, or name a reset field in fields.`, "invalid-input");
|
|
63
|
+
const asked = Object.keys(FIELDS).filter((key) => deletions[key]);
|
|
64
|
+
if (asked.length === 0 && unenrolRoles.length === 0 && !start && Object.keys(fields).length === 0) {
|
|
65
|
+
throw new MoodleError("Say what to reset: nothing is deleted unless named (delete, unenrolRoles, start or fields).", "invalid-input");
|
|
66
|
+
}
|
|
67
|
+
const page = await openForm(context, siteUrl, `course/reset.php?id=${courseId}`).catch((error) => {
|
|
68
|
+
if (error instanceof NotLoggedInError)
|
|
69
|
+
throw error;
|
|
70
|
+
throw new CourseError(`You can't reset course ${courseId}: it doesn't exist, or you aren't allowed (moodle/course:reset).`);
|
|
71
|
+
});
|
|
72
|
+
try {
|
|
73
|
+
if ((await page.locator('form.mform [name="_qf__course_reset_form"]').count()) === 0) {
|
|
74
|
+
const moodle = await moodleErrorMessage(page);
|
|
75
|
+
throw new CourseError(`You can't reset course ${courseId}${moodle ? `: ${moodle}` : ": you aren't allowed (moodle/course:reset)."}`);
|
|
76
|
+
}
|
|
77
|
+
await clearForm(page);
|
|
78
|
+
const present = async (name) => (await page.locator(`form.mform [name="${name}"]:not([type="hidden"])`).count()) > 0;
|
|
79
|
+
const values = {};
|
|
80
|
+
const nothingFor = [];
|
|
81
|
+
for (const key of asked) {
|
|
82
|
+
const names = [];
|
|
83
|
+
for (const name of FIELDS[key])
|
|
84
|
+
if (await present(name))
|
|
85
|
+
names.push(name);
|
|
86
|
+
if (names.length === 0)
|
|
87
|
+
nothingFor.push(key);
|
|
88
|
+
for (const name of names)
|
|
89
|
+
values[name] = true;
|
|
90
|
+
}
|
|
91
|
+
if (unenrolRoles.length > 0) {
|
|
92
|
+
const offered = await page.locator('form.mform select[name="unenrol_users[]"] option').evaluateAll((options) => options.map((option) => Number(option.getAttribute("value"))));
|
|
93
|
+
const missing = unenrolRoles.filter((role) => !offered.includes(role));
|
|
94
|
+
if (missing.length > 0)
|
|
95
|
+
throw new CourseError(`Course ${courseId} has nobody with role ${missing.join(", ")} to unenrol: the roles offered are ${offered.join(", ") || "none"}.`);
|
|
96
|
+
values["unenrol_users[]"] = unenrolRoles.map(String);
|
|
97
|
+
}
|
|
98
|
+
if (start)
|
|
99
|
+
Object.assign(values, { "reset_start_date[enabled]": true }, await dateSelectorValues(page, "reset_start_date", start));
|
|
100
|
+
Object.assign(values, fields);
|
|
101
|
+
await setFields(page, values);
|
|
102
|
+
// Moodle's reset button asks to confirm in a dialog, then submits the form itself: the same, without the dialog.
|
|
103
|
+
await Promise.all([
|
|
104
|
+
page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: 5 * 60_000 }),
|
|
105
|
+
page.evaluate(() => globalThis.document.querySelector("form.mform").submit()),
|
|
106
|
+
]);
|
|
107
|
+
const report = await readResetReport(page);
|
|
108
|
+
if (!report) {
|
|
109
|
+
const moodle = await moodleErrorMessage(page);
|
|
110
|
+
if (moodle)
|
|
111
|
+
throw new CourseError(`Moodle didn't reset course ${courseId}: ${moodle}`);
|
|
112
|
+
// A site with asynchronous resets queues it for its scheduled tasks and shows the form again.
|
|
113
|
+
return { changed: `Course ${courseId}'s reset was queued: Moodle makes it in its scheduled tasks (cron).`, report: [] };
|
|
114
|
+
}
|
|
115
|
+
const failed = report.filter((line) => !line.done).length;
|
|
116
|
+
const skipped = nothingFor.length > 0 ? ` Nothing to reset for ${nothingFor.join(", ")}: the course has no such activity.` : "";
|
|
117
|
+
return { changed: `Course ${courseId} reset: ${report.length - failed} tasks done${failed ? `, ${failed} failed` : ""}.${skipped}`, report };
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
await page.close().catch(() => undefined);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../../src/areas/courses/reset.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,23 @@ export interface ActivityDetails {
|
|
|
44
44
|
}
|
|
45
45
|
/** The activities on a course or section page: their dates and restriction texts. */
|
|
46
46
|
export declare function readActivityDetails(page: Page): Promise<ActivityDetails[]>;
|
|
47
|
+
/**
|
|
48
|
+
* The sections' descriptions on a course or section page, by section id: the HTML Moodle renders
|
|
49
|
+
* (`.summarytext` in the section, without its `no-overflow` wrapper); sections without one left out.
|
|
50
|
+
*/
|
|
51
|
+
export declare function readSectionSummaries(page: Page): Promise<{
|
|
52
|
+
id: number;
|
|
53
|
+
summary: string;
|
|
54
|
+
}[]>;
|
|
55
|
+
/**
|
|
56
|
+
* What the course page shows beyond the course's state: each activity's dates and restriction, and
|
|
57
|
+
* each section's description. From the course page, then from the section pages of activities it
|
|
58
|
+
* doesn't show (courses with one section per page).
|
|
59
|
+
*/
|
|
60
|
+
export declare function courseDetails(context: BrowserContext, siteUrl: string, courseId: number, state: CourseState): Promise<{
|
|
61
|
+
activities: Map<number, ActivityDetails>;
|
|
62
|
+
summaries: Map<number, string>;
|
|
63
|
+
}>;
|
|
47
64
|
/**
|
|
48
65
|
* Details for the given activities: from the course page, then from the section pages of those it
|
|
49
66
|
* doesn't show (courses with one section per page).
|
|
@@ -21,25 +21,56 @@ export function readActivityDetails(page) {
|
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* The sections' descriptions on a course or section page, by section id: the HTML Moodle renders
|
|
25
|
+
* (`.summarytext` in the section, without its `no-overflow` wrapper); sections without one left out.
|
|
26
|
+
*/
|
|
27
|
+
export function readSectionSummaries(page) {
|
|
28
|
+
return page.evaluate(() => {
|
|
29
|
+
const doc = globalThis.document;
|
|
30
|
+
const summaries = [];
|
|
31
|
+
for (const section of Array.from(doc.querySelectorAll('[data-for="section"][data-id]'))) {
|
|
32
|
+
// The section's own summary, not a subsection's inside it.
|
|
33
|
+
const own = Array.from(section.querySelectorAll(".summarytext")).find((s) => s.closest('[data-for="section"]') === section);
|
|
34
|
+
if (!own)
|
|
35
|
+
continue;
|
|
36
|
+
const summary = (own.querySelector(":scope > .no-overflow") ?? own).innerHTML.trim();
|
|
37
|
+
if (summary !== "")
|
|
38
|
+
summaries.push({ id: Number(section.getAttribute("data-id")), summary });
|
|
39
|
+
}
|
|
40
|
+
return summaries;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* What the course page shows beyond the course's state: each activity's dates and restriction, and
|
|
45
|
+
* each section's description. From the course page, then from the section pages of activities it
|
|
25
46
|
* doesn't show (courses with one section per page).
|
|
26
47
|
*/
|
|
27
|
-
export async function
|
|
28
|
-
const
|
|
48
|
+
export async function courseDetails(context, siteUrl, courseId, state) {
|
|
49
|
+
const activities = new Map();
|
|
50
|
+
const summaries = new Map();
|
|
29
51
|
const read = async (path) => {
|
|
30
52
|
const page = await openSitePage(context, siteUrl, path);
|
|
31
53
|
try {
|
|
32
54
|
for (const item of await readActivityDetails(page))
|
|
33
|
-
|
|
55
|
+
activities.set(item.id, item);
|
|
56
|
+
for (const { id, summary } of await readSectionSummaries(page))
|
|
57
|
+
summaries.set(id, summary);
|
|
34
58
|
}
|
|
35
59
|
finally {
|
|
36
60
|
await page.close().catch(() => undefined);
|
|
37
61
|
}
|
|
38
62
|
};
|
|
39
63
|
await read(`course/view.php?id=${courseId}`);
|
|
40
|
-
const missingSections = new Set(state.cm.filter((cm) => !
|
|
64
|
+
const missingSections = new Set(state.cm.filter((cm) => !activities.has(Number(cm.id))).map((cm) => cm.sectionid));
|
|
41
65
|
for (const sectionId of missingSections)
|
|
42
66
|
await read(`course/section.php?id=${sectionId}`);
|
|
43
|
-
return
|
|
67
|
+
return { activities, summaries };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Details for the given activities: from the course page, then from the section pages of those it
|
|
71
|
+
* doesn't show (courses with one section per page).
|
|
72
|
+
*/
|
|
73
|
+
export async function activityDetails(context, siteUrl, courseId, state) {
|
|
74
|
+
return (await courseDetails(context, siteUrl, courseId, state)).activities;
|
|
44
75
|
}
|
|
45
76
|
//# sourceMappingURL=state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/areas/courses/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgCrD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB,EAAE,OAAe,EAAE,QAAgB;IAC1F,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW,CAAS,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAgB,CAAC;AACvI,CAAC;AASD,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAOxB,MAAM,GAAG,GAAI,UAA+C,CAAC,QAAQ,CAAC;QACtE,qEAAqE;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,oDAAoD,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxG,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtG,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACnF,CAAC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAC1H,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/areas/courses/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,9 @@ import type { BrowserContext } from "playwright-core";
|
|
|
2
2
|
import { type ActivityDetails, type CourseState } from "./state.js";
|
|
3
3
|
/** Moodle's completion states (COMPLETION_INCOMPLETE … COMPLETION_COMPLETE_FAIL), by their value. */
|
|
4
4
|
export declare const COMPLETION_STATES: readonly ["incomplete", "complete", "complete-pass", "complete-fail"];
|
|
5
|
+
/** One of `COMPLETION_STATES`: the person's completion of an activity. */
|
|
5
6
|
export type CompletionState = (typeof COMPLETION_STATES)[number];
|
|
7
|
+
/** An activity of a course, as `courseStructure` lists it in its section. */
|
|
6
8
|
export interface CourseActivity {
|
|
7
9
|
/** The course module id, which every activity function takes. */
|
|
8
10
|
id: number;
|
|
@@ -28,6 +30,7 @@ export interface CourseActivity {
|
|
|
28
30
|
/** With details: the restriction as the course page shows it. */
|
|
29
31
|
restriction?: string;
|
|
30
32
|
}
|
|
33
|
+
/** A section of a course with its activities, in the course's order. */
|
|
31
34
|
export interface CourseSection {
|
|
32
35
|
id: number;
|
|
33
36
|
number: number;
|
|
@@ -35,16 +38,22 @@ export interface CourseSection {
|
|
|
35
38
|
visible: boolean;
|
|
36
39
|
restricted: boolean;
|
|
37
40
|
url?: string;
|
|
41
|
+
/** With details: the section's description (HTML) as the course page renders it, when it has one. */
|
|
42
|
+
summary?: string;
|
|
38
43
|
/** For a subsection, the section that holds it. */
|
|
39
44
|
parentSectionId?: number;
|
|
40
45
|
activities: CourseActivity[];
|
|
41
46
|
}
|
|
42
47
|
/** The state as sections with their activities, in the course's order; details merged when given. */
|
|
43
|
-
export declare function structureOf(state: CourseState, details?: Map<number, ActivityDetails>): CourseSection[];
|
|
44
|
-
/**
|
|
48
|
+
export declare function structureOf(state: CourseState, details?: Map<number, ActivityDetails>, summaries?: Map<number, string>): CourseSection[];
|
|
49
|
+
/**
|
|
50
|
+
* A course's sections and activities; with `details`, each activity's dates and restriction and each
|
|
51
|
+
* section's description, from the course page (slower).
|
|
52
|
+
*/
|
|
45
53
|
export declare function courseStructure(context: BrowserContext, siteUrl: string, courseId: number, { details }?: {
|
|
46
54
|
details?: boolean | undefined;
|
|
47
55
|
}): Promise<CourseSection[]>;
|
|
56
|
+
/** An assignment of a course, as `listAssignments` lists it, with the section it's in. */
|
|
48
57
|
export interface CourseAssignment {
|
|
49
58
|
/** The assignment's course module id. */
|
|
50
59
|
id: number;
|
|
@@ -60,7 +69,9 @@ export interface CourseAssignment {
|
|
|
60
69
|
export declare function assignmentsOf(state: CourseState): CourseAssignment[];
|
|
61
70
|
/** The course's assignments, in the course's order, with the section each is in. */
|
|
62
71
|
export declare function listAssignments(context: BrowserContext, siteUrl: string, courseId: number): Promise<CourseAssignment[]>;
|
|
72
|
+
/** An activity the person still has to do, as `pendingActivities` finds it. */
|
|
63
73
|
export interface PendingActivity {
|
|
74
|
+
/** The course module id. */
|
|
64
75
|
activityId: number;
|
|
65
76
|
name: string;
|
|
66
77
|
type: string;
|
|
@@ -71,6 +82,7 @@ export interface PendingActivity {
|
|
|
71
82
|
};
|
|
72
83
|
/** Tracked and not complete, or (completion not tracked) graded and not graded yet. */
|
|
73
84
|
reason: "incomplete" | "not-graded";
|
|
85
|
+
/** The person's completion state, when it's tracked (a `CompletionState`). */
|
|
74
86
|
completion?: string;
|
|
75
87
|
availableToMe: boolean;
|
|
76
88
|
dates?: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { activityDetails, courseState } from "./state.js";
|
|
1
|
+
import { activityDetails, courseDetails, courseState } from "./state.js";
|
|
2
2
|
import { myGrades } from "../grades/user-report.js";
|
|
3
3
|
import { decodeEntities } from "../../core/text.js";
|
|
4
4
|
/** Moodle's completion states (COMPLETION_INCOMPLETE … COMPLETION_COMPLETE_FAIL), by their value. */
|
|
5
5
|
export const COMPLETION_STATES = ["incomplete", "complete", "complete-pass", "complete-fail"];
|
|
6
6
|
/** The state as sections with their activities, in the course's order; details merged when given. */
|
|
7
|
-
export function structureOf(state, details) {
|
|
7
|
+
export function structureOf(state, details, summaries) {
|
|
8
8
|
const cms = new Map(state.cm.map((cm) => [cm.id, cm]));
|
|
9
9
|
return state.section.map((s) => {
|
|
10
10
|
const ids = s.cmlist ?? state.cm.filter((cm) => cm.sectionid === s.id).map((cm) => cm.id);
|
|
@@ -36,16 +36,22 @@ export function structureOf(state, details) {
|
|
|
36
36
|
visible: s.visible ?? true,
|
|
37
37
|
restricted: s.hasrestrictions ?? false,
|
|
38
38
|
url: s.sectionurl,
|
|
39
|
+
...(summaries?.has(Number(s.id)) ? { summary: summaries.get(Number(s.id)) } : {}),
|
|
39
40
|
parentSectionId: s.parentsectionid ? Number(s.parentsectionid) : undefined,
|
|
40
41
|
activities,
|
|
41
42
|
};
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* A course's sections and activities; with `details`, each activity's dates and restriction and each
|
|
47
|
+
* section's description, from the course page (slower).
|
|
48
|
+
*/
|
|
45
49
|
export async function courseStructure(context, siteUrl, courseId, { details = false } = {}) {
|
|
46
50
|
const state = await courseState(context, siteUrl, courseId);
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
if (!details)
|
|
52
|
+
return structureOf(state);
|
|
53
|
+
const extra = await courseDetails(context, siteUrl, courseId, state);
|
|
54
|
+
return structureOf(state, extra.activities, extra.summaries);
|
|
49
55
|
}
|
|
50
56
|
/** The course's assignments, in the course's order. */
|
|
51
57
|
export function assignmentsOf(state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/areas/courses/structure.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,WAAW,EAA0C,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/areas/courses/structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,14 @@ export declare class NotAForumError extends MoodleError {
|
|
|
5
5
|
name: string;
|
|
6
6
|
constructor(message: string);
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Moodle refused to change or delete a post: the editing time is over, the person is neither its
|
|
10
|
+
* author nor a moderator, or it has replies a student can't delete. The message is Moodle's reason.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ForumError extends MoodleError {
|
|
13
|
+
name: string;
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
8
16
|
/** A discussion as the forum page lists it. */
|
|
9
17
|
export interface DiscussionRow {
|
|
10
18
|
id: number;
|
|
@@ -9,6 +9,16 @@ export class NotAForumError extends MoodleError {
|
|
|
9
9
|
super(message, "not-a-forum");
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Moodle refused to change or delete a post: the editing time is over, the person is neither its
|
|
14
|
+
* author nor a moderator, or it has replies a student can't delete. The message is Moodle's reason.
|
|
15
|
+
*/
|
|
16
|
+
export class ForumError extends MoodleError {
|
|
17
|
+
name = "ForumError";
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message, "forum");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
12
22
|
// The page size asked for; the forum pages until a page brings no new discussions.
|
|
13
23
|
const PAGE_SIZE = 100;
|
|
14
24
|
const MAX_PAGES = 50;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discussions.js","sourceRoot":"","sources":["../../../src/areas/forums/discussions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"discussions.js","sourceRoot":"","sources":["../../../src/areas/forums/discussions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,wEAAwE;AACxE,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,IAAI,GAAG,gBAAgB,CAAC;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,WAAW;IAChC,IAAI,GAAG,YAAY,CAAC;IAC7B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAgBD,mFAAmF;AACnF,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,8FAA8F;AAC9F,MAAM,UAAU,kBAAkB,CAAC,IAAU;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAUxB,MAAM,GAAG,GAAI,UAA+C,CAAC,QAAQ,CAAC;QACtE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,2DAA2D,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/G,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACvE,sFAAsF;YACtF,qFAAqF;YACrF,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5D,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnE,OAAO,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1F,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtH,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YACrJ,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;YACjE,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACjD,OAAO,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,2BAA2B,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;gBACxG,MAAM,EAAE,SAAS,IAAI,EAAE;gBACvB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC/E,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;gBAC7J,OAAO,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzD,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;gBACzD,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBACxC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,SAAS;aACvE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB;IAChG,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,yBAAyB,UAAU,MAAM,SAAS,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC;YACH,8CAA8C;YAC9C,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,cAAc,CAAC,YAAY,UAAU,iGAAiG,CAAC,CAAC;YACpJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;YACxB,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;gBAAE,MAAM;QAC5D,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAClC,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB,EAAE,OAAe,EAAE,YAAoB;IAClG,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,gCAAgC,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,CAAC;IACzL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0FAA0F;QAC1F,IAAI,KAAK,YAAY,kBAAkB,IAAI,KAAK,CAAC,SAAS,KAAK,yBAAyB,EAAE,CAAC;YACzF,MAAM,IAAI,cAAc,CAAC,cAAc,YAAY,kFAAkF,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QACzJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB,EAAE,SAAmB;IAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAgC,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtG,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAGD,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB;IAChG,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,cAAc,CAAC,YAAY,UAAU,iGAAiG,CAAC,CAAC;QACpJ,CAAC;QACD,mGAAmG;QACnG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YAClC,MAAM,GAAG,GAAI,UAEX,CAAC,QAAQ,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,yCAAyC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7F,IAAI,QAAQ,GAAG,CAAC;gBAAE,OAAO,QAAQ,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;iBACtD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;iBAC9D,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,cAAc,CAAC,SAAS,UAAU,mEAAmE,CAAC,CAAC;QAC1H,OAAO,EAAE,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { BrowserContext } from "playwright-core";
|
|
2
|
+
/** A person's whole-forum grade. */
|
|
3
|
+
export interface ForumGrade {
|
|
4
|
+
userId: number;
|
|
5
|
+
fullName: string;
|
|
6
|
+
/** As Moodle shows it ("8.00", a scale item's name); left out when not graded. */
|
|
7
|
+
grade?: string;
|
|
8
|
+
/** The number stored: the points, or the scale item's value. */
|
|
9
|
+
value?: number;
|
|
10
|
+
gradedBy?: string;
|
|
11
|
+
/** When it was last changed (ISO 8601). */
|
|
12
|
+
gradedAt?: string;
|
|
13
|
+
}
|
|
14
|
+
/** A forum's whole-forum grades, as `forumGrades` reads them, with how the forum is graded. */
|
|
15
|
+
export interface ForumGrades {
|
|
16
|
+
activityId: number;
|
|
17
|
+
/** "point" (out of `maxGrade`) or "scale" (one of `scale`'s items). */
|
|
18
|
+
method: "point" | "scale";
|
|
19
|
+
maxGrade?: number;
|
|
20
|
+
/** A scale's items, by value. */
|
|
21
|
+
scale?: {
|
|
22
|
+
value: number;
|
|
23
|
+
name: string;
|
|
24
|
+
}[];
|
|
25
|
+
grades: ForumGrade[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Everyone's whole-forum grade in a forum graded as a whole, as its grader shows them: one per
|
|
29
|
+
* person it can grade (only the active ones when the forum says so), with how it's graded. One
|
|
30
|
+
* service call per person. Throws `NotAForumError` for another activity, and `GradingError` when
|
|
31
|
+
* the forum isn't graded as a whole or uses an advanced grading method.
|
|
32
|
+
*/
|
|
33
|
+
export declare function forumGrades(context: BrowserContext, siteUrl: string, activityId: number, { groupId }?: {
|
|
34
|
+
groupId?: number;
|
|
35
|
+
}): Promise<ForumGrades>;
|
|
36
|
+
/**
|
|
37
|
+
* Gives a person their whole-forum grade, as the forum's grader does: points (out of the forum's
|
|
38
|
+
* maximum), or a scale item by name or value; `null` takes the grade away. Moodle's forum grader
|
|
39
|
+
* has no feedback text. `notify` sends the person Moodle's notification, as the grader's checkbox
|
|
40
|
+
* does. Returns a sentence of what changed and the grade afterwards. Throws `GradingError` when the
|
|
41
|
+
* forum isn't graded as a whole, the grade is out of range or not on the scale, or Moodle refuses it.
|
|
42
|
+
*/
|
|
43
|
+
export declare function gradeForumUser(context: BrowserContext, siteUrl: string, activityId: number, userId: number, { grade, notify }: {
|
|
44
|
+
grade: number | string | null;
|
|
45
|
+
notify?: boolean;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
changed: string;
|
|
48
|
+
grade: Omit<ForumGrade, "fullName">;
|
|
49
|
+
}>;
|