@falkenslab/moodle-driver 0.4.1 → 0.5.1

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.
Files changed (185) hide show
  1. package/README.md +3 -2
  2. package/dist/areas/activities/build.d.ts +47 -10
  3. package/dist/areas/activities/build.js +157 -24
  4. package/dist/areas/activities/build.js.map +1 -1
  5. package/dist/areas/activities/conditions.d.ts +77 -0
  6. package/dist/areas/activities/conditions.js +216 -0
  7. package/dist/areas/activities/conditions.js.map +1 -0
  8. package/dist/areas/activities/content.d.ts +3 -0
  9. package/dist/areas/activities/content.js +1 -0
  10. package/dist/areas/activities/content.js.map +1 -1
  11. package/dist/areas/assignments/grader.d.ts +32 -0
  12. package/dist/areas/assignments/grader.js +66 -2
  13. package/dist/areas/assignments/grader.js.map +1 -1
  14. package/dist/areas/assignments/grading.d.ts +69 -6
  15. package/dist/areas/assignments/grading.js +173 -13
  16. package/dist/areas/assignments/grading.js.map +1 -1
  17. package/dist/areas/assignments/student.d.ts +14 -0
  18. package/dist/areas/assignments/student.js +43 -2
  19. package/dist/areas/assignments/student.js.map +1 -1
  20. package/dist/areas/backup/backup.d.ts +86 -0
  21. package/dist/areas/backup/backup.js +368 -0
  22. package/dist/areas/backup/backup.js.map +1 -0
  23. package/dist/areas/calendar/calendar.d.ts +27 -0
  24. package/dist/areas/calendar/calendar.js +115 -9
  25. package/dist/areas/calendar/calendar.js.map +1 -1
  26. package/dist/areas/completion/completion.d.ts +3 -0
  27. package/dist/areas/completion/completion.js.map +1 -1
  28. package/dist/areas/courses/list.d.ts +2 -0
  29. package/dist/areas/courses/list.js.map +1 -1
  30. package/dist/areas/courses/reset.d.ts +51 -0
  31. package/dist/areas/courses/reset.js +123 -0
  32. package/dist/areas/courses/reset.js.map +1 -0
  33. package/dist/areas/courses/state.d.ts +17 -0
  34. package/dist/areas/courses/state.js +37 -6
  35. package/dist/areas/courses/state.js.map +1 -1
  36. package/dist/areas/courses/structure.d.ts +14 -2
  37. package/dist/areas/courses/structure.js +11 -5
  38. package/dist/areas/courses/structure.js.map +1 -1
  39. package/dist/areas/forums/discussions.d.ts +8 -0
  40. package/dist/areas/forums/discussions.js +10 -0
  41. package/dist/areas/forums/discussions.js.map +1 -1
  42. package/dist/areas/forums/grading.d.ts +49 -0
  43. package/dist/areas/forums/grading.js +125 -0
  44. package/dist/areas/forums/grading.js.map +1 -0
  45. package/dist/areas/forums/posts.d.ts +37 -0
  46. package/dist/areas/forums/posts.js +141 -6
  47. package/dist/areas/forums/posts.js.map +1 -1
  48. package/dist/areas/grades/export.d.ts +38 -0
  49. package/dist/areas/grades/export.js +88 -0
  50. package/dist/areas/grades/export.js.map +1 -0
  51. package/dist/areas/grades/gradebook.d.ts +50 -0
  52. package/dist/areas/grades/gradebook.js +120 -0
  53. package/dist/areas/grades/gradebook.js.map +1 -1
  54. package/dist/areas/grades/singleview.d.ts +39 -0
  55. package/dist/areas/grades/singleview.js +186 -0
  56. package/dist/areas/grades/singleview.js.map +1 -0
  57. package/dist/areas/h5p/h5p.d.ts +2 -0
  58. package/dist/areas/h5p/h5p.js +12 -7
  59. package/dist/areas/h5p/h5p.js.map +1 -1
  60. package/dist/areas/lessons/lessons.d.ts +1 -0
  61. package/dist/areas/lessons/lessons.js.map +1 -1
  62. package/dist/areas/messages/messages.d.ts +32 -0
  63. package/dist/areas/messages/messages.js +44 -2
  64. package/dist/areas/messages/messages.js.map +1 -1
  65. package/dist/areas/participants/enrolments.d.ts +60 -0
  66. package/dist/areas/participants/enrolments.js +218 -0
  67. package/dist/areas/participants/enrolments.js.map +1 -0
  68. package/dist/areas/participants/groups.d.ts +75 -0
  69. package/dist/areas/participants/groups.js +201 -0
  70. package/dist/areas/participants/groups.js.map +1 -0
  71. package/dist/areas/participants/methods.d.ts +56 -0
  72. package/dist/areas/participants/methods.js +154 -0
  73. package/dist/areas/participants/methods.js.map +1 -0
  74. package/dist/areas/participants/participants.d.ts +11 -0
  75. package/dist/areas/participants/participants.js +24 -19
  76. package/dist/areas/participants/participants.js.map +1 -1
  77. package/dist/areas/questions/banks.d.ts +36 -1
  78. package/dist/areas/questions/banks.js +140 -17
  79. package/dist/areas/questions/banks.js.map +1 -1
  80. package/dist/areas/quizzes/attempts.d.ts +2 -0
  81. package/dist/areas/quizzes/attempts.js +9 -0
  82. package/dist/areas/quizzes/attempts.js.map +1 -1
  83. package/dist/areas/quizzes/grading.d.ts +50 -0
  84. package/dist/areas/quizzes/grading.js +131 -0
  85. package/dist/areas/quizzes/grading.js.map +1 -0
  86. package/dist/areas/quizzes/results.d.ts +3 -0
  87. package/dist/areas/quizzes/results.js +2 -1
  88. package/dist/areas/quizzes/results.js.map +1 -1
  89. package/dist/areas/quizzes/structure.d.ts +65 -9
  90. package/dist/areas/quizzes/structure.js +222 -23
  91. package/dist/areas/quizzes/structure.js.map +1 -1
  92. package/dist/areas/ratings/ratings.d.ts +26 -0
  93. package/dist/areas/ratings/ratings.js +108 -0
  94. package/dist/areas/ratings/ratings.js.map +1 -0
  95. package/dist/areas/reports/dates.d.ts +18 -0
  96. package/dist/areas/reports/dates.js +134 -0
  97. package/dist/areas/reports/dates.js.map +1 -0
  98. package/dist/areas/reports/reports.d.ts +143 -0
  99. package/dist/areas/reports/reports.js +267 -0
  100. package/dist/areas/reports/reports.js.map +1 -0
  101. package/dist/areas/scorm/scorm.d.ts +1 -0
  102. package/dist/areas/scorm/scorm.js.map +1 -1
  103. package/dist/areas/site/users.d.ts +7 -1
  104. package/dist/areas/site/users.js +9 -2
  105. package/dist/areas/site/users.js.map +1 -1
  106. package/dist/areas/surveys/choice.d.ts +2 -0
  107. package/dist/areas/surveys/choice.js +6 -3
  108. package/dist/areas/surveys/choice.js.map +1 -1
  109. package/dist/areas/surveys/surveys.d.ts +3 -0
  110. package/dist/areas/surveys/surveys.js +1 -0
  111. package/dist/areas/surveys/surveys.js.map +1 -1
  112. package/dist/areas/workshops/workshops.d.ts +133 -0
  113. package/dist/areas/workshops/workshops.js +335 -0
  114. package/dist/areas/workshops/workshops.js.map +1 -0
  115. package/dist/browser/background.d.ts +43 -0
  116. package/dist/browser/background.js +164 -0
  117. package/dist/browser/background.js.map +1 -0
  118. package/dist/browser/host.d.ts +30 -0
  119. package/dist/browser/host.js +373 -0
  120. package/dist/browser/host.js.map +1 -0
  121. package/dist/browser/manager.d.ts +9 -0
  122. package/dist/browser/manager.js +8 -0
  123. package/dist/browser/manager.js.map +1 -1
  124. package/dist/categories.d.ts +1 -0
  125. package/dist/categories.js +67 -0
  126. package/dist/categories.js.map +1 -1
  127. package/dist/cli/args.d.ts +8 -0
  128. package/dist/cli/args.js +49 -0
  129. package/dist/cli/args.js.map +1 -1
  130. package/dist/cli/background.d.ts +23 -0
  131. package/dist/cli/background.js +128 -0
  132. package/dist/cli/background.js.map +1 -0
  133. package/dist/cli/command.d.ts +66 -0
  134. package/dist/cli/command.js +328 -0
  135. package/dist/cli/command.js.map +1 -0
  136. package/dist/cli/commands.generated.js +2635 -577
  137. package/dist/cli/commands.generated.js.map +1 -1
  138. package/dist/cli/config.d.ts +2 -0
  139. package/dist/cli/config.js +2 -0
  140. package/dist/cli/config.js.map +1 -1
  141. package/dist/cli/main.js +30 -10
  142. package/dist/cli/main.js.map +1 -1
  143. package/dist/cli/run.d.ts +3 -14
  144. package/dist/cli/run.js +9 -185
  145. package/dist/cli/run.js.map +1 -1
  146. package/dist/cli/shell.d.ts +9 -0
  147. package/dist/cli/shell.js +233 -0
  148. package/dist/cli/shell.js.map +1 -0
  149. package/dist/client.d.ts +10 -120
  150. package/dist/client.js +77 -8
  151. package/dist/client.js.map +1 -1
  152. package/dist/core/errors.d.ts +1 -1
  153. package/dist/core/errors.js.map +1 -1
  154. package/dist/core/files.d.ts +5 -0
  155. package/dist/core/files.js +7 -3
  156. package/dist/core/files.js.map +1 -1
  157. package/dist/core/forms.d.ts +33 -3
  158. package/dist/core/forms.js +105 -8
  159. package/dist/core/forms.js.map +1 -1
  160. package/dist/core/http.d.ts +7 -0
  161. package/dist/core/http.js +28 -7
  162. package/dist/core/http.js.map +1 -1
  163. package/dist/core/login.d.ts +3 -0
  164. package/dist/core/login.js +2 -0
  165. package/dist/core/login.js.map +1 -1
  166. package/dist/core/session.d.ts +12 -1
  167. package/dist/core/session.js +12 -1
  168. package/dist/core/session.js.map +1 -1
  169. package/dist/index.d.ts +35 -11
  170. package/dist/index.js +32 -12
  171. package/dist/index.js.map +1 -1
  172. package/dist/internals.d.ts +9 -1
  173. package/dist/internals.js +9 -4
  174. package/dist/internals.js.map +1 -1
  175. package/dist/moodle-methods.generated.d.ts +1127 -0
  176. package/dist/moodle-methods.generated.js +4 -0
  177. package/dist/moodle-methods.generated.js.map +1 -0
  178. package/dist/options.d.ts +2 -0
  179. package/dist/options.js.map +1 -1
  180. package/dist/testing/fakeMoodle.d.ts +9 -2
  181. package/dist/testing/fakeMoodle.js +5 -3
  182. package/dist/testing/fakeMoodle.js.map +1 -1
  183. package/dist/testing/index.d.ts +7 -0
  184. package/dist/testing/index.js.map +1 -1
  185. package/package.json +2 -1
package/README.md CHANGED
@@ -37,7 +37,7 @@ That's it: no API keys, nothing to ask the administrator. The browser closes by
37
37
  ## 🧰 What it can do
38
38
 
39
39
  <div align="center">
40
- <img src="docs/static/img/diagrams/what-it-can-do.svg" alt="As a student: agenda, content, assignments, quizzes, surveys, lessons, grades, forums. As a teacher: build courses, grade with rubrics, extensions and overrides, quiz results, question banks, gradebook, participants, completion, calendar. For your program: typed methods, a moodle command, errors with codes, any AJAX service, data categories, a fake Moodle for tests." width="900"/>
40
+ <img src="docs/static/img/diagrams/what-it-can-do.svg" alt="As a student: agenda, content, assignments, quizzes, surveys, lessons, H5P and SCORM, grades, forums. As a teacher: build, copy, back up and reset courses, grade with rubrics and the marking workflow, extensions and overrides, quiz results and essays, question banks, the gradebook, enrolments, roles and groups, restrictions and completion, calendar, forums and logs. For your program: typed methods, a moodle command and shell, errors with codes, any AJAX service, data categories, a fake Moodle for tests." width="900"/>
41
41
  </div>
42
42
 
43
43
  ## 🚀 A taste
@@ -80,7 +80,7 @@ moodle grade-submission 35 7 --grade 8.5 --feedback "<p>Great work!</p>" --notif
80
80
  moodle my-grades 3 --json | jq '.[] | select(.grade) | .name'
81
81
  ```
82
82
 
83
- Tables at a terminal, JSON for scripts, errors with their code and an exit status. `moodle help` lists every command, generated from the API so none is missing; `--allow own,course-content` refuses anything touching other people's data. See [the command line](https://falkenslab.github.io/moodle-driver/getting-started/command-line).
83
+ Tables at a terminal, JSON for scripts, errors with their code and an exit status. `moodle help` lists every command, generated from the API so none is missing; `--allow own,course-content` refuses anything touching other people's data. `moodle shell --show` keeps one browser open while you type commands, to watch each act, and `moodle open --show` leaves one open for separate commands from any terminal (reachable only with a token of yours) until `moodle close`. See [the command line](https://falkenslab.github.io/moodle-driver/getting-started/command-line).
84
84
 
85
85
  ## 💡 Why it's different
86
86
 
@@ -121,6 +121,7 @@ You need Node.js 20+, a Moodle 4.x or 5.x site, and Edge or Chrome (or let it do
121
121
  npm install
122
122
  npm run typecheck && npm run lint
123
123
  npm run test:docker # the tests open browsers: always in Docker, never on the desktop
124
+ npm run test:sandbox # every function against a real Moodle (the sandbox), on demand (it takes hours)
124
125
  npm run build # dist/, with declarations
125
126
  npm run docs:check # every example in the docs compiles against the code
126
127
  ```
@@ -1,9 +1,11 @@
1
1
  import type { BrowserContext, Page } from "playwright-core";
2
- import { type FieldValue } from "../../core/forms.js";
2
+ import { type DraftFile, type DraftUpload, type FieldValue } from "../../core/forms.js";
3
3
  import { type CourseSection } from "../courses/structure.js";
4
4
  import { MoodleError } from "../../core/errors.js";
5
+ import { type Completion, type Restrictions } from "./conditions.js";
5
6
  /** "stealth": hidden from the course page but available by link, where the site allows it. */
6
7
  export declare const ACTIVITY_VISIBILITIES: readonly ["shown", "hidden", "stealth"];
8
+ /** One of `ACTIVITY_VISIBILITIES`: how an activity shows to students. */
7
9
  export type ActivityVisibility = (typeof ACTIVITY_VISIBILITIES)[number];
8
10
  /** The common inputs of an activity's form; anything else goes in `settings` by its form field name. */
9
11
  export interface ActivityFields {
@@ -15,6 +17,10 @@ export interface ActivityFields {
15
17
  /** A URL resource's target. */
16
18
  url?: string;
17
19
  visibility?: ActivityVisibility;
20
+ /** When students can open it (`{ conditions: [] }` removes every restriction). */
21
+ restrictions?: Restrictions;
22
+ /** When it counts as complete. */
23
+ completion?: Completion;
18
24
  settings?: Record<string, FieldValue>;
19
25
  }
20
26
  /** What a change did, its new id when it created something, and the course afterwards. */
@@ -23,21 +29,39 @@ export interface CourseChange {
23
29
  activityId?: number;
24
30
  sectionId?: number;
25
31
  url?: string;
32
+ /** A file resource's or folder's files after `updateActivity` changed them. */
33
+ files?: DraftFile[];
26
34
  sections: CourseSection[];
27
35
  }
36
+ /**
37
+ * Changes to a file resource's or folder's files: `add` local paths (a `DraftUpload` puts one under
38
+ * another name or in a subfolder, `"week1/notes.pdf"`), `remove` files by their path in the activity,
39
+ * or `replace` the whole set. A file added with the name of one already there replaces it.
40
+ */
41
+ export interface FileChanges {
42
+ add?: (string | DraftUpload)[];
43
+ remove?: string[];
44
+ replace?: (string | DraftUpload)[];
45
+ }
28
46
  /**
29
47
  * Creates an activity or resource of any type at the end of a section, through Moodle's own form,
30
48
  * hidden from students unless `visibility` says otherwise. `files` are local paths uploaded to a file
31
- * resource or folder; a SCORM (`type: "scorm"`) takes the first as its package.
49
+ * resource or folder (a `DraftUpload` puts one in a folder's subfolder); a SCORM (`type: "scorm"`) or
50
+ * an H5P activity (`type: "h5pactivity"`) takes the first as its package.
32
51
  */
33
52
  export declare function createActivity(context: BrowserContext, siteUrl: string, input: ActivityFields & {
34
53
  courseId: number;
35
54
  sectionId: number;
36
55
  type: string;
37
- files?: string[];
56
+ files?: (string | DraftUpload)[];
57
+ }): Promise<CourseChange>;
58
+ /**
59
+ * Changes an existing activity through its form: only what's given changes. A file resource's or
60
+ * folder's files stay as they are unless `files` says what to add, remove or replace.
61
+ */
62
+ export declare function updateActivity(context: BrowserContext, siteUrl: string, activityId: number, input: ActivityFields & {
63
+ files?: FileChanges;
38
64
  }): Promise<CourseChange>;
39
- /** Changes an existing activity through its form: only what's given changes; files stay as they are. */
40
- export declare function updateActivity(context: BrowserContext, siteUrl: string, activityId: number, input: ActivityFields): Promise<CourseChange>;
41
65
  /** Renames, shows or hides, or moves an activity (to a section's end, or before another one). */
42
66
  export declare function editActivity(context: BrowserContext, siteUrl: string, courseId: number, activityId: number, { name, visibility, sectionId, beforeActivityId }: {
43
67
  name?: string;
@@ -49,15 +73,21 @@ export declare function editActivity(context: BrowserContext, siteUrl: string, c
49
73
  export declare function duplicateActivity(context: BrowserContext, siteUrl: string, courseId: number, activityId: number): Promise<CourseChange>;
50
74
  /** Deletes an activity, with its participants' data (submissions, posts, attempts); gives the course afterwards. */
51
75
  export declare function deleteActivity(context: BrowserContext, siteUrl: string, courseId: number, activityId: number): Promise<CourseChange>;
52
- /** Adds a section after another one (at the end without it), named when a name is given. */
53
- export declare function addSection(context: BrowserContext, siteUrl: string, courseId: number, { name, afterSectionId }?: {
76
+ /** Adds a section after another one (at the end without it), named when a name is given, with a description (HTML) when `summary` is. */
77
+ export declare function addSection(context: BrowserContext, siteUrl: string, courseId: number, { name, afterSectionId, summary }?: {
54
78
  name?: string;
55
79
  afterSectionId?: number;
80
+ summary?: string;
56
81
  }): Promise<CourseChange>;
57
- /** Renames, shows or hides, or moves a section after another one. */
58
- export declare function editSection(context: BrowserContext, siteUrl: string, courseId: number, sectionId: number, { name, visible, afterSectionId }: {
82
+ /**
83
+ * Renames, shows or hides, describes (`summary`, HTML), restricts (`restrictions`; `{ conditions: [] }`
84
+ * removes them) or moves a section after another one.
85
+ */
86
+ export declare function editSection(context: BrowserContext, siteUrl: string, courseId: number, sectionId: number, { name, visible, summary, restrictions, afterSectionId }: {
59
87
  name?: string;
60
88
  visible?: boolean;
89
+ summary?: string;
90
+ restrictions?: Restrictions;
61
91
  afterSectionId?: number;
62
92
  }): Promise<CourseChange>;
63
93
  /** Deletes a section and every activity in it, with their participants' data. */
@@ -86,7 +116,8 @@ export declare class ActivitySettingsError extends MoodleError {
86
116
  }
87
117
  /**
88
118
  * An activity's settings as its form holds them, without submitting it: its module, name and
89
- * description, and every field by the name `updateActivity` takes in `settings`. Teachers only.
119
+ * description, every field by the name `updateActivity` takes in `settings`, the files of a
120
+ * resource, folder or SCORM, and its restrictions and completion in plain terms. Teachers only.
90
121
  */
91
122
  export declare function activitySettings(context: BrowserContext, siteUrl: string, activityId: number): Promise<{
92
123
  id: number;
@@ -95,4 +126,10 @@ export declare function activitySettings(context: BrowserContext, siteUrl: strin
95
126
  name: string;
96
127
  description: string;
97
128
  fields: FormField[];
129
+ /** A file resource's, folder's, SCORM's or H5P activity's files, by their path in it, as `updateActivity`'s `files.remove` takes them. */
130
+ files: DraftFile[] | undefined;
131
+ /** When students can open it, in the terms `updateActivity` takes; undefined without restrictions. */
132
+ restrictions: Restrictions | undefined;
133
+ /** When it counts as complete, in the terms `updateActivity` takes; undefined when completion is off. */
134
+ completion: Completion | undefined;
98
135
  }>;
@@ -1,17 +1,48 @@
1
+ // Building a course: activities through Moodle's own activity form, and the course page's editing
2
+ // (rename, show, move, duplicate, delete) through its services. Every change answers with the
3
+ // course's structure afterwards, to check it.
4
+ import path from "node:path";
1
5
  import { courseState } from "../courses/state.js";
2
6
  import { editCourse, renameActivity, renameSection } from "../../core/editor.js";
3
7
  import { checkLocalFiles } from "../../core/files.js";
4
- import { formValue, openForm, setFields, submitForm, uploadToDraft } from "../../core/forms.js";
8
+ import { deleteDraftFile, draftFiles, formValue, openForm, setFields, submitForm, uploadToDraft } from "../../core/forms.js";
5
9
  import { inPage } from "../../core/inPage.js";
6
10
  import { moodleErrorMessage, openSitePage } from "../../core/session.js";
7
11
  import { structureOf } from "../courses/structure.js";
12
+ import { questionBanks } from "../questions/banks.js";
8
13
  import { MoodleError } from "../../core/errors.js";
14
+ import { completionValues, gradeItemsByActivity, hasGradeCondition, parseRestrictions, readCompletion, restrictionsJson } from "./conditions.js";
9
15
  /** "stealth": hidden from the course page but available by link, where the site allows it. */
10
16
  export const ACTIVITY_VISIBILITIES = ["shown", "hidden", "stealth"];
11
17
  const FORM_VISIBILITY = { shown: 1, hidden: 0, stealth: -1 };
12
18
  const VISIBILITY_ACTIONS = { shown: "cm_show", hidden: "cm_hide", stealth: "cm_stealth" };
13
- /** The form values the common inputs stand for, given the activity's type. */
14
- function fieldsFor(type, input) {
19
+ /** The availability field's value for `restrictions`, the gradebook read first when a grade condition needs it. */
20
+ async function availabilityValue(context, siteUrl, courseId, restrictions) {
21
+ const grades = restrictions.conditions.some((c) => c.type === "grade") ? await gradeItemsByActivity(context, siteUrl, courseId) : undefined;
22
+ // Moodle saves a condition on an id the course doesn't have without a word (a group's, confirmed empirically, 5.2): an activity's is checked here.
23
+ const completions = restrictions.conditions.flatMap((c) => (c.type === "completion" ? [c.activityId] : []));
24
+ if (completions.length > 0) {
25
+ const ids = new Set((await courseState(context, siteUrl, courseId)).cm.map((cm) => Number(cm.id)));
26
+ const unknown = completions.filter((id) => !ids.has(id));
27
+ if (unknown.length > 0)
28
+ throw new MoodleError(`Course ${courseId} has no activity ${unknown.join(", ")} for a completion condition. Take its id from the course structure.`, "not-found");
29
+ }
30
+ return restrictionsJson(restrictions, grades);
31
+ }
32
+ /** The form values for an activity's restrictions and completion, refused when the form has no place for them. */
33
+ async function conditionValues(context, siteUrl, page, courseId, input) {
34
+ const values = {};
35
+ if (input.restrictions) {
36
+ if ((await formValue(page, "availabilityconditionsjson")) === undefined)
37
+ throw new MoodleError("This form has no access restrictions: they're off on the site.", "not-available");
38
+ values.availabilityconditionsjson = await availabilityValue(context, siteUrl, courseId, input.restrictions);
39
+ }
40
+ if (input.completion !== undefined)
41
+ Object.assign(values, await completionValues(page, input.completion));
42
+ return values;
43
+ }
44
+ /** The form values the common inputs stand for, given the activity's type, then `extra`, then `settings` (which win). */
45
+ function fieldsFor(type, input, extra = {}) {
15
46
  const values = {};
16
47
  if (input.name !== undefined)
17
48
  values.name = input.name;
@@ -30,42 +61,77 @@ function fieldsFor(type, input) {
30
61
  values.externalurl = input.url;
31
62
  if (input.visibility !== undefined)
32
63
  values.visible = FORM_VISIBILITY[input.visibility];
33
- return { ...values, ...input.settings };
64
+ return { ...values, ...extra, ...input.settings };
34
65
  }
35
66
  async function afterChange(context, siteUrl, courseId, changed, extra = {}) {
36
67
  return { changed, ...extra, sections: structureOf(await courseState(context, siteUrl, courseId)) };
37
68
  }
69
+ const localPaths = (files = []) => files.map((file) => (typeof file === "string" ? file : file.from));
70
+ /**
71
+ * The form's file area: the files of a resource or folder, or the one package of a SCORM or an H5P
72
+ * activity (`packagefile` in both forms, confirmed empirically, 5.2).
73
+ */
74
+ async function fileArea(page) {
75
+ const files = await formValue(page, "files");
76
+ if (files)
77
+ return { draft: files, single: false };
78
+ const pkg = await formValue(page, "packagefile");
79
+ return pkg ? { draft: pkg, single: true } : undefined;
80
+ }
81
+ /** Applies `changes` to the draft area `draft` and says what was done; refuses a file to remove that isn't there. */
82
+ async function changeFiles(page, draft, changes) {
83
+ const done = [];
84
+ const current = await draftFiles(page, draft);
85
+ const removing = changes.replace ? current.map((file) => file.name) : (changes.remove ?? []);
86
+ const missing = removing.filter((name) => !current.some((file) => file.name === name));
87
+ if (missing.length > 0) {
88
+ throw new MoodleError(`The activity has no file ${missing.map((name) => `"${name}"`).join(", ")}; it has ${current.map((file) => `"${file.name}"`).join(", ") || "none"}.`, "not-found");
89
+ }
90
+ for (const name of removing)
91
+ await deleteDraftFile(page, draft, name);
92
+ if (removing.length > 0)
93
+ done.push(`removed ${removing.join(", ")}`);
94
+ const adding = changes.replace ?? changes.add ?? [];
95
+ if (adding.length > 0) {
96
+ await uploadToDraft(page, draft, adding, { overwrite: true });
97
+ done.push(`added ${adding.map((file) => (typeof file === "string" ? path.basename(file) : file.to)).join(", ")}`);
98
+ }
99
+ return { done: done.join(" and "), files: await draftFiles(page, draft) };
100
+ }
38
101
  /**
39
102
  * Creates an activity or resource of any type at the end of a section, through Moodle's own form,
40
103
  * hidden from students unless `visibility` says otherwise. `files` are local paths uploaded to a file
41
- * resource or folder; a SCORM (`type: "scorm"`) takes the first as its package.
104
+ * resource or folder (a `DraftUpload` puts one in a folder's subfolder); a SCORM (`type: "scorm"`) or
105
+ * an H5P activity (`type: "h5pactivity"`) takes the first as its package.
42
106
  */
43
107
  export async function createActivity(context, siteUrl, input) {
44
108
  if (input.files)
45
- await checkLocalFiles(input.files);
109
+ await checkLocalFiles(localPaths(input.files));
46
110
  const before = await courseState(context, siteUrl, input.courseId);
47
111
  const target = before.section.find((s) => Number(s.id) === input.sectionId);
48
112
  if (!target)
49
113
  throw new MoodleError(`Course ${input.courseId} has no section ${input.sectionId}. Take its id from the course structure.`, "not-found");
114
+ // A shared question bank (qbank) never shows on the course page: the banks page tells the new one.
115
+ const bankIds = input.type === "qbank" ? new Set((await questionBanks(context, siteUrl, input.courseId)).map((bank) => bank.id)) : undefined;
50
116
  const page = await openForm(context, siteUrl, `course/modedit.php?add=${input.type}&course=${input.courseId}&section=${target.number}&return=0`);
51
117
  try {
52
118
  if (input.files && input.files.length > 0) {
53
- // A SCORM takes one package, in a field of its own.
54
- const scorm = input.type === "scorm";
55
- const draft = await formValue(page, scorm ? "packagefile" : "files");
56
- if (!draft)
119
+ // A SCORM or an H5P activity takes one package, in a field of its own.
120
+ const area = await fileArea(page);
121
+ if (!area)
57
122
  throw new MoodleError(`A ${input.type} takes no files in its form.`, "not-available");
58
- await uploadToDraft(page, draft, scorm ? input.files.slice(0, 1) : input.files);
123
+ await uploadToDraft(page, area.draft, area.single ? input.files.slice(0, 1) : input.files);
59
124
  }
60
125
  // Hidden unless asked: a teacher publishes after checking.
61
- await setFields(page, fieldsFor(input.type, { ...input, visibility: input.visibility ?? "hidden" }));
126
+ await setFields(page, fieldsFor(input.type, { ...input, visibility: input.visibility ?? "hidden" }, await conditionValues(context, siteUrl, page, input.courseId, input)));
62
127
  await submitForm(page, "submitbutton2");
63
128
  }
64
129
  finally {
65
130
  await page.close().catch(() => undefined);
66
131
  }
67
132
  const after = await courseState(context, siteUrl, input.courseId);
68
- const created = after.cm.find((cm) => !before.cm.some((old) => old.id === cm.id));
133
+ const bank = bankIds && (await questionBanks(context, siteUrl, input.courseId)).find((b) => !bankIds.has(b.id) && b.type === "qbank");
134
+ const created = bank ? { id: String(bank.id), name: bank.name, url: new URL(`mod/qbank/view.php?id=${bank.id}`, siteUrl).href } : after.cm.find((cm) => !before.cm.some((old) => old.id === cm.id));
69
135
  return {
70
136
  changed: created ? `Created ${input.type} ${created.id} "${created.name}" in section ${target.number}.` : `The form was saved, but no new activity appears in course ${input.courseId}.`,
71
137
  activityId: created ? Number(created.id) : undefined,
@@ -73,14 +139,29 @@ export async function createActivity(context, siteUrl, input) {
73
139
  sections: structureOf(after),
74
140
  };
75
141
  }
76
- /** Changes an existing activity through its form: only what's given changes; files stay as they are. */
142
+ /**
143
+ * Changes an existing activity through its form: only what's given changes. A file resource's or
144
+ * folder's files stay as they are unless `files` says what to add, remove or replace.
145
+ */
77
146
  export async function updateActivity(context, siteUrl, activityId, input) {
147
+ const { files, ...fields } = input;
148
+ if (files?.replace && (files.add || files.remove))
149
+ throw new MoodleError("Give files.replace alone, or files.add and files.remove.", "invalid-input");
150
+ if (files)
151
+ await checkLocalFiles([...localPaths(files.add), ...localPaths(files.replace)]);
78
152
  const page = await openForm(context, siteUrl, `course/modedit.php?update=${activityId}&return=0`);
79
153
  let courseId;
154
+ let filesDone;
80
155
  try {
81
156
  courseId = Number(await formValue(page, "course"));
82
157
  const type = (await formValue(page, "modulename")) ?? "";
83
- await setFields(page, fieldsFor(type, input));
158
+ if (files) {
159
+ const area = await fileArea(page);
160
+ if (!area)
161
+ throw new MoodleError(`A ${type} has no files in its form.`, "not-available");
162
+ filesDone = await changeFiles(page, area.draft, files);
163
+ }
164
+ await setFields(page, fieldsFor(type, fields, await conditionValues(context, siteUrl, page, courseId, fields)));
84
165
  await submitForm(page, "submitbutton2");
85
166
  }
86
167
  finally {
@@ -88,7 +169,8 @@ export async function updateActivity(context, siteUrl, activityId, input) {
88
169
  }
89
170
  const after = await courseState(context, siteUrl, courseId);
90
171
  const cm = after.cm.find((c) => Number(c.id) === activityId);
91
- return { changed: `Updated activity ${activityId}${cm ? ` "${cm.name}"` : ""}.`, activityId: activityId, url: cm?.url, sections: structureOf(after) };
172
+ const done = filesDone?.done ? `: ${filesDone.done}` : "";
173
+ return { changed: `Updated activity ${activityId}${cm ? ` "${cm.name}"` : ""}${done}.`, activityId: activityId, url: cm?.url, files: filesDone?.files, sections: structureOf(after) };
92
174
  }
93
175
  /** Renames, shows or hides, or moves an activity (to a section's end, or before another one). */
94
176
  export async function editActivity(context, siteUrl, courseId, activityId, { name, visibility, sectionId, beforeActivityId }) {
@@ -119,22 +201,58 @@ export async function deleteActivity(context, siteUrl, courseId, activityId) {
119
201
  await editCourse(context, siteUrl, courseId, "cm_delete", [activityId]);
120
202
  return afterChange(context, siteUrl, courseId, `Activity ${activityId} deleted.`);
121
203
  }
122
- /** Adds a section after another one (at the end without it), named when a name is given. */
123
- export async function addSection(context, siteUrl, courseId, { name, afterSectionId } = {}) {
204
+ /**
205
+ * Saves fields of a section's own form (`course/editsection.php`): its description, its access
206
+ * restrictions. No service changes them (`core_course_edit_section` only shows, hides and moves).
207
+ */
208
+ async function saveSectionForm(context, siteUrl, courseId, sectionId, values) {
209
+ const page = await openForm(context, siteUrl, `course/editsection.php?id=${sectionId}`);
210
+ try {
211
+ // The form edits any section by its id: one of another course is refused, as the course editor's service does.
212
+ if (Number(await formValue(page, "course")) !== courseId)
213
+ throw new MoodleError(`Course ${courseId} has no section ${sectionId}. Take its id from the course structure.`, "not-found");
214
+ await setFields(page, values);
215
+ await submitForm(page, "submitbutton");
216
+ }
217
+ finally {
218
+ await page.close().catch(() => undefined);
219
+ }
220
+ }
221
+ /** Adds a section after another one (at the end without it), named when a name is given, with a description (HTML) when `summary` is. */
222
+ export async function addSection(context, siteUrl, courseId, { name, afterSectionId, summary } = {}) {
124
223
  const before = new Set((await courseState(context, siteUrl, courseId)).section.map((s) => s.id));
125
224
  await editCourse(context, siteUrl, courseId, "section_add", [], { sectionId: afterSectionId });
126
225
  const added = (await courseState(context, siteUrl, courseId)).section.find((s) => !before.has(s.id));
127
226
  if (added && name !== undefined)
128
227
  await renameSection(context, siteUrl, courseId, Number(added.id), name);
129
- return afterChange(context, siteUrl, courseId, `Section ${added?.id ?? "?"} added${name !== undefined ? ` as "${name}"` : ""}.`, { sectionId: added ? Number(added.id) : undefined });
228
+ if (added && summary !== undefined)
229
+ await saveSectionForm(context, siteUrl, courseId, Number(added.id), { "summary_editor[text]": summary });
230
+ const extras = `${name !== undefined ? ` as "${name}"` : ""}${summary !== undefined ? " with a description" : ""}`;
231
+ return afterChange(context, siteUrl, courseId, `Section ${added?.id ?? "?"} added${extras}.`, { sectionId: added ? Number(added.id) : undefined });
130
232
  }
131
- /** Renames, shows or hides, or moves a section after another one. */
132
- export async function editSection(context, siteUrl, courseId, sectionId, { name, visible, afterSectionId }) {
233
+ /**
234
+ * Renames, shows or hides, describes (`summary`, HTML), restricts (`restrictions`; `{ conditions: [] }`
235
+ * removes them) or moves a section after another one.
236
+ */
237
+ export async function editSection(context, siteUrl, courseId, sectionId, { name, visible, summary, restrictions, afterSectionId }) {
133
238
  const done = [];
134
239
  if (name !== undefined) {
135
240
  await renameSection(context, siteUrl, courseId, sectionId, name);
136
241
  done.push(`renamed to "${name}"`);
137
242
  }
243
+ if (summary !== undefined || restrictions !== undefined) {
244
+ // One save of the section's form for both.
245
+ const values = {};
246
+ if (summary !== undefined)
247
+ values["summary_editor[text]"] = summary;
248
+ if (restrictions !== undefined)
249
+ values.availabilityconditionsjson = await availabilityValue(context, siteUrl, courseId, restrictions);
250
+ await saveSectionForm(context, siteUrl, courseId, sectionId, values);
251
+ if (summary !== undefined)
252
+ done.push(summary === "" ? "description removed" : "description set");
253
+ if (restrictions !== undefined)
254
+ done.push(restrictions.conditions.length === 0 ? "restrictions removed" : "restrictions set");
255
+ }
138
256
  if (visible !== undefined) {
139
257
  await editCourse(context, siteUrl, courseId, visible ? "section_show" : "section_hide", [sectionId]);
140
258
  done.push(visible ? "shown" : "hidden");
@@ -221,7 +339,8 @@ export class ActivitySettingsError extends MoodleError {
221
339
  }
222
340
  /**
223
341
  * An activity's settings as its form holds them, without submitting it: its module, name and
224
- * description, and every field by the name `updateActivity` takes in `settings`. Teachers only.
342
+ * description, every field by the name `updateActivity` takes in `settings`, the files of a
343
+ * resource, folder or SCORM, and its restrictions and completion in plain terms. Teachers only.
225
344
  */
226
345
  export async function activitySettings(context, siteUrl, activityId) {
227
346
  const page = await openSitePage(context, siteUrl, `course/modedit.php?update=${activityId}&return=0`);
@@ -232,13 +351,27 @@ export async function activitySettings(context, siteUrl, activityId) {
232
351
  await page.waitForLoadState("load");
233
352
  const fields = await readFormFields(page);
234
353
  const value = (name) => fields.find((f) => f.name === name)?.value;
354
+ const module = (await formValue(page, "modulename")) ?? "";
355
+ const draft = (await fileArea(page))?.draft;
356
+ const courseId = Number(await formValue(page, "course"));
357
+ const availability = value("availabilityconditionsjson");
358
+ // A grade condition names a grade item: its activity comes from the gradebook, when the person can read it.
359
+ const gradeActivities = availability && hasGradeCondition(availability)
360
+ ? new Map([...(await gradeItemsByActivity(context, siteUrl, courseId).catch(() => new Map()))].map(([activityId, itemId]) => [itemId, activityId]))
361
+ : undefined;
235
362
  return {
236
363
  id: activityId,
237
- module: (await formValue(page, "modulename")) ?? "",
238
- courseId: Number(await formValue(page, "course")),
364
+ module,
365
+ courseId,
239
366
  name: value("name") ?? "",
240
367
  description: value("introeditor[text]") ?? "",
241
368
  fields,
369
+ /** A file resource's, folder's, SCORM's or H5P activity's files, by their path in it, as `updateActivity`'s `files.remove` takes them. */
370
+ files: draft ? await draftFiles(page, draft) : undefined,
371
+ /** When students can open it, in the terms `updateActivity` takes; undefined without restrictions. */
372
+ restrictions: parseRestrictions(availability, gradeActivities),
373
+ /** When it counts as complete, in the terms `updateActivity` takes; undefined when completion is off. */
374
+ completion: await readCompletion(page),
242
375
  };
243
376
  }
244
377
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/areas/activities/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/areas/activities/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { BrowserContext, Page } from "playwright-core";
2
+ import { type CompletionState } from "../courses/structure.js";
3
+ import { type FieldValue } from "../../core/forms.js";
4
+ /**
5
+ * One access condition: a date range (from, until or both), a grade in another activity (`min`, `max`
6
+ * as percentages of its maximum grade), another activity's completion state, or a group's members.
7
+ * Read back, a condition the driver has no terms for (a grouping, a user profile field, a nested set)
8
+ * is `{ type: "other", json }`, Moodle's own; it's written back as given.
9
+ */
10
+ export type Restriction = {
11
+ type: "date";
12
+ from?: Date | string;
13
+ until?: Date | string;
14
+ } | {
15
+ type: "grade";
16
+ activityId: number;
17
+ min?: number;
18
+ max?: number;
19
+ } | {
20
+ type: "completion";
21
+ activityId: number;
22
+ state: CompletionState;
23
+ } | {
24
+ type: "group";
25
+ groupId: number;
26
+ } | {
27
+ type: "other";
28
+ json: unknown;
29
+ };
30
+ /**
31
+ * When an activity or section is available: `conditions`, all of them met (`match: "all"`, the
32
+ * default) or any; while not met, shown to students greyed out with the conditions (the default) or
33
+ * `hidden` from them. No conditions: always available.
34
+ */
35
+ export interface Restrictions {
36
+ conditions: Restriction[];
37
+ match?: "all" | "any";
38
+ hidden?: boolean;
39
+ }
40
+ /**
41
+ * When an activity counts as complete: not tracked (`"none"`), marked by the student (`"manual"`),
42
+ * or on conditions: viewing it, receiving a grade, a passing grade, submitting it (assignments,
43
+ * choices), with an expected completion date shown to students. Read back, the conditions the
44
+ * driver has no terms for (a forum's number of posts) are left out: `activitySettings`' fields have them.
45
+ */
46
+ export type Completion = "none" | "manual" | {
47
+ view?: boolean;
48
+ grade?: boolean;
49
+ passGrade?: boolean;
50
+ submit?: boolean;
51
+ expected?: Date | string;
52
+ };
53
+ /**
54
+ * Moodle's availability JSON for `restrictions`. A grade condition takes the activity's grade item
55
+ * from `gradeItems` (activity id to grade item id, from the gradebook setup).
56
+ */
57
+ export declare function restrictionsJson(restrictions: Restrictions, gradeItems?: Map<number, number>): string;
58
+ /** Whether Moodle's availability JSON has a grade condition (reading it back needs the gradebook). */
59
+ export declare function hasGradeCondition(json: string): boolean;
60
+ /**
61
+ * The restrictions in Moodle's availability JSON, in plain terms; undefined when there are none. A
62
+ * negated set ("must not") has no plain terms: it comes whole as one `other` condition.
63
+ */
64
+ export declare function parseRestrictions(json: string | undefined, gradeActivities?: Map<number, number>): Restrictions | undefined;
65
+ /**
66
+ * The course's grade items by the activity they belong to, from the gradebook setup page (each item's
67
+ * row links to its activity): Moodle's grade condition names a grade item, not an activity. An
68
+ * activity with several items (a forum's whole-forum grade and ratings) maps to the first.
69
+ */
70
+ export declare function gradeItemsByActivity(context: BrowserContext, siteUrl: string, courseId: number): Promise<Map<number, number>>;
71
+ /**
72
+ * The form values for `completion` in an activity's form, in the order to set them (each enables the
73
+ * next): conditions not given are turned off. Refuses a condition the module's form doesn't have.
74
+ */
75
+ export declare function completionValues(page: Page, completion: Completion): Promise<Record<string, FieldValue>>;
76
+ /** An activity's completion in plain terms, from its form; undefined when the form has no completion settings. */
77
+ export declare function readCompletion(page: Page): Promise<Completion | undefined>;