From 951c040a0968a02740464e359a9bfd3c75a0e4cc Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Sat, 25 Jun 2005 19:10:28 +0000 Subject: Bug 277454: Bugs in inactivated groups don't show padlocks on the buglist - Patch by Marc Schumann r=LpSolit a=justdave --- sanitycheck.cgi | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 7 deletions(-) (limited to 'sanitycheck.cgi') diff --git a/sanitycheck.cgi b/sanitycheck.cgi index 7b5db7ad3..79295b3c8 100755 --- a/sanitycheck.cgi +++ b/sanitycheck.cgi @@ -21,6 +21,7 @@ # Contributor(s): Terry Weissman # Matthew Tuck # Max Kanat-Alexander +# Marc Schumann use strict; @@ -175,6 +176,75 @@ if (defined $cgi->param('cleangroupsnow')) { "- reduced from $before records to $after records"); } +########################################################################### +# Create missing group_control_map entries +########################################################################### + +if (defined $cgi->param('createmissinggroupcontrolmapentries')) { + Status(qq{OK, now creating SHOWN member control entries + for product/group combinations lacking one.}); + + my $na = CONTROLMAPNA; + my $shown = CONTROLMAPSHOWN; + my $insertsth = $dbh->prepare( + qq{INSERT INTO group_control_map ( + group_id, product_id, entry, + membercontrol, othercontrol, canedit + ) + VALUES ( + ?, ?, 0, + $shown, $na, 0 + )}); + my $updatesth = $dbh->prepare(qq{UPDATE group_control_map + SET membercontrol = $shown + WHERE group_id = ? + AND product_id = ?}); + my $counter = 0; + + # Find all group/product combinations used for bugs but not set up + # correctly in group_control_map + my $invalid_combinations = $dbh->selectall_arrayref( + qq{ SELECT bugs.product_id, + bgm.group_id, + gcm.membercontrol, + groups.name, + products.name + FROM bugs + INNER JOIN bug_group_map AS bgm + ON bugs.bug_id = bgm.bug_id + INNER JOIN groups + ON bgm.group_id = groups.id + INNER JOIN products + ON bugs.product_id = products.id + LEFT JOIN group_control_map AS gcm + ON bugs.product_id = gcm.product_id + AND bgm.group_id = gcm.group_id + WHERE COALESCE(gcm.membercontrol, $na) = $na + } . $dbh->sql_group_by('bugs.product_id, bgm.group_id')); + + foreach (@$invalid_combinations) { + my ($product_id, $group_id, $currentmembercontrol, + $group_name, $product_name) = @$_; + + $counter++; + if (defined($currentmembercontrol)) { + Status(qq{Updating NA/xxx group control + setting for group $group_name to + SHOWN/xxx in product + $product_name.}); + $updatesth->execute($group_id, $product_id); + } + else { + Status(qq{Generating SHOWN/NA group control setting + for group $group_name in product + $product_name.}); + $insertsth->execute($group_id, $product_id); + } + } + + Status("Repaired $counter defective group control settings."); +} + ########################################################################### # Send unsent mail ########################################################################### @@ -656,8 +726,8 @@ if (defined $cgi->param('rebuildkeywordcache')) { # General bug checks ########################################################################### -sub BugCheck ($$) { - my ($middlesql, $errortext) = @_; +sub BugCheck ($$;$$) { + my ($middlesql, $errortext, $repairparam, $repairtext) = @_; SendSQL("SELECT DISTINCT bugs.bug_id " . "FROM $middlesql " . @@ -672,6 +742,11 @@ sub BugCheck ($$) { if (@badbugs) { Alert("$errortext: " . BugListLinks(@badbugs)); + if ($repairparam) { + $repairtext ||= 'Repair these bugs'; + print qq{$repairtext.}, + '

'; + } } } @@ -763,10 +838,12 @@ BugCheck("bugs LEFT JOIN group_control_map ON bugs.product_id = group_control_map.product_id AND bug_group_map.group_id = group_control_map.group_id - WHERE groups.isactive != 0 - AND ((group_control_map.membercontrol = " . CONTROLMAPNA . ") + WHERE ((group_control_map.membercontrol = " . CONTROLMAPNA . ") OR (group_control_map.membercontrol IS NULL))", - "Have groups not permitted for their products"); + 'Have groups not permitted for their products', + 'createmissinggroupcontrolmapentries', + 'Permit the missing groups for the affected products + (set member control to SHOWN)'); BugCheck("bugs INNER JOIN bug_group_map @@ -776,8 +853,7 @@ BugCheck("bugs LEFT JOIN group_control_map ON bugs.product_id = group_control_map.product_id AND bug_group_map.group_id = group_control_map.group_id - WHERE groups.isactive != 0 - AND group_control_map.membercontrol = " . CONTROLMAPMANDATORY . " + WHERE group_control_map.membercontrol = " . CONTROLMAPMANDATORY . " AND bug_group_map.group_id IS NULL", "Are missing groups required for their products"); -- cgit v1.2.3-24-g4f1b