Commit 1ad55bf5 authored by lpsolit%gmail.com's avatar lpsolit%gmail.com

Bug 438810: Whines fail when a group or user that was receiving whines is…

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é©ric Buclin <LpSolit@gmail.com> r/a=mkanat
parent 7634b5f6
......@@ -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');
###########################################################################
......@@ -996,6 +1026,30 @@ if (scalar(@$badbugs > 0)) {
}
###########################################################################
# 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
###########################################################################
......
......@@ -288,6 +288,25 @@
[% ELSIF san_tag == "vote_count_alert" %]
Bad vote sum for [% terms.bug %] [%+ id FILTER html %].
[% ELSIF san_tag == "whines_obsolete_target_deletion_start" %]
OK, now removing non-existent targets from whines.
[% ELSIF san_tag == "whines_obsolete_target_deletion_end" %]
Non-existent targets have been removed from whines.
[% ELSIF san_tag == "whines_obsolete_target_start" %]
Checking for whines with non-existent targets.
[% ELSIF san_tag == "whines_obsolete_target_alert" %]
[% FOREACH schedule = schedules %]
Non-existent [% (type == constants.MAILTO_USER) ? "user" : "group" FILTER html %]
[%+ schedule.1 FILTER html %] for whine schedule [% schedule.0 FILTER html %]<br>
[% END %]
[% ELSIF san_tag == "whines_obsolete_target_fix" %]
<a href="sanitycheck.cgi?remove_old_whine_targets=1">Click here to
remove old targets</a>
[% END %]
[% END %]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment