Group-class scheduling, instructor assignment, and details/invite management #98

Merged
thatguygriff merged 1 commits from feature/group-class-scheduling into main 2026-07-23 20:34:16 +00:00
Owner

Summary

Group classes now carry a specific class time (alongside date and duration) and an assigned instructor, students see who teaches each class and when it meets, and the back-office group-class views are reworked into per-class summaries that click through to a full details page from which invite-only membership is managed.

Class time & instructor

  • Schema: add class_time (TIME) to us_offerings; Offering gains normalizeTime and sessionWindows. No version bump — 1.1.0 is unreleased, so this rides the pending 1.0.0→1.1.0 dbDelta upgrade.
  • Offering form gains a class-time field and a studio-admin Instructor picker (plain instructors always own the classes they create).
  • Offering\ClassSlotReconciler: assigning an instructor to a scheduled class clears their open booking slots overlapping each session and flags any already-booked lesson that clashes (a booked lesson is never deleted). Backed by new AvailabilityRepository::findOverlapping.
  • GET /offerings exposes instructor_name; the enrolment page shows the instructor and when the class meets.

Back-office views

  • Instructor My Group Classes and studio-admin Group Classes are now per-class summaries with enrolment counts, not flat student lists.
  • Each links through (?class_id=<id>) to a per-class details page: schedule panel, roster with payment status, and — for invite-only classes — the add/make-available/invite-by-email controls. Invite-only membership is managed entirely from this page.
  • Invite actions are permitted for the class's owning instructor or any view_all_lessons studio admin, so an owner-operator (studio admin who also teaches — for whom the My Group Classes menu is hidden) can reach every class's roster and invites from the Group Classes page.

Tests

  • composer test — 508 tests, 1478 assertions, all pass
  • composer lint (PHPStan level 10) — clean
  • composer cs (PHPCS WordPress standards) — clean

Docs (docs/features/offerings.md, docs/features/group-classes.md) and the [1.1.0] CHANGELOG section updated.

🤖 Generated with Claude Code

## Summary Group classes now carry a specific **class time** (alongside date and duration) and an **assigned instructor**, students see who teaches each class and when it meets, and the back-office group-class views are reworked into per-class summaries that click through to a full details page from which invite-only membership is managed. ### Class time & instructor - Schema: add `class_time` (TIME) to `us_offerings`; `Offering` gains `normalizeTime` and `sessionWindows`. No version bump — 1.1.0 is unreleased, so this rides the pending 1.0.0→1.1.0 `dbDelta` upgrade. - Offering form gains a class-time field and a studio-admin **Instructor** picker (plain instructors always own the classes they create). - `Offering\ClassSlotReconciler`: assigning an instructor to a scheduled class clears their **open** booking slots overlapping each session and **flags** any already-booked lesson that clashes (a booked lesson is never deleted). Backed by new `AvailabilityRepository::findOverlapping`. - `GET /offerings` exposes `instructor_name`; the enrolment page shows the instructor and when the class meets. ### Back-office views - Instructor **My Group Classes** and studio-admin **Group Classes** are now per-class summaries with enrolment counts, not flat student lists. - Each links through (`?class_id=<id>`) to a per-class **details page**: schedule panel, roster with payment status, and — for invite-only classes — the add/make-available/invite-by-email controls. Invite-only membership is managed entirely from this page. - Invite actions are permitted for the class's owning instructor **or** any `view_all_lessons` studio admin, so an owner-operator (studio admin who also teaches — for whom the *My Group Classes* menu is hidden) can reach every class's roster and invites from the **Group Classes** page. ## Tests - `composer test` — 508 tests, 1478 assertions, all pass - `composer lint` (PHPStan level 10) — clean - `composer cs` (PHPCS WordPress standards) — clean Docs (`docs/features/offerings.md`, `docs/features/group-classes.md`) and the `[1.1.0]` CHANGELOG section updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
thatguygriff added 1 commit 2026-07-23 20:30:23 +00:00
Add group-class scheduling, instructor assignment, and details/invite management
CI / Tests (PHP 8.2) (pull_request) Successful in 39s
CI / Tests (PHP 8.1) (pull_request) Successful in 46s
CI / No Debug Code (pull_request) Successful in 2s
CI / Coding Standards (pull_request) Successful in 2m52s
CI / PHPStan (pull_request) Successful in 2m50s
CI / Tests (PHP 8.3) (pull_request) Successful in 2m36s
CI / Build Plugin Zip (pull_request) Skipped
b066bef353
Group classes now carry a specific class time (alongside date and duration)
and an assigned instructor:

- Schema: add `class_time` (TIME) to `us_offerings`; `Offering` gains
  `normalizeTime`/`sessionWindows`. (Rides the pending 1.0.0->1.1.0 dbDelta
  upgrade, so no version bump.)
- Offering form: class-time field, plus a studio-admin instructor picker
  (plain instructors always own their own classes).
- `ClassSlotReconciler`: assigning an instructor clears their open booking
  slots overlapping each session and flags already-booked lessons that clash
  (a booked lesson is never deleted). Uses new
  `AvailabilityRepository::findOverlapping`.
- Front end: `GET /offerings` exposes `instructor_name`; the enrolment page
  shows who teaches each class and when it meets.

Back-office group-class views redesigned:

- Instructor **My Group Classes** and studio-admin **Group Classes** are now
  per-class summaries with enrolment counts, not flat student lists.
- Each links through (`?class_id=<id>`) to a per-class **details page**
  (schedule panel, roster with payment status, and — for invite-only classes
  — the add/make-available/invite-by-email controls). Invite-only membership
  is managed entirely from this page.
- Invite actions are allowed for the class's owning instructor or any
  `view_all_lessons` studio admin, so an owner-operator (studio admin who also
  teaches) can reach every class's roster and invites from the Group Classes
  page.

Tests: composer test (508), composer lint, composer cs all pass.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
thatguygriff merged commit 00376799b9 into main 2026-07-23 20:34:16 +00:00
thatguygriff deleted branch feature/group-class-scheduling 2026-07-23 20:34:16 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Unsupervised/unsupervised-scheduler#98