WordPress.org

Make WordPress Core

Ticket #19867: user_autocomplete.2.diff

File user_autocomplete.2.diff, 11.6 KB (added by prettyboymp, 6 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) )
  • wp-admin/js/user-list.dev.js

     
     1(function($){
     2
     3userList = {
     4
     5        getQueryOptions : function(id_base) {
     6                var query_vars = [];
     7                $.each(eval(id_base + '_query_options'), function (key, value) {
     8                        query_vars.push(key + '=' + encodeURIComponent(value));
     9                })
     10                return query_vars.join('&');
     11        },
     12       
     13        init : function() {
     14                var t = this; uList = $('div.user-list');
     15               
     16                $(uList).each( function() {
     17                        var baseID = $(this).attr('id').substr(0, $(this).attr('id').length - 4);
     18                        var settings = {};
     19                        var option_none = $('#' + baseID + '-option-none').length ? $('#' + baseID + '-option-none').val() : '';
     20                        var option_all = $('#' + baseID + '-option-all').length ? $('#' + baseID + '-option-all').val() : '';
     21
     22                        var current_value = $('#' + baseID).val();
     23                        var nonce = $('#' + baseID + '-nonce').val();
     24                       
     25                        //keep return from causing form submission
     26                        $(this).bind('keypress', function(e) {
     27                                if(e.keyCode == 13) {
     28                                        e.preventDefault();
     29                                }
     30                        });
     31                                               
     32                        $('#' + baseID).autocomplete({
     33                                source: function( request, response) {
     34                                        if(request.length < 1) { //avoid
     35                                                data = [];
     36                                                if(option_none)
     37                                                        data.unshift({value: option_none, id:-1});
     38                                                if(option_none)
     39                                                        data.unshift({value: option_all, id:0});
     40                                                response(data);
     41                                        } else {
     42                                                $.getJSON( ajaxurl + '?action=ajax-user-search&nonce=' + nonce + '&' + t.getQueryOptions(baseID),
     43                                                request,
     44                                                function(data) {
     45                                                        if(option_none)
     46                                                                data.unshift({value: option_none, id:-1});
     47                                                        if(option_all)
     48                                                                data.unshift({value: option_all, id:0});
     49
     50                                                        response(data);
     51                                                });
     52                                        }
     53                                },
     54                                minLength: 0,
     55                                select: function( event, ui ) {
     56                                        if( ui.item ) {
     57                                                $('#' + baseID + '-value').val(ui.item.id);
     58                                                current_value = ui.item.value;
     59                                        }
     60                                },
     61                                change: function(event, ui) {
     62                                        $(this).val(current_value);
     63                                }
     64                        });
     65                });
     66               
     67               
     68                return;
     69        }
     70};
     71
     72})(jQuery);
     73
     74jQuery(document).ready( function($) {
     75        if ( $('.user-list').length ) {
     76                userList.init();
     77        }
     78});
     79 No newline at end of file