function get_user_level($user_ids) { static $user_levels; $return_array = is_array($user_ids); // if an array was passed in, return results as an array if (!is_array($user_ids)) { if (IS_MU_RS && function_exists('is_super_admin') && is_super_admin()) { // mu site administrator may not be a user for the current blog return 10; } $orig_user_id = $user_ids; $user_ids = (array) $user_ids; } if (!isset($user_levels)) { $user_levels = array(); } if (array_diff($user_ids, array_keys($user_levels))) { // one or more of the users were not already logged $role_levels = ScoperUserEdit::get_role_levels(); // local buffer for performance // If the listed user ids were logged following a search operation, save extra DB queries by getting the levels of all those users now global $wp_user_search; if (!empty($wp_user_search->results)) { $query_users = $wp_user_search->results; $query_users = array_unique(array_merge($query_users, $user_ids)); } else { $query_users = $user_ids; } // get the WP roles for user global $wpdb; $results = scoper_get_results("SELECT user_id, role_name FROM {$wpdb->user2role2object_rs} WHERE scope = 'blog' AND role_type = 'wp' AND user_id IN ('" . implode("','", array_map('intval', $query_users)) . "')"); //echo("SELECT user_id, role_name FROM $wpdb->user2role2object_rs WHERE scope = 'blog' AND role_type = 'wp' AND user_id IN ('" . implode( "','", $query_users ) . "')"); // credit each user for the highest role level they have foreach ($results as $row) { if (!isset($role_levels[$row->role_name])) { continue; } if (!isset($user_levels[$row->user_id]) || $role_levels[$row->role_name] > $user_levels[$row->user_id]) { $user_levels[$row->user_id] = $role_levels[$row->role_name]; } } // note any "No Role" users if ($no_role_users = array_diff($query_users, array_keys($user_levels))) { $user_levels = $user_levels + array_fill_keys($no_role_users, 0); } } if ($return_array) { $return = array_intersect_key($user_levels, array_fill_keys($user_ids, true)); } else { $return = isset($user_levels[$orig_user_id]) ? $user_levels[$orig_user_id] : 0; } return $return; }
function flt_has_edit_user_cap($wp_blogcaps, $orig_reqd_caps, $args) { if (!defined('DISABLE_QUERYFILTERS_RS') && (in_array('edit_users', $orig_reqd_caps) || in_array('delete_users', $orig_reqd_caps)) && !empty($args[2])) { if (scoper_get_option('limit_user_edit_by_level')) { require_once dirname(__FILE__) . '/user_lib_rs.php'; $wp_blogcaps = ScoperUserEdit::has_edit_user_cap($wp_blogcaps, $orig_reqd_caps, $args); } } return $wp_blogcaps; }