$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, " .
# 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 " .
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';
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
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")." ".