Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor/classes/Template.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
/**
3
+
* Template Class
4
+
*
5
+
* @package Tutor\Template
6
+
* @author Themeum <support@themeum.com>
7
+
* @link https://themeum.com
8
+
* @since 1.0.0
9
+
*/
10
+
11
+
namespace TUTOR;
12
+
13
+
if ( ! defined( 'ABSPATH' ) ) {
14
+
exit;
15
+
}
16
+
17
+
/**
18
+
* Handle template before include
19
+
*
20
+
* @since 1.0.0
21
+
*/
22
+
class Template extends Tutor_Base {
23
+
24
+
/**
25
+
* Register Hooks
26
+
*
27
+
* @since 1.0.0
28
+
*/
29
+
public function __construct() {
30
+
parent::__construct();
31
+
32
+
/**
33
+
* Should Load Template Override
34
+
* Integration for specially oxygen builder
35
+
* If we found false of below filter, then we will not use this file
36
+
*/
37
+
38
+
$template_override = apply_filters( 'tutor_lms_should_template_override', true );
39
+
if ( ! $template_override ) {
40
+
return;
41
+
}
42
+
43
+
add_filter( 'template_include', array( $this, 'load_course_archive_template' ), 99 );
44
+
add_filter( 'template_include', array( $this, 'load_single_course_template' ), 99 );
45
+
add_filter( 'template_include', array( $this, 'load_single_lesson_template' ), 99 );
46
+
add_filter( 'template_include', array( $this, 'play_private_video' ), 99 );
47
+
add_filter( 'template_include', array( $this, 'load_quiz_template' ), 99 );
48
+
add_filter( 'template_include', array( $this, 'load_assignment_template' ), 99 );
49
+
50
+
add_filter( 'template_include', array( $this, 'student_public_profile' ), 99 );
51
+
add_filter( 'template_include', array( $this, 'tutor_dashboard' ), 99 );
52
+
add_filter( 'pre_get_document_title', array( $this, 'student_public_profile_title' ) );
53
+
54
+
add_filter( 'the_content', array( $this, 'convert_static_page_to_template' ) );
55
+
add_action( 'pre_get_posts', array( $this, 'limit_course_query_archive' ), 99 );
56
+
}
57
+
58
+
/**
59
+
* Load default template for course
60
+
*
61
+
* @since v.1.0.0
62
+
*
63
+
* @param sting $template template name.
64
+
*
65
+
* @return bool|string
66
+
*/
67
+
public function load_course_archive_template( $template ) {
68
+
global $wp_query;
69
+
70
+
$post_type = get_query_var( 'post_type' );
71
+
if ( ! is_array( $post_type ) ) {
72
+
$post_type = array( $post_type );
73
+
}
74
+
75
+
$course_category = get_query_var( 'course-category' );
76
+
77
+
if ( ( in_array( $this->course_post_type, $post_type, true ) || ! empty( $course_category ) ) && $wp_query->is_archive ) {
78
+
$template = tutor_get_template( 'archive-course' );
79
+
return $template;
80
+
}
81
+
82
+
return $template;
83
+
}
84
+
85
+
/**
86
+
* Limit for course archive listing
87
+
*
88
+
* Make a page to archive listing for courses
89
+
*
90
+
* @since 1.0.0
91
+
*
92
+
* @param mixed $query query argument.
93
+
*
94
+
* @return void
95
+
*/
96
+
public function limit_course_query_archive( $query ) {
97
+
$courses_per_page = (int) tutor_utils()->get_option( 'courses_per_page', 12 );
98
+
99
+
if ( $query->is_main_query() && ! $query->is_feed() && ! is_admin() && is_page() ) {
100
+
$queried_object = get_queried_object();
101
+
if ( $queried_object instanceof \WP_Post ) {
102
+
$page_id = $queried_object->ID;
103
+
$selected_archive_page = (int) apply_filters( 'tutor_filter_course_archive_page', tutor_utils()->get_option( 'course_archive_page' ) );
104
+
105
+
if ( $page_id === $selected_archive_page ) {
106
+
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
107
+
$search_query = get_search_query();
108
+
query_posts(
109
+
array(
110
+
'post_type' => $this->course_post_type,
111
+
'paged' => $paged,
112
+
's' => $search_query,
113
+
'posts_per_page' => $courses_per_page,
114
+
)
115
+
);
116
+
}
117
+
}
118
+
}
119
+
120
+
if ( $query->is_archive && $query->is_main_query() && ! $query->is_feed() && ! is_admin() ) {
121
+
$post_type = get_query_var( 'post_type' );
122
+
$course_category = get_query_var( 'course-category' );
123
+
if ( ( $post_type === $this->course_post_type || ! empty( $course_category ) ) ) {
124
+
$query->set( 'posts_per_page', $courses_per_page );
125
+
$query->set( 'post_type', apply_filters( 'tutor_course_archive_post_types', array( $this->course_post_type ) ) );
126
+
$query = apply_filters( 'tutor_limit_course_archive_list_filter', $query );
127
+
128
+
$course_filter = 'newest_first';
129
+
if ( ! empty( Input::get( 'tutor_course_filter', '' ) ) ) {
130
+
$course_filter = Input::get( 'tutor_course_filter' );
131
+
}
132
+
switch ( $course_filter ) {
133
+
case 'newest_first':
134
+
$query->set( 'orderby', 'post_date' );
135
+
$query->set( 'order', 'desc' );
136
+
break;
137
+
case 'oldest_first':
138
+
$query->set( 'orderby', 'post_date' );
139
+
$query->set( 'order', 'asc' );
140
+
break;
141
+
case 'course_title_az':
142
+
$query->set( 'orderby', 'post_title' );
143
+
$query->set( 'order', 'asc' );
144
+
break;
145
+
case 'course_title_za':
146
+
$query->set( 'orderby', 'post_title' );
147
+
$query->set( 'order', 'desc' );
148
+
break;
149
+
}
150
+
}
151
+
}
152
+
}
153
+
154
+
/**
155
+
* Load Single Course Template
156
+
*
157
+
* @since v.1.0.0
158
+
*
159
+
* @param string $template template name to load.
160
+
*
161
+
* @return bool|string
162
+
*/
163
+
public function load_single_course_template( $template ) {
164
+
global $wp_query;
165
+
166
+
if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] === $this->course_post_type ) {
167
+
do_action( 'single_course_template_before_load', get_the_ID() );
168
+
wp_reset_query();
169
+
return tutor_get_template( 'single-course' );
170
+
}
171
+
172
+
return $template;
173
+
}
174
+
175
+
/**
176
+
* Get root post parent id
177
+
*
178
+
* @param int $id post id.
179
+
*
180
+
* @return int root post id
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
+
* Load lesson template
191
+
*
192
+
* @since v.1.0.0
193
+
*
194
+
* @param string $template template name to load.
195
+
*
196
+
* @return bool|string
197
+
*/
198
+
public function load_single_lesson_template( $template ) {
199
+
global $wp_query;
200
+
201
+
$post_type = get_query_var( 'post_type' );
202
+
203
+
$is_lesson_post_type = apply_filters( 'tutor_is_lesson_post_type', $wp_query->query_vars['post_type'] === $this->lesson_post_type, $post_type );
204
+
205
+
if ( $wp_query->is_single && ! empty( $post_type ) && $is_lesson_post_type ) {
206
+
$page_id = get_the_ID();
207
+
208
+
do_action( 'tutor_lesson_load_before', $template );
209
+
setup_postdata( $page_id );
210
+
211
+
if ( is_user_logged_in() ) {
212
+
$has_content_access = tutor_utils()->has_enrolled_content_access( 'lesson' );
213
+
if ( $has_content_access ) {
214
+
$template = tutor_get_template( 'single-lesson' );
215
+
} else {
216
+
$template = tutor_get_template( 'single.lesson.required-enroll' ); // You need to enroll first.
217
+
}
218
+
} else {
219
+
$template = tutor_get_template( 'login' );
220
+
}
221
+
wp_reset_postdata();
222
+
223
+
// Forcefully show lessons if it is public and not paid.
224
+
$course_id = $this->get_root_post_parent_id( $page_id );
225
+
if ( 'yes' === get_post_meta( $course_id, '_tutor_is_public_course', true ) && ! tutor_utils()->is_course_purchasable( $course_id ) ) {
226
+
$template = tutor_get_template( 'single-lesson' );
227
+
}
228
+
229
+
return apply_filters( 'tutor_lesson_template', $template );
230
+
}
231
+
return $template;
232
+
}
233
+
234
+
/**
235
+
* Play the video in this url.
236
+
*
237
+
* @param string $template template to load.
238
+
*
239
+
* @return mixed
240
+
*/
241
+
public function play_private_video( $template ) {
242
+
global $wp_query;
243
+
244
+
if ( $wp_query->is_single && ! empty( $wp_query->query_vars['lesson_video'] ) && 'true' === $wp_query->query_vars['lesson_video'] ) {
245
+
246
+
$is_public_video = apply_filters( 'tutor_video_stream_is_public', false, get_the_ID() );
247
+
if ( $is_public_video ) {
248
+
$video_info = tutor_utils()->get_video_info();
249
+
if ( $video_info ) {
250
+
$stream = new Video_Stream( $video_info->path );
251
+
$stream->start();
252
+
}
253
+
exit();
254
+
}
255
+
256
+
if ( tutor_utils()->is_course_enrolled_by_lesson() ) {
257
+
$video_info = tutor_utils()->get_video_info();
258
+
if ( $video_info ) {
259
+
$stream = new Video_Stream( $video_info->path );
260
+
$stream->start();
261
+
}
262
+
} else {
263
+
esc_html_e( 'Permission denied', 'tutor' );
264
+
}
265
+
exit();
266
+
}
267
+
268
+
return $template;
269
+
}
270
+
271
+
/**
272
+
* Tutor Dashboard Page, Responsible to show dashboard stuffs
273
+
*
274
+
* @since v.1.0.0
275
+
*
276
+
* @param string $content page content.
277
+
*
278
+
* @return mixed
279
+
*/
280
+
public function convert_static_page_to_template( $content ) {
281
+
// Dashboard Page.
282
+
$student_dashboard_page_id = (int) tutor_utils()->get_option( 'tutor_dashboard_page_id' );
283
+
if ( get_the_ID() === $student_dashboard_page_id ) {
284
+
$shortcode = new Shortcode( false );
285
+
return $shortcode->tutor_dashboard();
286
+
}
287
+
288
+
// Instructor Registration Page.
289
+
$instructor_register_page_page_id = (int) tutor_utils()->get_option( 'instructor_register_page' );
290
+
if ( get_the_ID() === $instructor_register_page_page_id ) {
291
+
$shortcode = new Shortcode( false );
292
+
return $shortcode->instructor_registration_form();
293
+
}
294
+
295
+
$student_register_page_id = (int) tutor_utils()->get_option( 'student_register_page' );
296
+
if ( get_the_ID() === $student_register_page_id ) {
297
+
$shortcode = new Shortcode( false );
298
+
return $shortcode->student_registration_form();
299
+
}
300
+
301
+
$tutor_cart_page_id = (int) tutor_utils()->get_option( 'tutor_cart_page_id' );
302
+
if ( get_the_ID() === $tutor_cart_page_id ) {
303
+
$shortcode = new Shortcode( false );
304
+
return $shortcode->tutor_cart_page();
305
+
}
306
+
307
+
$tutor_checkout_page_id = (int) tutor_utils()->get_option( 'tutor_checkout_page_id' );
308
+
if ( get_the_ID() === $tutor_checkout_page_id ) {
309
+
if ( ! apply_filters( 'tutor_should_load_checkout_page', true ) ) {
310
+
return;
311
+
}
312
+
313
+
$shortcode = new Shortcode( false );
314
+
return $shortcode->tutor_checkout_page();
315
+
}
316
+
317
+
return $content;
318
+
}
319
+
320
+
/**
321
+
* Tutor dashboard
322
+
*
323
+
* @since 1.0.0
324
+
*
325
+
* @param string $template template name.
326
+
*
327
+
* @return string
328
+
*/
329
+
public function tutor_dashboard( $template ) {
330
+
global $wp_query;
331
+
$is_page = apply_filters( 'tutor_determine_is_page', $wp_query->is_page, $template );
332
+
if ( $is_page ) {
333
+
$student_dashboard_page_id = (int) tutor_utils()->get_option( 'tutor_dashboard_page_id' );
334
+
$student_dashboard_page_id = apply_filters( 'tutor_dashboard_page_id_filter', $student_dashboard_page_id );
335
+
$is_dashboard_page = apply_filters( 'tutor_determine_is_dashboard_page', get_the_ID() == $student_dashboard_page_id );
336
+
337
+
if ( $is_dashboard_page ) {
338
+
/**
339
+
* Handle if logout URL
340
+
*
341
+
* @since v.1.1.2
342
+
*/
343
+
if ( tutor_utils()->array_get( 'tutor_dashboard_page', $wp_query->query_vars ) === 'logout' ) {
344
+
$redirect = apply_filters( 'tutor_dashboard_logout_redirect_url', get_permalink( $student_dashboard_page_id ) );
345
+
wp_logout();
346
+
wp_safe_redirect( $redirect );
347
+
die();
348
+
}
349
+
350
+
$dashboard_page = tutor_utils()->array_get( 'tutor_dashboard_page', $wp_query->query_vars );
351
+
352
+
$get_dashboard_config = tutor_utils()->tutor_dashboard_permalinks();
353
+
$target_dashboard_page = tutor_utils()->array_get( $dashboard_page, $get_dashboard_config );
354
+
355
+
if ( isset( $target_dashboard_page['login_require'] ) && false === $target_dashboard_page['login_require'] ) {
356
+
$template = tutor_load_template_part( "template-part.{$dashboard_page}" );
357
+
} else {
358
+
359
+
/**
360
+
* Load view page based on dashboard Endpoint
361
+
*/
362
+
if ( is_user_logged_in() ) {
363
+
364
+
global $wp;
365
+
$full_path = explode( '/', trim( str_replace( get_home_url(), '', home_url( $wp->request ) ), '/' ) );
366
+
367
+
$template = tutor_get_template( 'create-course' === end( $full_path ) ? 'dashboard.create-course' : 'dashboard' );
368
+
369
+
/**
370
+
* Check page page permission
371
+
*
372
+
* @since 1.3.4
373
+
*/
374
+
$query_var = tutor_utils()->array_get( 'tutor_dashboard_page', $wp_query->query_vars );
375
+
$dashboard_pages = tutor_utils()->tutor_dashboard_pages();
376
+
$dashboard_page_item = tutor_utils()->array_get( $query_var, $dashboard_pages );
377
+
$auth_cap = tutor_utils()->array_get( 'auth_cap', $dashboard_page_item );
378
+
if ( $auth_cap && ! current_user_can( $auth_cap ) ) {
379
+
$template = tutor_get_template( 'permission-denied' );
380
+
}
381
+
} else {
382
+
$template = tutor_get_template( 'login' );
383
+
}
384
+
}
385
+
}
386
+
}
387
+
return $template;
388
+
}
389
+
390
+
/**
391
+
* Load quiz template
392
+
*
393
+
* @since 1.0.0
394
+
*
395
+
* If course public then enrollment not required
396
+
*
397
+
* @since 2.0.2
398
+
*
399
+
* @param string $template template to load.
400
+
*
401
+
* @return bool|string
402
+
*/
403
+
public function load_quiz_template( $template ) {
404
+
global $wp_query, $post;
405
+
406
+
if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && 'tutor_quiz' === $wp_query->query_vars['post_type'] ) {
407
+
if ( is_user_logged_in() ) {
408
+
$has_content_access = tutor_utils()->has_enrolled_content_access( 'quiz' );
409
+
$course_id = tutor_utils()->get_course_id_by_content( $post );
410
+
$is_public = Course_List::is_public( $course_id );
411
+
412
+
// if public course don't need to be enrolled.
413
+
if ( $has_content_access || $is_public ) {
414
+
$template = tutor_get_template( 'single-quiz' );
415
+
} else {
416
+
$template = tutor_get_template( 'single.lesson.required-enroll' ); // You need to enroll first.
417
+
}
418
+
} else {
419
+
$template = tutor_get_template( 'login' );
420
+
}
421
+
return $template;
422
+
}
423
+
return $template;
424
+
}
425
+
426
+
/**
427
+
* Load assignment template
428
+
*
429
+
* @since 1.0.0
430
+
*
431
+
* @param string $template template file to load.
432
+
*
433
+
* @return string template path
434
+
*/
435
+
public function load_assignment_template( $template ) {
436
+
global $wp_query;
437
+
438
+
if ( $wp_query->is_single && ! empty( $wp_query->query_vars['post_type'] ) && 'tutor_assignments' === $wp_query->query_vars['post_type'] ) {
439
+
if ( is_user_logged_in() ) {
440
+
$has_content_access = tutor_utils()->has_enrolled_content_access( 'assignment' );
441
+
if ( $has_content_access ) {
442
+
$template = tutor_get_template( 'single-assignment' );
443
+
} else {
444
+
$template = tutor_get_template( 'single.lesson.required-enroll' ); // You need to enroll first.
445
+
}
446
+
} else {
447
+
$template = tutor_get_template( 'login' );
448
+
}
449
+
return $template;
450
+
}
451
+
452
+
return $template;
453
+
}
454
+
455
+
/**
456
+
* Student public profile
457
+
*
458
+
* @since 1.0.0
459
+
*
460
+
* @param string $template profile template.
461
+
*
462
+
* @return bool|string
463
+
*/
464
+
public function student_public_profile( $template ) {
465
+
global $wp_query;
466
+
$query_var = $wp_query->query_vars;
467
+
if ( ! empty( $wp_query->query['tutor_profile_username'] ) ) {
468
+
$template = tutor_get_template( 'public-profile' );
469
+
}
470
+
471
+
return $template;
472
+
}
473
+
474
+
/**
475
+
* Show student Profile
476
+
*
477
+
* @since 1.0.0
478
+
*
479
+
* @return string
480
+
*/
481
+
public function student_public_profile_title() {
482
+
global $wp_query;
483
+
484
+
if ( ! empty( $wp_query->query['tutor_profile_username'] ) ) {
485
+
global $wpdb;
486
+
487
+
$user_name = sanitize_text_field( $wp_query->query['tutor_profile_username'] );
488
+
$user = $wpdb->get_row( $wpdb->prepare( "SELECT display_name from {$wpdb->users} WHERE user_login = %s limit 1; ", $user_name ) );
489
+
490
+
if ( ! empty( $user->display_name ) ) {
491
+
return sprintf( "%s's %s", $user->display_name, __( 'Profile Page', 'tutor' ) );
492
+
}
493
+
}
494
+
return '';
495
+
}
496
+
}
497
+