'select', '#title' => t("Roles to show"), '#default_value' => variable_get("members_roles", array()), '#options' => user_roles(1), '#description' => t("Select roles to show in the members listing."), '#extra' => 0, '#multiple' => 1, ); $form["members_fields"] = array( '#type' => 'select', '#title' => t("Columns to show"), '#default_value' => variable_get("members_fields", _member_fields()), '#options' => _member_fields(), '#description' => t("Select the fields which should be displayed on your members overview page. Note that some fields require certain modules to be active."), '#extra' => 0, '#multiple' => 1, ); return $form; } function members_menu($may_cache) { $items = array(); if ($may_cache) { $items[] = array('path' => 'members', 'title' => t("members"), 'callback' => "members_page", 'access' => user_access("access members list"), 'type' => MENU_MODIFIABLE_BY_ADMIN ); } return $items; } function members_perm() { return array("access members list"); } function members_page($rids = null) { if (user_access("access members list")) { // you may specify roles using second url argument. otherwise, use admin pref if ($rids) { $roles = explode(',', $rids); } else { $roles = variable_get("members_roles", array()); } if ($roles) { $fields = array(); $enabled_fields = variable_get("members_fields", _member_fields()); foreach (_member_fields() as $field => $data) { if (in_array($field, $enabled_fields)) { $fields[$field] = $data; } } foreach ($fields as $field => $data) { if (drupal_substr($field, 0, 8) == 'profile.') { $field = 'p.value'; } else if ($field == 'rid') { $field = ''; } $header[] = array("data" => $data, "field" => $field); } foreach ($roles as $rid) { $list[] = "'" . db_escape_string($rid) ."'"; } $list = implode(',', $list); $query = "SELECT (u.uid) FROM {users} u"; $sort = tablesort_get_order($header); if ($sort['sql'] == 'p.value') { $fieldid = db_result(db_query("SELECT fid FROM {profile_fields} WHERE name='%s'",drupal_substr(array_search($sort['name'], $fields), 8))); $query.= " LEFT JOIN {profile_values} p ON u.uid=p.uid WHERE (p.fid = '". db_escape_string($fieldid). "' OR p.fid IS NULL) AND"; } else { $query.= " WHERE u.status=1" . tablesort_sql($header); } /* $query = "SELECT DISTINCT(u.uid) FROM {users} u INNER JOIN {users_roles} r ON u.uid=r.uid"; $sort = tablesort_get_order($header); if ($sort['sql'] == 'p.value') { $fieldid = db_result(db_query("SELECT fid FROM {profile_fields} WHERE name='%s'",drupal_substr(array_search($sort['name'], $fields), 8))); $query.= " LEFT JOIN {profile_values} p ON u.uid=p.uid WHERE (p.fid = '". db_escape_string($fieldid). "' OR p.fid IS NULL) AND"; } else { $query.= " WHERE"; } $query.= " r.rid IN ($list) AND u.status=1" . tablesort_sql($header); */ $result = pager_query($query, 200); $rows = array(); $profile_fields = array(); while ($userid = db_fetch_object($result)) { $account = user_load(array('uid' => $userid->uid)); $row = array(); foreach ($fields as $field => $title) { $data = NULL; if (drupal_substr($field, 0, 8) == 'profile.') { $field = drupal_substr($field, 8); if (!$profile_fields[$field]) { $profile_fields[$field] = db_fetch_object(db_query("SELECT * FROM {profile_fields} WHERE name='%s'", $field)); } $data = profile_view_field($account, $profile_fields[$field]); } else if ($field == 'rid') { $data = array(); foreach ($account->roles as $rid => $role) { if (in_array($rid, $roles)) { $data[] = l($role, 'members/'.$rid); } } $data = implode (', ', $data); } else if ($field == 'picture') { $data = theme_user_picture($account); } else if ($field == 'changed') { $data = format_interval(time() - $account->changed); } else { $data = $account->$field; } if (stristr($field, 'name')) { $data = l($data, 'user/'.$account->uid); } $row[] = array('data' => $data); } $rows[] = $row; } if ($pager = theme("pager", NULL, 200, 0)) { $rows[] = array(array("data" => $pager, "colspan" => count($header))); } $output.= '