Submission File System


The submission file system provides a workflow for students to submit answers to Moodle in a reliable and standardized format. This can greatly help with parameterized or auto-marked assignments, ensuring that all submissions meet the auto-marker specifications.

The intended workflow when using the Submission File System.
The intended workflow when using the Submission File System.

Why Bother?

At the time of writing, there is no easy way to have students submit answers to parameterized (student specific) assignments. Moodle’s own quiz tool requires all answers to be known and has no way of tracking which student was given which question. There is also no way to programmatically adjust question values for each student and then track those values when generating expected answers.

The submission file system attempts to address this problem by providing a means for students to submit software friendly solutions. It is currently intended that this be done under anonymous submission, making it possible to use the student candidate number to modify question values and calculate expected answers.

Creating Submission File Form

The submission file system provides student results in an easy to manage JSON format. This is achieved through the Submission File Form.

The submission file form may be defined on any page using the following syntax:

{% sf_form %}
... Form Content ...
{% endsf_form %}
Code snippet

This generates a simple card-based form, with a pre-programmed submission button that will record and generate a submission file for the student to download.

… Form Content …

At this stage, we haven’t provided any inputs for the student. This means that the button at the bottom of the form will just download an empty JSON file named ‘submission.json’.

Adding Form Content

Like the more general cards, submission forms allow you to enter any content you desire using the same syntax and in a normal page. This means that you can have headings or even other cards within your submission forms:

A simple submission form

There is no way for students to enter any information into this form yet, but we’ll get there in a second. Using standard markdown we can ask students questions or provide information internally within the form.

Adding input fields

The submission forms power is within its supported input fields. These allow you to collect a range of answers from students, grouping them into a single JSON file format.

You can find your candidate number via SAMIS under 'Student Tasks'.

Exercise 1

Record your findings for exercise 1 in the fields below:

This input is limited between 0-1000 in steps of 0.01.

What type of filter does this represent:

Exercise 2

Select each of the true statements from the options below:

Note: You can suppress the generation of the download button at the bottom of this form, using:

{% sf_form nobutton %}
Code snippet

You can then place the download button anywhere in the form using:

{% include sf_download %}
Code snippet

There are a handful of different input fields supported by AutoNote.


SF Input Field: Candidate Number

This input field is used to record a students candidate number. At present, there can only be one of these on each page. If you wish to use two different submission forms on the same page, it is recommended that you instead use the numeric or text input fields described below.

You can find your candidate number via SAMIS under 'Student Tasks'.

A candidate number input field is created using the following markup:

{% include sf_candidate %}
Code snippet

SF Input Field: Checkboxes

Checkboxes provide a way for students to select one or more statements in the form.

First, we make some statement.

These checkboxes can be generated using the following markup:

First, we make some statement.
{% include sf_checkbox id='<name_of_data_in_JSON>' label='The student can then select answers.' %}
{% include sf_checkbox id='<name_of_data_in_JSON>' label='They may choose not to select multiple answers.' %}
{% include sf_checkbox id='<name_of_data_in_JSON>' label='Alternatively they may choose not to select anything.' %}
Code snippet

Checkboxes also support the required option which will ensure that students must select the checkbox before they can generate their submission file:

First, we make some statement.
{% include sf_checkbox id='ex_ckbox_A' label='This checkbox is mandatory.' required='true' %}
Code snippet

When using checkboxes, the assessor should note that only selected checkboxes will appear in the JSON file.


SF Input Field: Email

The email input field will ensure that the user has entered a valid (looking) email before allowing them to generate the submission file.

{% include sf_email id='<name_of_data_in_JSON>' label='Email address:' %}
Code snippet

Like checkboxes these inputs also support the required option.


SF Input Field: Numeric

The numeric input only allows numeric submissions. These can be constrained within a range or resolution as desired. By default the resolution is whole integers.

{% sf_form nobutton %}
{% include sf_numeric id='ex1_upper_frequency' label='Enter a number:' min='0' max='1000' step='0.01' %}
{% endsf_form %}
Code snippet

Like checkboxes these inputs also support the required option.


SF Input Field: Radio Buttons

Radio Buttons provide a way for students to select one statement from many within the form.

First, we make some statement.

These radio buttons can be generated using the following markup:

First, we make some statement.
{% include sf_radio id='<name_of_data_in_JSON>' group='radio_example' label='The student can select one answer.' %}
{% include sf_radio id='<name_of_data_in_JSON>' group='radio_example' label='They may not select multiple answers.' %}
{% include sf_radio id='<name_of_data_in_JSON>' group='radio_example' label='Alternatively they may choose not to select anything.' %}
Code snippet

It should be noted that there is a group option when creating these buttons. This will determine which radio buttons are grouped together, allowing you to have multiple single choice questions within a single form.

Like checkboxes these inputs also support the required option.


SF Input Field: Text Box

Text boxes are designed for short text answers.

{% include sf_text id='<name_of_data_in_JSON>' label='Enter a word: ' %}
Code snippet

Like checkboxes these inputs also support the required option.


SF Input Field: Textarea

Textareas are intended for multi-line text submissions:

{% include sf_textarea id='<name_of_data_in_JSON>' label='Enter a passage: '  rows='6' %}
Code snippet

Like checkboxes these inputs also support the required option.