]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 167485; group_id is wrong when usebuggroups is on; patch=joel, r=bbaetz/preed
authorpreed%sigkill.com <>
Mon, 23 Sep 2002 00:51:54 +0000 (00:51 +0000)
committerpreed%sigkill.com <>
Mon, 23 Sep 2002 00:51:54 +0000 (00:51 +0000)
editproducts.cgi

index f602c351ee857e4b2400e6987c75aa4f81632367..0b2c933389e9d4e47f0ad4f4f5749eab3916d55c 100755 (executable)
@@ -326,6 +326,51 @@ if ($action eq 'new') {
     $votestoconfirm ||= 0;
     my $defaultmilestone = $::FORM{defaultmilestone} || "---";
 
+
+    # find the next bit first in case this operation fails; we don't calculate
+    # this by hand; table stolen from editgroups.cgi; see bug 167485
+    my $bit = "";
+    if(Param("usebuggroups")) {
+        my @bitvals = ('1','2','4','8','16','32','64','128','256','512','1024',
+                       '2048','4096','8192','16384','32768',
+    
+                       '65536','131072','262144','524288','1048576','2097152',
+                       '4194304','8388608','16777216','33554432','67108864',
+                       '134217728','268435456','536870912','1073741824',
+                       '2147483648',
+
+                       '4294967296','8589934592','17179869184','34359738368',
+                       '68719476736','137438953472','274877906944',
+                       '549755813888','1099511627776','2199023255552',
+                       '4398046511104','8796093022208','17592186044416',
+                       '35184372088832','70368744177664','140737488355328',
+
+                       '281474976710656','562949953421312','1125899906842624',
+                       '2251799813685248','4503599627370496','9007199254740992',
+                       '18014398509481984','36028797018963968','72057594037927936',
+                       '144115188075855872','288230376151711744',
+                       '576460752303423488','1152921504606846976',
+                       '2305843009213693952','4611686018427387904');
+    
+        # First the next available bit
+        foreach my $bv (@bitvals) {
+            if ($bit eq "") {
+                SendSQL("SELECT bit FROM groups WHERE bit=" . SqlQuote($bv));
+                if (!FetchOneColumn()) { 
+                    $bit = $bv; 
+                }
+            }
+        }
+        if ($bit eq "") {
+            ShowError("Sorry, you already have the maximum number of groups " .
+                      "defined.<BR><BR>You must delete a group first before you " .
+                      "can add any more.</B>");
+            PutTrailer("<a href=editgroups.cgi>Back to the group list</a>");
+            exit;
+        }
+    }
+        
+
     # Add the new product.
     SendSQL("INSERT INTO products ( " .
             "product, description, milestoneurl, disallownew, votesperuser, " .
@@ -349,16 +394,6 @@ if ($action eq 'new') {
     # If we're using bug groups, then we need to create a group for this
     # product as well.  -JMR, 2/16/00
     if(Param("usebuggroups")) {
-        # First we need to figure out the bit for this group.  We'll simply
-        # use the next highest bit available.  We'll use a minimum bit of 256,
-        # to leave room for a few more Bugzilla operation groups at the bottom.
-        SendSQL("SELECT MAX(bit) FROM groups");
-        my $bit = FetchOneColumn();
-        if($bit < 256) {
-            $bit = 256;
-        } else {
-            $bit = $bit * 2;
-        }
         
         # Next we insert into the groups table
         SendSQL("INSERT INTO groups " .
@@ -418,8 +453,6 @@ if ($action eq 'del') {
              FROM products
              WHERE product=" . SqlQuote($product));
     my ($description, $milestoneurl, $disallownew) = FetchSQLData();
-    my $milestonelink = $milestoneurl ? "<a href=\"$milestoneurl\">$milestoneurl</a>"
-                                      : "<font color=\"red\">missing</font>";
     $description ||= "<FONT COLOR=\"red\">description missing</FONT>";
     $disallownew = $disallownew ? 'closed' : 'open';
     
@@ -439,7 +472,7 @@ if ($action eq 'del') {
     if (Param('usetargetmilestone')) {
         print "</TR><TR>\n";
         print "  <TD VALIGN=\"top\">Milestone URL:</TD>\n";
-        print "  <TD VALIGN=\"top\">$milestonelink</TD>\n";
+        print "  <TD VALIGN=\"top\"><A HREF=\"$milestoneurl\">$milestoneurl</A></TD>\n";
     }
 
     # Added -JMR, 2/16/00
@@ -1009,10 +1042,10 @@ if ($action eq 'update') {
         SendSQL("UPDATE products SET product=$qp WHERE product=$qpold");
         SendSQL("UPDATE versions SET program=$qp WHERE program=$qpold");
         SendSQL("UPDATE milestones SET product=$qp WHERE product=$qpold");
-        # Need to do an update to groups as well.  If there is a corresponding
-        # bug group, whether usebuggroups is currently set or not, we want to
-        # update it so it will match in the future.  If there is no group, this
-        # update statement will do nothing, so no harm done.  -JMR, 3/8/00
+       # Need to do an update to groups as well.  If there is a corresponding
+       # bug group, whether usebuggroups is currently set or not, we want to
+       # update it so it will match in the future.  If there is no group, this
+       # update statement will do nothing, so no harm done.  -JMR, 3/8/00
         SendSQL("UPDATE groups " .
                 "SET name=$qp, " .
                 "description=".SqlQuote($product." Bugs Access")." ".