diff options
author | terry%mozilla.org <> | 2000-03-24 02:22:34 +0000 |
---|---|---|
committer | terry%mozilla.org <> | 2000-03-24 02:22:34 +0000 |
commit | 4aa03da5994e4e138734f518ab3f85471a6031c8 (patch) | |
tree | 9ec5578bb9c85842be24a1c8a5a059ab10608edd | |
parent | 71eef1691521b26b1554d9b647bee684e02e47e7 (diff) | |
download | bugs-4aa03da5994e4e138734f518ab3f85471a6031c8.tar bugs-4aa03da5994e4e138734f518ab3f85471a6031c8.tar.gz bugs-4aa03da5994e4e138734f518ab3f85471a6031c8.tar.bz2 bugs-4aa03da5994e4e138734f518ab3f85471a6031c8.tar.xz bugs-4aa03da5994e4e138734f518ab3f85471a6031c8.zip |
Added the concept of a "default milstone" for products, and make sure
that all products have at least that milestone defined.
-rwxr-xr-x | checksetup.pl | 40 | ||||
-rwxr-xr-x | editmilestones.cgi | 18 | ||||
-rwxr-xr-x | editproducts.cgi | 94 | ||||
-rwxr-xr-x | post_bug.cgi | 11 |
4 files changed, 127 insertions, 36 deletions
diff --git a/checksetup.pl b/checksetup.pl index a5aa6e8c2..9a11dc588 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -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"; diff --git a/editmilestones.cgi b/editmilestones.cgi index b2c67e571..fcd81ea09 100755 --- a/editmilestones.cgi +++ b/editmilestones.cgi @@ -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"; } diff --git a/editproducts.cgi b/editproducts.cgi index f0cc7b61b..abbf8fde8 100755 --- a/editproducts.cgi +++ b/editproducts.cgi @@ -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); diff --git a/post_bug.cgi b/post_bug.cgi index 975d407d8..3c5f0698f 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -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); |