function get_group_members($group_id, $cols = COLS_ALL_RS, $maybe_metagroup = false, $args = array()) { global $wpdb; // If $group_id is an array of group objects, extract IDs into a separate array if (is_array($group_id)) { $first = current($group_id); if (is_object($first)) { $actual_ids = array(); foreach ($group_id as $group) { $actual_ids[] = $group->ID; } $group_id = $actual_ids; } } if (empty($args['status'])) { $status = 'active'; } elseif ('any' == $args['status']) { $args['no_cache'] = true; $status = ''; } else { $args['no_cache'] = true; $status = $args['status']; } if (!is_array($group_id) && empty($args['no_cache'])) { $cache_flag = 'group_members'; $cache_id = $group_id; $cache = wpp_cache_get($cache_id, $cache_flag); $ckey = md5(serialize($cols) . $maybe_metagroup); if (isset($cache[$ckey])) { return $cache[$ckey]; } } $group_in = "'" . implode("', '", (array) $group_id) . "'"; $status_clause = $status ? "AND status = '{$status}'" : ''; if (COL_ID_RS == $cols) { $query = "SELECT gu.{$wpdb->user2group_uid_col} \r\n\t FROM {$wpdb->user2group_rs} gu\r\n\t WHERE gu.{$wpdb->user2group_gid_col} IN ({$group_in}) {$status_clause}"; if (!($results = scoper_get_col($query))) { $results = array(); } } else { switch ($cols) { case COLS_ID_DISPLAYNAME_RS: $qcols = "u.ID, u.display_name"; break; case COLS_ID_NAME_RS: $qcols = "u.ID, u.user_login AS display_name"; // calling code assumes display_name property for user or group object break; default: $qcols = "u.*"; } $query = "SELECT {$qcols} FROM {$wpdb->users} AS u" . " INNER JOIN {$wpdb->user2group_rs} AS gu ON gu.{$wpdb->user2group_uid_col} = u.ID {$status_clause} " . " AND gu.{$wpdb->user2group_gid_col} IN ({$group_in}) ORDER BY u.display_name"; $results = scoper_get_results($query); } if ($maybe_metagroup && (is_array($group_id) || !$results)) { $meta_ids = scoper_get_col("SELECT group_meta_id FROM {$wpdb->groups_rs} WHERE {$wpdb->groups_id_col} IN ({$group_in})"); foreach ($meta_ids as $meta_id) { if (0 === strpos($meta_id, 'wp_role_')) { $role_name = substr($meta_id, 8); if ($_results = ScoperAdminLib::get_blogrole_users($role_name, 'wp', $cols)) { $results = array_merge($results, $_results); } } } } if (!is_array($group_id) && empty($args['no_cache'])) { $cache[$ckey] = $results; wpp_cache_set($cache_id, $cache, $cache_flag); } return $results; }