PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.1
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / templates / class-lp-template-course.php

class-lp-template-course.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.1, at inc/templates/class-lp-template-course.php

1,164 lines 27.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class LP_Course_Template
5 *
6 * Groups templates related course and items
7 *
8 * @since 3.x.x
9 */
10 class LP_Template_Course extends LP_Abstract_Template {
11
12 /**
13 * @var LP_Course
14 */
15 public $course = null;
16
17 /**
18 * LP_Template_Course constructor.
19 */
20 public function __construct() {
21 parent::__construct();
22
23 add_action( 'the_post', array( $this, 'get_course' ), 1000 );
24 }
25
26 public function get_course() {
27 // global $post;
28
29 $this->course = learn_press_get_course();
30 }
31
32 public function course_sidebar_preview() {
33 learn_press_get_template( 'single-course/sidebar/preview' );
34 }
35
36 public function course_buttons() {
37 learn_press_get_template( 'single-course/buttons' );
38 }
39
40 public function course_graduation() {
41 $user = learn_press_get_current_user();
42 $course = learn_press_get_course();
43
44 if ( ! $user || ! $course ) {
45 return;
46 }
47
48 if ( ! $user->has_finished_course( $course->get_id() ) ) {
49 return;
50 }
51
52 $graduation = $user->get_course_grade( $course->get_id() );
53
54 learn_press_get_template( 'single-course/graduation', array( 'graduation' => $graduation ) );
55 }
56
57 /**
58 * Show button retry course
59 *
60 * @throws Exception
61 */
62 public function button_retry() {
63 $user = learn_press_get_current_user();
64 $course = learn_press_get_course();
65
66 if ( ! $user || ! $course ) {
67 return;
68 }
69
70 $can_retake_times = $user->can_retry_course( $course->get_id() );
71
72 // Course has no items
73 if ( empty( $course->count_items() ) ) {
74 return;
75 }
76
77 if ( $can_retake_times ) {
78 learn_press_get_template(
79 'single-course/buttons/retry',
80 array( 'can_retake_times' => $can_retake_times )
81 );
82 }
83 }
84
85 public function course_media_preview() {
86 $course = learn_press_get_course();
87
88 echo wp_kses_post( $course->get_image() );
89 }
90
91 /**
92 * @param LP_Quiz $item
93 */
94 public function quiz_meta_questions( $item ) {
95 $count = $item->count_questions();
96 echo '<span class="item-meta count-questions">' . sprintf(
97 $count ? _n(
98 '%d question',
99 '%d questions',
100 $count,
101 'learnpress'
102 ) : __(
103 '%d question',
104 'learnpress'
105 ),
106 $count
107 ) . '</span>';
108 }
109
110 /**
111 * @param LP_Quiz|LP_Lesson $item
112 */
113 public function item_meta_duration( $item ) {
114 $duration = learn_press_get_post_translated_duration( $item->get_id(), false );
115
116 if ( $duration ) {
117 echo '<span class="item-meta duration">' . $duration . '</span>';
118 }
119 }
120
121 /**
122 * @var LP_Course_Item $item
123 */
124 public function quiz_meta_final( $item ) {
125 $course = $item->get_course();
126
127 if ( ! $course || ! $course->is_final_quiz( $item->get_id() ) ) {
128 return;
129 }
130
131 echo '<span class="item-meta final-quiz">' . esc_html__( 'Final', 'learnpress' ) . '</span>';
132 }
133
134 public function course_button() {
135 echo '[COURSE BUTTON]';
136 }
137
138 public function course_title() {
139 echo '[COURSE TITLE]';
140 }
141
142 public function courses_top_bar() {
143 learn_press_get_template( 'courses-top-bar' );
144 }
145
146 public function course_pricing() {
147 $can_show = true;
148 $course = learn_press_get_course();
149 $user = learn_press_get_current_user();
150 $price_html = '';
151
152 try {
153 if ( $user && $user->has_enrolled_course( get_the_ID() ) ) {
154 throw new Exception( 'User has enrolled course' );
155 }
156
157 $price_html = $course->get_course_price_html();
158 } catch ( Throwable $e ) {
159 $can_show = false;
160 }
161
162 $can_show = apply_filters( 'learnpress/course/template/price/can-show', $can_show, $user, $course );
163
164 if ( ! $can_show ) {
165 return;
166 }
167
168 learn_press_get_template( 'single-course/price', compact( 'course', 'user', 'price_html' ) );
169 }
170
171 /**
172 * Template purchase course button
173 *
174 * @editor tungnx
175 * @modify 4.1.3.1
176 * @version 4.0.1
177 * @throws Exception
178 */
179 public function course_purchase_button() {
180 $can_show = true;
181 $course = learn_press_get_course();
182 $user = learn_press_get_current_user();
183
184 try {
185 if ( ! $user || ! $course ) {
186 throw new Exception( 'User or Course is not exists' );
187 }
188
189 if ( ! $user->can_purchase_course( $course->get_id() ) ) {
190 throw new Exception( 'You can not purchase course' );
191 }
192 } catch ( Throwable $e ) {
193 $can_show = false;
194 }
195
196 $can_show = apply_filters( 'learnpress/course/template/button-purchase/can-show', $can_show, $user, $course );
197
198 if ( ! $can_show ) {
199 return;
200 }
201
202 $args_load_tmpl = array(
203 'template_name' => 'single-course/buttons/purchase.php',
204 'template_path' => '',
205 'default_path' => '',
206 );
207
208 $args_load_tmpl = apply_filters( 'learn-press/tmpl-button-purchase-course', $args_load_tmpl, $course );
209
210 learn_press_get_template(
211 $args_load_tmpl['template_name'],
212 array(
213 'user' => $user,
214 'course' => $course,
215 ),
216 $args_load_tmpl['template_path'],
217 $args_load_tmpl['default_path']
218 );
219 }
220
221 /**
222 * Show button enroll course
223 *
224 * @editor tungnx
225 * @modify 4.1.3.1
226 * @throws Exception
227 * @version 4.0.2
228 */
229 public function course_enroll_button() {
230 $can_show = true;
231 $user = learn_press_get_current_user();
232 $course = learn_press_get_course();
233
234 try {
235 if ( ! $course || ! $user ) {
236 throw new Exception( 'User or Course is not exists' );
237 }
238
239 // User can not enroll course.
240 if ( ! $user->can_enroll_course( $course->get_id() ) ) {
241 throw new Exception( 'You can not enroll course' );
242 }
243
244 if ( $user->has_finished_course( $course->get_id() ) ) {
245 throw new Exception( 'Course is finished' );
246
247 }
248 } catch ( Throwable $e ) {
249 $can_show = false;
250 }
251
252 $can_show = apply_filters( 'learnpress/course/template/button-enroll/can-show', $can_show, $user, $course );
253
254 if ( ! $can_show ) {
255 return;
256 }
257
258 $args = array(
259 'user' => $user,
260 'course' => $course,
261 );
262
263 learn_press_get_template( 'single-course/buttons/enroll.php', $args );
264 }
265
266 public function course_extra_requirements( $course_id ) {
267 $course = LP_Course::get_course( $course_id );
268
269 $requirements = apply_filters(
270 'learn-press/course-extra-requirements',
271 $course->get_extra_info( 'requirements' ),
272 $course_id
273 );
274
275 if ( ! $requirements ) {
276 return;
277 }
278
279 learn_press_get_template(
280 'single-course/sidebar/course-extra',
281 array(
282 'type' => 'requirements',
283 'title' => esc_html__( 'Requirements', 'learnpress' ),
284 'content' => $requirements,
285 )
286 );
287 }
288
289 public function course_extra_key_features( $course_id ) {
290 $course = LP_Course::get_course( $course_id );
291
292 $key_features = apply_filters(
293 'learn-press/course-extra-key-features',
294 $course->get_extra_info( 'key_features' ),
295 $course_id
296 );
297
298 if ( ! $key_features ) {
299 return;
300 }
301
302 learn_press_get_template(
303 'single-course/sidebar/course-extra',
304 array(
305 'type' => 'key-features',
306 'title' => esc_html__( 'Key features', 'learnpress' ),
307 'content' => $key_features,
308 )
309 );
310 }
311
312 public function course_extra_target_audiences( $course_id ) {
313 $course = LP_Course::get_course( $course_id );
314
315 $target_audiences = apply_filters(
316 'learn-press/course-extra-target-audiences',
317 $course->get_extra_info( 'target_audiences' ),
318 $course_id
319 );
320
321 if ( ! $target_audiences ) {
322 return;
323 }
324
325 learn_press_get_template(
326 'single-course/sidebar/course-extra',
327 array(
328 'type' => 'target-audiences',
329 'title' => esc_html__( 'Target audiences', 'learnpress' ),
330 'content' => $target_audiences,
331 )
332 );
333 }
334
335 /**
336 * Show button retake course
337 *
338 * @throws Exception
339 * @deprecated 4.0.0
340 */
341 public function course_retake_button() {
342 _deprecated_function( __FUNCTION__, '4.0.0', 'button_retry' );
343 $user = learn_press_get_current_user();
344
345 if ( ! $user ) {
346 return;
347 }
348
349 if ( ! isset( $course ) ) {
350 $course = learn_press_get_course();
351 }
352
353 if ( ! $user->has_enrolled_course( $course->get_id() ) && $course->get_external_link() ) {
354 return;
355 }
356
357 // If user has not finished course
358 if ( ! $user->has_finished_course( $course->get_id() ) ) {
359 return;
360 }
361 learn_press_get_template( 'single-course/buttons/retake.php' );
362 }
363
364 /**
365 * Show template "continue" button con single course
366 *
367 * @throws Exception
368 * @editor tungnx
369 * @modify 4.1.3.1
370 * @version 4.0.2
371 * @since 4.0.0
372 */
373 public function course_continue_button() {
374 $can_show = true;
375 $user = learn_press_get_current_user();
376 $course = learn_press_get_course();
377
378 try {
379 if ( ! $user || ! $course ) {
380 throw new Exception( 'User or Course not exists!' );
381 }
382
383 if ( ! $user->has_enrolled_course( $course->get_id() ) ) {
384 throw new Exception( 'User has not enrolled course' );
385 }
386
387 if ( $user->has_finished_course( $course->get_id() ) ) {
388 throw new Exception( 'User has finished course' );
389 }
390
391 // Course has no items
392 if ( empty( $course->count_items() ) ) {
393 throw new Exception( 'Course no any item' );
394 }
395
396 // Do not display continue button if course is block duration
397 if ( $user->can_view_content_course( $course->get_id() )->key === LP_BLOCK_COURSE_DURATION_EXPIRE ) {
398 throw new Exception( 'Course is blocked' );
399 }
400 } catch ( Throwable $e ) {
401 $can_show = false;
402 }
403
404 $can_show = apply_filters( 'learnpress/course/template/button-continue/can-show', $can_show, $user, $course );
405
406 if ( ! $can_show ) {
407 return;
408 }
409
410 $args = array(
411 'user' => $user,
412 'course' => $course,
413 );
414
415 learn_press_get_template( 'single-course/buttons/continue.php', $args );
416 }
417
418 /**
419 * Check can show button finish course
420 *
421 * @param LP_Course|false $course
422 * @param LP_User|LP_User_Guest $user
423 *
424 * @return array
425 * @editor tungnx
426 * @modify 4.1.4.1 - comment - not use - replace on function can_show_finish_course_btn on LP_User
427 */
428 /*
429 public function can_show_finish_course_btn( $course, $user ): array {
430 $return = [
431 'flag' => false,
432 'message' => '',
433 ];
434
435 try {
436 if ( ! $course || ! $user ) {
437 throw new Exception( esc_html__( 'Error: No Course or User available.', 'learnpress' ) );
438 }
439
440 $course_id = $course->get_id();
441
442 if ( ! $user->has_enrolled_course( $course_id ) ) {
443 throw new Exception( esc_html__( 'Course is not enroll.', 'learnpress' ) );
444 }
445
446 $course_data = $user->get_course_data( $course_id );
447
448 if ( ! $user->is_course_in_progress( $course_id ) ) {
449 throw new Exception( esc_html__( 'Error: Course is not in-progress.', 'learnpress' ) );
450 }
451
452 // Get option Allow show finish button when the student has completed all items but has not passed the course assessment.
453 $has_finish = get_post_meta( $course_id, '_lp_has_finish', true ) ?? 'yes';
454 $is_passed = $user->has_reached_passing_condition( $course_id );
455
456 if ( ! $is_passed && $has_finish === 'no' ) {
457 throw new Exception( esc_html__( 'Error: Course is not has finish.', 'learnpress' ) );
458 }
459
460 if ( $course_data ) {
461 $course_result = $course_data->get_result();
462
463 $is_all_completed = $user->is_completed_all_items( $course_id );
464
465 if ( ! $is_all_completed && $has_finish === 'yes' && ! $course_result['pass'] ) {
466 throw new Exception( esc_html__( 'Error: Cannot finish course.', 'learnpress' ) );
467 }
468 }
469
470 if ( ! apply_filters( 'lp_can_finish_course', true ) ) {
471 throw new Exception( esc_html__( 'Error: Filter disable finish course.', 'learnpress' ) );
472 }
473
474 $return['flag'] = true;
475 } catch ( Exception $e ) {
476 $return['message'] = $e->getMessage();
477 }
478
479 return $return;
480 }*/
481
482 public function course_finish_button() {
483 $user = learn_press_get_current_user();
484 $course = learn_press_get_course();
485
486 if ( ! $course ) {
487 return;
488 }
489
490 // Course has no items
491 if ( empty( $course->count_items() ) ) {
492 return;
493 }
494
495 $check = $user->can_show_finish_course_btn( $course );
496
497 if ( 'success' !== $check['status'] ) {
498 return;
499 }
500
501 learn_press_get_template(
502 'single-course/buttons/finish.php',
503 array(
504 'course' => $course,
505 'user' => $user,
506 )
507 );
508 }
509
510 /**
511 * Button course external link
512 *
513 * @throws Exception
514 * @editor tungnx
515 * @modify 4.1.3
516 */
517 public function course_external_button() {
518 $course = learn_press_get_course();
519 $user = learn_press_get_current_user();
520
521 if ( ! $course ) {
522 return;
523 }
524
525 $link = $course->get_external_link();
526 if ( empty( $link ) || $user->has_purchased_course( $course->get_id() ) ) {
527 return;
528 }
529
530 $user = learn_press_get_current_user();
531
532 if ( $user && ! $user->has_enrolled_or_finished( $course->get_id() ) ) {
533 // Remove all another buttons
534 learn_press_remove_course_buttons();
535 learn_press_get_template( 'single-course/buttons/external-link.php' );
536 // Add back other buttons for other courses
537 add_action( 'learn-press/after-course-buttons', 'learn_press_add_course_buttons' );
538 }
539 }
540
541 public function popup_header() {
542 $user = learn_press_get_current_user();
543 $course = learn_press_get_course();
544
545 if ( ! $user || ! $course ) {
546 return;
547 }
548
549 $percentage = 0;
550 $total_items = 0;
551 $completed_items = 0;
552 $course_data = $user->get_course_data( $course->get_id() );
553
554 if ( $course_data && ! $course->is_no_required_enroll() ) {
555 $course_results = $course_data->get_result();
556 $completed_items = $course_results['completed_items'];
557 $total_items = $course_results['count_items'];
558 $percentage = $course_results['count_items'] ? absint( $course_results['completed_items'] / $course_results['count_items'] * 100 ) : 0;
559 }
560
561 learn_press_get_template( 'single-course/content-item/popup-header', compact( 'user', 'course', 'total_items', 'completed_items', 'percentage' ) );
562 }
563
564 public function popup_sidebar() {
565 learn_press_get_template( 'single-course/content-item/popup-sidebar' );
566 }
567
568 /**
569 * Get single item's course
570 */
571 public function popup_content() {
572 learn_press_get_template( 'single-course/content-item/popup-content' );
573 }
574
575 public function popup_footer() {
576 learn_press_get_template( 'single-course/content-item/popup-footer' );
577 }
578
579 public function popup_footer_nav() {
580 $course = learn_press_get_course();
581 if ( ! $course ) {
582 return;
583 }
584
585 $next_item = false;
586 $prev_item = false;
587
588 $next_id = $course->get_next_item();
589 $prev_id = $course->get_prev_item();
590
591 if ( $next_id ) {
592 $next_item = $course->get_item( $next_id );
593 if ( $next_item instanceof LP_Course_Item ) {
594 $next_item->set_course( $course->get_id() );
595 }
596 }
597
598 if ( $prev_id ) {
599 $prev_item = $course->get_item( $prev_id );
600 if ( $prev_item instanceof LP_Course_Item ) {
601 $prev_item->set_course( $course->get_id() );
602 }
603 }
604
605 if ( ! $prev_item && ! $next_item ) {
606 return;
607 }
608
609 learn_press_get_template(
610 'single-course/content-item/nav.php',
611 array(
612 'next_item' => $next_item,
613 'prev_item' => $prev_item,
614 )
615 );
616 }
617
618 public function course_curriculum() {
619 if ( ! learn_press_override_templates() || ( learn_press_override_templates() && has_filter( 'lp/template-course/course_curriculum/skeleton' ) ) ) {
620 $course_item = LP_Global::course_item();
621
622 if ( $course_item ) { // Check if current item is viewable
623 $item_id = $course_item->get_id();
624 $section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( absint( $item_id ) );
625 }
626 ?>
627 <div class="learnpress-course-curriculum" data-section="<?php echo esc_attr( $section_id ?? '' ); ?>" data-id="<?php echo esc_attr( $item_id ?? '' ); ?>">
628 <ul class="lp-skeleton-animation">
629 <li style="width: 100%; height: 50px"></li>
630 <li style="width: 100%; height: 20px"></li>
631 <li style="width: 100%; height: 20px"></li>
632 <li style="width: 100%; height: 20px"></li>
633
634 <li style="width: 100%; height: 50px; margin-top: 40px;"></li>
635 <li style="width: 100%; height: 20px"></li>
636 <li style="width: 100%; height: 20px"></li>
637 <li style="width: 100%; height: 20px"></li>
638 </ul>
639 </div>
640 <?php
641 } else {
642 learn_press_get_template( 'single-course/tabs/curriculum' );
643 }
644 }
645
646 /**
647 * Get template content item's course
648 */
649 public function course_content_item() {
650 learn_press_get_template( 'single-course/content-item' );
651 }
652
653 public function courses_loop_item_meta() {
654 learn_press_get_template( 'loop/course/meta' );
655 }
656
657 public function courses_loop_item_info_begin() {
658 learn_press_get_template( 'loop/course/info-begin' );
659 }
660
661 public function courses_loop_item_info_end() {
662 learn_press_get_template( 'loop/course/info-end' );
663 }
664
665 public function courses_loop_item_price() {
666 $course = learn_press_get_course();
667 if ( ! $course ) {
668 return;
669 }
670
671 $price_html = $course->get_course_price_html();
672 learn_press_get_template( 'loop/course/price', compact( 'course', 'price_html' ) );
673 }
674
675 public function begin_courses_loop() {
676 learn_press_get_template( 'loop/course/loop-begin.php' );
677 }
678
679 public function end_courses_loop() {
680 learn_press_get_template( 'loop/course/loop-end.php' );
681 }
682
683 public function course_item_content() {
684 $course = learn_press_get_course();
685 $item = LP_Global::course_item();
686
687 // if ( $item->is_blocked() ) {
688 // learn_press_get_template( 'global/block-content.php' );
689 //
690 // return;
691 // }
692
693 /**
694 * Fix only for WPBakery load style inline
695 * custom CSS is provided, load inline style.
696 *
697 * @editor tuanta
698 * @since 3.2.8.1
699 */
700 $shortcodes_custom_css = get_post_meta( $item->get_id(), '_wpb_shortcodes_custom_css', true );
701
702 if ( ! empty( $shortcodes_custom_css ) ) {
703 $shortcodes_custom_css = strip_tags( $shortcodes_custom_css );
704 echo '<style type="text/css" data-type="vc_shortcodes-custom-css">';
705 echo wp_kses_post( $shortcodes_custom_css );
706 echo '</style>';
707 }
708 // End
709
710 // Get timestamp remaining duration of course
711 /*$course_item = $item->get_course();
712 if ( ! $course_item ) {
713 return;
714 }*/
715
716 $timestamp_remaining = $course->timestamp_remaining_duration();
717
718 if ( $timestamp_remaining > 0 ) {
719 echo '<input type="hidden" name="lp-course-timestamp-remaining" value="' . esc_attr( $timestamp_remaining ) . '">';
720 }
721 // End
722
723 $item_template_name = learn_press_locate_template( 'single-course/content-item-' . $item->get_item_type() . '.php' );
724
725 if ( file_exists( $item_template_name ) ) {
726 learn_press_get_template( 'single-course/content-item-' . $item->get_item_type() . '.php' );
727 } else {
728 echo esc_html( sprintf( 'File %s not exists', $item_template_name ) );
729 }
730 }
731
732 /**
733 * @editor tungnx
734 * @reason comment - not use
735 * @since 4.1.2
736 */
737 /*
738 public function remaining_time() {
739
740 if ( ! $course = learn_press_get_course() ) {
741 return;
742 }
743
744 if ( ! $user = learn_press_get_current_user() ) {
745 return;
746 }
747
748 if ( false === ( $remain = $user->get_course_remaining_time( $course->get_id() ) ) ) {
749
750 return;
751 }
752
753 if ( $user->has_finished_course( $course->get_id() ) ) {
754 return;
755 }
756
757 learn_press_get_template( 'single-course/remaining-time.php', array( 'remaining_time' => $remain ) );
758 }*/
759
760 public function item_lesson_title() {
761 $item = LP_Global::course_item();
762 $format = $item->get_format();
763 $format_template = learn_press_locate_template( "content-lesson/{$format}/title.php" );
764
765 if ( 'standard' !== $format && file_exists( $format_template ) ) {
766 include $format_template;
767
768 return;
769 }
770 learn_press_get_template( 'content-lesson/title.php', array( 'lesson' => $item ) );
771 }
772
773 public function item_lesson_content() {
774 $item = LP_Global::course_item();
775 $format = $item->get_format();
776 $format_template = learn_press_locate_template( "content-lesson/{$format}/content.php" );
777
778 if ( 'standard' !== $format && file_exists( $format_template ) ) {
779 include $format_template;
780
781 return;
782 }
783 do_action( 'learn-press/lesson-start', $item );
784
785 learn_press_get_template( 'content-lesson/content.php', array( 'lesson' => $item ) );
786 }
787
788 public function item_quiz_content() {
789 $item = LP_Global::course_item();
790
791 learn_press_get_template( 'content-quiz/js.php' );
792 }
793
794 public function item_lesson_content_blocked() {
795 $item = LP_Global::course_item();
796
797 learn_press_get_template( 'global/block-content.php' );
798 }
799
800 /**
801 * Get template button complete lesson
802 */
803 public function item_lesson_complete_button() {
804 $user = learn_press_get_current_user();
805 $course = learn_press_get_course();
806 $item = LP_Global::course_item();
807
808 if ( ! $user || ! $course || ! $user->is_course_in_progress( $course->get_id() ) ) {
809 return;
810 }
811
812 // The complete button is not displayed when the course is locked --hungkv--
813 if ( $user->can_view_content_course( $course->get_id() )->key === LP_BLOCK_COURSE_DURATION_EXPIRE ) {
814 return;
815 }
816
817 learn_press_get_template(
818 'content-lesson/button-complete.php',
819 array(
820 'user' => $user,
821 'course' => $course,
822 'item' => $item,
823 )
824 );
825 }
826
827 /**
828 * @depecated 4.1.6.9
829 */
830 /*public function lesson_comment_form() {
831 $course = learn_press_get_course();
832 if ( ! $course ) {
833 return;
834 }
835
836 $lesson = LP_Global::course_item();
837 if ( ! $lesson ) {
838 return;
839 }
840
841 if ( $lesson->setup_postdata() ) {
842
843 if ( comments_open() || get_comments_number() ) {
844 add_filter( 'deprecated_file_trigger_error', '__return_false' );
845 comments_template();
846 remove_filter( 'deprecated_file_trigger_error', '__return_false' );
847 }
848 $lesson->reset_postdata();
849 }
850 }*/
851
852 /**
853 * Template show count items
854 *
855 * @since 4.0.0
856 * @version 1.0.1
857 * @editor tungnx
858 */
859 public function count_object() {
860 $course = learn_press_get_course();
861
862 if ( ! $course ) {
863 return;
864 }
865
866 $lessons = $course->count_items( LP_LESSON_CPT );
867 $quizzes = $course->count_items( LP_QUIZ_CPT );
868 $students = $course->count_students();
869
870 $counts = apply_filters(
871 'learnpress/course/count/items',
872 array(
873 'lesson' => sprintf(
874 '<span class="meta-number">' . _n( '%d lesson', '%d lessons', $lessons, 'learnpress' ) . '</span>',
875 $lessons
876 ),
877 'quiz' => sprintf(
878 '<span class="meta-number">' . _n( '%d quiz', '%d quizzes', $quizzes, 'learnpress' ) . '</span>',
879 $quizzes
880 ),
881 'student' => sprintf(
882 '<span class="meta-number">' . _n( '%d student', '%d students', $students, 'learnpress' ) . '</span>',
883 $students
884 ),
885 ),
886 array( $lessons, $quizzes, $students )
887 );
888
889 foreach ( $counts as $object => $count ) {
890 learn_press_get_template(
891 'single-course/meta/count',
892 array(
893 'count' => $count,
894 'object' => $object,
895 )
896 );
897 }
898 }
899
900 public function course_extra_boxes() {
901 $course = LP_Course::get_course( get_the_ID() );
902 $boxes = apply_filters(
903 'learn-press/course-extra-boxes-data',
904 array(
905 array(
906 'title' => __( 'Requirements', 'learnpress' ),
907 'items' => $course->get_extra_info( 'requirements' ),
908 ),
909 array(
910 'title' => __( 'Features', 'learnpress' ),
911 'items' => $course->get_extra_info( 'key_features' ),
912 ),
913 array(
914 'title' => __( 'Target audiences', 'learnpress' ),
915 'items' => $course->get_extra_info( 'target_audiences' ),
916 ),
917 )
918 );
919
920 $is_checked = 0;
921 foreach ( $boxes as $box ) {
922
923 if ( ! isset( $box['items'] ) || ! $box['items'] ) {
924 continue;
925 }
926
927 if ( ! $is_checked ) {
928 $box['checked'] = true;
929 $is_checked = true;
930 }
931
932 learn_press_get_template( 'single-course/extra-info', $box );
933 }
934
935 }
936
937 public function faqs() {
938 $course = LP_Course::get_course( get_the_ID() );
939 $faqs = $course->get_faqs();
940 if ( ! $faqs ) {
941 return;
942 }
943
944 foreach ( $faqs as $faq ) {
945 learn_press_get_template( 'single-course/tabs/faqs', $faq );
946 }
947 }
948
949 public function sidebar() {
950 }
951
952 public function course_featured_review() {
953 $review_content = get_post_meta( $this->course->get_id(), '_lp_featured_review', true );
954
955 if ( ! $review_content ) {
956 return;
957 }
958
959 $user = learn_press_get_current_user();
960
961 if ( ! $user ) {
962 return;
963 }
964
965 if ( $user->has_enrolled_or_finished( $this->course->get_id() ) ) {
966 return;
967 }
968
969 learn_press_get_template(
970 'single-course/featured-review',
971 array(
972 'review_content' => $review_content,
973 'review_value' => 5,
974 )
975 );
976 }
977
978 public function instructor_socials() {
979 $instructor = $this->course->get_instructor();
980 $socials = $instructor->get_profile_socials( $instructor->get_id() );
981
982 foreach ( $socials as $social ) {
983 echo wp_kses_post( $social );
984 }
985 }
986
987 public function has_sidebar() {
988 $actions = array(
989 'learn-press/before-course-summary-sidebar',
990 'learn-press/course-summary-sidebar',
991 'learn-press/after-course-summary-sidebar',
992 );
993
994 foreach ( $actions as $action ) {
995 if ( has_action( $action ) ) {
996 return true;
997 }
998 }
999
1000 return false;
1001 }
1002
1003 // button readmore in archive courses
1004 public function course_readmore() {
1005 ?>
1006 <div class="course-readmore">
1007 <a href="<?php the_permalink(); ?>"><?php echo esc_html__( 'View More', 'learnpress' ); ?></a>
1008 </div>
1009 <?php
1010 }
1011
1012 public function course_item_comments() {
1013 global $post;
1014 $course = learn_press_get_course();
1015 if ( ! $course ) {
1016 return;
1017 }
1018
1019 $item = LP_Global::course_item();
1020 if ( ! $item ) {
1021 return;
1022 }
1023
1024 $user = learn_press_get_current_user();
1025
1026 // if ( ! $user->is_admin() && ! $user->has_course_status( $course->get_id(), array( 'enrolled', 'finished' ) ) ) {
1027 // return;
1028 // }
1029
1030 if ( $item->setup_postdata() ) {
1031
1032 if ( comments_open() || get_comments_number() ) {
1033 learn_press_get_template( 'single-course/item-comments' );
1034 }
1035 $item->reset_postdata();
1036 }
1037 }
1038
1039 public function course_comment_template() {
1040 global $post;
1041
1042 if ( comments_open() || get_comments_number() ) {
1043 add_filter( 'deprecated_file_trigger_error', '__return_false' );
1044 comments_template();
1045 remove_filter( 'deprecated_file_trigger_error', '__return_false' );
1046 }
1047 }
1048
1049 /**
1050 * Show info time handle of user
1051 *
1052 * @throws Exception
1053 */
1054 public function user_time() {
1055 $user = learn_press_get_current_user();
1056
1057 if ( ! $user ) {
1058 return;
1059 }
1060
1061 if ( ! $user->has_enrolled_or_finished( $this->course->get_id() ) ) {
1062 return;
1063 }
1064
1065 /**
1066 * @var LP_User_Item_Course
1067 */
1068 $user_course = $user->get_course_data( $this->course->get_id() );
1069
1070 if ( ! $user_course ) {
1071 return;
1072 }
1073
1074 $status = $user_course->get_status();
1075 $start_time = $user_course->get_start_time();
1076 $end_time = $user_course->get_end_time();
1077 $expiration_time = $user_course->get_expiration_time();
1078
1079 learn_press_get_template(
1080 'single-course/sidebar/user-time',
1081 compact( 'status', 'start_time', 'end_time', 'expiration_time' )
1082 );
1083 }
1084
1085 /**
1086 * Animation placholder in user-progress file.
1087 * Content will show in class-rest-lazy-load-controller file.
1088 *
1089 * @return void
1090 * @throws Exception
1091 * @author Nhamdv.
1092 */
1093 public function user_progress() {
1094 if ( ! is_user_logged_in() ) {
1095 return;
1096 }
1097
1098 $course = learn_press_get_course();
1099 $user = learn_press_get_current_user();
1100
1101 if ( ! $course ) {
1102 return;
1103 }
1104
1105 if ( ! $user->has_enrolled_or_finished( $course->get_id() ) ) {
1106 return;
1107 }
1108
1109 if ( LP_LAZY_LOAD_ANIMATION ) {
1110 echo '<div class="lp-course-progress-wrapper">';
1111 echo lp_skeleton_animation_html( 3 );
1112 echo '</div>';
1113 } else {
1114 $course_data = $user->get_course_data( $course->get_id() );
1115 if ( ! $course_data ) {
1116 return;
1117 }
1118
1119 $course_results = $course_data->calculate_course_results();
1120
1121 learn_press_get_template(
1122 'single-course/sidebar/user-progress',
1123 compact( 'user', 'course', 'course_data', 'course_results' )
1124 );
1125 }
1126 }
1127
1128 public function course_extra_boxes_position_control() {
1129 $course = LP_Course::get_course( get_the_ID() );
1130 $user = learn_press_get_current_user();
1131
1132 if ( ! $user || ! $course ) {
1133 return;
1134 }
1135
1136 $enrolled = $user->has_enrolled_course( $course->get_id() );
1137 if ( $enrolled ) {
1138 remove_action(
1139 'learn-press/course-content-summary',
1140 LP()->template( 'course' )->func( 'course_extra_boxes' ),
1141 40
1142 );
1143 } else {
1144 remove_action(
1145 'learn-press/course-content-summary',
1146 LP()->template( 'course' )->func( 'course_extra_boxes' ),
1147 70
1148 );
1149 }
1150 }
1151
1152 /**
1153 * Template for case not any courses
1154 *
1155 * @author Nhamdv
1156 * @since 4.1.2
1157 */
1158 public function no_courses_found() {
1159 learn_press_get_template( 'global/no-courses-found' );
1160 }
1161 }
1162
1163 return new LP_Template_Course();
1164