LLMS_Table_Quiz_Non_Attempts::get_results( array $args = array() )
Execute a query to retrieve results from the table.
Parameters Parameters
- $args
-
(array) (Optional) Array of query args.
Default value: array()
Return Return
(void)
Source Source
File: includes/admin/reporting/tables/llms.table.quiz.non.attempts.php
public function get_results( $args = array() ) {
$this->title = __( 'Students Without Quiz Attempts', 'lifterlms' );
$args = $this->clean_args( $args );
$this->quiz_id = $args['quiz_id'];
if ( isset( $args['page'] ) ) {
$this->current_page = absint( $args['page'] );
}
$per = apply_filters( 'llms_reporting_' . $this->id . '_per_page', 25 );
$order = isset( $args['order'] ) ? $args['order'] : $this->order;
$this->order = in_array( $order, array( 'ASC', 'DESC' ), true ) ? $order : 'ASC';
$this->orderby = isset( $args['orderby'] ) ? $args['orderby'] : $this->orderby;
$this->filter = isset( $args['filter'] ) ? $args['filter'] : $this->get_filter();
$this->filterby = isset( $args['filterby'] ) ? $args['filterby'] : $this->get_filterby();
if ( ! ( current_user_can( 'view_others_lifterlms_reports' ) || ( current_user_can( 'view_lifterlms_reports' ) && current_user_can( 'edit_post', $args['quiz_id'] ) ) ) ) {
return;
}
$quiz = llms_get_post( $this->quiz_id );
if ( ! $quiz ) {
return;
}
$course = $quiz->get_course();
if ( ! $course ) {
return;
}
// Use a single optimized database query.
global $wpdb;
$search_sql = '';
if ( isset( $args['search'] ) && ! empty( $args['search'] ) ) {
$search_term = sanitize_text_field( $args['search'] );
$search_sql = $wpdb->prepare(
'AND (
u.user_login LIKE %s
OR u.user_email LIKE %s
OR u.display_name LIKE %s
OR m_first.meta_value LIKE %s
OR m_last.meta_value LIKE %s
)',
'%' . $search_term . '%',
'%' . $search_term . '%',
'%' . $search_term . '%',
'%' . $search_term . '%',
'%' . $search_term . '%'
);
}
if ( 'any' !== $this->filter ) {
$status_sql = $wpdb->prepare( 'AND upm.meta_value = %s', $this->filter );
} else {
$status_sql = "AND upm.meta_value IN ('enrolled', 'expired', 'cancelled')";
}
switch ( $this->orderby ) {
case 'name':
$order_sql = 'ORDER BY m_last.meta_value ' . $this->order . ', m_first.meta_value ' . $this->order;
break;
case 'id':
$order_sql = 'ORDER BY u.ID ' . $this->order;
break;
case 'email':
$order_sql = 'ORDER BY u.user_email ' . $this->order;
break;
default:
$order_sql = 'ORDER BY u.display_name ' . $this->order;
}
$offset = ( $this->current_page - 1 ) * $per;
$from_joins_where = "FROM {$wpdb->users} u
INNER JOIN {$wpdb->prefix}lifterlms_user_postmeta upm
ON u.ID = upm.user_id
AND upm.post_id = %d
AND upm.meta_key = '_status'
{$status_sql}
LEFT JOIN {$wpdb->usermeta} m_first
ON u.ID = m_first.user_id
AND m_first.meta_key = 'first_name'
LEFT JOIN {$wpdb->usermeta} m_last
ON u.ID = m_last.user_id
AND m_last.meta_key = 'last_name'
LEFT JOIN {$wpdb->prefix}lifterlms_quiz_attempts qa
ON u.ID = qa.student_id
AND qa.quiz_id = %d
WHERE upm.updated_date = (
SELECT MAX(upm2.updated_date)
FROM {$wpdb->prefix}lifterlms_user_postmeta upm2
WHERE upm2.user_id = u.ID
AND upm2.post_id = %d
AND upm2.meta_key = '_status'
)
AND qa.id IS NULL
{$search_sql}";
$prepare_args = array(
$course->get( 'id' ),
$this->quiz_id,
$course->get( 'id' ),
);
$total_results = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(DISTINCT u.ID) {$from_joins_where}",
$prepare_args
)
); // db call ok; no-cache ok.
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT DISTINCT
u.ID as user_id,
u.user_email,
u.display_name,
u.user_registered,
m_first.meta_value as first_name,
m_last.meta_value as last_name,
upm.meta_value as enrollment_status,
upm.updated_date as enrollment_date
{$from_joins_where}
{$order_sql}
LIMIT %d, %d",
array_merge( $prepare_args, array( $offset, $per ) )
)
);
$this->max_pages = ceil( $total_results / $per );
$this->is_last_page = ( $this->current_page >= $this->max_pages );
$this->tbody_data = array();
if ( ! empty( $results ) ) {
foreach ( $results as $result ) {
$this->tbody_data[] = llms_get_student( $result->user_id );
}
}
}
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
| Version | Description |
|---|---|
| 9.1.0 | Introduced. |