PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.0
Tutor LMS – eLearning and online course solution v4.0.0
4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / templates / single / lesson / content.php
tutor / templates / single / lesson Last commit date
parts 8 months ago comment.php 3 years ago comments-loop.php 3 years ago complete_form.php 2 months ago content.php 3 days ago lesson_sidebar.php 3 days ago required-enroll.php 2 years ago sidebar_question_and_answer.php 3 years ago
content.php
176 lines
1 <?php
2 /**
3 * Display the content
4 *
5 * @package Tutor\Templates
6 * @subpackage Single\Lesson
7 * @author Themeum <support@themeum.com>
8 * @link https://themeum.com
9 * @since 1.0.0
10 */
11
12 defined( 'ABSPATH' ) || exit;
13
14 use TUTOR\Lesson;
15 use Tutor\Components\SvgIcon;
16 use Tutor\Models\EnrollmentModel;
17 use TUTOR\User;
18
19 global $post;
20 global $previous_id;
21 global $next_id;
22
23 // Get the ID of this content and the corresponding course.
24 $course_content_id = get_the_ID();
25 $course_id = tutor_utils()->get_course_id_by_subcontent( $course_content_id );
26
27 $_is_preview = get_post_meta( $course_content_id, '_is_preview', true );
28 $content_id = tutor_utils()->get_post_id( $course_content_id );
29 $contents = tutor_utils()->get_course_prev_next_contents_by_id( $content_id );
30 $previous_id = $contents->previous_id;
31 $next_id = $contents->next_id;
32
33 $prev_is_preview = get_post_meta( $previous_id, '_is_preview', true );
34 $next_is_preview = get_post_meta( $next_id, '_is_preview', true );
35 $is_enrolled = EnrollmentModel::is_enrolled( $course_id );
36 $is_public = get_post_meta( $course_id, '_tutor_is_public_course', true );
37
38 $prev_is_locked = ! ( $is_enrolled || $prev_is_preview || $is_public );
39 $next_is_locked = ! ( $is_enrolled || $next_is_preview || $is_public );
40
41 $json_data = array();
42 $json_data['post_id'] = get_the_ID();
43 $json_data['best_watch_time'] = 0;
44 $json_data['autoload_next_course_content'] = (bool) get_tutor_option( 'autoload_next_course_content' );
45
46 $best_watch_time = tutor_utils()->get_lesson_reading_info( get_the_ID(), 0, 'video_best_watched_time' );
47 if ( $best_watch_time > 0 ) {
48 $json_data['best_watch_time'] = $best_watch_time;
49 }
50 ?>
51
52 <?php do_action( 'tutor_lesson/single/before/content' ); ?>
53
54 <?php
55 tutor_load_template(
56 'single.common.header',
57 array(
58 'course_id' => $course_id,
59 'mark_as_complete' => true,
60 )
61 );
62 ?>
63
64 <div class="tutor-course-topic-single-body">
65 <!-- Load Lesson Video -->
66 <?php
67 $video_info = tutor_utils()->get_video_info();
68 $source_key = is_object( $video_info ) && 'html5' !== $video_info->source ? 'source_' . $video_info->source : null;
69 $has_source = ( is_object( $video_info ) && $video_info->source_video_id ) || ( isset( $source_key ) ? $video_info->$source_key : null );
70 ?>
71 <?php
72 if ( $has_source ) :
73 $completion_mode = tutor_utils()->get_option( 'course_completion_process' );
74 $json_data['strict_mode'] = ( 'strict' === $completion_mode );
75 $json_data['control_video_lesson_completion'] = (bool) tutor_utils()->get_option( 'control_video_lesson_completion', false );
76 $json_data['required_percentage'] = (int) tutor_utils()->get_option( 'required_percentage_to_complete_video_lesson', 80 );
77 $json_data['video_duration'] = $video_info->duration_sec ?? 0;
78 $json_data['lesson_completed'] = tutor_utils()->is_completed_lesson( $content_id, get_current_user_id() ) !== false;
79 $json_data['is_enrolled'] = EnrollmentModel::is_enrolled( $course_id, get_current_user_id() ) !== false;
80 ?>
81 <input type="hidden" id="tutor_video_tracking_information" value="<?php echo esc_attr( wp_json_encode( $json_data ) ); ?>">
82 <?php endif; ?>
83 <div class="tutor-video-player-wrapper">
84 <?php echo apply_filters( 'tutor_single_lesson_video', tutor_lesson_video( false ), $video_info, $source_key ); //phpcs:ignore ?>
85 </div>
86
87 <?php
88 $referer_url = wp_get_referer();
89 $referer_comment_id = explode( '#', filter_input( INPUT_SERVER, 'REQUEST_URI' ) ?? '' );
90 $url_components = parse_url( $referer_url );
91 $page_tab = \TUTOR\Input::get( 'page_tab', 'overview' );
92
93 isset( $url_components['query'] ) ? parse_str( $url_components['query'], $output ) : null;
94
95 $has_lesson_content = Lesson::has_lesson_content( $course_content_id );
96 $has_lesson_attachment = Lesson::has_lesson_attachment( $course_content_id );
97
98 $is_comment_enabled = Lesson::is_comment_enabled();
99 $has_lesson_comment = Lesson::has_lesson_comment( $course_content_id );
100
101 $nav_items = Lesson::get_nav_items( $course_content_id );
102
103 $active_tab = $page_tab;
104 $valid_tabs = wp_list_pluck( $nav_items, 'value' );
105 if ( ! in_array( $active_tab, $valid_tabs, true ) && ! empty( $nav_items ) ) {
106 $active_tab = $nav_items[0]['value'];
107 }
108 ?>
109
110 <style>
111 .tutor-actual-comment.viewing {
112 box-shadow: 0 0 10px #cdcfd5;
113 animation: blinkComment 1s infinite;
114 }
115 @keyframes blinkComment { 50% { box-shadow:0 0 0px #ffffff; } }
116 </style>
117
118 <div class="tutor-course-spotlight-wrapper">
119 <?php if ( count( $nav_items ) > 1 ) : ?>
120 <ul class="tutor-nav tutor-course-spotlight-nav tutor-justify-center">
121 <?php foreach ( $nav_items as $index => $nav_item ) : ?>
122 <li class="tutor-nav-item">
123 <a
124 href="#"
125 class="tutor-nav-link<?php echo esc_attr( ( $nav_item['value'] === $page_tab || ( 'overview' === $page_tab && 0 === $index ) ) ? ' is-active' : '' ); ?>"
126 data-tutor-nav-target="tutor-course-spotlight-<?php echo esc_attr( $nav_item['value'] ); ?>"
127 data-tutor-query-variable="page_tab"
128 data-tutor-query-value="<?php echo esc_attr( $nav_item['value'] ); ?>"
129 >
130 <?php
131 if ( isset( $nav_item['icon_type'] ) && 'svg' === $nav_item['icon_type'] ) {
132 SvgIcon::make()->name( $nav_item['icon'] )->size( 20 )->render();
133 } else {
134 ?>
135 <span
136 class="tutor-icon-<?php echo esc_attr( $nav_item['icon'] ); ?> tutor-mr-8"
137 aria-hidden="true">
138 </span>
139 <?php
140 }
141 ?>
142 <span><?php echo esc_html( $nav_item['label'] ); ?></span>
143 </a>
144 </li>
145 <?php endforeach; ?>
146
147 <?php do_action( 'tutor_lesson_single_after_nav_items', $course_content_id, $active_tab ); ?>
148 </ul>
149 <?php endif; ?>
150
151 <div class="tutor-tab tutor-course-spotlight-tab">
152 <?php
153 if ( ! empty( $nav_items ) ) {
154 foreach ( $nav_items as $key => $content ) {
155 $is_pro = isset( $content['is_pro'] ) && true === $content['is_pro'];
156 tutor_load_template(
157 $content['template'],
158 array(
159 'is_active' => $content['value'] === $active_tab,
160 'post' => $post,
161 'course_id' => $course_id,
162 'lesson_id' => $course_content_id,
163 ),
164 $is_pro
165 );
166 }
167 }
168 ?>
169 </div>
170 </div>
171 </div>
172
173 <?php tutor_load_template( 'single.common.footer', array( 'course_id' => $course_id ) ); ?>
174
175 <?php do_action( 'tutor_lesson/single/after/content' ); ?>
176