123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- if ( ! class_exists( 'ACF_Ajax_Query_Users' ) ) :
- class ACF_Ajax_Query_Users extends ACF_Ajax_Query {
-
- var $action = 'acf/ajax/query_users';
-
- function init_request( $request ) {
- parent::init_request( $request );
-
- add_filter( 'user_search_columns', array( $this, 'filter_search_columns' ), 10, 3 );
-
- do_action( 'acf/ajax/query_users/init', $request, $this );
- }
-
- function get_args( $request ) {
- $args = parent::get_args( $request );
- $args['number'] = $this->per_page;
- $args['paged'] = $this->page;
- if ( $this->is_search ) {
- $args['search'] = "*{$this->search}*";
- }
-
- return apply_filters( 'acf/ajax/query_users/args', $args, $request, $this );
- }
-
- function prepare_args( $args ) {
-
- if ( isset( $args['users_per_page'] ) ) {
- $this->per_page = intval( $args['users_per_page'] );
- unset( $args['users_per_page'] );
- } elseif ( isset( $args['number'] ) ) {
- $this->per_page = intval( $args['number'] );
- }
- if ( isset( $args['paged'] ) ) {
- $this->page = intval( $args['paged'] );
- unset( $args['paged'] );
- }
-
- $args['number'] = $this->per_page;
- $args['offset'] = $this->per_page * ( $this->page - 1 );
- $args['count_total'] = true;
- return $args;
- }
-
- function get_results( $args ) {
- $results = array();
-
- $args = $this->prepare_args( $args );
-
- if ( ! empty( $args['role__in'] ) ) {
- $roles = acf_get_user_role_labels( $args['role__in'] );
- } else {
- $roles = acf_get_user_role_labels();
- }
-
- if ( $this->is_search || count( $roles ) === 1 ) {
-
- $wp_user_query = new WP_User_Query( $args );
- $users = (array) $wp_user_query->get_results();
- $total_users = $wp_user_query->get_total();
- foreach ( $users as $user ) {
- $results[] = $this->get_result( $user );
- }
-
-
- $this->more = ( $total_users > count( $users ) + $args['offset'] );
-
- } else {
-
- unset( $args['role__in'], $args['role__not_in'] );
-
- foreach ( $roles as $role => $role_label ) {
-
- $args['role'] = $role;
- $wp_user_query = new WP_User_Query( $args );
- $users = (array) $wp_user_query->get_results();
- $total_users = $wp_user_query->get_total();
-
-
-
-
- if ( $users ) {
-
- $role_results = array();
- foreach ( $users as $user ) {
- $role_results[] = $this->get_result( $user );
- }
- $results[] = array(
- 'text' => $role_label,
- 'children' => $role_results,
- );
-
- if ( count( $users ) === $args['number'] ) {
-
-
- $this->more = ( $total_users >= count( $users ) + $args['offset'] );
- break;
-
- } else {
- $args['offset'] = 0;
- $args['number'] -= count( $users );
- }
-
-
- } elseif ( $total_users ) {
- $args['offset'] -= $total_users;
- continue;
-
- } else {
- continue;
- }
- }
- }
-
- return apply_filters( 'acf/ajax/query_users/results', $results, $args, $this );
- }
-
- function get_result( $user ) {
- $item = acf_get_user_result( $user );
-
- return apply_filters( 'acf/ajax/query_users/result', $item, $user, $this );
- }
-
- function filter_search_columns( $columns, $search, $WP_User_Query ) {
-
- return apply_filters( 'acf/ajax/query_users/search_columns', $columns, $search, $WP_User_Query, $this );
- }
- }
- acf_new_instance( 'ACF_Ajax_Query_Users' );
- endif;
|