availabilityController = new AvailabilityController( $availability, $offerings ); $this->lessonController = new LessonController( $bookings, $payments ); $this->offeringController = new OfferingController( $offerings ); $this->questionController = new QuestionController( $questions, $offerings ); $this->policyController = new PolicyController( $policies, $policyVersions, $policyService ); $this->registrationController = new RegistrationController( $invites ); $this->groupClassController = new GroupClassController( $enrollments, $offerings ); $this->studentController = new StudentController( $bookings, $availability, $offerings, $enrollments, $resolver ); $this->settings = $settings; $this->paymentController = new PaymentController( $payments, $paymentService ); } public function register(): void { add_action( 'admin_menu', [ $this, 'addPages' ] ); } public function addPages(): void { // Studio-wide dashboard: all upcoming lessons across instructors. add_menu_page( __( 'Scheduler', 'unsupervised-schedular' ), __( 'Scheduler', 'unsupervised-schedular' ), RoleManager::CAP_VIEW_ALL_LESSONS, 'us-scheduler', [ $this->lessonController, 'renderAdminDashboard' ], 'dashicons-calendar-alt', 30 ); // Instructor: manage their own availability. add_menu_page( __( 'My Availability', 'unsupervised-schedular' ), __( 'My Availability', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_AVAILABILITY, 'us-availability', [ $this->availabilityController, 'renderPage' ], 'dashicons-clock', 31 ); // Studio admin / instructor: manage offerings. add_menu_page( __( 'Offerings', 'unsupervised-schedular' ), __( 'Offerings', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_OFFERINGS, 'us-offerings', [ $this->offeringController, 'renderPage' ], 'dashicons-tag', 33 ); // Studio admin / instructor: manage per-offering intake questions. add_submenu_page( 'us-offerings', __( 'Questions', 'unsupervised-schedular' ), __( 'Questions', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_QUESTIONS, 'us-questions', [ $this->questionController, 'renderPage' ] ); // Studio admin: draft, version, and publish policies. add_menu_page( __( 'Policies', 'unsupervised-schedular' ), __( 'Policies', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_POLICIES, 'us-policies', [ $this->policyController, 'renderPage' ], 'dashicons-text-page', 34 ); // Studio admin: invite students to register. add_menu_page( __( 'Invites', 'unsupervised-schedular' ), __( 'Invites', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_STUDENTS, 'us-invites', [ $this->registrationController, 'renderPage' ], 'dashicons-email', 35 ); // Studio admin: all group-class enrolments. add_menu_page( __( 'Group Classes', 'unsupervised-schedular' ), __( 'Group Classes', 'unsupervised-schedular' ), RoleManager::CAP_VIEW_ALL_LESSONS, 'us-group-classes', [ $this->groupClassController, 'renderPage' ], 'dashicons-groups', 36 ); // Studio admin: browse students and their activity. add_menu_page( __( 'Students', 'unsupervised-schedular' ), __( 'Students', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_STUDENTS, 'us-students', [ $this->studentController, 'renderPage' ], 'dashicons-id', 37 ); // Studio admin: confirm pending (e-transfer) payments. add_menu_page( __( 'Payments', 'unsupervised-schedular' ), __( 'Payments', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_BILLING, 'us-payments', [ $this->paymentController, 'renderPage' ], 'dashicons-money-alt', 38 ); // Studio admin: Stripe credentials and billing settings. add_menu_page( __( 'Studio Settings', 'unsupervised-schedular' ), __( 'Studio Settings', 'unsupervised-schedular' ), RoleManager::CAP_MANAGE_BILLING, 'us-settings', [ $this->settings, 'renderPage' ], 'dashicons-admin-settings', 39 ); // Instructor: view their upcoming lessons. add_menu_page( __( 'My Lessons', 'unsupervised-schedular' ), __( 'My Lessons', 'unsupervised-schedular' ), RoleManager::CAP_VIEW_LESSONS, 'us-my-lessons', [ $this->lessonController, 'renderInstructorLessons' ], 'dashicons-welcome-learn-more', 32 ); } }