Version 5.0.3
May 18, 2026
Added
- Full multisite support. Each course, lesson, and quiz lives only on the site it was created on, just like Craft entries with site-scoped sections. Element queries and index pages are now correctly scoped to the active site.
- Standard Craft breadcrumb-style site switcher on every Diploma CP page (dashboard, course/lesson/quiz edit screens, enrollments, certificates, settings). Course and quiz element indexes show the same switcher when multisite is enabled. Switching sites preserves the current path and query params.
- Migration
m260518_140000_pin_elements_to_primary_sitecleans up any cross-siteelements_sitesrows from earlier installs so existing elements remain pinned to their original site.
Fixed
- "Add Question" button now appears on the quiz edit screen — the control-panel JS bundle was registering CSS only, so
quiz-builder.jsnever loaded. - Question modal is now scrollable when content exceeds the viewport; the Save/Cancel footer stays pinned while the body scrolls.
- Saving a question now works on multisite installs. The save endpoint URL was built by concatenating
Craft.actionUrl + '/diploma/questions/save', which produced a broken URL whenCraft.actionUrlalready contained a?site=…query string. Switched toCraft.getActionUrl()so the path is appended before the query string. - Frontend
progress.jsandquiz.jsno longer hardcode/diploma/api/…paths, which broke on sites configured under a non-root base URL. The asset bundle now publishes awindow.DiplomaUrlsobject built fromUrlHelper::actionUrl()so the scripts always hit the correct per-site action endpoint.
Changed
- Redesigned the question modal to use Craft's native form styling (proper field labels, select dropdown, fullwidth textareas, bordered answer rows) and Garnish's modal shell.
Course,Lesson, andQuiznow declareisLocalized()astrueand overridegetSupportedSites()to return only the element's own site, so each element is pinned to the site it was created on. New elements pick up the active site fromCp::requestedSite()so creating one with?site=Xwrites it to that site.- Bumped
schemaVersionto1.0.1. Runphp craft migrate/allafter upgrading.
Version 5.0.1
April 10, 2026
Fixed
- Dashboard cards and other CP styles weren't loading because the plugin layout never registered the CP asset bundle.
Changed
- Marked nullable parameters explicitly (
?string) on elementdefineSources()anddefineActions()for forward compatibility with PHP 8.4's implicit-nullable deprecation. - Switched lesson and course queries from the string form of
orderBy()to the array form (['sortOrder' => SORT_ASC]), and quoted column references inselect()so cross-driver behavior is consistent.
Version 5.0.0
March 24, 2026
Added
- Initial release.
- Courses, lessons, and quizzes as Craft elements.
- Multiple question types: multiple choice, true/false, short answer, matching.
- Enrollment and progress tracking.
- Certificate generation with public verification.
- Pro edition: drip content, PDF certificates, Commerce/Headcount integration.