]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Patch by Ramon Felciano <felciano@ingenuity.com>, with many tweaks by
authorterry%mozilla.org <>
Sat, 15 Jan 2000 06:35:24 +0000 (06:35 +0000)
committerterry%mozilla.org <>
Sat, 15 Jan 2000 06:35:24 +0000 (06:35 +0000)
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.

32 files changed:
CGI.pl
bug_form.pl
buglist.cgi
changepassword.cgi
colchange.cgi
createaccount.cgi
createattachment.cgi
defparams.pl
describecomponents.cgi
describekeywords.cgi
doeditparams.cgi
doeditvotes.cgi
editcomponents.cgi
editkeywords.cgi
editparams.cgi
editproducts.cgi
editusers.cgi
editversions.cgi
enter_bug.cgi
globals.pl
post_bug.cgi
process_bug.cgi
processmail
query.cgi
relogin.cgi
reports.cgi
sanitycheck.cgi
show_activity.cgi
show_bug.cgi
showdependencygraph.cgi
showdependencytree.cgi
showvotes.cgi

diff --git a/CGI.pl b/CGI.pl
index 91edd28f15ceccfd027335cb70a605c92c4c158f..fb293645b8f6aad2aacc5fb123bb43423bb9cc10 100644 (file)
--- 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) #############
 
 
index 63db92d020608ee7c0b86e34d2c0b66370d82cfd..40443f0604207f9f0fef11c6abb930b9cd7dbe0d 100644 (file)
@@ -521,4 +521,6 @@ print "
 
 navigation_header();
 
+PutFooter();
+
 1;
index 86a0a2ae288cd6bb523a02602af7b2a99595277e..28f71098def994c2696d653bf8269f2d89649120 100755 (executable)
@@ -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";
 }
index c07d3adc93856670509bbb69d455e9f888057f00..d62259ac5f7de94c52300cd744f21473543a1484 100755 (executable)
@@ -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();
 
index d3a42fc6961c82d5e9c224552d91a521a5a7313b..c874c361c4e00f17f3fca40eea6bf2da1608ae34 100755 (executable)
@@ -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();
index 0a7a1351a346802c55b66968b3e3f12115b81794..14420a65efd205c19ddd12297b11041dc0cbfcd6 100755 (executable)
@@ -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();
index ba4ba25e8b1fc36489d27a8ebf24e0a686e75993..1eaf9b1eacc4e86740f06bc983d09729d780a6a0 100755 (executable)
@@ -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();
 
index e258d281e93edf836c6d5283a664023de7de1527..43bccc8a22377c8e8a99aca14091f6c65348a1b3 100644 (file)
@@ -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",
index 4aa41aa3c138d9b8bbbee60bd600c3103ad1d51b..e1b646f51986bfd7c612b527dab1a273d85f1fbb 100755 (executable)
@@ -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();
index bddf3b4234c51e17250b32b6b5c9f65ac682c1fa..fc0fe10bffc64654663a9bcfeba2687289b47e7a 100755 (executable)
@@ -76,4 +76,4 @@ if (UserInGroup("editkeywords")) {
     print "<p><a href=editkeywords.cgi>Edit keywords</a><p>\n";
 }
 
-navigation_header();
+PutFooter();
index 6743c03781a189cbd0bb5eecd18367c61cb629a6..7e0a4f193fd831751ac9d9719692d683cbbc9860 100755 (executable)
@@ -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();
index 5147807299ca6df72299c604220556741a355fa3..eef6381d8cfce3e0844c28a5c23f9a93f7849df2 100755 (executable)
@@ -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();
     
 
index 2d7e9d81b4e1b7839600b234431680e0b5987f9e..b27fa9197ccb3c0f2028f97d087ff21f8c62033f 100755 (executable)
@@ -171,7 +171,7 @@ sub PutTrailer (@)
         }
         $num++;
     }
-    print "</BODY>\n</HTML>\n";
+    PutFooter();
 }
 
 
index dcb72ae2e300eabb74ed31fe50379bb57cab52d2..72fe78bf07e580049e27a7b521c994c54ff4c4c4 100755 (executable)
@@ -52,7 +52,7 @@ sub PutTrailer (@)
         }
         $num++;
     }
-    print "</BODY>\n</HTML>\n";
+    PutFooter();
 }
 
 
index b215d6192e046e585828f0e6e80c358c1098e529..91ddca7f939a7ede7b1bbc72c306aef9b474633d 100755 (executable)
@@ -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();
index 71177c3461d8827d515715dabf441a353c9e0769..f3c1bbabd8916dbc08ca1aab8a883c40a3ffab6b 100755 (executable)
@@ -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;
         }
 
index 1c4343385b4b806738d504a853c4a0b05260ab46..ccb108e79280f0b8ee013c7f11bea028e7baf5f0 100755 (executable)
@@ -129,7 +129,7 @@ sub PutTrailer (@)
        }
        $num++;
     }
-    print "</BODY></HTML>\n";
+    PutFooter();
 }
 
 
index 1ac768d6d0f1069522630d7c7c476780a7138642..afc223bd8dfcc55cf1942fffafaecc00a3744112 100755 (executable)
@@ -141,7 +141,7 @@ sub PutTrailer (@)
         }
         $num++;
     }
-    print "</BODY>\n</HTML>\n";
+    PutFooter();
 }
 
 
index e76c173bc02799b63334a5088d7ddf825569c115..856b906cf7e367027fd191fdfa240f26e3ed8f08 100755 (executable)
 # 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";
 
index 21acd00a64d5a7b64232a1070be4b6d5e83924ae..856048c4d724db87f9aad4232e6848b9bfe6b0ab 100644 (file)
@@ -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;
index ac8dd718d1cd9e180b5c9c39a76b7e5c3acca23e..93e7b32262437a16665448112a79ebd820cd3ece 100755 (executable)
@@ -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;
index c1c7e63a49ab45fd9957a4ecef8e6d3942a918fd..4d053745df41307bd26d5111f8444f98fef8fc1d 100755 (executable)
@@ -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();
 }
index 8e0b7c29fde758bfd7f15ec9eaf7f2f027b905e2..e85a5eaf8afa879962bf1a4a39530cc4c7c5cf82 100755 (executable)
@@ -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";
index 097aa7d6b2bd8a05b4adf3df3dda3b2ea84460fd..3ef2e5d5aaaca7387afe41c934b0b3f1c40d458b 100755 (executable)
--- 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();
index 6af3dd16f70567f6dda7e72bb96d0ea014060bc6..4bfc133d576dc1e9d7737c14c44c891ac9778eca 100755 (executable)
@@ -40,7 +40,7 @@ do an action that requires a login, you will be prompted for it.
 <p>
 ";
 
-navigation_header();
+PutFooter();
 
 exit;
 
index 836228f72a34c0179833e8498ad4e382865ecab5..3c2a0df45331ea7cca9d3c417c1ef72303b2036c 100755 (executable)
@@ -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;
        }
 
index 3db3640b7bc2c2d78c49f8b01235b9f0e87c843a..bfacbf9d21ea48b35c3e8b1f9db64b39ec760248 100755 (executable)
@@ -241,3 +241,4 @@ while (@row = FetchSQLData()) {
 
 
 Status("Sanity check completed.");
+PutFooter();
index 972fbd0c43d98989ebbc2384dc496284c93b845c..d6e388afc1ad3aa39f3d6fc2eae61f5592db4450 100755 (executable)
@@ -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();
index 909b08d4e75043d94ed6fa6af59fd559ae68c443..149182ae817b7f45e53724adb6dc77aba4921011 100755 (executable)
@@ -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";
 
index 792a5edabe1bffc77a808ff167aa703b3752acc0..b15fe8d442cf1a76466d4aa6b9db6dd7c570ce5c 100755 (executable)
@@ -180,4 +180,4 @@ dependencies</td>
 </form>
  ";
 
-navigation_header();
+PutFooter();
index cf9dcef9987f1593cebfcf2d995414d5112d2e54..74e2778bc4963a54b55a6b41af5bff7ea39c1d64 100755 (executable)
@@ -100,4 +100,4 @@ print "<h1>Bugs that depend on bug $linkedid</h1>";
 undef %seen;
 DumpKids($id, "dependson", "blocked");
 
-navigation_header();
+PutFooter();
index d6384b59e6962eebfece9eabbaaadfd5ca52b4bb..429c71545ed621aa53a46f6626ae7d3285c5d8c3 100755 (executable)
@@ -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();