--- /tmp/delete_all.module	2010-11-02 17:15:58.000000000 +0100
+++ delete_all.module	2010-11-02 17:04:17.000000000 +0100
@@ -338,6 +338,21 @@ function _delete_all_quick($types) {
 }
 
 function delete_all_users() {
+  // List existing user roles
+  $userroles = user_roles(FALSE, NULL);
+  $form = array();
+  $form['roles-fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('User Roles to be excluded from deletion'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    'roles' => array(
+      '#type' => 'checkboxes',
+      '#options' => $userroles,
+      '#description' => t('Select the user roles you want to keep'),
+    ),
+  );
+
   return confirm_form(
     $form,
     t('Are you sure you want to delete all users?'),
@@ -349,20 +364,31 @@ function delete_all_users() {
 }
 
 function delete_all_users_submit($form, &$form_state) {
-  $result = db_query('SELECT uid FROM {users} WHERE uid > 1');
+  // Build a list of User NOT to be deleted
+  $no_delete_users = array(0, 1); // Add administrator user to array with users to not delete
+  foreach($form_state['values']['roles'] as $role) {
+    if($role != 0) {
+      $result = db_query("SELECT uid FROM {users_roles} WHERE rid = %d", $role);
+      while($row = db_fetch_array($result)) {
+        $no_delete_users[] = $row['uid'];
+      }
+    }
+  }
+  $no_delete_users = array_unique($no_delete_users);
+  $result = db_query("SELECT uid FROM {users} WHERE uid NOT IN(%s)", implode(',', $no_delete_users));
+  // Old method- all users except admin
+  //$result = db_query('SELECT uid FROM {users} WHERE uid > 1');
 
   $count = 0;
-  while ($data = db_fetch_object($result)) {
-    user_delete(array(), $data->uid);
+  while($data = db_fetch_array($result)) {
+    user_delete(array(), $data['uid']);
+    db_query("DELETE FROM {url_alias} WHERE src LIKE 'user/%d'", $data['uid']); // delete URL alias
     $count++;
   }
 
-  // Delete the URL aliases
-  db_query("DELETE FROM {url_alias} WHERE src LIKE 'user/%%'");
-
   db_query("UPDATE {sequences} SET id = 1 WHERE name = 'users_uid'");
 
-  drupal_set_message(t('All users have been deleted. Number of users deleted: !count.', array('!count' => $count)));
+  drupal_set_message(t('Done. Number of users deleted: !count.', array('!count' => $count)));
 
   drupal_goto('admin');
 }
