userdelete.module in Bulk User Delete 7
Provide a method of batch deleting users from a list of email addresses.
File
userdelete.moduleView source
<?php
/**
* @file
* Provide a method of batch deleting users from a list of email addresses.
*/
/**
* Implements hook_menu().
*/
function userdelete_menu() {
$items = array();
$items['admin/people/userdelete'] = array(
'title' => 'Delete users',
'description' => 'Bulk delete users.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userdelete_admin_form',
),
'access arguments' => array(
'administer users',
),
'type' => MENU_LOCAL_TASK,
'weight' => 10,
);
return $items;
}
/**
* Form builder function for user delete admin form.
*/
function userdelete_admin_form() {
$form['description'] = array(
'#type' => 'markup',
'#markup' => t('Use this form to batch delete users. Enter one email address per line. <br /><br />WARNING: There is no confirmation for this action, users are deleted immmediately.'),
);
$form['emails'] = array(
'#type' => 'textarea',
'#title' => 'Email addresses',
'#rows' => 20,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Delete',
);
return $form;
}
/**
* Validation handler for the user delete form.
*/
function userdelete_admin_form_validate($form, $form_state) {
$emails = $form_state['values']['emails'];
if (empty($emails)) {
form_set_error('emails', 'Email addresses cannot be blank.');
}
$emails_array = userdelete_array_from_text($emails);
foreach ($emails_array as $key => $email) {
if (!valid_email_address($email)) {
form_set_error('emails', 'At least one email address is invalid: ' . check_plain($email));
return;
}
}
}
/**
* Submit handler for the user delete form.
*/
function userdelete_admin_form_submit($form, &$form_state) {
$emails = $form_state['values']['emails'];
$emails_array = userdelete_array_from_text($emails);
$num_mails = count($emails_array);
$emails_chunks = array_chunk($emails_array, 4);
$operations = array();
foreach ($emails_chunks as $key => $value) {
$operations[] = array(
'userdelete_batch_op',
array(
$value,
),
);
}
$batch = array(
'operations' => $operations,
'finished' => 'userdelete_batch_finished',
);
batch_set($batch);
}
/**
* Batch delete users.
*/
function userdelete_batch_op($value, &$context) {
$users = array();
foreach ($value as $email) {
$uid = db_query('SELECT uid FROM {users} WHERE mail = :mail', array(
':mail' => $email,
))
->fetchField();
if ($uid) {
$users[$email] = $uid;
}
else {
$context['results']['notfound'][] = $email;
}
}
foreach ($users as $email => $uid) {
$context['results']['deleted'][] = $email . ', uid = ' . $uid;
}
user_delete_multiple($users);
}
/**
* Batch is finished.
*/
function userdelete_batch_finished($success, $results, $operations) {
if ($success) {
if (isset($results['notfound'])) {
drupal_set_message('The following users were not found:', 'warning');
foreach ($results['notfound'] as $res) {
drupal_set_message($res, 'warning');
}
}
if (isset($results['deleted'])) {
drupal_set_message('The following users were deleted successfully:');
foreach ($results['deleted'] as $res) {
drupal_set_message($res);
}
}
}
else {
// An error occurred.
// $operations contains the operations that remained unprocessed.
$error_operation = reset($operations);
drupal_set_message(t('An error occurred while processing @operation with arguments : @args', array(
'@operation' => $error_operation[0],
'@args' => print_r($error_operation[0], TRUE),
)));
}
}
/**
* Helper function to break newline terminated text into array, removing dupes.
*/
function userdelete_array_from_text($text) {
// Break into array and clean.
$emails_array = explode("\n", $text);
foreach ($emails_array as $key => $email) {
$emails_array[$key] = strtolower(trim($email));
}
$emails_array = array_unique($emails_array);
return array_filter($emails_array);
}
Functions
Name![]() |
Description |
---|---|
userdelete_admin_form | Form builder function for user delete admin form. |
userdelete_admin_form_submit | Submit handler for the user delete form. |
userdelete_admin_form_validate | Validation handler for the user delete form. |
userdelete_array_from_text | Helper function to break newline terminated text into array, removing dupes. |
userdelete_batch_finished | Batch is finished. |
userdelete_batch_op | Batch delete users. |
userdelete_menu | Implements hook_menu(). |