Skip to content

Commit 2d27e9e

Browse files
committed
Refactor: Course completion restrict message prepare method refactored
1 parent 2660d82 commit 2d27e9e

3 files changed

Lines changed: 68 additions & 76 deletions

File tree

classes/Course.php

Lines changed: 66 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Tutor\Helpers\ValidationHelper;
2929
use Tutor\Models\EnrollmentModel;
3030
use Tutor\Options_V2;
31+
use TUTOR_ASSIGNMENTS\Assignments;
3132

3233
/**
3334
* Course Class
@@ -1832,7 +1833,7 @@ private function save_course_content_order( $sort_order = array() ) {
18321833

18331834
$i = 0;
18341835
foreach ( $sort_order as $topic ) {
1835-
$i++;
1836+
++$i;
18361837
$wpdb->update(
18371838
$wpdb->posts,
18381839
array( 'menu_order' => $i ),
@@ -2887,102 +2888,93 @@ public function remove_price_if_enrolled( $html ) {
28872888
*
28882889
* @return string|null
28892890
*/
2890-
public static function get_course_completion_missing_requirements_msg( $course_id = 0, $user_id = 0 ) {
2891+
public static function get_course_completion_restrict_msg( $course_id = 0, $user_id = 0 ) {
28912892
$course_id = tutor_utils()->get_post_id( $course_id );
28922893
$user_id = tutor_utils()->get_user_id( $user_id );
28932894

2894-
$completion_mode = tutor_utils()->get_option( 'course_completion_process' );
2895-
if ( 'strict' !== $completion_mode ) {
2895+
if ( 'strict' !== tutor_utils()->get_option( 'course_completion_process' ) ) {
28962896
return null;
28972897
}
28982898

2899-
$completed_lesson = tutor_utils()->get_completed_lesson_count_by_course( $course_id, $user_id );
2900-
$lesson_count = tutor_utils()->get_lesson_count_by_course( $course_id );
2899+
$completed_lessons = tutor_utils()->get_completed_lesson_count_by_course( $course_id, $user_id );
2900+
$total_lessons = tutor_utils()->get_lesson_count_by_course( $course_id );
29012901

2902-
if ( $completed_lesson < $lesson_count ) {
2902+
if ( $completed_lessons < $total_lessons ) {
29032903
return __( 'Complete all lessons to mark this course as complete', 'tutor' );
29042904
}
29052905

2906-
$quizzes = array();
2907-
$assignments = array();
2908-
29092906
$course_contents = tutor_utils()->get_course_contents_by_id( $course_id );
2910-
if ( tutor_utils()->count( $course_contents ) ) {
2911-
foreach ( $course_contents as $content ) {
2912-
if ( 'tutor_quiz' === $content->post_type ) {
2913-
$quizzes[] = $content;
2914-
}
2915-
if ( 'tutor_assignments' === $content->post_type ) {
2916-
$assignments[] = $content;
2917-
}
2918-
}
2919-
}
29202907

2921-
$required_assignment_pass = 0;
2922-
foreach ( $assignments as $row ) {
2923-
$assignment_submission = tutor_utils()->is_assignment_submitted( $row->ID, $user_id );
2924-
$is_reviewed_by_instructor = ! count( $assignment_submission )
2925-
? false
2926-
: get_comment_meta( $assignment_submission[0]->comment_ID, 'evaluate_time', true );
2908+
$required_quiz_pass_count = 0;
2909+
$required_assignment_pass_count = 0;
29272910

2928-
if ( $assignment_submission && $is_reviewed_by_instructor ) {
2929-
$pass_mark = tutor_utils()->get_assignment_option( $row->ID, 'pass_mark' );
2930-
$has_passed = false;
2931-
foreach ( $assignment_submission as $submission ) {
2932-
$given_mark = (int) get_comment_meta( $submission->comment_ID, 'assignment_mark', true );
2933-
if ( $given_mark >= $pass_mark ) {
2934-
$has_passed = true;
2935-
break;
2936-
}
2911+
$is_assignment_addon_enabled = tutor_utils()->is_addon_enabled( 'tutor-assignments' );
2912+
2913+
foreach ( $course_contents as $content ) {
2914+
2915+
if ( tutor()->quiz_post_type === $content->post_type ) {
2916+
if ( ! QuizModel::is_quiz_passed( $content->ID, $user_id ) ) {
2917+
++$required_quiz_pass_count;
29372918
}
2938-
if ( ! $has_passed ) {
2939-
$required_assignment_pass++;
2919+
}
2920+
2921+
if ( $is_assignment_addon_enabled && tutor()->assignment_post_type === $content->post_type ) {
2922+
if ( ! Assignments::is_assignment_passed( $content->ID, $user_id ) ) {
2923+
++$required_assignment_pass_count;
29402924
}
2941-
} else {
2942-
$required_assignment_pass++;
29432925
}
29442926
}
29452927

2946-
$is_quiz_pass = true;
2947-
$required_quiz_pass = 0;
2928+
if ( ! $required_quiz_pass_count && ! $required_assignment_pass_count ) {
2929+
return null;
2930+
}
29482931

2949-
if ( tutor_utils()->count( $quizzes ) ) {
2950-
foreach ( $quizzes as $quiz ) {
2951-
$attempt = tutor_utils()->get_quiz_attempt( $quiz->ID, $user_id );
2952-
if ( $attempt ) {
2953-
$passing_grade = tutor_utils()->get_quiz_option( $quiz->ID, 'passing_grade', 0 );
2954-
$earned_percentage = QuizModel::calculate_attempt_earned_percentage( $attempt );
2932+
return self::get_course_completion_requirement_message(
2933+
$required_quiz_pass_count,
2934+
$required_assignment_pass_count
2935+
);
2936+
}
29552937

2956-
if ( $earned_percentage < $passing_grade ) {
2957-
$required_quiz_pass++;
2958-
$is_quiz_pass = false;
2959-
}
2960-
} else {
2961-
$required_quiz_pass++;
2962-
$is_quiz_pass = false;
2963-
}
2964-
}
2965-
}
2938+
/**
2939+
* Build missing course completion requirements message.
2940+
*
2941+
* @since 4.0.0
2942+
*
2943+
* @param int $quiz_count Total quiz count.
2944+
* @param int $assignment_count Total assignment count.
2945+
*
2946+
* @return string
2947+
*/
2948+
private static function get_course_completion_requirement_message( $quiz_count, $assignment_count ) {
2949+
$quiz_label = _n( 'quiz', 'quizzes', $quiz_count, 'tutor' );
2950+
$assignment_label = _n( 'assignment', 'assignments', $assignment_count, 'tutor' );
29662951

2967-
if ( ! $is_quiz_pass || $required_assignment_pass > 0 ) {
2968-
$_msg = '';
2969-
$quiz_str = _n( 'quiz', 'quizzes', $required_quiz_pass, 'tutor' );
2970-
$assignment_str = _n( 'assignment', 'assignments', $required_assignment_pass, 'tutor' );
2952+
if ( $quiz_count && ! $assignment_count ) {
2953+
return sprintf(
2954+
/* translators: %1$s: quiz count; %2$s: quiz label */
2955+
__( 'You have to pass %1$s %2$s to complete this course.', 'tutor' ),
2956+
$quiz_count,
2957+
$quiz_label
2958+
);
2959+
}
29712960

2972-
if ( ! $is_quiz_pass && 0 == $required_assignment_pass ) {
2973-
/* translators: %1$s: number of quiz pass required; %2$s: quiz string */
2974-
$_msg = sprintf( __( 'You have to pass %1$s %2$s to complete this course.', 'tutor' ), $required_quiz_pass, $quiz_str );
2975-
} elseif ( $is_quiz_pass && $required_assignment_pass > 0 ) {
2976-
/* translators: %1$s: number of assignment pass required; %2$s: assignment string */
2977-
$_msg = sprintf( __( 'You have to pass %1$s %2$s to complete this course.', 'tutor' ), $required_assignment_pass, $assignment_str );
2978-
} else {
2979-
/* translators: %1$s: number of quiz pass required; %2$s: quiz string; %3$s: number of assignment pass required; %4$s: assignment string */
2980-
$_msg = sprintf( __( 'You have to pass %1$s %2$s and %3$s %4$s to complete this course.', 'tutor' ), $required_quiz_pass, $quiz_str, $required_assignment_pass, $assignment_str );
2981-
}
2982-
return $_msg;
2961+
if ( ! $quiz_count && $assignment_count ) {
2962+
return sprintf(
2963+
/* translators: %1$s: assignment count; %2$s: assignment label */
2964+
__( 'You have to pass %1$s %2$s to complete this course.', 'tutor' ),
2965+
$assignment_count,
2966+
$assignment_label
2967+
);
29832968
}
29842969

2985-
return null;
2970+
return sprintf(
2971+
/* translators: %1$s: quiz count; %2$s: quiz label; %3$s: assignment count; %4$s: assignment label */
2972+
__( 'You have to pass %1$s %2$s and %3$s %4$s to complete this course.', 'tutor' ),
2973+
$quiz_count,
2974+
$quiz_label,
2975+
$assignment_count,
2976+
$assignment_label
2977+
);
29862978
}
29872979

29882980
/**
@@ -2994,7 +2986,7 @@ public static function get_course_completion_missing_requirements_msg( $course_i
29942986
* @return string
29952987
*/
29962988
public function tutor_lms_hide_course_complete_btn( $html ) {
2997-
$_msg = self::get_course_completion_missing_requirements_msg();
2989+
$_msg = self::get_course_completion_restrict_msg();
29982990

29992991
if ( $_msg ) {
30002992
return '<div class="tutor-alert tutor-warning tutor-mt-28">

templates/learning-area/components/header.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
<div class="tutor-flex tutor-gap-2 tutor-items-center tutor-ml-auto tutor-pr-4 tutor-whitespace-nowrap tutor-md-hidden">
4040
<?php
41-
$incomplete_msg = Course::get_course_completion_missing_requirements_msg( $tutor_course_id, $current_user_id );
41+
$incomplete_msg = Course::get_course_completion_restrict_msg( $tutor_course_id, $current_user_id );
4242
if ( $tutor_can_complete_course || $incomplete_msg ) {
4343
Course::render_course_complete_btn( $course_complete_modal_id, $tutor_course_id, $tutor_course_progress, Size::SMALL, $incomplete_msg ?? '' );
4444
}

templates/learning-area/components/sidebar.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ class="tutor-learning-pages-item <?php echo esc_attr( $active_class ); ?>"
257257
</div>
258258
<div class="tutor-hidden tutor-md-flex tutor-flex-column tutor-gap-2">
259259
<?php
260-
$incomplete_msg = Course::get_course_completion_missing_requirements_msg( $tutor_course_id, $current_user_id );
260+
$incomplete_msg = Course::get_course_completion_restrict_msg( $tutor_course_id, $current_user_id );
261261
if ( $tutor_can_complete_course || $incomplete_msg ) {
262262
Course::render_course_complete_btn( $course_complete_modal_id, $tutor_course_id, $tutor_course_progress, Size::MEDIUM, $incomplete_msg ?? '', true );
263263
}

0 commit comments

Comments
 (0)