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