Index: members.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/members/members.module,v
retrieving revision 1.36.2.2
diff -u -F^f -r1.36.2.2 members.module
--- members.module	3 Mar 2006 17:56:52 -0000	1.36.2.2
+++ members.module	30 Jan 2007 19:29:24 -0000
@@ -10,12 +10,47 @@ function members_help($section) {
 }
 
 function members_settings() {
-  $output = form_select(t("Roles to show"), "members_roles", variable_get("members_roles", array()), user_roles(1), t("Select roles to show in the members listing."), 0, 1);
-  $output .= form_select(t("Columns to show"), "members_fields", variable_get("members_fields", _member_fields()), _member_fields(), t("Select the fields which should be displayed on your members overview page. Note that some fields require certain modules to be active."), 0, 1);
 
-  $output .= form_checkbox(t('Obfuscate e-mail addresses using javascript'), 'members_encode_mailto', 1, variable_get('members_encode_mailto', 1), t('When checked, email addresses will not be included directly in the HTML source to deter spam crawlers. Note: this requires users have a javascript-enabled browser'));
-  $output .= form_textfield(t('Truncated field length'), 'members_field_length', variable_get('members_field_length', 0), 4, 6, t('If set (and non zero), all fields will be truncated to this length (in characters) to preserve table layouts'));
-  return $output;
+  $form['members_roles'] = array(
+    '#type' => '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,
+    '#size' => 5,
+  );
+
+  $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,
+    '#size' => 5,
+  );
+
+  $form['members_encode_mailto'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Obfuscate e-mail addresses using JavaScript'),
+    '#return_value' => 1,
+    '#default_value' => variable_get('members_encode_mailto', 1),
+    '#description' => t('When checked, email addresses will not be included directly in the HTML source to deter spam crawlers. Note: this requires users have a JavaScript-enabled browser.'),
+   );
+
+  $form['members_field_length'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Truncated field length'),
+    '#default_value' => variable_get('members_field_length', 0),
+    '#size' => 4,
+    '#maxlength' => 6,
+    '#description' => t('If set (and non-zero), all fields will be truncated to this length (in characters) to preserve table layouts.'),
+   );
+
+  return $form;
 }
 
 function members_menu($may_cache) {
@@ -50,7 +85,6 @@ function members_page($rids = null) {
     }
 
     if ($roles) {
-
       $fields = array();
       $enabled_fields = variable_get("members_fields", _member_fields());
       foreach (_member_fields() as $field => $data) {
@@ -59,7 +93,7 @@ function members_page($rids = null) {
         }
       }
       foreach ($fields as $field => $data) {
-        if (substr($field, 0, 8) == 'profile.') {
+        if (drupal_substr($field, 0, 8) == 'profile.') {
           $field = 'p.value';
         } else if ($field == 'rid') {
           $field = '';
@@ -67,21 +101,32 @@ function members_page($rids = null) {
         $header[] = array("data" => $data, "field" => $field);
       }
       
-      foreach ($roles as $rid) {
-        $list[] = "'" . db_escape_string($rid) ."'";
+      if (in_array('2', $roles)) {
+        $allusers = 1;
+        $query = 'SELECT DISTINCT(u.uid) FROM {users} u';
+      }
+      else {
+        $allusers = 0;
+        foreach ($roles as $rid) {
+          $list[] = "'" . db_escape_string($rid) ."'";
+        }
+        $list = implode(',', $list);
+        $query = 'SELECT DISTINCT(u.uid) FROM {users} u INNER JOIN {users_roles} r ON u.uid = r.uid';
       }
-      $list = implode(',', $list);
-
-      $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'",substr(array_search($sort['name'], $fields), 8)));
+        $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);
+      if ($allusers == 0) {
+        $query .= " r.rid IN ($list) AND u.status = 1" . tablesort_sql($header);
+      }
+      else {
+        $query .= ' u.status=1' . tablesort_sql($header);
+      }
       $result = pager_query($query, 200);
 
       $rows = array();
@@ -91,8 +136,8 @@ function members_page($rids = null) {
         $row = array();
         foreach ($fields as $field => $title) {
           $data = NULL;
-          if (substr($field, 0, 8) == 'profile.') {
-            $field = substr($field, 8);
+          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));
             }
@@ -136,15 +181,15 @@ function members_page($rids = null) {
         $rows[] = $row;
       }
       
-      if ($pager = theme("pager", NULL, 200, 0, tablesort_pager())) {
+      if ($pager = theme('pager', NULL, 200, 0)) {
         $rows[] = array(array("data" => $pager, "colspan" => count($header)));
       }
 
       $output.= '<div id="members-main">'. theme("table", $header, $rows) .'</div>';
-      print theme("page", $output);
+      return $output;
     }
     else {
-      print theme("page", t("Warning: there aren't any users with roles configured to be shown here."));
+      return t("Warning: there aren't any users with roles configured to be shown here.");
     }
   }
 }
@@ -157,7 +202,7 @@ function _member_fields() {
 
   // profile fields
   if (module_exist('profile')) {
-    $result = db_query("SELECT name,title FROM {profile_fields} WHERE visibility = %d ORDER BY weight ASC", PROFILE_PUBLIC_LISTINGS);
+    $result = db_query('SELECT name, title FROM {profile_fields} WHERE visibility = %d ORDER BY weight ASC', PROFILE_PUBLIC_LISTINGS);
     while ($row = db_fetch_object($result)) {
       $output["profile.$row->name"] = $row->title;
     }
