web-dev-qa-db-ja.com

1600人のユーザーと2500件の投稿を削除する方法

数年前、私はDrupal 6.9でサイトを構成しましたが、それを忘れていました。すべてのスパマーである160ページのユーザーがいて、3以外のすべてを削除する必要があります。 MySQLの呼び出しが原因で、一度に1ページずつ痛々しいほど遅い(私は推測します)また、削除するフォーラム投稿が約2500あります。

データベースから直接レコードを削除するのは少し怖いです。

「大量削除」というモジュールを見ましたが、これはDrupalバージョン5用であり、バージョン6では使用できません。

10
John R

ノード、ユーザー、コメントに対して一括操作を実行できるモジュールである Views Bulk Operations を使用できます。 Batch API を使用して、選択した操作をすべてのノード、ユーザー、またはコメントに適用することもできます。バッチAPIを使用すると、フォームの処理を複数のページリクエストに分散できるため、PHPタイムアウトが原因で処理が中断されないようにすると同時に、ユーザーが進捗状況に関するフィードバックを受け取ることができます進行中の操作。

17
kiamlaluno

ノードを殺すこの方法は非常に遅いですが、最も安全です

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

ユーザーの場合、削除するユーザーをプログラムで決定できますか?可能であれば、前の関数を例として使用して、不要なユーザーを削除できます。

3
dobeerman

このタスク用のカスタムモジュールを作成する代わりに、 シンプルスクリプト を使用して Drush で実行できます。多くのユーザーとノードを処理する必要があるため、バッチAPIの使用をお勧めします(そして、それは Drushで使用できます )。

3
Pierre Buyle

私のように、あなたがPythonアプローチを好む場合(おそらくここではまれですが、それでも))、これはこの問題を解決する透過的で効果的な方法です:

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'

手順は基本的に次のとおりです。

  1. drush sql-cli -r $your-path-to-drupal -l $your-site-urlを使用してDBにログインします
  2. 上記のSQLを独自のwhere条件で実行し、結果をユーザー変数に貼り付けます。
  3. drupalパスとサイト名をdrushコマンドに更新します
  4. python delete-users.pyを使用してスクリプトを実行します

これを行うにはもっと良い方法があると確信していますが、これはうまく機能する私のハッキングされたソリューションです。

2
mlissner

上級ユーザー モジュールを使用します。このモジュールは、ユーザー管理ページに「詳細」タブを追加します。そのタブでは、任意の属性(ロール、ステータスなど)でユーザーをフィルタリングし、すべてを選択できます。ユーザーの削除方法をユーザーの削除として選択し、すべてのコンテンツを削除する場合、ユーザーが作成したすべてのコンテンツを削除することもできます。

1
Sinan Erdem

私はすべてのユーザーを削除するためのカスタムモジュール7を実装しました。管理者/人の領域には、この操作を完了するための新しいフォームがあります。

しつこすぎる。

サンドボックスプロジェクトです。よし.

プロジェクトへのリンク。

1
lgrtm

D6用に次の2つのモジュールを試してください。

ユーザープルーン https://drupal.org/project/user_Prune およびユーザー削除 https://drupal.org/project/user_delete

User Pruneを使用すると、指定した基準に基づいて非アクティブなユーザーを一括削​​除できます。

ユーザーの削除により、ユーザーを削除し、ノードやコメントを含むすべての送信済みコンテンツを削除できます

1
FreeScholar

モジュール すべて削除 が役に立ちます。

インストールしたら、次のようにできます。

drush delete-all articles

または

drush delete-all users

Drupal 6バージョンはdevにありますが、ノートから:

クイック削除以外はすべて機能しているはずです。

0
Mauro Sardu