PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.2
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.2
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.2, at inc/templates/class-lp-template-course.php

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