it-swarm.it

Come eliminare 1600 utenti e 2500 post?

Un paio di anni fa ho configurato un sito con Drupal 6.9, e poi me ne sono dimenticato. Ho 160 pagine di utenti che sono tutti spammer e ho bisogno di eliminare tutti tranne 3. Fare questo pagina alla volta è dolorosamente lenta a causa delle chiamate MySQL (credo). Ho anche circa 2500 post sul forum da eliminare.

Ho un po 'paura di eliminare direttamente i record dal database.

Ho visto un modulo chiamato "cancellazione di massa", ma è per Drupal versione 5 e non disponibile per la versione 6.

10
John R

È possibile utilizzare Views Bulk Operations , un modulo che consente di eseguire operazioni in blocco su nodi, utenti, commenti; consente inoltre di applicare l'operazione selezionata a tutti i nodi, utenti o commenti utilizzando Batch API . L'API batch consente di distribuire l'elaborazione dei moduli su più richieste di pagina, garantendo così che l'elaborazione non venga interrotta a causa di un PHP, consentendo all'utente di ricevere un feedback sull'avanzamento di le operazioni in corso.

17
kiamlaluno

Questo modo di uccidere i nodi è molto lento, ma molto sicuro

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

Per gli utenti, è possibile determinare a livello di codice l'utente che si desidera rimuovere? Se possibile, è possibile utilizzare la funzione precedente come esempio per rimuovere utenti indesiderati.

3
dobeerman

Invece di creare un modulo personalizzato per questa attività, è possibile utilizzare un script semplice ed eseguirlo con Drush . Poiché è necessario elaborare molti utenti e nodi, si consiglia l'utilizzo dell'API Batch (e può essere utilizzato con Drush ).

3
Pierre Buyle

Se, come me, preferisci un Python (raro da queste parti probabilmente, ma comunque), questo è un modo trasparente ed efficace per risolvere questo 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'

I passaggi sono sostanzialmente:

  1. Accedi al tuo DB con drush sql-cli -r $your-path-to-drupal -l $your-site-url
  2. Esegui l'SQL sopra con la tua condizione e incolla i risultati nella variabile utente.
  3. Aggiorna il tuo drupal percorso e nome del sito nel comando drush
  4. Esegui lo script con python delete-users.py

Sono sicuro che c'è un modo migliore per farlo, ma questa è la mia soluzione compromessa che funziona bene.

2
mlissner

Usa tente avanzato modulo. Questo modulo aggiunge una scheda "avanzata" alla pagina di gestione degli utenti. In quella scheda, puoi filtrare gli utenti per qualsiasi attributo (ruolo, stato, ecc.) E selezionare tutto. Se selezioni il metodo di eliminazione degli utenti come elimina l'utente e rimuovi tutto il contenuto, puoi anche eliminare tutto il contenuto da essi creato.

1
Sinan Erdem

Ho implementato un modulo personalizzato per eliminare tutti gli utenti 7. Nell'area admin/people c'è un nuovo modulo per completare questa operazione.

Troppo con la droga.

È un progetto sandbox. Thk.

Link al progetto.

1
lgrtm

Prova questi 2 moduli per D6:

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

User Prune ti consente di eliminare in massa gli utenti inattivi in ​​base ai criteri specificati.

User Delete consente di eliminare un utente ed eliminare tutto il contenuto inviato, inclusi nodi e commenti

1
FreeScholar

Il modulo Elimina tutto potrebbe tornare utile.

Una volta installato puoi fare, ad esempio:

drush delete-all articles

o

drush delete-all users

Versione Drupal 6 in in dev ma dalle note:

Tutto dovrebbe funzionare tranne per l'eliminazione rapida.

0
Mauro Sardu