/xblock-mentoring

Mentoring XBlock for edX

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

Mentoring XBlock

This XBlock allows to automate the workflow of real-life mentoring, within an edX course.

It supports:

  • Free-form answers (textarea) which can be shared accross different XBlock instances (for example, to remind a student of an answer he gave before). Editable or read-only.
  • Self-assessment MCQs (multiple choice), to display predetermined feedback to a student based on his choices in the self-assessment. Supports rating scales and arbitrary answers.
  • Progression tracking, allowing to check that the student has completed the previous steps before allowing to complete a given XBlock instance. Provides a link to the next step to the student.
  • Tables, which allow to present answers from the student to free-form answers in a concise way. Supports custom headers.
  • Data export, to allow course authors to download a CSV file containing the free-form answers entered by the students

Examples

Free-form answers

First XBlock instance:

<mentoring url_name="goal_definition" followed_by="getting_feedback">
    <html>
        <p>What is your goal?</p>
    </html>

    <answer name="goal" />
</mentoring>

Second XBlock instance:

<mentoring url_name="getting_feedback">
    <html>
        <p>The goal you entered was:</p>
    </html>
    <answer name="goal" read_only="true" />

    <html>
        <p>Ask feedback from friends about this goal - what did they think?</p>
    </html>
    <answer name="goal_feedback" />
</mentoring>

Self-assessment MCQs

<mentoring url_name="mcq_1" enforce_dependency="false">
    <mcq name="mcq_1_1" type="choices">
        <question>Do you like this MCQ?</question>
        <choice value="yes">Yes</choice>
        <choice value="maybenot">Maybe not</choice>
        <choice value="understand">I don't understand</choice>

        <tip display="yes">Great!</tip>
        <tip reject="maybenot">Ah, damn.</tip>
        <tip reject="understand"><html><div id="test-custom-html">Really?</div></html></tip>
    </mcq>

    <mcq name="mcq_1_2" type="rating" low="Not good at all" high="Extremely good">
        <question>How much do you rate this MCQ?</question>
        <choice value="notwant">I don't want to rate it</choice>

        <tip display="4,5">I love good grades.</tip>
        <tip reject="1,2,3">Will do better next time...</tip>
        <tip reject="notwant">Your loss!</tip>
    </MCQ>

    <message type="completed">
        All is good now...
        <html><p>Congratulations!</p></html>
    </message>
    <message type="incomplete">
        <html><p>Still some work to do...</p></html>
    </message>
</mentoring>

Self-assessment MRQs

<mentoring url_name="mcq_1" enforce_dependency="false">
    <mrq name="mrq_1_1" type="choices" hide_results="true">
        <question>What do you like in this MRQ?</question>
        <choice value="elegance">Its elegance</choice>
        <choice value="beauty">Its beauty</choice>
        <choice value="gracefulness">Its gracefulness</choice>
        <choice value="bugs">Its bugs</choice>

        <tip require="gracefulness">This MRQ is indeed very graceful</tip>
        <tip require="elegance,beauty">This is something everyone has to like about this MRQ</tip>
        <tip reject="bugs">Nah, there isn't any!</tip>

        <message type="on-submit">Thank you for answering!</message>
    </mrq>
    <message type="completed">
        All is good now...
        <html><p>Congratulations!</p></html>
    </message>
    <message type="incomplete">
        <html><p>Still some work to do...</p></html>
    </message>
</mentoring>

Tables

<mentoring-table type="goal" url_name="goal_table">
    <column>
        <header>Your goal</header>
        <answer name="goal" />
    </column>

    <column>
        <header>Header Test 2</header>
        <answer name="goal_feedback" />
    </column>
</mentoring-table>

Data export

<vertical>
    <mentoring-dataexport url_name="mentoring_dataexport"></mentoring-dataexport>
</vertical>

Maximum Attempts

You can set the number of maximum attempts for the unit completion, as well as a feedback message when the maximum number of attempts is reached:

<mentoring url_name="mcq_1" enforce_dependency="false" max_attempts="3">
    <mrq name="mrq_1_1" type="choices" hide_results="true">
        <question>What do you like in this MRQ?</question>
        <choice value="elegance">Its elegance</choice>
        ...
    </mrq>
    <message type="completed">
        All is good now...
        <html><p>Congratulations!</p></html>
    </message>
    <message type="max_attempts_reached">
        <html><p>Maximum number of attempts reached</p></html>
    </message>
</mentoring>

Custom tip popup window size

You can specify width and height attributes to the tip child to customize the popup window size. The value of those attribute should be valid CSS.

<mentoring url_name="mcq_1" enforce_dependency="false">
    <mrq name="mrq_1_1" type="choices">
        <question>What do you like in this MRQ?</question>
        <choice value="elegance">Its elegance</choice>
        ...
        <tip require="elegance" width="50px" height="20px">This is something everyone has to like about this MRQ</tip>
    </mrq>
</mentoring>

Custom Nav title

The Nav title (the black tooltip showed on hover on the Units Nav bar) is a list of the display_name attributes of all the blocks present in that Unit.

So two Mentoring blocks like the following will result in a tooltip like the one below:

<mentoring url_name="mentoring-0a06b184" weight="20" display_name="First Mentoring block">
<mentoring url_name="mentoring-1a04badd" weight="20" display_name="Second Mentoring block">

image

The default title is "Mentoring Block".

Installing dependencies

From the xblock-mentoring repository, and within the Python virtual environment you used to setup the XBlock workbench or the LMS, install the requirements:

$ pip install -r requirements.txt

You also need to install the mentoring XBlock in the same virtual environment. From the xblock-mentoring directory, enter:

$ pip install -e .

Since XBlock and xblock-mentoring are both in development, it is recommended to use the XBlock revision specified in the workbench/LMS requirements.txt file. The main XBlock repository is not always ready to use in edx-platform and you might experience some issues.

Custom workbench settings

In the main XBlock repository, create the following configuration file in workbench/settings_mentoring.py in the XBlock repository:

from settings import *

INSTALLED_APPS += ('mentoring',)
DATABASES['default']['NAME'] = 'workbench.sqlite'

Starting the workbench

Because this XBlock uses a Django model, you need to sync the database before starting the workbench. Run this from the XBlock repository root:

$ ./manage.py syncdb --settings=workbench.settings_mentoring

Then start the workbench:

$ ./manage.py runserver 8000 --settings=workbench.settings_mentoring

Access it at http://localhost:8000/

Running tests

From the xblock-mentoring repository root, run the tests with the following command:

$ DJANGO_SETTINGS_MODULE="workbench.settings_mentoring" PYTHONPATH=".:/path/to/xblock" nosetests --with-django

/path/to/xblock is the path to the XBlock main repository (the one containing the workbench)

Adding custom scenarios to the workbench

Within the xblock-mentoring repository, create the templates/xml and add XML scenarios to it - all files with the *.xml extension will be automatically loaded by the workbench:

$ mkdir templates/xml
$ cat > templates/xml/my_mentoring_scenario.xml

Restart the workbench to take the new scenarios into account.