mirror of https://github.com/BOINC/boinc.git
server: when deleting user, remove related DB records
When deleting a user (from the delete_spammers.php script), remove records that refer to that user in private_messages, notify, credit_user, badge_user, and friend tables. Notes: - This change eliminates some dangling references, but in general a BOINC DB doesn't have referential integrity. The code should check for dangling references. - Functions like BoincUser::delete() should delete a user record, not try to remove things that refer to it. The function delete_user() (in user.inc) does this.
This commit is contained in:
parent
644690b100
commit
40d68bc688
|
@ -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 {
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
||||
?>
|
||||
|
|
|
@ -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") {
|
||||
|
|
Loading…
Reference in New Issue