Gives instructors a view of their own group classes and rosters under My Lessons → My Group Classes (view_own_lessons), completing the deferred part of the group-classes spec.
What
Lists the instructor's group-class offerings with active-enrolment counts vs. capacity ((N / capacity enrolled), or (N enrolled) when capacity is unlimited).
Cancelled/completed enrolments stay in the roster but don't count toward the capacity number.
How
GroupClassController::renderInstructorPage() groups the instructor's enrolments (existing findByInstructor query) by offering; injects PaymentRepository to resolve each enrolment's payment status.
Wired as a submenu under the existing My Lessons menu, inside the same !view_all_lessons guard so owner-operators don't get a duplicate item.
New template templates/admin/my-group-classes.php.
Gives instructors a view of their own group classes and rosters under **My Lessons → My Group Classes** (`view_own_lessons`), completing the deferred part of the group-classes spec.
## What
- Lists the instructor's group-class offerings with active-enrolment counts vs. capacity (`(N / capacity enrolled)`, or `(N enrolled)` when capacity is unlimited).
- Per-class roster: enrolled students, enrolment status, payment status.
- Cancelled/completed enrolments stay in the roster but don't count toward the capacity number.
## How
- `GroupClassController::renderInstructorPage()` groups the instructor's enrolments (existing `findByInstructor` query) by offering; injects `PaymentRepository` to resolve each enrolment's payment status.
- Wired as a submenu under the existing **My Lessons** menu, inside the same `!view_all_lessons` guard so owner-operators don't get a duplicate item.
- New template `templates/admin/my-group-classes.php`.
No schema change, so no version bump.
## Tests
`composer test` (447 tests), `composer lint` (PHPStan level 10), and `composer cs` (PHPCS) all pass. Added `tests/Unit/GroupClass/GroupClassControllerTest.php` (7 tests: capacity display, active-only counting, free-enrolment dash, cross-class isolation, empty states, capability denial).
Closes #71
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Instructors can now see their own group classes under My Lessons →
My Group Classes (view_own_lessons): each class shows its active
enrolment count against capacity plus a roster of enrolled students
with enrolment and payment status.
GroupClassController gains renderInstructorPage(), backed by the
existing per-instructor enrolment query and a newly injected
PaymentRepository for payment status. Wired as a submenu under the
existing My Lessons menu, inside the same !view_all_lessons guard so
owner-operators don't get a duplicate item.
Closes#71
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Gives instructors a view of their own group classes and rosters under My Lessons → My Group Classes (
view_own_lessons), completing the deferred part of the group-classes spec.What
(N / capacity enrolled), or(N enrolled)when capacity is unlimited).How
GroupClassController::renderInstructorPage()groups the instructor's enrolments (existingfindByInstructorquery) by offering; injectsPaymentRepositoryto resolve each enrolment's payment status.!view_all_lessonsguard so owner-operators don't get a duplicate item.templates/admin/my-group-classes.php.No schema change, so no version bump.
Tests
composer test(447 tests),composer lint(PHPStan level 10), andcomposer cs(PHPCS) all pass. Addedtests/Unit/GroupClass/GroupClassControllerTest.php(7 tests: capacity display, active-only counting, free-enrolment dash, cross-class isolation, empty states, capability denial).Closes #71
🤖 Generated with Claude Code