Ticket #15871: caps.15871.2.diff
File caps.15871.2.diff, 6.1 KB (added by , 14 years ago) |
---|
-
wp-includes/user.php
377 377 if ( !empty( $query ) ) { 378 378 $this->query_vars = wp_parse_args( $query, array( 379 379 'blog_id' => $GLOBALS['blog_id'], 380 'capability' => '', 380 381 'role' => '', 381 382 'meta_key' => '', 382 383 'meta_value' => '', … … 403 404 * @access private 404 405 */ 405 406 function prepare_query() { 406 global $wpdb ;407 global $wpdb, $wp_roles; 407 408 408 409 $qv = &$this->query_vars; 409 410 … … 483 484 484 485 _parse_meta_query( $qv ); 485 486 487 $capability = trim( $qv['capability'] ); 486 488 $role = trim( $qv['role'] ); 487 489 $blog_id = absint( $qv['blog_id'] ); 488 490 489 if ( $blog_id && ( $role || is_multisite() ) ) { 490 $cap_meta_query = array(); 491 $cap_meta_query['key'] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities'; 491 if ( $blog_id ) { 492 if ( $capability ) { 493 foreach ( $wp_roles->role_objects as $role => $role_obj ) { 494 if ( !$role_obj->has_cap( $capability ) ) { 495 $qv['meta_query'][] = array( 496 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities', 497 'value' => '"' . $role . '"', 498 'compare' => 'NOT LIKE', 499 ); 500 } 501 } 502 } elseif ( $role || is_multisite() ) { 503 $cap_meta_query = array( 504 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities' 505 ); 492 506 493 if ( $role ) { 494 $cap_meta_query['value'] = '"' . $role . '"'; 495 $cap_meta_query['compare'] = 'like'; 507 if ( $role ) { 508 $cap_meta_query['value'] = '"' . $role . '"'; 509 $cap_meta_query['compare'] = 'LIKE'; 510 } 511 512 $qv['meta_query'][] = $cap_meta_query; 496 513 } 497 498 $qv['meta_query'][] = $cap_meta_query;499 514 } 500 515 501 516 if ( !empty( $qv['meta_query'] ) ) { … … 961 976 * <li>id - Default is the value of the 'name' parameter. ID attribute of select element.</li> 962 977 * <li>class - Class attribute of select element.</li> 963 978 * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.</li> 979 * <li>users - Raw array of users.</li> 964 980 * </ol> 965 981 * 966 982 * @since 2.3.0 … … 970 986 * @return string|null Null on display. String of HTML content on retrieve. 971 987 */ 972 988 function wp_dropdown_users( $args = '' ) { 973 global $wpdb;974 989 $defaults = array( 975 990 'show_option_all' => '', 'show_option_none' => '', 976 991 'orderby' => 'display_name', 'order' => 'ASC', 977 992 'include' => '', 'exclude' => '', 'multi' => 0, 978 993 'show' => 'display_name', 'echo' => 1, 979 'selected' => 0, 'name' => 'user', 'class' => '', ' blog_id' => $GLOBALS['blog_id'],980 ' id' => '',994 'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '', 995 'blog_id' => $GLOBALS['blog_id'], 'users' => null 981 996 ); 982 997 983 998 $defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0; … … 985 1000 $r = wp_parse_args( $args, $defaults ); 986 1001 extract( $r, EXTR_SKIP ); 987 1002 988 $query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order' ) ); 989 $query_args['fields'] = array( 'ID', $show ); 1003 if ( is_null( $users ) ) { 1004 $query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order' ) ); 1005 $query_args['fields'] = array( 'ID', $show ); 1006 $users = get_users( $query_args ); 1007 } 990 1008 991 $users = get_users( $query_args );992 993 1009 $output = ''; 994 1010 if ( !empty($users) ) { 995 1011 $name = esc_attr( $name ); -
wp-admin/includes/class-wp-posts-list-table.php
757 757 <?php touch_time( 1, 1, 4, 1 ); ?> 758 758 </div> 759 759 <br class="clear" /> 760 761 760 <?php endif; // $bulk 762 761 763 762 if ( post_type_supports( $screen->post_type, 'author' ) ) : 764 763 $authors_dropdown = ''; 765 764 766 765 if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) : 767 $users_opt = array( 768 'name' => 'post_author', 769 'class'=> 'authors', 770 'multi' => 1, 771 'echo' => 0 772 ); 773 if ( $bulk ) 774 $users_opt['show_option_none'] = __( '— No Change —' ); 775 $authors_dropdown = '<label>'; 776 $authors_dropdown .= '<span class="title">' . __( 'Author' ) . '</span>'; 777 $authors_dropdown .= wp_dropdown_users( $users_opt ); 778 $authors_dropdown .= '</label>'; 766 $users = _get_potential_authors(); 767 768 if ( count( $users ) > 1 ) : 769 $users_opt = array( 770 'users' => $users, 771 'name' => 'post_author', 772 'class'=> 'authors', 773 'multi' => 1, 774 'echo' => 0 775 ); 776 if ( $bulk ) 777 $users_opt['show_option_none'] = __( '— No Change —' ); 778 $authors_dropdown = '<label>'; 779 $authors_dropdown .= '<span class="title">' . __( 'Author' ) . '</span>'; 780 $authors_dropdown .= wp_dropdown_users( $users_opt ); 781 $authors_dropdown .= '</label>'; 782 endif; 779 783 endif; // authors 780 784 ?> 781 785 -
wp-admin/includes/meta-boxes.php
530 530 */ 531 531 function post_author_meta_box($post) { 532 532 global $user_ID; 533 534 533 ?> 535 534 <label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label> 536 535 <?php 537 536 wp_dropdown_users( array( 537 'users' => _get_potential_authors(), 538 538 'name' => 'post_author_override', 539 539 'selected' => empty($post->ID) ? $user_ID : $post->post_author 540 540 ) ); -
wp-admin/includes/template.php
2171 2171 return $button; 2172 2172 } 2173 2173 2174 // Get list of users for the author metabox and quick edit dropdowns 2175 function _get_potential_authors() { 2176 global $post_type; 2177 2178 $post_type_obj = get_post_type_object( $post_type ); 2179 2180 return get_users( array( 2181 'fields' => array( 'ID', 'display_name' ), 2182 'capability' => $post_type_obj->cap->edit_posts, 2183 'orderby' => 'display_name', 2184 'order' => 'ASC' 2185 ) ); 2186 } 2187