Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor/includes/tutor-template-functions.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
/**
3
+
* Tutor template functions
4
+
*
5
+
* @package TutorFunctions
6
+
* @author Themeum <support@themeum.com>
7
+
* @link https://themeum.com
8
+
* @since 1.0.0
9
+
*/
10
+
11
+
use Tutor\Models\CourseModel;
12
+
13
+
if ( ! defined( 'ABSPATH' ) ) {
14
+
exit;
15
+
}
16
+
17
+
18
+
if ( ! function_exists( 'tutor_get_template' ) ) {
19
+
/**
20
+
* Load template with override file system
21
+
*
22
+
* @since 1.0.0
23
+
*
24
+
* @param null $template template.
25
+
* @param bool $tutor_pro is tutor pro.
26
+
*
27
+
* @return bool|string
28
+
*/
29
+
function tutor_get_template( $template = null, $tutor_pro = false ) {
30
+
if ( ! $template ) {
31
+
return false;
32
+
}
33
+
$template = str_replace( '.', DIRECTORY_SEPARATOR, $template );
34
+
35
+
/**
36
+
* Get template first from child-theme if exists
37
+
* If child theme not exists, then get template from parent theme
38
+
*/
39
+
$template_location = trailingslashit( get_stylesheet_directory() ) . "tutor/{$template}.php";
40
+
if ( ! file_exists( $template_location ) ) {
41
+
$template_location = trailingslashit( get_template_directory() ) . "tutor/{$template}.php";
42
+
}
43
+
$file_in_theme = $template_location;
44
+
if ( ! file_exists( $template_location ) ) {
45
+
$template_location = trailingslashit( tutor()->path ) . "templates/{$template}.php";
46
+
47
+
if ( $tutor_pro && function_exists( 'tutor_pro' ) ) {
48
+
$pro_template_location = trailingslashit( tutor_pro()->path ) . "templates/{$template}.php";
49
+
if ( file_exists( $pro_template_location ) ) {
50
+
$template_location = trailingslashit( tutor_pro()->path ) . "templates/{$template}.php";
51
+
}
52
+
}
53
+
54
+
if ( ! file_exists( $template_location ) ) {
55
+
$warning_msg = __( 'The file you are trying to load does not exist in your theme or Tutor LMS plugin location. If you are extending the Tutor LMS plugin, please create a php file here: ', 'tutor' );
56
+
$warning_msg = $warning_msg . "<code>$file_in_theme</code>";
57
+
$warning_msg = apply_filters( 'tutor_not_found_template_warning_msg', $warning_msg );
58
+
echo wp_kses( $warning_msg, array( 'code' => true ) );
59
+
?>
60
+
<?php
61
+
}
62
+
}
63
+
64
+
return apply_filters( 'tutor_get_template_path', $template_location, $template );
65
+
}
66
+
}
67
+
68
+
if ( ! function_exists( 'tutor_get_template_path' ) ) {
69
+
/**
70
+
* Get only template path without any warning...
71
+
*
72
+
* @since 1.4.2
73
+
*
74
+
* @param null $template template.
75
+
* @param bool $tutor_pro is tutor pro.
76
+
*
77
+
* @return bool|mixed|void
78
+
*/
79
+
function tutor_get_template_path( $template = null, $tutor_pro = false ) {
80
+
if ( ! $template ) {
81
+
return false;
82
+
}
83
+
$template = str_replace( '.', DIRECTORY_SEPARATOR, $template );
84
+
85
+
/**
86
+
* Get template first from child-theme if exists
87
+
* If child theme not exists, then get template from parent theme
88
+
*/
89
+
$template_location = trailingslashit( get_stylesheet_directory() ) . "tutor/{$template}.php";
90
+
if ( ! file_exists( $template_location ) ) {
91
+
$template_location = trailingslashit( get_template_directory() ) . "tutor/{$template}.php";
92
+
}
93
+
if ( ! file_exists( $template_location ) ) {
94
+
$template_location = trailingslashit( tutor()->path ) . "templates/{$template}.php";
95
+
}
96
+
if ( ! file_exists( $template_location ) && $tutor_pro && function_exists( 'tutor_pro' ) ) {
97
+
$template_location = trailingslashit( tutor_pro()->path ) . "templates/{$template}.php";
98
+
}
99
+
100
+
return apply_filters( 'tutor_get_template_path', $template_location, $template );
101
+
}
102
+
}
103
+
104
+
if ( ! function_exists( 'tutor_load_template' ) ) {
105
+
/**
106
+
* Load template for TUTOR
107
+
*
108
+
* @since 1.0.0
109
+
* @since 1.1.2 updated
110
+
*
111
+
* @param null $template template.
112
+
* @param array $variables variables.
113
+
* @param bool $tutor_pro is tutor pro.
114
+
*
115
+
* @return void
116
+
*/
117
+
function tutor_load_template( $template = null, $variables = array(), $tutor_pro = false ) {
118
+
$variables = (array) $variables;
119
+
$variables = apply_filters( 'get_tutor_load_template_variables', $variables );
120
+
extract( $variables );
121
+
122
+
$isLoad = apply_filters( 'should_tutor_load_template', true, $template, $variables );
123
+
if ( ! $isLoad ) {
124
+
return;
125
+
}
126
+
127
+
do_action( 'tutor_load_template_before', $template, $variables );
128
+
$template_file = tutor_get_template( $template, $tutor_pro );
129
+
if ( file_exists( $template_file ) ) {
130
+
include tutor_get_template( $template, $tutor_pro );
131
+
} else {
132
+
do_action( 'tutor_after_template_not_found', $template );
133
+
}
134
+
do_action( 'tutor_load_template_after', $template, $variables );
135
+
}
136
+
}
137
+
138
+
if ( ! function_exists( 'tutor_load_template_part' ) ) {
139
+
/**
140
+
* Load tutor template part.
141
+
*
142
+
* @since 1.4.3
143
+
*
144
+
* @param null $template template.
145
+
* @param array $variables variables.
146
+
* @param bool $tutor_pro is tutor pro.
147
+
*
148
+
* @return void
149
+
*/
150
+
function tutor_load_template_part( $template = null, $variables = array(), $tutor_pro = false ) {
151
+
$variables = (array) $variables;
152
+
$variables = apply_filters( 'get_tutor_load_template_variables', $variables );
153
+
extract( $variables );
154
+
155
+
/**
156
+
* Get template first from child-theme if exists
157
+
* If child theme not exists, then get template from parent theme
158
+
*/
159
+
$template_location = trailingslashit( get_stylesheet_directory() ) . 'tutor/template.php';
160
+
if ( ! file_exists( $template_location ) ) {
161
+
$template_location = trailingslashit( get_template_directory() ) . 'tutor/template.php';
162
+
}
163
+
164
+
if ( ! file_exists( $template_location ) ) {
165
+
$template_location = trailingslashit( tutor()->path ) . 'templates/template.php';
166
+
if ( ! file_exists( $template_location ) && $tutor_pro && function_exists( 'tutor_pro' ) ) {
167
+
$template_location = trailingslashit( tutor_pro()->path ) . 'templates/template.php';
168
+
}
169
+
}
170
+
171
+
include apply_filters( 'tutor_get_template_part_path', $template_location, $template );
172
+
}
173
+
}
174
+
175
+
if ( ! function_exists( 'tutor_get_template_html' ) ) {
176
+
/**
177
+
* Tutor get template HTML.
178
+
*
179
+
* @since 1.4.3
180
+
*
181
+
* @param null $template template.
182
+
* @param array $variables variables.
183
+
* @param bool $tutor_pro is tutor pro.
184
+
*
185
+
* @return string
186
+
*/
187
+
function tutor_get_template_html( $template_name, $variables = array(), $tutor_pro = false ) {
188
+
ob_start();
189
+
tutor_load_template( $template_name, $variables, $tutor_pro );
190
+
191
+
return ob_get_clean();
192
+
}
193
+
}
194
+
195
+
if ( ! function_exists( 'tutor_course_loop_start' ) ) {
196
+
/**
197
+
* Tutor course loop start.
198
+
*
199
+
* @since 1.0.0
200
+
*
201
+
* @param boolean $echo echo.
202
+
*
203
+
* @return mixed
204
+
*/
205
+
function tutor_course_loop_start( $echo = true ) {
206
+
ob_start();
207
+
tutor_load_template( 'loop.loop-start' );
208
+
$output = apply_filters( 'tutor_course_loop_start', ob_get_clean() );
209
+
210
+
if ( $echo ) {
211
+
echo tutor_kses_html( $output ); //phpcs:ignore
212
+
}
213
+
return $output;
214
+
}
215
+
}
216
+
217
+
if ( ! function_exists( 'tutor_course_loop_end' ) ) {
218
+
/**
219
+
* Tutor course loop end.
220
+
*
221
+
* @since 1.0.0
222
+
*
223
+
* @param boolean $echo echo.
224
+
*
225
+
* @return mixed
226
+
*/
227
+
function tutor_course_loop_end( $echo = true ) {
228
+
ob_start();
229
+
tutor_load_template( 'loop.loop-end' );
230
+
231
+
$output = apply_filters( 'tutor_course_loop_end', ob_get_clean() );
232
+
if ( $echo ) {
233
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
234
+
}
235
+
236
+
return $output;
237
+
}
238
+
}
239
+
240
+
/**
241
+
* Tutor course loop before content.
242
+
*
243
+
* @since 1.0.0
244
+
*
245
+
* @return void
246
+
*/
247
+
function tutor_course_loop_before_content() {
248
+
ob_start();
249
+
tutor_load_template( 'loop.loop-before-content' );
250
+
251
+
$output = apply_filters( 'tutor_course_loop_before_content', ob_get_clean() );
252
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
253
+
}
254
+
255
+
/**
256
+
* Tutor course loop after content.
257
+
*
258
+
* @since 1.0.0
259
+
*
260
+
* @return void
261
+
*/
262
+
function tutor_course_loop_after_content() {
263
+
ob_start();
264
+
tutor_load_template( 'loop.loop-after-content' );
265
+
266
+
$output = apply_filters( 'tutor_course_loop_after_content', ob_get_clean() );
267
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
268
+
}
269
+
270
+
if ( ! function_exists( 'tutor_course_loop_title' ) ) {
271
+
/**
272
+
* Tutor course loop title.
273
+
*
274
+
* @since 1.0.0
275
+
*
276
+
* @return void
277
+
*/
278
+
function tutor_course_loop_title() {
279
+
ob_start();
280
+
tutor_load_template( 'loop.title' );
281
+
$output = apply_filters( 'tutor_course_loop_title', ob_get_clean() );
282
+
283
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
284
+
}
285
+
}
286
+
287
+
288
+
if ( ! function_exists( 'tutor_course_loop_header' ) ) {
289
+
/**
290
+
* Tutor course loop header.
291
+
*
292
+
* @since 1.0.0
293
+
*
294
+
* @return void
295
+
*/
296
+
function tutor_course_loop_header() {
297
+
ob_start();
298
+
tutor_load_template( 'loop.header' );
299
+
$output = apply_filters( 'tutor_course_loop_header', ob_get_clean() );
300
+
301
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
302
+
}
303
+
}
304
+
305
+
if ( ! function_exists( 'tutor_course_loop_footer' ) ) {
306
+
/**
307
+
* Tutor course loop footer.
308
+
*
309
+
* @since 1.0.0
310
+
*
311
+
* @return void
312
+
*/
313
+
function tutor_course_loop_footer() {
314
+
ob_start();
315
+
tutor_load_template( 'loop.footer' );
316
+
$output = apply_filters( 'tutor_course_loop_footer', ob_get_clean() );
317
+
318
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
319
+
}
320
+
}
321
+
322
+
if ( ! function_exists( 'tutor_course_loop_start_content_wrap' ) ) {
323
+
/**
324
+
* Tutor course loop start content wrap.
325
+
*
326
+
* @since 1.0.0
327
+
*
328
+
* @return void
329
+
*/
330
+
function tutor_course_loop_start_content_wrap() {
331
+
ob_start();
332
+
tutor_load_template( 'loop.start_content_wrap' );
333
+
$output = apply_filters( 'tutor_course_loop_start_content_wrap', ob_get_clean() );
334
+
335
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
336
+
}
337
+
}
338
+
339
+
if ( ! function_exists( 'tutor_course_loop_end_content_wrap' ) ) {
340
+
/**
341
+
* Tutor course loop end content wrap.
342
+
*
343
+
* @since 1.0.0
344
+
*
345
+
* @return void
346
+
*/
347
+
function tutor_course_loop_end_content_wrap() {
348
+
ob_start();
349
+
tutor_load_template( 'loop.end_content_wrap' );
350
+
$output = apply_filters( 'tutor_course_loop_end_content_wrap', ob_get_clean() );
351
+
352
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
353
+
}
354
+
}
355
+
356
+
if ( ! function_exists( 'tutor_course_loop_thumbnail' ) ) {
357
+
/**
358
+
* Tutor course loop thumbnail.
359
+
*
360
+
* @since 1.0.0
361
+
*
362
+
* @param boolean $echo echo.
363
+
*
364
+
* @return mixed
365
+
*/
366
+
function tutor_course_loop_thumbnail( $echo = true ) {
367
+
ob_start();
368
+
tutor_load_template( 'loop.thumbnail' );
369
+
$output = apply_filters( 'tutor_course_loop_thumbnail', ob_get_clean() );
370
+
371
+
if ( $echo ) {
372
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
373
+
} else {
374
+
return $output;
375
+
}
376
+
}
377
+
}
378
+
379
+
if ( ! function_exists( 'tutor_course_loop_wrap_classes' ) ) {
380
+
/**
381
+
* Tutor course loop wrap classes.
382
+
*
383
+
* @since 1.0.0
384
+
*
385
+
* @param boolean $echo echo.
386
+
*
387
+
* @return mixed
388
+
*/
389
+
function tutor_course_loop_wrap_classes( $echo = true ) {
390
+
$courseID = get_the_ID();
391
+
$classes = apply_filters(
392
+
'tutor_course_loop_wrap_classes',
393
+
array(
394
+
'tutor-course',
395
+
'tutor-course-loop',
396
+
'tutor-course-loop-' . $courseID,
397
+
)
398
+
);
399
+
400
+
$class = implode( ' ', $classes );
401
+
if ( $echo ) {
402
+
echo esc_attr( $class );
403
+
}
404
+
405
+
return esc_attr( $class );
406
+
}
407
+
}
408
+
409
+
if ( ! function_exists( 'tutor_course_loop_col_classes' ) ) {
410
+
/**
411
+
* Tutor course loop col classes.
412
+
*
413
+
* @since 1.0.0
414
+
*
415
+
* @param boolean $echo echo.
416
+
*
417
+
* @return mixed
418
+
*/
419
+
function tutor_course_loop_col_classes( $echo = true ) {
420
+
$course_filter = (bool) tutor_utils()->get_option( 'course_archive_filter', false );
421
+
$course_archive_arg = isset( $GLOBALS['tutor_course_archive_arg'] ) ? $GLOBALS['tutor_course_archive_arg']['column_per_row'] : null;
422
+
$course_cols = $course_archive_arg === null ? tutor_utils()->get_option( 'courses_col_per_row', 3 ) : $course_archive_arg;
423
+
$classes = apply_filters(
424
+
'tutor_course_loop_col_classes',
425
+
array(
426
+
'tutor-col-' . $course_cols,
427
+
)
428
+
);
429
+
430
+
$class = implode( ' ', $classes );
431
+
if ( $echo ) {
432
+
echo esc_attr( $class );
433
+
}
434
+
435
+
return esc_attr( $class );
436
+
}
437
+
}
438
+
439
+
440
+
if ( ! function_exists( 'tutor_container_classes' ) ) {
441
+
/**
442
+
* Tutor container classes.
443
+
*
444
+
* @since 1.0.0
445
+
*
446
+
* @param boolean $echo echo.
447
+
*
448
+
* @return mixed
449
+
*/
450
+
function tutor_container_classes( $echo = true ) {
451
+
452
+
$classes = apply_filters(
453
+
'tutor_container_classes',
454
+
array(
455
+
'tutor-wrap tutor-courses-wrap',
456
+
'tutor-container',
457
+
)
458
+
);
459
+
460
+
$classes = apply_filters(
461
+
'tutor_container_classes',
462
+
array(
463
+
'tutor-wrap tutor-courses-wrap',
464
+
'tutor-container',
465
+
)
466
+
);
467
+
468
+
$class = implode( ' ', $classes );
469
+
470
+
if ( $echo ) {
471
+
echo esc_attr( $class );
472
+
}
473
+
474
+
return esc_attr( $class );
475
+
}
476
+
}
477
+
if ( ! function_exists( 'tutor_post_class' ) ) {
478
+
/**
479
+
* Tutor post class.
480
+
*
481
+
* @since 1.0.0
482
+
*
483
+
* @param string $default default class.
484
+
*
485
+
* @return void
486
+
*/
487
+
function tutor_post_class( $default = '' ) {
488
+
$classes = apply_filters(
489
+
'tutor_post_class',
490
+
array(
491
+
'tutor-wrap',
492
+
$default,
493
+
)
494
+
);
495
+
496
+
post_class( $classes );
497
+
}
498
+
}
499
+
500
+
if ( ! function_exists( 'tutor_widget_course_loop_classes' ) ) {
501
+
/**
502
+
* Get classes for widget loop single course wrap
503
+
*
504
+
* @since 1.3.1
505
+
*
506
+
* @param bool $echo echo.
507
+
*
508
+
* @return string
509
+
*/
510
+
function tutor_widget_course_loop_classes( $echo = true ) {
511
+
512
+
$classes = apply_filters(
513
+
'tutor_widget_course_loop_classes',
514
+
array(
515
+
'tutor-widget-course-loop',
516
+
'tutor-widget-course',
517
+
'tutor-widget-course-' . get_the_ID(),
518
+
)
519
+
);
520
+
521
+
$class = implode( ' ', $classes );
522
+
if ( $echo ) {
523
+
echo esc_attr( $class );
524
+
}
525
+
526
+
return esc_attr( $class );
527
+
}
528
+
}
529
+
530
+
if ( ! function_exists( 'get_tutor_course_thumbnail' ) ) {
531
+
/**
532
+
* Get course thumbnail.
533
+
*
534
+
* @since 1.0.0
535
+
*
536
+
* @param string $size size.
537
+
* @param boolean $url url.
538
+
*
539
+
* @return string
540
+
*/
541
+
function get_tutor_course_thumbnail( $size = 'post-thumbnail', $url = false ) {
542
+
$post_id = get_the_ID();
543
+
$size = apply_filters( 'tutor_course_thumbnail_size', $size, $post_id );
544
+
$post_thumbnail_id = (int) get_post_thumbnail_id( $post_id );
545
+
$placeholder_url = tutor()->url . 'assets/images/placeholder.svg';
546
+
$thumb_url = $post_thumbnail_id ? wp_get_attachment_image_url( $post_thumbnail_id, $size ) : $placeholder_url;
547
+
$thumb_url = apply_filters( 'tutor_course_thumb_url', $thumb_url, $post_id, $size, $post_thumbnail_id );
548
+
549
+
if ( $url ) {
550
+
return $thumb_url;
551
+
}
552
+
553
+
echo '<div class="tutor-course-thumbnail">
554
+
<img src="' . esc_url( $thumb_url ) . '" />
555
+
</div>';
556
+
}
557
+
}
558
+
559
+
if ( ! function_exists( 'get_tutor_course_thumbnail_src' ) ) {
560
+
/**
561
+
* Get the course/post thumbnail src.
562
+
*
563
+
* @since 1.0.0
564
+
* @since 2.2.0 $id param added to provide post id to access outside of post loop.
565
+
*
566
+
* @since 3.4.1 Attachment src fallback added to show placeholder image
567
+
*
568
+
* @param string $size size of thumb.
569
+
* @param int $id post id.
570
+
*
571
+
* @return string src of the post thumbnail | default placeholder
572
+
*/
573
+
function get_tutor_course_thumbnail_src( $size = 'post-thumbnail', $id = 0 ) {
574
+
$post_id = $id ? $id : get_the_ID();
575
+
$post_thumbnail_id = (int) get_post_thumbnail_id( $post_id );
576
+
$placeholder_url = tutor()->url . 'assets/images/placeholder.svg';
577
+
578
+
if ( $post_thumbnail_id ) {
579
+
$size = apply_filters( 'tutor_course_thumbnail_size', $size, $post_id );
580
+
$src = wp_get_attachment_image_url( $post_thumbnail_id, $size, false );
581
+
if ( ! $src ) {
582
+
$src = $placeholder_url;
583
+
}
584
+
} else {
585
+
$src = apply_filters( 'tutor_course_thumbnail_placeholder', $placeholder_url, $post_id );
586
+
}
587
+
588
+
$src = apply_filters( 'tutor_course_thumb_url', $src, $post_id, $size, $post_thumbnail_id );
589
+
590
+
return $src;
591
+
}
592
+
}
593
+
594
+
if ( ! function_exists( 'tutor_course_loop_meta' ) ) {
595
+
/**
596
+
* Course loop meta.
597
+
*
598
+
* @since 1.0.0
599
+
*
600
+
* @return void
601
+
*/
602
+
function tutor_course_loop_meta() {
603
+
ob_start();
604
+
tutor_load_template( 'loop.meta' );
605
+
$output = apply_filters( 'tutor_course_loop_meta', ob_get_clean() );
606
+
607
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
608
+
}
609
+
}
610
+
611
+
if ( ! function_exists( 'tutor_course_loop_author' ) ) {
612
+
/**
613
+
* Get course author name in loop
614
+
*
615
+
* @since 1.0.0
616
+
*
617
+
* @return void
618
+
*/
619
+
function tutor_course_loop_author() {
620
+
ob_start();
621
+
tutor_load_template( 'loop.course-author' );
622
+
$output = apply_filters( 'tutor_course_loop_author', ob_get_clean() );
623
+
624
+
echo $output; //phpcs:ignore -- data already escaped inside template file
625
+
}
626
+
}
627
+
628
+
if ( ! function_exists( 'tutor_course_loop_price' ) ) {
629
+
/**
630
+
* Course loop price.
631
+
*
632
+
* @since 1.0.0
633
+
*
634
+
* @return void
635
+
*/
636
+
function tutor_course_loop_price() {
637
+
638
+
ob_start();
639
+
640
+
$course_id = get_the_ID();
641
+
$can_continue = tutor_utils()->is_enrolled( $course_id ) || get_post_meta( $course_id, '_tutor_is_public_course', true ) == 'yes';
642
+
643
+
// Check for further access type like course content access settings.
644
+
if ( ! $can_continue ) {
645
+
$can_continue = tutor_utils()->has_user_course_content_access( get_current_user_id(), $course_id );
646
+
}
647
+
648
+
if ( $can_continue ) {
649
+
tutor_load_template( 'loop.course-continue' );
650
+
651
+
} elseif ( tutor_utils()->is_course_added_to_cart( $course_id ) ) {
652
+
tutor_load_template( 'loop.course-in-cart' );
653
+
654
+
} else {
655
+
$tutor_course_sell_by = apply_filters( 'tutor_course_sell_by', null );
656
+
657
+
if ( $tutor_course_sell_by && ( tutor_utils()->is_course_purchasable( $course_id ) || ! is_user_logged_in() ) ) {
658
+
tutor_load_template( 'loop.course-price-' . $tutor_course_sell_by );
659
+
} else {
660
+
tutor_load_template( 'loop.course-price' );
661
+
}
662
+
}
663
+
echo apply_filters( 'tutor_course_loop_price', ob_get_clean(), $course_id ); //phpcs:ignore -- already escaped inside template file
664
+
}
665
+
}
666
+
667
+
if ( ! function_exists( 'tutor_course_loop_rating' ) ) {
668
+
/**
669
+
* Get Course rating
670
+
*
671
+
* @since 1.0.0
672
+
* @since v1.4.5 updated.
673
+
*
674
+
* @return void
675
+
*/
676
+
function tutor_course_loop_rating() {
677
+
678
+
$disable = ! get_tutor_option( 'enable_course_review' );
679
+
if ( $disable ) {
680
+
return;
681
+
}
682
+
683
+
ob_start();
684
+
tutor_load_template( 'loop.rating' );
685
+
$output = apply_filters( 'tutor_course_loop_rating', ob_get_clean() );
686
+
687
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
688
+
}
689
+
}
690
+
691
+
/**
692
+
* @param bool $echo
693
+
*
694
+
* @return mixed|void
695
+
*
696
+
* Get add to cart form
697
+
*/
698
+
699
+
if ( ! function_exists( 'tutor_course_loop_add_to_cart' ) ) {
700
+
function tutor_course_loop_add_to_cart( $echo = true ) {
701
+
ob_start();
702
+
$tutor_course_sell_by = apply_filters( 'tutor_course_sell_by', null );
703
+
704
+
if ( $tutor_course_sell_by ) {
705
+
tutor_load_template( 'loop.add-to-cart-' . $tutor_course_sell_by );
706
+
}
707
+
708
+
$output = apply_filters( 'tutor_course_loop_add_to_cart_link', ob_get_clean() );
709
+
710
+
if ( $echo ) {
711
+
echo wp_kses_post( $output );
712
+
}
713
+
return $output;
714
+
}
715
+
}
716
+
717
+
if ( ! function_exists( 'tutor_course_price' ) ) {
718
+
function tutor_course_price() {
719
+
ob_start();
720
+
tutor_load_template( 'single.course.wc-price-html' );
721
+
$output = apply_filters( 'tutor_course_price', ob_get_clean() );
722
+
723
+
echo $output; //phpcs:ignore -- data already escaped inside template file
724
+
}
725
+
}
726
+
727
+
/**
728
+
* @param int $post_id
729
+
*
730
+
* echo the excerpt of TUTOR post type
731
+
*
732
+
* @since: v.1.0.0
733
+
*/
734
+
if ( ! function_exists( 'tutor_the_excerpt' ) ) {
735
+
function tutor_the_excerpt( $post_id = 0 ) {
736
+
if ( ! $post_id ) {
737
+
$post_id = get_the_ID();
738
+
}
739
+
echo esc_textarea( tutor_get_the_excerpt( $post_id ) );
740
+
}
741
+
}
742
+
/**
743
+
* @param int $post_id
744
+
*
745
+
* @return mixed
746
+
*
747
+
* Return excerpt of TUTOR post type
748
+
*
749
+
* @since: v.1.0.0
750
+
*/
751
+
if ( ! function_exists( 'tutor_get_the_excerpt' ) ) {
752
+
function tutor_get_the_excerpt( $post_id = 0 ) {
753
+
if ( ! $post_id ) {
754
+
$post_id = get_the_ID();
755
+
}
756
+
757
+
$get_post = get_post( $post_id );
758
+
return apply_filters( 'tutor_get_the_excerpt', $get_post->post_excerpt );
759
+
}
760
+
}
761
+
762
+
/**
763
+
* @return mixed
764
+
*
765
+
* return course author
766
+
*
767
+
* @since: v.1.0.0
768
+
*/
769
+
770
+
if ( ! function_exists( 'get_tutor_course_author' ) ) {
771
+
function get_tutor_course_author() {
772
+
global $post;
773
+
return apply_filters( 'get_tutor_course_author', get_the_author_meta( 'display_name', $post->post_author ) );
774
+
}
775
+
}
776
+
777
+
function get_tutor_course_author_id() {
778
+
global $post;
779
+
return (int) $post->post_author;
780
+
}
781
+
782
+
/**
783
+
* @param int $course_id
784
+
*
785
+
* @return mixed
786
+
* Course benefits return array
787
+
*
788
+
* @since: v.1.0.0
789
+
*/
790
+
791
+
if ( ! function_exists( 'tutor_course_benefits' ) ) {
792
+
function tutor_course_benefits( $course_id = 0 ) {
793
+
if ( ! $course_id ) {
794
+
$course_id = get_the_ID();
795
+
}
796
+
$benefits = get_post_meta( $course_id, '_tutor_course_benefits', true );
797
+
798
+
$benefits_array = array();
799
+
if ( $benefits ) {
800
+
$benefits_array = explode( "\n", $benefits );
801
+
}
802
+
803
+
$array = array_filter( array_map( 'trim', $benefits_array ) );
804
+
805
+
return apply_filters( 'tutor_course/single/benefits', $array, $course_id );
806
+
}
807
+
}
808
+
809
+
/**
810
+
* @param bool $echo
811
+
*
812
+
* @return mixed
813
+
*
814
+
* Course single page benefits
815
+
*
816
+
* @since: v.1.0.0
817
+
*/
818
+
819
+
if ( ! function_exists( 'tutor_course_benefits_html' ) ) {
820
+
function tutor_course_benefits_html( $echo = true ) {
821
+
ob_start();
822
+
tutor_load_template( 'single.course.course-benefits' );
823
+
$output = apply_filters( 'tutor_course/single/benefits_html', ob_get_clean() );
824
+
825
+
if ( $echo ) {
826
+
echo wp_kses_post( $output );
827
+
}
828
+
return $output;
829
+
}
830
+
}
831
+
832
+
/**
833
+
* @param bool $echo
834
+
*
835
+
* @return mixed|void
836
+
*
837
+
* Return Topics HTML
838
+
*
839
+
* @since: v.1.0.0
840
+
*/
841
+
if ( ! function_exists( 'tutor_course_topics' ) ) {
842
+
function tutor_course_topics( $echo = true ) {
843
+
ob_start();
844
+
tutor_load_template( 'single.course.course-topics' );
845
+
$output = apply_filters( 'tutor_course/single/topics', ob_get_clean() );
846
+
wp_reset_postdata();
847
+
848
+
if ( $echo ) {
849
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
850
+
}
851
+
852
+
return $output;
853
+
}
854
+
}
855
+
856
+
/**
857
+
* @param int $course_id
858
+
*
859
+
* @return mixed|void
860
+
*
861
+
* return course requirements in array
862
+
*
863
+
* @since: v.1.0.0
864
+
*/
865
+
if ( ! function_exists( 'tutor_course_requirements' ) ) {
866
+
function tutor_course_requirements( $course_id = 0 ) {
867
+
if ( ! $course_id ) {
868
+
$course_id = get_the_ID();
869
+
}
870
+
$requirements = get_post_meta( $course_id, '_tutor_course_requirements', true );
871
+
872
+
$requirements_array = array();
873
+
if ( $requirements ) {
874
+
$requirements_array = explode( "\n", $requirements );
875
+
}
876
+
877
+
$array = array_filter( array_map( 'trim', $requirements_array ) );
878
+
return apply_filters( 'tutor_course/single/requirements', $array, $course_id );
879
+
}
880
+
}
881
+
882
+
/**
883
+
* @param bool $echo
884
+
*
885
+
* @return mixed|void
886
+
*
887
+
* Return course requirements in course single page
888
+
*
889
+
* @since: v.1.0.0
890
+
*/
891
+
if ( ! function_exists( 'tutor_course_requirements_html' ) ) {
892
+
function tutor_course_requirements_html( $echo = true ) {
893
+
ob_start();
894
+
tutor_course_material_includes_html();
895
+
tutor_load_template( 'single.course.course-requirements' );
896
+
$output = apply_filters( 'tutor_course/single/requirements_html', ob_get_clean() );
897
+
898
+
if ( $echo ) {
899
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
900
+
}
901
+
return $output;
902
+
}
903
+
}
904
+
905
+
906
+
/**
907
+
* @param int $course_id
908
+
*
909
+
* @return mixed|void
910
+
*
911
+
* Return target audience in course single page
912
+
*
913
+
* @since: v.1.0.0
914
+
*/
915
+
if ( ! function_exists( 'tutor_course_target_audience' ) ) {
916
+
function tutor_course_target_audience( $course_id = 0 ) {
917
+
if ( ! $course_id ) {
918
+
$course_id = get_the_ID();
919
+
}
920
+
$target_audience = get_post_meta( $course_id, '_tutor_course_target_audience', true );
921
+
922
+
$target_audience_array = array();
923
+
if ( $target_audience ) {
924
+
$target_audience_array = explode( "\n", $target_audience );
925
+
}
926
+
927
+
$array = array_filter( array_map( 'trim', $target_audience_array ) );
928
+
return apply_filters( 'tutor_course/single/target_audience', $array, $course_id );
929
+
}
930
+
}
931
+
932
+
/**
933
+
* @param bool $echo
934
+
*
935
+
* @return mixed|void
936
+
*
937
+
* Return target audience in course single page
938
+
*
939
+
* @since: v.1.0.0
940
+
*/
941
+
if ( ! function_exists( 'tutor_course_target_audience_html' ) ) {
942
+
function tutor_course_target_audience_html( $echo = true ) {
943
+
ob_start();
944
+
tutor_load_template( 'single.course.course-target-audience' );
945
+
$output = apply_filters( 'tutor_course/single/audience_html', ob_get_clean() );
946
+
947
+
if ( $echo ) {
948
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
949
+
}
950
+
return $output;
951
+
}
952
+
}
953
+
954
+
955
+
if ( ! function_exists( 'tutor_course_material_includes' ) ) {
956
+
function tutor_course_material_includes( $course_id = 0 ) {
957
+
if ( ! $course_id ) {
958
+
$course_id = get_the_ID();
959
+
}
960
+
$target_audience = get_post_meta( $course_id, '_tutor_course_material_includes', true );
961
+
962
+
$target_audience_array = array();
963
+
if ( $target_audience ) {
964
+
$target_audience_array = explode( "\n", $target_audience );
965
+
}
966
+
967
+
$array = array_filter( array_map( 'trim', $target_audience_array ) );
968
+
return apply_filters( 'tutor_course/single/material_includes', $array, $course_id );
969
+
}
970
+
}
971
+
972
+
if ( ! function_exists( 'tutor_course_material_includes_html' ) ) {
973
+
function tutor_course_material_includes_html( $echo = true ) {
974
+
ob_start();
975
+
tutor_load_template( 'single.course.material-includes' );
976
+
$output = apply_filters( 'tutor_course/single/material_includes', ob_get_clean() );
977
+
978
+
if ( $echo ) {
979
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
980
+
}
981
+
return $output;
982
+
}
983
+
}
984
+
985
+
// tutor_course_material_includes_html
986
+
987
+
988
+
if ( ! function_exists( 'tutor_course_instructors_html' ) ) {
989
+
function tutor_course_instructors_html( $echo = true ) {
990
+
$display_course_instructors = tutor_utils()->get_option( 'display_course_instructors' );
991
+
if ( ! $display_course_instructors ) {
992
+
return null;
993
+
}
994
+
995
+
ob_start();
996
+
tutor_load_template( 'single.course.instructors' );
997
+
$output = apply_filters( 'tutor_course/single/instructors_html', ob_get_clean() );
998
+
999
+
if ( $echo ) {
1000
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1001
+
}
1002
+
return $output;
1003
+
}
1004
+
}
1005
+
1006
+
if ( ! function_exists( 'tutor_course_target_reviews_html' ) ) {
1007
+
function tutor_course_target_reviews_html( $echo = true ) {
1008
+
ob_start();
1009
+
tutor_load_template( 'single.course.reviews' );
1010
+
1011
+
$output = apply_filters( 'tutor_course/single/reviews_html', ob_get_clean() );
1012
+
1013
+
if ( $echo ) {
1014
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1015
+
}
1016
+
return $output;
1017
+
}
1018
+
}
1019
+
1020
+
/**
1021
+
* @param bool $echo
1022
+
*
1023
+
* @return mixed
1024
+
*
1025
+
* Course single page main content / description
1026
+
*
1027
+
* @since: v.1.0.0
1028
+
*/
1029
+
if ( ! function_exists( 'tutor_course_content' ) ) {
1030
+
function tutor_course_content( $echo = true ) {
1031
+
ob_start();
1032
+
tutor_load_template( 'single.course.course-content' );
1033
+
$output = apply_filters( 'tutor_course/single/content', ob_get_clean() );
1034
+
1035
+
if ( $echo ) {
1036
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1037
+
}
1038
+
1039
+
return $output;
1040
+
}
1041
+
}
1042
+
1043
+
/**
1044
+
* Course single page lead info
1045
+
*
1046
+
* @since: v.1.0.0
1047
+
*/
1048
+
if ( ! function_exists( 'tutor_course_lead_info' ) ) {
1049
+
function tutor_course_lead_info( $echo = true ) {
1050
+
ob_start();
1051
+
1052
+
// exit('failed');
1053
+
1054
+
$course_id = get_the_ID();
1055
+
$course_post_type = tutor()->course_post_type;
1056
+
$queryCourse = new WP_Query(
1057
+
apply_filters(
1058
+
'tutor_course_lead_info_args',
1059
+
array(
1060
+
'p' => $course_id,
1061
+
'post_type' => $course_post_type,
1062
+
)
1063
+
)
1064
+
);
1065
+
1066
+
if ( $queryCourse->have_posts() ) {
1067
+
while ( $queryCourse->have_posts() ) {
1068
+
$queryCourse->the_post();
1069
+
tutor_load_template( 'single.course.lead-info' );
1070
+
}
1071
+
wp_reset_postdata();
1072
+
}
1073
+
1074
+
$output = apply_filters( 'tutor_course/single/lead_info', ob_get_clean() );
1075
+
1076
+
if ( $echo ) {
1077
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1078
+
}
1079
+
return $output;
1080
+
}
1081
+
}
1082
+
1083
+
/**
1084
+
* @param bool $echo
1085
+
*
1086
+
* @return mixed|void
1087
+
*/
1088
+
1089
+
if ( ! function_exists( 'tutor_course_enrolled_lead_info' ) ) {
1090
+
function tutor_course_enrolled_lead_info( $echo = true ) {
1091
+
ob_start();
1092
+
1093
+
$course_id = get_the_ID();
1094
+
$course_post_type = tutor()->course_post_type;
1095
+
$queryCourse = new WP_Query(
1096
+
array(
1097
+
'p' => $course_id,
1098
+
'post_type' => $course_post_type,
1099
+
)
1100
+
);
1101
+
1102
+
if ( $queryCourse->have_posts() ) {
1103
+
while ( $queryCourse->have_posts() ) {
1104
+
$queryCourse->the_post();
1105
+
tutor_load_template( 'single.course.lead-info' );
1106
+
}
1107
+
wp_reset_postdata();
1108
+
}
1109
+
1110
+
$output = apply_filters( 'tutor_course/single/enrolled/lead_info', ob_get_clean() );
1111
+
1112
+
if ( $echo ) {
1113
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1114
+
}
1115
+
1116
+
return $output;
1117
+
}
1118
+
}
1119
+
1120
+
if ( ! function_exists( 'tutor_lesson_lead_info' ) ) {
1121
+
function tutor_lesson_lead_info( $lesson_id = 0, $echo = true ) {
1122
+
if ( ! $lesson_id ) {
1123
+
$lesson_id = get_the_ID();
1124
+
}
1125
+
1126
+
ob_start();
1127
+
$course_id = tutor_utils()->get_course_id_by( 'lesson', $lesson_id );
1128
+
$course_post_type = tutor()->course_post_type;
1129
+
$queryCourse = new WP_Query(
1130
+
array(
1131
+
'p' => $course_id,
1132
+
'post_type' => $course_post_type,
1133
+
)
1134
+
);
1135
+
1136
+
if ( $queryCourse->have_posts() ) {
1137
+
while ( $queryCourse->have_posts() ) {
1138
+
$queryCourse->the_post();
1139
+
tutor_load_template( 'single.course.lead-info' );
1140
+
}
1141
+
wp_reset_postdata();
1142
+
}
1143
+
$output = apply_filters( 'tutor_course/single/enrolled/lead_info', ob_get_clean() );
1144
+
1145
+
if ( $echo ) {
1146
+
echo $output; //phpcs:ignore -- already escaped inside template file
1147
+
}
1148
+
1149
+
return $output;
1150
+
1151
+
}
1152
+
}
1153
+
1154
+
if ( ! function_exists( 'tutor_course_video' ) ) {
1155
+
function tutor_course_video( $echo = true ) {
1156
+
ob_start();
1157
+
tutor_load_template( 'single.video.video' );
1158
+
$output = apply_filters( 'tutor_course/single/video', ob_get_clean() );
1159
+
1160
+
if ( $echo ) {
1161
+
echo $output; //phpcs:ignore -- already escaped inside template file
1162
+
}
1163
+
return $output;
1164
+
}
1165
+
}
1166
+
1167
+
if ( ! function_exists( 'tutor_lesson_video' ) ) {
1168
+
function tutor_lesson_video( $echo = true ) {
1169
+
ob_start();
1170
+
tutor_load_template( 'single.video.video' );
1171
+
$output = apply_filters( 'tutor_lesson/single/video', ob_get_clean() );
1172
+
1173
+
if ( $echo ) {
1174
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1175
+
}
1176
+
return $output;
1177
+
}
1178
+
}
1179
+
1180
+
/**
1181
+
*
1182
+
* Get all lessons attachments
1183
+
*
1184
+
* @param bool $echo
1185
+
*
1186
+
* @return mixed
1187
+
*
1188
+
* @since v.1.0.0
1189
+
*/
1190
+
if ( ! function_exists( 'get_tutor_posts_attachments' ) ) {
1191
+
function get_tutor_posts_attachments( $echo = true ) {
1192
+
ob_start();
1193
+
tutor_load_template( 'global.attachments' );
1194
+
$output = apply_filters( 'tutor_lesson/single/attachments', ob_get_clean() );
1195
+
1196
+
if ( $echo ) {
1197
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1198
+
}
1199
+
return $output;
1200
+
}
1201
+
}
1202
+
1203
+
/**
1204
+
* @param bool $echo
1205
+
*
1206
+
* @return mixed
1207
+
*
1208
+
* Render Lesson Main Content
1209
+
* @since v.1.0.0
1210
+
*/
1211
+
if ( ! function_exists( 'tutor_lesson_content' ) ) {
1212
+
function tutor_lesson_content( $echo = true ) {
1213
+
ob_start();
1214
+
tutor_load_template( 'single.lesson.content' );
1215
+
$output = apply_filters( 'tutor_lesson/single/content', ob_get_clean() );
1216
+
1217
+
if ( $echo ) {
1218
+
echo $output; //phpcs:ignore -- already escaped inside template file
1219
+
}
1220
+
1221
+
return $output;
1222
+
}
1223
+
}
1224
+
1225
+
if ( ! function_exists( 'tutor_lesson_mark_complete_html' ) ) {
1226
+
function tutor_lesson_mark_complete_html( $echo = true ) {
1227
+
ob_start();
1228
+
tutor_load_template( 'single.lesson.complete_form' );
1229
+
$output = apply_filters( 'tutor_lesson/single/complete_form', ob_get_clean() );
1230
+
1231
+
if ( $echo ) {
1232
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1233
+
}
1234
+
1235
+
return $output;
1236
+
}
1237
+
}
1238
+
1239
+
function tutor_course_question_and_answer( $echo = true ) {
1240
+
ob_start();
1241
+
tutor_load_template( 'single.course.enrolled.question_and_answer' );
1242
+
$output = apply_filters( 'tutor_course/single/question_and_answer', ob_get_clean() );
1243
+
1244
+
if ( $echo ) {
1245
+
echo $output; //phpcs:ignore -- already escaped inside template file
1246
+
}
1247
+
1248
+
return $output;
1249
+
}
1250
+
1251
+
/**
1252
+
* @param bool $echo
1253
+
*
1254
+
* @return mixed
1255
+
*
1256
+
* @show progress bar about course complete
1257
+
*
1258
+
* @since v.2.0.0
1259
+
*
1260
+
* Course Curriculum added
1261
+
*
1262
+
* @since v2.0.5
1263
+
*/
1264
+
1265
+
function tutor_course_info_tab() {
1266
+
tutor_course_content();
1267
+
tutor_course_benefits_html();
1268
+
tutor_course_topics();
1269
+
}
1270
+
1271
+
1272
+
function tutor_course_announcements( $echo = true ) {
1273
+
ob_start();
1274
+
tutor_load_template( 'single.course.enrolled.announcements' );
1275
+
$output = apply_filters( 'tutor_course/single/announcements', ob_get_clean() );
1276
+
1277
+
if ( $echo ) {
1278
+
echo $output; //phpcs:ignore -- already escaped inside template file
1279
+
}
1280
+
1281
+
return $output;
1282
+
}
1283
+
1284
+
function tutor_single_quiz_top( $echo = true ) {
1285
+
ob_start();
1286
+
tutor_load_template( 'single.quiz.top' );
1287
+
$output = apply_filters( 'tutor_single_quiz/top', ob_get_clean() );
1288
+
1289
+
if ( $echo ) {
1290
+
echo $output; //phpcs:ignore -- already escaped inside template file
1291
+
}
1292
+
return $output;
1293
+
}
1294
+
1295
+
function tutor_single_quiz_body( $echo = true ) {
1296
+
ob_start();
1297
+
tutor_load_template( 'single.quiz.body' );
1298
+
$output = apply_filters( 'tutor_single_quiz/body', ob_get_clean() );
1299
+
1300
+
if ( $echo ) {
1301
+
echo $output; //phpcs:ignore -- data already escaped inside template file
1302
+
}
1303
+
return $output;
1304
+
}
1305
+
1306
+
/**
1307
+
* @param bool $echo
1308
+
*
1309
+
* @return mixed|void
1310
+
*
1311
+
* Get the quiz description
1312
+
*/
1313
+
function tutor_single_quiz_content( $echo = true ) {
1314
+
ob_start();
1315
+
tutor_load_template( 'single.quiz.content' );
1316
+
$output = apply_filters( 'tutor_single_quiz/content', ob_get_clean() );
1317
+
1318
+
if ( $echo ) {
1319
+
echo $output; //phpcs:ignore -- already escaped inside template file
1320
+
}
1321
+
return $output;
1322
+
}
1323
+
1324
+
1325
+
function tutor_single_quiz_no_course_belongs( $echo = true ) {
1326
+
ob_start();
1327
+
tutor_load_template( 'single.quiz.no_course_belongs' );
1328
+
$output = apply_filters( 'tutor_single_quiz/no_course_belongs', ob_get_clean() );
1329
+
1330
+
if ( $echo ) {
1331
+
echo $output; //phpcs:ignore -- already escaped inside template file
1332
+
}
1333
+
return $output;
1334
+
}
1335
+
1336
+
function single_quiz_contents( $echo = true ) {
1337
+
1338
+
ob_start();
1339
+
tutor_load_template( 'single.quiz.single_quiz_contents' );
1340
+
$output = apply_filters( 'tutor_single_quiz/single_quiz_contents', ob_get_clean() );
1341
+
1342
+
if ( $echo ) {
1343
+
echo $output; //phpcs:ignore -- already escaped inside template file
1344
+
}
1345
+
return $output;
1346
+
}
1347
+
1348
+
function get_tutor_course_level( $course_id = 0 ) {
1349
+
if ( ! $course_id ) {
1350
+
$course_id = get_the_ID();
1351
+
}
1352
+
if ( ! $course_id ) {
1353
+
return '';
1354
+
}
1355
+
1356
+
$course_level = get_post_meta( $course_id, '_tutor_course_level', true );
1357
+
1358
+
if ( $course_level ) {
1359
+
return tutor_utils()->course_levels( $course_level );
1360
+
}
1361
+
return false;
1362
+
}
1363
+
1364
+
if ( ! function_exists( 'get_tutor_course_duration_context' ) ) {
1365
+
function get_tutor_course_duration_context( $course_id = 0, $short_form = false ) {
1366
+
if ( ! $course_id ) {
1367
+
$course_id = get_the_ID();
1368
+
}
1369
+
if ( ! $course_id ) {
1370
+
return '';
1371
+
}
1372
+
$duration = get_post_meta( $course_id, '_course_duration', true );
1373
+
$durationHours = tutor_utils()->avalue_dot( 'hours', $duration );
1374
+
$durationMinutes = tutor_utils()->avalue_dot( 'minutes', $duration );
1375
+
$durationSeconds = tutor_utils()->avalue_dot( 'seconds', $duration );
1376
+
1377
+
$hour_format = $short_form ? __( 'h', 'tutor' ) : ' ' . ( $durationHours > 1 ? __( 'hours', 'tutor' ) : __( 'hour', 'tutor' ) );
1378
+
$minute_format = $short_form ? __( 'm', 'tutor' ) : ' ' . ( $durationMinutes > 1 ? __( 'minutes', 'tutor' ) : __( 'minute', 'tutor' ) );
1379
+
$second_format = $short_form ? __( 's', 'tutor' ) : ' ' . ( $durationSeconds > 1 ? __( 'seconds', 'tutor' ) : __( 'second', 'tutor' ) );
1380
+
1381
+
if ( $duration ) {
1382
+
$output = '';
1383
+
if ( $durationHours > 0 ) {
1384
+
$output .= '<span class="tutor-meta-level">' . ' ' . $durationHours . '</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4">' . $hour_format . '</span>';
1385
+
}
1386
+
1387
+
if ( $durationMinutes > 0 ) {
1388
+
$output .= '<span class="tutor-meta-level">' . ' ' . $durationMinutes . '</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4">' . $minute_format . '</span>';
1389
+
}
1390
+
1391
+
if ( ! $durationHours && ! $durationMinutes && $durationSeconds > 0 ) {
1392
+
$output .= '<span class="tutor-meta-level">' . ' ' . $durationSeconds . '</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4">' . $second_format . '</span>';
1393
+
}
1394
+
1395
+
return $output;
1396
+
}
1397
+
1398
+
return false;
1399
+
}
1400
+
}
1401
+
if ( ! function_exists( 'get_tutor_course_categories' ) ) {
1402
+
function get_tutor_course_categories( $course_id = 0 ) {
1403
+
if ( ! $course_id ) {
1404
+
$course_id = get_the_ID();
1405
+
}
1406
+
$terms = get_the_terms( $course_id, CourseModel::COURSE_CATEGORY );
1407
+
1408
+
return $terms;
1409
+
}
1410
+
}
1411
+
1412
+
/**
1413
+
* @param int $course_id
1414
+
*
1415
+
* @return array|false|WP_Error
1416
+
*
1417
+
* Get course tags
1418
+
*/
1419
+
1420
+
if ( ! function_exists( 'get_tutor_course_tags' ) ) {
1421
+
function get_tutor_course_tags( $course_id = 0 ) {
1422
+
if ( ! $course_id ) {
1423
+
$course_id = get_the_ID();
1424
+
}
1425
+
$terms = get_the_terms( $course_id, CourseModel::COURSE_TAG );
1426
+
1427
+
return $terms;
1428
+
}
1429
+
}
1430
+
1431
+
/**
1432
+
* @param bool $echo
1433
+
*
1434
+
* @return mixed|void
1435
+
*
1436
+
* Template for course tags html
1437
+
*/
1438
+
1439
+
if ( ! function_exists( 'tutor_course_tags_html' ) ) {
1440
+
function tutor_course_tags_html( $echo = true ) {
1441
+
ob_start();
1442
+
tutor_load_template( 'single.course.tags' );
1443
+
$output = apply_filters( 'tutor_course/single/tags_html', ob_get_clean() );
1444
+
1445
+
if ( $echo ) {
1446
+
echo tutor_kses_html( $output );
1447
+
}
1448
+
1449
+
return $output;
1450
+
}
1451
+
}
1452
+
1453
+
/**
1454
+
* @param bool $echo
1455
+
*
1456
+
* @return mixed
1457
+
*
1458
+
* Get Q&A in lesson sidebar
1459
+
*/
1460
+
1461
+
if ( ! function_exists( 'tutor_lesson_sidebar_question_and_answer' ) ) {
1462
+
function tutor_lesson_sidebar_question_and_answer( $echo = true ) {
1463
+
ob_start();
1464
+
tutor_load_template( 'single.lesson.sidebar_question_and_answer' );
1465
+
$output = apply_filters( 'tutor_lesson/single/sidebar_question_and_answer', ob_get_clean() );
1466
+
1467
+
if ( $echo ) {
1468
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1469
+
}
1470
+
1471
+
return $output;
1472
+
}
1473
+
}
1474
+
1475
+
/**
1476
+
* @param bool $echo
1477
+
*
1478
+
* @return mixed
1479
+
*
1480
+
* Get Assignment content
1481
+
*
1482
+
* @since v.1.3.3
1483
+
*/
1484
+
1485
+
if ( ! function_exists( 'tutor_assignment_content' ) ) {
1486
+
function tutor_assignment_content( $echo = true ) {
1487
+
$output = apply_filters( 'tutor_assignment/single/content', '' );
1488
+
1489
+
if ( $echo ) {
1490
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1491
+
}
1492
+
1493
+
return $output;
1494
+
}
1495
+
}
1496
+
1497
+
/**
1498
+
* @param string $msg
1499
+
* @param string $title
1500
+
* @param string $type
1501
+
*
1502
+
* @return string
1503
+
*
1504
+
* @since v.1.4.0
1505
+
*/
1506
+
1507
+
if ( ! function_exists( 'get_tnotice' ) ) {
1508
+
function get_tnotice( $msg = '', $title = 'Success', $type = 'success' ) {
1509
+
1510
+
$output = '<div class="tnotice tnotice--' . $type . '">
1511
+
<div class="tnotice__icon">¡</div>
1512
+
<div class="tnotice__content">';
1513
+
1514
+
if ( $title ) {
1515
+
$output .= '<p class="tnotice__type">' . $title . '</p>';
1516
+
}
1517
+
$output .= '<p class="tnotice__message">' . $msg . '</p>
1518
+
</div>
1519
+
</div>';
1520
+
1521
+
return $output;
1522
+
}
1523
+
}
1524
+
1525
+
/**
1526
+
* @param int $course_content_id
1527
+
* @param bool $echo
1528
+
*
1529
+
* @return mixed|void
1530
+
*
1531
+
* Next Previous Pagination
1532
+
*
1533
+
* @since v.1.4.7
1534
+
*/
1535
+
1536
+
function tutor_next_previous_pagination( $course_content_id = 0, $echo = true ) {
1537
+
$content_id = tutor_utils()->get_post_id( $course_content_id );
1538
+
$contents = tutor_utils()->get_course_prev_next_contents_by_id( $content_id );
1539
+
$previous_id = $contents->previous_id;
1540
+
$next_id = $contents->next_id;
1541
+
1542
+
ob_start();
1543
+
do_action( 'tutor_lesson_next_previous_pagination_before' );
1544
+
tutor_load_template( 'single.next-previous-pagination', compact( 'previous_id', 'next_id' ) );
1545
+
do_action( 'tutor_lesson_next_previous_pagination_after' );
1546
+
$output = apply_filters( 'tutor/single/next_previous_pagination', ob_get_clean() );
1547
+
1548
+
if ( $echo ) {
1549
+
echo tutor_kses_html( $output ); //phpcs:ignore -- already escaped inside template file
1550
+
}
1551
+
1552
+
return $output;
1553
+
}
1554
+
1555
+
/**
1556
+
* Load custom template from any given file
1557
+
*
1558
+
* Pass parameter as wish
1559
+
*
1560
+
* @since 1.9.8
1561
+
*/
1562
+
if ( ! function_exists( 'tutor_load_template_from_custom_path' ) ) {
1563
+
function tutor_load_template_from_custom_path( $template = null, $data = array(), $once = true ) {
1564
+
do_action( 'tutor_load_template_from_custom_path_before', $template, $data );
1565
+
if ( file_exists( $template ) ) {
1566
+
if ( $once ) {
1567
+
include_once $template;
1568
+
} else {
1569
+
include $template;
1570
+
}
1571
+
}
1572
+
do_action( 'tutor_load_template_from_custom_path_after', $template, $data );
1573
+
}
1574
+
}
1575
+
1576
+
/**
1577
+
* Load enrolled course progress template
1578
+
*
1579
+
* This template will be used on only dashboard enrolled course page
1580
+
*
1581
+
* @since v2.0.0
1582
+
*/
1583
+
if ( ! function_exists( 'tutor_enrolled_course_progress' ) ) {
1584
+
function tutor_enrolled_course_progress() {
1585
+
global $wp_query;
1586
+
$query_vars = $wp_query->query_vars;
1587
+
if ( isset( $query_vars['tutor_dashboard_page'] ) && 'enrolled-courses' === $query_vars['tutor_dashboard_page'] ) {
1588
+
tutor_load_template_from_custom_path( tutor()->path . 'templates/loop/enrolled-course-progress.php', '', false );
1589
+
}
1590
+
}
1591
+
}
1592
+
1593
+
if ( ! function_exists( 'tutor_permission_denied_template' ) ) {
1594
+
/**
1595
+
* Load permission denied template
1596
+
*
1597
+
* It will load permission denied template & return so not code
1598
+
* after this will execute
1599
+
*
1600
+
* @since 2.2.0
1601
+
*
1602
+
* @param integer $post_id post id if 0 then current post id will be used.
1603
+
*
1604
+
* @return void
1605
+
*/
1606
+
function tutor_permission_denied_template( int $post_id = 0 ) {
1607
+
if ( ! $post_id ) {
1608
+
$post_id = get_the_ID();
1609
+
}
1610
+
1611
+
$args = array(
1612
+
'headline' => __( 'Permission Denied', 'tutor' ),
1613
+
'message' => __( 'You don\'t have the right to edit this course', 'tutor' ),
1614
+
'description' => __( 'Please make sure you are logged in to correct account', 'tutor' ),
1615
+
'button' => array(
1616
+
'url' => get_permalink( $post_id ),
1617
+
'text' => __( 'View Course', 'tutor' ),
1618
+
),
1619
+
);
1620
+
1621
+
tutor_load_template( 'permission-denied', $args );
1622
+
return;
1623
+
}
1624
+
}
1625
+