Index: modules/user/user.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v
retrieving revision 1.116
diff -u -p -r1.116 user.admin.inc
--- modules/user/user.admin.inc 29 Jul 2010 01:39:32 -0000 1.116
+++ modules/user/user.admin.inc 26 Aug 2010 14:47:02 -0000
@@ -6,24 +6,18 @@
* Admin page callback file for the user module.
*/
-function user_admin($callback_arg = '') {
- $op = isset($_POST['op']) ? $_POST['op'] : $callback_arg;
-
- switch ($op) {
- case t('Create new account'):
- case 'create':
- $build['user_register'] = drupal_get_form('user_register_form');
- break;
- default:
- if (!empty($_POST['accounts']) && isset($_POST['operation']) && ($_POST['operation'] == 'cancel')) {
- $build['user_multiple_cancel_confirm'] = drupal_get_form('user_multiple_cancel_confirm');
- }
- else {
- $build['user_filter_form'] = drupal_get_form('user_filter_form');
- $build['user_admin_account'] = drupal_get_form('user_admin_account');
- }
+/**
+ * Form builder; Return user administration forms.
+ *
+ * @ingroup forms
+ */
+function user_admin_form($form, &$form_state) {
+ if (!empty($form_state['values']['accounts']) && isset($form_state['values']['operation']) && ($form_state['values']['operation'] == 'cancel')) {
+ return array_merge($form, user_multiple_cancel_confirm($form, $form_state));
}
- return $build;
+ $form = array_merge($form, user_filter_form());
+ $form['user_admin_account'] = user_admin_account();
+ return $form;
}
/**
@@ -36,6 +30,8 @@ function user_filter_form() {
$session = isset($_SESSION['user_overview_filter']) ? $_SESSION['user_overview_filter'] : array();
$filters = user_filters();
+ $form['#submit'][] = 'user_filter_form_submit';
+
$i = 0;
$form['filters'] = array(
'#type' => 'fieldset',
@@ -92,8 +88,6 @@ function user_filter_form() {
);
}
- drupal_add_js('misc/form.js');
-
return $form;
}
@@ -127,9 +121,6 @@ function user_filter_form_submit($form,
case t('Update'):
return;
}
-
- $form_state['redirect'] = 'admin/people';
- return;
}
/**
@@ -165,6 +156,8 @@ function user_admin_account() {
->setCountQuery($count_query);
$result = $query->execute();
+ $form['#theme'] = 'user_admin_account';
+
$form['options'] = array(
'#type' => 'fieldset',
'#title' => t('Update options'),
@@ -183,6 +176,8 @@ function user_admin_account() {
$form['options']['submit'] = array(
'#type' => 'submit',
'#value' => t('Update'),
+ '#validate' => array('user_admin_account_validate'),
+ '#submit' => array('user_admin_account_submit'),
);
$destination = drupal_get_destination();
@@ -239,6 +234,11 @@ function user_admin_account_submit($form
drupal_set_message(t('The update has been performed.'));
}
+ else {
+ // We need to rebuild the form to go to a second step. For example, to
+ // show the confirmation form for deletion.
+ $form_state['rebuild'] = TRUE;
+ }
}
function user_admin_account_validate($form, &$form_state) {
@@ -1055,3 +1055,106 @@ function theme_user_filters($variables)
return $output;
}
+
+/**
+ * Form builder; Mass-account cancellation form.
+ *
+ * @ingroup forms
+ * @see user_multiple_cancel_confirm_submit()
+ */
+function user_multiple_cancel_confirm($form, &$form_state) {
+ $edit = $form_state['input'];
+
+ $form['accounts'] = array('#prefix' => '
', '#tree' => TRUE);
+ $accounts = user_load_multiple(array_keys(array_filter($edit['accounts'])));
+ foreach ($accounts as $uid => $account) {
+ // Prevent user 1 from being canceled.
+ if ($uid <= 1) {
+ continue;
+ }
+ $form['accounts'][$uid] = array(
+ '#type' => 'hidden',
+ '#value' => $uid,
+ '#prefix' => '',
+ '#suffix' => check_plain($account->name) . "\n",
+ );
+ }
+
+ // Output a notice that user 1 cannot be canceled.
+ if (isset($accounts[1])) {
+ $redirect = (count($accounts) == 1);
+ $message = t('The user account %name cannot be cancelled.', array('%name' => $accounts[1]->name));
+ drupal_set_message($message, $redirect ? 'error' : 'warning');
+ // If only user 1 was selected, redirect to the overview.
+ if ($redirect) {
+ drupal_goto('admin/people');
+ }
+ }
+
+ $form['operation'] = array('#type' => 'hidden', '#value' => 'cancel');
+
+ module_load_include('inc', 'user', 'user.pages');
+ $form['user_cancel_method'] = array(
+ '#type' => 'item',
+ '#title' => t('When cancelling these accounts'),
+ );
+ $form['user_cancel_method'] += user_cancel_methods();
+ // Remove method descriptions.
+ foreach (element_children($form['user_cancel_method']) as $element) {
+ unset($form['user_cancel_method'][$element]['#description']);
+ }
+
+ // Allow to send the account cancellation confirmation mail.
+ $form['user_cancel_confirm'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Require e-mail confirmation to cancel account.'),
+ '#default_value' => FALSE,
+ '#description' => t('When enabled, the user must confirm the account cancellation via e-mail.'),
+ );
+ // Also allow to send account canceled notification mail, if enabled.
+ $form['user_cancel_notify'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Notify user when account is canceled.'),
+ '#default_value' => FALSE,
+ '#access' => variable_get('user_mail_status_canceled_notify', FALSE),
+ '#description' => t('When enabled, the user will receive an e-mail notification after the account has been cancelled.'),
+ );
+
+ return confirm_form($form,
+ t('Are you sure you want to cancel these user accounts?'),
+ 'admin/people',
+ t('This action cannot be undone.'),
+ t('Cancel accounts'),
+ t('Cancel'));
+}
+
+/**
+ * Submit handler for mass-account cancellation form.
+ *
+ * @see user_multiple_cancel_confirm()
+ * @see user_cancel_confirm_form_submit()
+ */
+function user_multiple_cancel_confirm_submit($form, &$form_state) {
+ global $user;
+
+ if ($form_state['values']['confirm']) {
+ foreach ($form_state['values']['accounts'] as $uid => $value) {
+ // Prevent programmatic form submissions from cancelling user 1.
+ if ($uid <= 1) {
+ continue;
+ }
+ // Prevent user administrators from deleting themselves without confirmation.
+ if ($uid == $user->uid) {
+ $admin_form_state = $form_state;
+ unset($admin_form_state['values']['user_cancel_confirm']);
+ $admin_form_state['values']['_account'] = $user;
+ user_cancel_confirm_form_submit(array(), $admin_form_state);
+ }
+ else {
+ user_cancel($form_state['values'], $uid, $form_state['values']['user_cancel_method']);
+ }
+ }
+ }
+ $form_state['redirect'] = 'admin/people';
+}
+
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1196
diff -u -p -r1.1196 user.module
--- modules/user/user.module 26 Aug 2010 09:14:33 -0000 1.1196
+++ modules/user/user.module 26 Aug 2010 14:47:54 -0000
@@ -1573,8 +1573,8 @@ function user_menu() {
$items['admin/people'] = array(
'title' => 'People',
'description' => 'Manage user accounts, roles, and permissions',
- 'page callback' => 'user_admin',
- 'page arguments' => array('list'),
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('user_admin_form'),
'access arguments' => array('administer users'),
'position' => 'left',
'weight' => -4,
@@ -1588,6 +1588,13 @@ function user_menu() {
'weight' => -10,
'file' => 'user.admin.inc',
);
+ $items['admin/people/create'] = array(
+ 'title' => 'Add user',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('user_register_form'),
+ 'access arguments' => array('administer users'),
+ 'type' => MENU_LOCAL_ACTION,
+ );
// Permissions and role forms.
$items['admin/people/permissions'] = array(
@@ -1632,13 +1639,6 @@ function user_menu() {
'file' => 'user.admin.inc',
);
- $items['admin/people/create'] = array(
- 'title' => 'Add user',
- 'page arguments' => array('create'),
- 'access arguments' => array('administer users'),
- 'type' => MENU_LOCAL_ACTION,
- );
-
// Administration pages.
$items['admin/config/people'] = array(
'title' => 'People',
@@ -2926,6 +2926,7 @@ function user_user_operations($form = ar
),
'cancel' => array(
'label' => t('Cancel the selected user accounts'),
+ 'callback' => NULL,
),
);
@@ -3038,100 +3039,6 @@ function user_multiple_role_edit($accoun
}
}
-function user_multiple_cancel_confirm($form, &$form_state) {
- $edit = $form_state['input'];
-
- $form['accounts'] = array('#prefix' => '', '#tree' => TRUE);
- $accounts = user_load_multiple(array_keys(array_filter($edit['accounts'])));
- foreach ($accounts as $uid => $account) {
- // Prevent user 1 from being canceled.
- if ($uid <= 1) {
- continue;
- }
- $form['accounts'][$uid] = array(
- '#type' => 'hidden',
- '#value' => $uid,
- '#prefix' => '',
- '#suffix' => check_plain($account->name) . "\n",
- );
- }
-
- // Output a notice that user 1 cannot be canceled.
- if (isset($accounts[1])) {
- $redirect = (count($accounts) == 1);
- $message = t('The user account %name cannot be cancelled.', array('%name' => $accounts[1]->name));
- drupal_set_message($message, $redirect ? 'error' : 'warning');
- // If only user 1 was selected, redirect to the overview.
- if ($redirect) {
- drupal_goto('admin/people');
- }
- }
-
- $form['operation'] = array('#type' => 'hidden', '#value' => 'cancel');
-
- module_load_include('inc', 'user', 'user.pages');
- $form['user_cancel_method'] = array(
- '#type' => 'item',
- '#title' => t('When cancelling these accounts'),
- );
- $form['user_cancel_method'] += user_cancel_methods();
- // Remove method descriptions.
- foreach (element_children($form['user_cancel_method']) as $element) {
- unset($form['user_cancel_method'][$element]['#description']);
- }
-
- // Allow to send the account cancellation confirmation mail.
- $form['user_cancel_confirm'] = array(
- '#type' => 'checkbox',
- '#title' => t('Require e-mail confirmation to cancel account.'),
- '#default_value' => FALSE,
- '#description' => t('When enabled, the user must confirm the account cancellation via e-mail.'),
- );
- // Also allow to send account canceled notification mail, if enabled.
- $form['user_cancel_notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user when account is canceled.'),
- '#default_value' => FALSE,
- '#access' => variable_get('user_mail_status_canceled_notify', FALSE),
- '#description' => t('When enabled, the user will receive an e-mail notification after the account has been cancelled.'),
- );
-
- return confirm_form($form,
- t('Are you sure you want to cancel these user accounts?'),
- 'admin/people', t('This action cannot be undone.'),
- t('Cancel accounts'), t('Cancel'));
-}
-
-/**
- * Submit handler for mass-account cancellation form.
- *
- * @see user_multiple_cancel_confirm()
- * @see user_cancel_confirm_form_submit()
- */
-function user_multiple_cancel_confirm_submit($form, &$form_state) {
- global $user;
-
- if ($form_state['values']['confirm']) {
- foreach ($form_state['values']['accounts'] as $uid => $value) {
- // Prevent programmatic form submissions from cancelling user 1.
- if ($uid <= 1) {
- continue;
- }
- // Prevent user administrators from deleting themselves without confirmation.
- if ($uid == $user->uid) {
- $admin_form_state = $form_state;
- unset($admin_form_state['values']['user_cancel_confirm']);
- $admin_form_state['values']['_account'] = $user;
- user_cancel_confirm_form_submit(array(), $admin_form_state);
- }
- else {
- user_cancel($form_state['values'], $uid, $form_state['values']['user_cancel_method']);
- }
- }
- }
- $form_state['redirect'] = 'admin/people';
-}
-
/**
* Retrieve a list of all user setting/information categories and sort them by weight.
*/
Index: modules/user/user.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.pages.inc,v
retrieving revision 1.74
diff -u -p -r1.74 user.pages.inc
--- modules/user/user.pages.inc 11 Jul 2010 22:14:28 -0000 1.74
+++ modules/user/user.pages.inc 26 Aug 2010 14:48:51 -0000
@@ -274,7 +274,7 @@ function user_profile_form($form, &$form
$form['actions']['cancel'] = array(
'#type' => 'submit',
'#value' => t('Cancel account'),
- '#submit' => array('user_edit_cancel_submit'),
+ '#submit' => array('user_profile_form_cancel_submit'),
'#access' => $account->uid > 1 && (($account->uid == $user->uid && user_access('cancel account')) || user_access('administer users')),
);
}
@@ -324,7 +324,7 @@ function user_profile_form_submit($form,
/**
* Submit function for the 'Cancel account' button on the user edit form.
*/
-function user_edit_cancel_submit($form, &$form_state) {
+function user_profile_form_cancel_submit($form, &$form_state) {
$destination = array();
if (isset($_GET['destination'])) {
$destination = drupal_get_destination();
@@ -338,7 +338,7 @@ function user_edit_cancel_submit($form,
* Form builder; confirm form for cancelling user account.
*
* @ingroup forms
- * @see user_edit_cancel_submit()
+ * @see user_profile_form_cancel_submit()
*/
function user_cancel_confirm_form($form, &$form_state, $account) {
global $user;