Automatically resets activity completion, course completion, and optionally grades for enrolled learners on a recurring schedule — so they must re-certify every N months. Advance warning notifications, configurable reset depth, and a full audit log.
Course Recertification also works with Training Pathways, AI Training Matrix and Certificate Pro. Keep ordinary reset schedules separate from additive certification cycles: a reset schedule does not itself prove competency or certificate validity.
Use a dedicated Certificate Pro issuer for a certification cycle. Historical issued documents remain unchanged; renewal requirements and current validity are evaluated separately. Review the selected reset scope before enabling a schedule.
Automatic re-enrolment before certification expires
▸ Moodle has no native mechanism to detect certificate expiry and trigger re-enrolment. Course Recertification monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and automatically re-enrols the learner in the refresher course when the deadline passes — without any admin action.
▸ Configurable warning notice: set how many days before reset an advance warning email and Moodle notification are sent (default 14 days).
▸ Tracks the full recertification history — original completion, each renewal, and the certifying body — so compliance officers can produce a lifecycle report for any learner without manual record-keeping.
Reset triggers N months after each learner's enrolment date — everyone gets their own anniversary. Perfect for compliance recertification where the clock starts on enrolment.
Reset on a fixed annual date (e.g. 1 Jan or 1 Jul) regardless of when the learner enrolled. Suited to industry-wide licence renewal cycles.
Email + Moodle notification sent N days before reset so learners know recertification is coming. A second notification fires at the moment of reset.
Choose how deep the reset goes: completion only; completion + grades; or full data wipe (quiz attempts, assignment submissions, SCORM tracks). Each level is independently toggleable.
Works with all Moodle activity types including third-party and LMS Labs plugins via the central course_modules_completion table. Extensible per module via the _recertify_reset_userdata callback.
Every reset is logged — who, when, which course, which schedule, and what depth. Audit log is accessible from Site administration and exportable to CSV.
| Level | What gets reset | Use case |
|---|---|---|
| Completion only | Activity completion marks + course completion record | Learner must re-complete activities; prior grades and attempts remain |
| Completion + grades | Everything above + gradebook entries | Clean slate for graded courses; quiz attempts remain in mdl_quiz_attempts |
| Full data wipe | Everything above + quiz attempts, assignment submissions, SCORM tracks | Regulatory recertification requiring a completely fresh attempt record |
| Setting | Description | Default |
|---|---|---|
| Schedule type | Relative (rolling anniversary from enrolment) or Fixed (calendar date). | Relative |
| Recertification interval | For relative: months between resets. For fixed: the annual reset date (MM-DD). | 12 months |
| Warning notice (days) | Send advance warning notification this many days before the reset fires. | 14 |
| Reset depth | Completion only · Completion + grades · Full data wipe. | Completion only |
| Wipe quiz attempts | Part of full data wipe — removes mdl_quiz_attempts rows. | Off |
| Wipe assignment submissions | Part of full data wipe — removes mdl_assign_submission rows. | Off |
| Wipe SCORM tracks | Part of full data wipe — removes mdl_scorm_scoes_track rows. | Off |
| Notify on reset | Send email + Moodle notification at the moment of reset. | On |
| Enable audit log | Log every reset to the plugin's audit table. | On |
Settings live at Site administration → Plugins → Local plugins → Course Recertification. Per-course overrides are available from the course settings menu once the plugin is installed.
Download the ZIP from lms-labs.com → Plugins → Course Recertification.
In Moodle: Site administration → Plugins → Install plugins. Upload the ZIP and click Install.
Complete the plugin installation confirmation page.
Navigate to Site administration → Plugins → Local plugins → Course Recertification to configure the default schedule, reset depth, and notification settings.
Open any course → Course settings → Recertification tab to enable recertification for that course and override the site defaults if needed.
The plugin runs via Moodle's scheduled task system. Ensure cron is running (recommended: every minute) so resets fire on time.
• All admin pages use require_login() + require_capability()
• Scheduled task runs under Moodle cron context — no web-facing attack surface
• Audit log entries are append-only; no UI allows deletion (GDPR export is supported)
• No external API calls — no AI credits required, no portal dependency
• Full GDPR Privacy Provider implemented — personal data in the audit log is exportable and deletable on user request
• GPL v3 licence
Full data wipe is irreversible
The "Full data wipe" reset depth permanently deletes quiz attempts, assignment submissions, and SCORM tracking records. This cannot be undone. Test on a staging site before enabling this level in production.
For installation help, bug reports, or feature requests, visit lms-labs.com or open a support ticket via your LMS Labs account portal.
Course Recertification works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See LMS Labs pricing and AI credits for current plans.
Using more than one LMS Labs plugin? These companions are free on LMS Labs:
Both are optional, free companion plugins and require no LMS Labs credit unlock. Any AI credits used by connected plugins remain separate metered usage.
Appears on your plugin page and in search results — name, icon, short description, screenshots.
Plugin name*
Icon*
Upload this PNG as the plugin icon. Minimum dimensions 200×200 px — this file is 1024×1024.

1024×1024 PNG, under 200 KB — comfortably above the 200×200 px minimum and under the 10 MB upload limit.
Short description*
Search cards show only the first 119 characters — the opening line has to sell on its own.
233/256 characters
Screenshots
Show meaningful features in use — the main UI, an important workflow, a finished report or dashboard. Must be at least 128 px wide and no more than 480 px wide. Avoid empty states, unreadable detail, and near-duplicate shots.
The main sales pitch on your plugin page — paste into the rich-text editor, then bold the headings.
Description*
Starts with the standalone-or-connected-suite setup, then gives the product pitch, requirements, external services and pricing.
2,912/7,000 characters
The complete listing page — the standalone/connected-suite setup appears first, followed by the product description. In the Marketplace description editor, switch to HTML source view (</> button) and paste it in one go. The Marketplace may strip style attributes, so the paste block uses semantic headings, paragraphs, lists, links, and one root element; confirm the saved listing after submission.
Preview
Use this plugin on its own — or make the whole suite simpler
This plugin works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See LMS Labs pricing and AI credits for current plans.
Highly recommended when you use more than one LMS Labs plugin:
Both companion plugins are optional. You can keep using this plugin on its own and retain its own settings where available. Full help: Course Recertification documentation.
Re-Certification That Runs Itself
Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.
Local plugin · v1.2.1 · Moodle™ 4.4 - 5.x · Paid — 50 Credits ($5 USD) (one-off)
Course Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.
Why This Beats Manual Tracking
Moodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.
Key Features
Who It Is For
Requirements And Compatibility
Getting Started
Install via Site administration > Plugins > Install plugins, then open Site administration > Plugins > Local plugins > Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.
Documentation And Support
Full documentation is at lms-labs.com/docs/course-recertification. Support is at support@lmshostingservices.com.
Pricing
This plugin is available on the Moodle Marketplace for 50 Credits ($5 USD) (one-off). An LMS Labs account (free) is required to use AI features.
Links that help customers find help, report issues, and get the most from the plugin.
Issue/bug tracker URL*
Documentation
Website
Discussion
Privacy information
What data (if any) leaves the customer's Moodle site — Moodle requires external services disclosed before purchase.
Use the canonical one-time acquisition price or free status shown below. AI usage credits, where applicable, remain separate metered usage.
Price name*
Amount (USD)*
Billing type*
Price description
Shown on the pricing card — what the customer gets, stated plainly.
Terms of Sale URL*
Appears on your plugin page — must be consistent with the price description.
Optional. Turn on 'Enable invoice-based purchasing' only if you want to issue and manage invoices through Stripe Connect — otherwise leave it off.
Add new version → upload the ZIP. The main download link always points to your latest version.
Release manifest is loading.
Release version
Released Aug 29, 2026.
Maturity
Repository branch
The branch in the source repository that holds this release's code. All our plugin repos publish releases to main.
Repository tag
The git tag pinning this exact release — the release pipeline creates it automatically on every publish.
Supported Moodle versions
Raw compatibility statement: Moodle™ 4.4 - 5.x. version.php uses the standard 10-digit Moodle format YYYYMMDDXX (e.g. 2026081400). The Marketplace reads the version from version.php inside the uploaded ZIP.
Version notes (latest changelog)
Who maintains the plugin. Only the lead maintainer can publish.
Lead maintainer
The lead maintainer edits the plugin page, uploads versions, and manages contributors. Add teammates as Maintainer (can edit and upload versions) or Contributor (credited on the page only).
Component (frankenstyle)
Must match version.php $plugin->component and the ZIP root folder.
Plugin type
Install directory
Licence
Source control URL
Support email
Tags
Complete field set as JSON — an automated browser agent can read this block directly to populate the Marketplace edit screens.
{
"pluginName": "Course Recertification",
"frankenstyle": "local_recertify",
"pluginTypePrefix": "local",
"pluginTypeLabel": "Local plugin",
"installDirectory": "/local/recertify/",
"shortDescription": "Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.",
"fullDescription": "Standalone or connected setup\n\nThis plugin works by itself. If it asks for LMS Labs credentials, enter your site's Site ID and API key; see https://lms-labs.com/pricing.\n\nUsing several plugins? Install the free AI Grader Central Config plugin to enter credentials once for compatible plugins, and the free AI Dashboard Quick Links block for one dashboard with settings, docs and updates.\n\nRe-Certification That Runs Itself\n\nCourse Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.\n\nWhy This Beats Manual Tracking\n\nMoodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.\n\nKey Features\n\n- Recurring reset - reset activity completion, course completion and optionally grades on a schedule.\n- Flexible scheduling - choose a relative rolling anniversary or a fixed calendar schedule.\n- Configurable reset depth - reset just completion, or deeper attempt data, matched to your use case.\n- Advance warnings - send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.\n- Full history - track original completion, every renewal and the certifying body for a per-learner lifecycle report.\n- Audit log - append-only entries record every reset, with GDPR export supported.\n- Per-course overrides - set site defaults, then override behaviour from a course's settings menu.\n\nWho It Is For\n\n- RTOs and TAFEs delivering training that must be re-certified periodically.\n- Employers and compliance teams managing safety-critical or licence-based competencies.\n\nRequirements And Compatibility\n\n- Moodle 4.4 to 5.x.\n- PHP 7.4 or later.\n- No AI account or credits required. The plugin makes no external API calls.\n\nGetting Started\n\nInstall via Site administration > Plugins > Install plugins, then open Site administration > Plugins > Local plugins > Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.\n\nDocumentation And Support\n\nFull documentation is at https://lms-labs.com/docs/course-recertification. Support is at support@lmshostingservices.com.\n\n## Pricing\n\nThis plugin is available on the Moodle Marketplace for **50 Credits ($5 USD)** (one-off). An LMS Labs account (free) is required to use AI features.",
"descriptionHtml": "<div><p><strong>Re-Certification That Runs Itself</strong></p><p><em>Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.</em></p><p>Local plugin · v1.2.1 · Moodle™ 4.4 - 5.x · Paid — 50 Credits ($5 USD) (one-off)</p><p>Course Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.</p><p><strong>Why This Beats Manual Tracking</strong></p><p>Moodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.</p><p><strong>Key Features</strong></p><ul><li><strong>Recurring reset</strong> — reset activity completion, course completion and optionally grades on a schedule.</li><li><strong>Flexible scheduling</strong> — choose a relative rolling anniversary or a fixed calendar schedule.</li><li><strong>Configurable reset depth</strong> — reset just completion, or deeper attempt data, matched to your use case.</li><li><strong>Advance warnings</strong> — send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.</li><li><strong>Full history</strong> — track original completion, every renewal and the certifying body for a per-learner lifecycle report.</li><li><strong>Audit log</strong> — append-only entries record every reset, with GDPR export supported.</li><li><strong>Per-course overrides</strong> — set site defaults, then override behaviour from a course's settings menu.</li></ul><p><strong>Who It Is For</strong></p><ul><li>RTOs and TAFEs delivering training that must be re-certified periodically.</li><li>Employers and compliance teams managing safety-critical or licence-based competencies.</li></ul><p><strong>Requirements And Compatibility</strong></p><ul><li>Moodle 4.4 to 5.x.</li><li>PHP 7.4 or later.</li><li>No AI account or credits required. The plugin makes no external API calls.</li></ul><p><strong>Getting Started</strong></p><p>Install via Site administration > Plugins > Install plugins, then open Site administration > Plugins > Local plugins > Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.</p><p><strong>Documentation And Support</strong></p><p>Full documentation is at <a href=\"https://lms-labs.com/docs/course-recertification\" target=\"_blank\" rel=\"noopener\">lms-labs.com/docs/course-recertification</a>. Support is at <a href=\"mailto:support@lmshostingservices.com\">support@lmshostingservices.com</a>.</p><p><strong>Pricing</strong></p><p>This plugin is available on the Moodle Marketplace for <strong>50 Credits ($5 USD)</strong> (one-off). An LMS Labs account (free) is required to use AI features.</p></div>",
"releaseVersion": "1.2.1",
"releaseDate": "Aug 29, 2026",
"versionNumberNote": "version.php uses the standard 10-digit Moodle format YYYYMMDDXX (e.g. 2026081400). The Marketplace reads the version from version.php inside the uploaded ZIP.",
"maturity": "Stable",
"supportedMoodleVersions": [
"4.4",
"4.5",
"5.0",
"5.1",
"5.2",
"5.3"
],
"compatibleRaw": "Moodle™ 4.4 - 5.x",
"repositoryName": "moodle-local_recertify",
"repositoryBranch": "main",
"repositoryTag": "v1.2.1",
"sourceControlUrl": "https://github.com/lmshostingservices/moodle-local_recertify",
"bugTrackerUrl": "https://github.com/lmshostingservices/moodle-local_recertify/issues",
"documentationUrl": "https://lms-labs.com/docs/course-recertification",
"homepageUrl": "https://lms-labs.com/docs/course-recertification",
"discussionUrl": "https://lms-labs.com/docs/course-recertification?tab=discussion",
"zipDownloadUrl": "",
"license": "GNU GPL v3 or later",
"licenseUrl": "https://www.gnu.org/licenses/gpl-3.0.html",
"maintainer": "LMS Hosting Services (LMS Labs)",
"supportEmail": "support@lmshostingservices.com",
"tags": [
"administration",
"moodle",
"lms-labs"
],
"pricingModel": "Paid — 50 Credits ($5 USD) (one-off)",
"priceUsd": 5,
"marketplacePricingStatus": "priced",
"marketplacePricingReason": null,
"creditNote": null,
"externalServices": "This plugin does not communicate with any external service. All processing occurs within your Moodle installation.",
"gettingStartedHtml": "<div>\n <p><strong>Use this plugin on its own — or make the whole suite simpler</strong></p>\n <p>This plugin works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See <a href=\"https://lms-labs.com/pricing\">LMS Labs pricing and AI credits</a> for current plans.</p>\n <p><strong>Highly recommended when you use more than one LMS Labs plugin:</strong></p>\n <ul>\n <li><strong><a href=\"https://lms-labs.com/docs/ai-central-config\">AI Grader Central Config</a> (free)</strong> — enter the Site ID and API key once. Compatible plugins can read the same values, so you do not need to enter them again in every plugin.</li>\n <li><strong><a href=\"https://lms-labs.com/docs/ai-dashboard-quick-links\">AI Dashboard Quick Links</a> (free)</strong> — one Moodle dashboard for installed plugins, settings, documentation, release checks and controlled updates.</li>\n </ul>\n <p>Both companion plugins are optional. You can keep using this plugin on its own and retain its own settings where available. Full help: <a href=\"https://lms-labs.com/docs/course-recertification\">Course Recertification documentation</a>.</p>\n</div>",
"marketplacePageHtml": "<div><div><p><strong>Use this plugin on its own — or make the whole suite simpler</strong></p><p>This plugin works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See <a href=\"https://lms-labs.com/pricing\">LMS Labs pricing and AI credits</a> for current plans.</p><p><strong>Highly recommended when you use more than one LMS Labs plugin:</strong></p><ul><li><strong><a href=\"https://lms-labs.com/docs/ai-central-config\">AI Grader Central Config</a> (free)</strong> — enter the Site ID and API key once. Compatible plugins can read the same values, so you do not need to enter them again in every plugin.</li><li><strong><a href=\"https://lms-labs.com/docs/ai-dashboard-quick-links\">AI Dashboard Quick Links</a> (free)</strong> — one Moodle dashboard for installed plugins, settings, documentation, release checks and controlled updates.</li></ul><p>Both companion plugins are optional. You can keep using this plugin on its own and retain its own settings where available. Full help: <a href=\"https://lms-labs.com/docs/course-recertification\">Course Recertification documentation</a>.</p></div><div><p><strong>Re-Certification That Runs Itself</strong></p><p><em>Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.</em></p><p>Local plugin · v1.2.1 · Moodle™ 4.4 - 5.x · Paid — 50 Credits ($5 USD) (one-off)</p><p>Course Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.</p><p><strong>Why This Beats Manual Tracking</strong></p><p>Moodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.</p><p><strong>Key Features</strong></p><ul><li><strong>Recurring reset</strong> — reset activity completion, course completion and optionally grades on a schedule.</li><li><strong>Flexible scheduling</strong> — choose a relative rolling anniversary or a fixed calendar schedule.</li><li><strong>Configurable reset depth</strong> — reset just completion, or deeper attempt data, matched to your use case.</li><li><strong>Advance warnings</strong> — send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.</li><li><strong>Full history</strong> — track original completion, every renewal and the certifying body for a per-learner lifecycle report.</li><li><strong>Audit log</strong> — append-only entries record every reset, with GDPR export supported.</li><li><strong>Per-course overrides</strong> — set site defaults, then override behaviour from a course's settings menu.</li></ul><p><strong>Who It Is For</strong></p><ul><li>RTOs and TAFEs delivering training that must be re-certified periodically.</li><li>Employers and compliance teams managing safety-critical or licence-based competencies.</li></ul><p><strong>Requirements And Compatibility</strong></p><ul><li>Moodle 4.4 to 5.x.</li><li>PHP 7.4 or later.</li><li>No AI account or credits required. The plugin makes no external API calls.</li></ul><p><strong>Getting Started</strong></p><p>Install via Site administration > Plugins > Install plugins, then open Site administration > Plugins > Local plugins > Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.</p><p><strong>Documentation And Support</strong></p><p>Full documentation is at <a href=\"https://lms-labs.com/docs/course-recertification\" target=\"_blank\" rel=\"noopener\">lms-labs.com/docs/course-recertification</a>. Support is at <a href=\"mailto:support@lmshostingservices.com\">support@lmshostingservices.com</a>.</p><p><strong>Pricing</strong></p><p>This plugin is available on the Moodle Marketplace for <strong>50 Credits ($5 USD)</strong> (one-off). An LMS Labs account (free) is required to use AI features.</p></div></div>",
"versionNotes": "Issues fixed\n\n- No user-facing fixes were documented for this release.",
"screenshotsNote": "Show meaningful features in use — the main UI, an important workflow, a finished report or dashboard. Must be at least 128 px wide and no more than 480 px wide. Avoid empty states, unreadable detail, and near-duplicate shots.",
"logoUrl": "/marketplace-logos/recertify.png",
"logoNote": "1024×1024 PNG, under 200 KB — comfortably above the 200×200 px minimum and under the 10 MB upload limit.",
"iconNote": "Upload this PNG as the plugin icon. Minimum dimensions 200×200 px — this file is 1024×1024.",
"websiteUrl": "https://lms-labs.com",
"priceName": "Standard",
"priceDescription": "One-off purchase — no subscription. Includes the complete feature set and every future plugin update.",
"billingType": "One-off purchase",
"termsOfSaleUrl": "https://lms-labs.com/terms",
"invoiceNote": "Optional. Turn on 'Enable invoice-based purchasing' only if you want to issue and manage invoices through Stripe Connect — otherwise leave it off.",
"leadMaintainer": "LMS Hosting Services (support@lmshostingservices.com) — Lead maintainer",
"contributorsNote": "The lead maintainer edits the plugin page, uploads versions, and manages contributors. Add teammates as Maintainer (can edit and upload versions) or Contributor (credited on the page only)."
}