PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.0
Tutor LMS – eLearning and online course solution v4.0.0
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 1 day ago components 1 day ago courses 1 day ago discussions 1 day ago elements 1 day ago instructor 1 day ago my-courses 1 year ago my-quiz-attempts 1 day ago quiz-attempts 1 day ago student 1 day ago wishlist 1 day ago announcements.php 1 day ago courses.php 1 day ago create-course.php 1 day ago dashboard.php 1 day ago discussions.php 1 day ago index.php 3 years ago logged-in.php 3 years ago my-courses.php 1 day ago my-quiz-attempts.php 1 day ago quiz-attempts.php 1 day ago registration.php 1 day ago wishlist.php 1 day 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