数年前、私はDrupal 6.9でサイトを構成しましたが、それを忘れていました。すべてのスパマーである160ページのユーザーがいて、3以外のすべてを削除する必要があります。 MySQLの呼び出しが原因で、一度に1ページずつ痛々しいほど遅い(私は推測します)また、削除するフォーラム投稿が約2500あります。
データベースから直接レコードを削除するのは少し怖いです。
「大量削除」というモジュールを見ましたが、これはDrupalバージョン5用であり、バージョン6では使用できません。
ノード、ユーザー、コメントに対して一括操作を実行できるモジュールである Views Bulk Operations を使用できます。 Batch API を使用して、選択した操作をすべてのノード、ユーザー、またはコメントに適用することもできます。バッチAPIを使用すると、フォームの処理を複数のページリクエストに分散できるため、PHPタイムアウトが原因で処理が中断されないようにすると同時に、ユーザーが進捗状況に関するフィードバックを受け取ることができます進行中の操作。
ノードを殺すこの方法は非常に遅いですが、最も安全です
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");
}
ユーザーの場合、削除するユーザーをプログラムで決定できますか?可能であれば、前の関数を例として使用して、不要なユーザーを削除できます。
このタスク用のカスタムモジュールを作成する代わりに、 シンプルスクリプト を使用して Drush で実行できます。多くのユーザーとノードを処理する必要があるため、バッチAPIの使用をお勧めします(そして、それは Drushで使用できます )。
私のように、あなたが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'
手順は基本的に次のとおりです。
drush sql-cli -r $your-path-to-drupal -l $your-site-url
を使用してDBにログインしますpython delete-users.py
を使用してスクリプトを実行しますこれを行うにはもっと良い方法があると確信していますが、これはうまく機能する私のハッキングされたソリューションです。
上級ユーザー モジュールを使用します。このモジュールは、ユーザー管理ページに「詳細」タブを追加します。そのタブでは、任意の属性(ロール、ステータスなど)でユーザーをフィルタリングし、すべてを選択できます。ユーザーの削除方法をユーザーの削除として選択し、すべてのコンテンツを削除する場合、ユーザーが作成したすべてのコンテンツを削除することもできます。
私はすべてのユーザーを削除するためのカスタムモジュール7を実装しました。管理者/人の領域には、この操作を完了するための新しいフォームがあります。
しつこすぎる。
サンドボックスプロジェクトです。よし.
D6用に次の2つのモジュールを試してください。
ユーザープルーン https://drupal.org/project/user_Prune およびユーザー削除 https://drupal.org/project/user_delete
User Pruneを使用すると、指定した基準に基づいて非アクティブなユーザーを一括削除できます。
ユーザーの削除により、ユーザーを削除し、ノードやコメントを含むすべての送信済みコンテンツを削除できます
モジュール すべて削除 が役に立ちます。
インストールしたら、次のようにできます。
drush delete-all articles
または
drush delete-all users
Drupal 6バージョンはdevにありますが、ノートから:
クイック削除以外はすべて機能しているはずです。