Warning: This method has been deprecated. LLMS_AJAX_Handler::query_students() is deprecated in favor of the REST API list students endpoint instead.
LLMS_AJAX_Handler::query_students()
Retrieve Students.
Description Description
Used by Select2 AJAX functions to load paginated student results. Also allows querying by: first name last name email.
Return Return
(void)
Source Source
File: includes/class.llms.ajax.handler.php
* * @return void */ public static function query_students() { _deprecated_function( __METHOD__, '6.2.0', 'the REST API list students endpoint' ); // Grab the search term if it exists. $term = array_key_exists( 'term', $_REQUEST ) ? llms_filter_input_sanitize_string( INPUT_POST, 'term', array( FILTER_FLAG_NO_ENCODE_QUOTES ) ) : ''; $page = array_key_exists( 'page', $_REQUEST ) ? llms_filter_input( INPUT_POST, 'page', FILTER_SANITIZE_NUMBER_INT ) : 0; $enrolled_in = array_key_exists( 'enrolled_in', $_REQUEST ) ? sanitize_text_field( wp_unslash( $_REQUEST['enrolled_in'] ) ) : null; $not_enrolled_in = array_key_exists( 'not_enrolled_in', $_REQUEST ) ? sanitize_text_field( wp_unslash( $_REQUEST['not_enrolled_in'] ) ) : null; $roles = array_key_exists( 'roles', $_REQUEST ) ? sanitize_text_field( wp_unslash( $_REQUEST['roles'] ) ) : null; global $wpdb; $limit = 30; $start = $limit * $page; $vars = array(); $roles_sql = ''; if ( $roles ) { $roles = explode( ',', $roles ); $roles = array_map( 'trim', $roles ); $total = count( $roles ); foreach ( $roles as $i => $role ) { $roles_sql .= "roles.meta_value LIKE '%s'"; $vars[] = '%"' . $role . '"%'; if ( $total > 1 && $i + 1 !== $total ) { $roles_sql .= ' OR '; } } $roles_sql = "JOIN $wpdb->usermeta AS roles ON $wpdb->users.ID = roles.user_id AND roles.meta_key = '{$wpdb->prefix}capabilities' AND ( $roles_sql ) "; } // there was a search query. if ( $term ) { // email only. if ( false !== strpos( $term, '@' ) ) { $query = "SELECT ID AS id , user_email AS email , display_name AS name FROM $wpdb->users $roles_sql WHERE user_email LIKE '%s' ORDER BY display_name LIMIT %d, %d;"; $vars = array_merge( $vars, array( '%' . $term . '%', $start, $limit, ) ); } elseif ( false !== strpos( $term, ' ' ) ) { $term = explode( ' ', $term ); $query = "SELECT users.ID AS id , users.user_email AS email , users.display_name AS name FROM $wpdb->users AS users $roles_sql LEFT JOIN wp_usermeta AS fname ON fname.user_id = users.ID LEFT JOIN wp_usermeta AS lname ON lname.user_id = users.ID WHERE ( fname.meta_key = 'first_name' AND fname.meta_value LIKE '%s' ) AND ( lname.meta_key = 'last_name' AND lname.meta_value LIKE '%s' ) ORDER BY users.display_name LIMIT %d, %d;"; $vars = array_merge( $vars, array( '%' . $term[0] . '%', // first name. '%' . $term[1] . '%', // last name. $start, $limit, ) ); // search for login, display name, or email. } else { $query = "SELECT ID AS id , user_email AS email , display_name AS name FROM $wpdb->users $roles_sql WHERE user_email LIKE '%s' OR user_login LIKE '%s' OR display_name LIKE '%s' ORDER BY display_name LIMIT %d, %d;"; $vars = array_merge( $vars, array( '%' . $term . '%', '%' . $term . '%', '%' . $term . '%', $start, $limit, ) ); } } else { $query = "SELECT ID AS id , user_email AS email , display_name AS name FROM $wpdb->users $roles_sql ORDER BY display_name LIMIT %d, %d;"; $vars = array_merge( $vars, array( $start, $limit, ) ); } $res = $wpdb->get_results( $wpdb->prepare( $query, $vars ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared if ( $enrolled_in ) { $checks = explode( ',', $enrolled_in ); $checks = array_map( 'trim', $checks ); // Loop through each user. foreach ( $res as $key => $user ) { // Loop through each check -- this is an OR relationship situation. foreach ( $checks as $id ) { // If the user is enrolled break to the next user, they can stay. if ( llms_is_user_enrolled( $user->id, $id ) ) { continue 2; } } // If we get here that means the user isn't enrolled in any of the check posts remove them from the results. unset( $res[ $key ] ); } } if ( $not_enrolled_in ) { $checks = explode( ',', $enrolled_in ); $checks = array_map( 'trim', $checks ); // Loop through each user. foreach ( $res as $key => $user ) { // Loop through each check -- this is an OR relationship situation. // If the user is enrolled in any of the courses they need to be filtered out. foreach ( $checks as $id ) { // If the user is enrolled break remove them and break to the next user. if ( llms_is_user_enrolled( $user->id, $id ) ) { unset( $res[ $key ] ); continue 2; } } } } echo json_encode( array( 'items' => $res, 'more' => count( $res ) === $limit, 'success' => true, ) );
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
6.2.0 | LLMS_AJAX_Handler::query_students() is deprecated in favor of the REST API list students endpoint. |
5.9.0 | Stop using deprecated FILTER_SANITIZE_STRING . |
5.5.0 | Do not encode quotes when sanitizing search term. |
3.14.2 | Introduced. |