Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Course completion: Difference between revisions

From MoodleDocs
No edit summary
No edit summary
Line 5: Line 5:
We need a way to flag when a user has finished a course.  :-)
We need a way to flag when a user has finished a course.  :-)


==Interface==
==Settings==


This can be simply done by adding some small settings to the course settings page (perhaps on a tab).
* At the site level, "Enable course completion" should be an option in the Site Administration block's Advanced features / optional subsystems settings page.


==Methods==
* At the course level, "Enable course completion" should be an option in the course settings page. When enabled, the additional settings appear below as follows:
 
[[Image:Completion.png]]
 
==Criteria==
Several criteria can determine if a course is completed for a user. Criteria can be used in combination, and all criteria (except unenrolment) can be required.
 
===Manual self-completion===
Interface: A single selection drop-down list with "yes" or "no" options.
 
Result: If set to "yes", a student can manually indicate that the course is complete.
 
===Manual completion by===
Interface: A multiple selection drop-down list provides a list of all system roles.
 
Result: If roles are selected, users assigned to each selected role in the course can manually indicate (via a course completion interface) that a student has completed the course.
 
===Activities completed===
Interface: A single selection drop-down list with "yes" or "no" options.
 
Result: A student has completed the course when all activities in the course are completed (see [[Conditional_activities]]).
 
===Passing grade===
Interface: A single selection drop-down list with "yes" or "no" options.
 
Result: If set to "yes", a student has completed the course when his/her total course grade is above the course's "Grade to pass" setting found in the Grader report's edit page for the top level category for the course. [question: Perhaps this "Grade to pass" value should also appear in the course's main setting page to allow for easier cross-reference of the passing grade?]


===Date===
===Date===
Interface: Three single selection drop-down lists with "day", "month", and "year" options. A disable check-box determines if the date criteria is used.


When a certain date has passed, the course can be considered completed for all users.
Result: All students enroled in the course complete the course after a specified date.


===Unenrolment===
===Unenrolment===
Interface: A single selection drop-down list with "yes" or "no" options.
Result: A student has completed the course when s/he is unenrolled from the course.
==Notifications==
Interface: A single selection drop-down list with "enabled" or "disabled" options. Also, a multiple selection drop-down list provides a list of all system roles.
Result: If enabled, a student receives notification when s/he has met the completion criteria for the course. If other roles are selected, users assigned to each selected role in the course receives notification when the course completion criteria is met for a student in the course.
==Locking completion settings==
When the first student has completed the course, the course completion criteria settings will be locked. The course settings can be unlocked (via an "Unlock course completion options" button), however a warning message will be displayed stating that unlocking the settings requires deleting all prior course completion data for the course. Once the completion data is deleted, the settings become unlocked (i.e., un-greyed out).
This is consistent with activity completion in 2.0, in which activity completion settings are locked when a user first completes an activity. Activity completion settings can be unlocked after all completion activity is deleted.
If activity completion is enabled and activity completion is a criteria for course completion, then all activity completion settings will be locked once a student has completed the course. In this case, unlocking an activity's completion settings will require deleting both the activity's completion data and the course's completion data.


When a user is unenrolled, the course can be considered completed for that user.
==Completion progress report==
The idea here is to add the course completion data with the activity completion data already in the "Completion progress report" (found via on "Reports" link in the course Admin block) and clicking on "Completion progress report".


===Grade===
The report will display a table of:
* All users in the course
** The list of users will be sortable, searchable, and filterable (by group, groupings, and/or user profile fields).
** User profile fields (standard and custom) can be added/removed as columns in the list.
* All criteria enabled for completion (e.g., "Manual self completion", "Manual completion by", etc)
* Each user's status for completion of each criteria, indicated by a status icon
* When rolling over the each icon, additional details (including the completion date) will display.


When the total course grade is above a certain value/percentage, the course can be considered completed.  The value is set using the "passing grade" feature in the gradebook.
Below is an example with all course completion criteria appearing (ie, all criteria has been enabled):


===Activity done===
[[Image:Completion_report.png]]


When a particular activity is done (see [[Conditional_activities]])
Display rules for separate groups will apply. If separate groups is enabled for the course, a "teacher" will only see students and completion data for users in the group(s) that she/he is assigned to.


===Manual===
Options for exporting completion data to CSV, ODF or Excel will be available. Completion dates will be included in the export.


The teacher controls completion via a special page which is simply a list of all students enrolled in the course with checkboxes next to their name.  I suppose this might be useful as something separate from the gradebook (and just manually putting in 100 or something for each student as an override grade). Also, the list of users should be sortable, searchable, and filterable (by group, groupings, and/or user profile fields).
A column labeled "Mark complete" will appear containing a checkbox for each student if the user viewing the report is assigned to a role that is allowed to manually indicate that the students have completed the course.


===Any combination of the above===
==Completion in the gradebook==
If course completion is enabled for the course, "Completion status" will also appear as a column in the grader report. If the user viewing the grader report is assigned to a role that is allowed to manually indicate that students have completed the course, a "Mark complete" column will appear to the right of the "Course total" column with a checkbox for each student who has not yet completed the course.


These all need to be able to be combined using ORs. Not sure where best to store these.
Course completion data can also be included in the gradebook exports. Field options will include:
* Completion status (e.g., "Complete", "Not complete")
* Completion date
* Completion criteria met (e.g., "[Role name] approved, [User name]", "passing grade: [passing value/percentage]")


==Cron==
==Completion block==
If completion is enabled for the site and course, a completion block will appear that displays the students completion status (complete / not complete), the completion criteria options for the course, and the status for completion of each criteria (similar to the Completion progress report).


There will need to be a cron job to check all these conditions and add/remove entries from the table as necessary. Can this be made very efficient?
If students are allowed to manually complete a course, the block will provide an "I've completed this course" button.


==Cron==
A cron function will check these conditions and add/remove entries from the course_completion table as necessary.


==Table==
==Data structures==


===course_completion===
===course_completion===
This table records when a user has completed a whole course.
This new table will be populated with a record when a user has completed a course:


{| class="nicetable"
{| border="1" cellpadding="2" cellspacing="0"
!Field
!Field
!Type
!Type
Line 67: Line 122:
|
|
|The course that has been completed
|The course that has been completed
|-
|'''completionstate'''
|int(10)
|
|The user has completed the course. 0 or no row = not complete, 1 = completed, 2 = completed with grade above passing, 3 = completed with grade below passing
|-
|'''progressstate'''
|int(10)
|
|The user's current course completion progress as a value or percentage. This field is used when displaying student progress if activity completion is a criteria for course completion.
|-
|'''progressmax'''
|int(10)
|
|The maximum progress value. 100 = percentage. This field is also used when displaying student progress if activity completion is a criteria for course completion.
|-
|'''gradepass'''
|float(10,5)
|
|The minimum grade needed to pass the course (if passing grade criteria enabled)
|-
|'''finalgrade '''
|float(11,0)
|NULL
|The final course grade scored in the course (if passing grade criteria enabled)
|-
|'''usercompleted'''
|int(1)
|
|The user manually self-completed (if manual self-completion criteria enabled)
|-
|'''completedby'''
|int(10)
|
|The course was manually deemed complete for the user by this other user (if manual completion criteria used)
|-
|'''completedroleid'''
|int(10)
|
|The role of the user who manually completed the user (if manual completion criteria used)
|-
|'''datefinish'''
|int(10)
|
|The finish date criteria for course completion (if finish date criteria used)
|-
|'''unenroled'''
|int(10)
|
|The user was unenroled (if unenrolment criteria used)
|-
|'''deleted'''
|int(1)
|
|The course was deleted
|-
|'''timestart'''
|int(10)
|
|The date/time the user enroled in the course


|-
|-
Line 72: Line 199:
|int(10)
|int(10)
|
|
|The time the user completed the course
|The date/time the user completed the course
 
|}
|}


: I can see a bit more metadata being nice here. What about start date (or enrolment duration) and final grade?--[[User:Tim Hunt|Tim Hunt]] 04:00, 3 February 2009 (CST)
===course===
The course table will require the following new fields:
 
{| border="1" cellpadding="2" cellspacing="0"
!Field
!Type
!Default
!Info
 
|-
|'''enablecoursecompletion'''
|int(1)
|
|The course is using course completion
 
|-
|'''completeself'''
|int(1)
|
|Students can manually complete
 
|-
|'''completerole'''
|int(10)
|
|Roles can complete -- probably just use capabilities for this
 
|-
|'''completeactivities'''
|int(1)
|
|Activities must be completed
 
|-
|'''completegrade'''
|int(1)
|
|Passing grade must be achieved.
 
|-
|'''completebydate'''
|int(1)
|
|Passing grade must be achieved.
 
|-
|'''completeunenrol'''
|int(1)
|
|Unenroling completes the course
 
|-
|'''completenotify'''
|int(1)
|
|Notify users when they've completed a course
 
|}

Revision as of 06:53, 22 May 2009

Moodle 2.0

This is a SPECIFICATION for a feature in Moodle 2.0 that is still under development

Overview

We need a way to flag when a user has finished a course.  :-)

Settings

  • At the site level, "Enable course completion" should be an option in the Site Administration block's Advanced features / optional subsystems settings page.
  • At the course level, "Enable course completion" should be an option in the course settings page. When enabled, the additional settings appear below as follows:

File:Completion.png

Criteria

Several criteria can determine if a course is completed for a user. Criteria can be used in combination, and all criteria (except unenrolment) can be required.

Manual self-completion

Interface: A single selection drop-down list with "yes" or "no" options.

Result: If set to "yes", a student can manually indicate that the course is complete.

Manual completion by

Interface: A multiple selection drop-down list provides a list of all system roles.

Result: If roles are selected, users assigned to each selected role in the course can manually indicate (via a course completion interface) that a student has completed the course.

Activities completed

Interface: A single selection drop-down list with "yes" or "no" options.

Result: A student has completed the course when all activities in the course are completed (see Conditional_activities).

Passing grade

Interface: A single selection drop-down list with "yes" or "no" options.

Result: If set to "yes", a student has completed the course when his/her total course grade is above the course's "Grade to pass" setting found in the Grader report's edit page for the top level category for the course. [question: Perhaps this "Grade to pass" value should also appear in the course's main setting page to allow for easier cross-reference of the passing grade?]

Date

Interface: Three single selection drop-down lists with "day", "month", and "year" options. A disable check-box determines if the date criteria is used.

Result: All students enroled in the course complete the course after a specified date.

Unenrolment

Interface: A single selection drop-down list with "yes" or "no" options.

Result: A student has completed the course when s/he is unenrolled from the course.

Notifications

Interface: A single selection drop-down list with "enabled" or "disabled" options. Also, a multiple selection drop-down list provides a list of all system roles.

Result: If enabled, a student receives notification when s/he has met the completion criteria for the course. If other roles are selected, users assigned to each selected role in the course receives notification when the course completion criteria is met for a student in the course.

Locking completion settings

When the first student has completed the course, the course completion criteria settings will be locked. The course settings can be unlocked (via an "Unlock course completion options" button), however a warning message will be displayed stating that unlocking the settings requires deleting all prior course completion data for the course. Once the completion data is deleted, the settings become unlocked (i.e., un-greyed out).

This is consistent with activity completion in 2.0, in which activity completion settings are locked when a user first completes an activity. Activity completion settings can be unlocked after all completion activity is deleted.

If activity completion is enabled and activity completion is a criteria for course completion, then all activity completion settings will be locked once a student has completed the course. In this case, unlocking an activity's completion settings will require deleting both the activity's completion data and the course's completion data.

Completion progress report

The idea here is to add the course completion data with the activity completion data already in the "Completion progress report" (found via on "Reports" link in the course Admin block) and clicking on "Completion progress report".

The report will display a table of:

  • All users in the course
    • The list of users will be sortable, searchable, and filterable (by group, groupings, and/or user profile fields).
    • User profile fields (standard and custom) can be added/removed as columns in the list.
  • All criteria enabled for completion (e.g., "Manual self completion", "Manual completion by", etc)
  • Each user's status for completion of each criteria, indicated by a status icon
  • When rolling over the each icon, additional details (including the completion date) will display.

Below is an example with all course completion criteria appearing (ie, all criteria has been enabled):

Completion report.png

Display rules for separate groups will apply. If separate groups is enabled for the course, a "teacher" will only see students and completion data for users in the group(s) that she/he is assigned to.

Options for exporting completion data to CSV, ODF or Excel will be available. Completion dates will be included in the export.

A column labeled "Mark complete" will appear containing a checkbox for each student if the user viewing the report is assigned to a role that is allowed to manually indicate that the students have completed the course.

Completion in the gradebook

If course completion is enabled for the course, "Completion status" will also appear as a column in the grader report. If the user viewing the grader report is assigned to a role that is allowed to manually indicate that students have completed the course, a "Mark complete" column will appear to the right of the "Course total" column with a checkbox for each student who has not yet completed the course.

Course completion data can also be included in the gradebook exports. Field options will include:

  • Completion status (e.g., "Complete", "Not complete")
  • Completion date
  • Completion criteria met (e.g., "[Role name] approved, [User name]", "passing grade: [passing value/percentage]")

Completion block

If completion is enabled for the site and course, a completion block will appear that displays the students completion status (complete / not complete), the completion criteria options for the course, and the status for completion of each criteria (similar to the Completion progress report).

If students are allowed to manually complete a course, the block will provide an "I've completed this course" button.

Cron

A cron function will check these conditions and add/remove entries from the course_completion table as necessary.

Data structures

course_completion

This new table will be populated with a record when a user has completed a course:

Field Type Default Info
id int(10) Auto incrementing
userid int(10) The user who has completed the course
courseid int(10) The course that has been completed
completionstate int(10) The user has completed the course. 0 or no row = not complete, 1 = completed, 2 = completed with grade above passing, 3 = completed with grade below passing
progressstate int(10) The user's current course completion progress as a value or percentage. This field is used when displaying student progress if activity completion is a criteria for course completion.
progressmax int(10) The maximum progress value. 100 = percentage. This field is also used when displaying student progress if activity completion is a criteria for course completion.
gradepass float(10,5) The minimum grade needed to pass the course (if passing grade criteria enabled)
finalgrade float(11,0) NULL The final course grade scored in the course (if passing grade criteria enabled)
usercompleted int(1) The user manually self-completed (if manual self-completion criteria enabled)
completedby int(10) The course was manually deemed complete for the user by this other user (if manual completion criteria used)
completedroleid int(10) The role of the user who manually completed the user (if manual completion criteria used)
datefinish int(10) The finish date criteria for course completion (if finish date criteria used)
unenroled int(10) The user was unenroled (if unenrolment criteria used)
deleted int(1) The course was deleted
timestart int(10) The date/time the user enroled in the course
timecompleted int(10) The date/time the user completed the course

course

The course table will require the following new fields:

Field Type Default Info
enablecoursecompletion int(1) The course is using course completion
completeself int(1) Students can manually complete
completerole int(10) Roles can complete -- probably just use capabilities for this
completeactivities int(1) Activities must be completed
completegrade int(1) Passing grade must be achieved.
completebydate int(1) Passing grade must be achieved.
completeunenrol int(1) Unenroling completes the course
completenotify int(1) Notify users when they've completed a course