Cómo hacer un borrado masivo de usuarios en Drupal 7 con Drush

Mayo 16, 2014

enzo
Drupal
Desarrollo de Modulos
Drush

En la entrada de blog Cómo hacer un borrado masivo de nodos en Drupal 7 con Drush aprendimos como crear un script especializado para el borrado masivo de nodos y su posterior ejecución con Drush.

Hoy siguiendo esta línea vengo a presentarles como hacer un borrad masivo de usuarios como se muestra en el siguiente código.

<?php

// Load user.module from the user module.
module_load_include('module', 'node', 'node');

// Roles to select user to delete
$roles = array('authenticated user','basics','developer','gold','platinum','recruiter');

$query = db_select('users', 'u');
$query->fields('u', array('uid'));
$query->join('users_roles','ur', 'u.uid=ur.uid');
$query->join('role', 'r', 'r.rid=ur.rid');
$query->condition('r.name', $roles, 'IN');
$query->condition('u.uid', 1, '>');
$query->orderRandom();
$query->range(0,15000);
$query->groupBy('u.uid');

$results = $query->execute();
foreach ($results as $result) {
  $uids[] = $result->uid;
}

print 'users to delete:' . count($uids). "\n";

if(!empty($uids)) {
  user_delete_multiple($uids);
  drupal_set_message(t('Deleted %count users.', array('%count' => count($uids))));
}

En este script filtramos los usuarios que deseamos borrar por medio de los roles a los que esta asociado y hacemos una condición especial para asegurarnos no borrar los usuarios con ID 0 y 1 que son los usuarios Anonymous y Admin respectivamente.

Algunos pueden verse tentados a solo hacer un borrado en la tabla users, pero desde Drupal 7 User es un Entity por lo tanto puede tener infinidad de campos y datos en las tablas de cada campo, por eso es mejor garantizar que estamos haciendo un borrado del usuario del sistema y de esta forma no dejar información huérfana en nuestra base de datos.

De esta forma podermos usar el anterior script y ajustarlo a nuestras necesidades.

Para ejecutar el comando solo debemos hacer el siguiente llamado.

$ drush php-script bulk_delete_users.php

Espero que haya sido de su agrado.

7Sabores® y SieteSabores® son marcas registradas por Ingeniarte Consultores S.A. Todos los derechos reservados 2022.