PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.9.0
Tutor LMS – eLearning and online course solution v3.9.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 / my-courses.php
tutor / templates / dashboard Last commit date
announcements 1 year ago assignments 8 months ago elements 1 year ago enrolled-courses 3 years ago instructor 2 years ago my-courses 1 year ago my-quiz-attempts 3 years ago notifications 3 years ago question-answer 1 year ago quiz-attempts 3 years ago reviews 3 years ago settings 1 year ago withdraw-method-fields 3 years ago announcements.php 1 year ago assignments.php 11 months ago create-course.php 1 year ago dashboard.php 8 months ago enrolled-courses.php 8 months ago index.php 3 years ago logged-in.php 3 years ago my-courses.php 8 months ago my-profile.php 9 months ago my-quiz-attempts.php 3 years ago purchase_history.php 10 months ago question-answer.php 11 months ago quiz-attempts.php 1 year ago registration.php 2 years ago reviews.php 3 years ago settings.php 1 year ago wishlist.php 1 year ago withdraw.php 1 year ago
my-courses.php
364 lines
1 <?php
2 /**
3 * My 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 use TUTOR\Input;
13 use Tutor\Models\CourseModel;
14
15 // Get the user ID and active tab.
16 $current_user_id = get_current_user_id();
17 ! isset( $active_tab ) ? $active_tab = 'my-courses' : 0;
18
19 // Map required course status according to page.
20 $status_map = array(
21 'my-courses' => CourseModel::STATUS_PUBLISH,
22 'my-courses/draft-courses' => CourseModel::STATUS_DRAFT,
23 'my-courses/pending-courses' => CourseModel::STATUS_PENDING,
24 'my-courses/schedule-courses' => CourseModel::STATUS_FUTURE,
25 );
26
27 // Set currently required course status fo rcurrent tab.
28 $status = isset( $status_map[ $active_tab ] ) ? $status_map[ $active_tab ] : CourseModel::STATUS_PUBLISH;
29 $post_type = apply_filters( 'tutor_dashboard_course_list_post_type', array( tutor()->course_post_type ) );
30
31 // Get counts for course tabs.
32 $count_map = array(
33 'publish' => CourseModel::get_courses_by_instructor( $current_user_id, CourseModel::STATUS_PUBLISH, 0, 0, true, $post_type ),
34 'pending' => CourseModel::get_courses_by_instructor( $current_user_id, CourseModel::STATUS_PENDING, 0, 0, true, $post_type ),
35 'draft' => CourseModel::get_courses_by_instructor( $current_user_id, CourseModel::STATUS_DRAFT, 0, 0, true, $post_type ),
36 'future' => CourseModel::get_courses_by_instructor( $current_user_id, CourseModel::STATUS_FUTURE, 0, 0, true, $post_type ),
37 );
38
39 $course_archive_arg = isset( $GLOBALS['tutor_course_archive_arg'] ) ? $GLOBALS['tutor_course_archive_arg']['column_per_row'] : null;
40 $courseCols = null === $course_archive_arg ? tutor_utils()->get_option( 'courses_col_per_row', 4 ) : $course_archive_arg;
41 $per_page = tutor_utils()->get_option( 'courses_per_page', 10 );
42 $paged = Input::get( 'current_page', 1, Input::TYPE_INT );
43 $offset = $per_page * ( $paged - 1 );
44 $results = CourseModel::get_courses_by_instructor( $current_user_id, $status, $offset, $per_page, false, $post_type );
45 $show_course_delete = true;
46 $post_type_query = Input::get( 'type', '' );
47 $post_type_args = $post_type_query ? array( 'type' => $post_type_query ) : array();
48
49 $tabs = array(
50 'publish' => array(
51 'title' => __( 'Publish', 'tutor' ),
52 'link' => 'my-courses',
53 ),
54 'pending' => array(
55 'title' => __( 'Pending', 'tutor' ),
56 'link' => 'my-courses/pending-courses',
57 ),
58 'draft' => array(
59 'title' => __( 'Draft', 'tutor' ),
60 'link' => 'my-courses/draft-courses',
61 ),
62 'future' => array(
63 'title' => __( 'Schedule', 'tutor' ),
64 'link' => 'my-courses/schedule-courses',
65 ),
66 );
67
68 if ( ! current_user_can( 'administrator' ) && ! tutor_utils()->get_option( 'instructor_can_delete_course' ) ) {
69 $show_course_delete = false;
70 }
71 ?>
72
73 <div class="tutor-dashboard-my-courses">
74 <div class="tutor-fs-5 tutor-fw-medium tutor-color-black tutor-mb-16">
75 <?php esc_html_e( 'My Courses', 'tutor' ); ?>
76 </div>
77
78 <div class="tutor-dashboard-content-inner">
79 <div class="tutor-mb-32 tutor-w-100">
80 <ul class="tutor-nav">
81 <?php foreach ( $tabs as $key => $tab ) : ?>
82 <li class="tutor-nav-item">
83 <a class="tutor-nav-link<?php echo esc_attr( $tab['link'] === $active_tab ? ' is-active' : '' ); ?>" href="<?php echo esc_url( add_query_arg( $post_type_args, tutor_utils()->get_tutor_dashboard_page_permalink( $tab['link'] ) ) ); ?>">
84 <?php echo esc_html( $tab['title'] ); ?> <?php echo esc_html( '(' . $count_map[ $key ] . ')' ); ?>
85 </a>
86 </li>
87 <?php endforeach; ?>
88 <?php do_action( 'tutor_dashboard_my_courses_filter' ); ?>
89 </ul>
90
91 </div>
92
93 <!-- Course list -->
94 <?php
95 $placeholder_img = tutor()->url . 'assets/images/placeholder.svg';
96
97 if ( ! is_array( $results ) || ( ! count( $results ) && 1 == $paged ) ) {
98 tutor_utils()->tutor_empty_state( tutor_utils()->not_found_text() );
99 } else {
100 ?>
101 <div class="tutor-grid tutor-grid-3">
102 <?php
103 global $post;
104 $tutor_nonce_value = wp_create_nonce( tutor()->nonce_action );
105 foreach ( $results as $post ) :
106 setup_postdata( $post );
107
108 $avg_rating = tutor_utils()->get_course_rating()->rating_avg;
109 $tutor_course_img = get_tutor_course_thumbnail_src();
110 $id_string_delete = 'tutor_my_courses_delete_' . $post->ID;
111 $row_id = 'tutor-dashboard-my-course-' . $post->ID;
112 $course_duration = get_tutor_course_duration_context( $post->ID, true );
113 $course_students = tutor_utils()->count_enrolled_users_by_course();
114 $is_main_instructor = CourseModel::is_main_instructor( $post->ID );
115 $course_edit_link = apply_filters( 'tutor_dashboard_course_list_edit_link', tutor_utils()->course_edit_link( $post->ID, tutor()->has_pro ? 'frontend' : 'backend' ), $post );
116 ?>
117
118 <div id="<?php echo esc_attr( $row_id ); ?>" class="tutor-card tutor-course-card tutor-mycourse-<?php the_ID(); ?>">
119 <a href="<?php echo esc_url( get_the_permalink() ); ?>" class="tutor-d-block">
120 <div class="tutor-ratio tutor-ratio-16x9">
121 <img class="tutor-card-image-top" src="<?php echo empty( $tutor_course_img ) ? esc_url( $placeholder_img ) : esc_url( $tutor_course_img ); ?>" alt="<?php the_title(); ?>" loading="lazy">
122 </div>
123 </a>
124
125 <?php if ( false === $is_main_instructor ) : ?>
126 <div class="tutor-course-co-author-badge"><?php esc_html_e( 'Co-author', 'tutor' ); ?></div>
127 <?php endif; ?>
128 <div class="tutor-card-body">
129 <?php do_action( 'tutor_my_courses_before_meta', get_the_ID() ); ?>
130 <div class="tutor-meta tutor-mb-8">
131 <span>
132 <?php echo esc_html( get_the_date() ); ?> <?php echo esc_html( get_the_time() ); ?>
133 </span>
134 </div>
135
136 <div class="tutor-course-name tutor-fs-6 tutor-fw-bold tutor-mb-16">
137 <a href="<?php echo esc_url( get_the_permalink() ); ?>"><?php the_title(); ?></a>
138 </div>
139
140 <?php if ( ! empty( $course_duration ) || ! empty( $course_students ) ) : ?>
141 <div class="tutor-meta tutor-mt-16">
142 <?php if ( ! empty( $course_duration ) ) : ?>
143 <div>
144 <span class="tutor-icon-clock-line tutor-meta-icon" area-hidden="true"></span>
145 <span class="tutor-meta-value">
146 <?php
147 echo wp_kses(
148 stripslashes( $course_duration ),
149 array(
150 'span' => array( 'class' => true ),
151 )
152 );
153 ?>
154 </span>
155 </div>
156 <?php endif; ?>
157
158 <?php if ( ! empty( $course_students ) ) : ?>
159 <div>
160 <span class="tutor-icon-user-line tutor-meta-icon" area-hidden="true"></span>
161 <span class="tutor-meta-value">
162 <?php
163 echo wp_kses(
164 stripslashes( $course_students ),
165 array(
166 'span' => array( 'class' => true ),
167 )
168 );
169 ?>
170 </span>
171 </div>
172 <?php endif; ?>
173 </div>
174 <?php endif; ?>
175 </div>
176
177 <div class="tutor-card-footer">
178 <div class="tutor-d-flex tutor-align-center tutor-justify-between">
179 <div class="tutor-d-flex tutor-align-center">
180 <span class="tutor-fs-7 tutor-fw-medium tutor-color-muted tutor-mr-4">
181 <?php
182 $membership_only_mode = apply_filters( 'tutor_membership_only_mode', false );
183 echo esc_html( $membership_only_mode ? __( 'Plan:', 'tutor' ) : '' );
184 ?>
185 </span>
186 <span class="tutor-fs-7 tutor-fw-medium tutor-color-black">
187 <?php
188 $price = tutor_utils()->get_course_price();
189 if ( null === $price ) {
190 esc_html_e( 'Free', 'tutor' );
191 } else {
192 echo wp_kses_post( tutor_utils()->get_course_price() );
193 }
194 ?>
195 </span>
196 </div>
197 <div class="tutor-iconic-btn-group tutor-mr-n8">
198 <a href="<?php echo esc_url( $course_edit_link ); ?>" class="tutor-iconic-btn tutor-my-course-edit">
199 <i class="tutor-icon-edit" area-hidden="true"></i>
200 </a>
201 <div class="tutor-dropdown-parent">
202 <button type="button" class="tutor-iconic-btn" action-tutor-dropdown="toggle">
203 <span class="tutor-icon-kebab-menu" area-hidden="true"></span>
204 </button>
205 <div id="table-dashboard-course-list-<?php echo esc_attr( $post->ID ); ?>" class="tutor-dropdown tutor-dropdown-dark tutor-text-left">
206
207 <!-- Submit Action -->
208 <?php if ( tutor()->has_pro && in_array( $post->post_status, array( CourseModel::STATUS_DRAFT ), true ) ) : ?>
209 <?php
210 $params = http_build_query(
211 array(
212 'tutor_action' => 'update_course_status',
213 'status' => CourseModel::STATUS_PENDING,
214 'course_id' => $post->ID,
215 tutor()->nonce => $tutor_nonce_value,
216 )
217 );
218 ?>
219 <a class="tutor-dropdown-item" href="?<?php echo esc_attr( $params ); ?>">
220 <i class="tutor-icon-share tutor-mr-8" area-hidden="true"></i>
221 <span>
222 <?php
223 $can_publish_course = current_user_can( 'administrator' ) || (bool) tutor_utils()->get_option( 'instructor_can_publish_course' );
224 if ( $can_publish_course ) {
225 esc_html_e( 'Publish', 'tutor' );
226 } else {
227 esc_html_e( 'Submit', 'tutor' );
228 }
229 ?>
230 </span>
231 </a>
232 <?php endif; ?>
233 <!-- # Submit Action -->
234
235 <!-- Duplicate Action -->
236 <?php if ( tutor()->has_pro && in_array( $post->post_status, array( CourseModel::STATUS_PUBLISH, CourseModel::STATUS_PENDING, CourseModel::STATUS_DRAFT, CourseModel::STATUS_FUTURE ) ) ) : ?>
237 <?php
238 $params = http_build_query(
239 array(
240 'tutor_action' => 'duplicate_course',
241 'course_id' => $post->ID,
242 )
243 );
244 ?>
245 <a class="tutor-dropdown-item" href="?<?php echo esc_attr( $params ); ?>">
246 <i class="tutor-icon-copy-text tutor-mr-8" area-hidden="true"></i>
247 <span><?php esc_html_e( 'Duplicate', 'tutor' ); ?></span>
248 </a>
249 <?php endif; ?>
250 <!-- # Duplicate Action -->
251
252 <!-- Move to Draf Action -->
253 <?php if ( tutor()->has_pro && in_array( $post->post_status, array( CourseModel::STATUS_PUBLISH, CourseModel::STATUS_FUTURE ) ) ) : ?>
254 <?php
255 $params = http_build_query(
256 array(
257 'tutor_action' => 'update_course_status',
258 'status' => CourseModel::STATUS_DRAFT,
259 'course_id' => $post->ID,
260 tutor()->nonce => $tutor_nonce_value,
261 )
262 );
263 ?>
264 <a class="tutor-dropdown-item" href="?<?php echo esc_attr( $params ); ?>">
265 <i class="tutor-icon-archive tutor-mr-8" area-hidden="true"></i>
266 <span><?php esc_html_e( 'Move to Draft', 'tutor' ); ?></span>
267 </a>
268 <?php endif; ?>
269 <!-- # Move to Draft Action -->
270
271 <!-- Cancel Submission -->
272 <?php if ( tutor()->has_pro && in_array( $post->post_status, array( CourseModel::STATUS_PENDING ) ) ) : ?>
273 <?php
274 $params = http_build_query(
275 array(
276 'tutor_action' => 'update_course_status',
277 'status' => CourseModel::STATUS_DRAFT,
278 'course_id' => $post->ID,
279 tutor()->nonce => $tutor_nonce_value,
280 )
281 );
282 ?>
283 <a href="?<?php echo esc_attr( $params ); ?>" class="tutor-dropdown-item">
284 <i class="tutor-icon-times tutor-mr-8" area-hidden="true"></i>
285 <span><?php esc_html_e( 'Cancel Submission', 'tutor' ); ?></span>
286 </a>
287 <?php endif; ?>
288 <!-- # Cancel Submission -->
289
290 <!-- Delete Action -->
291 <?php if ( $is_main_instructor && in_array( $post->post_status, array( CourseModel::STATUS_PUBLISH, CourseModel::STATUS_DRAFT, CourseModel::STATUS_FUTURE ) ) ) : ?>
292 <?php if ( $show_course_delete ) : ?>
293 <a href="#" data-tutor-modal-target="<?php echo esc_attr( $id_string_delete ); ?>" class="tutor-dropdown-item tutor-admin-course-delete">
294 <i class="tutor-icon-trash-can-bold tutor-mr-8" area-hidden="true"></i>
295 <span><?php esc_html_e( 'Delete', 'tutor' ); ?></span>
296 </a>
297 <?php endif; ?>
298 <?php endif; ?>
299 <!-- # Delete Action -->
300
301 </div>
302 </div>
303 </div>
304 </div>
305 </div>
306
307 <!-- Delete prompt modal -->
308 <div id="<?php echo esc_attr( $id_string_delete ); ?>" class="tutor-modal">
309 <div class="tutor-modal-overlay"></div>
310 <div class="tutor-modal-window">
311 <div class="tutor-modal-content tutor-modal-content-white">
312 <button class="tutor-iconic-btn tutor-modal-close-o" data-tutor-modal-close>
313 <span class="tutor-icon-times" area-hidden="true"></span>
314 </button>
315
316 <div class="tutor-modal-body tutor-text-center">
317 <div class="tutor-mt-48">
318 <img class="tutor-d-inline-block" src="<?php echo esc_attr( tutor()->url ); ?>assets/images/icon-trash.svg" />
319 </div>
320
321 <div class="tutor-fs-3 tutor-fw-medium tutor-color-black tutor-mb-12"><?php esc_html_e( 'Delete This Course?', 'tutor' ); ?></div>
322 <div class="tutor-fs-6 tutor-color-muted"><?php esc_html_e( 'Are you sure you want to delete this course permanently from the site? Please confirm your choice.', 'tutor' ); ?></div>
323
324 <div class="tutor-d-flex tutor-justify-center tutor-my-48">
325 <button data-tutor-modal-close class="tutor-btn tutor-btn-outline-primary">
326 <?php esc_html_e( 'Cancel', 'tutor' ); ?>
327 </button>
328 <button class="tutor-btn tutor-btn-primary tutor-list-ajax-action tutor-ml-20" data-request_data='{"course_id":<?php echo esc_attr( $post->ID ); ?>,"action":"tutor_delete_dashboard_course","redirect_to":"<?php echo esc_url( tutor_utils()->get_current_url() ); ?>"}' data-delete_element_id="<?php echo esc_attr( $row_id ); ?>">
329 <?php esc_html_e( 'Yes, Delete This', 'tutor' ); ?>
330 </button>
331 </div>
332 </div>
333 </div>
334 </div>
335 </div>
336 </div>
337 <?php
338 endforeach;
339 wp_reset_postdata();
340 ?>
341 </div>
342 <div class="tutor-mt-20">
343 <?php
344 if ( $count_map[ $status ] > $per_page ) {
345 $pagination_data = array(
346 'total_items' => $count_map[ $status ],
347 'per_page' => $per_page,
348 'paged' => $paged,
349 );
350
351 tutor_load_template_from_custom_path(
352 tutor()->path . 'templates/dashboard/elements/pagination.php',
353 $pagination_data
354 );
355 }
356 ?>
357
358 </div>
359 <?php
360 }
361 ?>
362 </div>
363 </div>
364