LLMS_Table_StudentManagement
Student Management table on Courses and Memberships class
Source Source
File: includes/admin/post-types/tables/class.llms.table.student.management.php
class LLMS_Table_StudentManagement extends LLMS_Admin_Table { /** * Unique ID for the Table * * @var string */ protected $id = 'student-management'; /** * Value of the field being filtered by * Only applicable if $filterby is set * * @var string */ protected $filter = 'any'; /** * Field results are filtered by * * @var string */ protected $filterby = 'status'; /** * Determine if the table is filterable * * @var boolean */ protected $is_filterable = true; /** * If true, tfoot will add ajax pagination links * * @var boolean */ protected $is_paginated = true; /** * Determine of the table is searchable * * @var boolean */ protected $is_searchable = true; /** * Results sort order * 'ASC' or 'DESC' * Only applicable of $orderby is not set * * @var string */ protected $order = 'ASC'; /** * Field results are sorted by * * @var string */ protected $orderby = 'name'; /** * Post ID for the current table * * @var int */ protected $post_id = null; /** * Retrieve data for the columns * * @since 3.4.0 * @since 3.33.0 Added action button to delete a cancelled enrollment. * @since 3.33.0 Added icon popover tooltip via llms tooltip data attribute api. * * @param string $key The column id / key. * @param LLMS_Student $student Student object. * @return mixed */ public function get_data( $key, $student ) { $value = ''; switch ( $key ) { case 'actions': if ( $student->is_enrolled( $this->post_id ) ) { $trigger = $student->get_enrollment_trigger( $this->post_id ); if ( false !== strpos( $trigger, 'order_' ) ) { $value = '<a class="llms-action-icon tip--top-left" href="' . get_edit_post_link( $student->get_enrollment_trigger_id( $this->post_id ) ) . '" target="_blank" data-tip="' . __( 'Visit the triggering order to manage this student\'s enrollment', 'lifterlms' ) . '"><span class="dashicons dashicons-external"></span></a>'; } else { if ( current_user_can( 'unenroll' ) ) { $value = '<a class="llms-action-icon llms-remove-student tip--top-left" data-id="' . $student->get_id() . '" href="#llms-student-remove" data-tip="' . __( 'Cancel Enrollment', 'lifterlms' ) . '"><span class="dashicons dashicons-no"></span></a>'; } } } else { if ( current_user_can( 'enroll' ) ) { $value = '<a class="llms-action-icon llms-add-student tip--top-left" data-id="' . $student->get_id() . '" href="#llms-student-add" data-tip="' . __( 'Reactivate Enrollment', 'lifterlms' ) . '"><span class="dashicons dashicons-update"></span></a>'; } if ( current_user_can( 'unenroll' ) ) { $value .= '<a class="llms-action-icon danger llms-delete-enrollment tip--top-left" data-id="' . $student->get_id() . '" href="#llms-student-delete-enrollment" data-tip="' . __( 'Delete Enrollment', 'lifterlms' ) . '"><span class="dashicons dashicons-trash"></span></a>'; } } break; case 'enrolled': $value = $student->get_enrollment_date( $this->post_id, 'updated' ); break; case 'grade': $value = $student->get_grade( $this->post_id ); break; case 'id': $id = $student->get_id(); if ( current_user_can( 'edit_users', $id ) ) { $value = '<a href="' . esc_url( get_edit_user_link( $id ) ) . '">' . $id . '</a>'; } else { $value = $id; } break; case 'last_lesson': $lid = $student->get_last_completed_lesson( $this->post_id ); if ( $lid ) { $value = $this->get_post_link( $lid, llms_trim_string( get_the_title( $lid ), 30 ) ); } else { $value = '–'; } break; case 'name': $first = $student->get( 'first_name' ); $last = $student->get( 'last_name' ); if ( ! $first || ! $last ) { $value = $student->get( 'display_name' ); } else { $value = $last . ', ' . $first; } $url = add_query_arg( array( 'page' => 'llms-reporting', 'tab' => 'students', 'student_id' => $student->get_id(), ), admin_url( 'admin.php' ) ); $value = '<a href="' . esc_url( $url ) . '">' . $value . '</a>'; break; case 'progress': $value = $student->get_progress( $this->post_id ) . '%'; break; case 'status': $value = llms_get_enrollment_status_name( $student->get_enrollment_status( $this->post_id ) ); break; case 'trigger': $trigger = $student->get_enrollment_trigger( $this->post_id ); if ( $trigger && false !== strpos( $trigger, 'order_' ) ) { $tid = $student->get_enrollment_trigger_id( $this->post_id ); $value = $this->get_post_link( $tid, sprintf( __( 'Order #%d', 'lifterlms' ), $tid ) ); } elseif ( $trigger && false !== strpos( $trigger, 'admin_' ) ) { $tid = $student->get_enrollment_trigger_id( $this->post_id ); $admin = llms_get_student( $tid ); $admin_name = $admin ? $admin->get_name() : __( '[Deleted]', 'lifterlms' ); $value = $this->get_user_link( $tid, sprintf( __( 'Admin: %1$s (#%2$d)', 'lifterlms' ), $admin_name, $tid ) ); } else { $value = $trigger; } break; default: $value = $key; }// End switch(). return $this->filter_get_data( $value, $key, $student ); } /** * Retrieve a list of IDs for all the users enrollments * * @param obj $student instance of LLMS_Student * @return array array of course ids * @since 3.4.0 * @version 3.4.0 */ private function get_enrollments( $student ) { $r = array(); $page = 1; $skip = 0; while ( true ) { $courses = $student->get_courses( array( 'limit' => 5000, 'skip' => 5000 * ( $page - 1 ), ) ); $r = array_merge( $courses['results'] ); if ( ! $courses['more'] ) { break; } else { $page++; } } return $r; } /** * Get the Text to be used as the placeholder in a searchable tables search input * * @return string * @since 3.4.0 * @version 3.4.0 */ public function get_table_search_form_placeholder() { return apply_filters( 'llms_gradebook_get_' . $this->id . '_search_placeholder', __( 'Search students by name or email...', 'lifterlms' ) ); } /** * Execute a query to retrieve results from the table * * @since 3.4.0 * @since 6.0.0 Don't access `LLMS_Student_Query` properties directly. * * @param array $args Array of query args. * @return void */ public function get_results( $args = array() ) { $this->title = __( 'Manage Existing Enrollments', 'lifterlms' ); if ( ! $args ) { $args = $this->get_args(); } $args = $this->clean_args( $args ); $this->post_id = $args['post_id']; if ( isset( $args['page'] ) ) { $this->current_page = absint( $args['page'] ); } $this->filter = isset( $args['filter'] ) ? $args['filter'] : $this->get_filter(); $this->filterby = isset( $args['filterby'] ) ? $args['filterby'] : $this->get_filterby(); $this->order = isset( $args['order'] ) ? $args['order'] : $this->get_order(); $this->orderby = isset( $args['orderby'] ) ? $args['orderby'] : $this->get_orderby(); $sort = array(); switch ( $this->get_orderby() ) { case 'enrolled': $sort = array( 'date' => $this->get_order(), 'last_name' => 'ASC', 'first_name' => 'ASC', 'id' => 'ASC', ); break; case 'id': $sort = array( 'id' => $this->get_order(), ); break; case 'name': $sort = array( 'last_name' => $this->get_order(), 'first_name' => 'ASC', 'id' => 'ASC', ); break; case 'status': $sort = array( 'status' => $this->get_order(), 'last_name' => 'ASC', 'first_name' => 'ASC', 'id' => 'ASC', ); break; } $query_args = array( 'page' => $this->get_current_page(), 'post_id' => $args['post_id'], 'per_page' => apply_filters( 'llms_' . $this->id . '_table_students_per_page', 20 ), 'sort' => $sort, ); if ( 'status' === $this->get_filterby() && 'any' !== $this->get_filter() ) { $query_args['statuses'] = array( $this->get_filter() ); } if ( isset( $args['search'] ) ) { $this->search = $args['search']; $query_args['search'] = $this->get_search(); } $query = new LLMS_Student_Query( $query_args ); $this->max_pages = $query->get_max_pages(); $this->is_last_page = $query->is_last_page(); $this->tbody_data = $query->get_students(); } /** * Define the structure of arguments used to pass to the get_results method * * @return array * @since 3.4.0 * @version 3.4.0 */ public function set_args() { if ( ! $this->post_id ) { global $post; $this->post_id = ! empty( $post->ID ) ? $post->ID : null; } return array( 'post_id' => $this->post_id, ); } /** * Define the structure of the table * * @return array * @since 3.4.0 * @version 3.4.0 */ public function set_columns() { $cols = array( 'id' => array( 'sortable' => true, 'title' => __( 'ID', 'lifterlms' ), ), 'name' => array( 'sortable' => true, 'title' => __( 'Name', 'lifterlms' ), ), 'status' => array( 'filterable' => llms_get_enrollment_statuses(), 'sortable' => true, 'title' => __( 'Status', 'lifterlms' ), ), 'enrolled' => array( 'sortable' => true, 'title' => __( 'Enrollment Updated', 'lifterlms' ), ), 'progress' => array( 'sortable' => false, 'title' => __( 'Progress', 'lifterlms' ), ), 'grade' => array( 'sortable' => false, 'title' => __( 'Grade', 'lifterlms' ), ), 'last_lesson' => array( 'sortable' => false, 'title' => __( 'Last Lesson', 'lifterlms' ), ), 'trigger' => array( 'sortable' => false, 'title' => __( 'Enrollment Trigger', 'lifterlms' ), ), 'actions' => array( 'sortable' => false, 'title' => ' ', ), ); $args = $this->get_args(); if ( 'llms_membership' === get_post_type( $args['post_id'] ) ) { unset( $cols['grade'] ); unset( $cols['progress'] ); unset( $cols['last_lesson'] ); } return $cols; } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- get_data — Retrieve data for the columns
- get_enrollments — Retrieve a list of IDs for all the users enrollments
- get_results — Execute a query to retrieve results from the table
- get_table_search_form_placeholder — Get the Text to be used as the placeholder in a searchable tables search input
- set_args — Define the structure of arguments used to pass to the get_results method
- set_columns — Define the structure of the table
Changelog Changelog
Version | Description |
---|---|
3.4.0 | |
3.33.0 | Introduced. |