Submissions Library
Project goal
Make activity module developers (not only Assignment developers) able to use submission types: both standard and community-developed.
Project scope
A library providing API for activity module submission types support implementation. Actual proposition is to make assignsubmission plugins system-level.
The existing modules requiring submissions (Assignment, Workshop) should use this library.
Relevant tracker issues
- MDL-47344 - Allow usage of submission methods in other plugins
Use cases
- Assignment: no comment.
- Workshop: uses submissions but it's another code doing the same.
- Lesson: as well as questions the submissions could be used at lessons for a small tasks. For example, a task at the end of lesson about MS Paint: draw an your dream house, save it and upload.
- Community module: for example, Assignment with individual tasks could not re-implement all existing submission types.
- Non-mod usage? If there is no such cases this library should only work with activity modules.
Database schema
submissions_bindings
Identifies all connected submission plugins to an activity modules.
Field | Type | Default | Description |
---|---|---|---|
id | bigint | Auto-numbered. | |
context | bigint | Activity context. | |
area | varchar(100) | An area within activity module. A module may have a few. | |
method | varchar(100) | Submission plugin name. It is considered that the plugin is activated in these area of these activity module instance. |
submissions_pluginconfig
Stores plugins configuration.
Field | Type | Default | Description |
---|---|---|---|
id | bigint | Auto-numbered. | |
binding | bigint | Activated plugin. Points to submissions_bindings record. | |
option | varchar(100) | Plugin setting name. | |
value | text | Setting value. |
submissions_instances
Identifies all submissions. A data associated with the submission is stored by plugin.
Field | Type | Default | Description |
---|---|---|---|
id | bigint | Auto-numbered. | |
binding | bigint | Activated plugin. Points to submissions_bindings record. | |
itemid | bigint | null | Identifies an element within area. For example, answer or user id. |
timecreated | bigint | 0 | When the submission was created. |
timemodified | bigint | 0 | Latest submission modification time. |
status | int | 0 | Draft (default), Latest, Archived. |
submissionplugin_onlinetext
This is a table example for "Online text" plugin. This table is not a part of library.
Field | Type | Default | Description |
---|---|---|---|
id | bigint | Auto-numbered. | |
submissioninstance | bigint | Point to submission from submissions_instances table. | |
onlinetext | text | Actual submission data. | |
onlineformat | int | 0 | Text format. |
submissionplugin_file
This is a table example for "File submission" plugin. This table is not a part of library.
Field | Type | Default | Description |
---|---|---|---|
id | bigint | Auto-numbered. | |
submissioninstance | bigint | Point to submission from submissions_instances table. | |
numfiles | bigint | Number of submitted files. |
How it works
API for activity modules
Activity instance settings form
In order to add a plugin settings elements on activity settings page the following method of moodleform_mod should be used:
$this->standard_submission_coursemodule_elements();
Displaying a submission
Activity module should access the submissions using a submission class.
$submission = new submission($context, $area);
First, a submission_instance object should be retrieved.
$submissioninstance = $submission->get_submission_instance($itemid);
Next, it can be displayed.
if ($submissioninstance) {
$submissioninstance->display();
// or
$html = $submissioninstance->render();
}
Displaying submission form
Activity module should access the submissions using a submission class.
$submission = new submission($context, $area);
A special method should be used to add elements on submission form. A previous submission can be loaded by specifying $baseitemid.
$submission->add_submission_form_elements($mform, $baseitemid);
Save/update submission
Activity module should access the submissions using a submission class.
$submission = new submission($context, $area);
To save or update the submission a special method should be used. It accepts submitted form data as its only argument.
$submission->save($formdata);
Delete submission
All submissions associated with the activity module instance can be deleted by using the following static method:
submission::delete_all_for_context($context);
Individual submissions can be deleted this way:
$submission = new submission($context, $area);
$submission->delete($itemid);
General workflow details
Student makes a submission
Teacher views student's submission
Someone tries to download a file from submissionplugin_file
TODO: add more details
Course module deletion
TODO: add more details