WordPress.org

Make WordPress Core

Ticket #19867: user_autocomplete.diff

File user_autocomplete.diff, 9.2 KB (added by prettyboymp, 4 years ago)
  • wp-includes/user.php

     
    973973 * <li>class - Class attribute of select element.</li> 
    974974 * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.</li> 
    975975 * <li>who - Which users to query. Currently only 'authors' is supported. Default is all users.</li> 
     976 * <li>number - Maximum number of users to list before switching to an alternate select box.  Default is 100</li> 
    976977 * </ol> 
    977978 * 
    978979 * @since 2.3.0 
     
    983984 */ 
    984985function wp_dropdown_users( $args = '' ) { 
    985986        $defaults = array( 
    986                 'show_option_all' => '', 'show_option_none' => '', 'hide_if_only_one_author' => '', 
    987                 'orderby' => 'display_name', 'order' => 'ASC', 
    988                 'include' => '', 'exclude' => '', 'multi' => 0, 
    989                 'show' => 'display_name', 'echo' => 1, 
    990                 'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '', 
    991                 'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false 
    992         ); 
    993  
     987                      'show_option_all' => '', 'show_option_none' => '', 'hide_if_only_one_author' => '', 
     988                      'orderby' => 'display_name', 'order' => 'ASC', 
     989                      'include' => '', 'exclude' => '', 'multi' => 0, 
     990                      'show' => 'display_name', 'echo' => 1, 
     991                      'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '', 
     992                      'number' => 100, 
     993                      'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false 
     994                      ); 
     995     
    994996        $defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0; 
    995  
     997     
    996998        $r = wp_parse_args( $args, $defaults ); 
    997999        extract( $r, EXTR_SKIP ); 
    998  
    999         $query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who' ) ); 
     1000     
     1001        $query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who', 'number' ) ); 
    10001002        $query_args['fields'] = array( 'ID', $show ); 
    1001         $users = get_users( $query_args ); 
    1002  
     1003        $user_search = new WP_User_Query($args); 
     1004         
    10031005        $output = ''; 
    1004         if ( !empty($users) && ( empty($hide_if_only_one_author) || count($users) > 1 ) ) { 
     1006        if ( $user_search->get_total() && ( empty($hide_if_only_one_author) || $user_search->total_users > 1 ) ) { 
    10051007                $name = esc_attr( $name ); 
    1006                 if ( $multi && ! $id ) 
    1007                         $id = ''; 
    1008                 else 
    1009                         $id = $id ? " id='" . esc_attr( $id ) . "'" : " id='$name'"; 
    1010  
    1011                 $output = "<select name='{$name}'{$id} class='$class'>\n"; 
    1012  
    1013                 if ( $show_option_all ) 
    1014                         $output .= "\t<option value='0'>$show_option_all</option>\n"; 
    1015  
    1016                 if ( $show_option_none ) { 
    1017                         $_selected = selected( -1, $selected, false ); 
    1018                         $output .= "\t<option value='-1'$_selected>$show_option_none</option>\n"; 
     1008                 
     1009                if($user_search->get_total() <= $number) { 
     1010                        if ( $multi && ! $id ) 
     1011                                $id = ''; 
     1012                        else 
     1013                                $id = $id ? " id='" . esc_attr( $id ) . "'" : " id='$name'"; 
     1014                         
     1015                        $output = "<select name='{$name}'{$id} class='$class'>\n"; 
     1016             
     1017                        if ( $show_option_all ) 
     1018                                $output .= "\t<option value='0'>$show_option_all</option>\n"; 
     1019             
     1020                        if ( $show_option_none ) { 
     1021                                $_selected = selected( -1, $selected, false ); 
     1022                                $output .= "\t<option value='-1'$_selected>$show_option_none</option>\n"; 
     1023                        } 
     1024             
     1025                        $found_selected = false; 
     1026                        foreach ( $user_search->get_results() as $user ) { 
     1027                                $user->ID = (int) $user->ID; 
     1028                                $_selected = selected( $user->ID, $selected, false ); 
     1029                                if ( $_selected ) 
     1030                                        $found_selected = true; 
     1031                                $display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')'; 
     1032                                $output .= "\t<option value='$user->ID'$_selected>" . esc_html($display) . "</option>\n"; 
     1033                        } 
     1034             
     1035                        if ( $include_selected && ! $found_selected && ( $selected > 0 ) ) { 
     1036                                $user = get_userdata( $selected ); 
     1037                                $_selected = selected( $user->ID, $selected, false ); 
     1038                                $display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')'; 
     1039                                $output .= "\t<option value='$user->ID'$_selected>" . esc_html($display) . "</option>\n"; 
     1040                        } 
     1041             
     1042                        $output .= "</select>"; 
     1043                } else { 
     1044                        wp_enqueue_script( 'user-list' ); 
     1045             
     1046                        $id = $id ? esc_attr( $id ) : $name; 
     1047                        $output = "<div class='user-list' id='{$id}-box'>\n"; 
     1048             
     1049                        $display = null; 
     1050             
     1051                        if ( ( $selected > 0 ) ) { 
     1052                                if ( $selected_user = get_userdata( $selected ) ) { 
     1053                                        if ( !$include_selected ) { 
     1054                                                $exclude = wp_parse_id_list( $exclude ); 
     1055                                                $selected_args = wp_array_slice_assoc( $r, array( 'blog_id', 'exclude', 'who' ) ); 
     1056                                                $selected_args['include'] = $selected; 
     1057                                                if ( !count( get_users( $selected_args ) ) ) 
     1058                                                        $selected = null; 
     1059                                        } 
     1060                                        if ( !is_null( $selected ) ) { 
     1061                                                $selected = $selected_user->ID; 
     1062                                                $display = !empty( $selected_user->$show ) ? $selected_user->$show : '(' . $selected_user->user_login . ')'; 
     1063                                        } 
     1064                                } else 
     1065                                        $selected = null; 
     1066                        } 
     1067             
     1068                        if ( $show_option_all ) { 
     1069                                $output .= "\t<input type='hidden' id='{$id}-option-all' value='" . esc_attr( $show_option_all ) . "' />\n"; 
     1070                                if ( is_null( $selected ) || $selected == 0 ) { 
     1071                                        $selected = 0; 
     1072                                        $display = $show_option_all; 
     1073                                } 
     1074                        } 
     1075             
     1076                        if ( $show_option_none ) { 
     1077                                $output .= "\t<input type='hidden' id='{$id}-option-none' value='" . esc_attr( $show_option_none ) . "' />\n"; 
     1078                                if ( is_null( $selected ) || $selected == -1 ) { 
     1079                                        $selected = -1; 
     1080                                        $display = $show_option_none; 
     1081                                } 
     1082                        } 
     1083             
     1084                        if ( is_null( $selected ) ) { 
     1085                                $selected_user = array_shift( $user_search->get_results() ); 
     1086                                $selected = $selected_user->ID; 
     1087                                $display = !empty( $selected_user->$show ) ? $selected_user->$show : '(' . $selected_user->user_login . ')'; 
     1088                        } 
     1089             
     1090                        $output .= "\t<input type='text'id='{$id}' value='" . esc_attr( $display ) . "' />\n" . 
     1091            "\t<input type='hidden' name='{$name}' id='{$id}-value' value='" . esc_attr( $selected ) . "' />\n"; 
     1092                        $output .= wp_nonce_field( 'user-search-' . $blog_id, "{$id}-nonce", false, false ); 
     1093                        $output .= "<script type='text/javascript'>\n" . 
     1094            "{$id}_query_options = " . json_encode( $query_args ) . "\n" . 
     1095            '</script>'; 
     1096                        $output .= "</div>"; 
    10191097                } 
    1020  
    1021                 $found_selected = false; 
    1022                 foreach ( (array) $users as $user ) { 
    1023                         $user->ID = (int) $user->ID; 
    1024                         $_selected = selected( $user->ID, $selected, false ); 
    1025                         if ( $_selected ) 
    1026                                 $found_selected = true; 
    1027                         $display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')'; 
    1028                         $output .= "\t<option value='$user->ID'$_selected>" . esc_html($display) . "</option>\n"; 
    1029                 } 
    1030  
    1031                 if ( $include_selected && ! $found_selected && ( $selected > 0 ) ) { 
    1032                         $user = get_userdata( $selected ); 
    1033                         $_selected = selected( $user->ID, $selected, false ); 
    1034                         $display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')'; 
    1035                         $output .= "\t<option value='$user->ID'$_selected>" . esc_html($display) . "</option>\n"; 
    1036                 } 
    1037  
    1038                 $output .= "</select>"; 
    10391098        } 
    1040  
     1099     
    10411100        $output = apply_filters('wp_dropdown_users', $output); 
    1042  
     1101     
    10431102        if ( $echo ) 
    10441103                echo $output; 
    1045  
     1104     
    10461105        return $output; 
    10471106} 
    10481107 
  • wp-includes/script-loader.php

     
    259259        ) ); 
    260260 
    261261        $scripts->add( 'user-profile', "/wp-admin/js/user-profile$suffix.js", array( 'jquery', 'password-strength-meter' ), false, 1 ); 
     262     
     263        $scripts->add( 'user-list', "/wp-admin/js/user-list$suffix.js", array( 'jquery', 'jquery-ui-autocomplete' ), '20120111', 1 ); 
    262264 
    263265        $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 ); 
    264266 
  • wp-admin/admin-ajax.php

     
    9898        echo join( $results, "\n" ); 
    9999        die; 
    100100        break; 
     101 
    101102case 'wp-compression-test' : 
    102103        if ( !current_user_can( 'manage_options' ) ) 
    103104                die('-1'); 
     
    142143 
    143144        die('0'); 
    144145        break; 
     146case 'ajax-user-search' : 
     147        $list = array( ); 
     148        if ( !empty( $_GET['term'] ) ) { 
     149                $defaults = array( 
     150                          'include' => '', 'exclude' => '', 
     151                          'show' => 'display_name', 
     152                          'number' => 20, 
     153                          'blog_id' => $GLOBALS['blog_id'], 'who' => '' 
     154                          ); 
     155                $args = wp_parse_args( $_GET, $defaults ); 
     156                $args['search'] = '*' . stripslashes( $_GET['term'] ) . '*'; 
     157         
     158                $search_args = wp_array_slice_assoc( $args, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who', 'search' ) ); 
     159                $show = $args['show']; 
     160                check_ajax_referer( 'user-search-' . $args['blog_id'], 'nonce' ); 
     161         
     162                $user_query = new WP_User_Query( $search_args ); 
     163                foreach ( $user_query->get_results() as $user ) { 
     164                        $display = !empty( $user->$show ) ? $user->$show : '(' . $user->user_login . ')'; 
     165                        $list[] = array( 'value' => $display, 'id' => $user->ID ); 
     166                } 
     167        } 
     168        die( json_encode( $list ) ); 
     169        break; 
    145170case 'imgedit-preview' : 
    146171        $post_id = intval($_GET['postid']); 
    147172        if ( empty($post_id) || !current_user_can('edit_post', $post_id) )