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