# Contributor(s): Terry Weissman <terry@mozilla.org>
# Matthew Tuck <matty@chariot.net.au>
# Max Kanat-Alexander <mkanat@bugzilla.org>
+# Marc Schumann <wurblzap@gmail.com>
use strict;
"- reduced from $before records to $after records");
}
+###########################################################################
+# Create missing group_control_map entries
+###########################################################################
+
+if (defined $cgi->param('createmissinggroupcontrolmapentries')) {
+ Status(qq{OK, now creating <code>SHOWN</code> 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 <code>NA/<em>xxx</em></code> group control
+ setting for group <em>$group_name</em> to
+ <code>SHOWN/<em>xxx</em></code> in product
+ <em>$product_name</em>.});
+ $updatesth->execute($group_id, $product_id);
+ }
+ else {
+ Status(qq{Generating <code>SHOWN/NA</code> group control setting
+ for group <em>$group_name</em> in product
+ <em>$product_name</em>.});
+ $insertsth->execute($group_id, $product_id);
+ }
+ }
+
+ Status("Repaired $counter defective group control settings.");
+}
+
###########################################################################
# Send unsent mail
###########################################################################
# General bug checks
###########################################################################
-sub BugCheck ($$) {
- my ($middlesql, $errortext) = @_;
+sub BugCheck ($$;$$) {
+ my ($middlesql, $errortext, $repairparam, $repairtext) = @_;
SendSQL("SELECT DISTINCT bugs.bug_id " .
"FROM $middlesql " .
if (@badbugs) {
Alert("$errortext: " . BugListLinks(@badbugs));
+ if ($repairparam) {
+ $repairtext ||= 'Repair these bugs';
+ print qq{<a href="sanitycheck.cgi?$repairparam=1">$repairtext</a>.},
+ '<p>';
+ }
}
}
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 <code>SHOWN</code>)');
BugCheck("bugs
INNER JOIN bug_group_map
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");