Ejemplo n.º 1
0
 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;
 }