← All changes
|
inc/rest-api/v1/admin/class-lp-admin-rest-course-controller.php
+41
-9
4.1.7.2
→
4.4.9
View file →
| @@ -22,9 +22,9 @@ | ||
| 22 | 22 | 'get_final_quiz' => array( |
| 23 | 23 | array( |
| 24 | 24 | 'methods' => WP_REST_Server::CREATABLE, |
| 25 | 25 | 'callback' => array( $this, 'get_final_quiz' ), |
| 26 | - 'permission_callback' => function() { | |
| 26 | + 'permission_callback' => function () { | |
| 27 | 27 | return current_user_can( 'edit_posts' ); |
| 28 | 28 | }, |
| 29 | 29 | ), |
| 30 | 30 | ), |
| @@ -38,13 +38,14 @@ | ||
| 38 | 38 | * |
| 39 | 39 | * @return void |
| 40 | 40 | */ |
| 41 | 41 | public function get_final_quiz( WP_REST_Request $request ) { |
| 42 | - $params = $request->get_params(); | |
| 43 | - $course_id = $params['courseId'] ?? false; | |
| 44 | - $response = new LP_REST_Response(); | |
| 45 | - $response->data = ''; | |
| 46 | - $final_quiz = ''; | |
| 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 = ''; | |
| 47 | 48 | |
| 48 | 49 | try { |
| 49 | 50 | if ( empty( $course_id ) ) { |
| 50 | 51 | throw new Exception( esc_html__( 'No Course ID available!', 'learnpress' ) ); |
| @@ -68,12 +69,18 @@ | ||
| 68 | 69 | |
| 69 | 70 | if ( ! empty( $final_quiz ) ) { |
| 70 | 71 | update_post_meta( $course_id, '_lp_final_quiz', $final_quiz ); |
| 71 | 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 ); | |
| 72 | 82 | |
| 73 | - $post_type_object = get_post_type_object( LP_QUIZ_CPT ); | |
| 74 | - $url = admin_url( sprintf( $post_type_object->_edit_link . '&action=edit#_lp_passing_grade', $final_quiz ) ); | |
| 75 | - | |
| 76 | 83 | ob_start(); |
| 77 | 84 | ?> |
| 78 | 85 | <div class="lp-metabox-evaluate-final_quiz__message"> |
| 79 | 86 | <?php printf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ); ?> |
| @@ -91,6 +98,31 @@ | ||
| 91 | 98 | $response->message = $e->getMessage(); |
| 92 | 99 | } |
| 93 | 100 | |
| 94 | 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 | + ); | |
| 95 | 127 | } |
| 96 | 128 | } |