summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorterry%mozilla.org <>2000-01-15 07:35:24 +0100
committerterry%mozilla.org <>2000-01-15 07:35:24 +0100
commit5eee338175a2f2bf78290ad4154639a2972077ee (patch)
tree2b407e5c7fb1bdd8fe26820c9e5e81775b784b0f
parent5c232e771356b52b3acb962e258ccf83c792f68c (diff)
downloadbugzilla-5eee338175a2f2bf78290ad4154639a2972077ee.tar.gz
bugzilla-5eee338175a2f2bf78290ad4154639a2972077ee.tar.xz
Patch by Ramon Felciano <felciano@ingenuity.com>, with many tweaks by
me. Added a footer to every page. Add some options to do things like display checkboxes instead of scrolling lists, and a new formatting for email diffs, and show list items capitalized instead of all upper case.
-rw-r--r--CGI.pl214
-rw-r--r--bug_form.pl2
-rwxr-xr-xbuglist.cgi51
-rwxr-xr-xchangepassword.cgi6
-rwxr-xr-xcolchange.cgi1
-rwxr-xr-xcreateaccount.cgi3
-rwxr-xr-xcreateattachment.cgi3
-rw-r--r--defparams.pl35
-rwxr-xr-xdescribecomponents.cgi3
-rwxr-xr-xdescribekeywords.cgi2
-rwxr-xr-xdoeditparams.cgi3
-rwxr-xr-xdoeditvotes.cgi10
-rwxr-xr-xeditcomponents.cgi2
-rwxr-xr-xeditkeywords.cgi2
-rwxr-xr-xeditparams.cgi2
-rwxr-xr-xeditproducts.cgi8
-rwxr-xr-xeditusers.cgi2
-rwxr-xr-xeditversions.cgi2
-rwxr-xr-xenter_bug.cgi29
-rw-r--r--globals.pl12
-rwxr-xr-xpost_bug.cgi4
-rwxr-xr-xprocess_bug.cgi18
-rwxr-xr-xprocessmail33
-rwxr-xr-xquery.cgi35
-rwxr-xr-xrelogin.cgi2
-rwxr-xr-xreports.cgi7
-rwxr-xr-xsanitycheck.cgi1
-rwxr-xr-xshow_activity.cgi2
-rwxr-xr-xshow_bug.cgi3
-rwxr-xr-xshowdependencygraph.cgi2
-rwxr-xr-xshowdependencytree.cgi2
-rwxr-xr-xshowvotes.cgi2
32 files changed, 434 insertions, 69 deletions
diff --git a/CGI.pl b/CGI.pl
index 91edd28f1..fb293645b 100644
--- a/CGI.pl
+++ b/CGI.pl
@@ -190,6 +190,7 @@ sub CheckFormField (\%$;\@) {
print "A legal $fieldname was not set; ";
print Param("browserbugmessage");
+ PutFooter();
exit 0;
}
}
@@ -204,6 +205,7 @@ sub CheckFormFieldDefined (\%$) {
if ( !defined $formRef->{$fieldname} ) {
print "$fieldname was not defined; ";
print Param("browserbugmessage");
+ PutFooter();
exit 0;
}
}
@@ -217,6 +219,7 @@ sub CheckPosInt($) {
if ( $number !~ /^[1-9][0-9]*$/ ) {
print "Received string \"$number\" when postive integer expected; ";
print Param("browserbugmessage");
+ PutFooter();
exit 0;
}
}
@@ -269,6 +272,142 @@ sub navigation_header {
print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF=enter_bug.cgi>Enter new bug</A>\n"
}
+sub make_checkboxes {
+ my ($src,$default,$isregexp,$name) = (@_);
+ my $last = "";
+ my $capitalized = "";
+ my $popup = "";
+ my $found = 0;
+ $default = "" if !defined $default;
+
+ if ($src) {
+ foreach my $item (@$src) {
+ if ($item eq "-blank-" || $item ne $last) {
+ if ($item eq "-blank-") {
+ $item = "";
+ }
+ $last = $item;
+ $capitalized = $item;
+ $capitalized =~ tr/A-Z/a-z/;
+ $capitalized =~ s/^(.?)(.*)/\u$1$2/;
+ if ($isregexp ? $item =~ $default : $default eq $item) {
+ $popup .= "<INPUT NAME=$name TYPE=CHECKBOX VALUE=\"$item\" SELECTED>$capitalized<br>";
+ $found = 1;
+ } else {
+ $popup .= "<INPUT NAME=$name TYPE=CHECKBOX VALUE=\"$item\">$capitalized<br>";
+ }
+ }
+ }
+ }
+ if (!$found && $default ne "") {
+ $popup .= "<INPUT NAME=$name TYPE=CHECKBOX SELECTED>$default";
+ }
+ return $popup;
+}
+
+#
+# make_selection_widget: creates an HTML selection widget from a list of text strings.
+# $groupname is the name of the setting (form value) that this widget will control
+# $src is the list of options
+# you can specify a $default value which is either a string or a regex pattern to match to
+# identify the default value
+# $capitalize lets you optionally capitalize the option strings; the default is the value
+# of Param("capitalizelists")
+# $multiple is 1 if several options are selectable (default), 0 otherwise.
+# $size is used for lists to control how many items are shown. The default is 7. A list of
+# size 1 becomes a popup menu.
+# $preferLists is 1 if selection lists should be used in favor of radio buttons and
+# checkboxes, and 0 otherwise. The default is the value of Param("preferlists").
+#
+# The actual widget generated depends on the parameter settings:
+#
+# MULTIPLE PREFERLISTS SIZE RESULT
+# 0 (single) 0 =1 Popup Menu (normal for list of size 1)
+# 0 (single) 0 >1 Radio buttons
+# 0 (single) 1 =1 Popup Menu (normal for list of size 1)
+# 0 (single) 1 n>1 List of size n, single selection
+# 1 (multi) 0 n/a Check boxes; size ignored
+# 1 (multi) 1 n/a List of size n, multiple selection, of size n
+#
+sub make_selection_widget {
+ my ($groupname,$src,$default,$isregexp,$multiple, $size, $capitalize, $preferLists) = (@_);
+ my $last = "";
+ my $popup = "";
+ my $found = 0;
+ my $displaytext = "";
+ $groupname = "" if !defined $groupname;
+ $default = "" if !defined $default;
+ $capitalize = Param("capitalizelists") if !defined $capitalize;
+ $multiple = 1 if !defined $multiple;
+ $preferLists = Param("preferlists") if !defined $preferLists;
+ $size = 7 if !defined $size;
+ my $type = "LIST";
+ if (!$preferLists) {
+ if ($multiple) {
+ $type = "CHECKBOX";
+ } else {
+ if ($size > 1) {
+ $type = "RADIO";
+ }
+ }
+ }
+
+ if ($type eq "LIST") {
+ $popup .= "<SELECT NAME=\"$groupname\"";
+ if ($multiple) {
+ $popup .= " MULTIPLE";
+ }
+ $popup .= " SIZE=$size>\n";
+ }
+ if ($src) {
+ foreach my $item (@$src) {
+ if ($item eq "-blank-" || $item ne $last) {
+ if ($item eq "-blank-") {
+ $item = "";
+ }
+ $last = $item;
+ $displaytext = $item;
+ if ($capitalize) {
+ $displaytext =~ tr/A-Z/a-z/;
+ $displaytext =~ s/^(.?)(.*)/\u$1$2/;
+ }
+
+ if ($isregexp ? $item =~ $default : $default eq $item) {
+ if ($type eq "CHECKBOX") {
+ $popup .= "<INPUT NAME=$groupname type=checkbox VALUE=\"$item\" CHECKED>$displaytext<br>";
+ } elsif ($type eq "RADIO") {
+ $popup .= "<INPUT NAME=$groupname type=radio VALUE=\"$item\" check>$displaytext<br>";
+ } else {
+ $popup .= "<OPTION SELECTED VALUE=\"$item\">$displaytext";
+ }
+ $found = 1;
+ } else {
+ if ($type eq "CHECKBOX") {
+ $popup .= "<INPUT NAME=$groupname type=checkbox VALUE=\"$item\">$displaytext<br>";
+ } elsif ($type eq "RADIO") {
+ $popup .= "<INPUT NAME=$groupname type=radio VALUE=\"$item\">$displaytext<br>";
+ } else {
+ $popup .= "<OPTION VALUE=\"$item\">$displaytext";
+ }
+ }
+ }
+ }
+ }
+ if (!$found && $default ne "") {
+ if ($type eq "CHECKBOX") {
+ $popup .= "<INPUT NAME=$groupname type=checkbox CHECKED>$default";
+ } elsif ($type eq "RADIO") {
+ $popup .= "<INPUT NAME=$groupname type=radio checked>$default";
+ } else {
+ $popup .= "<OPTION SELECTED>$default";
+ }
+ }
+ if ($type eq "LIST") {
+ $popup .= "</SELECT>";
+ }
+ return $popup;
+}
+
$::CheckOptionValues = 1;
@@ -303,6 +442,7 @@ sub make_options {
"Please send mail to " . Param("maintainer") . " with " .
"details of what you were doing when this message " .
"appeared. Thank you.\n";
+ PutFooter();
exit 0;
} else {
@@ -393,6 +533,7 @@ sub CheckEmailSyntax {
print "syntax checking for a legal email address.\n";
print Param('emailregexpdesc');
print "<p>Please click <b>back</b> and try again.\n";
+ PutFooter();
exit;
}
}
@@ -459,6 +600,7 @@ sub confirm_login {
print "Content-type: text/html\n\n";
PutHeader("Password has been emailed");
MailPassword($enteredlogin, $realpwd);
+ PutFooter();
exit;
}
@@ -468,6 +610,7 @@ sub confirm_login {
PutHeader("Login failed");
print "The username or password you entered is not valid.\n";
print "Please click <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
$::COOKIE{"Bugzilla_login"} = $enteredlogin;
@@ -539,6 +682,7 @@ name=PleaseMailAPassword>
SendSQL("delete from logincookies where to_days(now()) - to_days(lastused) > 30");
+ PutFooter();
exit;
}
@@ -567,32 +711,38 @@ sub PutHeader {
print PerformSubsts(Param("bannerhtml"), undef);
- print "<TABLE BORDER=0 CELLPADDING=12 CELLSPACING=0 WIDTH=\"100%\">\n";
+ print "<TABLE BORDER=0 CELLSPACING=0 WIDTH=\"100%\">\n";
print " <TR>\n";
- print " <TD>\n";
+ print " <TD WIDTH=10% VALIGN=TOP ALIGN=LEFT>\n";
print " <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>\n";
- print " <TR><TD VALIGN=TOP ALIGN=CENTER NOWRAP>\n";
- print " <FONT SIZE=\"+3\"><B><NOBR>$h1</NOBR></B></FONT>\n";
- print " </TD></TR><TR><TD VALIGN=TOP ALIGN=CENTER>\n";
- print " <B>$h2</B>\n";
+ print " <TR><TD VALIGN=TOP ALIGN=LEFT NOWRAP>\n";
+ print " <FONT SIZE=+1><B>$h1</B></FONT>";
print " </TD></TR>\n";
print " </TABLE>\n";
print " </TD>\n";
- print " <TD>\n";
+ print " <TD VALIGN=CENTER>&nbsp;</TD>\n";
+ print " <TD VALIGN=CENTER ALIGN=LEFT>\n";
- print Param("blurbhtml");
+ print "$h2\n";
+ print "</TD></TR></TABLE>\n";
print "</TD></TR></TABLE>\n";
if (Param("shutdownhtml")) {
if (!$ignoreshutdown) {
print Param("shutdownhtml");
+ PutFooter();
exit;
}
}
}
+sub PutFooter {
+ print PerformSubsts(Param("footerhtml"));
+}
+
+
sub DumpBugActivity {
my ($id, $starttime) = (@_);
my $datepart = "";
@@ -650,6 +800,54 @@ sub warnBanner( $ )
}
+sub GetCommandMenu {
+ my $loggedin = quietly_check_login();
+ my $html = qq{<FORM METHOD=GET ACTION="show_bug.cgi">};
+ $html .= "<a href='enter_bug.cgi'>New</a> | <a href='query.cgi'>Query</a>";
+ if (-e "query2.cgi") {
+ $html .= "[<a href='query2.cgi'>beta</a>]";
+ }
+
+ $html .= qq{| <INPUT TYPE=SUBMIT VALUE="Find"> bug \# <INPUT NAME=id SIZE=6>};
+
+ $html .= " | <a href='reports.cgi'>Reports</a>";
+ if ($loggedin) {
+ my $mybugstemplate = Param("mybugstemplate");
+ my %substs;
+ $substs{'userid'} = $::COOKIE{"Bugzilla_login"};
+ my $mybugsurl = PerformSubsts($mybugstemplate, \%substs);
+ $html = $html . " | <a href='$mybugsurl'>My Bugs</a>";
+ }
+
+ $html = $html . " | <a href=\"createaccount.cgi\"><NOBR>New account</NOBR></a>\n";
+
+ my $onLogPage = 0;
+ if (defined $ENV{"HTTP_REFERER"}) {
+ #my $referrer = $ENV{"HTTP_REFERER"};
+ #my @parts = split("/",$referrer);
+ #my $called_from = $parts[@parts-1];
+ #confirm_login($called_from);
+ }
+
+ if ($loggedin) {
+ $html .= "| <NOBR>Edit <a href='changepassword.cgi'>prefs</a></NOBR>";
+ if (UserInGroup("tweakparams")) {
+ $html .= ", <a href=editparams.cgi>parameters</a>";
+ }
+ if (UserInGroup("editcomponents")) {
+ $html .= ", <a href=editproducts.cgi>components</a>\n";
+ }
+ if (UserInGroup("editkeywords")) {
+ $html .= ", <a href=editkeywords.cgi>keywords</a>\n";
+ }
+ $html = $html . " | <NOBR><a href=relogin.cgi>Log out</a> $::COOKIE{'Bugzilla_login'}</NOBR>";
+ } else {
+ $html = $html . " | <NOBR><a href=query.cgi?GoAheadAndLogIn=1>Log in</a></NOBR>";
+ }
+ $html .= "</FORM>";
+ return $html;
+}
+
############# Live code below here (that is, not subroutine defs) #############
diff --git a/bug_form.pl b/bug_form.pl
index 63db92d02..40443f060 100644
--- a/bug_form.pl
+++ b/bug_form.pl
@@ -521,4 +521,6 @@ print "
navigation_header();
+PutFooter();
+
1;
diff --git a/buglist.cgi b/buglist.cgi
index 86a0a2ae2..28f71098d 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -77,6 +77,7 @@ OK, the <B>$::FORM{'namedcmd'}</B> query is gone.
<P>
<A HREF=query.cgi>Go back to the query page.</A>
";
+ PutFooter();
exit;
};
/^asnamed$/ && do {
@@ -103,6 +104,7 @@ Query names can only have letters, digits, spaces, or underbars. You entered
Click the <B>Back</B> button and type in a valid name for this query.
";
}
+ PutFooter();
exit;
};
/^asdefault$/ && do {
@@ -116,6 +118,7 @@ individual query.
<P><A HREF=query.cgi>Go back to the query page, using the new default.</A>
";
+ PutFooter();
exit;
};
}
@@ -195,6 +198,7 @@ if (defined $::FORM{'votes'}) {
print "\n\n<P>The 'At least ___ votes' field must be a simple ";
print "number. You entered \"$c\", which doesn't cut it.";
print "<P>Please click the <B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
$minvotes = $c;
@@ -305,6 +309,7 @@ if ($::FORM{'keywords'}) {
print "<P>The legal keyword names are <A HREF=describekeywords.cgi>";
print "listed here</A>.\n";
print "<P>Please click the <B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
}
@@ -367,6 +372,7 @@ foreach my $id ("1", "2") {
if (!$foundone) {
print "\n\n<P>You must specify one or more fields in which to search for <tt>$email</tt>.\n";
print "<P>Please click the <B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
if ($lead eq " or ") {
@@ -385,6 +391,7 @@ if (defined $::FORM{'changedin'}) {
print "\n\n<P>The 'changed in last ___ days' field must be a simple ";
print "number. You entered \"$c\", which doesn't cut it.";
print "<P>Please click the <B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
$query .= "and to_days(now()) - to_days(bugs.delta_ts) <= $c ";
@@ -408,6 +415,7 @@ sub SqlifyDate {
if (!defined $date) {
print "\n\n<P>The string '<tt>$str</tt>' is not a legal date.\n";
print "<P>Please click the <B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
return time2str("'%Y/%m/%d %H:%M:%S'", $date);
@@ -545,7 +553,7 @@ if ($dotweak) {
pnl "<FORM NAME=changeform METHOD=POST ACTION=\"process_bug.cgi\">";
}
-my $tablestart = "<TABLE CELLSPACING=0 CELLPADDING=2>
+my $tablestart = "<TABLE CELLSPACING=0 CELLPADDING=4 WIDTH=100%>
<TR ALIGN=LEFT><TH>
<A HREF=\"buglist.cgi?$fields&order=bugs.bug_id\">ID</A>";
@@ -577,6 +585,18 @@ my %prodhash;
my %statushash;
my $buggroupset = "";
+my $pricol = -1;
+my $sevcol = -1;
+for (my $colcount = 0 ; $colcount < @collist ; $colcount++) {
+ my $colname = $collist[$colcount];
+ if ($colname eq "priority") {
+ $pricol = $colcount;
+ }
+ if ($colname eq "severity") {
+ $sevcol = $colcount;
+ }
+}
+
while (@row = FetchSQLData()) {
my $bug_id = shift @row;
my $g = shift @row; # Bug's group set.
@@ -596,7 +616,30 @@ while (@row = FetchSQLData()) {
pnl "</TABLE>$tablestart";
}
push @bugarray, $bug_id;
- pnl "<TR VALIGN=TOP ALIGN=LEFT><TD>";
+
+ # retrieve this bug's priority and severity, if available,
+ # by looping through all column names -- gross but functional
+ my $priority = "unknown";
+ my $severity;
+ if ($pricol >= 0) {
+ $priority = $row[$pricol];
+ }
+ if ($sevcol >= 0) {
+ $severity = $row[$sevcol];
+ }
+ my $customstyle = "";
+ if ($severity) {
+ if ($severity eq "enhan") {
+ $customstyle = "style='font-style:italic ! important'";
+ }
+ if ($severity eq "block") {
+ $customstyle = "style='color:red ! important; font-weight:bold ! important'";
+ }
+ if ($severity eq "criti") {
+ $customstyle = "style='color:red; ! important'";
+ }
+ }
+ pnl "<TR VALIGN=TOP ALIGN=LEFT CLASS=$priority $customstyle><TD>";
if ($dotweak) {
pnl "<input type=checkbox name=id_$bug_id>";
}
@@ -613,7 +656,7 @@ while (@row = FetchSQLData()) {
} else {
$value = "<nobr>$value</nobr>";
}
- pnl "<td>$value";
+ pnl "<td class=$c>$value";
} elsif ($c eq "keywords") {
my $query =
$::db->query("SELECT keyworddefs.name
@@ -917,6 +960,8 @@ if ($count > 0) {
}
print "</FORM>\n";
}
+PutFooter();
+
if ($serverpush) {
print "\n--thisrandomstring--\n";
}
diff --git a/changepassword.cgi b/changepassword.cgi
index c07d3adc9..d62259ac5 100755
--- a/changepassword.cgi
+++ b/changepassword.cgi
@@ -87,13 +87,14 @@ On which of these bugs would you like email notification of changes?</td>
<a href=\"showvotes.cgi\">Review your votes</a>
<hr>
";
- navigation_header();
+ PutFooter();
exit;
}
if ($::FORM{'pwd1'} ne $::FORM{'pwd2'}) {
print "<H1>Try again.</H1>
The two passwords you entered did not match. Please click <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
@@ -113,6 +114,7 @@ Please choose a password that is between 3 and 15 characters long, and that
contains only numbers, letters, hyphens, or underlines.
<p>
Please click <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
@@ -145,5 +147,5 @@ PutHeader("Preferences updated.");
print "
Your preferences have been updated.
<p>";
-navigation_header();
+PutFooter();
diff --git a/colchange.cgi b/colchange.cgi
index d3a42fc69..c874c361c 100755
--- a/colchange.cgi
+++ b/colchange.cgi
@@ -116,3 +116,4 @@ print "<INPUT TYPE=HIDDEN NAME=rememberedquery VALUE=$::buffer>\n";
print "<INPUT TYPE=HIDDEN NAME=resetit VALUE=1>\n";
print "<INPUT TYPE=\"submit\" VALUE=\"Reset to Bugzilla default\">\n";
print "</FORM>\n";
+PutFooter();
diff --git a/createaccount.cgi b/createaccount.cgi
index 0a7a1351a..14420a65e 100755
--- a/createaccount.cgi
+++ b/createaccount.cgi
@@ -53,6 +53,7 @@ if (defined $login) {
print "exists. If you have forgotten the password for it, then\n";
print "<a href=query.cgi?GoAheadAndLogIn>click here</a> and use\n";
print "the <b>E-mail me a password</b> button.\n";
+ PutFooter();
exit;
}
PutHeader("Account created");
@@ -63,6 +64,7 @@ if (defined $login) {
print "received, you may <a href=query.cgi?GoAheadAndLogIn>click\n";
print "here</a> and log in. Or, you can just <a href=\"\">go back to\n";
print "the top</a>.";
+ PutFooter();
exit;
}
@@ -87,3 +89,4 @@ as well.
<input type=submit>
};
+PutFooter();
diff --git a/createattachment.cgi b/createattachment.cgi
index ba4ba25e8..1eaf9b1ea 100755
--- a/createattachment.cgi
+++ b/createattachment.cgi
@@ -31,6 +31,7 @@ use vars %::COOKIE, %::FILENAME;
sub Punt {
my ($str) = (@_);
print "$str<P>Please hit <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
@@ -108,5 +109,5 @@ What kind of file is this?
print "<TD><A HREF=\"show_bug.cgi?id=$id\">Go Back to BUG# $id</A></TABLE>\n";
}
-navigation_header();
+PutFooter();
diff --git a/defparams.pl b/defparams.pl
index e258d281e..43bccc8a2 100644
--- a/defparams.pl
+++ b/defparams.pl
@@ -121,6 +121,22 @@ sub check_urlbase {
return "";
}
+DefParam("preferlists",
+ "If this is on, Bugzilla will display most selection options as selection lists. If this is off, Bugzilla will use radio buttons and checkboxes instead.",
+ "b",
+ 1);
+
+DefParam("prettyasciimail",
+ "If this is on, Bugzilla will send email reports formatted (assuming 76 character monospace font display). If this is off, email reports are sent using the old 'one-item-per-line' format.",
+ "b",
+ 0);
+
+DefParam("capitalizelists",
+ "If this is on, Bugzilla will capitalize list entries, checkboxes, and radio buttons. If this is off, Bugzilla will leave these items untouched.",
+ "b",
+ 0);
+
+
DefParam("usequip",
"If this is on, Bugzilla displays a silly quip at the beginning of buglists, and lets users add to the list of quips.",
"b",
@@ -152,6 +168,18 @@ DefParam("headerhtml",
"l",
'');
+DefParam("footerhtml",
+ "HTML to add to the bottom of every page. By default it displays the blurbhtml, and %commandmenu%, a menu of useful commands. You probably really want either headerhtml or footerhtml to include %commandmenu%.",
+ "l",
+ '<TABLE BORDER="0"><TR><TD BGCOLOR="#000000" VALIGN="TOP">
+<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%" BGCOLOR="lightyellow">
+<TR><TD>
+%blurbhtml%
+<BR>
+%commandmenu%
+</TD></TR></TABLE></TD></TR></TABLE>');
+
+
DefParam("bannerhtml",
"The html that gets emitted at the head of every Bugzilla page.
@@ -174,7 +202,10 @@ information about what Bugzilla is and what it can do, see
<A HREF=\"http://www.mozilla.org/bugs/\"><B>bug pages</B></A>.");
-
+DefParam("mybugstemplate",
+ "This is the URL to use to bring up a simple 'all of my bugs' list for a user. %userid% will get replaced with the login name of a user.",
+ "t",
+ "buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&assigned_to=%userid%");
DefParam("shutdownhtml",
"If this field is non-empty, then Bugzilla will be completely disabled and this text will be displayed instead of all the Bugzilla pages.",
@@ -386,11 +417,13 @@ DefParam("allowbugdeletion",
"b",
0);
+
DefParam("strictvaluechecks",
"Do stricter integrity checking on both form submission values and values read in from the database.",
"b",
0);
+
DefParam("browserbugmessage",
"If strictvaluechecks is on, and the bugzilla gets unexpected data from the browser, in addition to displaying the cause of the problem, it will output this HTML as well.",
"l",
diff --git a/describecomponents.cgi b/describecomponents.cgi
index 4aa41aa3c..e1b646f51 100755
--- a/describecomponents.cgi
+++ b/describecomponents.cgi
@@ -49,6 +49,7 @@ Product: <SELECT NAME=product>
<INPUT TYPE=\"submit\" VALUE=\"Submit\">
</FORM>
";
+ PutFooter();
exit;
}
@@ -95,3 +96,5 @@ while (MoreSQLData()) {
}
print "<tr><td colspan=$cols><hr></td></tr></table>\n";
+
+PutFooter();
diff --git a/describekeywords.cgi b/describekeywords.cgi
index bddf3b423..fc0fe10bf 100755
--- a/describekeywords.cgi
+++ b/describekeywords.cgi
@@ -76,4 +76,4 @@ if (UserInGroup("editkeywords")) {
print "<p><a href=editkeywords.cgi>Edit keywords</a><p>\n";
}
-navigation_header();
+PutFooter();
diff --git a/doeditparams.cgi b/doeditparams.cgi
index 6743c0378..7e0a4f193 100755
--- a/doeditparams.cgi
+++ b/doeditparams.cgi
@@ -39,6 +39,7 @@ print "Content-type: text/html\n\n";
if (!UserInGroup("tweakparams")) {
print "<H1>Sorry, you aren't a member of the 'tweakparams' group.</H1>\n";
print "And so, you aren't allowed to edit the parameters.\n";
+ PutFooter();
exit;
}
@@ -58,6 +59,7 @@ foreach my $i (@::param_list) {
if ($ok ne "") {
print "New value for $i is invalid: $ok<p>\n";
print "Please hit <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
}
@@ -75,3 +77,4 @@ print "OK, done.<p>\n";
print "<a href=editparams.cgi>Edit the params some more.</a><p>\n";
print "<a href=query.cgi>Go back to the query page.</a>\n";
+PutFooter();
diff --git a/doeditvotes.cgi b/doeditvotes.cgi
index 514780729..eef6381d8 100755
--- a/doeditvotes.cgi
+++ b/doeditvotes.cgi
@@ -39,7 +39,7 @@ if ($who ne $::FORM{'who'}) {
print "The login info got confused. If you want to adjust the votes\n";
print "for <tt>$::COOKIE{'Bugzilla_login'}</tt>, then please\n";
print "<a href=showvotes.cgi?user=$who>click here</a>.<hr>\n";
- navigation_header();
+ PutFooter();
exit();
}
@@ -48,7 +48,7 @@ my @buglist = grep {/^\d+$/} keys(%::FORM);
if (0 == @buglist) {
PutHeader("Oops?");
print "Something got confused. Please click <b>Back</b> and try again.";
- navigation_header();
+ PutFooter();
exit();
}
@@ -58,7 +58,7 @@ foreach my $id (@buglist) {
PutHeader("Numbers only, please");
print "Only use numeric values for your bug votes.\n";
print "Please click <b>Back</b> and try again.<hr>\n";
- navigation_header();
+ PutFooter();
exit();
}
}
@@ -82,7 +82,7 @@ foreach my $prod (keys(%prodcount)) {
print "You may only use $::prodmaxvotes{$prod} votes for bugs in the\n";
print "<tt>$prod</tt> product, but you are using $prodcount{$prod}.\n";
print "Please click <b>Back</b> and try again.<hr>\n";
- navigation_header();
+ PutFooter();
exit();
}
}
@@ -114,7 +114,7 @@ SendSQL("unlock tables");
PutHeader("Voting tabulated", "Voting tabulated", $::COOKIE{'Bugzilla_login'});
print "Your votes have been recorded.\n";
print qq{<p><a href="showvotes.cgi?user=$who">Review your votes</a><hr>\n};
-navigation_header();
+PutFooter();
exit();
diff --git a/editcomponents.cgi b/editcomponents.cgi
index 2d7e9d81b..b27fa9197 100755
--- a/editcomponents.cgi
+++ b/editcomponents.cgi
@@ -171,7 +171,7 @@ sub PutTrailer (@)
}
$num++;
}
- print "</BODY>\n</HTML>\n";
+ PutFooter();
}
diff --git a/editkeywords.cgi b/editkeywords.cgi
index dcb72ae2e..72fe78bf0 100755
--- a/editkeywords.cgi
+++ b/editkeywords.cgi
@@ -52,7 +52,7 @@ sub PutTrailer (@)
}
$num++;
}
- print "</BODY>\n</HTML>\n";
+ PutFooter();
}
diff --git a/editparams.cgi b/editparams.cgi
index b215d6192..91ddca7f9 100755
--- a/editparams.cgi
+++ b/editparams.cgi
@@ -38,6 +38,7 @@ print "Content-type: text/html\n\n";
if (!UserInGroup("tweakparams")) {
print "<H1>Sorry, you aren't a member of the 'tweakparams' group.</H1>\n";
print "And so, you aren't allowed to edit the parameters.\n";
+ PutFooter();
exit;
}
@@ -105,3 +106,4 @@ print "<input type=submit value=\"Submit changes\">\n";
print "</form>\n";
print "<p><a href=query.cgi>Skip all this, and go back to the query page</a>\n";
+PutFooter();
diff --git a/editproducts.cgi b/editproducts.cgi
index 71177c346..f3c1bbabd 100755
--- a/editproducts.cgi
+++ b/editproducts.cgi
@@ -129,7 +129,7 @@ sub PutTrailer (@)
}
$num++;
}
- print "</BODY>\n</HTML>\n";
+ PutFooter();
}
@@ -637,8 +637,8 @@ if ($action eq 'update') {
if ($description ne $descriptionold) {
unless ($description) {
print "Sorry, I can't delete the description.";
- PutTrailer($localtrailer);
SendSQL("UNLOCK TABLES");
+ PutTrailer($localtrailer);
exit;
}
SendSQL("UPDATE products
@@ -665,14 +665,14 @@ if ($action eq 'update') {
if ($product ne $productold) {
unless ($product) {
print "Sorry, I can't delete the product name.";
- PutTrailer($localtrailer);
SendSQL("UNLOCK TABLES");
+ PutTrailer($localtrailer);
exit;
}
if (TestProduct($product)) {
print "Sorry, product name '$product' is already in use.";
- PutTrailer($localtrailer);
SendSQL("UNLOCK TABLES");
+ PutTrailer($localtrailer);
exit;
}
diff --git a/editusers.cgi b/editusers.cgi
index 1c4343385..ccb108e79 100755
--- a/editusers.cgi
+++ b/editusers.cgi
@@ -129,7 +129,7 @@ sub PutTrailer (@)
}
$num++;
}
- print "</BODY></HTML>\n";
+ PutFooter();
}
diff --git a/editversions.cgi b/editversions.cgi
index 1ac768d6d..afc223bd8 100755
--- a/editversions.cgi
+++ b/editversions.cgi
@@ -141,7 +141,7 @@ sub PutTrailer (@)
}
$num++;
}
- print "</BODY>\n</HTML>\n";
+ PutFooter();
}
diff --git a/enter_bug.cgi b/enter_bug.cgi
index e76c173bc..856b906cf 100755
--- a/enter_bug.cgi
+++ b/enter_bug.cgi
@@ -12,14 +12,24 @@
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
-#
+#
# The Initial Developer of the Original Code is Netscape Communications
-# Corporation. Portions created by Netscape are
-# Copyright (C) 1998 Netscape Communications Corporation. All
-# Rights Reserved.
-#
+# Corporation. Portions created by Netscape are Copyright (C) 1998
+# Netscape Communications Corporation. All Rights Reserved.
+#
# Contributor(s): Terry Weissman <terry@mozilla.org>
+
+########################################################################
+#
+# enter_bug.cgi
+# -------------
+# Displays bug entry form. Bug fields are specified through popup menus,
+# drop-down lists, or text fields. Default for these values can be passed
+# in as parameters to the cgi.
+#
+########################################################################
+
use diagnostics;
use strict;
@@ -56,6 +66,7 @@ if (!defined $::FORM{'product'}) {
print "</tr>";
}
print "</table>\n";
+ PutFooter();
exit;
}
$::FORM{'product'} = $prodlist[0];
@@ -184,7 +195,7 @@ my $opsys_popup = make_popup('op_sys', \@::legal_opsys, pickos(), 0);
my $component_popup = make_popup('component', $::components{$product},
formvalue('component'), 1);
-PutHeader ("Enter Bug");
+PutHeader ("Enter Bug","Enter Bug","This page lets you enter a new bug into Bugzilla.");
print "
<FORM METHOD=POST ACTION=\"post_bug.cgi\">
@@ -231,7 +242,7 @@ print "
<TR>";
if (Param('letsubmitterchoosepriority')) {
print "
- <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#priority\">Priority</A>:</B></TD>
+ <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#priority\">Resolution<br>Priority</A>:</B></TD>
<TD>$priority_popup</TD>";
} else {
print '<INPUT TYPE=HIDDEN NAME=priority VALUE="' .
@@ -277,7 +288,7 @@ print "
<tr>
<td></td>
<td colspan=5>
- <INPUT TYPE=\"submit\" VALUE=\" Commit \">
+ <INPUT TYPE=\"submit\" VALUE=\" Commit \" ONCLICK=\"if (this.form.short_desc.value =='') { alert('Please enter a summary sentence for this bug.'); return false; }\">
&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE=\"reset\" VALUE=\"Reset\">
&nbsp;&nbsp;&nbsp;&nbsp;
@@ -302,5 +313,7 @@ print "
<INPUT TYPE=hidden name=form_name VALUE=enter_bug>
</FORM>\n";
+PutFooter();
+
print "</BODY></HTML>\n";
diff --git a/globals.pl b/globals.pl
index 21acd00a6..856048c4d 100644
--- a/globals.pl
+++ b/globals.pl
@@ -33,8 +33,10 @@ sub globals_pl_sillyness {
$zz = @main::db_errstr;
$zz = @main::default_column_list;
$zz = @main::dontchange;
+ $zz = %main::keywordsbyname;
$zz = @main::legal_bug_status;
$zz = @main::legal_components;
+ $zz = @main::legal_keywords;
$zz = @main::legal_opsys;
$zz = @main::legal_platform;
$zz = @main::legal_priority;
@@ -576,12 +578,19 @@ sub RemoveVotes {
}
-
sub Param {
my ($value) = (@_);
if (defined $::param{$value}) {
return $::param{$value};
}
+
+ # See if it is a dynamically-determined param (can't be changed by user).
+ if ($value eq "commandmenu") {
+ return GetCommandMenu();
+ }
+ if ($value eq "settingsmenu") {
+ return GetSettingsMenu();
+ }
# Um, maybe we haven't sourced in the params at all yet.
if (stat("data/params")) {
# Write down and restore the version # here. That way, we get around
@@ -607,7 +616,6 @@ sub Param {
die "Can't find param named $value";
}
-
sub PerformSubsts {
my ($str, $substs) = (@_);
$str =~ s/%([a-z]*)%/(defined $substs->{$1} ? $substs->{$1} : Param($1))/eg;
diff --git a/post_bug.cgi b/post_bug.cgi
index ac8dd718d..93e7b3226 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -49,6 +49,7 @@ if (defined $::FORM{'maketemplate'}) {
print "If you put a bookmark <a href=\"$url\">to this link</a>, it will\n";
print "bring up the submit-a-new-bug page with the fields initialized\n";
print "as you've requested.\n";
+ PutFooter();
exit;
}
@@ -61,12 +62,14 @@ if (!defined $::FORM{'component'} || $::FORM{'component'} eq "") {
print "You must choose a component that corresponds to this bug. If\n";
print "necessary, just guess. But please hit the <B>Back</B> button\n";
print "and choose a component.\n";
+ PutFooter();
exit 0
}
if (!defined $::FORM{'short_desc'} || trim($::FORM{'short_desc'}) eq "") {
print "You must enter a summary for this bug. Please hit the\n";
print "<B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
@@ -173,4 +176,5 @@ print "<BR><A HREF=\"createattachment.cgi?id=$id\">Attach a file to this bug</a>
navigation_header();
+PutFooter();
exit;
diff --git a/process_bug.cgi b/process_bug.cgi
index c1c7e63a4..4d053745d 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -97,6 +97,7 @@ if ($::FORM{'product'} ne $::dontchange) {
print "</form>\n";
print "</hr>\n";
print "<a href=query.cgi>Cancel all this and go to the query page.</a>\n";
+ PutFooter();
exit;
}
}
@@ -196,6 +197,7 @@ sub CheckonComment( $ ) {
"<p>" .
"Please press <b>Back</b> and give some words " .
"on the reason of the your change.\n" );
+ PutFooter();
exit( 0 );
} else {
$ret = 0;
@@ -294,6 +296,7 @@ SWITCH: for ($::FORM{'knob'}) {
trim($::FORM{'assigned_to'}) eq "") {
print "You cannot reassign to a bug to noone. Unless you intentionally cleared out the \"Reassign bug to\" field, ";
print Param("browserbugmessage");
+ PutFooter();
exit 0;
}
}
@@ -305,11 +308,13 @@ SWITCH: for ($::FORM{'knob'}) {
if ($::FORM{'product'} eq $::dontchange) {
print "You must specify a product to help determine the new\n";
print "owner of these bugs.\n";
+ PutFooter();
exit 0
}
if ($::FORM{'component'} eq $::dontchange) {
print "You must specify a component whose owner should get\n";
print "assigned these bugs.\n";
+ PutFooter();
exit 0
}
ChangeStatus('NEW');
@@ -344,11 +349,13 @@ SWITCH: for ($::FORM{'knob'}) {
if ($num !~ /^[0-9]*$/) {
print "You must specify a bug number of which this bug is a\n";
print "duplicate. The bug has not been changed.\n";
+ PutFooter();
exit;
}
if (defined($::FORM{'id'}) && $::FORM{'dup_id'} == $::FORM{'id'}) {
print "Nice try, $::FORM{'who'}. But it doesn't really make sense to mark a\n";
print "bug as a duplicate of itself, does it?\n";
+ PutFooter();
exit;
}
AppendComment($::FORM{'dup_id'}, $::FORM{'who'}, "*** Bug $::FORM{'id'} has been marked as a duplicate of this bug. ***");
@@ -365,6 +372,7 @@ SWITCH: for ($::FORM{'knob'}) {
};
# default
print "Unknown action $::FORM{'knob'}!\n";
+ PutFooter();
exit;
}
@@ -372,6 +380,7 @@ SWITCH: for ($::FORM{'knob'}) {
if ($#idlist < 0) {
print "You apparently didn't choose any bugs to modify.\n";
print "<p>Click <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
@@ -388,6 +397,7 @@ if ($::FORM{'keywords'}) {
print "<P>The legal keyword names are <A HREF=describekeywords.cgi>";
print "listed here</A>.\n";
print "<P>Please click the <B>Back</B> button and try again.\n";
+ PutFooter();
exit;
}
if (!$keywordseen{$i}) {
@@ -403,7 +413,8 @@ if ($::comma eq "" && 0 == @keywordlist && $keywordaction ne "makeexact") {
if (!defined $::FORM{'comment'} || $::FORM{'comment'} =~ /^\s*$/) {
print "Um, you apparently did not change anything on the selected\n";
print "bugs. <p>Click <b>Back</b> and try again.\n";
- exit
+ PutFooter();
+ exit;
}
}
@@ -501,7 +512,7 @@ The changes made were:
print ", except for the changes to the description";
}
print qq{.</form>\n<li><a href="show_bug.cgi?id=$id">Throw away my changes, and go revisit bug $id</a></ul>\n};
- navigation_header();
+ PutFooter();
exit;
}
@@ -523,6 +534,7 @@ The changes made were:
if ($comp ne $i) {
print "<H1>$i is not a legal bug number</H1>\n";
print "<p>Click <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
if (!exists $seen{$i}) {
@@ -541,6 +553,7 @@ The changes made were:
print "The change you are making to dependencies\n";
print "has caused a circular dependency chain.\n";
print "<p>Click <b>Back</b> and try again.\n";
+ PutFooter();
exit;
}
if (!exists $seen{$t}) {
@@ -717,4 +730,5 @@ if (defined $::next_bug) {
do "bug_form.pl";
} else {
navigation_header();
+ PutFooter();
}
diff --git a/processmail b/processmail
index 8e0b7c29f..e85a5eaf8 100755
--- a/processmail
+++ b/processmail
@@ -212,8 +212,36 @@ sub GetBugText {
$::bug{'cclist'} = join(',', @cclist);
$::bug{'voterlist'} = join(',', @voterlist);
+ if (Param("prettyasciimail")) {
+ my $temp = formline <<'END',$::bug{'short_desc'},$id,$::bug{'product'},$::bug{'bug_status'},$::bug{'version'},$::bug{'resolution'},$::bug{'rep_platform'},$::bug{'bug_severity'},$::bug{'op_sys'},$::bug{'priority'},$::bug{'component'},$::bug{'assigned_to'},$::bug{'reporter'},$qa_contact,DescCC(\@cclist),$target_milestone,${status_whiteboard},$::bug{'bug_file_loc'},DescDependencies($id);
++============================================================================+
+| @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
++----------------------------------------------------------------------------+
+| Bug #: @<<<<<<<<<<< Product: @<<<<<<<<<<<<<<<<<<<<<< |
+| Status: @<<<<<<<<<<<<<<<<<< Version: @<<<<<<<<<<<<<<<<<<<<<< |
+| Resolution: @<<<<<<<<<<<<<<<<<< Platform: @<<<<<<<<<<<<<<<<<<<<<< |
+| Severity: @<<<<<<<<<<<<<<<<<< OS/Version: @<<<<<<<<<<<<<<<<<<<<<< |
+| Priority: @<<<<<<<<<<<<<<<<<< Component: @<<<<<<<<<<<<<<<<<<<<<< |
++----------------------------------------------------------------------------+
+| Assigned To: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
+| Reported By: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
+| ~QA Contact: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
+| ~ CC list: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
++----------------------------------------------------------------------------+
+| ~ Milestone: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
+|~ Whiteboard: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
+| URL: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
+|~Dependencies: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
++============================================================================+
+| DESCRIPTION |
+END
+
+ my $prettymail = $^A . $::bug{'long_desc'};
+ return $prettymail;
- return "Bug\#: $id
+
+ } else {
+ return "Bug\#: $id
Product: $::bug{'product'}
Version: $::bug{'version'}
Platform: $::bug{'rep_platform'}
@@ -230,6 +258,7 @@ $qa_contact$target_milestone${status_whiteboard}URL: $::bug{'bug_file_loc'}
" . DescDependencies($id) . "
$::bug{'long_desc'}
";
+}
}
@@ -313,6 +342,7 @@ sub ProcessOneBug {
if ($tolist ne "" || $cclist ne "") {
my %substs;
+ $substs{"fullbugreport"} = $text; # added ability to include the full bug report
$substs{"to"} = $tolist;
$substs{"cc"} = $cclist;
$substs{"bugid"} = $i;
@@ -331,6 +361,7 @@ sub ProcessOneBug {
# harmless.
open(SENDMAIL, "|/usr/lib/sendmail -t") ||
die "Can't open sendmail";
+
print SENDMAIL $msg;
close SENDMAIL;
$logstr = "$logstr; mail sent to $tolist, $cclist";
diff --git a/query.cgi b/query.cgi
index 097aa7d6b..3ef2e5d5a 100755
--- a/query.cgi
+++ b/query.cgi
@@ -360,7 +360,7 @@ function selectProduct(f) {
# set legal_product [concat $default{"product"} [lreplace $legal_product $w $w]]
# }
-PutHeader("Bugzilla Query Page", "Query Page", "",
+PutHeader("Bugzilla Query Page", "Query", "This page lets you search the database for recorded bugs.",
q{onLoad="selectProduct(document.forms[0]);"});
push @::legal_resolution, "---"; # Oy, what a hack.
@@ -387,34 +387,29 @@ print "
</tr>
<tr>
<td align=left valign=top>
-<SELECT NAME=\"bug_status\" MULTIPLE SIZE=7>
-@{[make_options(\@::legal_bug_status, $default{'bug_status'}, $type{'bug_status'})]}
-</SELECT>
+
+@{[make_selection_widget(\"bug_status\",\@::legal_bug_status,$default{'bug_status'}, $type{'bug_status'}, 1)]}
+
</td>
<td align=left valign=top>
-<SELECT NAME=\"resolution\" MULTIPLE SIZE=7>
-@{[make_options(\@::legal_resolution, $default{'resolution'}, $type{'resolution'})]}
-</SELECT>
+@{[make_selection_widget(\"resolution\",\@::legal_resolution,$default{'resolution'}, $type{'resolution'}, 1)]}
+
</td>
<td align=left valign=top>
-<SELECT NAME=\"rep_platform\" MULTIPLE SIZE=7>
-@{[make_options(\@::legal_platform, $default{'rep_platform'}, $type{'rep_platform'})]}
-</SELECT>
+@{[make_selection_widget(\"platform\",\@::legal_platform,$default{'platform'}, $type{'platform'}, 1)]}
+
</td>
<td align=left valign=top>
-<SELECT NAME=\"op_sys\" MULTIPLE SIZE=7>
-@{[make_options(\@::legal_opsys, $default{'op_sys'}, $type{'op_sys'})]}
-</SELECT>
+@{[make_selection_widget(\"op_sys\",\@::legal_platform,$default{'op_sys'}, $type{'op_sys'}, 1)]}
+
</td>
<td align=left valign=top>
-<SELECT NAME=\"priority\" MULTIPLE SIZE=7>
-@{[make_options(\@::legal_priority, $default{'priority'}, $type{'priority'})]}
-</SELECT>
+@{[make_selection_widget(\"priority\",\@::legal_priority,$default{'priority'}, $type{'priority'}, 1)]}
+
</td>
<td align=left valign=top>
-<SELECT NAME=\"bug_severity\" MULTIPLE SIZE=7>
-@{[make_options(\@::legal_severity, $default{'bug_severity'}, $type{'bug_severity'})]}
-</SELECT>
+@{[make_selection_widget(\"bug_severity\",\@::legal_severity,$default{'bug_severity'}, $type{'bug_severity'}, 1)]}
+
</tr>
</table>
@@ -626,3 +621,5 @@ print "<a href=changepassword.cgi>Change your password or preferences.</a><br>\n
print "<a href=\"enter_bug.cgi\">Create a new bug.</a><br>\n";
print "<a href=\"createaccount.cgi\">Open a new Bugzilla account</a><br>\n";
print "<a href=\"reports.cgi\">Bug reports</a><br>\n";
+
+PutFooter();
diff --git a/relogin.cgi b/relogin.cgi
index 6af3dd16f..4bfc133d5 100755
--- a/relogin.cgi
+++ b/relogin.cgi
@@ -40,7 +40,7 @@ do an action that requires a login, you will be prompted for it.
<p>
";
-navigation_header();
+PutFooter();
exit;
diff --git a/reports.cgi b/reports.cgi
index 836228f72..3c2a0df45 100755
--- a/reports.cgi
+++ b/reports.cgi
@@ -96,6 +96,7 @@ else
print "<font color=blue>$_</font> : " .
($::FORM{$_} ? $::FORM{$_} : "undef") . "<br>\n";
}
+ PutFooter();
exit;
}
@@ -104,10 +105,10 @@ else
print <<FIN;
<p>
-</body>
-</html>
FIN
+PutFooter();
+
##################################
# user came in with no form data #
##################################
@@ -308,6 +309,7 @@ FIN
if ($bugs_count == 0)
{
print "No bugs found!\n";
+ PutFooter();
exit;
}
@@ -524,6 +526,7 @@ $msg
<p>
FIN
+ PutFooter();
exit;
}
diff --git a/sanitycheck.cgi b/sanitycheck.cgi
index 3db3640b7..bfacbf9d2 100755
--- a/sanitycheck.cgi
+++ b/sanitycheck.cgi
@@ -241,3 +241,4 @@ while (@row = FetchSQLData()) {
Status("Sanity check completed.");
+PutFooter();
diff --git a/show_activity.cgi b/show_activity.cgi
index 972fbd0c4..d6e388afc 100755
--- a/show_activity.cgi
+++ b/show_activity.cgi
@@ -35,3 +35,5 @@ ConnectToDatabase();
DumpBugActivity($::FORM{'id'});
print "<hr><a href=show_bug.cgi?id=$::FORM{'id'}>Back to bug $::FORM{'id'}</a>\n";
+
+PutFooter();
diff --git a/show_bug.cgi b/show_bug.cgi
index 909b08d4e..149182ae8 100755
--- a/show_bug.cgi
+++ b/show_bug.cgi
@@ -41,6 +41,7 @@ if (!defined $::FORM{'id'} || $::FORM{'id'} !~ /^\s*\d+\s*$/) {
print "<INPUT NAME=id>\n";
print "<INPUT TYPE=\"submit\" VALUE=\"Show Me This Bug\">\n";
print "</FORM>\n";
+ PutFooter();
exit;
}
@@ -53,6 +54,4 @@ print "<HR>\n";
$! = 0;
do "bug_form.pl" || die "Error doing bug_form.pl: $!";
-print "</BODY>";
-print "</HTML>\n";
diff --git a/showdependencygraph.cgi b/showdependencygraph.cgi
index 792a5edab..b15fe8d44 100755
--- a/showdependencygraph.cgi
+++ b/showdependencygraph.cgi
@@ -180,4 +180,4 @@ dependencies</td>
</form>
";
-navigation_header();
+PutFooter();
diff --git a/showdependencytree.cgi b/showdependencytree.cgi
index cf9dcef99..74e2778bc 100755
--- a/showdependencytree.cgi
+++ b/showdependencytree.cgi
@@ -100,4 +100,4 @@ print "<h1>Bugs that depend on bug $linkedid</h1>";
undef %seen;
DumpKids($id, "dependson", "blocked");
-navigation_header();
+PutFooter();
diff --git a/showvotes.cgi b/showvotes.cgi
index d6384b59e..429c71545 100755
--- a/showvotes.cgi
+++ b/showvotes.cgi
@@ -120,5 +120,5 @@ if (defined $::FORM{'bug_id'}) {
print qq{<a href="votehelp.html">Help! I don't understand this voting stuff</a>};
-navigation_header();
+PutFooter();