WordPress.org

Make WordPress Core

Ticket #5540: get_users_with_cap.patch

File get_users_with_cap.patch, 1.8 KB (added by tellyworth, 10 years ago)

sample implementation of get_users_with_cap()

  • wp-includes/capabilities.php

     
    7171                if ( $this->use_db )
    7272                        update_option($this->role_key, $this->roles);
    7373        }
     74       
     75        function has_cap($role, $cap) {
     76                return !empty($this->roles[$role]['capabilities'][$cap]);
     77        }
    7478
    7579        function &get_role($role) {
    7680                if ( isset($this->role_objects[$role]) )
     
    8791        {
    8892                return isset($this->role_names[$role]);
    8993        }
     94       
     95        function get_roles_with_cap($cap) {
     96                $out = array();
     97                foreach ( array_keys($this->roles) as $role ) {
     98                        if ( $this->has_cap($role, $cap) )
     99                                $out[] = $role;
     100                }
     101                return $out;
     102        }
    90103}
    91104
    92105class WP_Role {
     
    504517        return $wp_roles->is_role($role);
    505518}
    506519
     520function get_roles_with_cap($cap) {
     521        global $wp_roles;
     522
     523        if ( ! isset($wp_roles) )
     524                $wp_roles = new WP_Roles();
     525
     526        return $wp_roles->get_roles_with_cap($cap);
     527}
     528
    507529?>
  • wp-includes/user.php

     
    5656        return $users;
    5757}
    5858
     59// Get users with a given capability for the current blog
     60function get_users_with_cap( $cap, $id = '' ) {
     61        global $wpdb, $blog_id;
     62        if ( empty($id) )
     63                $id = (int) $blog_id;
     64
     65        $roles = get_roles_with_cap( $cap );
     66        if ( empty($roles) )
     67                return array();
     68        $roles = add_magic_quotes($roles);
     69       
     70        $users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, role FROM {$wpdb->users}, {$wpdb->user_role} WHERE {$wpdb->users}.ID = {$wpdb->user_role}.user_id AND {$wpdb->user_role}.role IN ('".implode("','", $roles)."') GROUP BY user_id ORDER BY {$wpdb->user_role}.user_id" );
     71        return $users;
     72}
     73
     74
    5975//
    6076// User meta functions
    6177//