diff --git a/html/inc/boinc_db.inc b/html/inc/boinc_db.inc index cb00a2547c..1e42eb1b67 100644 --- a/html/inc/boinc_db.inc +++ b/html/inc/boinc_db.inc @@ -663,6 +663,10 @@ class BoincCreditUser { $db = BoincDb::get(); return $db->update_aux('credit_user', $clause); } + static function delete_user($user) { + $db = BoincDb::get(); + $db->delete_aux('credit_user', "userid=$user->id"); + } } class BoincCreditTeam { diff --git a/html/inc/forum_db.inc b/html/inc/forum_db.inc index 9bfe99b283..98bebb3dd4 100644 --- a/html/inc/forum_db.inc +++ b/html/inc/forum_db.inc @@ -270,6 +270,10 @@ class BoincFriend { $db = BoincDb::get(); return $db->enum('friend', 'BoincFriend', $clause); } + static function delete_aux($clause) { + $db = BoincDb::get(); + return $db->delete_aux('friend', $clause); + } static function delete($id1, $id2) { $db = BoincDb::get(); $db->delete_aux('friend', "user_src=$id1 and user_dest=$id2"); diff --git a/html/inc/user.inc b/html/inc/user.inc index 1b3665546c..fce92459e0 100644 --- a/html/inc/user.inc +++ b/html/inc/user.inc @@ -363,6 +363,7 @@ function show_community_private($user) { if ($n) { foreach($friends as $friend) { $fuser = BoincUser::lookup_id($friend->user_dest); + if (!$fuser) continue; $x .= friend_links($fuser); } row2(tra("Friends")." ($n)", $x); @@ -415,6 +416,7 @@ function get_community_links_object($user){ $friends = BoincFriend::enum("user_src=$user->id and reciprocated=1"); foreach($friends as $friend) { $fuser = BoincUser::lookup_id($friend->user_dest); + if (!$fuser) continue; $cache_object->friends[] = $fuser; } return $cache_object; @@ -552,6 +554,29 @@ function make_user( } } +// delete a user and all associated records except +// result +// host +// batch +// team +// user_submit +// user_submit_app +// credited_job +// donation_paypal +// sent_email +// +function delete_user($user) { + delete_profile($user); + forum_delete_user($user); + // deletes post, thread, subscription, forum_preferences, forum_logging + BoincPrivateMessage::delete_aux("userid=$user->id or senderid=$user->id"); + BoincNotify::delete_aux("userid=$user->id"); + BoincCreditUser::delete_user($user); + BoincBadgeUser::delete("user_id=$user->id"); + BoincFriend::delete_aux("user_src=$user->id or user_dest=$user->id"); + $user->delete(); +} + $cvs_version_tracker[]="\$Id$"; //Generated automatically - do not edit ?> diff --git a/html/ops/delete_spammers.php b/html/ops/delete_spammers.php index a92692fe4a..be8f7c9208 100755 --- a/html/ops/delete_spammers.php +++ b/html/ops/delete_spammers.php @@ -68,19 +68,19 @@ $test = false; // delete a spammer account, and everything associated with it // -function delete_user($user) { +function do_delete_user($user) { global $test; $age = (time() - $user->create_time) / 86400; - echo "----------------\ndeleting user $user->id email $user->email_addr name $user->name age $age days\n"; + echo "deleting user\n"; + echo " ID: $user->id\n"; + echo " email: $user->email_addr\n"; + echo " name: $user->name\n"; + echo " age:$age days\n"; if ($test) { + echo " (test mode - nothing deleted)\n"; return; } - delete_profile($user); - forum_delete_user($user); - BoincPrivateMessage::delete_aux("userid=$user->id or senderid=$user->id"); - BoincNotify::delete_aux("userid=$user->id"); - $q = "delete from user where id=$user->id"; - _mysql_query($q); + delete_user($user); } function delete_list($fname) { @@ -91,7 +91,7 @@ function delete_list($fname) { if (!is_numeric($s)) die("bad ID $s\n"); $user = BoincUser::lookup_id((int)$s); if ($user) { - delete_user($user); + do_delete_user($user); } else { echo "no user ID $s\n"; } @@ -123,7 +123,7 @@ function delete_forums() { } $n = BoincHost::count("userid=$p->userid"); if ($n) continue; - delete_user($user); + do_delete_user($user); } } @@ -147,7 +147,7 @@ function delete_profiles() { $n = BoincPost::count("user=$p->userid"); if ($n) continue; - delete_user($user); + do_delete_user($user); if ($test) { echo "\n$p->userid\n$p->response1\n$p->response2\n"; } @@ -162,7 +162,7 @@ function delete_banished() { $user = BoincUser::lookup_id($fp->userid); if (!$user) continue; if ($user->create_time < time() - $days*86400) continue; - delete_user($user); + do_delete_user($user); } } @@ -209,11 +209,14 @@ for ($i=1; $i<$argc; $i++) { if (!is_numeric($id1) || !is_numeric($id2)) { die ("bad args\n"); } + if ($id2 < $id1) { + die("bad args\n"); + } for ($i=$id1; $i <= $id2; $i++) { $user = BoincUser::lookup_id($i); if ($user) { echo "deleting user $i\n"; - delete_user($user); + do_delete_user($user); } } } else if ($argv[$i] == "--banished") {