PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.1
Tutor LMS – eLearning and online course solution v4.0.1
4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / templates / dashboard / courses.php
tutor / templates / dashboard Last commit date
account 4 days ago components 4 days ago courses 4 days ago discussions 4 days ago elements 4 days ago instructor 4 days ago my-courses 1 year ago my-quiz-attempts 4 days ago quiz-attempts 4 days ago student 4 days ago wishlist 4 days ago announcements.php 4 days ago courses.php 4 days ago create-course.php 4 days ago dashboard.php 4 days ago discussions.php 4 days ago index.php 3 years ago logged-in.php 3 years ago my-courses.php 4 days ago my-quiz-attempts.php 4 days ago quiz-attempts.php 4 days ago registration.php 4 days ago wishlist.php 4 days ago
courses.php
136 lines
1 <?php
2 /**
3 * Courses Page
4 *
5 * @package Tutor\Templates
6 * @subpackage Dashboard
7 * @author Themeum <support@themeum.com>
8 * @link https://themeum.com
9 * @since 1.4.3
10 */
11
12 defined( 'ABSPATH' ) || exit;
13
14 use Tutor\Components\Constants\Size;
15 use TUTOR\Input;
16 use Tutor\Components\Pagination;
17 use Tutor\Models\CourseModel;
18 use Tutor\Components\EmptyState;
19 use Tutor\Components\Nav;
20 use TUTOR\Student;
21
22 // Pagination.
23 $courses_per_page = tutor_utils()->get_option( 'pagination_per_page', 10 );
24 $current_page = max( 1, Input::get( 'current_page', 1, Input::TYPE_INT ) );
25 $offset = ( $courses_per_page * $current_page ) - $courses_per_page;
26
27 $post_type_query = Input::get( 'type', '' );
28
29 $post_type_args = $post_type_query ? array( 'type' => $post_type_query ) : array();
30
31 $page_tabs = apply_filters(
32 'tutor_enrolled_courses_page_tabs',
33 array(
34 'courses' => __( 'Enrolled Courses', 'tutor' ),
35 'courses/active-courses' => __( 'Active Courses', 'tutor' ),
36 'courses/completed-courses' => __( 'Completed Courses', 'tutor' ),
37 'courses/wishlist' => __( 'Wishlist', 'tutor' ),
38 'courses/my-quiz-attempts' => __( 'Quiz Attempts', 'tutor' ),
39 ),
40 $post_type_query
41 );
42
43 // Default tab set.
44 if ( ! isset( $active_tab, $page_tabs[ $active_tab ] ) ) {
45 $active_tab = 'courses';
46 }
47
48 // Only fetch the paginated list for the active tab.
49 switch ( $active_tab ) {
50 case 'courses':
51 $courses_list = CourseModel::get_enrolled_courses_by_user( get_current_user_id(), array( CourseModel::STATUS_PRIVATE, CourseModel::STATUS_PUBLISH ), $offset, $courses_per_page );
52 break;
53 case 'courses/active-courses':
54 $courses_list = CourseModel::get_active_courses_by_user( null, $offset, $courses_per_page, array( 'post_status' => array( CourseModel::STATUS_PRIVATE, CourseModel::STATUS_PUBLISH ) ) );
55 break;
56 case 'courses/completed-courses':
57 $courses_list = CourseModel::get_completed_courses_by_user( null, $offset, $courses_per_page, array( 'post_status' => array( CourseModel::STATUS_PRIVATE, CourseModel::STATUS_PUBLISH ) ) );
58 break;
59 default:
60 $courses_list = null;
61 break;
62 }
63
64 // Separate count queries with no offset so tab counts are always accurate regardless of current page.
65 $enrolled_courses_for_count = CourseModel::get_enrolled_courses_by_user( get_current_user_id(), array( CourseModel::STATUS_PRIVATE, CourseModel::STATUS_PUBLISH ), 0, 1 );
66 $active_courses_for_count = CourseModel::get_active_courses_by_user( null, 0, 1, array( 'post_status' => array( CourseModel::STATUS_PRIVATE, CourseModel::STATUS_PUBLISH ) ) );
67 $completed_courses_for_count = CourseModel::get_completed_courses_by_user( null, 0, 1, array( 'post_status' => array( CourseModel::STATUS_PRIVATE, CourseModel::STATUS_PUBLISH ) ) );
68
69 $enrolled_course_count = is_a( $enrolled_courses_for_count, 'WP_Query' ) ? $enrolled_courses_for_count->found_posts : 0;
70 $active_course_count = is_a( $active_courses_for_count, 'WP_Query' ) ? $active_courses_for_count->found_posts : 0;
71 $completed_course_count = is_a( $completed_courses_for_count, 'WP_Query' ) ? $completed_courses_for_count->found_posts : 0;
72
73 $courses_tab = ( new Student() )->get_courses_tab( $active_tab, $post_type_args, $enrolled_course_count, $active_course_count, $completed_course_count );
74
75 ?>
76
77 <div class="tutor-dashboard-courses-wrapper">
78 <div class="tutor-hidden tutor-sm-flex tutor-items-center tutor-justify-between tutor-mb-5">
79 <h4 class="tutor-h4 tutor-my-none"><?php esc_html_e( 'Courses', 'tutor' ); ?></h4>
80 </div>
81
82 <!-- Courses nav -->
83 <div class="tutor-dashboard-courses-card">
84 <div class="tutor-dashboard-courses-tab">
85 <?php Nav::make()->items( $courses_tab )->size( Size::SMALL )->render(); ?>
86 </div>
87
88 <!-- courses list -->
89 <?php
90 if ( 'courses/wishlist' === $active_tab || 'courses/my-quiz-attempts' === $active_tab ) :
91 switch ( $active_tab ) {
92 case 'courses/wishlist':
93 tutor_load_template( 'dashboard.wishlist' );
94 break;
95 case 'courses/my-quiz-attempts':
96 tutor_load_template( 'dashboard.my-quiz-attempts' );
97 break;
98 }
99 elseif ( 'courses' === $active_tab || 'courses/active-courses' === $active_tab || 'courses/completed-courses' === $active_tab ) :
100 ?>
101 <div class="tutor-dashboard-courses-list tutor-flex tutor-flex-column tutor-gap-4 tutor-p-6 tutor-sm-p-none tutor-sm-mt-4">
102 <?php
103 if ( $courses_list && $courses_list->have_posts() ) :
104 while ( $courses_list->have_posts() ) :
105 $courses_list->the_post();
106 $course_id = get_the_ID();
107
108 $default_template = tutor_get_template( 'dashboard.courses.course-card' );
109 $course_card_template = apply_filters( 'tutor_dashboard_course_card_template', $default_template, $course_id );
110
111 if ( file_exists( $course_card_template ) ) {
112 require $course_card_template;
113 }
114 endwhile;
115 wp_reset_postdata();
116 else :
117 EmptyState::make()
118 ->title( __( 'No Courses Found', 'tutor' ) )
119 ->icon( tutor_utils()->get_themed_svg( 'images/illustrations/learning-empty.svg' ) )
120 ->render();
121 endif;
122 ?>
123 </div>
124 <?php
125 $found_posts = $courses_list ? $courses_list->found_posts : 0;
126 Pagination::make()
127 ->current( $current_page )
128 ->total( $found_posts )
129 ->limit( $courses_per_page )
130 ->attr( 'class', 'tutor-px-6 tutor-pb-6 tutor-sm-p-none tutor-sm-mt-5' )
131 ->render();
132 ?>
133 <?php endif; ?>
134 </div>
135 </div>
136