Add instructor group-class roster view under My Lessons
CI / Tests (PHP 8.2) (pull_request) Successful in 47s
CI / Tests (PHP 8.1) (pull_request) Successful in 38s
CI / No Debug Code (pull_request) Successful in 2s
CI / Coding Standards (pull_request) Successful in 2m50s
CI / PHPStan (pull_request) Successful in 2m54s
CI / Tests (PHP 8.3) (pull_request) Successful in 2m42s
CI / Build Plugin Zip (pull_request) Skipped
CI / Tests (PHP 8.2) (pull_request) Successful in 47s
CI / Tests (PHP 8.1) (pull_request) Successful in 38s
CI / No Debug Code (pull_request) Successful in 2s
CI / Coding Standards (pull_request) Successful in 2m50s
CI / PHPStan (pull_request) Successful in 2m54s
CI / Tests (PHP 8.3) (pull_request) Successful in 2m42s
CI / Build Plugin Zip (pull_request) Skipped
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]>
This commit is contained in:
@@ -54,13 +54,15 @@ payment step).
|
||||
instructor's group classes if the caller has `view_own_lessons` on those offerings.
|
||||
|
||||
## Admin Interface
|
||||
- **Group Classes** (`manage_options` / studio admin): all enrolments across instructors
|
||||
- Instructors see enrolments for their own group classes under **My Lessons**
|
||||
- **Group Classes** (`view_all_lessons` / studio admin): all active enrolments across instructors
|
||||
- **My Lessons → My Group Classes** (`view_own_lessons` / instructor): the instructor's
|
||||
own group classes, each showing its active-enrolment count against capacity and a
|
||||
per-class roster of enrolled students with enrolment and payment status
|
||||
|
||||
## Implementation
|
||||
- Repository: `Unsupervised\Schedular\GroupClass\EnrollmentRepository` (`countActiveForOffering`/`hasActiveEnrollment` enforce capacity and prevent duplicates)
|
||||
- Model: `Unsupervised\Schedular\GroupClass\Enrollment`
|
||||
- Admin controller: `Unsupervised\Schedular\GroupClass\GroupClassController` (gated on `view_all_lessons`)
|
||||
- Admin controller: `Unsupervised\Schedular\GroupClass\GroupClassController` — `renderPage` (studio admin, `view_all_lessons`) and `renderInstructorPage` (instructor, `view_own_lessons`)
|
||||
- REST endpoint: `Unsupervised\Schedular\GroupClass\EnrollmentEndpoint`
|
||||
- Frontend: `Unsupervised\Schedular\GroupClass\GroupClassPage` (`[us_group_classes]` shortcode; `offering="…"` restricts it to a single class for embedding on a dedicated page — the block equivalent is the `offeringId` attribute)
|
||||
- Reuses `Registration\RegistrationGate` (intake answers + booking-scoped policy acceptance, type `enrollment`)
|
||||
@@ -68,12 +70,10 @@ instructor's group classes if the caller has `view_own_lessons` on those offerin
|
||||
> **Payment:** a priced enrolment creates a payment via `Payment\PaymentService`
|
||||
> (`registration_type = enrollment`) and links it as `payment_id`; unpriced
|
||||
> enrolments return `payment: null` and skip the payment step. See `payments.md`
|
||||
> for the card/e-transfer/comp flows. Instructor-specific enrolment views (the
|
||||
> spec's "under My Lessons") are a follow-up (#71) — this iteration ships the
|
||||
> studio-admin **Group Classes** page (`view_all_lessons`) plus
|
||||
> per-student/per-instructor REST queries.
|
||||
> for the card/e-transfer/comp flows.
|
||||
|
||||
## Tests
|
||||
- `tests/Unit/GroupClass/GroupClassControllerTest.php`
|
||||
- `tests/Unit/GroupClass/EnrollmentTest.php`
|
||||
- `tests/Unit/GroupClass/EnrollmentRepositoryTest.php`
|
||||
- `tests/Unit/GroupClass/GroupClassPageTest.php`
|
||||
|
||||
Reference in New Issue
Block a user