From 4aa03da5994e4e138734f518ab3f85471a6031c8 Mon Sep 17 00:00:00 2001 From: "terry%mozilla.org" <> Date: Fri, 24 Mar 2000 02:22:34 +0000 Subject: Added the concept of a "default milstone" for products, and make sure that all products have at least that milestone defined. --- checksetup.pl | 40 ++++++++++++++++++++--- editmilestones.cgi | 18 ++++++++++- editproducts.cgi | 94 +++++++++++++++++++++++++++++++++++++----------------- 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 "\n"; print "\n"; print " \n"; @@ -369,6 +373,13 @@ one."; "
Part
\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 "

Do you really want to delete this milestone?

\n"; print "

\n"; print "\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.
\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 " Description:\n"; print " \n"; + $defaultmilestone = value_quote($defaultmilestone); if (Param('usetargetmilestone')) { $milestoneurl = value_quote($milestoneurl); print "\n"; print " Milestone URL:\n"; print " \n"; + + print "\n"; + print " Default milestone:\n"; + + print " \n"; + } else { + print qq{\n}; } # Added -JMR, 2/16/00 @@ -229,7 +238,7 @@ unless ($action) { print ""; } print "\n"; - print " Add a new product\n"; + print " Add a new product\n"; print " Add\n"; print "\n"; @@ -254,7 +263,7 @@ if ($action eq 'add') { print "\n"; print "\n"; - EmitFormElements('', '', '', '', 0, 0, 10000, 0); + EmitFormElements('', '', '', '', 0, 0, 10000, 0, "---"); print "\n"; print " \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 "\n"; print " \n"; @@ -780,6 +794,8 @@ if ($action eq 'edit') { print "\n"; print "\n"; print "\n"; + $defaultmilestone = value_quote($defaultmilestone); + print "\n"; print "\n"; print "\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.
\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); -- cgit v1.2.3-24-g4f1b
Version:
Edit components: