Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.777 diff -u -p -r1.777 user.module --- modules/user/user.module 30 Apr 2007 17:03:29 -0000 1.777 +++ modules/user/user.module 5 May 2007 23:55:20 -0000 @@ -755,6 +755,10 @@ function user_edit_access($account) { return ($GLOBALS['user']->uid == $account->uid) || array('administer users'); } +function user_delete_access($account) { + return ($account->uid > 1 && user_access('administer users')); +} + function user_load_self($arg) { $arg[1] = user_load($GLOBALS['user']->uid); return $arg; @@ -933,8 +937,8 @@ function user_menu() { $items['user/%user/delete'] = array( 'title' => 'Delete', 'page callback' => 'user_edit', - 'access callback' => 'user_access', - 'access arguments' => array('administer users'), + 'access callback' => 'user_delete_access', + 'access arguments' => array(1), 'type' => MENU_CALLBACK, ); @@ -1580,7 +1584,7 @@ function user_edit($category = 'account' $form['_category'] = array('#type' => 'value', '#value' => $category); $form['_account'] = array('#type' => 'value', '#value' => $account); $form['submit'] = array('#type' => 'submit', '#value' => t('Submit'), '#weight' => 30); - if (user_access('administer users')) { + if (user_access('administer users') && ($account->uid != 1)) { $form['delete'] = array('#type' => 'submit', '#value' => t('Delete'), '#weight' => 31); } $form['#attributes']['enctype'] = 'multipart/form-data'; @@ -2269,6 +2273,12 @@ function user_admin_account_validate($fo if (count($form_values['accounts']) == 0) { form_set_error('', t('No users selected.')); } + if ($form_values['operation'] == 'delete') { + if (!empty($form_values['accounts'][1])) { + $user = user_load(1); + form_set_error('', t('%name is the superuser and cannot be deleted.', array('%name' => $user->name))); + } + } } /** @@ -2488,7 +2498,7 @@ function user_admin($callback_arg = '') $output = drupal_get_form('user_register'); break; default: - if (!empty($_POST['accounts']) && isset($_POST['operation']) && ($_POST['operation'] == 'delete')) { + if (!empty($_POST['accounts']) && isset($_POST['operation']) && ($_POST['operation'] == 'delete') && empty($_POST['accounts'][1])) { $output = drupal_get_form('user_multiple_delete_confirm'); } else {