WordPress.org

Make WordPress Core

Ticket #19867: wp_suggest_users.alpha.1.diff

File wp_suggest_users.alpha.1.diff, 7.4 KB (added by mpvanwinkle77, 15 months ago)
  • wp-includes/user.php

     
    10231023                'include' => '', 'exclude' => '', 'multi' => 0, 
    10241024                'show' => 'display_name', 'echo' => 1, 
    10251025                'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '', 
    1026                 'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false 
     1026                'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false, 
     1027                'select_max' => 1000, 'suggest_max' => false, 'autocomplete' => false, 
    10271028        ); 
    10281029 
    10291030        $defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0; 
    10301031 
    10311032        $r = wp_parse_args( $args, $defaults ); 
     1033 
     1034        //lets bail if we have a large network or a ton of users 
     1035        $site_user_count = get_user_count(); 
     1036        if( $site_user_count > $r['select_max'] OR @$r['autocomplete'] )  
     1037                return wp_suggest_users( $r ); 
     1038         
    10321039        extract( $r, EXTR_SKIP ); 
    10331040 
    10341041        $query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who' ) ); 
     
    10821089} 
    10831090 
    10841091/** 
     1092 * Create an autocomplete HTML field for users. 
     1093 * 
     1094 * The content can either be displayed, which it is by default or retrieved by 
     1095 * setting the 'echo' argument. The 'include' and 'exclude' arguments do not 
     1096 * need to be used; all users will be displayed in that case. Only one can be 
     1097 * used, either 'include' or 'exclude', but not both. 
     1098 * @todo Document options 
     1099 * @todo pass include exclude values to JS 
     1100 * @todo test front end usage 
     1101 * 
     1102**/ 
     1103function wp_suggest_users( $args ) { 
     1104        $defaults = array( 
     1105                'include' => '', 'exclude' => '', 'multi' => 0, 'type'=> 'search', 
     1106                'show' => 'display_name', 'echo' => 1, 'selected' => 0,  
     1107                'name' => 'user', 'class' => '', 'id' => 'user', 
     1108                'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false, 
     1109                'table_wrap' => true, 'limit' => 1000,  
     1110        ); 
     1111 
     1112        $defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0; 
     1113 
     1114        extract( wp_parse_args( $args, $defaults ), EXTR_SKIP );         
     1115         
     1116        wp_enqueue_script('user-suggest'); 
     1117         
     1118        //if a selected user was passed lets's get their display fiels 
     1119        if( $selected > 0 ) { 
     1120                if( is_array( $selected ) ) { 
     1121                        $users = array(); 
     1122                        foreach( $selected as $user ) { 
     1123                                $user = get_userdata( $user ); 
     1124                                $users[] = $user->data->$show; 
     1125                        } 
     1126                        $selected = implode(', ', $users); 
     1127                } else { 
     1128                        $user = get_userdata( $selected ); 
     1129                        $selected = $user->data->$show; 
     1130                        $selected_value = $user->data->ID; 
     1131                } 
     1132        } else { 
     1133                $selected = false; 
     1134        } 
     1135 
     1136         
     1137        $output = ''; 
     1138        $label = __('E-mail or Username'); 
     1139        $label = "<label for='post_author'>$label</label>"; 
     1140        $input = "<input name='$name' type='text' id='$id' class='wp-suggest-user $class' data-original='$selected' data-target='$name' data-type='$type' data-limit='$limit' data-return-field='$show' data-include='$include' data-exclude='$exclude' value='$selected' />\n"; 
     1141         
     1142        //if we're in the admin lets wrap in the standard form table class 
     1143        if( is_admin() OR @$table_wrap ) 
     1144                $output = "<table class='form-table'><tr class='form-field'>\n<th scope='row'>$label</th>\n<td>$input\n</td>\n</tr></table>"; 
     1145        else  
     1146                $output = "$label\n$input"; 
     1147         
     1148        $output = apply_filters( 'wp-suggest-users', $output ); 
     1149 
     1150        if( $echo )  
     1151                echo $output; 
     1152         
     1153        return $output; 
     1154} 
     1155 
     1156/** 
    10851157 * Sanitize user field based on context. 
    10861158 * 
    10871159 * Possible context values are:  'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The 
  • wp-admin/includes/ajax-actions.php

     
    167167 
    168168        $include_blog_users = ( $type == 'search' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); 
    169169        $exclude_blog_users = ( $type == 'add' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); 
     170         
     171        $number = @$_REQUEST['number'] ?: ''; 
    170172 
    171173        $users = get_users( array( 
    172174                'blog_id' => false, 
     
    174176                'include' => $include_blog_users, 
    175177                'exclude' => $exclude_blog_users, 
    176178                'search_columns' => array( 'user_login', 'user_nicename', 'user_email' ), 
     179                'number'  => $number,  
    177180        ) ); 
    178181 
     182        $return_field = @$_REQUEST['return_field'] ?: 'user_login'; 
     183 
    179184        foreach ( $users as $user ) { 
    180185                $return[] = array( 
    181186                        /* translators: 1: user_login, 2: user_email */ 
    182187                        'label' => sprintf( __( '%1$s (%2$s)' ), $user->user_login, $user->user_email ), 
    183                         'value' => $user->user_login, 
     188                        'value' => $user->$return_field, 
    184189                ); 
     190                 
    185191        } 
    186192 
    187193        wp_die( json_encode( $return ) ); 
  • wp-admin/includes/post.php

     
    5656                $post_data['user_ID'] = $GLOBALS['user_ID']; 
    5757 
    5858        if (!empty ( $post_data['post_author_override'] ) ) { 
     59                if( is_string( $post_data['post_author_override'] ) ) { 
     60                        //check for commas cuz we can only have one 
     61                        $postauthor = $post_data['post_author_override']; 
     62                        if(  strpos( $postpostauthor , ',') ) 
     63                                $postauthor = substr( $postauthor , 0,  strpos( $postauthor , ',')  ); 
     64                        $postauthor = get_user_by( 'login', $postauthor ); 
     65                        $post_data['post_author_override'] = $postauthor->data->ID; 
     66                } 
    5967                $post_data['post_author'] = (int) $post_data['post_author_override']; 
    6068        } else { 
    6169                if (!empty ( $post_data['post_author'] ) ) { 
  • wp-admin/includes/meta-boxes.php

     
    591591                'who' => 'authors', 
    592592                'name' => 'post_author_override', 
    593593                'selected' => empty($post->ID) ? $user_ID : $post->post_author, 
    594                 'include_selected' => true 
     594                'include_selected' => true, 
     595                'limit'         => 100, 
     596                'show'          => 'user_login', 
    595597        ) ); 
    596598} 
    597599 
     
    979981function post_thumbnail_meta_box( $post ) { 
    980982        $thumbnail_id = get_post_meta( $post->ID, '_thumbnail_id', true ); 
    981983        echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID ); 
    982 } 
    983  No newline at end of file 
     984} 
  • wp-admin/js/user-suggest.js

     
    11(function($) { 
    22        var id = 'undefined' !== typeof current_site_id ? '&site_id=' + current_site_id : ''; 
    3         $(document).ready( function() { 
     3        $(document).ready( function() {  
     4                var type = $('.wp-suggest-user').attr('data-type'); 
     5                type = 'undefined' !== typeof type ? '&autocomplete_type=' + type : ''; 
     6                var return_field = $('.wp-suggest-user').attr('data-return-field'); 
     7                return_field = 'undefined' !== typeof return_field ? '&return_field=' + return_field : ''; 
     8                var limit = $('.wp-suggest-user').attr('data-limit'); 
     9                limit = 'undefined' !== typeof limit ? '&number=' + limit : '' ; 
     10 
    411                $( '.wp-suggest-user' ).autocomplete({ 
    5                         source:    ajaxurl + '?action=autocomplete-user&autocomplete_type=add' + id, 
     12                        source:    ajaxurl + '?action=autocomplete-user' + type + id + return_field + limit, 
    613                        delay:     500, 
    714                        minLength: 2, 
    815                        position:  ( 'undefined' !== typeof isRtl && isRtl ) ? { my: 'right top', at: 'right bottom', offset: '0, -1' } : { offset: '0, -1' }, 
     
    1017                        close:     function() { $(this).removeClass('open'); } 
    1118                }); 
    1219        }); 
    13 })(jQuery); 
    14  No newline at end of file 
     20})(jQuery);