adminHome(); $this->adminLanguage(); $this->adminCategory(); $this->adminSubject(); $this->adminQuiz(); $this->adminQuestion(); $this->adminTemplate(); $this->adminStatistic(); $this->adminLeaderboard(); $this->adminLesson(); $this->adminLessonCategory(); $this->adminCourse(); $this->adminSetting(); $this->adminOrder(); $this->adminAddon(); $this->adminStudent(); $this->adminTheme(); $this->adminReview(); $this->adminCoupon(); $this->adminTool(); $this->adminAnnouncement(); $this->frontCheckout(); $this->frontCourse(); $this->frontDashboard(); $this->frontQuiz(); $this->frontStatistic(); $this->frontUser(); $this->frontHome(); $this->aiCommon(); // Init REST API routes. add_action('rest_api_init', array($this, 'register_rest_routes'), 10); } /** * Our custom lesson-editor roles have no core `edit_posts` capability, but * WP's oEmbed proxy REST endpoint (used by the Gutenberg Embed block to * fetch previews) requires it via `current_user_can('edit_posts')`. Grant * that capability, only for this one REST route and only for the duration * of this request, to users who can already edit Acadlix lessons. */ public function allow_oembed_proxy_for_lesson_editors($result, $server, $request) { if (strpos($request->get_route(), '/oembed/1.0/proxy') === false) { return $result; } add_filter('user_has_cap', function ($allcaps) { if (empty($allcaps['edit_posts']) && (!empty($allcaps['acadlix_show_lesson']) || !empty($allcaps['acadlix_edit_lesson']))) { $allcaps['edit_posts'] = true; } return $allcaps; }); return $result; } public function adminHome(): AdminHomeController|null { if (is_null($this->_adminHome)) { $this->_adminHome = new AdminHomeController(); } $this->_rests[] = $this->_adminHome; return $this->_adminHome; } public function adminLanguage(): AdminLanguageController|null { if (is_null($this->_adminLanguage)) { $this->_adminLanguage = new AdminLanguageController(); } $this->_rests[] = $this->_adminLanguage; return $this->_adminLanguage; } public function adminCategory(): AdminCategoryController|null { if (is_null($this->_adminCategory)) { $this->_adminCategory = new AdminCategoryController(); } $this->_rests[] = $this->_adminCategory; return $this->_adminCategory; } public function adminSubject(): AdminSubjectController|null { if (is_null($this->_adminSubject)) { $this->_adminSubject = new AdminSubjectController(); } $this->_rests[] = $this->_adminSubject; return $this->_adminSubject; } public function adminQuiz(): AdminQuizController|null { if (is_null($this->_adminQuiz)) { $this->_adminQuiz = new AdminQuizController(); } $this->_rests[] = $this->_adminQuiz; return $this->_adminQuiz; } public function adminQuestion(): AdminQuestionController|null { if (is_null($this->_adminQuestion)) { $this->_adminQuestion = new AdminQuestionController(); } $this->_rests[] = $this->_adminQuestion; return $this->_adminQuestion; } public function adminTemplate(): AdminTemplateController|null { if (is_null($this->_adminTemplate)) { $this->_adminTemplate = new AdminTemplateController(); } $this->_rests[] = $this->_adminTemplate; return $this->_adminTemplate; } public function adminStatistic(): AdminStatisticController|null { if (is_null($this->_adminStatistic)) { $this->_adminStatistic = new AdminStatisticController(); } $this->_rests[] = $this->_adminStatistic; return $this->_adminStatistic; } public function adminLeaderboard(): AdminLeaderboardController|null { if (is_null($this->_adminLeaderboard)) { $this->_adminLeaderboard = new AdminLeaderboardController(); } $this->_rests[] = $this->_adminLeaderboard; return $this->_adminLeaderboard; } public function adminLesson(): AdminLessonController|null { if (is_null($this->_adminLesson)) { $this->_adminLesson = new AdminLessonController(); } $this->_rests[] = $this->_adminLesson; return $this->_adminLesson; } public function adminLessonCategory(): AdminLessonCategoryController|null { if (is_null($this->_adminLessonCategory)) { $this->_adminLessonCategory = new AdminLessonCategoryController(); } $this->_rests[] = $this->_adminLessonCategory; return $this->_adminLessonCategory; } public function adminCourse(): AdminCourseController|null { if (is_null($this->_adminCourse)) { $this->_adminCourse = new AdminCourseController(); } $this->_rests[] = $this->_adminCourse; return $this->_adminCourse; } public function adminSetting(): AdminSettingController|null { if (is_null($this->_adminSetting)) { $this->_adminSetting = new AdminSettingController(); } $this->_rests[] = $this->_adminSetting; return $this->_adminSetting; } public function adminOrder(): AdminOrderController|null { if (is_null($this->_adminOrder)) { $this->_adminOrder = new AdminOrderController(); } $this->_rests[] = $this->_adminOrder; return $this->_adminOrder; } public function adminAddon(): AdminAddonController|null { if (is_null($this->_adminAddon)) { $this->_adminAddon = new AdminAddonController(); } $this->_rests[] = $this->_adminAddon; return $this->_adminAddon; } public function adminStudent(): AdminStudentController|null { if (is_null($this->_adminStudent)) { $this->_adminStudent = new AdminStudentController(); } $this->_rests[] = $this->_adminStudent; return $this->_adminStudent; } public function adminTheme(): AdminThemeController|null { if (is_null($this->_adminTheme)) { $this->_adminTheme = new AdminThemeController(); } $this->_rests[] = $this->_adminTheme; return $this->_adminTheme; } public function adminReview(): AdminReviewController|null { if (is_null($this->_adminReview)) { $this->_adminReview = new AdminReviewController(); } $this->_rests[] = $this->_adminReview; return $this->_adminReview; } public function adminCoupon(): AdminCouponController|null { if (is_null($this->_adminCoupon)) { $this->_adminCoupon = new AdminCouponController(); } $this->_rests[] = $this->_adminCoupon; return $this->_adminCoupon; } public function adminTool(): AdminToolController|null { if (is_null($this->_adminTool)) { $this->_adminTool = new AdminToolController(); } $this->_rests[] = $this->_adminTool; return $this->_adminTool; } public function adminAnnouncement(): AdminAnnouncementController|null { if (is_null($this->_adminAnnouncement)) { $this->_adminAnnouncement = new AdminAnnouncementController(); } $this->_rests[] = $this->_adminAnnouncement; return $this->_adminAnnouncement; } public function frontCheckout(): FrontCheckoutController|null { if (is_null($this->_frontCheckout)) { $this->_frontCheckout = new FrontCheckoutController(); } $this->_rests[] = $this->_frontCheckout; return $this->_frontCheckout; } public function frontCourse(): FrontCourseController|null { if (is_null($this->_frontCourse)) { $this->_frontCourse = new FrontCourseController(); } $this->_rests[] = $this->_frontCourse; return $this->_frontCourse; } public function frontDashboard(): FrontDashboardController|null { if (is_null($this->_frontDashboard)) { $this->_frontDashboard = new FrontDashboardController(); } $this->_rests[] = $this->_frontDashboard; return $this->_frontDashboard; } public function frontQuiz(): FrontQuizController|null { if (is_null($this->_frontQuiz)) { $this->_frontQuiz = new FrontQuizController(); } $this->_rests[] = $this->_frontQuiz; return $this->_frontQuiz; } public function frontStatistic(): FrontStatisticController|null { if (is_null($this->_frontStatistic)) { $this->_frontStatistic = new FrontStatisticController(); } $this->_rests[] = $this->_frontStatistic; return $this->_frontStatistic; } public function frontUser(): FrontUserController|null { if (is_null($this->_frontUser)) { $this->_frontUser = new FrontUserController(); } $this->_rests[] = $this->_frontUser; return $this->_frontUser; } public function frontHome(): FrontHomeController|null { if (is_null($this->_frontHome)) { $this->_frontHome = new FrontHomeController(); } $this->_rests[] = $this->_frontHome; return $this->_frontHome; } public function aiCommon(): AICommonController|null { if (is_null($this->_aiCommon)) { $this->_aiCommon = new AICommonController(); } $this->_rests[] = $this->_aiCommon; return $this->_aiCommon; } /** * Register rest API route function * * @return void */ public function register_rest_routes(): void { foreach ($this->_rests as $controller) { method_exists($controller, 'register_routes') && $controller->register_routes(); } } public static function instance() { if (!self::$_instance) { self::$_instance = new self(); } return self::$_instance; } }