Mayo 16, 2014
enzo
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.