← All changes
|
inc/rest-api/v1/admin/class-lp-admin-rest-course-controller.php
+128
-128
4.3.9
→
4.4.8
View file →
| @@ -1,128 +1,128 @@ | ||
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Class LP_REST_Users_Controller | |
| 5 | - * | |
| 6 | - * @since 3.3.0 | |
| 7 | - */ | |
| 8 | -class LP_REST_Admin_Course_Controller extends LP_Abstract_REST_Controller { | |
| 9 | - | |
| 10 | - public function __construct() { | |
| 11 | - $this->namespace = 'lp/v1/admin'; | |
| 12 | - $this->rest_base = 'course'; | |
| 13 | - | |
| 14 | - parent::__construct(); | |
| 15 | - } | |
| 16 | - | |
| 17 | - /** | |
| 18 | - * Register rest routes. | |
| 19 | - */ | |
| 20 | - public function register_routes() { | |
| 21 | - $this->routes = array( | |
| 22 | - 'get_final_quiz' => array( | |
| 23 | - array( | |
| 24 | - 'methods' => WP_REST_Server::CREATABLE, | |
| 25 | - 'callback' => array( $this, 'get_final_quiz' ), | |
| 26 | - 'permission_callback' => function () { | |
| 27 | - return current_user_can( 'edit_posts' ); | |
| 28 | - }, | |
| 29 | - ), | |
| 30 | - ), | |
| 31 | - ); | |
| 32 | - | |
| 33 | - parent::register_routes(); | |
| 34 | - } | |
| 35 | - | |
| 36 | - /** | |
| 37 | - * Get Final Quiz in Course Settings. | |
| 38 | - * | |
| 39 | - * @return void | |
| 40 | - */ | |
| 41 | - public function get_final_quiz( WP_REST_Request $request ) { | |
| 42 | - $params = $request->get_params(); | |
| 43 | - $course_id = $params['courseId'] ?? false; | |
| 44 | - $is_course_builder = ! empty( $params['is_course_builder'] ) || ! empty( $params['isCourseBuilder'] ); | |
| 45 | - $response = new LP_REST_Response(); | |
| 46 | - $response->data = ''; | |
| 47 | - $final_quiz = ''; | |
| 48 | - | |
| 49 | - try { | |
| 50 | - if ( empty( $course_id ) ) { | |
| 51 | - throw new Exception( esc_html__( 'No Course ID available!', 'learnpress' ) ); | |
| 52 | - } | |
| 53 | - | |
| 54 | - $course = learn_press_get_course( $course_id ); | |
| 55 | - | |
| 56 | - if ( ! $course ) { | |
| 57 | - throw new Exception( esc_html__( 'No Course available!', 'learnpress' ) ); | |
| 58 | - } | |
| 59 | - | |
| 60 | - $items = $course->get_item_ids(); | |
| 61 | - | |
| 62 | - if ( $items ) { | |
| 63 | - foreach ( $items as $item ) { | |
| 64 | - if ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) { | |
| 65 | - $final_quiz = $item; | |
| 66 | - } | |
| 67 | - } | |
| 68 | - } | |
| 69 | - | |
| 70 | - if ( ! empty( $final_quiz ) ) { | |
| 71 | - update_post_meta( $course_id, '_lp_final_quiz', $final_quiz ); | |
| 72 | - $passing_grade = get_post_meta( $final_quiz, '_lp_passing_grade', true ); | |
| 73 | - if ( '' === (string) $passing_grade ) { | |
| 74 | - $quiz_model = \LearnPress\Models\QuizPostModel::find( absint( $final_quiz ), true ); | |
| 75 | - if ( $quiz_model ) { | |
| 76 | - $passing_grade = $quiz_model->get_passing_grade(); | |
| 77 | - } else { | |
| 78 | - $passing_grade = 80; | |
| 79 | - } | |
| 80 | - } | |
| 81 | - $url = $this->get_final_quiz_edit_link( $final_quiz, $course_id, $is_course_builder ); | |
| 82 | - | |
| 83 | - ob_start(); | |
| 84 | - ?> | |
| 85 | - <div class="lp-metabox-evaluate-final_quiz__message"> | |
| 86 | - <?php printf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ); ?> | |
| 87 | - - | |
| 88 | - <?php printf( esc_html__( 'Edit: %s', 'learnpress' ), '<a href="' . esc_url_raw( $url ) . '">' . get_the_title( $final_quiz ) . '</a>' ); ?> | |
| 89 | - </div> | |
| 90 | - <?php | |
| 91 | - $response->status = 'success'; | |
| 92 | - $response->data = ob_get_clean(); | |
| 93 | - } else { | |
| 94 | - delete_post_meta( $course_id, '_lp_final_quiz' ); | |
| 95 | - $response->data = '<div class="lp-metabox-evaluate-final_quiz__message lp-metabox-evaluate-final_quiz__message-error">' . esc_html__( 'No Quiz in this course!', 'learnpress' ) . '</div>'; | |
| 96 | - } | |
| 97 | - } catch ( Exception $e ) { | |
| 98 | - $response->message = $e->getMessage(); | |
| 99 | - } | |
| 100 | - | |
| 101 | - return rest_ensure_response( $response ); | |
| 102 | - } | |
| 103 | - | |
| 104 | - /** | |
| 105 | - * Build edit link for final quiz in course settings. | |
| 106 | - * | |
| 107 | - * @param int $final_quiz_id | |
| 108 | - * @param int $course_id | |
| 109 | - * @param bool $is_course_builder | |
| 110 | - * | |
| 111 | - * @return string | |
| 112 | - */ | |
| 113 | - protected function get_final_quiz_edit_link( int $final_quiz_id, int $course_id, bool $is_course_builder = false ): string { | |
| 114 | - $post_type_object = get_post_type_object( LP_QUIZ_CPT ); | |
| 115 | - $url = admin_url( sprintf( $post_type_object->_edit_link . '&action=edit#_lp_passing_grade', $final_quiz_id ) ); | |
| 116 | - | |
| 117 | - if ( $is_course_builder && class_exists( '\LearnPress\CourseBuilder\CourseBuilder' ) ) { | |
| 118 | - $url = \LearnPress\CourseBuilder\CourseBuilder::get_tab_link( 'quizzes', absint( $final_quiz_id ), 'settings' ) . '#_lp_passing_grade'; | |
| 119 | - } | |
| 120 | - | |
| 121 | - return apply_filters( | |
| 122 | - 'learn-press/course/meta-box/assessment/final-quiz/edit-link', | |
| 123 | - $url, | |
| 124 | - $final_quiz_id, | |
| 125 | - $course_id | |
| 126 | - ); | |
| 127 | - } | |
| 128 | -} | |
| 1 | +<?php | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * Class LP_REST_Users_Controller | |
| 5 | + * | |
| 6 | + * @since 3.3.0 | |
| 7 | + */ | |
| 8 | +class LP_REST_Admin_Course_Controller extends LP_Abstract_REST_Controller { | |
| 9 | + | |
| 10 | + public function __construct() { | |
| 11 | + $this->namespace = 'lp/v1/admin'; | |
| 12 | + $this->rest_base = 'course'; | |
| 13 | + | |
| 14 | + parent::__construct(); | |
| 15 | + } | |
| 16 | + | |
| 17 | + /** | |
| 18 | + * Register rest routes. | |
| 19 | + */ | |
| 20 | + public function register_routes() { | |
| 21 | + $this->routes = array( | |
| 22 | + 'get_final_quiz' => array( | |
| 23 | + array( | |
| 24 | + 'methods' => WP_REST_Server::CREATABLE, | |
| 25 | + 'callback' => array( $this, 'get_final_quiz' ), | |
| 26 | + 'permission_callback' => function () { | |
| 27 | + return current_user_can( 'edit_posts' ); | |
| 28 | + }, | |
| 29 | + ), | |
| 30 | + ), | |
| 31 | + ); | |
| 32 | + | |
| 33 | + parent::register_routes(); | |
| 34 | + } | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * Get Final Quiz in Course Settings. | |
| 38 | + * | |
| 39 | + * @return void | |
| 40 | + */ | |
| 41 | + public function get_final_quiz( WP_REST_Request $request ) { | |
| 42 | + $params = $request->get_params(); | |
| 43 | + $course_id = $params['courseId'] ?? false; | |
| 44 | + $is_course_builder = ! empty( $params['is_course_builder'] ) || ! empty( $params['isCourseBuilder'] ); | |
| 45 | + $response = new LP_REST_Response(); | |
| 46 | + $response->data = ''; | |
| 47 | + $final_quiz = ''; | |
| 48 | + | |
| 49 | + try { | |
| 50 | + if ( empty( $course_id ) ) { | |
| 51 | + throw new Exception( esc_html__( 'No Course ID available!', 'learnpress' ) ); | |
| 52 | + } | |
| 53 | + | |
| 54 | + $course = learn_press_get_course( $course_id ); | |
| 55 | + | |
| 56 | + if ( ! $course ) { | |
| 57 | + throw new Exception( esc_html__( 'No Course available!', 'learnpress' ) ); | |
| 58 | + } | |
| 59 | + | |
| 60 | + $items = $course->get_item_ids(); | |
| 61 | + | |
| 62 | + if ( $items ) { | |
| 63 | + foreach ( $items as $item ) { | |
| 64 | + if ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) { | |
| 65 | + $final_quiz = $item; | |
| 66 | + } | |
| 67 | + } | |
| 68 | + } | |
| 69 | + | |
| 70 | + if ( ! empty( $final_quiz ) ) { | |
| 71 | + update_post_meta( $course_id, '_lp_final_quiz', $final_quiz ); | |
| 72 | + $passing_grade = get_post_meta( $final_quiz, '_lp_passing_grade', true ); | |
| 73 | + if ( '' === (string) $passing_grade ) { | |
| 74 | + $quiz_model = \LearnPress\Models\QuizPostModel::find( absint( $final_quiz ), true ); | |
| 75 | + if ( $quiz_model ) { | |
| 76 | + $passing_grade = $quiz_model->get_passing_grade(); | |
| 77 | + } else { | |
| 78 | + $passing_grade = 80; | |
| 79 | + } | |
| 80 | + } | |
| 81 | + $url = $this->get_final_quiz_edit_link( $final_quiz, $course_id, $is_course_builder ); | |
| 82 | + | |
| 83 | + ob_start(); | |
| 84 | + ?> | |
| 85 | + <div class="lp-metabox-evaluate-final_quiz__message"> | |
| 86 | + <?php printf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ); ?> | |
| 87 | + - | |
| 88 | + <?php printf( esc_html__( 'Edit: %s', 'learnpress' ), '<a href="' . esc_url_raw( $url ) . '">' . get_the_title( $final_quiz ) . '</a>' ); ?> | |
| 89 | + </div> | |
| 90 | + <?php | |
| 91 | + $response->status = 'success'; | |
| 92 | + $response->data = ob_get_clean(); | |
| 93 | + } else { | |
| 94 | + delete_post_meta( $course_id, '_lp_final_quiz' ); | |
| 95 | + $response->data = '<div class="lp-metabox-evaluate-final_quiz__message lp-metabox-evaluate-final_quiz__message-error">' . esc_html__( 'No Quiz in this course!', 'learnpress' ) . '</div>'; | |
| 96 | + } | |
| 97 | + } catch ( Exception $e ) { | |
| 98 | + $response->message = $e->getMessage(); | |
| 99 | + } | |
| 100 | + | |
| 101 | + return rest_ensure_response( $response ); | |
| 102 | + } | |
| 103 | + | |
| 104 | + /** | |
| 105 | + * Build edit link for final quiz in course settings. | |
| 106 | + * | |
| 107 | + * @param int $final_quiz_id | |
| 108 | + * @param int $course_id | |
| 109 | + * @param bool $is_course_builder | |
| 110 | + * | |
| 111 | + * @return string | |
| 112 | + */ | |
| 113 | + protected function get_final_quiz_edit_link( int $final_quiz_id, int $course_id, bool $is_course_builder = false ): string { | |
| 114 | + $post_type_object = get_post_type_object( LP_QUIZ_CPT ); | |
| 115 | + $url = admin_url( sprintf( $post_type_object->_edit_link . '&action=edit#_lp_passing_grade', $final_quiz_id ) ); | |
| 116 | + | |
| 117 | + if ( $is_course_builder && class_exists( '\LearnPress\CourseBuilder\CourseBuilder' ) ) { | |
| 118 | + $url = \LearnPress\CourseBuilder\CourseBuilder::get_tab_link( 'quizzes', absint( $final_quiz_id ), 'settings' ) . '#_lp_passing_grade'; | |
| 119 | + } | |
| 120 | + | |
| 121 | + return apply_filters( | |
| 122 | + 'learn-press/course/meta-box/assessment/final-quiz/edit-link', | |
| 123 | + $url, | |
| 124 | + $final_quiz_id, | |
| 125 | + $course_id | |
| 126 | + ); | |
| 127 | + } | |
| 128 | +} | |