PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.9.4
Tutor LMS – eLearning and online course solution v3.9.4
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 years ago content.php 8 months ago lesson_sidebar.php 10 months ago required-enroll.php 2 years ago sidebar_question_and_answer.php 3 years ago
content.php
177 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 use TUTOR\Lesson;
13 use TUTOR\User;
14
15 if ( ! defined( 'ABSPATH' ) ) {
16 exit;
17 }
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 = tutor_utils()->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'] = tutor_utils()->is_enrolled( $course_id, get_current_user_id() ) !== false;
80 ?>
81 <input type="hidden" id="tutor_video_tracking_information" value="<?php echo esc_attr( 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 $nav_contents = Lesson::get_nav_contents( $course_content_id );
103
104 $active_tab = $page_tab;
105 $valid_tabs = wp_list_pluck( $nav_items, 'value' );
106 if ( ! in_array( $active_tab, $valid_tabs, true ) && ! empty( $nav_items ) ) {
107 $active_tab = $nav_items[0]['value'];
108 }
109 ?>
110
111 <style>
112 .tutor-actual-comment.viewing {
113 box-shadow: 0 0 10px #cdcfd5;
114 animation: blinkComment 1s infinite;
115 }
116 @keyframes blinkComment { 50% { box-shadow:0 0 0px #ffffff; } }
117 </style>
118
119 <div class="tutor-course-spotlight-wrapper">
120 <?php if ( count( $nav_items ) > 1 ) : ?>
121 <ul class="tutor-nav tutor-course-spotlight-nav tutor-justify-center">
122 <?php foreach ( $nav_items as $index => $nav_item ) : ?>
123 <li class="tutor-nav-item">
124 <a
125 href="#"
126 class="tutor-nav-link<?php echo esc_attr( ( $nav_item['value'] === $page_tab || ( 'overview' === $page_tab && 0 === $index ) ) ? ' is-active' : '' ); ?>"
127 data-tutor-nav-target="tutor-course-spotlight-<?php echo esc_attr( $nav_item['value'] ); ?>"
128 data-tutor-query-variable="page_tab"
129 data-tutor-query-value="<?php echo esc_attr( $nav_item['value'] ); ?>"
130 >
131 <?php
132 if ( isset( $nav_item['icon_type'] ) && 'svg' === $nav_item['icon_type'] ) {
133 tutor_utils()->render_svg_icon( $nav_item['icon'], 20, 20 );
134 } else {
135 ?>
136 <span
137 class="tutor-icon-<?php echo esc_attr( $nav_item['icon'] ); ?> tutor-mr-8"
138 aria-hidden="true">
139 </span>
140 <?php
141 }
142 ?>
143 <span><?php echo esc_html( $nav_item['label'] ); ?></span>
144 </a>
145 </li>
146 <?php endforeach; ?>
147
148 <?php do_action( 'tutor_lesson_single_after_nav_items', $course_content_id, $active_tab ); ?>
149 </ul>
150 <?php endif; ?>
151
152 <div class="tutor-tab tutor-course-spotlight-tab">
153 <?php
154 if ( ! empty( $nav_contents ) ) {
155 foreach ( $nav_contents as $key => $content ) {
156 $is_pro = isset( $content['is_pro'] ) && true === $content['is_pro'];
157 tutor_load_template(
158 $content['template_path'],
159 array(
160 'is_active' => $content['value'] === $active_tab,
161 'post' => $post,
162 'course_id' => $course_id,
163 'lesson_id' => $course_content_id,
164 ),
165 $is_pro
166 );
167 }
168 }
169 ?>
170 </div>
171 </div>
172 </div>
173
174 <?php tutor_load_template( 'single.common.footer', array( 'course_id' => $course_id ) ); ?>
175
176 <?php do_action( 'tutor_lesson/single/after/content' ); ?>
177