can_impact_item() instanceof WP_Error ) { return $html; } $courseModel = $userCourseModel->get_course_model(); if ( ! $courseModel ) { return $html; } $total_items = $courseModel->count_items(); if ( empty( $total_items ) ) { return $html; } $itemModelContinue = $userCourseModel->get_item_continue(); if ( empty( $itemModelContinue ) ) { $link_continue = $courseModel->get_permalink(); } else { $link_continue = $courseModel->get_item_link( $itemModelContinue->ID ); } $html = sprintf( '%s', esc_url_raw( $link_continue ), sprintf( '', esc_html__( 'Continue', 'learnpress' ) ) ); return apply_filters( 'learn-press/user/course/html-button-continue', $html, $userCourseModel ); } /** * HTML button finish course. * * @param UserCourseModel $userCourseModel * * @return string * @since 4.2.7.5 * @version 1.0.0 */ public function html_btn_finish( UserCourseModel $userCourseModel ): string { $html = ''; $can_finish = $userCourseModel->can_finish(); if ( is_wp_error( $can_finish ) ) { return $html; } $section = apply_filters( 'learn-press/user/course/html-button-finish', [ 'form' => sprintf( '
', __( 'Do you want to finish the course?', 'learnpress' ) ), 'btn' => sprintf( '', esc_html__( 'Finish Course', 'learnpress' ) ), 'input' => sprintf( '', esc_attr( $userCourseModel->item_id ) ), 'nonce' => sprintf( '', esc_attr( wp_create_nonce( sprintf( 'finish-course-%d-%d', $userCourseModel->item_id, $userCourseModel->user_id ) ) ) ), 'lpajax' => '', 'noajax' => '', 'form_end' => '
', ], $userCourseModel ); return Template::combine_components( $section ); } /** * HTML button retake course * * @param UserCourseModel $userCourseModel * * @return string * @since 4.2.7.6 * @version 1.0.0 */ public function html_btn_retake( UserCourseModel $userCourseModel ): string { $retake_remaining = $userCourseModel->can_retake(); if ( $retake_remaining === 0 ) { return ''; } $html_btn = sprintf( '', __( 'Retake course', 'learnpress' ), $retake_remaining ); $section = apply_filters( 'learn-press/course/html-button-retake', [ 'form' => sprintf( '
', esc_html__( 'Do you want to retake the course', 'learnpress' ) ), 'input' => sprintf( '', esc_attr( $userCourseModel->item_id ) ), 'btn' => $html_btn, 'lp-ajax-mess' => '
', 'form_end' => '
', ], $userCourseModel ); return Template::combine_components( $section ); } /** * HTML count items completed of Course. * * @return mixed|string|null * @since 4.2.7.6 * @version 1.0.1 */ public function html_count_items_completed( UserCourseModel $userCourseModel ): string { $html = ''; // For case Guest user. $userModel = $userCourseModel->get_user_model(); if ( ! $userModel ) { return $html; } $courseModel = $userCourseModel->get_course_model(); $item_types = CourseModel::item_types_support(); $count_items_completed = $userCourseModel->count_items_completed(); foreach ( $item_types as $item_type ) { $count_item = $courseModel->count_items( $item_type ); $count_item_completed = $count_items_completed->{$item_type . '_status_completed'} ?? ''; if ( empty( $count_item_completed ) ) { continue; } $html .= sprintf( '
%s%s
', sprintf( '%s %s: ', LP_Helper::get_i18n_string_plural( $count_item, $item_type, false ), __( 'completed', 'learnpress' ) ), sprintf( '%d/%d', $count_item_completed, $count_item ) ); } return apply_filters( 'learn-press/user/course/html-count-items-completed', $html, $userCourseModel ); } /** * HTMl progress course. * * @param UserCourseModel $userCourseModel * * @return mixed|null * @since 4.2.7.5 * @version 1.0.1 */ public function html_progress( UserCourseModel $userCourseModel ) { $html = ''; // For case Guest user. $userModel = $userCourseModel->get_user_model(); if ( ! $userModel ) { return $html; } $courseModel = $userCourseModel->get_course_model(); $evaluation_type = $courseModel::get_evaluation_types( $courseModel->get_evaluation_type() ); $calculate = $userCourseModel->calculate_course_results(); $passing_condition = $courseModel->get_passing_condition(); if ( array_key_first( $evaluation_type ) === 'evaluate_final_quiz' ) { $final_quiz = $courseModel->get_final_quiz(); if ( $final_quiz ) { $quizModel = QuizPostModel::find( $final_quiz, true ); $passing_condition = $quizModel->get_passing_grade(); } } $total_items = $courseModel->count_items(); $progress_items_completed_percent = round( $total_items > 0 ? $calculate['completed_items'] * 100 / $total_items : 0, 2 ); if ( $progress_items_completed_percent > 100 ) { $progress_items_completed_percent = 100; } $section = [ 'wrapper' => '
', 'progress' => sprintf( '
%s %s
', esc_html__( 'Course progress:', 'learnpress' ), sprintf( ' %s%s ', $progress_items_completed_percent, '%' ) ), 'line-progress' => $this->html_items_completed_progress_bar( $userCourseModel ), 'passing-progress' => sprintf( '
%s %s
', esc_html__( 'Passing grade progress:', 'learnpress' ), sprintf( ' %s%s ', $calculate['result'], '%' ), sprintf( '%s. %s', isset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '', esc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) ) ) ), 'wrapper_end' => '
', ]; $html = Template::combine_components( $section ); return apply_filters( 'learn-press/user/course/html-progress', $html, $userCourseModel ); } /** * HTML course items completed progress bar. * * @param UserCourseModel $userCourseModel * * @return string * * @since 4.3.2.6 * @version 1.0.0 */ public function html_passing_grade_progress_bar( UserCourseModel $userCourseModel ): string { $courseModel = $userCourseModel->get_course_model(); $calculate = $userCourseModel->calculate_course_results(); $passing_condition = $courseModel->get_passing_condition(); $section = [ 'wrapper' => '
', 'line-passing-progress' => sprintf( '
', $calculate['result'], $passing_condition ), 'wrapper_end' => '
', ]; return Template::combine_components( $section ); } /** * HTML course items completed progress bar. * * @param UserCourseModel $userCourseModel * * @return string * * @since 4.3.2.6 * @version 1.0.0 */ public function html_items_completed_progress_bar( UserCourseModel $userCourseModel ): string { $courseModel = $userCourseModel->get_course_model(); $calculate = $userCourseModel->calculate_course_results(); $total_items = $courseModel->count_items(); $progress_items_completed_percent = round( $total_items > 0 ? $calculate['completed_items'] * 100 / $total_items : 0, 2 ); if ( $progress_items_completed_percent > 100 ) { $progress_items_completed_percent = 100; } $section = [ 'wrapper' => sprintf( '
', sprintf( esc_html__( '%1$d of %2$d items completed', 'learnpress' ), $calculate['completed_items'], $total_items ) ), 'line-progress' => sprintf( '
', $progress_items_completed_percent, ), 'wrapper_end' => '
', ]; return Template::combine_components( $section ); } /** * HTMl progress course. * * @param UserCourseModel $userCourseModel * * @return mixed|null * @since 4.2.7.6 * @version 1.0.1 */ public function html_message_lock( UserCourseModel $userCourseModel ): string { $html = ''; // For case Guest user. $userModel = $userCourseModel->get_user_model(); if ( ! $userModel ) { return $html; } $courseModel = $userCourseModel->get_course_model(); if ( $courseModel->enable_block_when_finished() && $userCourseModel->is_finished() ) { $message = __( 'This course is finished.', 'learnpress' ); } elseif ( $courseModel->enable_block_when_expire() && $userCourseModel->timestamp_remaining_duration() === 0 ) { $message = __( 'This course is expired.', 'learnpress' ); } else { return $html; } $html = Template::print_message( $message, 'warning', false ); return apply_filters( 'learn-press/user/course/html-message-lock', $html, $userCourseModel ); } }