web-dev-qa-db-fra.com

Comment supprimer 1600 utilisateurs et 2500 messages?

Il y a quelques années, j'ai configuré un site avec Drupal 6.9, puis je l'ai oublié. J'ai 160 pages d'utilisateurs qui sont tous des spammeurs et je dois supprimer tout sauf 3. Faire celui-ci la page à la fois est douloureusement lente à cause des appels MySQL (je suppose) .J'ai aussi environ 2500 messages sur le forum à supprimer.

J'ai un peu peur de supprimer directement les enregistrements de la base de données.

J'ai vu un module appelé "mass delete", mais il est pour Drupal version 5 et non disponible pour la version 6.

10
John R

Vous pouvez utiliser Views Bulk Operations , un module qui permet d'exécuter des opérations en bloc sur les nœuds, les utilisateurs, les commentaires; il permet également d'appliquer l'opération sélectionnée à tous les nœuds, utilisateurs ou commentaires à l'aide de Batch API . L'API par lots permet d'étaler le traitement des formulaires sur plusieurs demandes de page, garantissant ainsi que le traitement ne soit pas interrompu en raison d'un délai d'attente PHP, tout en permettant à l'utilisateur de recevoir des commentaires sur la progression de les opérations en cours.

17
kiamlaluno

Cette façon de tuer les nœuds est très lente, mais plus sûre

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");
}

Pour les utilisateurs, pouvez-vous déterminer par programme l'utilisateur que vous souhaitez supprimer? Si possible, vous pouvez utiliser la fonction précédente comme exemple pour supprimer les utilisateurs indésirables.

3
dobeerman

Au lieu de créer un module personnalisé pour cette tâche, vous pouvez utiliser un script simple et l'exécuter avec Drush . Étant donné que vous devez traiter un grand nombre d'utilisateurs et de nœuds, l'utilisation de l'API Batch est recommandée (et elle peut être utilisée avec Drush ).

3
Pierre Buyle

Si, comme moi, vous préférez une approche Python (rare ici probablement, mais quand même), c'est un moyen transparent et efficace de résoudre ce problème:

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'

Les étapes sont essentiellement:

  1. Connectez-vous à votre base de données avec drush sql-cli -r $your-path-to-drupal -l $your-site-url
  2. Exécutez le SQL ci-dessus avec votre propre condition where et collez les résultats dans la variable users.
  3. Mettez à jour votre drupal chemin et nom du site dans la commande drush
  4. Exécutez le script avec python delete-users.py

Je suis sûr qu'il existe une meilleure façon de le faire, mais c'est ma solution piratée qui fonctionne bien.

2
mlissner

Utilisez le module tilisateur avancé . Ce module ajoute un onglet "avancé" à la page de gestion des utilisateurs. Dans cet onglet, vous pouvez filtrer les utilisateurs par n'importe quel attribut (rôle, statut, etc.) et tout sélectionner. Si vous sélectionnez la méthode de suppression des utilisateurs comme supprimer l'utilisateur et supprimer tout le contenu, vous pouvez également supprimer tout le contenu créé par eux.

1
Sinan Erdem

J'ai implémenté un module personnalisé pour supprimer tous les utilisateurs indrupal 7. Dans la zone admin/people il y a un nouveau formulaire pour terminer cette opération.

Trop de drush.

Est un projet sandbox. Thk.

Lien vers le projet.

1
lgrtm

Essayez ces 2 modules pour D6:

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

User Prune vous permet de supprimer en masse les utilisateurs inactifs en fonction des critères que vous spécifiez.

La suppression d'utilisateur vous permet de supprimer un utilisateur et de supprimer tout le contenu soumis, y compris les nœuds et les commentaires

1
FreeScholar

Le module Supprimer tout pourrait être utile.

Une fois installé, vous pouvez par exemple:

drush delete-all articles

ou

drush delete-all users

Version Drupal 6 en dev mais d'après les notes:

Tout devrait fonctionner, sauf pour la suppression rapide.

0
Mauro Sardu