General plugins (Local): Course recompletion

Maintained by Picture of Dan Marsden Dan Marsden, Picture of Catalyst IT Catalyst IT
This plugin adds course level settings for recompletion - clearing all course and activity completion for a user based on the duration set notifying the student they need to return to the course and recomplete it.
130 sites
22 fans

This plugin adds course level settings for recompletion - clearing all course and activity completion for a user based on the duration set notifying the student they need to return to the course and recomplete it.

This plugin could be used to facilitate annual re-certification.

This plugin deletes existing course completion and activity completion data based on the schedule set by the teacher including the ability to delete Quiz and SCORM attempts within the course. You can also choose to retain the quiz and SCORM attempts within archive tables within the recompletion plugin (You will have to write your own reports to view this archived data though - no reports are currently included in this plugin.)

The following information is cleared from the course during recompletion:

  • All activity grades cleared (and saved to standard grade history tables.)
  • All activity completion and course completion flags removed. (with the option to archive this information)

The following activities have extra support:

  1. Quiz - You can choose to delete all existing quiz attempt data with the option to archive the information or, you can keep the existing attempts and give the student the ability to add new attempts.

  2. SCORM - You can choose to delete all existing SCORM attempt data with the option to archive the information.

  3. Assignment - You can choose to give the student another attempt (if the assignment is configured to allow reopening and the maximum number of attempts has not been reached.

Other activities that store user data will have the activity completion data reset, but may require manual intervention as they are not yet supported fully. Get in touch privately if you would like to fund support for other activities with user data.

For more information on the current issues with this plugin please see the issues tracker:


Screenshot #0


Picture of Dan Marsden
Dan Marsden (Lead maintainer)
Please login to view contributors details and/or to contact them

Comments RSS

Show comments
  • Picture of Dan Marsden
    Wed, 7 Nov 2018, 4:56 AM
    Hi Carlos - that is not something currently supported but it could be an interesting feature to add. If you're interested in funding that work drop me a private message and I can provide information on our rates.
  • Picture of Carlos Chiarella
    Wed, 7 Nov 2018, 6:05 AM
    Thanks Dan. What is your email please?
  • Picture of Dan Marsden
    Wed, 7 Nov 2018, 7:48 AM
    my firstname should work smile
  • Picture of B Johnson
    Mon, 19 Nov 2018, 12:22 PM
    Hi Dan - great plugin. We've been using manual SQL reset scripts (against MDL2), which are likely fragile.

    One thing we do do already is preserve existing SCORM attempts - instead of deleting existing ones / moving to another table, we simply insert a new 'cmi.core.lesson_status' entry for each user, with a higher attempt number than the last one. This successfully starts a new attempt, but preserves the old ones - here's the SQL we use (referencing '__userIDs' and '__courseIDs' temp tables containing the list of users and courses we wish to reset):

    -- ATTEMPTS - for every existing attempt, insert a new incomplete one (leaving existing ones untouched)
    INSERT INTO `mdl_scorm_scoes_track` (`userid`, `scormid`, `scoid`, `attempt`, `element`, `value`, `timemodified`)

    SELECT st.userid, st.scormid, st.scoid, (st.attempt + 1), st.element, 'incomplete', UNIX_TIMESTAMP()
    FROM `mdl_scorm_scoes_track` AS st
    JOIN `mdl_course_modules` AS cm ON cm.instance = st.scormid
    JOIN `mdl_course` AS c ON = cm.course
    JOIN `mdl_user` AS usr ON = st.userid

    WHERE st.userid IN (SELECT id FROM __userIDs)
    AND st.element = 'cmi.core.lesson_status'
    AND st.attempt = (SELECT MAX(attempt) FROM mdl_scorm_scoes_track WHERE userid = st.userid AND scormid = st.scormid)
    AND IN (SELECT id FROM __courseIDs)
  • Picture of Dan Marsden
    Mon, 19 Nov 2018, 1:35 PM
    thanks for the feedback - will keep this in mind for future versions.
  • Picture of Sam Phill
    Tue, 8 Jan 2019, 3:06 PM
    Hi Dan, wondering if this plugin is available for v3.2?
  • Picture of Dan Marsden
    Tue, 8 Jan 2019, 3:33 PM
    @Sam - no it isn't, and tbh the only thing you should be focusing on is upgrading to a stable supported version of Moodrelle. 3.2 has been out of security patch support for 8 months. You shouldn't be thinking about adding further plugins until you deal with your core
  • Picture of Olli Savolainen
    Thu, 17 Jan 2019, 6:08 PM
    Hi Dan - when you archive completion data in the custom tables of this plugin, is there any GUI to actually browse the archived data to allow administrators to actually know what deletions have occurred?
  • Picture of Dan Marsden
    Thu, 24 Jan 2019, 6:38 AM
    @Olli - there is no GUI for browsing archived data at this stage. You would be best to use one of the SQL reporting tools to obtain this data if needed. Pull requests/funding for improvements are always welcome.
  • Picture of MAG II
    Wed, 27 Feb 2019, 10:36 PM
    Hello -

    Quick question about the plugin - Does the course get reset after the amount of days the admin says for it to do so on a course level? Or does the course recomplete for each individual student based on the number of days to recompletion after they have taken the course?

    In short, does the course recomplete on an entire course level, or at an individual student level?
  • Picture of Dan Marsden
    Thu, 28 Feb 2019, 6:43 AM
    @MAG II - It clears all course and activity completion for a "user" based on the duration set. thanks.
  • Picture of MAG II
    Fri, 1 Mar 2019, 10:51 PM
    @Dan Marsden - Thanks for the clarification!
  • Picture of Teresa Robison
    Tue, 5 Mar 2019, 11:15 PM
    Dan, our students upload files as part of their Assignments. Does the recompletion plugin remove and archive the existing file uploads?
  • Picture of Dan Marsden
    Wed, 6 Mar 2019, 4:26 AM
    @Teresa, probably best for you to install the plugin and test it. When setting up the recompletion you have a few different options on how to deal with assignments.
  • Picture of Teresa Robison
    Thu, 7 Mar 2019, 1:39 AM
    Thanks! @Dan
1 2 3
Please login to post comments