Commit 482763c9 authored by terry%netscape.com's avatar terry%netscape.com

Bugzilla source.

parents
1x1.gif

82 Bytes

# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "globals.tcl"
proc url_decode {buf} {
regsub -all {\\(.)} $buf {\1} buf ; regsub -all {\\} $buf {\\\\} buf ;
regsub -all { } $buf {\ } buf ; regsub -all {\+} $buf {\ } buf ;
regsub -all {\$} $buf {\$} buf ; regsub -all \n $buf {\n} buf ;
regsub -all {;} $buf {\;} buf ; regsub -all {\[} $buf {\[} buf ;
regsub -all \" $buf \\\" buf ; regsub ^\{ $buf \\\{ buf ;
regsub -all -nocase {%([a-fA-F0-9][a-fA-F0-9])} $buf {[format %c 0x\1]} buf
eval return \"$buf\"
}
proc url_quote {var} {
regsub -all { } "$var" {%20} var
regsub -all {=} "$var" {%3d} var
regsub -all "\n" "$var" {%0a} var
return $var
}
proc lookup { a key } {
global $a
set ref [format %s(%s) $a $key]
if { [ info exists $ref] } {
eval return \$$ref
} else {
return ""
}
}
proc ProcessFormFields {buffer} {
global FORM MFORM
catch {unset FORM}
catch {unset MFORM}
set remaining $buffer
while {![cequal $remaining ""]} {
if {![regexp {^([^&]*)&(.*)$} $remaining foo item remaining]} {
set item $remaining
set remaining ""
}
if {![regexp {^([^=]*)=(.*)$} $item foo name value]} {
set name $item
set value ""
}
set value [url_decode $value]
if {![cequal $value ""]} {
append FORM($name) $value
lappend MFORM($name) $value
} else {
set isnull($name) 1
}
}
if {[info exists isnull]} {
foreach name [array names isnull] {
if {![info exists FORM($name)]} {
set FORM($name) ""
set MFORM($name) ""
}
}
}
}
proc FormData { field } {
global FORM
return $FORM($field)
}
if { [info exists env(REQUEST_METHOD) ] } {
if { $env(REQUEST_METHOD) == "GET" } {
set buffer [lookup env QUERY_STRING]
} else { set buffer [ read stdin $env(CONTENT_LENGTH) ] }
ProcessFormFields $buffer
}
proc html_quote { var } {
regsub -all {&} "$var" {\&amp;} var
regsub -all {<} "$var" {\&lt;} var
regsub -all {>} "$var" {\&gt;} var
return $var
}
proc value_quote { var } {
regsub -all {&} "$var" {\&amp;} var
regsub -all {"} "$var" {\&quot;} var
regsub -all {<} "$var" {\&lt;} var
regsub -all {>} "$var" {\&gt;} var
return $var
}
proc value_unquote { var } {
regsub -all {&quot;} $var "\"" var
regsub -all {&lt;} $var "<" var
regsub -all {&gt;} $var ">" var
regsub -all {&amp;} $var {\&} var
return $var
}
foreach pair [ split [lookup env HTTP_COOKIE] ";" ] {
set pair [string trim $pair]
set eq [string first = $pair ]
if {$eq == -1} {
set COOKIE($pair) ""
} else {
set COOKIE([string range $pair 0 [expr $eq - 1]]) [string range $pair [expr $eq + 1] end]
}
}
proc navigation_header {} {
global COOKIE FORM next_bug
set buglist [lookup COOKIE BUGLIST]
if { $buglist != "" } {
set bugs [split $buglist :]
set cur [ lsearch -exact $bugs $FORM(id) ]
puts "<B>Bug List:</B> ([expr $cur + 1] of [llength $bugs])"
puts "<A HREF=\"show_bug.cgi?id=[lindex $bugs 0]\">First</A>"
puts "<A HREF=\"show_bug.cgi?id=[lindex $bugs [expr [ llength $bugs ] - 1]]\">Last</A>"
if { $cur > 0 } {
puts "<A HREF=\"show_bug.cgi?id=[lindex $bugs [expr $cur - 1]]\">Prev</A>"
} else {
puts "<I><FONT COLOR=\#777777>Prev</FONT></I>"
}
if { $cur < [expr [ llength $bugs ] - 1] } {
set next_bug [lindex $bugs [expr $cur + 1]]
puts "<A HREF=\"show_bug.cgi?id=$next_bug\">Next</A>"
} else {
puts "<I><FONT COLOR=\#777777>Next</FONT></I>"
}
}
puts "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF=\"query.cgi\">Query page</A>"
}
proc make_options { src default {isregexp 0} } {
set last "" ; set popup "" ; set found 0
foreach item $src {
if {$item == "-blank-" || $item != $last} {
if { $item == "-blank-" } { set item "" }
set last $item
if {$isregexp ? [regexp $default $item] : [cequal $default $item]} {
append popup "<OPTION SELECTED VALUE=\"$item\">$item"
set found 1
} else {
append popup "<OPTION VALUE=\"$item\">$item"
}
}
}
if {!$found && $default != ""} {
append popup "<OPTION SELECTED>$default"
}
return $popup
}
proc PasswordForLogin {login} {
SendSQL "select password from profiles where login_name = '[SqlQuote $login]'"
return [FetchSQLData]
}
proc confirm_login {{nexturl ""}} {
# puts "Content-type: text/plain\n"
global FORM COOKIE argv0
ConnectToDatabase
if { [info exists FORM(Bugzilla_login)] &&
[info exists FORM(Bugzilla_password)] } {
if {![regexp {^[^@, ]*@[^@, ]*\.[^@, ]*$} $FORM(Bugzilla_login)]} {
puts "Content-type: text/html\n"
puts "<H1>Invalid e-mail address entered.</H1>"
puts "The e-mail address you entered"
puts "(<b>$FORM(Bugzilla_login)</b>) didn't match our minimal"
puts "syntax checking for a legal email address. A legal address"
puts "must contain exactly one '@', and at least one '.' after"
puts "the @, and may not contain any commas or spaces."
puts "<p>Please click <b>back</b> and try again."
exit
}
set realpwd [PasswordForLogin $FORM(Bugzilla_login)]
if {[info exists FORM(PleaseMailAPassword)]} {
if {[cequal $realpwd ""]} {
set realpwd [InsertNewUser $FORM(Bugzilla_login)]
}
set template "From: bugzilla-daemon
To: %s
Subject: Your bugzilla password.
To use the wonders of bugzilla, you can use the following:
E-mail address: %s
Password: %s
"
set msg [format $template $FORM(Bugzilla_login) \
$FORM(Bugzilla_login) $realpwd]
exec /usr/lib/sendmail -t << $msg
puts "Content-type: text/html\n"
puts "<H1>Password has been emailed.</H1>"
puts "The password for the e-mail address"
puts "$FORM(Bugzilla_login) has been e-mailed to that address."
puts "<p>When the e-mail arrives, you can click <b>Back</b>"
puts "and enter your password in the form there."
exit
}
if {[cequal $realpwd ""] || ![cequal $realpwd $FORM(Bugzilla_password)]} {
puts "Content-type: text/html\n"
puts "<H1>Login failed.</H1>"
puts "The username or password you entered is not valid. Please"
puts "click <b>back</b> and try again."
exit
}
set COOKIE(Bugzilla_login) $FORM(Bugzilla_login)
set COOKIE(Bugzilla_password) $FORM(Bugzilla_password)
puts "Set-Cookie: Bugzilla_login=$COOKIE(Bugzilla_login) ; path=/; expires=Sun, 30-Jun-2029 00:00:00 GMT"
puts "Set-Cookie: Bugzilla_password=$COOKIE(Bugzilla_password) ; path=/; expires=Sun, 30-Jun-2029 00:00:00 GMT"
}
set realpwd {}
if { [info exists COOKIE(Bugzilla_login)] && [info exists COOKIE(Bugzilla_password)] } {
set realpwd [PasswordForLogin $COOKIE(Bugzilla_login)]
}
if {[cequal $realpwd ""] || ![cequal $realpwd $COOKIE(Bugzilla_password)]} {
puts "Content-type: text/html\n"
puts "<H1>Please log in.</H1>"
puts "I need a legitimate e-mail address and password to continue."
if {[cequal $nexturl ""]} {
regexp {[^/]*$} $argv0 nexturl
}
set method POST
if {[info exists env(REQUEST_METHOD)]} {
set method $env(REQUEST_METHOD)
}
puts "
<FORM action=$nexturl method=$method>
<table>
<tr>
<td align=right><b>E-mail address:</b></td>
<td><input size=35 name=Bugzilla_login></td>
</tr>
<tr>
<td align=right><b>Password:</b></td>
<td><input type=password size=35 name=Bugzilla_password></td>
</tr>
</table>
"
foreach i [array names FORM] {
if {[regexp {^Bugzilla_} $i]} {
continue
}
puts "<input type=hidden name=$i value=\"[value_quote $FORM($i)]\">"
}
puts "
<input type=submit value=Login name=GoAheadAndLogIn><hr>
If you don't have a password, or have forgotten it, then please fill in the
e-mail address above and click
here:<input type=submit value=\"E-mail me a password\"
name=PleaseMailAPassword>
</form>"
exit
}
}
proc CopyOut {filename} {
if {[file exists $filename]} {
set fid [open $filename "r"]
while {[gets $fid line] > 0} {
puts $line
}
close $fid
}
}
proc PutHeader {title h1 {h2 ""}} {
puts "<HTML><HEAD><TITLE>$title</TITLE></HEAD>";
puts "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\"";
puts "LINK=\"#0000EE\" VLINK=\"#551A8B\" ALINK=\"#FF0000\">";
CopyOut "banner.html"
puts "<TABLE BORDER=0 CELLPADDING=12 CELLSPACING=0 WIDTH=\"100%\">";
puts " <TR>\n";
puts " <TD>\n";
puts " <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>\n";
puts " <TR><TD VALIGN=TOP ALIGN=CENTER NOWRAP>\n";
puts " <FONT SIZE=\"+3\"><B><NOBR>$h1</NOBR></B></FONT>\n";
puts " </TD></TR><TR><TD VALIGN=TOP ALIGN=CENTER>\n";
puts " <B>$h2</B>\n";
puts " </TD></TR>\n";
puts " </TABLE>\n";
puts " </TD>\n";
puts " <TD>\n";
CopyOut "blurb.html"
puts "</TD></TR></TABLE>\n";
}
ant.jpg

17.1 KB

# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
set query "
select
bug_id,
product,
version,
rep_platform,
op_sys,
bug_status,
resolution,
priority,
bug_severity,
component,
assigned_to,
reporter,
bug_file_loc,
short_desc,
date_format(creation_ts,'Y-m-d')
from bugs
where bug_id = $FORM(id)";
SendSQL $query
set ret [FetchSQLData]
if {$ret != ""} {
set count 0
foreach field { bug_id product version rep_platform op_sys bug_status
resolution priority bug_severity component
assigned_to reporter bug_file_loc short_desc
creation_ts} {
if { [regexp {^\{(.*)\}$} [lindex $ret $count] junk bug($field)] == 0 } {
set bug($field) [lindex $ret $count]
}
incr count
}
set error "none"
} else {
puts "<TITLE>Bug Splat Error</TITLE>"
puts "<H1>Query Error</H1>Somehow something went wrong. Possibly if you"
puts "mail this page to $maintainer, he will be able to fix things.<HR>"
puts "Bug $FORM(id) not found<H2>Query Text</H2><PRE>$query<PRE>"
exit 0
}
set bug(assigned_to) [DBID_to_name $bug(assigned_to)]
set bug(reporter) [DBID_to_name $bug(reporter)]
set bug(long_desc) [GetLongDescription $FORM(id)]
GetVersionTable
#
# These should be read from the database ...
#
set resolution_popup [make_options $legal_resolution_no_dup $bug(resolution)]
set platform_popup [make_options $legal_platform $bug(rep_platform)]
set priority_popup [make_options $legal_priority $bug(priority)]
set sev_popup [make_options $legal_severity $bug(bug_severity)]
set component_popup [make_options $components($bug(product)) $bug(component)]
set cc_element "<INPUT NAME=cc SIZE=30 VALUE=\"[ShowCcList $FORM(id)]\">"
if {$bug(bug_file_loc) != "none" && $bug(bug_file_loc) != "NULL" && $bug(bug_file_loc) != ""} {
set URL "<B><A HREF=\"$bug(bug_file_loc)\">URL:</A></B>"
} else {
set URL "<B>URL:</B>"
}
puts "
<HEAD><TITLE>Bug $FORM(id) -- [html_quote $bug(short_desc)]</TITLE></HEAD><BODY>
<FORM NAME=changeform METHOD=POST ACTION=\"process_bug.cgi\">
<INPUT TYPE=HIDDEN NAME=\"id\" VALUE=$FORM(id)>
<INPUT TYPE=HIDDEN NAME=\"was_assigned_to\" VALUE=\"$bug(assigned_to)\">
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0><TR>
<TD ALIGN=RIGHT><B>Bug#:</B></TD><TD>$bug(bug_id)</TD>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#rep_platform\">Platform:</A></B></TD>
<TD><SELECT NAME=rep_platform>$platform_popup</SELECT></TD>
<TD ALIGN=RIGHT><B>Version:</B></TD>
<TD><SELECT NAME=version>[make_options $versions($bug(product)) $bug(version)]</SELECT></TD>
</TR><TR>
<TD ALIGN=RIGHT><B>Product:</B></TD>
<TD><SELECT NAME=product>[make_options $legal_product $bug(product)]</SELECT></TD>
<TD ALIGN=RIGHT><B>OS:</B></TD><TD>$bug(op_sys)</TD>
<TD ALIGN=RIGHT><B>Reporter:</B></TD><TD>$bug(reporter)</TD>
</TR><TR>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html\">Status:</A></B></TD>
<TD>$bug(bug_status)</TD>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#priority\">Priority:</A></B></TD>
<TD><SELECT NAME=priority>$priority_popup</SELECT></TD>
<TD ALIGN=RIGHT><B>Cc:</B></TD>
<TD> $cc_element </TD>
</TR><TR>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html\">Resolution:</A></B></TD>
<TD>$bug(resolution)</TD>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#severity\">Severity:</A></B></TD>
<TD><SELECT NAME=bug_severity>$sev_popup</SELECT></TD>
<TD ALIGN=RIGHT><B>Component:</B></TD>
<TD><SELECT NAME=component>$component_popup</SELECT></TD>
</TR><TR>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#assigned_to\">Assigned&nbsp;To:
</A></B></TD>
<TD>$bug(assigned_to)</TD>
</TR><TR>
<TD ALIGN=\"RIGHT\">$URL
<TD COLSPAN=6>
<INPUT NAME=bug_file_loc VALUE=\"$bug(bug_file_loc)\" SIZE=60></TD>
</TR><TR>
<TD ALIGN=\"RIGHT\"><B>Summary:</B>
<TD COLSPAN=6>
<INPUT NAME=short_desc VALUE=\"[value_quote $bug(short_desc)]\" SIZE=60></TD>
</TR>
</TABLE>
<br>
<B>Additional Comments:</B>
<BR>
<TEXTAREA WRAP=HARD NAME=comment ROWS=5 COLS=80></TEXTAREA><BR>
<br>
<INPUT TYPE=radio NAME=knob VALUE=none CHECKED>
Leave as <b>$bug(bug_status) $bug(resolution)</b><br>"
# knum is which knob number we're generating, in javascript terms.
set knum 1
if {[cequal $bug(bug_status) NEW] || [cequal $bug(bug_status) ASSIGNED] || \
[cequal $bug(bug_status) REOPENED]} {
if {![cequal $bug(bug_status) ASSIGNED]} {
puts "<INPUT TYPE=radio NAME=knob VALUE=accept>
Accept bug (change status to <b>ASSIGNED</b>)<br>"
incr knum
}
if {[clength $bug(resolution)] > 0} {
puts "<INPUT TYPE=radio NAME=knob VALUE=clearresolution>"
puts "Clear the resolution (remove the current resolution of"
puts "<b>$bug(resolution)</b>)<br>"
incr knum
}
puts "<INPUT TYPE=radio NAME=knob VALUE=resolve>
Resolve bug, changing <A HREF=\"bug_status.html\">resolution</A> to
<SELECT NAME=resolution
ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\">
$resolution_popup</SELECT><br>"
incr knum
puts "<INPUT TYPE=radio NAME=knob VALUE=duplicate>
Resolve bug, mark it as duplicate of bug #
<INPUT NAME=dup_id SIZE=6 ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\"><br>"
incr knum
set assign_element "<INPUT NAME=assigned_to SIZE=32 ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\" VALUE=$bug(assigned_to)>"
puts "<INPUT TYPE=radio NAME=knob VALUE=reassign>
<A HREF=\"bug_status.html#assigned_to\">Reassign</A> bug to
$assign_element
<br>"
incr knum
puts "<INPUT TYPE=radio NAME=knob VALUE=reassignbycomponent>
Reassign bug to owner of selected component<br>"
incr knum
} else {
puts "<INPUT TYPE=radio NAME=knob VALUE=reopen> Reopen bug<br>"
incr knum
if {[cequal $bug(bug_status) RESOLVED]} {
puts "<INPUT TYPE=radio NAME=knob VALUE=verify>
Mark bug as <b>VERIFIED</b><br>"
incr knum
}
if {![cequal $bug(bug_status) CLOSED]} {
puts "<INPUT TYPE=radio NAME=knob VALUE=close>
Mark bug as <b>CLOSED</b><br>"
incr knum
}
}
puts "
<INPUT TYPE=\"submit\" VALUE=\"Commit\">
<INPUT TYPE=\"reset\" VALUE=\"Reset\">
<INPUT TYPE=hidden name=form_name VALUE=process_bug>
<BR>
<FONT size=\"+1\"><B>
<A HREF=\"show_activity.cgi?id=$FORM(id)\">View Bug Activity</A>
<A HREF=\"long_list.cgi?buglist=$FORM(id)\">Format For Printing</A>
<A HREF=\"edit_desc.cgi?id=$FORM(id)\">Edit Long Description</A>
</B></FONT><BR>
</FORM>
<table><tr><td align=left><B>Description:</B></td><td width=100%>&nbsp;</td>
<td align=right>Opened:&nbsp;$bug(creation_ts)</td></tr></table>
<HR>
<PRE>
[html_quote $bug(long_desc)]
</PRE>
<HR>"
navigation_header
puts "</BODY>"
flush stdout
<HTML>
<!--
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing 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.
Contributor(s): Terry Weissman <terry@mozilla.org>
-->
<TITLE>A Bug's Life Cycle</TITLE>
<h1 ALIGN=CENTER>A Bug's Life Cycle</h1>
The <B>status</B> and <B>resolution</B> field define and track the
life cycle of a bug.
<p>
<TABLE BORDER=1 CELLPADDING=4>
<TR ALIGN=CENTER VALIGN=TOP>
<TD WIDTH=50%><H1>STATUS</H1> <TD><H1>RESOLUTION</H1>
<TR VALIGN=TOP>
<TD>The <B>status</B> field indicates the general health of a bug. Only
certain status transitions are allowed.
<TD>The <b>resolution</b> field indicates what happened to this bug.
<TR VALIGN=TOP><TD>
<DL><DT><B>NEW</B>
<DD> This bug has recently been added to the assignee's list of bugs
and must be processed. Bugs in this state may be accepted, and
become <B>ASSIGNED</B>, passed on to someone else, and remain
<B>NEW</B>, or resolved and marked <B>RESOLVED</B>.
<DT><B>ASSIGNED</B>
<DD> This bug is not yet resolved, but is assigned to the proper
person. From here bugs can be given to another person and become
<B>NEW</B>, or resolved and become <B>RESOLVED</B>.
<DT><B>REOPENED</B>
<DD>This bug was once resolved, but the resolution was deemed
incorrect. For example, a <B>WORKSFORME</B> bug is
<B>REOPENED</B> when more information shows up and the bug is now
reproducible. From here bugs are either marked <B>ASSIGNED</B>
or <B>RESOLVED</B>.
</DL>
<TD>
<DL>
<DD> No resolution yet. All bugs which are <B>NEW</B> or
<B>ASSIGNED</B> have the resolution set to blank. All other bugs
will be marked with one of the following resolutions.
</DL>
<TR VALIGN=TOP><TD>
<DL>
<DT><B>RESOLVED</B>
<DD> A resolution has been taken, and it is awaiting verification by
QA. From here bugs are either re-opened and become
<B>REOPENED</B>, are marked <B>VERIFIED</B>, or are closed for good
and marked <B>CLOSED</B>.
<DT><B>VERIFIED</B>
<DD> QA has looked at the bug and the resolution and agrees that the
appropriate resolution has been taken. Bugs remain in this state
until the product they were reported against actually ship, at
which point the become <B>CLOSED</B>.
<DT><B>CLOSED</B>
<DD> The bug is considered dead, the resolution is correct. Any zombie
bugs who choose to walk the earth again must do so by becoming
<B>REOPENED</B>.
</DL>
<TD>
<DL>
<DT><B>FIXED</B>
<DD> A fix for this bug is checked into the tree and tested.
<DT><B>INVALID</B>
<DD> The problem described is not a bug
<DT><B>WONTFIX</B>
<DD> The problem described is a bug which will never be fixed.
<DT><B>LATER</B>
<DD> The problem described is a bug which will not be fixed in this
version of the product.
<DT><B>REMIND</B>
<DD> The problem described is a bug which will probably not be fixed in this
version of the product, but might still be.
<DT><B>DUPLICATE</B>
<DD> The problem is a duplicate of an existing bug. Marking a bug
duplicate requires the bug# of the duplicating bug and will at
least put that bug number in the description field.
<DT><B>WORKSFORME</B>
<DD> All attempts at reproducing this bug were futile, reading the
code produces no clues as to why this behavior would occur. If
more information appears later, please re-assign the bug, for
now, file it.
</DL>
</TABLE>
<H1>Other Fields</H1>
<table border=1 cellpadding=4><tr><td>
<a name="severity"><h2>Severity</h2></a>
This field describes the impact of a bug.
<p>
<p>
<table>
<tr><th>Critical</th><td>crashes, loss of data, severe memory leak
<tr><th>Major</th><td>major loss of function
<tr><th>Minor</th><td>minor loss of function, or other problem where easy workaround is present
<tr><th>Trivial</th><td>cosmetic problem like misspelt words or misaligned text
<tr><th>Enhancement</th><td>Request for enhancement
</table>
</td><td>
<a name="priority"><h2>Priority</h2></a>
This field describes the importance and order in which a bug should be
fixed. The available priorities are:
<p>
<p>
<table>
<tr><th>P1</th><td>Most important
<tr><th>P2</th><td>
<tr><th>P3</th><td>
<tr><th>P4</th><td>
<tr><th>P5</th><td>Least important
</table>
</tr></table>
<a name="area"><h2>Area</h2></a>
This is the general area which is covered by the bug report. This allows
bugs to migrate over to testing, but not show up on the "daily bug list".
Most bugs should have area set to <B>CODE</B>. Legal values include:
<UL>
<LI> CODE
<LI> JAVA
<LI> TEST
<LI> UI
<LI> BUILD
<LI> PERF
<LI> i18n <i>(internationalization)</i>
<LI> l10n <i>(localization)</i>
</UL>
<a name="rep_platform"><h2>Platform</h2></a>
This is the platform against which the bug was reported. Legal
platforms include:
<UL>
<LI> All (happens on all platform; cross-platform bug)
<LI> Macintosh
<LI> PC
<LI> X-Windows
</UL>
<b>Note:</b> Selecting the option "All" does not select bugs assigned against all platforms. It
merely selects bugs that <b>occur</b> on all platforms.
<a name="assigned_to"><h2>Assigned To</h2></a>
This is the person in charge of resolving the bug. Every time this
field changes, the status changes to <B>NEW</B> to make it easy to see
which new bugs have appeared on a person's list.
<p><A HREF="http://www.mozilla.org/owners.html">List of module owners.</a>
<p>
The default status for queries is set to NEW, ASSIGNED and REOPENED. When
searching for bugs that have been resolved or verified, remember to set the
status field appropriately.
<hr>
<address><a href="http://home.netscape.com/people/terry/">Terry Weissman &lt;terry@netscape.com&gt;</a></address>
<!-- hhmts start -->
Last modified: Tue Aug 25 23:11:26 1998
<!-- hhmts end -->
</body> </html>
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
puts "Content-type: multipart/x-mixed-replace;boundary=ThisRandomString"
puts ""
puts "--ThisRandomString"
proc InitMessage {str} {
global initstr
append initstr "$str\n"
puts "Content-type: text/plain"
puts ""
puts $initstr
puts ""
puts "--ThisRandomString"
flush stdout
}
# The below "if catch" stuff, if uncommented, will trap any error, and
# mail the error messages to terry. What a hideous, horrible
# debugging hack.
# if {[catch {
source "CGI.tcl"
ConnectToDatabase
if {![info exists FORM(cmdtype)]} {
# This can happen if there's an old bookmark to a query...
set FORM(cmdtype) doit
}
switch $FORM(cmdtype) {
runnamed {
set buffer $COOKIE(QUERY_$FORM(namedcmd))
ProcessFormFields $buffer
}
editnamed {
puts "Content-type: text/html
Refresh: 0; URL=query.cgi?$COOKIE(QUERY_$FORM(namedcmd))
<TITLE>What a hack.</TITLE>
Loading your query named <B>$FORM(namedcmd)</B>..."
exit
}
forgetnamed {
puts "Set-Cookie: QUERY_$FORM(namedcmd)= ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT
Content-type: text/html
<HTML>
<TITLE>Forget what?</TITLE>
OK, the <B>$FORM(namedcmd)</B> query is gone.
<P>
<A HREF=query.cgi>Go back to the query page.</A>"
exit
}
asnamed {
if {[regexp {^[a-zA-Z0-9_ ]+$} $FORM(newqueryname)]} {
puts "Set-Cookie: QUERY_$FORM(newqueryname)=$buffer ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT
Content-type: text/html
<HTML>
<TITLE>OK, done.</TITLE>
OK, you now have a new query named <B>$FORM(newqueryname)</B>.
<P>
<A HREF=query.cgi>Go back to the query page.</A>"
} else {
puts "Content-type: text/html
<HTML>
<TITLE>Picky, picky.</TITLE>
Query names can only have letters, digits, spaces, or underbars. You entered
\"<B>$FORM(newqueryname)</B>\", which doesn't cut it.
<P>
Click the <B>Back</B> button and type in a valid name for this query."
}
exit
}
asdefault {
puts "Set-Cookie: DEFAULTQUERY=$buffer ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT
Content-type: text/html
<HTML>
<TITLE>OK, default is set.</TITLE>
OK, you now have a new default query.
<P>
<A HREF=query.cgi>Go back to the query page, using the new default.</A>"
exit
}
}
proc qadd { item } {
global query
append query "$item"
}
proc DefCol {name k t {s ""} {q 0}} {
global key title sortkey needquote
set key($name) $k
set title($name) $t
if {![cequal $s ""]} {
set sortkey($name) $s
}
set needquote($name) $q
}
DefCol resolved_ts "bugs.resolved_ts" DateResolved bugs.resolved_ts
DefCol verified_ts "bugs.verified_ts" DateVerified bugs.verified_ts
DefCol opendate "date_format(bugs.creation_ts,'Y-m-d')" Opened bugs.creation_ts
DefCol changeddate "date_format(bugs.delta_ts,'Y-m-d')" Changed bugs.delta_ts
DefCol severity "substring(bugs.bug_severity, 1, 3)" Sev bugs.bug_severity
DefCol priority "substring(bugs.priority, 1, 3)" Pri bugs.priority
DefCol platform "substring(bugs.rep_platform, 1, 3)" Plt bugs.rep_platform
DefCol owner "assign.login_name" Owner assign.login_name
DefCol reporter "report.login_name" Reporter report.login_name
DefCol status "substring(bugs.bug_status,1,4)" State bugs.bug_status
DefCol resolution "substring(bugs.resolution,1,4)" Res bugs.resolution
DefCol summary "substring(bugs.short_desc, 1, 60)" Summary {} 1
DefCol summaryfull "bugs.short_desc" Summary {} 1
DefCol component "substring(bugs.component, 1, 8)" Comp bugs.component
DefCol product "substring(bugs.product, 1, 8)" Product bugs.product
DefCol version "substring(bugs.version, 1, 5)" Vers bugs.version
DefCol os "substring(bugs.op_sys, 1, 4)" OS bugs.op_sys
DefCol status_summary "bugs.status_summary" Status_Summary {} 1
if {[info exists COOKIE(COLUMNLIST)]} {
set collist $COOKIE(COLUMNLIST)
} else {
set collist $default_column_list
}
set dotweak [info exists FORM(tweak)]
if {$dotweak} {
confirm_login
}
puts "Content-type: text/plain\n"
set query "
select
bugs.bug_id"
foreach c $collist {
append query ",
\t$key($c)"
}
if {$dotweak} {
append query ",
bugs.product,
bugs.bug_status"
}
append query "
from bugs,
profiles assign,
profiles report,
versions projector
where bugs.assigned_to = assign.userid
and bugs.reporter = report.userid
and bugs.product = projector.program
and bugs.version = projector.value
"
if {[info exists FORM(sql)]} {
append query "and (\n[join [url_decode $FORM(sql)] { }]\n)"
} else {
set legal_fields { bug_id product version rep_platform op_sys bug_status
resolution priority bug_severity assigned_to reporter
bug_file_loc short_desc component
status_summary resolved_ts verified_ts}
foreach field [array names FORM] {
if { [ lsearch $legal_fields $field ] != -1 && ![cequal $FORM($field) ""]} {
qadd "\tand (\n"
set or ""
if { $field == "assigned_to" || $field == "reporter" || $field == "qa_assigned_to"} {
foreach p [split $FORM($field) ","] {
qadd "\t\t${or}bugs.$field = [DBname_to_id $p]\n"
set or "or "
}
} elseif { $field == "resolved_ts"} {
if {! [cequal $FORM(resolved_ts_2) ""]} {
qadd "\t\tbugs.resolved_ts between \n\t\t\tTO_DATE('$FORM($field)','DD-MON-YY') and\n \t\t\tTO_DATE('$FORM(resolved_ts_2)', 'DD-MON-YY')\n"
} else {
qadd "\t\tTO_CHAR (bugs.resolved_ts,'DD-MON-YY') = '[string toupper $FORM($field)]'\n"
}
} elseif { $field == "verified_ts"} {
if {! [cequal $FORM(verified_ts_2) ""]} {
qadd "\t\tbugs.verified_ts between \n\t\t\tTO_DATE('$FORM($field)','DD-MON-YY') and\n \t\t\tTO_DATE('$FORM(verified_ts_2)', 'DD-MON-YY')\n"
} else {
qadd "\t\tTO_CHAR (bugs.verified_ts,'DD-MON-YY') = '[string toupper $FORM($field)]'\n"
}
} else {
foreach v $MFORM($field) {
if {[cequal $v "(empty)"]} {
qadd "\t\t${or}bugs.$field is null\n"
} else {
qadd "\t\t${or}bugs.$field = '$v'\n"
}
set or "or "
}
}
qadd "\t)\n"
}
}
if {[lookup FORM changedin] != ""} {
qadd "and to_days(now()) - to_days(bugs.delta_ts) <= $FORM(changedin) "
}
}
if {[info exists FORM(order)]} {
qadd "order by "
switch -glob $FORM(order) {
*.* {}
*Number* {
set FORM(order) bugs.bug_id
}
*Import* {
set FORM(order) bugs.priority
}
*Assign* {
set FORM(order) "assign.login_name, bugs.bug_status, priorities.rank, bugs.bug_id"
}
default {
set FORM(order) "bugs.bug_status, priorities.rank, assign.login_name, bugs.bug_id"
}
}
if {[cequal [cindex $FORM(order) 0] "\{"]} {
# I don't know why this happens, but...
set FORM(order) [lindex $FORM(order) 0]
}
qadd $FORM(order)
}
puts "Please stand by ..."
if {[info exists FORM(debug)]} {
puts $query
}
flush stdout
set child 0
if {[info exists FORM(keepalive)]} {
set child [fork]
if {$child == 0} {
while 1 {
puts "Still waiting ..."
flush stdout
sleep 10
}
puts "Child process died, what's up?"
flush stdout
exit 0
}
}
SendSQL $query
set count 0
set bugl ""
proc pnl { str } {
global bugl
append bugl "$str"
}
regsub -all {[&?]order=[^&]*} $buffer {} fields
regsub -all {[&?]cmdtype=[^&]*} $fields {} fields
if {[info exists FORM(order)]} {
regsub -all { } ", $FORM(order)" "%20" oldorder
} else {
set oldorder ""
}
if {$dotweak} {
pnl "<FORM NAME=changeform METHOD=POST ACTION=\"process_bug.cgi\">"
}
set tablestart "<TABLE CELLSPACING=0 CELLPADDING=2>
<TR ALIGN=LEFT><TH>
<A HREF=\"buglist.cgi?[set fields]&order=bugs.bug_id\">ID</A>"
foreach c $collist {
if {$needquote($c)} {
append tablestart "<TH WIDTH=100% valigh=left>"
} else {
append tablestart "<TH valign=left>"
}
if {[info exists sortkey($c)]} {
append tablestart "<A HREF=\"buglist.cgi?[set fields]&order=$sortkey($c)$oldorder\">$title($c)</A>"
} else {
append tablestart $title($c)
}
}
append tablestart "\n"
set dotweak [info exists FORM(tweak)]
set p_true 1
while { $p_true } {
set result [FetchSQLData]
set p_true [MoreSQLData]
if { $result != "" } {
set bug_id [lvarpop result]
if {![info exists seen($bug_id)]} {
set seen($bug_id) 1
incr count
if {($count % 200) == 0} {
# Too big tables take too much browser memory...
pnl "</TABLE>$tablestart"
}
if {[info exists buglist]} {
append buglist ":$bug_id"
} else {
set buglist $bug_id
}
pnl "<TR VALIGN=TOP ALIGN=LEFT><TD>"
if {$dotweak} {
pnl "<input type=checkbox name=id_$bug_id>"
}
pnl "<A HREF=\"show_bug.cgi?id=$bug_id\">"
pnl "$bug_id</A> "
foreach c $collist {
set value [lvarpop result]
set nowrap {}
#-- This cursor is used to pick the login_name to be
# displayed on the query list as the field value may or
# maynot have vales associated to it
if { $c == "qa_assigned_to"} {
set dml_cur [ oraopen $lhandle ]
orasql $dml_cur "select login_name
from profiles
where userid = $value"
set cur_resultset [orafetch $dml_cur]
if {$cur_resultset != ""} {
set value $cur_resultset
set nowrap {nowrap}
} else {
set value ""
}
oraclose $dml_cur
}
if {$needquote($c)} {
set value [html_quote $value]
} else {
set value "<nobr>$value</nobr>"
}
pnl "<td $nowrap>$value"
}
if {$dotweak} {
set value [lvarpop result]
set prodarray($value) 1
set value [lvarpop result]
set statusarray($value) 1
}
pnl "\n"
}
}
}
if {$child != 0} {
kill $child
}
puts ""
puts "--ThisRandomString"
set toolong 0
puts "Content-type: text/html"
if { [info exists buglist] } {
if {[clength $buglist] < 4000} {
puts "Set-Cookie: BUGLIST=$buglist\n"
} else {
puts "Set-Cookie: BUGLIST=\n"
set toolong 1
}
} else {
puts ""
}
set env(TZ) PST8PDT
PutHeader "Bug List" "Bug List"
puts -nonewline "
<CENTER><H1>M<font -= 2>OZILLA</font> B<font -= 2>UGS</font></H1>
<B>[fmtclock [getclock ]]</B>"
if {[info exists FORM(debug)]} { puts "<PRE>$query</PRE>" }
if {$toolong} {
puts "<h2>This list is too long for bugzilla's little mind; the"
puts "Next/Prev/First/Last buttons won't appear.</h2>"
}
set cdata [ split [read_file -nonewline "comments"] "\n" ]
random seed
puts {<HR><I><A HREF="newquip.html">}
puts [lindex $cdata [random [llength $cdata]]]</I></A></CENTER>
puts "<HR SIZE=10>$tablestart"
puts $bugl
puts "</TABLE>"
switch $count {
0 {
puts "Zarro Boogs found."
}
1 {
puts "One bug found."
}
default {
puts "$count bugs found."
}
}
if {$dotweak} {
GetVersionTable
puts "
<SCRIPT>
numelements = document.changeform.elements.length;
function SetCheckboxes(value) {
for (var i=0 ; i<numelements ; i++) {
item = document.changeform.elements\[i\];
item.checked = value;
}
}
document.write(\" <input type=button value=\\\"Uncheck All\\\" onclick=\\\"SetCheckboxes(false);\\\"> <input type=button value=\\\"Check All\\\" onclick=\\\"SetCheckboxes(true);\\\">\");
</SCRIPT>"
set resolution_popup [make_options $legal_resolution_no_dup FIXED]
GetVersionTable
set prod_list [array names prodarray]
set list $prod_list
set legal_target_versions $versions([lvarpop list])
foreach p $list {
set legal_target_versions [intersect $legal_target_versions \
$versions($p)]
}
set version_popup [make_options \
[concat "-blank-" $legal_target_versions] \
$dontchange]
set platform_popup [make_options $legal_platform $dontchange]
set priority_popup [make_options $legal_priority $dontchange]
set sev_popup [make_options $legal_severity $dontchange]
if {[llength $prod_list] == 1} {
set prod_list [lindex $prod_list 0 ]
set legal_component [linsert $components($prod_list) 0 { }]
} else {
set legal_component { }
}
set component_popup [make_options $legal_component $dontchange]
set product_popup [make_options $legal_product $dontchange]
puts "
<hr>
<TABLE>
<TR>
<TD ALIGN=RIGHT><B>Product:</B></TD>
<TD><SELECT NAME=product>$product_popup</SELECT></TD>
<TD ALIGN=RIGHT><B>Version:</B></TD>
<TD><SELECT NAME=version>$version_popup</SELECT></TD>
<TR>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#rep_platform\">Platform:</A></B></TD>
<TD><SELECT NAME=rep_platform>$platform_popup</SELECT></TD>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#priority\">Priority:</A></B></TD>
<TD><SELECT NAME=priority>$priority_popup</SELECT></TD>
</TR>
<TR>
<TD ALIGN=RIGHT><B>Component:</B></TD>
<TD><SELECT NAME=component>$component_popup</SELECT></TD>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#severity\">Severity:</A></B></TD>
<TD><SELECT NAME=bug_severity>$sev_popup</SELECT></TD>
</TR>
</TABLE>
<INPUT NAME=multiupdate value=Y TYPE=hidden>
<B>Additional Comments:</B>
<BR>
<TEXTAREA WRAP=HARD NAME=comment ROWS=5 COLS=80></TEXTAREA><BR>"
# knum is which knob number we're generating, in javascript terms.
set knum 0
puts "
<INPUT TYPE=radio NAME=knob VALUE=none CHECKED>
Do nothing else<br>"
incr knum
puts "
<INPUT TYPE=radio NAME=knob VALUE=accept>
Accept bugs (change status to <b>ASSIGNED</b>)<br>"
incr knum
if {![info exists statusarray(CLOSED)] && \
![info exists statusarray(VERIFIED)] && \
![info exists statusarray(RESOLVED)]} {
puts "
<INPUT TYPE=radio NAME=knob VALUE=clearresolution>
Clear the resolution<br>"
incr knum
puts "
<INPUT TYPE=radio NAME=knob VALUE=resolve>
Resolve bugs, changing <A HREF=\"bug_status.html\">resolution</A> to
<SELECT NAME=resolution
ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\">
$resolution_popup</SELECT><br>"
incr knum
}
if {![info exists statusarray(NEW)] && \
![info exists statusarray(ASSIGNED)] && \
![info exists statusarray(REOPENED)]} {
puts "
<INPUT TYPE=radio NAME=knob VALUE=reopen> Reopen bugs<br>"
incr knum
}
if {[llength [array names statusarray]] == 1} {
if {[info exists statusarray(RESOLVED)]} {
puts "
<INPUT TYPE=radio NAME=knob VALUE=verify>
Mark bugs as <b>VERIFIED</b><br>"
incr knum
}
if {[info exists statusarray(VERIFIED)]} {
puts "
<INPUT TYPE=radio NAME=knob VALUE=close>
Mark bugs as <b>CLOSED</b><br>"
incr knum
}
}
puts "
<INPUT TYPE=radio NAME=knob VALUE=reassign>
<A HREF=\"bug_status.html#assigned_to\">Reassign</A> bugs to
<INPUT NAME=assigned_to SIZE=32
ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\"
VALUE=\"$COOKIE(Bugzilla_login)\"><br>"
incr knum
puts "<INPUT TYPE=radio NAME=knob VALUE=reassignbycomponent>
Reassign bugs to owner of selected component<br>"
incr knum
puts "
<p>
<font size=-1>
To make changes to a bunch of bugs at once:
<ol>
<li> Put check boxes next to the bugs you want to change.
<li> Adjust above form elements. (It's <b>always</b> a good idea to add some
comment explaining what you're doing.)
<li> Click the below \"Commit\" button.
</ol></font>
<INPUT TYPE=SUBMIT VALUE=Commit>
</FORM><hr>"
}
if {$count > 0} {
puts "<FORM METHOD=POST ACTION=\"long_list.cgi\">
<INPUT TYPE=HIDDEN NAME=buglist VALUE=$buglist>
<INPUT TYPE=SUBMIT VALUE=\"Long Format\">
<A HREF=\"query.cgi\">Query Page</A>
<A HREF=\"colchange.cgi?$buffer\">Change columns</A>
</FORM>"
if {!$dotweak && $count > 1} {
puts "<A HREF=\"buglist.cgi?[set fields]&tweak=1\">Make changes to several of these bugs at once.</A>"
}
}
puts "--ThisRandomString--"
flush stdout
#
# Below is second part of hideous "if catch" stuff from above.
#
#
#
# }]} {
# exec /usr/lib/sendmail -t << "To: terry
#
#
# $query
#
# $errorInfo
# "
# }
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
confirm_login
if {![info exists FORM(pwd1)]} {
puts "Content-type: text/html
<H1>Change your password</H1>
<form method=post>
<table>
<tr>
<td align=right>Please enter the new password for <b>$COOKIE(Bugzilla_login)</b>:</td>
<td><input type=password name=pwd1></td>
</tr>
<tr>
<td align=right>Re-enter your new password:</td>
<td><input type=password name=pwd2></td>
</table>
<input type=submit value=Submit>"
exit
}
if {![cequal $FORM(pwd1) $FORM(pwd2)]} {
puts "Content-type: text/html
<H1>Try again.</H1>
The two passwords you entered did not match. Please click <b>Back</b> and try again."
exit
}
set pwd $FORM(pwd1)
if {![regexp {^[a-zA-Z0-9-_]*$} $pwd] || [clength $pwd] < 3 || [clength $pwd] > 15} {
puts "Content-type: text/html
<H1>Sorry; we're picky.</H1>
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."
exit
}
puts "Content-type: text/html\n"
SendSQL "update profiles set password='$pwd' where login_name='[SqlQuote $COOKIE(Bugzilla_login)]'"
puts "<H1>OK, done.</H1>
Your new password has been set.
<p>
<a href=query.cgi>Back to query page.</a>"
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
puts "Content-type: text/html"
# The master list not only says what fields are possible, but what order
# they get displayed in.
set masterlist {opendate changeddate severity priority platform owner reporter status
resolution component product version project os summary summaryfull status_summary resolved_ts verified_ts}
if {[info exists FORM(rememberedquery)]} {
if {[info exists FORM(resetit)]} {
set collist $default_column_list
} else {
set collist {}
foreach i $masterlist {
if {[info exists FORM(column_$i)]} {
lappend collist $i
}
}
}
puts "Set-Cookie: COLUMNLIST=$collist ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT"
puts "Refresh: 0; URL=buglist.cgi?$FORM(rememberedquery)"
puts ""
puts "<TITLE>What a hack.</TITLE>"
puts "Resubmitting your query with new columns..."
exit
}
if {[info exists COOKIE(COLUMNLIST)]} {
set collist $COOKIE(COLUMNLIST)
} else {
set collist $default_column_list
}
foreach i $masterlist {
set desc($i) $i
}
set desc(summary) "Summary (first 60 characters)"
set desc(summaryfull) "Full Summary"
puts ""
puts "Check which columns you wish to appear on the list, and then click on"
puts "submit."
puts "<p>"
puts "<FORM ACTION=colchange.cgi>"
puts "<INPUT TYPE=HIDDEN NAME=rememberedquery VALUE=$buffer>"
foreach i $masterlist {
if {[lsearch $collist $i] >= 0} {
set c CHECKED
} else {
set c ""
}
puts "<INPUT TYPE=checkbox NAME=column_$i $c>$desc($i)<br>"
}
puts "<P>"
puts "<INPUT TYPE=\"submit\" VALUE=\"Submit\">"
puts "</FORM>"
puts "<FORM ACTION=colchange.cgi>"
puts "<INPUT TYPE=HIDDEN NAME=rememberedquery VALUE=$buffer>"
puts "<INPUT TYPE=HIDDEN NAME=resetit VALUE=1>"
puts "<INPUT TYPE=\"submit\" VALUE=\"Reset to Bugzilla default\">"
puts "</FORM>"
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
puts "Content-type: text/plain\n"
set query "update bugs\nset
bug_status=RESOLVED,
bug_resolution=FIXED
where bug_id = $FORM(id)"
set newcomment "Fixed by changes in $FORM(directory):"
foreach i $FORM(fileversions) {
lassign $i file version
append newcomment "\n $file ($version)"
}
puts "Query is $query"
puts "Comment is $newcomment"
exit
ConnectToDatabase
SendSQL $query
while {[MoreSQLData]} {
FetchSQLData
set result [MoreSQLData]
}
AppendComment $FORM(id) $FORM(who) $newcomment
exec ./processmail $FORM(id) < /dev/null > /dev/null 2> /dev/null &
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
confirm_login
puts "Content-type: text/html\n"
ConnectToDatabase
if {[info exists FORM(commit)]} {
puts "<TITLE>Changing Long Description for bug [FormData id]</TITLE>"
set tmpfile [TmpName ldesc.[pid]]
SendSQL "select rowid from bugs where bug_id = [FormData id]"
set r [FetchSQLData]
set lfile [open $tmpfile w]
puts -nonewline $lfile [FormData long_desc]
close $lfile
orawritelong $oc [lindex $r 0] bugs long_desc $tmpfile
unlink $tmpfile
oracommit $oc
puts "<H1>Long Description Changed</H1>"
puts "<UL><LI>"
puts "<A HREF=\"show_bug.cgi?id=[FormData id]\">Show Bug #[FormData id]</A>"
puts "<LI><A HREF=\"query.cgi\">Query Page</A>"
exec ./processmail [FormData id] < /dev/null > /dev/null 2> /dev/null &
exit 0
}
puts "<TITLE>Editing Long Description for bug [FormData id]</TITLE>"
puts "<H2>Be Careful</H2>"
puts "Many people think that the ability to edit the full long description
is a bad thing and that developers should not be allowed to do this,
because information can get lost. Please do not use this feature casually.
<P><HR>"
set generic_query {
select
bugs.bug_id,
bugs.product,
bugs.version,
bugs.rep_platform,
bugs.op_sys,
bugs.bug_status,
bugs.bug_severity,
bugs.priority,
bugs.resolution,
assign.login_name,
report.login_name,
bugs.bug_file_loc,
bugs.short_desc
from bugs,profiles assign,profiles report,priorities
where assign.userid = bugs.assigned_to and report.userid = bugs.reporter and
}
SendSQL "$generic_query bugs.bug_id = [FormData id]"
set result [ FetchSQLData ]
puts "<TABLE WIDTH=100%>"
puts "<TD COLSPAN=4><TR><DIV ALIGN=CENTER><B><FONT =\"+3\">[html_quote [lindex $result 13]]</B></FONT></DIV>"
puts "<TR><TD><B>Bug#:</B> [lindex $result 0]"
puts "<TD><B>Product:</B> [lindex $result 1]"
puts "<TD><B>Version:</B> [lindex $result 2]"
puts "<TD><B>Platform:</B> [lindex $result 3]"
puts "<TR><TD><B>OS/Version:</B> [lindex $result 4]"
puts "<TD><B>Status:</B> [lindex $result 5]"
puts "<TD><B>Severity:</B> [lindex $result 6]"
puts "<TD><B>Priority:</B> [lindex $result 7]"
puts "</TD><TD><B>Resolution:</B> [lindex $result 8]</TD>"
puts "<TD><B>Assigned To:</B> [lindex $result 9]"
puts "<TD><B>Reported By:</B> [lindex $result 10]"
puts "<TR><TD COLSPAN=6><B>URL:</B> [html_quote [lindex $result 11]]"
puts "<TR><TD><B>Description:</B>\n</TABLE>"
set ldesc [GetLongDescription [FormData id]]
set lines [llength [split $ldesc "\n"]]
incr lines 10
if {$lines > 100} {
set lines 100
}
if {[regexp {Macintosh} $env(HTTP_USER_AGENT)]} {
set cols 160
} else {
set cols 80
}
puts "<FORM METHOD=POST ACTION=\"edit_desc.cgi\">
<INPUT TYPE=HIDDEN NAME=\"id\" VALUE=$FORM(id)>
<INPUT TYPE=HIDDEN NAME=\"commit\" VALUE=yes>
<TEXTAREA NAME=long_desc WRAP=HARD COLS=$cols ROWS=$lines>
[html_quote $ldesc]
</TEXTAREA>
<INPUT TYPE=SUBMIT VALUE=\"Change Description\">
</FORM>"
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source CGI.tcl
confirm_login
puts "Content-type: text/html\n"
proc pickplatform {} {
global env FORM
if {[formvalue rep_platform] != ""} {
return [formvalue rep_platform]
}
switch -regexp $env(HTTP_USER_AGENT) {
{Mozilla.*\(X11} {return "X-Windows"}
{Mozilla.*\(Windows} {return "PC"}
{Mozilla.*\(Macintosh} {return "Macintosh"}
{Mozilla.*\(Win} {return "PC"}
default {return "PC"}
}
}
proc pickproduct {} {
global FORM env COOKIE product versions
set product missingProductSoPickDefault
set product [formvalue product]
if {$product == ""} {
if {[info exists COOKIE(PRODUCT)]} {
set product $COOKIE(PRODUCT)
} else {
switch -regexp $env(HTTP_USER_AGENT) {
{2.0Gold} {set product "Hearst"}
{4\.0.*; *Nav} { set product "Ratbert"}
{4\.0} {set product "Communicator"}
{3\.0} {set product "Akbar"}
{2\.0} {set product "Cheddar"}
}
}
}
if {![info exists versions($product)]} { set product "Communicator" }
return $product
}
proc pickversion {} {
global env versions product FORM
set version [formvalue version]
if {$version == ""} {
regexp {Mozilla[ /]([^ ]*) } $env(HTTP_USER_AGENT) foo version
switch -regexp $env(HTTP_USER_AGENT) {
{4\.09} { set version "4.5" }
}
}
if {[lsearch -exact $versions($product) $version] >= 0} {
return $version
} else {
if {[info exists COOKIE(VERSION-$product)]} {
if {[lsearch -exact $versions($product) $COOKIE(VERSION-$Product)] >= 0} {
return $COOKIE(VERSION-$Product)
}
}
}
return [lindex $versions($product) 0]
}
proc pickcomponent {} {
global components product FORM
set result [formvalue component]
if {![cequal $result ""] && \
[lsearch -exact $components($product) $result] < 0} {
set result ""
}
return $result
}
proc pickos {} {
global env FORM
if {[formvalue op_sys] != ""} {
return [formvalue op_sys]
}
switch -regexp $env(HTTP_USER_AGENT) {
{Mozilla.*\(.*;.*; IRIX.*\)} {return "IRIX"}
{Mozilla.*\(.*;.*; 32bit.*\)} {return "Windows 95"}
{Mozilla.*\(.*;.*; 16bit.*\)} {return "Windows 3.1"}
{Mozilla.*\(.*;.*; 68K.*\)} {return "System 7.5"}
{Mozilla.*\(.*;.*; PPC.*\)} {return "System 7.5"}
{Mozilla.*\(.*;.*; OSF.*\)} {return "OSF/1"}
{Mozilla.*\(.*;.*; Linux.*\)} {return "Linux"}
{Mozilla.*\(.*;.*; SunOS 5.*\)} {return "Solaris"}
{Mozilla.*\(.*;.*; SunOS.*\)} {return "SunOS"}
{Mozilla.*\(.*;.*; SunOS.*\)} {return "SunOS"}
{Mozilla.*\(Win16.*\)} {return "Windows 3.1"}
{Mozilla.*\(Win95.*\)} {return "Windows 95"}
{Mozilla.*\(WinNT.*\)} {return "Windows NT"}
default {return "other"}
}
}
proc formvalue {name {default ""}} {
global FORM
if {[info exists FORM($name)]} {
return [FormData $name]
}
return $default
}
GetVersionTable
pickproduct
set assign_element [GeneratePersonInput assigned_to 1 [formvalue assigned_to]]
set cc_element [GeneratePeopleInput cc [formvalue cc ""]]
set priority_popup [make_popup priority $legal_priority [formvalue priority "P2"] 0]
set sev_popup [make_popup bug_severity $legal_severity [formvalue bug_severity "normal"] 0]
set platform_popup [make_popup rep_platform $legal_platform [pickplatform] 0]
set opsys_popup [make_popup op_sys $legal_opsys [pickos] 0]
set component_popup [make_popup component $components($product) \
[formvalue component] 1]
PutHeader "Enter Bug" "Enter Bug"
puts "
<FORM NAME=enterForm METHOD=POST ACTION=\"post_bug.cgi\">
<INPUT TYPE=HIDDEN NAME=bug_status VALUE=NEW>
<INPUT TYPE=HIDDEN NAME=reporter VALUE=$COOKIE(Bugzilla_login)>
<TABLE CELLSPACING=2 CELLPADDING=0 BORDER=0>
<TR>
<td ALIGN=right valign=top><B>Product:</B></td>
<td>[Product_element $product]</td>
<td ALIGN=right valign=top><B>Version:</B></td>
<td>[Version_element [pickversion] $product]</td>
<td align=right valign=top><b>Component:</b></td>
<td>$component_popup</td>
</TR>
<tr><td>&nbsp<td> <td> <td> <td> <td> </tr>
<TR>
<td align=right><b><B><A HREF=\"bug_status.html#rep_platform\">Platform:</A></B></td>
<TD>$platform_popup</TD>
<TD ALIGN=RIGHT><B>OS:</B></TD>
<TD>$opsys_popup</TD>
<td align=right valign=top></td>
<td rowspan=3></td>
<td></td>
</TR>
<TR>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#priority\">Priority</A>:</B></TD>
<TD>$priority_popup</TD>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#severity\">Severity</A>:</B></TD>
<TD>$sev_popup</TD>
<td></td>
<td></td>
</TR>
<tr><td>&nbsp<td> <td> <td> <td> <td> </tr>
<tr>
<TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#assigned_to\">Assigned To:
</A></B></TD>
<TD colspan=5>$assign_element
(Leave blank to assign to default owner for component)</td>
</tr>
<tr>
<TD ALIGN=RIGHT ><B>Cc:</B></TD>
<TD colspan=5>$cc_element</TD>
</tr>
<tr><td>&nbsp<td> <td> <td> <td> <td> </tr>
<TR>
<TD ALIGN=RIGHT><B>URL:</B>
<TD COLSPAN=5>
<INPUT NAME=bug_file_loc SIZE=60 value=\"[value_quote [formvalue bug_file_loc]]\"></TD>
</TR>
<TR>
<TD ALIGN=RIGHT><B>Summary:</B>
<TD COLSPAN=5>
<INPUT NAME=short_desc SIZE=60 value=\"[value_quote [formvalue short_desc]]\"></TD>
</TR>
<tr><td>&nbsp<td> <td> <td> <td> <td> </tr>
<tr>
<td aligh=right valign=top><B>Description:</b>
<td colspan=5><TEXTAREA WRAP=HARD NAME=comment ROWS=10 COLS=80>[value_quote [formvalue comment]]</TEXTAREA><BR></td>
</tr>
<tr>
<td></td>
<td colspan=5>
<INPUT TYPE=\"submit\" VALUE=\" Commit \">
&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE=\"reset\" VALUE=\"Reset\">
&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE=\"submit\" NAME=maketemplate VALUE=\"Remember values as bookmarkable template\">
</td>
</tr>
</TABLE>
<INPUT TYPE=hidden name=form_name VALUE=enter_bug>
</FORM>
Some fields initialized from your user-agent, <b>$env(HTTP_USER_AGENT)</b>.
If you think it got it wrong, please tell $maintainer what it should have been.
</BODY></HTML>"
flush stdout
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
# Contains some global variables and routines used throughout bugzilla.
set maintainer "<a href=mailto:terry@netscape.com>terry@netscape.com</a>"
if { ! [info exists oradbname] } {
set oradbname "SCOPPROD"
}
set dontchange "--do_not_change--"
set chooseone "--Choose_one:--"
set tmp_dir ""
proc TmpName { tail } {
global tmp_dir
if { $tmp_dir == "" } {
set tmp_dir "/var/tmp/bugzilla"
if {! [file isdirectory $tmp_dir]} {
mkdir $tmp_dir
}
}
return "$tmp_dir/$tail"
}
proc ConnectToDatabase {} {
global mysqlhandle
if {![info exists mysqlhandle]} {
set mysqlhandle [mysqlconnect]
mysqluse $mysqlhandle "bugs"
}
}
# Useful for my stand-alone debugging
proc DebugConnect {} {
global COOKIE
set COOKIE(Bugzilla_login) terry
set COOKIE(Bugzilla_password) terry
ConnectToDatabase
}
proc SendSQL { str } {
global mysqlhandle
mysqlsel $mysqlhandle $str
return 0
}
proc MoreSQLData {} {
global mysqlhandle
set result [mysqlresult $mysqlhandle "rows?"]
return [expr ![cequal $result ""] && $result > 0]
}
proc FetchSQLData {} {
global mysqlhandle
return [mysqlnext $mysqlhandle]
}
proc Disconnect {} {
global mysqlhandle
mysqlclose $mysqlhandle
unset mysqlhandle
}
set legal_opsys { "Windows 3.1" "Windows 95" "Windows NT" "System 7" "System 7.5"
"7.1.6" "AIX" "BSDI" "HP-UX" "IRIX" "Linux" "OSF/1" "Solaris" "SunOS"
"other" }
set default_column_list {severity priority platform owner status resolution summary}
set env(TZ) PST8PDT
proc AppendComment {bugid who comment} {
regsub -all "\r\n" $comment "\n" comment
if {[cequal $comment "\n"] || [clength $comment] == 0} {
return
}
SendSQL "select long_desc from bugs where bug_id = $bugid"
set desc [lindex [FetchSQLData] 0]
append desc "\n\n------- Additional Comments From $who [fmtclock [getclock] "%D %H:%M"] -------\n"
append desc $comment
SendSQL "update bugs set long_desc='[SqlQuote $desc]' where bug_id=$bugid"
}
proc SortIgnoringCase {a b} {
return [string compare [string tolower $a] [string tolower $b]]
}
proc make_popup { name src default listtype {onchange {}}} {
set last ""
set popup "<SELECT NAME=$name"
if {$listtype > 0} {
append popup " SIZE=5"
if {$listtype == 2} {
append popup " MULTIPLE"
}
}
if {$onchange != ""} {
append popup " onchange=$onchange"
}
append popup ">"
append popup [make_options $src $default [expr {$listtype == 2 && $default != ""}]]
append popup "</SELECT>"
return $popup
}
proc Product_element { prod {onchange {}} } {
global versions
return [make_popup product [lsort [array names versions]] $prod 1 \
$onchange]
}
proc Component_element { comp prod {onchange {}} } {
global components
if {![info exists components($prod)]} {
set componentlist {}
} else {
set componentlist $components($prod)
}
if {![cequal $comp ""] && [lsearch $componentlist $comp] >= 0} {
set defcomponent $comp
} else {
set defcomponent [lindex $componentlist 0]
}
return [make_popup component $componentlist $defcomponent 1 ""]
}
proc Version_element { vers prod {onchange {}} } {
global versions
if {![info exists versions($prod)]} {
set versionlist {}
} else {
set versionlist $versions($prod)
}
set defversion [lindex $versionlist 0]
if {[lsearch $versionlist $vers] >= 0} {
set defversion $vers
}
return [make_popup version $versionlist $defversion 1 $onchange]
}
proc GenerateVersionTable {} {
ConnectToDatabase
SendSQL "select value, program from versions order by value"
while { [ MoreSQLData ] } {
set line [FetchSQLData]
if {$line != ""} {
set v [lindex $line 0]
set p1 [lindex $line 1]
lappend versions($p1) $v
set varray($v) 1
set parray($p1) 1
}
}
SendSQL "select value, program from components"
while { [ MoreSQLData ] } {
set line [FetchSQLData]
if {$line != ""} {
lassign $line c p
lappend components($p) $c
set carray($c) 1
set parray($p) 1
}
}
LearnAboutColumns bugs cols
set log_columns $cols(-list-)
foreach i {bug_id creation_ts delta_ts long_desc} {
set w [lsearch $log_columns $i]
if {$w >= 0} {
set log_columns [lreplace $log_columns $w $w]
}
}
set legal_priority [SplitEnumType $cols(priority,type)]
set legal_severity [SplitEnumType $cols(bug_severity,type)]
set legal_platform [SplitEnumType $cols(rep_platform,type)]
set legal_bug_status [SplitEnumType $cols(bug_status,type)]
set legal_resolution [SplitEnumType $cols(resolution,type)]
set legal_resolution_no_dup $legal_resolution
set w [lsearch $legal_resolution_no_dup "DUPLICATE"]
if {$w >= 0} {
set legal_resolution_no_dup [lreplace $legal_resolution_no_dup $w $w]
}
set list [lsort -command SortIgnoringCase [array names versions]]
set tmpname "versioncache.[id process]"
set fid [open $tmpname "w"]
puts $fid [list set log_columns $log_columns]
foreach i $list {
puts $fid [list set versions($i) $versions($i)]
if {![info exists components($i)]} {
set components($i) {}
}
}
puts $fid [list set legal_versions [lsort -command SortIgnoringCase \
[array names varray]]]
foreach i [lsort -command SortIgnoringCase [array names components]] {
puts $fid [list set components($i) $components($i)]
}
puts $fid [list set legal_components [lsort -command SortIgnoringCase \
[array names carray]]]
puts $fid [list set legal_product $list]
puts $fid [list set legal_priority $legal_priority]
puts $fid [list set legal_severity $legal_severity]
puts $fid [list set legal_platform $legal_platform]
puts $fid [list set legal_bug_status $legal_bug_status]
puts $fid [list set legal_resolution $legal_resolution]
puts $fid [list set legal_resolution_no_dup $legal_resolution_no_dup]
close $fid
frename $tmpname "versioncache"
catch {chmod 0666 "versioncache"}
}
# This proc must be called before using legal_product or the versions array.
proc GetVersionTable {} {
global versions
set mtime 0
catch {set mtime [file mtime versioncache]}
if {[getclock] - $mtime > 3600} {
GenerateVersionTable
}
uplevel #0 {source versioncache}
if {![info exists versions]} {
GenerateVersionTable
uplevel #0 {source versioncache}
if {![info exists versions]} {
error "Can't generate version info; tell terry."
}
}
}
proc GeneratePersonInput { field required def_value {extraJavaScript {}} } {
if {![cequal $extraJavaScript ""]} {
set $extraJavaScript "onChange=\" $extraJavaScript \""
}
return "<INPUT NAME=\"$field\" SIZE=32 $extraJavaScript VALUE=\"$def_value\">"
}
proc GeneratePeopleInput { field def_value } {
return "<INPUT NAME=\"$field\" SIZE=45 VALUE=\"$def_value\">"
}
set cachedNameArray() ""
proc InsertNewUser {username} {
random seed
set pwd ""
loop i 0 8 {
append pwd [cindex "abcdefghijklmnopqrstuvwxyz" [random 26]]
}
SendSQL "insert into profiles (login_name, password) values ('[SqlQuote $username]', '$pwd')"
return $pwd
}
proc DBID_to_name { id } {
global cachedNameArray
if {![info exists cachedNameArray($id)]} {
SendSQL "select login_name from profiles where userid = $id"
set r [FetchSQLData]
if {$r == ""} { set r "__UNKNOWN__" }
set cachedNameArray($id) $r
}
return $cachedNameArray($id)
}
proc DBname_to_id { name } {
SendSQL "select userid from profiles where login_name = '[SqlQuote $name]'"
set r [FetchSQLData]
if {[cequal $r ""]} {
return 0
}
return $r
}
proc DBNameToIdAndCheck {name {forceok 0}} {
set result [DBname_to_id $name]
if {$result > 0} {
return $result
}
if {$forceok} {
InsertNewUser $name
set result [DBname_to_id $name]
if {$result > 0} {
return $result
}
puts "Yikes; couldn't create user $name. Please report problem to"
puts "$maintainer."
} else {
puts "The name <TT>$name</TT> is not a valid username. Please hit the"
puts "<B>Back</B> button and try again."
}
exit 0
}
proc GetLongDescription { id } {
SendSQL "select long_desc from bugs where bug_id = $id"
return [lindex [FetchSQLData] 0]
}
proc ShowCcList {num} {
set cclist ""
set comma ""
SendSQL "select who from cc where bug_id = $num"
set ccids ""
while {[MoreSQLData]} {
lappend ccids [lindex [FetchSQLData] 0]
}
set result ""
foreach i $ccids {
lappend result [DBID_to_name $i]
}
return [join $result ","]
}
proc make_options_new { src default {isregexp 0} } {
set last "" ; set popup "" ; set found 0
foreach item $src {
if { $item == "-blank-" } { set item "" } {
if {$isregexp ? [regexp $default $item] : [cequal $default $item]} {
append popup "<OPTION SELECTED VALUE=\"$item\">$item"
set found 1
} else {
append popup "<OPTION VALUE=\"$item\">$item"
}
}
}
if {!$found && $default != ""} {
append popup "<OPTION SELECTED>$default"
}
return $popup
}
proc Shell {} {
ConnectToDatabase
while (1) {
puts -nonewline "> "
if {[gets stdin line] < 0} {
break
}
if {[catch {SendSQL $line} errorinfo]} {
puts "Error -- $errorinfo"
} else {
while {[MoreSQLData]} {
puts [FetchSQLData]
}
}
}
}
# Fills in the given array with info about the columns. The array gets
# the following entries:
# -list- the list of column names
# <name>,type the type for the given name
proc LearnAboutColumns {table arrayname} {
upvar $arrayname a
catch (unset a)
SendSQL "show columns from $table"
set list {}
while {[MoreSQLData]} {
lassign [FetchSQLData] name type
set a($name,type) $type
lappend list $name
}
set a(-list-) $list
}
# If the above returned a enum type, take that type and parse it into the
# list of values. Assumes that enums don't ever contain an apostrophe!
proc SplitEnumType {str} {
set result {}
if {[regexp {^enum\((.*)\)$} $str junk guts]} {
append guts ","
while {[regexp {^'([^']*)',(.*)$} $guts junk first guts]} {
lappend result $first
}
}
return $result
}
proc SqlQuote {str} {
regsub -all "'" $str "''" str
#
# This next line is quoting hell. One level of quoting comes from
# the TCL interpreter, and another level comes from TCL's regular
# expression parser. It really works out to "change every
# backslash to two backslashes".
regsub -all "\\\\" $str "\\\\\\\\" str
return $str
}
<HTML>
<!--
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing 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.
Contributor(s): Terry Weissman <terry@mozilla.org>
-->
<TITLE>Clue</TITLE>
<H1>A Clue</H1>
This form will allow you to call up a subset of the bug list.
You should be able to add the URL of the resulting list to
your bookmark file in order to preserve queries.
<p>
The way the query works, if you have nothing checked in a box,
then all values for that field are legal, for example if you checked nothing
in any of the boxes, you would get the entire bug list.
<p>
The default value of this form should correspond roughly to a "personal"
bug list.
<HR>
<H2>Running queries not supported by the pretty boxes</H2>
There is a hacky way to do some searches that aren't supported by the
form. The buglist script will build queries based on the URL, so
you can add other criteria.
<P>
For example, if you wanted to see all bugs reported against the X platform
and assigned to jwz, you could ask for all bugs assign to jwz, then
edit the URL in the "Location" box, adding the clause "&rep_platform=X-Windows"
to the URL.
<P>
Here is a list of some of the field names you could use for additional
unsupported searches ...
<PRE>
version
rep_platform
op_sys
reporter area
bug_file_loc
short_desc
</PRE>
<HTML>
<!--
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing 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.
Contributor(s): Terry Weissman <terry@mozilla.org>
-->
<TITLE>How to Mail to bugzilla</TITLE>
<H1>THIS DOESN'T WORK RIGHT NOW. Coming someday.</H1>
Mailing to "bugzilla" will be piped through a script which examines
your message, stripping out control lines, and passing the rest of the
message in as the description of a new bug. The control lines look like: <P>
<PRE>
@FIELD-LABEL VALUE
LABEL Legal Values
Priority critical major normal minor trivial
Type BUG RFE
Product Cheddar
Platform PC X-Windows Macintosh All
Area CODE JAVA TEST BUILD UI PERF
Version version 2.0b1 2.0b2 2.0b2 2.0b4 2.1a0 2.1a1 2.1b0 2.1b1 2.1b2
OS Windows 3.1 Windows 95 Windows NT System 7 System 7.5
AIX BSDI HP-UX IRIX Linux OSF/1 Solaris SunOS other
Summary -anything-
URL -anything-
Assign someone in eng
and
@description
This tells the bug parse to stop looking for control lines,
allowing the bug description to contain lines which start with @
</PRE>
There are default values for all these fields. If you don't specify a
Summary, the subject of the mail message is used. <P>
If you specify an illegal value, the default value is used, the
bug is assigned to you, and the answerback message will describe
the error. <P>
After the bug is posted, you will get mail verifying the posting
and informing you of the bug number if you wish to fix any
mistakes made by the auto-processor. <P>
EXAMPLE: <P>
<PRE>
% Mail bugzilla
Subject: WinFE crashes with GPF when I pour beer on my keyboard
@priority critical
@platform PC
@assign troy
After the beer bash I emptied the rest of the keg onto my keyboard
and my sharp build of Navigator got a GPF.
.
</PRE>
<HTML>
<!--
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing 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.
Contributor(s): Terry Weissman <terry@mozilla.org>
-->
<HEAD><TITLE>Bugzilla Main Page</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"
LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000">
<TABLE BGCOLOR="#000000" WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR><TD><A HREF="http://www.mozilla.org/"><IMG
SRC="http://www.mozilla.org/images/mozilla-banner.gif" ALT=""
BORDER=0 WIDTH=600 HEIGHT=58></A></TD></TR></TABLE>
<TABLE BORDER=0 CELLPADDING=12 CELLSPACING=0 WIDTH="100%">
<TR>
<TD>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>
<TR><TD VALIGN=TOP ALIGN=CENTER NOWRAP>
<FONT SIZE="+3"><B><NOBR>Main Page</NOBR></B></FONT>
</TD></TR><TR><TD VALIGN=TOP ALIGN=CENTER>
<B></B>
</TD></TR>
</TABLE>
</TD>
<TD>
This is <B>Bugzilla</B>: the Mozilla bug system. For more
information about what Bugzilla is and what it can do, see
<A HREF="http://www.mozilla.org/">mozilla.org</A>'s
<A HREF="http://www.mozilla.org/bugs/"><B>bug pages</B></A>.
</TD></TR></TABLE>
<body>
<img align=right width=329 height=220 src=ant.jpg>
This is where we put in lots of nifty words explaining all about
bugzilla.
<p>
But it all boils down to a choice of:
<br>
<a href="query.cgi">Go to the query page to start.</a><br>
<a href="enter_bug.cgi">Enter a new bug</a>
<FORM METHOD=GET ACTION=show_bug.cgi><INPUT TYPE=SUBMIT VALUE="Find"> bug
# <INPUT NAME=id SIZE=6></FORM></TD>
</BODY>
</HTML>
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
puts "Content-type: text/html\n"
puts "<TITLE>Full Text Bug Listing</TITLE>"
set generic_query {
select
bugs.bug_id,
bugs.product,
bugs.version,
bugs.rep_platform,
bugs.op_sys,
bugs.bug_status,
bugs.bug_severity,
bugs.priority,
bugs.resolution,
assign.login_name,
report.login_name,
bugs.component,
bugs.target_fix_version,
bugs.bug_file_loc,
bugs.short_desc
from bugs,profiles assign,profiles report
where assign.userid = bugs.assigned_to and report.userid = bugs.reporter and
}
ConnectToDatabase
foreach bug [split $FORM(buglist) :] {
SendSQL "$generic_query bugs.bug_id = $bug\n"
if { [ MoreSQLData ] } {
set result [ FetchSQLData ]
puts "<IMG SRC=\"1x1.gif\" WIDTH=1 HEIGHT=80 ALIGN=LEFT>"
puts "<TABLE WIDTH=100%>"
puts "<TD COLSPAN=4><TR><DIV ALIGN=CENTER><B><FONT =\"+3\">[html_quote [lindex $result 15]]</B></FONT></DIV>"
puts "<TR><TD><B>Bug#:</B> <A HREF=\"show_bug.cgi?id=[lindex $result 0]\">[lindex $result 0]</A>"
puts "<TD><B>Product:</B> [lindex $result 1]"
puts "<TD><B>Version:</B> [lindex $result 2]"
puts "<TD><B>Platform:</B> [lindex $result 3]"
puts "<TR><TD><B>OS/Version:</B> [lindex $result 4]"
puts "<TD><B>Status:</B> [lindex $result 5]"
puts "<TD><B>Severity:</B> [lindex $result 6]"
puts "<TD><B>Priority:</B> [lindex $result 7]"
puts "<TR><TD><B>Resolution:</B> [lindex $result 8]</TD>"
puts "<TD><B>Assigned To:</B> [lindex $result 9]"
puts "<TD><B>Reported By:</B> [lindex $result 10]"
puts "<TR><TD><B>Component:</B> [lindex $result 11]"
puts "<TD><B>Target Fix Version:</B> [lindex $result 12]"
puts "<TR><TD COLSPAN=6><B>URL:</B> [html_quote [lindex $result 13]]"
puts "<TR><TD COLSPAN=6><B>Summary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</B> [html_quote [lindex $result 14]]"
puts "<TR><TD><B>Description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</B>\n</TABLE>"
puts "<PRE>[html_quote [GetLongDescription $bug]]</PRE>"
puts "<HR>"
}
}
puts "<h6>Mozilla Communications Corporation, Company Confidential, read and eat.</h6>"
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
mysql > /dev/null 2>/dev/null << OK_ALL_DONE
use bugs;
drop table bugs_activity
OK_ALL_DONE
mysql << OK_ALL_DONE
use bugs;
create table bugs_activity (
bug_id mediumint not null,
who mediumint not null,
when datetime not null,
field varchar(64) not null,
oldvalue tinytext,
newvalue tinytext,
index (bug_id),
index (when)
);
show columns from bugs_activity;
show index from bugs_activity;
OK_ALL_DONE
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
mysql > /dev/null 2>/dev/null << OK_ALL_DONE
use bugs;
drop table bugs;
OK_ALL_DONE
mysql << OK_ALL_DONE
use bugs;
create table bugs (
bug_id mediumint not null auto_increment primary key,
assigned_to mediumint not null, # This is a comment.
bug_file_loc text,
bug_severity enum("critical", "major", "normal", "minor", "trivial", "enhancement") not null,
bug_status enum("NEW", "ASSIGNED", "REOPENED", "RESOLVED", "VERIFIED", "CLOSED") not null,
creation_ts datetime,
delta_ts timestamp,
short_desc mediumtext,
long_desc mediumtext,
op_sys tinytext,
priority enum("P1", "P2", "P3", "P4", "P5") not null,
product varchar(16) not null,
rep_platform enum("All", "DEC", "HP", "Macintosh", "PC", "SGI", "Sun", "X-Windows", "Other"),
reporter mediumint not null,
version varchar(16) not null,
area enum("BUILD", "CODE", "CONTENT", "DOC", "PERFORMANCE", "TEST", "UI", "i18n", "l10n") not null,
component varchar(50) not null,
resolution enum("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND", "DUPLICATE", "WORKSFORME") not null,
index (assigned_to),
index (delta_ts),
index (bug_severity),
index (bug_status),
index (priority),
index (product),
index (reporter),
index (version),
index (area),
index (component),
index (resolution)
);
show columns from bugs;
show index from bugs;
OK_ALL_DONE
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
mysql > /dev/null 2>/dev/null << OK_ALL_DONE
use bugs;
drop table cc
OK_ALL_DONE
mysql << OK_ALL_DONE
use bugs;
create table cc (
bug_id mediumint not null,
who mediumint not null
);
show columns from cc;
show index from cc;
OK_ALL_DONE
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
mysql > /dev/null 2>/dev/null << OK_ALL_DONE
use bugs;
drop table components
OK_ALL_DONE
mysql << OK_ALL_DONE
use bugs;
create table components (
value tinytext,
program tinytext,
initialowner tinytext # Should arguably be a mediumint!
);
insert into components (value, program, initialowner) values ("Macintosh FE", "Communicator", "sdagley@netscape.com");
insert into components (value, program, initialowner) values ("Windows FE", "Communicator", "blythe@netscape.com");
insert into components (value, program, initialowner) values ("XFE", "Communicator", "ramiro@netscape.com");
insert into components (value, program, initialowner) values ("StubFE", "Communicator", "toshok@netscape.com");
insert into components (value, program, initialowner) values ("Aurora/RDF FE", "Communicator", "don@netscape.com");
insert into components (value, program, initialowner) values ("Aurora/RDF BE", "Communicator", "guha@netscape.com");
insert into components (value, program, initialowner) values ("Berkeley DB", "Communicator", "montulli@netscape.com");
insert into components (value, program, initialowner) values ("Browser Hooks", "Communicator", "ebina@netscape.com");
insert into components (value, program, initialowner) values ("Build Config", "Communicator", "briano@netscape.com");
insert into components (value, program, initialowner) values ("Composer", "Communicator", "brade@netscape.com");
insert into components (value, program, initialowner) values ("Compositor Library", "Communicator", "vidur@netscape.com");
insert into components (value, program, initialowner) values ("Dialup", "Communicator", "selmer@netscape.com");
insert into components (value, program, initialowner) values ("FontLib", "Communicator", "dp@netscape.com");
insert into components (value, program, initialowner) values ("HTML Dialogs", "Communicator", "nisheeth@netscape.com");
insert into components (value, program, initialowner) values ("HTML to Text/PostScript Translation", "Communicator", "brendan@netscape.com");
insert into components (value, program, initialowner) values ("ImageLib", "Communicator", "pnunn@netscape.com");
insert into components (value, program, initialowner) values ("JPEG Image Handling", "Communicator", "tgl@sss.pgh.pa.us");
insert into components (value, program, initialowner) values ("PNG Image Handling", "Communicator", "png@wco.com");
insert into components (value, program, initialowner) values ("Image Conversion Library", "Communicator", "mjudge@netscape.com");
insert into components (value, program, initialowner) values ("I18N Library", "Communicator", "bobj@netscape.com");
insert into components (value, program, initialowner) values ("Java Stubs", "Communicator", "warren@netscape.com");
insert into components (value, program, initialowner) values ("JavaScript", "Communicator", "mccabe@netscape.com");
insert into components (value, program, initialowner) values ("JavaScript Debugger", "Communicator", "jband@netscape.com");
insert into components (value, program, initialowner) values ("JavaScript/Java Reflection", "Communicator", "fur@netscape.com");
insert into components (value, program, initialowner) values ("Layout", "Communicator", "djw@netscape.com");
insert into components (value, program, initialowner) values ("LibMocha", "Communicator", "chouck@netscape.com");
insert into components (value, program, initialowner) values ("MIMELib", "Communicator", "terry@netscape.com");
insert into components (value, program, initialowner) values ("NetLib", "Communicator", "gagan@netscape.com");
insert into components (value, program, initialowner) values ("NSPR", "Communicator", "wtc@netscape.com");
insert into components (value, program, initialowner) values ("Password Cache", "Communicator", "montulli@netscape.com");
insert into components (value, program, initialowner) values ("PICS", "Communicator", "montulli@netscape.com");
insert into components (value, program, initialowner) values ("Plugins", "Communicator", "byrd@netscape.com");
insert into components (value, program, initialowner) values ("Preferences", "Communicator", "aoki@netscape.com");
insert into components (value, program, initialowner) values ("Progress Window", "Communicator", "atotic@netscape.com");
insert into components (value, program, initialowner) values ("Registry", "Communicator", "dveditz@netscape.com");
insert into components (value, program, initialowner) values ("Scheduler", "Communicator", "aoki@netscape.com");
insert into components (value, program, initialowner) values ("Security Stubs", "Communicator", "jsw@netscape.com");
insert into components (value, program, initialowner) values ("SmartUpdate", "Communicator", "dveditz@netscape.com");
insert into components (value, program, initialowner) values ("XML", "Communicator", "guha@netscape.com");
insert into components (value, program, initialowner) values ("XP-COM", "Communicator", "scullin@netscape.com");
insert into components (value, program, initialowner) values ("XP File Handling", "Communicator", "atotic@netscape.com");
insert into components (value, program, initialowner) values ("XP Miscellany", "Communicator", "brendan@netscape.com");
insert into components (value, program, initialowner) values ("XP Utilities", "Communicator", "toshok@netscape.com");
insert into components (value, program, initialowner) values ("Zlib", "Communicator", "pnunn@netscape.com");
insert into components (value, program, initialowner) values ("Platform: Lesstif on Linux", "Communicator", "ramiro@netscape.com");
insert into components (value, program, initialowner) values ("Platform: OS/2", "Communicator", "law@netscape.com");
insert into components (value, program, initialowner) values ("Platform: MacOS/PPC", "Communicator", "sdagley@netscape.com");
insert into components (value, program, initialowner) values ("Platform: Rhapsody", "Communicator", "mcafee@netscape.com");
insert into components (value, program, initialowner) values ("Platform: MFC/Win32 on Windows", "Communicator", "blythe@netscape.com");
insert into components (value, program, initialowner) values ("UI", "Bugzilla", "terry@netscape.com");
insert into components (value, program, initialowner) values ("Database", "Bugzilla", "terry@netscape.com");
select * from components;
show columns from components;
show index from components;
OK_ALL_DONE
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
mysql > /dev/null 2>/dev/null << OK_ALL_DONE
use bugs;
drop table profiles
OK_ALL_DONE
mysql << OK_ALL_DONE
use bugs;
create table profiles (
userid mediumint not null auto_increment primary key,
login_name varchar(255) not null,
password varchar(16),
realname varchar(255),
index(login_name)
);
show columns from profiles;
show index from profiles;
OK_ALL_DONE
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
mysql > /dev/null 2>/dev/null << OK_ALL_DONE
use bugs;
drop table versions
OK_ALL_DONE
mysql << OK_ALL_DONE
use bugs;
create table versions (
value tinytext,
program tinytext
);
insert into versions (value, program) values ("other", "Communicator");
insert into versions (value, program) values ("1998-03-31", "Communicator");
insert into versions (value, program) values ("1998-04-08", "Communicator");
insert into versions (value, program) values ("1998-04-29", "Communicator");
insert into versions (value, program) values ("1998-06-03", "Communicator");
insert into versions (value, program) values ("1998-07-28", "Communicator");
insert into versions (value, program) values ("1.0", "Bugzilla");
insert into versions (value, program) values ("other", "Bugzilla");
select * from versions;
show columns from versions;
show index from versions;
OK_ALL_DONE
#!/usr/bonsaitools/bin/perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; }
else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
open(COMMENTS, ">>comments");
$c=$FORM{"comment"};
print COMMENTS $FORM{"comment"} . "\n";
close(COMMENTS);
print "Content-type: text/html\n\n";
print "<TITLE>The Word Of Confirmation</TITLE>";
print "<H1>Done</H1>";
print $c;
<HTML>
<!--
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing 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.
Contributor(s): Terry Weissman <terry@mozilla.org>
-->
<TITLE>I'm So Pretty and Witty And Wise</TITLE>
<H2>Add your own clever headline.</h2>
The buglist picks a random quip for the headline, and
you can extend the quip list. Type in something clever or
funny or boring and bonk on the button.
<HR>
<FORM METHOD=POST ACTION="new_comment.cgi">
<INPUT SIZE=80 NAME="comment"><BR>
<INPUT TYPE="submit" VALUE="Add This Quip"></FORM>
</HR>
For the impatient, you can
<A HREF="comments">view the whole quip list</A>.
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
confirm_login
puts "Set-Cookie: PLATFORM=$FORM(product) ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT"
puts "Set-Cookie: VERSION-$FORM(product)=$FORM(version) ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT"
puts "Content-type: text/html\n"
if {[info exists FORM(maketemplate)]} {
puts "<TITLE>Bookmarks are your friend.</TITLE>"
puts "<H1>Template constructed.</H1>"
set url "enter_bug.cgi?$buffer"
puts "If you put a bookmark <a href=\"$url\">to this link</a>, it will"
puts "bring up the submit-a-new-bug page with the fields initialized"
puts "as you've requested."
exit
}
PutHeader "Posting Bug -- Please wait" "Posting Bug" "One moment please..."
flush stdout
umask 0
ConnectToDatabase
if {![info exists FORM(component)] || [cequal $FORM(component) ""]} {
puts "You must choose a component that corresponds to this bug. If"
puts "necessary, just guess. But please hit the <B>Back</B> button and"
puts "choose a component."
exit 0
}
set forceAssignedOK 0
if {[cequal "" $FORM(assigned_to)]} {
SendSQL "select initialowner from components
where program='[SqlQuote $FORM(product)]'
and value='[SqlQuote $FORM(component)]'"
set FORM(assigned_to) [lindex [FetchSQLData] 0]
set forceAssignedOK 1
}
set FORM(assigned_to) [DBNameToIdAndCheck $FORM(assigned_to) $forceAssignedOK]
set FORM(reporter) [DBNameToIdAndCheck $FORM(reporter)]
set bug_fields { reporter product version rep_platform bug_severity \
priority op_sys assigned_to bug_status bug_file_loc \
short_desc component }
set query "insert into bugs (\n"
foreach field $bug_fields {
append query "$field,\n"
}
append query "creation_ts, long_desc )\nvalues (\n"
foreach field $bug_fields {
if {$field == "qa_assigned_to"} {
set valin [DBname_to_id $FORM($field)]
if {$valin == "__UNKNOWN__"} {
append query "null,\n"
} else {
append query "$valin,\n"
}
} else {
regsub -all "'" [FormData $field] "''" value
append query "'$value',\n"
}
}
append query "now(), "
append query "'[SqlQuote [FormData comment]]' )\n"
set ccids(zz) 1
unset ccids(zz)
if {[info exists FORM(cc)]} {
foreach person [split $FORM(cc) " ,"] {
if {![cequal $person ""]} {
set ccids([DBNameToIdAndCheck $person]) 1
}
}
}
# puts "<PRE>$query</PRE>"
SendSQL $query
while {[MoreSQLData]} { set ret [FetchSQLData] }
SendSQL "select LAST_INSERT_ID()"
set id [FetchSQLData]
foreach person [array names ccids] {
SendSQL "insert into cc (bug_id, who) values ($id, $person)"
while { [ MoreSQLData ] } { FetchSQLData }
}
# Now make sure changes are written before we run processmail...
Disconnect
puts "<H2>Changes Submitted</H2>"
puts "<A HREF=\"show_bug.cgi?id=$id\">Show BUG# $id</A>"
puts "<BR><A HREF=\"query.cgi\">Back To Query Page</A>"
flush stdout
exec ./processmail $id < /dev/null > /dev/null 2> /dev/null &
exit
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
confirm_login
puts "Content-type: text/html\n"
GetVersionTable
if {![cequal $FORM(product) $dontchange]} {
set prod [FormData product]
set vok [expr [lsearch -exact $versions($prod) \
[FormData version]] >= 0]
set cok [expr [lsearch -exact $components($prod) \
[FormData component]] >= 0]
if {!$vok || !$cok} {
puts "<H1>Changing product means changing version and component.</H1>"
puts "You have chosen a new product, and now the version and/or"
puts "component fields are not correct. Please set them now.<p>"
puts "<form>"
puts "<table>"
puts "<tr>"
puts "<td align=right><b>Product:</b></td>"
puts "<td>$prod</td>"
puts "</tr><tr>"
puts "<td align=right><b>Version:</b></td>"
puts "<td>[Version_element [FormData version] $prod]</td>"
puts "</tr><tr>"
puts "<td align=right><b>Component:</b></td>"
puts "<td>[Component_element [FormData component] $prod]</td>"
puts "</tr>"
puts "</table>"
foreach i [array names FORM] {
if {[lsearch -exact {version component} $i] < 0} {
puts "<input type=hidden name=$i value=\"[value_quote $FORM($i)]\">"
}
}
puts "<input type=submit value=Commit>"
puts "</form>"
puts "</hr>"
puts "<a href=query.cgi>Cancel all this and go back to the query page.</a>"
exit
}
}
if {[info exists FORM(id)]} {
set idlist $FORM(id)
} else {
set idlist {}
foreach i [array names FORM] {
if {[string match "id_*" $i]} {
lappend idlist [crange $i 3 end]
}
}
}
if {![info exists FORM(who)]} {
set FORM(who) $COOKIE(Bugzilla_login)
}
puts "<TITLE>Update Bug $idlist</TITLE>"
if {[info exists FORM(id)]} {
navigation_header
}
puts "<HR>"
set query "update bugs\nset"
set comma ""
umask 0
proc DoComma {} {
global query comma
append query "$comma\n "
set comma ","
}
proc ChangeStatus {str} {
global dontchange query
if {![cequal $str $dontchange]} {
DoComma
append query "bug_status = '$str'"
}
}
proc ChangeResolution {str} {
global dontchange query
if {![cequal $str $dontchange]} {
DoComma
append query "resolution = '$str'"
}
}
foreach field {rep_platform priority bug_severity url summary \
component bug_file_loc short_desc \
status_summary product version component} {
if {[info exists FORM($field)]} {
if {![cequal $FORM($field) $dontchange]} {
DoComma
regsub -all "'" [FormData $field] "''" value
append query "$field = '$value'"
}
}
}
ConnectToDatabase
switch -exact $FORM(knob) {
none {}
accept {
ChangeStatus ASSIGNED
}
clearresolution {
ChangeResolution {}
}
resolve {
ChangeStatus RESOLVED
ChangeResolution $FORM(resolution)
}
reassign {
ChangeStatus NEW
DoComma
set newid [DBNameToIdAndCheck $FORM(assigned_to)]
append query "assigned_to = $newid"
}
reassignbycomponent {
if {[cequal $FORM(component) $dontchange]} {
puts "You must specify a component whose owner should get assigned"
puts "these bugs."
exit 0
}
ChangeStatus NEW
DoComma
SendSQL "select initialowner from components
where program='[SqlQuote $FORM(product)]'
and value='[SqlQuote $FORM(component)]'"
set newname [lindex [FetchSQLData] 0]
set newid [DBNameToIdAndCheck $newname 1]
append query "assigned_to = $newid"
}
reopen {
ChangeStatus REOPENED
}
verify {
ChangeStatus VERIFIED
}
close {
ChangeStatus CLOSED
}
duplicate {
ChangeStatus RESOLVED
ChangeResolution DUPLICATE
set num $FORM(dup_id)
if {[catch {incr num}]} {
puts "You must specify a bug number of which this bug is a"
puts "duplicate. The bug has not been changed."
exit
}
if {$FORM(dup_id) == $FORM(id)} {
puts "Nice try. But it doesn't really make sense to mark a bug as"
puts "a duplicate of itself, does it?"
exit
}
AppendComment $FORM(dup_id) $FORM(who) "*** Bug $FORM(id) has been marked as a duplicate of this bug. ***"
append FORM(comment) "\n\n*** This bug has been marked as a duplicate of $FORM(dup_id) ***"
exec ./processmail $FORM(dup_id) < /dev/null > /dev/null 2> /dev/null &
}
default {
puts "Unknown action $FORM(knob)!"
exit
}
}
if {[lempty $idlist]} {
puts "You apparently didn't choose any bugs to modify."
puts "<p>Click <b>Back</b> and try again."
exit
}
if {[cequal $comma ""]} {
set comment {}
if {[info exists FORM(comment)]} {
set comment $FORM(comment)
}
if {[cequal $comment ""]} {
puts "Um, you apparently did not change anything on the selected bugs."
puts "<p>Click <b>Back</b> and try again."
exit
}
}
set basequery $query
proc SnapShotBug {id} {
global log_columns
SendSQL "select [join $log_columns ","] from bugs where bug_id = $id"
return [FetchSQLData]
}
foreach id $idlist {
SendSQL "lock tables bugs write, bugs_activity write, cc write, profiles write"
set oldvalues [SnapShotBug $id]
set query "$basequery\nwhere bug_id = $id"
# puts "<PRE>$query</PRE>"
if {![cequal $comma ""]} {
if { [SendSQL $query] != 0 } {
puts "<H1>Error -- Changes not applied</H1>"
puts "OK, the database rejected the changes for some reason"
puts "which bugzilla can't deal with. The error string returned"
puts "was:<PRE>$oramsg(errortxt)</PRE>"
puts "Here is the query which caused the error:"
puts "<PRE>$query</PRE>"
}
while {[MoreSQLData]} {
FetchSQLData
}
}
if {[info exists FORM(comment)]} {
AppendComment $id $FORM(who) [FormData comment]
}
if {[info exists FORM(cc)] && [ShowCcList $id] != [lookup FORM cc]} {
set ccids(zz) 1
unset ccids(zz)
foreach person [split $FORM(cc) " ,"] {
if {![cequal $person ""]} {
set id [DBNameToIdAndCheck $person]
set ccids($id) 1
}
}
SendSQL "delete from cc where bug_id = $id"
while {[MoreSQLData]} { FetchSQLData }
foreach ccid [array names ccids] {
SendSQL "insert into cc (bug_id, who) values ($id, $ccid)"
while { [ MoreSQLData ] } { FetchSQLData }
}
}
# oracommit $lhandle
set newvalues [SnapShotBug $id]
foreach col $log_columns {
set old [lvarpop oldvalues]
set new [lvarpop newvalues]
if {![cequal $old $new]} {
if {![info exists whoid]} {
set whoid [DBNameToIdAndCheck $FORM(who)]
SendSQL "select delta_ts from bugs where bug_id = $id"
set timestamp [lindex [FetchSQLData] 0]
}
if {[cequal $col assigned_to]} {
set old [DBID_to_name $old]
set new [DBID_to_name $new]
}
set q "insert into bugs_activity (bug_id,who,when,field,oldvalue,newvalue) values ($id,$whoid,$timestamp,'[SqlQuote $col]','[SqlQuote $old]','[SqlQuote $new]')"
# puts "<pre>$q</pre>"
SendSQL $q
}
}
puts "<TABLE BORDER=1><TD><H1>Changes Submitted</H1>"
puts "<TD><A HREF=\"show_bug.cgi?id=$id\">Back To BUG# $id</A></TABLE>"
flush stdout
SendSQL "unlock tables"
exec ./processmail $id < /dev/null > /dev/null 2> /dev/null &
}
if {[info exists next_bug]} {
set FORM(id) $next_bug
puts "<HR>"
navigation_header
source "bug_form.tcl"
} else {
puts "<BR><A HREF=\"query.cgi\">Back To Query Page</A>"
}
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
# To recreate the shadow database, nuke all the entires and then run
# processmail regenerate <last>, where <last> is the biggest bug number
# currently used.
source "globals.tcl"
umask 0
proc Different {file1 file2} {
if {[file size $file1] != [file size $file2]} {
return 1
}
set f1 [open $file1 "r"]
set f2 [open $file2 "r"]
set d1 [read $f1]
set d2 [read $f2]
close $f1
close $f2
return [expr ![cequal $d1 $d2]]
}
proc DescCC {cclist} {
if {[lempty $cclist]} return ""
return "Cc: [join $cclist ", "]\n"
}
proc DescFixVersion {v} {
if {[cequal $v ""]} return ""
return "Fix-Version: $v\n"
}
proc GetBugText {id} {
global bug
catch {unset bug}
set query "
select
bug_id,
product,
version,
rep_platform,
op_sys,
bug_status,
resolution,
priority,
bug_severity,
area,
assigned_to,
reporter,
bug_file_loc,
target_fix_version,
short_desc,
component
from bugs
where bug_id = $id";
SendSQL $query
set ret [FetchSQLData]
if {$ret == ""} {
return ""
}
set count 0
foreach field { bug_id product version rep_platform op_sys bug_status
resolution priority bug_severity area assigned_to
reporter bug_file_loc target_fix_version short_desc
component } {
set bug($field) [lindex $ret $count]
incr count
}
set bug(assigned_to) [DBID_to_name $bug(assigned_to)]
set bug(reporter) [DBID_to_name $bug(reporter)]
set bug(long_desc) [GetLongDescription $id]
set bug(cclist) [split [ShowCcList $id] ","]
return "Bug\#: $id
Product: $bug(product)
Version: $bug(version)
Platform: $bug(rep_platform)
OS/Version: $bug(op_sys)
Status: $bug(bug_status)
Resolution: $bug(resolution)
Severity: $bug(bug_severity)
Priority: $bug(priority)
Component: $bug(component)
Area: $bug(area)
AssignedTo: $bug(assigned_to)
ReportedBy: $bug(reporter)
URL: $bug(bug_file_loc)
[DescCC $bug(cclist)][DescFixVersion $bug(target_fix_version)]Summary: $bug(short_desc)
$bug(long_desc)"
}
proc fixaddresses {list} {
global nomail
set result {}
foreach i [lrmdups $list] {
if {![info exists nomail($i)]} {
lappend result $i
}
}
return [join $result ", "]
}
proc Log {str} {
set lockfid [open "maillock" "w"]
flock -write $lockfid
set fid [open "maillog" "a"]
puts $fid "[fmtclock [getclock] "%D %H:%M"] $str"
close $fid
close $lockfid
}
set COOKIE(Bugzilla_login) terry
set COOKIE(Bugzilla_password) terry
ConnectToDatabase
set template "From: bugzilla-daemon
To: terry@netscape.com
X-Real-To: %s
X-Real-Cc: %s
Subject: \[Bug %s\] %s - %s
http://bugzilla.mozilla.org/bugzilla/show_bug.cgi?id=%s
%s"
set lockfid [open "maillock" "r"]
flock -read $lockfid
# foreach i [split [read_file -nonewline "okmail"] "\n"] {
# set okmail($i) 1
# }
foreach i [split [read_file -nonewline "nomail"] "\n"] {
if {[info exists okmail($i)]} {
unset okmail($i)
}
set nomail($i) 1
}
close $lockfid
set regenerate 0
if {[cequal [lindex $argv 0] "regenerate"]} {
set regenerate 1
set last [lindex $argv 1]
set argv ""
loop i 1 [expr $last + 1] {
lappend argv $i
}
}
foreach i $argv {
if {[lempty $i]} continue
set old shadow/$i
set new shadow/$i.tmp.[id process]
set diffs shadow/$i.diffs.[id process]
set verb "Changed"
if {![file exists $old]} {
close [open $old "w"]
set verb "New"
}
set text [GetBugText $i]
if {$text == ""} {
if {$regenerate} {
continue
}
error "Couldn't find bug $i."
}
set fid [open $new "w"]
puts $fid $text
close $fid
if {[Different $old $new]} {
catch {exec diff -c $old $new > $diffs}
set tolist [fixaddresses [list $bug(assigned_to) $bug(reporter)]]
set cclist [fixaddresses $bug(cclist)]
set logstr "Bug $i changed"
if {![lempty $tolist] || ![lempty $cclist]} {
set msg [format $template $tolist $cclist $i $verb \
$bug(short_desc) $i [read_file $diffs]]
if {!$regenerate || ![cequal $verb "New"]} {
exec /usr/lib/sendmail -t << $msg
set logstr "$logstr; mail sent to $tolist $cclist"
}
}
unlink $diffs
Log $logstr
}
frename $new $old
catch {chmod 0666 $old}
if {$regenerate} {
puts -nonewline "$i "
}
}
exit
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
if {[catch {
if {[info exists FORM(GoAheadAndLogIn)]} {
# We got here from a login page, probably from relogin.cgi. We better
# make sure the password is legit.
confirm_login
}
if {![info exists COOKIE(DEFAULTQUERY)]} {
set COOKIE(DEFAULTQUERY) "bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Communicator&order=%22Importance%22"
}
if {![info exists buffer] || $buffer == ""} {
set buffer $COOKIE(DEFAULTQUERY)
}
foreach name {bug_status resolution assigned_to rep_platform priority \
bug_severity product reporter op_sys component \
version} {
set default($name) ""
set type($name) 0
}
foreach item [split $buffer "&"] {
set el [ split $item = ]
set value [url_decode [lindex $el 1]]
set name [lindex $el 0]
if {[info exists default($name)]} {
if {$default($name) != ""} {
append default($name) "|$value"
set type($name) 1
} else {
set default($name) $value
}
}
}
foreach i [lsort [array names COOKIE]] {
switch -glob $i {
QUERY_* {
if {$COOKIE($i) != ""} {
set name [crange $i 6 end]
append namelist "<OPTION>$name"
}
}
}
}
puts "Set-Cookie: BUGLIST=
Content-type: text/html\n"
GetVersionTable
set who [GeneratePeopleInput assigned_to $default(assigned_to)]
set reporter [GeneratePeopleInput reporter $default(reporter)]
set qa_assigned_to_who [GeneratePeopleInput qa_assigned_to ""]
# Muck the "legal product" list so that the default one is always first (and
# is therefore visibly selected.
# Commented out, until we actually have enough products for this to matter.
# set w [lsearch $legal_product $default(product)]
# if {$w >= 0} {
# set legal_product [concat $default(product) [lreplace $legal_product $w $w]]
# }
PutHeader "Bugzilla Query Page" "Query Page"
puts "
<FORM NAME=queryForm METHOD=GET ACTION=\"buglist.cgi\">
<table>
<tr>
<th align=left><A HREF=\"bug_status.html\">Status</a>:</th>
<th align=left><A HREF=\"bug_status.html\">Resolution</a>:</th>
<th align=left><A HREF=\"bug_status.html#rep_platform\">Platform</a>:</th>
<th align=left><A HREF=\"bug_status.html#priority\">Priority</a>:</th>
<th align=left><A HREF=\"bug_status.html#severity\">Severity</a>:</th>
</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>
</td>
<td align=left valign=top>
<SELECT NAME=\"resolution\" MULTIPLE SIZE=7>
[make_options $legal_resolution $default(resolution) $type(resolution)]
</SELECT>
</td>
<td align=left valign=top>
<SELECT NAME=\"rep_platform\" MULTIPLE SIZE=7>
[make_options $legal_platform $default(rep_platform) $type(rep_platform)]
</SELECT>
</td>
<td align=left valign=top>
<SELECT NAME=\"priority\" MULTIPLE SIZE=7>
[make_options $legal_priority $default(priority) $type(priority) ]
</SELECT>
</td>
<td align=left valign=top>
<SELECT NAME=\"bug_severity\" MULTIPLE SIZE=7>
[make_options $legal_severity $default(bug_severity) $type(bug_severity)]
</SELECT>
</tr>
</table>
<p>
<TABLE>
<TR><TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#assigned_to\">Assigned To:</a></B><TD>$who
<p>
<TR><TD ALIGN=RIGHT><B>Reporter:</B><TD>$reporter
</TABLE>
<NOBR>Changed in the last <INPUT NAME=changedin SIZE=2> days.</NOBR>
<P>
<table>
<tr>
<TH ALIGN=LEFT>Program:</th>
<TH ALIGN=LEFT>Version:</th>
<TH ALIGN=LEFT>Component:</th>
</tr>
<tr>
<td align=left valign=top>
<SELECT NAME=\"product\" MULTIPLE SIZE=5>
[make_options $legal_product $default(product) $type(product)]
</SELECT>
</td>
<td align=left valign=top>
<SELECT NAME=\"version\" MULTIPLE SIZE=5>
[make_options $legal_versions $default(version) $type(version)]
</SELECT>
</td>
<td align=left valign=top>
<SELECT NAME=\"component\" MULTIPLE SIZE=5>
[make_options $legal_components $default(component) $type(component)]
</SELECT>
</td>
</tr>
</table>
<table border=0><tr><td align=right>
<b><A HREF=\"bug_status.html#resolved_ts\">Date Resolved</a>:</b> </td>
<td align=left><INPUT NAME=resolved_ts SIZE=9> (to <INPUT NAME=resolved_ts_2 SIZE=9>, optional)</td>
</tr>
<tr>
<td align=right><b><A HREF=\"bug_status.html#resolved_ts\">Date Verified</a>:</b> </td>
<td align=left><INPUT NAME=verified_ts SIZE=9> (to <INPUT NAME=verified_ts_2 SIZE=9>, optional)
<font size=-1>&nbsp;&nbsp;date format: 24-FEB-98</font>
</td>
</tr>
</table>
<p>
<BR>
<INPUT TYPE=radio NAME=cmdtype VALUE=doit CHECKED> Run this query
<BR>"
if {[info exists namelist]} {
puts "
<table cellspacing=0 cellpadding=0><tr>
<td><INPUT TYPE=radio NAME=cmdtype VALUE=editnamed> Load the remembered query:</td>
<td rowspan=3><select name=namedcmd>$namelist</select>
</tr><tr>
<td><INPUT TYPE=radio NAME=cmdtype VALUE=runnamed> Run the remembered query:</td>
</tr><tr>
<td><INPUT TYPE=radio NAME=cmdtype VALUE=forgetnamed> Forget the remembered query:</td>
</tr></table>"
}
puts "
<INPUT TYPE=radio NAME=cmdtype VALUE=asdefault> Remember this as the default query
<BR>
<INPUT TYPE=radio NAME=cmdtype VALUE=asnamed> Remember this query, and name it:
<INPUT TYPE=text NAME=newqueryname>
<BR>
<NOBR><B>Sort By:</B>
<SELECT NAME=\"order\">
<OPTION>Bug Number
<OPTION SELECTED>\"Importance\"
<OPTION>Assignee
</SELECT></NOBR>
<INPUT TYPE=\"submit\" VALUE=\"Submit\">
<INPUT TYPE=\"reset\" VALUE=\"Reset back to the default query\">
<INPUT TYPE=hidden name=form_name VALUE=query>
<BR>Give me a <A HREF=\"help.html\">clue</A> about how to use this form.
</CENTER>
</FORM>
"
if {[info exists COOKIE(Bugzilla_login)]} {
puts "
<a href=relogin.cgi>Log in as someone besides <b>$COOKIE(Bugzilla_login)</b></a><br>
<a href=changepassword.cgi>Change my password.</a><br>"
}
puts "<a href=\"enter_bug.cgi\">Create a new bug.</a><br>"
}]} {
puts "\n\nQuery Page Error\n$errorInfo"
# exec /usr/lib/sendmail -t << "To: terry\n\n$errorInfo\n"
}
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source CGI.tcl
puts "Set-Cookie: Bugzilla_login= ; path=/; expires=Sun, 30-Jun-80 00:00:00 GMT
Set-Cookie: Bugzilla_password= ; path=/; expires=Sun, 30-Jun-80 00:00:00 GMT
Content-type: text/html
<H1>Your login has been forgotten.</H1>
The cookie that was remembering your login is now gone. The next time you
do an action that requires a login, you will be prompted for it.
<p>
<a href=query.cgi>Back to the query page.</a>
"
exit
# The below was a different way, that prompted you for a login right then.
catch {unset COOKIE(Bugzilla_login)}
catch {unset COOKIE(Bugzilla_password)}
confirm_login
puts "Content-type: text/html\n"
puts "<H1>OK, logged in.</H1>"
puts "You are now logged in as <b>$COOKIE(Bugzilla_login)</b>."
puts "<p>"
puts "<a href=query.cgi>Back to the query page.</a>"
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
puts "Content-type: text/html\n"
puts "<HTML>
<H1>Changes made to bug $FORM(id)</H1>
"
set query "
select bugs_activity.field, bugs_activity.when,
bugs_activity.oldvalue, bugs_activity.newvalue,
profiles.login_name
from bugs_activity,profiles
where bugs_activity.bug_id = $FORM(id)
and profiles.userid = bugs_activity.who
order by bugs_activity.when"
ConnectToDatabase
SendSQL $query
puts "<table border cellpadding=4>"
puts "<tr>"
puts " <th>Who</th><th>What</th><th>Old value</th><th>New value</th><th>When</th>"
puts "</tr>"
while { [MoreSQLData] } {
set value [FetchSQLData]
lassign $value field when old new who
puts "<tr>"
puts "<td>$who</td>"
puts "<td>$field</td>"
puts "<td>[value_quote $old]</td>"
puts "<td>[value_quote $new]</td>"
puts "<td>$when</td>"
puts "</tr>"
}
puts "</table>"
puts "<hr><a href=show_bug.cgi?id=$FORM(id)>Back to bug $FORM(id)</a>"
#! /usr/bonsaitools/bin/mysqltcl
# -*- Mode: tcl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing 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.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
source "CGI.tcl"
puts "Content-type: text/html"
puts ""
if {[lookup FORM id] == ""} {
puts "<H2>Search By Bug Number</H2>"
puts "<FORM METHOD=GET ACTION=\"show_bug.cgi\">"
puts "You may find a single bug by entering its bug id here: "
puts "<INPUT NAME=id>"
puts "<INPUT TYPE=\"submit\" VALUE=\"Show Me This Bug\">"
puts "</FORM>"
exit 0
}
ConnectToDatabase
GetVersionTable
PutHeader "Bugzilla bug $FORM(id)" "Bugzilla Bug" $FORM(id)
navigation_header
puts "<HR>"
source "bug_form.tcl"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment