]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 277454: Bugs in inactivated groups don't show padlocks on the buglist - Patch...
authorlpsolit%gmail.com <>
Sat, 25 Jun 2005 19:10:28 +0000 (19:10 +0000)
committerlpsolit%gmail.com <>
Sat, 25 Jun 2005 19:10:28 +0000 (19:10 +0000)
buglist.cgi
checksetup.pl
sanitycheck.cgi

index 3070fbcec685ae97422936f10917516171c4b8ec..65b0c4e2b2aa2aa3a28f681b14965e86678cb3e3 100755 (executable)
@@ -894,16 +894,16 @@ if (@bugidlist) {
             $dbh->sql_group_by('bugs.bug_id'));
     $sth->execute();
     while (my ($bug_id, $min_membercontrol) = $sth->fetchrow_array()) {
-        $min_membercontrol{$bug_id} = $min_membercontrol;
+        $min_membercontrol{$bug_id} = $min_membercontrol || CONTROLMAPNA;
     }
     foreach my $bug (@bugs) {
         next unless defined($min_membercontrol{$bug->{'bug_id'}});
-        if ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPSHOWN
-              || $min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPDEFAULT) {
-            $bug->{'secure_mode'} = 'manual';
-        } elsif ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPMANDATORY) {
+        if ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPMANDATORY) {
             $bug->{'secure_mode'} = 'implied';
         }
+        else {
+            $bug->{'secure_mode'} = 'manual';
+        }
     }
 }
 
index 4cfc096e186606cf3c251e84c105278377f73ec6..61df2c68835639ad0d921038b00bf4069d16697d 100755 (executable)
@@ -3314,7 +3314,7 @@ if ($mapcnt == 0) {
     # First, get all the existing products and their groups.
     $sth = $dbh->prepare("SELECT groups.id, products.id, groups.name, " .
                          "products.name FROM groups, products " .
-                         "WHERE isbuggroup != 0 AND isactive != 0");
+                         "WHERE isbuggroup != 0");
     $sth->execute();
     while (my ($groupid, $productid, $groupname, $productname) 
             = $sth->fetchrow_array()) {
index 7b5db7ad341fefe1227635019b37acf4aafb67ad..79295b3c806da8c9e4418e293b0656adb5d0a317 100755 (executable)
@@ -21,6 +21,7 @@
 # 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;
 
@@ -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 <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
 ###########################################################################
@@ -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{<a href="sanitycheck.cgi?$repairparam=1">$repairtext</a>.},
+                  '<p>';
+        }
     }
 }
 
@@ -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 <code>SHOWN</code>)');
 
 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");