From 1ad55bf5f14320795f3dae361b7bb0654c2c60d9 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Sat, 14 Jun 2008 16:15:22 +0000 Subject: Bug 438810: Whines fail when a group or user that was receiving whines is manually deleted, and sanitycheck.cgi should report this problem - Patch by Frédéric Buclin r/a=mkanat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sanitycheck.cgi | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'sanitycheck.cgi') diff --git a/sanitycheck.cgi b/sanitycheck.cgi index 171029b2e..93228fc67 100755 --- a/sanitycheck.cgi +++ b/sanitycheck.cgi @@ -341,6 +341,36 @@ if ($cgi->param('remove_invalid_attach_references')) { Status('attachment_reference_deletion_end'); } +########################################################################### +# Remove all references to deleted users or groups from whines +########################################################################### + +if ($cgi->param('remove_old_whine_targets')) { + Status('whines_obsolete_target_deletion_start'); + + $dbh->bz_start_transaction(); + + foreach my $target (['groups', 'id', MAILTO_GROUP], + ['profiles', 'userid', MAILTO_USER]) + { + my ($table, $col, $type) = @$target; + my $old_ids = + $dbh->selectcol_arrayref("SELECT DISTINCT mailto + FROM whine_schedules + LEFT JOIN $table + ON $table.$col = whine_schedules.mailto + WHERE mailto_type = $type AND $table.$col IS NULL"); + + if (scalar(@$old_ids)) { + $dbh->do("DELETE FROM whine_schedules + WHERE mailto_type = $type AND mailto IN (" . + join(',', @$old_ids) . ")"); + } + } + $dbh->bz_commit_transaction(); + Status('whines_obsolete_target_deletion_end'); +} + Status('checks_start'); ########################################################################### @@ -995,6 +1025,30 @@ if (scalar(@$badbugs > 0)) { Status('unsent_bugmail_fix'); } +########################################################################### +# Whines +########################################################################### + +Status('whines_obsolete_target_start'); + +my $display_repair_whines_link = 0; +foreach my $target (['groups', 'id', MAILTO_GROUP], + ['profiles', 'userid', MAILTO_USER]) +{ + my ($table, $col, $type) = @$target; + my $old = $dbh->selectall_arrayref("SELECT whine_schedules.id, mailto + FROM whine_schedules + LEFT JOIN $table + ON $table.$col = whine_schedules.mailto + WHERE mailto_type = $type AND $table.$col IS NULL"); + + if (scalar(@$old)) { + Status('whines_obsolete_target_alert', {schedules => $old, type => $type}, 'alert'); + $display_repair_whines_link = 1; + } +} +Status('whines_obsolete_target_fix') if $display_repair_whines_link; + ########################################################################### # End ########################################################################### -- cgit v1.2.3-24-g4f1b