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") {