Ticket #19867: user_autocomplete.2.diff
File user_autocomplete.2.diff, 11.6 KB (added by , 13 years ago) |
---|
-
wp-includes/user.php
973 973 * <li>class - Class attribute of select element.</li> 974 974 * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.</li> 975 975 * <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> 976 977 * </ol> 977 978 * 978 979 * @since 2.3.0 … … 983 984 */ 984 985 function wp_dropdown_users( $args = '' ) { 985 986 $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 994 996 $defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0; 995 997 996 998 $r = wp_parse_args( $args, $defaults ); 997 999 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' ) ); 1000 1002 $query_args['fields'] = array( 'ID', $show ); 1001 $user s = get_users( $query_args);1002 1003 $user_search = new WP_User_Query($args); 1004 1003 1005 $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 ) ) { 1005 1007 $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>"; 1019 1097 } 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>";1039 1098 } 1040 1099 1041 1100 $output = apply_filters('wp_dropdown_users', $output); 1042 1101 1043 1102 if ( $echo ) 1044 1103 echo $output; 1045 1104 1046 1105 return $output; 1047 1106 } 1048 1107 -
wp-includes/script-loader.php
259 259 ) ); 260 260 261 261 $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 ); 262 264 263 265 $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 ); 264 266 -
wp-admin/admin-ajax.php
98 98 echo join( $results, "\n" ); 99 99 die; 100 100 break; 101 101 102 case 'wp-compression-test' : 102 103 if ( !current_user_can( 'manage_options' ) ) 103 104 die('-1'); … … 142 143 143 144 die('0'); 144 145 break; 146 case '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; 145 170 case 'imgedit-preview' : 146 171 $post_id = intval($_GET['postid']); 147 172 if ( empty($post_id) || !current_user_can('edit_post', $post_id) ) -
wp-admin/js/user-list.dev.js
1 (function($){ 2 3 userList = { 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 74 jQuery(document).ready( function($) { 75 if ( $('.user-list').length ) { 76 userList.init(); 77 } 78 }); 79 No newline at end of file