From e7a6f6f967367242d1e27ece18c85053e1a167d4 Mon Sep 17 00:00:00 2001 From: scribu Date: Fri, 27 Aug 2010 00:18:57 +0000 Subject: [PATCH] use get_users() in get_editable_user_ids() and cache result. See #14572 git-svn-id: http://svn.automattic.com/wordpress/trunk@15539 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/edit-form-advanced.php | 9 +++++---- wp-admin/includes/meta-boxes.php | 6 ++---- wp-admin/includes/user.php | 20 +++++++------------- wp-includes/user.php | 13 +++++++------ 4 files changed, 21 insertions(+), 27 deletions(-) diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php index a31fd4483..69a1aaee5 100644 --- a/wp-admin/edit-form-advanced.php +++ b/wp-admin/edit-form-advanced.php @@ -149,10 +149,11 @@ if ( !( 'pending' == $post->post_status && !current_user_can( $post_type_object- add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', $post_type, 'normal', 'core'); if ( post_type_supports($post_type, 'author') ) { - $authors = get_editable_user_ids( $current_user->id ); // TODO: ROLE SYSTEM - if ( $post->post_author && !in_array($post->post_author, $authors) ) - $authors[] = $post->post_author; - if ( ( $authors && count( $authors ) > 1 ) || is_super_admin() ) + $_editable_user_ids = get_editable_user_ids( $current_user->id, true, $post_type ); // TODO: ROLE SYSTEM + if ( $post->post_author && !in_array($post->post_author, $_editable_user_ids) ) + $_editable_user_ids[] = $post->post_author; + + if ( !empty($_editable_user_ids) || is_super_admin() ) add_meta_box('authordiv', __('Author'), 'post_author_meta_box', $post_type, 'normal', 'core'); } diff --git a/wp-admin/includes/meta-boxes.php b/wp-admin/includes/meta-boxes.php index 7ee3f6cf2..0b412b655 100644 --- a/wp-admin/includes/meta-boxes.php +++ b/wp-admin/includes/meta-boxes.php @@ -505,10 +505,8 @@ function post_slug_meta_box($post) { * @param object $post */ function post_author_meta_box($post) { - global $user_ID; - $authors = get_editable_user_ids( get_current_user_id(), true, $post->post_type ); // TODO: ROLE SYSTEM - if ( $post->post_author && !in_array($post->post_author, $authors) ) - $authors[] = $post->post_author; + global $user_ID, $_editable_user_ids; + ?> $authors, 'name' => 'post_author_override', 'selected' => empty($post->ID) ? $user_ID : $post->post_author) ); ?> get_blog_prefix() . 'user_level'; - else - $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels - - $query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key); - if ( $exclude_zeros ) - $query .= " AND meta_value != '0'"; - - return $wpdb->get_col( $query ); + return get_users( array('fields' => 'ids') ); } /** diff --git a/wp-includes/user.php b/wp-includes/user.php index 002c5c0c0..785fe6b7c 100644 --- a/wp-includes/user.php +++ b/wp-includes/user.php @@ -434,13 +434,14 @@ class WP_User_Query { } $role = trim( $qv['role'] ); - if ( $role ) { + + if ( $role || is_multisite() ) { $this->query_from .= " INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id"; - $this->query_where .= $wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $role . '%'); - } elseif ( is_multisite() ) { - $level_key = $wpdb->prefix . 'capabilities'; // wpmu site admins don't have user_levels - $this->query_from .= ", $wpdb->usermeta"; - $this->query_where .= " AND $wpdb->users.ID = $wpdb->usermeta.user_id AND meta_key = '{$level_key}'"; + $this->query_where .= $wpdb->prepare( " AND $wpdb->usermeta.meta_key = %s", $wpdb->prefix . 'capabilities' ); + } + + if ( $role ) { + $this->query_where .= $wpdb->prepare( " AND $wpdb->usermeta.meta_value LIKE %s", '%' . like_escape( $role ) . '%' ); } $meta_key = trim( $qv['meta_key'] );