#! /usr/bin/perl
# Remove all information from a user
# Copyright (C) 2009  Sylvain Beucler
#
# This file is part of Savane.
# 
# Savane is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
# 
# Savane is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Use it with caution, we recommend to only use it on spammer accounts
# where the posted content needs to be removed. For other accounts,
# the data need to be preserved.

use Savane;

# Get users to purge
my @db = GetDBLists("user",
  "email = 'idontexist\@nowhere.net' AND spamscore > 5",
  "user_id");

$count = 0;
foreach my $line (@db) {
    my ($user_id) = @{$line};
    print "user_id=$user_id\n";

    # Purge user posts (which you normally keep for normal suspended users)
    $count += DeleteDB('support', "submitted_by=$user_id");
    $count += DeleteDB('support_history', "mod_by=$user_id");
    $count += DeleteDB('bugs', "submitted_by=$user_id");
    $count += DeleteDB('bugs_history', "mod_by=$user_id");
    $count += DeleteDB('task', "submitted_by=$user_id");
    $count += DeleteDB('task_history', "mod_by=$user_id");
    $count += DeleteDB('patch', "submitted_by=$user_id");
    $count += DeleteDB('patch_history', "mod_by=$user_id");
    $count += DeleteDB('cookbook', "submitted_by=$user_id");
    $count += DeleteDB('cookbook_history', "mod_by=$user_id");
    DeleteDB('support_cc', "added_by=$user_id");
    DeleteDB('bugs_cc', "added_by=$user_id");
    DeleteDB('task_cc', "added_by=$user_id");
    DeleteDB('patch_cc', "added_by=$user_id");
    DeleteDB('cookbook_cc', "added_by=$user_id");
    DeleteDB('trackers_file', "submitted_by=$user_id");
    $count += DeleteDB('forum', "posted_by=$user_id");
    $count += DeleteDB('news_bytes', "submitted_by=$user_id");
    $count += DeleteDB('people_job', "created_by=$user_id");

    # Purge user profile
    DeleteDB('people_skill_inventory', "user_id=$user_id");
    DeleteDB('form', "user_id=$user_id");
    DeleteDB('session', "user_id=$user_id");
    DeleteDB('trackers_watcher', "user_id=$user_id");
    DeleteDB('trackers_watcher', "watchee_id=$user_id");
    DeleteDB('trackers_notification', "user_id=$user_id");
    DeleteDB('user_bookmarks', "user_id=$user_id");
    DeleteDB('user_preferences', "user_id=$user_id");
    DeleteDB('user_squad', "user_id=$user_id");
    DeleteDB('user_votes', "vote_id=$user_id");
    DeleteDB('task_filter', "user_id=$user_id");
    DeleteDB('trackers_spamscore', "reporter_user_id=$user_id");
    DeleteDB('trackers_spamscore', "affected_user_id=$user_id");
    DeleteDB('forum_monitored_forums', "user_id=$user_id");
    DeleteDB('forum_saved_place', "user_id=$user_id");
    DeleteDB('group_history', "mod_by=$user_id");
    DeleteDB('user_group', "user_id=$user_id");

    # Reset other references without removing the related data
    SetDBSettings("task_report", "user_id=$user_id", "user_id=100");
    SetDBSettings("mail_group_list", "list_admin=$user_id", "list_admin=100");
    SetDBSettings("support", "assigned_to=$user_id", "assigned_to=100");
    SetDBSettings("bugs", "assigned_to=$user_id", "assigned_to=100");
    SetDBSettings("task", "assigned_to=$user_id", "assigned_to=100");
    SetDBSettings("patch", "assigned_to=$user_id", "assigned_to=100");
    SetDBSettings("cookbook", "assigned_to=$user_id", "assigned_to=100");

    # Purge user itself
    DeleteDB('user', "user_id=$user_id");
}

print "$count posts deleted\n";
