comment-card.php
1 day ago
comment-form.php
1 day ago
comment-list.php
1 day ago
comment-replies.php
1 day ago
comments.php
1 day ago
content.php
1 day ago
exercise-files.php
1 day ago
footer.php
1 day ago
nav-item.php
1 day ago
overview.php
1 day ago
content.php
129 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Tutor learning area lesson. |
| 4 | * |
| 5 | * @package Tutor\Templates |
| 6 | * @subpackage LearningArea |
| 7 | * @author Themeum <support@themeum.com> |
| 8 | * @link https://themeum.com |
| 9 | * @since 4.0.0 |
| 10 | */ |
| 11 | |
| 12 | defined( 'ABSPATH' ) || exit; |
| 13 | |
| 14 | use TUTOR\Input; |
| 15 | use TUTOR\Lesson; |
| 16 | use Tutor\Models\EnrollmentModel; |
| 17 | |
| 18 | $lesson = $lesson ?? null; |
| 19 | if ( ! $lesson || ! is_a( $lesson, 'WP_Post' ) ) { |
| 20 | return; |
| 21 | } |
| 22 | |
| 23 | global $tutor_course_id, $tutor_current_content_id, $tutor_completion_mode, $post; |
| 24 | |
| 25 | $tabs_data = Lesson::get_nav_items( $lesson->ID ); |
| 26 | |
| 27 | $active_tab = Input::get( 'tab', 'overview' ); |
| 28 | $valid_tabs = wp_list_pluck( $tabs_data, 'id' ); |
| 29 | if ( ! in_array( $active_tab, $valid_tabs, true ) && ! empty( $tabs_data ) ) { |
| 30 | $active_tab = $tabs_data[0]['id']; |
| 31 | } |
| 32 | |
| 33 | $json_data = array(); |
| 34 | $json_data['post_id'] = $tutor_current_content_id; |
| 35 | $json_data['best_watch_time'] = 0; |
| 36 | $json_data['autoload_next_course_content'] = (bool) get_tutor_option( 'autoload_next_course_content' ); |
| 37 | |
| 38 | $best_watch_time = tutor_utils()->get_lesson_reading_info( $tutor_current_content_id, 0, 'video_best_watched_time' ); |
| 39 | if ( $best_watch_time > 0 ) { |
| 40 | $json_data['best_watch_time'] = $best_watch_time; |
| 41 | } |
| 42 | |
| 43 | $video_info = tutor_utils()->get_video_info(); |
| 44 | $source_key = is_object( $video_info ) && 'html5' !== $video_info->source ? 'source_' . $video_info->source : null; |
| 45 | $has_source = ( is_object( $video_info ) && $video_info->source_video_id ) || ( isset( $source_key ) ? $video_info->$source_key : null ); |
| 46 | |
| 47 | $feature_image = get_post_meta( get_the_ID(), '_thumbnail_id', true ); |
| 48 | $feature_url = $feature_image ? wp_get_attachment_url( $feature_image ) : null; |
| 49 | |
| 50 | ?> |
| 51 | <div class="tutor-lesson-content"> |
| 52 | <?php ob_start(); ?> |
| 53 | <div |
| 54 | x-data='tutorTabs({ |
| 55 | tabs: <?php echo wp_json_encode( $tabs_data ); ?>, |
| 56 | defaultTab: "<?php echo esc_html( $active_tab ); ?>", |
| 57 | urlParams: { |
| 58 | paramName: "page_tab", |
| 59 | } |
| 60 | })' |
| 61 | class="tutor-lesson-content-tab" |
| 62 | > |
| 63 | <!-- Load Lesson Video --> |
| 64 | <?php if ( $has_source ) : ?> |
| 65 | <div class="tutor-lesson-video-wrapper tutor-border-b"> |
| 66 | <?php |
| 67 | $json_data['strict_mode'] = ( 'strict' === $tutor_completion_mode ); |
| 68 | $json_data['control_video_lesson_completion'] = (bool) tutor_utils()->get_option( 'control_video_lesson_completion', false ); |
| 69 | $json_data['required_percentage'] = (int) tutor_utils()->get_option( 'required_percentage_to_complete_video_lesson', 80 ); |
| 70 | $json_data['video_duration'] = $video_info->duration_sec ?? 0; |
| 71 | $json_data['lesson_completed'] = tutor_utils()->is_completed_lesson( $lesson->ID, get_current_user_id() ) !== false; |
| 72 | $json_data['is_enrolled'] = EnrollmentModel::is_enrolled( $tutor_course_id, get_current_user_id() ) !== false; |
| 73 | ?> |
| 74 | <input type="hidden" id="tutor_video_tracking_information" value="<?php echo esc_attr( json_encode( $json_data ) ); ?>"> |
| 75 | <?php echo apply_filters( 'tutor_single_lesson_video', tutor_lesson_video( false ), $video_info, $source_key ); //phpcs:ignore ?> |
| 76 | </div> |
| 77 | <?php elseif ( $feature_url ) : ?> |
| 78 | <div class="tutor-lesson-image-wrapper"> |
| 79 | <img class="tutor-lesson-feature-image" src="<?php echo esc_url( $feature_url ); ?>" alt="<?php echo esc_attr( get_the_title( $lesson->ID ) ); ?>"> |
| 80 | </div> |
| 81 | <?php endif; ?> |
| 82 | |
| 83 | <?php if ( count( $tabs_data ) > 1 ) : ?> |
| 84 | <div x-ref="tablist" class="tutor-tabs-nav tutor-px-6 tutor-py-5 tutor-border-b" role="tablist" aria-orientation="horizontal"> |
| 85 | <template x-for="tab in tabs" :key="tab.id"> |
| 86 | <button |
| 87 | type="button" |
| 88 | role="tab" |
| 89 | :class='getTabClass(tab)' |
| 90 | x-bind:aria-selected="isActive(tab.id)" |
| 91 | :disabled="tab.disabled ? true : false" |
| 92 | @click="selectTab(tab.id)" |
| 93 | > |
| 94 | <span x-data="TutorCore.icon({ name: tab.icon, width: 20, height: 20})"></span> |
| 95 | <span x-text="tab.label"></span> |
| 96 | </button> |
| 97 | </template> |
| 98 | |
| 99 | <?php do_action( 'tutor_lesson_single_after_nav_items', $lesson->ID, $active_tab ); ?> |
| 100 | </div> |
| 101 | <?php endif; ?> |
| 102 | |
| 103 | <?php if ( ! empty( $tabs_data ) ) : ?> |
| 104 | <div class="tutor-tabs-content"> |
| 105 | <?php |
| 106 | foreach ( $tabs_data as $key => $content ) { |
| 107 | $is_pro = isset( $content['is_pro'] ) && true === $content['is_pro']; |
| 108 | tutor_load_template( |
| 109 | $content['template'], |
| 110 | array( |
| 111 | 'is_active' => $content['id'] === $active_tab, |
| 112 | 'post' => $post, |
| 113 | 'course_id' => $tutor_course_id, |
| 114 | 'lesson_id' => $lesson->ID, |
| 115 | ), |
| 116 | $is_pro |
| 117 | ); |
| 118 | } |
| 119 | ?> |
| 120 | </div> |
| 121 | <?php endif; ?> |
| 122 | </div> |
| 123 | <?php |
| 124 | do_action( 'tutor_lesson/single/before/content' ); |
| 125 | echo apply_filters( 'tutor_learning_area_content', ob_get_clean() ); //phpcs:ignore --already escaped |
| 126 | tutor_load_template( 'learning-area.lesson.footer' ); |
| 127 | ?> |
| 128 | </div> |
| 129 |