Groups Management
Time-controlled access windows for Moodle groups. Define when each student cohort (intake) can access a course — with automatic status tracking, student banners, and a full audit trail.
See archive-bound Requirements | One-time unlock, lifetime updates
⭐ Why this plugin is unlike anything else available
Time-based group access that activates and expires automatically
▸ Moodle's group system controls who is in a group but not when that group can access activities. Group Manager adds date windows to group membership: a 'Cohort March 2026' group automatically gains access to activities on 1 March and loses it on 31 March, with no admin action required at either boundary.
▸ The availability condition evaluates each learner's date window whenever they access an activity, so restrictions take effect from the configured start and end dates; a nightly scheduled task reconciles group statuses (and any enrolment auto-suspend) in the background. Administrators set the window once; the system enforces it indefinitely across every activity that uses the condition.
▸ Works with the availability condition system: any Moodle activity can be restricted to a specific group window without requiring a dedicated course per cohort.
Groups Management lets you wrap any Moodle group in an access window — a start date, an end date (or duration in days), and an optional grace period. Students in that group can only access the course content while their window is open.
It installs as two plugins that work together:
local_groupmanager
The management UI — where you create, edit, lock, and archive intake groups. Adds a "Groups Management" link inside each course.
availability_groupmanager
The availability condition — enforces date restrictions on individual activities and sections using Moodle's native availability API.
Important: Restrictions apply only to the roles you configure under "Roles Subject to Restrictions" (default: Students only), and users with the local/groupmanager:bypass capability are always exempt. For affected roles, a user not in any managed group is denied access — preventing them bypassing restrictions by simply not belonging to a group.
Management plugin
/local/groupmanager/
Availability condition plugin
/availability/condition/groupmanager/
Both plugins are included in the one ZIP download. Install them both before using the plugin.
Find the plugin inside a course
Open the course in Moodle, then go to Course administration → Users → Groups Management. The link is added automatically to every course where you have the local/groupmanager:view capability (teachers and admins by default).
Alternatively, visit /local/groupmanager/index.php with no course ID to see a site-wide list of all courses you can manage.
Create your first intake group
On the Groups Management page, click Add New Intake Group. This opens the intake form.
You can either link an existing Moodle group (choose from the dropdown) or leave the dropdown on "Create new group" and the plugin will create a brand-new Moodle group automatically.
Fill in the Access Window
The form has an Access Window section with four fields — see the complete field reference below.
Save and check the status badge
After saving, the group appears in the management table with a coloured status badge (Upcoming, Active, Ending Soon, Completed, Locked, or Archived). This status updates automatically as time passes — or immediately when you change the dates.
Add students to the Moodle group
Go to Course administration → Groups and add students to the underlying Moodle group as normal. Those students will now have their access governed by the dates you set.
| Field | Type | What it does |
|---|---|---|
| Intake Name | Text | A label for this cohort, e.g. "2025 Feb Intake" or "Term 2 Cohort". Appears in the management table and in student banners. |
| Start Date | Date picker *required | The date access opens for students in this group. Before this date the group status is Upcoming and students see a "Your course will open on…" banner. Date-only — no time component. |
| End Date | Date picker (optional) | A fixed calendar date when access closes. Tick the checkbox next to the field to enable it. When End Date is set, the Duration field below is disabled — use one or the other, not both. |
| Duration (days) | Number | Number of days from the start date until access ends. Useful for rolling intakes where every student gets the same number of days regardless of when they start. Ignored when End Date is set. |
| Grace Period (days) | Number | Extra days after the end date before the course is fully locked. During the grace period students still have access but see an orange "Your course access ends in N days" warning banner. Defaults to 0 (no grace period). |
You can edit all of these fields at any time — the status badge recalculates instantly on save and the change is written to the audit log.
Every intake group has one of six statuses. The plugin calculates the status automatically based on the current date and the group's settings. The scheduled task "Update group availability status" also recalculates all statuses once daily (at midnight, server time) in the background.
Now is before the Start Date. Students see a blue banner: "Your course will open on [date]". Content is restricted.
Now is after Start Date and more than 7 days before End Date. Students have full access. No banner is shown — everything looks normal.
Fewer than 7 days remain before End Date, OR now is within the Grace Period. Students still have access but see an orange banner: "Your course access ends in [N] days".
Now is past End Date + Grace Period. Students are locked out. A red banner reads: "This course access period has ended. Please contact your trainer if you require an extension."
Manually locked by an admin regardless of dates. Students are locked out immediately. A red banner reads: "This course is currently locked. Please contact your administrator for assistance." Unlock restores date-based status.
Archived by an admin. The intake is hidden from the main management table and treated as inactive. Archiving does not delete the underlying Moodle group or its members.
No end date set? If you leave both End Date and Duration blank, the group stays Active indefinitely once the start date is reached — access never expires.
The management table shows all non-archived intake groups for the course, sorted by start date. Each row has an actions column with the following buttons:
Deleting a group is only possible when the underlying Moodle group has zero enrolled students. Groups with members cannot be deleted — archive them instead.
The plugin injects a banner at the very top of the Moodle page — above the course title, above the navigation bar, above all content — on two places:
- The course homepage
- Every individual activity page within the course
Each banner has an icon on the left, a bold main message, and a softer secondary description below it. The banner only appears when there is something actionable for the student — no banner is shown during normal active access.
Your course will open on 3 February 2025
You'll gain full access on this date.
The date shown is the group's Start Date formatted in the user's Moodle locale. Students cannot access any restricted content until this date arrives.
Your course access ends in 5 days
Please complete outstanding activities.
The number of days counts down in real time each time the page loads. Two separate conditions trigger this banner:
- Within 7 days of End Date — student still has normal access, just being warned
- During Grace Period — End Date has passed but grace days remain; days count down to the grace end, not the original end date
- Individual extension active — if an admin has granted a personal extension, days count down to the student's extended date
This course access period has ended.
Please contact your trainer if you require an extension.
The student can still see the course exists and the banner message, but all restricted content is locked. They must contact a trainer to receive an individual extension.
This course is currently locked.
Please contact your administrator for assistance.
Same visual style as Completed but with a different message. Unlocking the group from the management table immediately removes this banner.
No banner displayed. Students see the course exactly as normal.
No banner means no distraction. Students with active access see zero indication that any intake management is in place.
Where banners do NOT appear
- The Moodle Dashboard / My Courses page — no labels or indicators anywhere on the dashboard
- Any page outside a course context (site pages, user profile, etc.)
- For teachers and admins — users with
local/groupmanager:bypassnever see any banner
Activity-level restriction messages
In addition to the page-top banner, if the availability_groupmanager condition is applied to individual activities or course sections, students outside their window see restriction text next to each locked item in the course outline:
Whether these items appear hidden or greyed out depends on the Content Visibility setting — see below.
When a student's access window is closed (before start or after end), the plugin can show locked content in two different ways. This is configured in Site Administration → Plugins → Local plugins → Groups Management → Default Visibility Mode:
Locked content is completely invisible to the student. They cannot see activity titles or descriptions.
Locked content is visible but inaccessible. Students can see what's coming (or what has ended) but cannot open it.
If a single student needs more time without extending the whole group, you can grant them an individual override. This requires the local/groupmanager:override capability.
From the management dashboard, open the intake group, find the student, and set an "Extend Until" date. While the override is active:
- The student's individual extended date is used instead of the group end date for access checks
- The "Ending Soon" banner counts down to their personal extended date, not the group end date
- The override reason is recorded in the audit log
If your course already has Moodle groups set up, you don't need to recreate them one by one. The Quick Import button (shown in the header when unmanaged groups exist) lets you select multiple existing groups and register them as managed intakes in one action.
How it works:
- Only shows groups that are not already managed
- You set a default duration in days — all selected groups get today as their start date and that many days until expiry
- After import, you can edit each group individually to fine-tune dates
- Each import is recorded in the audit log with "bulk import" as the source
Every action is automatically logged — you cannot accidentally make an untracked change. The audit log records:
Access the audit log via the log icon on any group row, or via the Audit Log quick action at the bottom of the management page. The Compliance Report gives a broader view including all active intakes, enrolled counts, and whether any access integrity issues exist.
| Capability | What it allows |
|---|---|
| local/groupmanager:view | See the Groups Management page and management table for a course |
| local/groupmanager:manage | Create, edit, lock, unlock, archive, and delete intake groups |
| local/groupmanager:override | Grant or remove individual student access extensions |
| local/groupmanager:viewreports | View compliance reports and the full audit log |
| local/groupmanager:bypass | Bypass all date restrictions — teacher/admin access is never blocked. No banner is ever shown to users with this capability. |
- Dates are day-only, not datetime. Access opens at midnight on the start date and closes at midnight on the end date (server timezone). There is no hour/minute setting.
- Affected roles not in any managed group are denied access. By default only students are subject to restrictions (configurable under "Roles Subject to Restrictions"), and holders of
local/groupmanager:bypassare exempt — if the course has managed groups but an affected user isn't in one, they cannot access the content. - This does not change the Moodle course start/end date. It controls group-level access windows within a course, not the course's own settings in Moodle.
- End Date takes priority over Duration. If you set both, End Date wins. Disable End Date (untick the checkbox) to use Duration instead.
- Status recalculates on edit and on a scheduled task. If the current date passes a boundary (e.g. start date arrives), the scheduled task will update the status automatically — you don't need to manually edit the group.
- Archiving vs deleting. You can only delete a group that has zero enrolled members. For completed intakes with students, use Archive instead.
