Changelog
All notable changes to mod_coursemail are documented here.
v0.1.2 — CI compliance fixes (2026-07-10)
Fixes for issues surfaced by the new GitHub Actions CI workflow (moodle-plugin-ci),
none of which change plugin behaviour:
- Fix (PHPDoc): three
@param docblocks were out of sync with their function
signatures (testcourse_generator::seed_individual_messages,
get_folder::execute, backup_test::backup_and_restore).
- Fix (invalid markup): the message list item was a
<button> containing
<div> children, which is not valid HTML5 (button only accepts phrasing
content). Replaced with <span>, preserving the layout via explicit
display: block in CSS.
- Fix (lint): capitalised a lowercase JS comment (
capitalized-comments
ESLint rule) and removed an unnecessary !important in styles.css
(declaration-no-important stylelint rule); the class-based selector already
had enough specificity without it.
- Fix (mustache lint): added the missing "Example context" block to
mobile_view.mustache.
v0.1.1 — Compliance and packaging fixes (2026-07-02)
Fixes for three issues reported against the v0.1.0 package (Moodle plugins directory
review / CLI installation):
- Fix (install-breaking):
db/messages.php used MESSAGE_DEFAULT_LOGGEDIN and
MESSAGE_DEFAULT_LOGGEDOFF, which are deprecated since Moodle 4.0 (MDL-73284) and
have been removed in newer Moodle releases, making admin/cli/upgrade.php abort
with Undefined constant "MESSAGE_DEFAULT_LOGGEDIN" while loading message
providers. Replaced with MESSAGE_DEFAULT_ENABLED, matching the pattern used by
core plugins (e.g. mod_forum): the popup/bell notification stays enabled by
default, email is permitted but opt-in.
- Fix (invalid build artifact):
amd/build/mailbox.min.js and
amd/build/repository.min.js were flat, unminified copies of the amd/src/
sources, which is invalid per the Moodle JS module build process. Rebuilt both
with the real Moodle grunt amd pipeline (Rollup + terser), producing genuinely
minified output plus source maps (*.min.js.map). No behaviour change: verified
with the @mod_coursemail Behat suite (real browser) before and after.
- Fix (licensing/IP compliance): the plugin package had no
LICENSE file at its
root, even though every source file already declared "GNU GPL v3 or later". Added
a LICENSE file at the plugin root with the verbatim GPL-3.0 text.
v0.1.0 — First public release (2026-06-13)
mod_coursemail is a Moodle 4.1 activity module that gives each activity instance
its own internal mailbox, with configurable activity completion. It is inspired by
local_mail but is a self-contained activity with no dependency on it.
Highlights:
- Threaded conversations between teachers and students, entirely inside the
course — no external email involved.
- Teacher messaging: send to a single student, the whole class, or a
group/grouping in one action. The conversation's "To:" header shows each
recipient's read / replied status.
- Student messaging: read, reply within the thread, and start conversations
with the teaching staff.
- Folders: Inbox, Sent, Drafts, Starred, plus a Supervision folder for
managers (mod/coursemail:viewall).
- Productivity: conversation search, a This activity / Whole course scope
toggle, attachments, quick filters and bulk actions, course-page status badges,
and a role-aware in-app help screen.
- Activity completion tied to messaging: a single rule that combines reading
all staff messages (optional), replying where a response is required, and
per-student manual completion marked by a teacher.
- Full Moodle integration: events, a privacy (GDPR) provider, backup/restore,
capabilities, and English and Spanish language packs.
Requires Moodle 4.1 (LTS). Tested on PHP 7.4.