]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Added the concept of a "default milstone" for products, and make sure
authorterry%mozilla.org <>
Fri, 24 Mar 2000 02:22:34 +0000 (02:22 +0000)
committerterry%mozilla.org <>
Fri, 24 Mar 2000 02:22:34 +0000 (02:22 +0000)
that all products have at least that milestone defined.

checksetup.pl
editmilestones.cgi
editproducts.cgi
post_bug.cgi

index a5aa6e8c2cebfdde80fed69e74016afad2214f24..9a11dc5880748093d8ad03db1231e709cc55e7cb 100755 (executable)
@@ -660,7 +660,8 @@ $table{products} =
     disallownew tinyint not null,
     votesperuser smallint not null,
     maxvotesperbug smallint not null default 10000,
-    votestoconfirm smallint not null
+    votestoconfirm smallint not null,
+    defaultmilestone varchar(20) not null default "---"
 ';
 
 
@@ -1073,8 +1074,15 @@ sub ChangeFieldType ($$$)
     my $ref = GetFieldDef($table, $field);
     #print "0: $$ref[0]   1: $$ref[1]   2: $$ref[2]   3: $$ref[3]  4: $$ref[4]\n";
 
-    if ($$ref[1] ne $newtype) {
+    my $oldtype = $ref->[1];
+    if ($ref->[4]) {
+        $oldtype .= qq{ default "$ref->[4]"};
+    }
+
+    if ($oldtype ne $newtype) {
         print "Updating field type $field in table $table ...\n";
+        print "old: $oldtype\n";
+        print "new: $newtype\n";
         $newtype .= " NOT NULL" if $$ref[3];
         $dbh->do("ALTER TABLE $table
                   CHANGE $field
@@ -1543,8 +1551,31 @@ if (!($sth->fetchrow_arrayref()->[0])) {
 # the size of the target_milestone field in the bugs table.
 
 ChangeFieldType('bugs', 'target_milestone',
-                'varchar(20) not null default "---"');
-ChangeFieldType('milestones', 'value', 'varchar(20) not null');
+                'varchar(20) default "---"');
+ChangeFieldType('milestones', 'value', 'varchar(20)');
+
+
+# 2000-03-23 Added a defaultmilestone field to the products table, so that
+# we know which milestone to initially assign bugs to.
+
+if (!GetFieldDef('products', 'defaultmilestone')) {
+    AddField('products', 'defaultmilestone',
+             'varchar(20) not null default "---"');
+    $sth = $dbh->prepare("SELECT product, defaultmilestone FROM products");
+    $sth->execute();
+    while (my ($product, $defaultmilestone) = $sth->fetchrow_array()) {
+        $product = $dbh->quote($product);
+        $defaultmilestone = $dbh->quote($defaultmilestone);
+        my $s2 = $dbh->prepare("SELECT value FROM milestones " .
+                               "WHERE value = $defaultmilestone " .
+                               "AND product = $product");
+        $s2->execute();
+        if (!$s2->fetchrow_array()) {
+            $dbh->do("INSERT INTO milestones(value, product) " .
+                     "VALUES ($defaultmilestone, $product)");
+        }
+    }
+}
 
 
 #
@@ -1563,3 +1594,4 @@ if ($regenerateshadow) {
     print "Now regenerating the shadow database for all bugs.\n";
     system("./processmail regenerate");
 }
+unlink "data/versioncache";
index b2c67e5714e5edcb8989c6ed39213b4e03696d6c..fcd81ea0941c74d9997374d97ff201c4c31fc069 100755 (executable)
@@ -336,6 +336,10 @@ if ($action eq 'del') {
                 AND target_milestone=" . SqlQuote($milestone));
     my $bugs = FetchOneColumn();
 
+    SendSQL("SELECT defaultmilestone FROM products " .
+            "WHERE product=" . SqlQuote($product));
+    my $defaultmilestone = FetchOneColumn();
+
     print "<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0>\n";
     print "<TR BGCOLOR=\"#6666FF\">\n";
     print "  <TH VALIGN=\"top\" ALIGN=\"left\">Part</TH>\n";
@@ -369,6 +373,13 @@ one.";
               "</TD></TR></TABLE>\n";
     }
 
+    if ($defaultmilestone eq $milestone) {
+        print "Sorry; this is the default milestone for this product, and " .
+            "so it can not be deleted.";
+        PutTrailer($localtrailer);
+        exit;
+    }
+
     print "<P>Do you really want to delete this milestone?<P>\n";
     print "<FORM METHOD=POST ACTION=editmilestones.cgi>\n";
     print "<INPUT TYPE=SUBMIT VALUE=\"Yes, delete\">\n";
@@ -499,7 +510,8 @@ if ($action eq 'update') {
     CheckMilestone($product,$milestoneold);
 
     SendSQL("LOCK TABLES bugs WRITE,
-                         milestones WRITE");
+                         milestones WRITE,
+                         products WRITE");
 
     if ($milestone ne $milestoneold) {
         unless ($milestone) {
@@ -522,6 +534,10 @@ if ($action eq 'update') {
                  SET value=" . SqlQuote($milestone) . "
                  WHERE product=" . SqlQuote($product) . "
                    AND value=" . SqlQuote($milestoneold));
+        SendSQL("UPDATE products " .
+                "SET defaultmilestone = " . SqlQuote($milestone) .
+                "WHERE product = " . SqlQuote($product) .
+                "  AND defaultmilestone = " . SqlQuote($milestoneold));
         unlink "data/versioncache";
         print "Updated milestone.<BR>\n";
     }
index f0cc7b61bbc7c73e57fcb1e672c02926e8fbb0b0..abbf8fde8d5912141947e62a03c4d07849f19f55 100755 (executable)
@@ -79,10 +79,11 @@ sub CheckProduct ($)
 # Displays the form to edit a products parameters
 #
 
-sub EmitFormElements ($$$$$$$$)
+sub EmitFormElements ($$$$$$$$$)
 {
     my ($product, $description, $milestoneurl, $userregexp, $disallownew,
-        $votesperuser, $maxvotesperbug, $votestoconfirm) = @_;
+        $votesperuser, $maxvotesperbug, $votestoconfirm, $defaultmilestone)
+        = @_;
 
     $product = value_quote($product);
     $description = value_quote($description);
@@ -94,11 +95,19 @@ sub EmitFormElements ($$$$$$$$)
     print "  <TH ALIGN=\"right\">Description:</TH>\n";
     print "  <TD><TEXTAREA ROWS=4 COLS=64 WRAP=VIRTUAL NAME=\"description\">$description</TEXTAREA></TD>\n";
 
+    $defaultmilestone = value_quote($defaultmilestone);
     if (Param('usetargetmilestone')) {
         $milestoneurl = value_quote($milestoneurl);
         print "</TR><TR>\n";
         print "  <TH ALIGN=\"right\">Milestone URL:</TH>\n";
         print "  <TD><INPUT TYPE=TEXT SIZE=64 MAXLENGTH=255 NAME=\"milestoneurl\" VALUE=\"$milestoneurl\"></TD>\n";
+
+        print "</TR><TR>\n";
+        print "  <TH ALIGN=\"right\">Default milestone:</TH>\n";
+        
+        print "  <TD><INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20 NAME=\"defaultmilestone\" VALUE=\"$defaultmilestone\"></TD>\n";
+    } else {
+        print qq{<INPUT TYPE=HIDDEN NAME="defaultmilestone" VALUE="$defaultmilestone">\n};
     }
 
     # Added -JMR, 2/16/00
@@ -229,7 +238,7 @@ unless ($action) {
         print "</TR>";
     }
     print "<TR>\n";
-    print "  <TD VALIGN=\"top\" COLSPAN=5>Add a new product</TD>\n";
+    print "  <TD VALIGN=\"top\" COLSPAN=7>Add a new product</TD>\n";
     print "  <TD VALIGN=\"top\" ALIGN=\"middle\"><FONT SIZE =-1><A HREF=\"editproducts.cgi?action=add\">Add</A></FONT></TD>\n";
     print "</TR></TABLE>\n";
 
@@ -254,7 +263,7 @@ if ($action eq 'add') {
     print "<FORM METHOD=POST ACTION=editproducts.cgi>\n";
     print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
-    EmitFormElements('', '', '', '', 0, 0, 10000, 0);
+    EmitFormElements('', '', '', '', 0, 0, 10000, 0, "---");
 
     print "</TR><TR>\n";
     print "  <TH ALIGN=\"right\">Version:</TH>\n";
@@ -315,23 +324,28 @@ if ($action eq 'new') {
     $maxvotesperbug = 10000 if !defined $maxvotesperbug;
     my $votestoconfirm = $::FORM{votestoconfirm};
     $votestoconfirm ||= 0;
+    my $defaultmilestone = $::FORM{defaultmilestone} || "---";
 
     # Add the new product.
     SendSQL("INSERT INTO products ( " .
-          "product, description, milestoneurl, disallownew, votesperuser, " .
-          "maxvotesperbug, votestoconfirm" .
-          " ) VALUES ( " .
-          SqlQuote($product) . "," .
-          SqlQuote($description) . "," .
-          SqlQuote($milestoneurl) . "," .
-          $disallownew . "," .
-          "$votesperuser, $maxvotesperbug, $votestoconfirm)");
+            "product, description, milestoneurl, disallownew, votesperuser, " .
+            "maxvotesperbug, votestoconfirm, defaultmilestone" .
+            " ) VALUES ( " .
+            SqlQuote($product) . "," .
+            SqlQuote($description) . "," .
+            SqlQuote($milestoneurl) . "," .
+            $disallownew . "," .
+            "$votesperuser, $maxvotesperbug, $votestoconfirm, " .
+            SqlQuote($defaultmilestone) . ")");
     SendSQL("INSERT INTO versions ( " .
           "value, program" .
           " ) VALUES ( " .
           SqlQuote($version) . "," .
           SqlQuote($product) . ")" );
 
+    SendSQL("INSERT INTO milestones (product, value) VALUES (" .
+            SqlQuote($product) . ", " . SqlQuote($defaultmilestone) . ")");
+
     # 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")) {
@@ -668,11 +682,11 @@ if ($action eq 'edit') {
 
     # get data of product
     SendSQL("SELECT description,milestoneurl,disallownew,
-                    votesperuser,maxvotesperbug,votestoconfirm
+                    votesperuser,maxvotesperbug,votestoconfirm,defaultmilestone
              FROM products
              WHERE product=" . SqlQuote($product));
     my ($description, $milestoneurl, $disallownew,
-        $votesperuser, $maxvotesperbug, $votestoconfirm) =
+        $votesperuser, $maxvotesperbug, $votestoconfirm, $defaultmilestone) =
         FetchSQLData();
 
     my $userregexp = '';
@@ -688,7 +702,7 @@ if ($action eq 'edit') {
 
     EmitFormElements($product, $description, $milestoneurl, $userregexp,
                      $disallownew, $votesperuser, $maxvotesperbug,
-                     $votestoconfirm);
+                     $votestoconfirm, $defaultmilestone);
     
     print "</TR><TR VALIGN=top>\n";
     print "  <TH ALIGN=\"right\"><A HREF=\"editcomponents.cgi?product=", url_quote($product), "\">Edit components:</A></TH>\n";
@@ -780,6 +794,8 @@ if ($action eq 'edit') {
     print "<INPUT TYPE=HIDDEN NAME=\"votesperuserold\" VALUE=\"$votesperuser\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"maxvotesperbugold\" VALUE=\"$maxvotesperbug\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"votestoconfirmold\" VALUE=\"$votestoconfirm\">\n";
+    $defaultmilestone = value_quote($defaultmilestone);
+    print "<INPUT TYPE=HIDDEN NAME=\"defaultmilestoneold\" VALUE=\"$defaultmilestone\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"action\" VALUE=\"update\">\n";
     print "<INPUT TYPE=SUBMIT VALUE=\"Update\">\n";
 
@@ -800,21 +816,23 @@ if ($action eq 'edit') {
 if ($action eq 'update') {
     PutHeader("Update product");
 
-    my $productold        = trim($::FORM{productold}        || '');
-    my $description       = trim($::FORM{description}       || '');
-    my $descriptionold    = trim($::FORM{descriptionold}    || '');
-    my $disallownew       = trim($::FORM{disallownew}       || '');
-    my $disallownewold    = trim($::FORM{disallownewold}    || '');
-    my $milestoneurl      = trim($::FORM{milestoneurl}      || '');
-    my $milestoneurlold   = trim($::FORM{milestoneurlold}   || '');
-    my $votesperuser      = trim($::FORM{votesperuser}      || 0);
-    my $votesperuserold   = trim($::FORM{votesperuserold}   || '');
-    my $userregexp        = trim($::FORM{userregexp}        || '');
-    my $userregexpold     = trim($::FORM{userregexpold}     || '');
-    my $maxvotesperbug    = trim($::FORM{maxvotesperbug}    || 0);
-    my $maxvotesperbugold = trim($::FORM{maxvotesperbugold} || '');
-    my $votestoconfirm    = trim($::FORM{votestoconfirm}    || 0);
-    my $votestoconfirmold = trim($::FORM{votestoconfirmold} || '');
+    my $productold          = trim($::FORM{productold}          || '');
+    my $description         = trim($::FORM{description}         || '');
+    my $descriptionold      = trim($::FORM{descriptionold}      || '');
+    my $disallownew         = trim($::FORM{disallownew}         || '');
+    my $disallownewold      = trim($::FORM{disallownewold}      || '');
+    my $milestoneurl        = trim($::FORM{milestoneurl}        || '');
+    my $milestoneurlold     = trim($::FORM{milestoneurlold}     || '');
+    my $votesperuser        = trim($::FORM{votesperuser}        || 0);
+    my $votesperuserold     = trim($::FORM{votesperuserold}     || 0);
+    my $userregexp          = trim($::FORM{userregexp}          || '');
+    my $userregexpold       = trim($::FORM{userregexpold}       || '');
+    my $maxvotesperbug      = trim($::FORM{maxvotesperbug}      || 0);
+    my $maxvotesperbugold   = trim($::FORM{maxvotesperbugold}   || 0);
+    my $votestoconfirm      = trim($::FORM{votestoconfirm}      || 0);
+    my $votestoconfirmold   = trim($::FORM{votestoconfirmold}   || 0);
+    my $defaultmilestone    = trim($::FORM{defaultmilestone}    || '---');
+    my $defaultmilestoneold = trim($::FORM{defaultmilestoneold} || '---');
 
     my $checkvotes = 0;
 
@@ -955,6 +973,22 @@ if ($action eq 'update') {
     }
 
 
+    if ($defaultmilestone ne $defaultmilestoneold) {
+        SendSQL("SELECT value FROM milestones " .
+                "WHERE value = " . SqlQuote($defaultmilestone) .
+                "  AND product = " . SqlQuote($productold));
+        if (!FetchOneColumn()) {
+            print "Sorry, the milestone $defaultmilestone must be defined first.";
+            SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
+            exit;
+        }
+        SendSQL("UPDATE products " .
+                "SET defaultmilestone = " . SqlQuote($defaultmilestone) .
+                "WHERE product=" . SqlQuote($productold));
+        print "Updated default milestone.<BR>\n";
+    }
+
     my $qp = SqlQuote($product);
     my $qpold = SqlQuote($productold);
 
index 975d407d8895e3dc990600da2f51fff0b38007cb..3c5f0698fa472aca9f93669da6fe7014b2f16228 100755 (executable)
@@ -105,7 +105,8 @@ $::FORM{'reporter'} = DBNameToIdAndCheck($::FORM{'reporter'});
 
 my @bug_fields = ("reporter", "product", "version", "rep_platform",
                   "bug_severity", "priority", "op_sys", "assigned_to",
-                  "bug_status", "bug_file_loc", "short_desc", "component");
+                  "bug_status", "bug_file_loc", "short_desc", "component",
+                  "target_milestone");
 
 if (Param("useqacontact")) {
     SendSQL("select initialqacontact from components where program=" .
@@ -139,11 +140,19 @@ if (!exists $::FORM{'bug_status'}) {
     }
 }
 
+if (!exists $::FORM{'target_milestone'}) {
+    SendSQL("SELECT defaultmilestone FROM products " .
+            "WHERE product = " . SqlQuote($::FORM{'product'}));
+    $::FORM{'target_milestone'} = FetchOneColumn();
+}
+
 if ( Param("strictvaluechecks") ) {
     GetVersionTable();  
     CheckFormField(\%::FORM, 'reporter');
     CheckFormField(\%::FORM, 'product', \@::legal_product);
     CheckFormField(\%::FORM, 'version', \@{$::versions{$::FORM{'product'}}});
+    CheckFormField(\%::FORM, 'target_milestone',
+                   \@{$::target_milestone{$::FORM{'product'}}});
     CheckFormField(\%::FORM, 'rep_platform', \@::legal_platform);
     CheckFormField(\%::FORM, 'bug_severity', \@::legal_severity);
     CheckFormField(\%::FORM, 'priority', \@::legal_priority);