PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 2.0.6
Tutor LMS – eLearning and online course solution v2.0.6
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 / classes / Template.php
tutor / classes Last commit date
Addons.php 4 years ago Admin.php 4 years ago Ajax.php 4 years ago Announcements.php 4 years ago Assets.php 4 years ago Backend_Page_Trait.php 4 years ago Course.php 4 years ago Course_Filter.php 4 years ago Course_List.php 4 years ago Course_Settings_Tabs.php 4 years ago Course_Widget.php 4 years ago Custom_Validation.php 4 years ago Dashboard.php 4 years ago FormHandler.php 4 years ago Frontend.php 4 years ago Gutenberg.php 4 years ago Input.php 4 years ago Instructor.php 4 years ago Instructors_List.php 4 years ago Lesson.php 4 years ago Options_V2.php 4 years ago Post_types.php 4 years ago Private_Course_Access.php 4 years ago Q_and_A.php 4 years ago Question_Answers_List.php 4 years ago Quiz.php 4 years ago Quiz_Attempts_List.php 4 years ago RestAPI.php 4 years ago Reviews.php 4 years ago Rewrite_Rules.php 4 years ago Shortcode.php 4 years ago Student.php 4 years ago Students_List.php 4 years ago Taxonomies.php 4 years ago Template.php 4 years ago Theme_Compatibility.php 5 years ago Tools.php 4 years ago Tools_V2.php 4 years ago Tutor.php 4 years ago TutorEDD.php 4 years ago Tutor_Base.php 5 years ago Tutor_List_Table.php 4 years ago Tutor_Setup.php 4 years ago Upgrader.php 4 years ago User.php 4 years ago Utils.php 4 years ago Video_Stream.php 4 years ago Withdraw.php 4 years ago Withdraw_Requests_List.php 4 years ago WooCommerce.php 4 years ago
Template.php
442 lines
1 <?php
2 /**
3 * Template Class
4 *
5 * @since: v.1.0.0
6 */
7 namespace TUTOR;
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit;
11 }
12
13
14 class Template extends Tutor_Base {
15
16 public function __construct() {
17 parent::__construct();
18
19 /**
20 * Should Load Template Override
21 * Integration for specially oxygen builder
22 * If we found false of below filter, then we will not use this file
23 */
24
25 $template_override = apply_filters( 'tutor_lms_should_template_override', true );
26 if ( ! $template_override ) {
27 return;
28 }
29
30 add_filter( 'template_include', array( $this, 'load_course_archive_template' ), 99 );
31 add_filter( 'template_include', array( $this, 'load_single_course_template' ), 99 );
32 add_filter( 'template_include', array( $this, 'load_single_lesson_template' ), 99 );
33 add_filter( 'template_include', array( $this, 'play_private_video' ), 99 );
34 add_filter( 'template_include', array( $this, 'load_quiz_template' ), 99 );
35 add_filter( 'template_include', array( $this, 'load_assignment_template' ), 99 );
36
37 add_filter( 'template_include', array( $this, 'student_public_profile' ), 99 );
38 add_filter( 'template_include', array( $this, 'tutor_dashboard' ), 99 );
39 add_filter( 'pre_get_document_title', array( $this, 'student_public_profile_title' ) );
40
41 add_filter( 'the_content', array( $this, 'convert_static_page_to_template' ) );
42 add_action( 'pre_get_posts', array( $this, 'limit_course_query_archive' ), 99 );
43
44 /**
45 * Dummy template for Spotlight mode design. It will be removed once we adopt the design to core.
46 */
47 add_action(
48 'wp_loaded',
49 function() {
50 if ( ! is_admin() && isset( $_GET['course-spotlight-v2'] ) && $_GET['course-spotlight-v2'] == 1 ) {
51 tutor_utils()->tutor_custom_header();
52 include tutor()->path . '/views/course-spotlight-v2-static.php';
53 tutor_utils()->tutor_custom_footer();
54 exit;
55 }
56 }
57 );
58 }
59
60 /**
61 * @param $template
62 *
63 * @return bool|string
64 *
65 * Load default template for course
66 *
67 * @since v.1.0.0
68 */
69 public function load_course_archive_template( $template ) {
70 global $wp_query;
71
72 $post_type = get_query_var( 'post_type' );
73 $course_category = get_query_var( 'course-category' );
74
75 if ( ( $post_type === $this->course_post_type || ! empty( $course_category ) ) && $wp_query->is_archive ) {
76 $template = tutor_get_template( 'archive-course' );
77 return $template;
78 }
79
80 return $template;
81 }
82
83 /**
84 * @param $query
85 *
86 * limit for course archive listing
87 *
88 * Make a page to archive listing for courses
89 */
90 public function limit_course_query_archive( $query ) {
91 $courses_per_page = (int) tutor_utils()->get_option( 'courses_per_page', 12 );
92
93 if ( $query->is_main_query() && ! $query->is_feed() && ! is_admin() && is_page() ) {
94 $queried_object = get_queried_object();
95 if ( $queried_object instanceof \WP_Post ) {
96 $page_id = $queried_object->ID;
97 $selected_archive_page = (int) tutor_utils()->get_option( 'course_archive_page' );
98
99 if ( $page_id === $selected_archive_page ) {
100 $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
101 $search_query = get_search_query();
102 query_posts(
103 array(
104 'post_type' => $this->course_post_type,
105 'paged' => $paged,
106 's' => $search_query,
107 'posts_per_page' => $courses_per_page,
108 )
109 );
110 }
111 }
112 }
113
114 if ( $query->is_archive && $query->is_main_query() && ! $query->is_feed() && ! is_admin() ) {
115 $post_type = get_query_var( 'post_type' );
116 $course_category = get_query_var( 'course-category' );
117 if ( ( $post_type === $this->course_post_type || ! empty( $course_category ) ) ) {
118 $query->set( 'posts_per_page', $courses_per_page );
119
120 $course_filter = 'newest_first';
121 if ( ! empty( $_GET['tutor_course_filter'] ) ) {
122 $course_filter = sanitize_text_field( $_GET['tutor_course_filter'] );
123 }
124 switch ( $course_filter ) {
125 case 'newest_first':
126 $query->set( 'orderby', 'ID' );
127 $query->set( 'order', 'desc' );
128 break;
129 case 'oldest_first':
130 $query->set( 'orderby', 'ID' );
131 $query->set( 'order', 'asc' );
132 break;
133 case 'course_title_az':
134 $query->set( 'orderby', 'post_title' );
135 $query->set( 'order', 'asc' );
136 break;
137 case 'course_title_za':
138 $query->set( 'orderby', 'post_title' );
139 $query->set( 'order', 'desc' );
140 break;
141 }
142 }
143 }
144 }
145
146 /**
147 * @param $template
148 *
149 * @return bool|string
150 *
151 * Load Single Course Template
152 *
153 * @since v.1.0.0
154 * @updated v.1.3.5
155 */
156 public function load_single_course_template( $template ) {
157 global $wp_query;
158
159 if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] === $this->course_post_type ) {
160 do_action( 'single_course_template_before_load', get_the_ID() );
161 wp_reset_query();
162 return tutor_get_template( 'single-course' );
163 }
164
165 return $template;
166 }
167
168 private function get_root_post_parent_id( $id ) {
169 $ancestors = get_post_ancestors( $id );
170 $root = is_array( $ancestors ) ? end( $ancestors ) : null;
171
172 return is_numeric( $root ) ? $root : $id;
173 }
174
175 /**
176 * @param $template
177 *
178 * @return bool|string
179 *
180 * Load lesson template
181 *
182 * @since v.1.0.0
183 */
184
185 public function load_single_lesson_template( $template ) {
186 global $wp_query;
187
188 if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] === $this->lesson_post_type ) {
189 $page_id = get_the_ID();
190
191 do_action( 'tutor_lesson_load_before', $template );
192
193 setup_postdata( $page_id );
194
195 if ( is_user_logged_in() ) {
196 $has_content_access = tutor_utils()->has_enrolled_content_access( 'lesson' );
197 if ( $has_content_access ) {
198 $template = tutor_get_template( 'single-lesson' );
199 } else {
200 $template = tutor_get_template( 'single.lesson.required-enroll' ); // You need to enroll first
201 }
202 } else {
203 $template = tutor_get_template( 'login' );
204 }
205 wp_reset_postdata();
206
207 // Forcefully show lessons if it is public and not paid
208 $course_id = $this->get_root_post_parent_id( $page_id );
209 if ( get_post_meta( $course_id, '_tutor_is_public_course', true ) == 'yes' && ! tutor_utils()->is_course_purchasable( $course_id ) ) {
210 $template = tutor_get_template( 'single-lesson' );
211 }
212
213 return apply_filters( 'tutor_lesson_template', $template );
214 }
215 return $template;
216 }
217
218 /**
219 * @param $template
220 *
221 * @return mixed
222 *
223 * Play the video in this url.
224 */
225 public function play_private_video( $template ) {
226 global $wp_query;
227
228 if ( $wp_query->is_single && ! empty( $wp_query->query_vars['lesson_video'] ) && $wp_query->query_vars['lesson_video'] === 'true' ) {
229
230 $isPublicVideo = apply_filters( 'tutor_video_stream_is_public', false, get_the_ID() );
231 if ( $isPublicVideo ) {
232 $video_info = tutor_utils()->get_video_info();
233 if ( $video_info ) {
234 $stream = new Video_Stream( $video_info->path );
235 $stream->start();
236 }
237 exit();
238 }
239
240 if ( tutor_utils()->is_course_enrolled_by_lesson() ) {
241 $video_info = tutor_utils()->get_video_info();
242 if ( $video_info ) {
243 $stream = new Video_Stream( $video_info->path );
244 $stream->start();
245 }
246 } else {
247 _e( 'Permission denied', 'tutor' );
248 }
249 exit();
250 }
251
252 return $template;
253 }
254
255 /**
256 * @param $content
257 *
258 * @return mixed
259 *
260 * Tutor Dashboard Page, Responsible to show dashboard stuffs
261 *
262 * @since v.1.0.0
263 */
264 public function convert_static_page_to_template( $content ) {
265 // Dashboard Page
266 $student_dashboard_page_id = (int) tutor_utils()->get_option( 'tutor_dashboard_page_id' );
267 if ( $student_dashboard_page_id === get_the_ID() ) {
268 $shortcode = new Shortcode();
269 return $shortcode->tutor_dashboard();
270 }
271
272 // Instructor Registration Page
273 $instructor_register_page_page_id = (int) tutor_utils()->get_option( 'instructor_register_page' );
274 if ( $instructor_register_page_page_id === get_the_ID() ) {
275 $shortcode = new Shortcode();
276 return $shortcode->instructor_registration_form();
277 }
278
279 $student_register_page_id = (int) tutor_utils()->get_option( 'student_register_page' );
280 if ( $student_register_page_id === get_the_ID() ) {
281 $shortcode = new Shortcode();
282 return $shortcode->student_registration_form();
283 }
284
285 return $content;
286 }
287
288 public function tutor_dashboard( $template ) {
289 global $wp_query;
290 if ( $wp_query->is_page ) {
291 $student_dashboard_page_id = (int) tutor_utils()->get_option( 'tutor_dashboard_page_id' );
292 $student_dashboard_page_id = apply_filters( 'tutor_dashboard_page_id_filter', $student_dashboard_page_id );
293
294 if ( $student_dashboard_page_id == get_the_ID() ) {
295 /**
296 * Handle if logout URL
297 *
298 * @since v.1.1.2
299 */
300 if (tutor_utils()->array_get('tutor_dashboard_page', $wp_query->query_vars) === 'logout'){
301 $redirect = apply_filters( 'tutor_dashboard_logout_redirect_url', get_permalink($student_dashboard_page_id) );
302 wp_logout();
303 wp_redirect( $redirect );
304 die();
305 }
306
307 $dashboard_page = tutor_utils()->array_get( 'tutor_dashboard_page', $wp_query->query_vars );
308
309 $get_dashboard_config = tutor_utils()->tutor_dashboard_permalinks();
310 $target_dashboard_page = tutor_utils()->array_get( $dashboard_page, $get_dashboard_config );
311
312
313 if ( isset( $target_dashboard_page['login_require'] ) && $target_dashboard_page['login_require'] === false ) {
314 $template = tutor_load_template_part( "template-part.{$dashboard_page}" );
315 } else {
316
317 /**
318 * Load view page based on dashboard Endpoint
319 */
320 if ( is_user_logged_in() ) {
321
322 global $wp;
323 $full_path = explode( '/', trim( str_replace( get_home_url(), '', home_url( $wp->request ) ), '/' ) );
324
325 // $template = tutor_get_template( end( $full_path ) == 'create-course' ? implode( '/', $full_path ) : 'dashboard' );
326 $template = tutor_get_template( end( $full_path ) == 'create-course' ? 'dashboard.create-course' : 'dashboard' );
327
328 /**
329 * Check page page permission
330 *
331 * @since v.1.3.4
332 */
333 $query_var = tutor_utils()->array_get( 'tutor_dashboard_page', $wp_query->query_vars );
334 $dashboard_pages = tutor_utils()->tutor_dashboard_pages();
335 $dashboard_page_item = tutor_utils()->array_get( $query_var, $dashboard_pages );
336 $auth_cap = tutor_utils()->array_get( 'auth_cap', $dashboard_page_item );
337 if ( $auth_cap && ! current_user_can( $auth_cap ) ) {
338 $template = tutor_get_template( 'permission-denied' );
339 }
340 } else {
341 $template = tutor_get_template( 'login' );
342 }
343 }
344 }
345 }
346 return $template;
347 }
348
349 /**
350 * @param $template
351 *
352 * @return bool|string
353 *
354 * @since v.1.0.0
355 *
356 * If course public then enrolment not required
357 *
358 * @since v2.0.2
359 */
360 public function load_quiz_template( $template ) {
361 global $wp_query, $post;
362
363 if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] === 'tutor_quiz' ) {
364 if ( is_user_logged_in() ) {
365 $has_content_access = tutor_utils()->has_enrolled_content_access( 'quiz' );
366 $course_id = tutor_utils()->get_course_id_by_content( $post );
367 $is_public = Course_List::is_public( $course_id );
368
369 // if public course don't need to be enrolled.
370 if ( $has_content_access || $is_public ) {
371 $template = tutor_get_template( 'single-quiz' );
372 } else {
373 $template = tutor_get_template( 'single.lesson.required-enroll' ); // You need to enroll first
374 }
375 } else {
376 $template = tutor_get_template( 'login' );
377 }
378 return $template;
379 }
380 return $template;
381 }
382
383 public function load_assignment_template( $template ) {
384 global $wp_query;
385
386 if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] === 'tutor_assignments' ) {
387 if ( is_user_logged_in() ) {
388 $has_content_access = tutor_utils()->has_enrolled_content_access( 'assignment' );
389 if ( $has_content_access ) {
390 $template = tutor_get_template( 'single-assignment' );
391 } else {
392 $template = tutor_get_template( 'single.lesson.required-enroll' ); // You need to enroll first
393 }
394 } else {
395 $template = tutor_get_template( 'login' );
396 }
397 return $template;
398 }
399
400 return $template;
401 }
402
403 /**
404 * @param $template
405 *
406 * @return bool|string
407 *
408 * @since v.1.0.0
409 */
410 public function student_public_profile( $template ) {
411 global $wp_query;
412 $query_var = $wp_query->query_vars;
413 if ( ! empty( $wp_query->query['tutor_profile_username'] ) ) {
414 $template = tutor_get_template( 'public-profile' );
415 }
416
417 return $template;
418 }
419
420 /**
421 * @return string
422 * Show student Profile
423 *
424 * @since v.1.0.0
425 */
426 public function student_public_profile_title() {
427 global $wp_query;
428
429 if ( ! empty( $wp_query->query['tutor_profile_username'] ) ) {
430 global $wpdb;
431
432 $user_name = sanitize_text_field( $wp_query->query['tutor_profile_username'] );
433 $user = $wpdb->get_row( $wpdb->prepare( "SELECT display_name from {$wpdb->users} WHERE user_login = %s limit 1; ", $user_name ) );
434
435 if ( ! empty( $user->display_name ) ) {
436 return sprintf( "%s's Profile page ", $user->display_name );
437 }
438 }
439 return '';
440 }
441 }
442