it-swarm-es.com

¿Cómo eliminar 1600 usuarios y 2500 publicaciones?

Hace un par de años configuré un sitio con Drupal 6.9, y luego lo olvidé. Tengo 160 páginas de usuarios que son todos spammers y necesito eliminar todos menos 3. Haciendo esto página a la vez es dolorosamente lenta debido a las llamadas de MySQL (supongo). También tengo alrededor de 2500 publicaciones en el foro para eliminar.

Tengo un poco de miedo de eliminar registros de la base de datos directamente.

Vi un módulo llamado "eliminación masiva", pero es para Drupal versión 5 y no está disponible para la versión 6.

10
John R

Puede usar Views Bulk Operations , un módulo que permite ejecutar operaciones masivas en nodos, usuarios, comentarios; también permite aplicar la operación seleccionada a todos los nodos, usuarios o comentarios utilizando Batch API . La API por lotes permite que el procesamiento de formularios se distribuya entre varias solicitudes de página, asegurando así que el procesamiento no se interrumpa debido a un tiempo de espera PHP, mientras que permite al usuario recibir comentarios sobre el progreso de Las operaciones en curso.

17
kiamlaluno

Esta forma de matar nodos es muy lenta, pero más segura

function MYMODULE_menu(){
  $items['admin/mymodule/killnodes/%'] = array(
      'title' => 'Kill nodes',
      'page callback' => 'kill_nodes',
      'page arguments' => array(3),
      'type' => MENU_CALLBACK,
      'access arguments' => array('administer site configuration'),
  );
  return $items;
}

function kill_nodes($type){
  $query = "SELECT node.nid AS nid FROM {node} node WHERE node.type IN ('%s')";
  $result = db_query($query, $type);
  $count = 0;
  while($row = db_fetch_object($result)){
    node_delete($row->nid);
    $count++;
  }
  $message = t('!count nodes has been killed. Pif-Paf!', array('!count' => $count));
  drupal_set_message($message);
  return t("That's all folks");
}

Para los usuarios, ¿puede determinar mediante programación el usuario a quien desea eliminar? Si es posible, puede usar la función anterior como ejemplo para eliminar usuarios no deseados.

3
dobeerman

En lugar de crear un módulo personalizado para esta tarea, puede usar un script simple y ejecutarlo con Drush . Dado que necesita procesar muchos usuarios y nodos, se recomienda el uso de la API de Batch (y puede puede usarse con Drush ).

3
Pierre Buyle

Si, como yo, prefiere un Python (probablemente raro por aquí, pero aún así), esta es una forma transparente y efectiva de solucionar este problema:

import os

# Build up a variable containing the usernames
# This list was built using drush sql-cli, then
# SELECT name FROM users 
#   where $your-where-condition 
#   order by uid asc 
#   INTO 
#     OUTFILE '/tmp/users.csv' 
#     FIELDS TERMINATED BY ',' 
#     ENCLOSED BY '"' 
#     lines terminated by ', ' ;
users = [result from SQL goes here]

for user in users:
    print("Deleting spam user: %s..." % user),
    os.system('drush --yes -r $your-path-to-drupal -l $your-site-url user-cancel --delete-content %s > /dev/null' % user) 
    print 'Done'

Los pasos son básicamente:

  1. Inicie sesión en su base de datos con drush sql-cli -r $your-path-to-drupal -l $your-site-url
  2. Ejecute el SQL anterior con su propia condición where y pegue los resultados en la variable de usuario.
  3. Actualice su drupal ruta y nombre del sitio en el comando drush
  4. Ejecute el script con python delete-users.py

Estoy seguro de que hay una mejor manera de hacerlo, pero esta es mi solución pirateada que funciona bien.

2
mlissner

Use suario avanzado módulo. Este módulo agrega una pestaña "avanzada" a la página de administración de usuarios. En esa pestaña, puede filtrar usuarios por cualquier atributo (rol, estado, etc.) y seleccionar todos. Si selecciona el método de eliminación de los usuarios como eliminar el usuario y eliminar todo el contenido, también puede eliminar todo el contenido creado por ellos.

1
Sinan Erdem

He implementado un módulo personalizado para eliminar todos los usuarios de indrupal 7. En el área admin/people hay un nuevo formulario para completar esta operación.

Demasiado con drush.

Es un proyecto de sandbox. Thk.

Enlace al proyecto

1
lgrtm

Pruebe estos 2 módulos para D6:

User Prune https://drupal.org/project/user_Prune y User Delete https://drupal.org/project/user_delete

User Prune le permite eliminar en masa usuarios inactivos según los criterios que especifique.

User Delete le permite eliminar un usuario y eliminar todo el contenido enviado, incluidos los nodos y comentarios

1
FreeScholar

El módulo Eliminar todo podría ser útil.

Una vez instalado, puede hacer, por ejemplo:

drush delete-all articles

o

drush delete-all users

Versión de Drupal 6 en dev pero de las notas:

Todo debería funcionar, excepto la eliminación rápida.

0
Mauro Sardu