Bug 135707 - rearrange templates to normalise filenames, and create directory structure which allows for localised versions of the templates. Earlier versions of these templates can be found, cvs removed, scattered around bugzilla/template/default; but there are no substantial changes between their initial checkin there and here.

This commit is contained in:
gerv%gerv.net 2002-04-18 18:57:05 +00:00
Родитель 26fdb2d3b8
Коммит 1038a4adc7
58 изменённых файлов: 6856 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,39 @@
[%# 1.0@bugzilla.org %]
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): John Vandenberg <zeroj@null.net>
#%]
From: bugzilla-admin-daemon
To: [% emailaddress %]
Subject: [% tokentype %] token cancelled
A token was cancelled from [% remoteaddress %].
If you did not request this, it could be either an honest
mistake or the result of a malicious hack attempt.
Take a look at the information below and forward this email
to [% maintainer %] if you suspect foul play.
Token: [% token %]
Token Type: [% tokentype %]
User: [% emailaddress %]
Issue Date: [% issuedate %]
Event Data: [% eventdata %]
Cancelled Because: [% cancelaction %]

Просмотреть файл

@ -0,0 +1,58 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Create a new Bugzilla account"
%]
<p>
To create a Bugzilla account, all that you need to do is to enter a
legitimate e-mail address. The account will be created, and its
password will be mailed to you. Optionally you may enter your real name
as well.
</p>
<form method="get" action="createaccount.cgi">
<table>
<tr>
<td align="right">
<b>E-mail address:</b>
</td>
<td>
<input size="35" name="login">
[% Param('emailsuffix') FILTER html %]
</td>
</tr>
<tr>
<td align="right">
<b>Real name:</b>
</td>
<td>
<input size="35" name="realname">
</td>
</tr>
</table>
<br>
<input type="submit" value="Create Account">
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,38 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Account Created"
%]
<p>
A new account,
<tt>[% login FILTER html %]</tt>,
has been created and a randomly-generated password has been e-mailed
to that address.
</p>
<p>
When the e-mail arrives,
<a href="query.cgi?GoAheadAndLogIn=1">log in here</a>.
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,36 @@
[%# 1.0@bugzilla.org %]
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): John Vandenberg <zeroj@null.net>
#%]
From: bugzilla-admin-daemon
To: [% emailaddress %]
Subject: Bugzilla Change Email Address Request
Bugzilla has received a request to change the email address
for the [% oldemailaddress %] account to your address.
To confirm the change, visit the following link:
[% Param('urlbase') %]token.cgi?a=cfmem&t=[% token FILTER html %]
If you are not the person who made this request, or you wish to cancel
this request, visit the following link:
[% Param('urlbase') %]token.cgi?a=cxlem&t=[% token FILTER html %]

Просмотреть файл

@ -0,0 +1,35 @@
[%# 1.0@bugzilla.org %]
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): John Vandenberg <zeroj@null.net>
#%]
From: bugzilla-admin-daemon
To: [% emailaddress %]
Subject: Bugzilla Change Email Address Request
Importance: High
X-MSMail-Priority: High
X-Priority: 1
Bugzilla has received a request to change the email address
for your account to [% newemailaddress %].
If you are not the person who made this request, or you wish to cancel
this request, visit the following link:
[% Param('urlbase') %]token.cgi?a=cxlem&t=[% token FILTER html %]

Просмотреть файл

@ -0,0 +1,44 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): John Vandenberg <zeroj@null.net>
#%]
[% INCLUDE global/header %]
<p>
To change your email address, please enter the old email address:
</p>
<form method="post" action="token.cgi">
<input type="hidden" name="t" value=[% token FILTER html %]>
<input type="hidden" name="a" value="chgem">
<table>
<tr>
<th align="right">Old Email Address:</th>
<td><input type="input" name="email" size="36"></td>
</tr>
<tr>
<th align="right"> </th>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,34 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Account Exists"
%]
<form method="get" action="token.cgi">
<input type="hidden" name="a" value="reqpw" />
<input type="hidden" name="loginname" value="[% login FILTER html %]" />
A Bugzilla account for <tt>[% login FILTER html %]</tt> already exists. If you
are the account holder and have forgotten your password,
<input type="submit" value="submit a request to change it" />.
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,99 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# realname: string. The user's real name, if any.
# login: string. The user's Bugzilla login email address.
# login_change_date: string. The date the email change will be complete. (optional)
# new_login_name: string. The user's new Bugzilla login whilst not confirmed. (optional)
#%]
<table>
<tr>
<td colspan="3">
Please enter your existing password to confirm account changes.
</td>
</tr>
<tr>
<th align="right">Password:</th>
<td>
<input type="hidden" name="Bugzilla_login"
value="[% login FILTER html %]" />
<input type="password" name="Bugzilla_password" />
</td>
</tr>
<tr>
<td colspan="2"><hr></td>
</tr>
<tr>
<th align="right">New password:</th>
<td>
<input type="password" name="new_password1" />
</td>
</tr>
<tr>
<th align="right">Re-enter new password:</th>
<td>
<input type="password" name="new_password2" />
</td>
</tr>
<tr>
<th align="right">Your real name (optional, but encouraged):</th>
<td>
<input size="35" name="realname" value="[% realname FILTER html %]" />
</td>
</tr>
[% IF Param('allowemailchange') %]
[% IF login_change_date %]
[% IF new_login_name %]
<tr>
<th align="right">Pending email address:</th>
<td>[% new_login_name FILTER html %]</td>
</tr>
<tr>
<th align="right">Change request expires:</th>
<td>[% login_change_date %]</td>
</tr>
[% ELSE %]
<tr>
<th align="right">Confirmed email address:</th>
<td>[% login FILTER html %]
</tr>
<tr>
<th align="right">Completion date:</th>
<td>[% login_change_date %]</td>
</tr>
[% END %]
[% ELSE %]
<tr>
<th align="right">New email address:</th>
<td>
<input size="35" name="new_login_name">
</td>
</tr>
[% END %]
[% END %]
</table>

Просмотреть файл

@ -0,0 +1,157 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# watchedusers: string.
# Comma-separated list of email addresses this user watches.
# excludeself: boolean.
# True if user is not receiving self-generated mail.
# <rolename>: Multiple hashes, one for each rolename (e.g. owner; see
# below), keyed by reasonname (e.g. comments; again, see
# below). The value is a boolean - true if the user is
# receiving mail for that reason when in that role.
# Also references the 'supportwatchers' Param.
#%]
<table>
[% IF Param('supportwatchers') %]
<tr>
<td colspan="4">
<hr />
</td>
</tr>
<tr>
<td colspan="4">
If you want to help cover for someone when they're on vacation, or if
you need to do the QA related to all of their bugs, you can tell
Bugzilla to send mail related to their bugs to you also. List the
email addresses of any users you wish to watch here, separated by
commas.
</td>
</tr>
<tr>
<th align="right">Users to watch:</th>
<td>
<input size="35" name="watchedusers" value="[% watchedusers %]" />
</td>
</tr>
[% END %]
<tr>
<td colspan="2">
<p>
If you don't like getting a notification for "trivial"
changes to bugs, you can use the settings below to
filter some (or even all) notifications.
</p>
</td>
</tr>
</table>
<hr />
<table>
<tr>
<td colspan="2">
<b>Global options:</b>
</td>
</tr>
<tr>
<td width="150"></td>
<td>
Only email me reports of changes made by other people
<input type="checkbox" name="ExcludeSelf" value="on"
[% " checked" IF excludeself %]>
<br>
</td>
</tr>
</table>
<hr />
<b>Field/recipient specific options:</b>
<br>
<br>
<table width="100%" border="1">
<tr>
<td colspan="5" align="center" width="50%">
<b>When my relationship to this bug is:</b>
</td>
<td rowspan="2" width="50%">
<b>I want to receive mail when:</b>
</td>
</tr>
<tr>
<td align="center" width="10%">
<b>Reporter</b>
</td>
<td align="center" width="10%">
<b>Assignee</b>
</td>
<td align="center" width="10%">
<b>QA Contact</b>
</td>
<td align="center" width="10%">
<b>CC</b>
</td>
<td align="center" width="10%">
<b>Voter</b>
</td>
</tr>
[% FOREACH reason = [
{ name = 'Removeme',
description = 'I\'m added to or removed from this capacity' },
{ name = 'Comments',
description = 'New Comments are added' },
{ name = 'Attachments',
description = 'New Attachments are added' },
{ name = 'Status',
description = 'Priority, status, severity, and/or milestone changes' },
{ name = 'Resolved',
description = 'The bug is resolved or verified' },
{ name = 'Keywords',
description = 'Keywords field changes' },
{ name = 'CC',
description = 'CC field changes' },
{ name = 'Other',
description = 'Any field not mentioned above changes' } ] %]
<tr>
[% FOREACH role = [ "Owner", "Reporter", "QAcontact", "CClist", "Voter" ]
%]
<td align="center">
<input type="checkbox" name="email[% role %][% reason.name %]" value="on"
[% " checked" IF $role.${reason.name} %]>
</td>
[% END %]
<td>
[% reason.description %]
</td>
</tr>
[% END %]
</table>
<br>

Просмотреть файл

@ -0,0 +1,76 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# mybugslink: boolean. True if the user wishes the My Bugs link to appear.
# queries: array of hashes. May be empty. Each hash has two members:
# name: string. The name of the query.
# footer: boolean. True if the query appears in the footer.
#%]
<table>
<tr>
<th align="right">The 'My bugs' link:</th>
<td>
<select name="mybugslink">
<option value="1">should appear on the footer of every page</option>
<option value="0"
[% " selected" IF NOT mybugslink %]>should not be displayed
</option>
</select>
</td>
</tr>
<input type="hidden" name="numqueries" value="[% queries.size %]" />
[% IF queries.size %]
[% FOREACH query = queries %]
<tr>
<th align="right">Your query named '[% query.name FILTER html %]':</th>
<td>
<select name="query-[% loop.index %]">
<option value="0">should only appear in the query page</option>
<option value="1"
[% " selected" IF query.footer %]>
should appear on the footer of every page
</option>
</select>
</td>
</tr>
<input type="hidden" name="name-[% loop.index %]"
value="[% query.name FILTER html %]" />
[% END %]
[% ELSE %]
<tr>
<td colspan="4">
<br>
If you create remembered queries using the
<a href="query.cgi">query page</a>,
you can then come to this page and choose to have some of them
appear in the footer of each Bugzilla page.
<br>
<br>
</td>
</tr>
[% END %]
</table>

Просмотреть файл

@ -0,0 +1,57 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# has_bits: array of strings. May be empty.
# Descriptions of the permission bits the user has.
# set_bits: array of strings. May be empty.
# Descriptions of the permission bits the user can set for
# other people.
#%]
<table>
<tr>
<td>
[% IF has_bits.size %]
You have the following permission bits set on your account:
<ul>
[% FOREACH bit_description = has_bits %]
<li>[% bit_description %]</li>
[% END %]
</ul>
[% ELSE %]
There are no permission bits set on your account.
[% END %]
[% IF set_bits.size %]
And you can turn on or off the following bits for
<a HREF="editusers.cgi">other users</a>:
<p>
<ul>
[% FOREACH bit_description = set_bits %]
<li>[% bit_description %]</li>
[% END %]
</ul>
</p>
[% END %]
</td>
</tr>
</table>

Просмотреть файл

@ -0,0 +1,113 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# login: string. The user's Bugzilla login email address.
# tabs: List of hashes. May not be empty. Each hash has three members:
# name: string. Name of the tab (used internally.)
# description: string. Description of the tab (used in tab title.)
# saveable: boolean. True if tab has a form which can be submitted.
# True if user is not receiving self-generated mail.
# Note: For each tab name, a template "prefs/${tab.name}.tmpl" must exist,
# and its interface must be fulfilled.
# current_tab: A direct reference to one of the hashes in the tabs list.
# This tab will be displayed.
# changes_saved: boolean/string. True if the CGI processed form data before
# displaying anything, and can contain an optional custom
# message if required (which Perl still evaluates as True).
#%]
[% filtered_login = login FILTER html %]
[% INCLUDE global/header
title = "User Preferences"
h2 = filtered_login
style = "td.selected_tab {
border-width: 2px 2px 0px;
border-style: solid;
}
td.unselected_tab, td.spacer {
border-width: 0px 0px 2px 0px;
border-style: solid;
}"
%]
<center>
<table cellspacing="0" cellpadding="10" border="0" width="100%">
<tr>
<td class="spacer">&nbsp;</td>
[% FOREACH tab = tabs %]
[% IF tab.name == current_tab.name %]
<td align="center" bgcolor="lightblue" class="selected_tab">
[% tab.description %]
</td>
[% ELSE %]
<td align="center" bgcolor="#BBBBEE" class="unselected_tab">
<a HREF="userprefs.cgi?tab=[% tab.name %]">[% tab.description %]</a>
</td>
[% END %]
[% END %]
<td class="spacer">&nbsp;</td>
</tr>
</table>
</center>
[% IF changes_saved %]
<p>
<font color="red">
The changes to your
[% current_tab.description FILTER lower %] have been saved.
</font>
</p>
[% IF changes_saved != 1 %]
<p>
[% changes_saved %]
</p>
[% END %]
[% END %]
<h3>[% current_tab.description %]</h3>
<form method="post">
<input type="hidden" name="tab" value="[% current_tab.name %]">
[% INCLUDE "prefs/${current_tab.name}.tmpl" IF current_tab.name.defined %]
[% IF current_tab.saveable %]
<input type="hidden" name="dosave" value="1">
<table>
<tr>
<td width="150"></td>
<td>
<input type="submit" value="Submit Changes">
</td>
</tr>
</table>
[% END %]
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,27 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
<option value="text/plain">plain text (text/plain)</option>
<option value="text/html">HTML source (text/html)</option>
<option value="image/gif">GIF image (image/gif)</option>
<option value="image/jpeg">JPEG image (image/jpeg)</option>
<option value="image/png">PNG image (image/png)</option>
<option value="application/octet-stream">binary file (application/octet-stream)</option>

Просмотреть файл

@ -0,0 +1,130 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[%# Define strings that will serve as the title and header of this page %]
[% title = BLOCK %]Create New Attachment for Bug #[% bugid %][% END %]
[% h1 = BLOCK %]Create New Attachment for <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a>[% END %]
[% h2 = BLOCK %][% bugsummary FILTER html %][% END %]
[% INCLUDE global/header
title = title
h1 = h1
h2 = h2
style = "
th { text-align: right; vertical-align: baseline; white-space: nowrap; }
td { text-align: left; vertical-align: baseline; padding-bottom: 5px; }
"
extra = "onload=\"setContentTypeDisabledState();\""
%]
<form name="entryform" method="post" action="attachment.cgi" enctype="multipart/form-data">
<input type="hidden" name="bugid" value="[% bugid %]">
<input type="hidden" name="action" value="insert">
<table>
<tr>
<th>File:</th>
<td>
<em>Enter the path to the file on your computer.</em><br>
<input type="file" name="data" size="50">
</td>
</tr>
<tr>
<th>Description:</th>
<td>
<em>Describe the attachment briefly.</em><br>
<input type="text" name="description" size="60" maxlength="200">
</td>
</tr>
<tr>
<th></th>
<td>
</td>
</tr>
<tr>
<th>Content Type:</th>
<td>
<em>If the attachment is a patch, check the box below.</em><br>
<input type="checkbox" name="ispatch" value="1" onchange="setContentTypeDisabledState();"> patch<br><br>
<em>Otherwise, choose a method for determining the content type.</em><br>
<input type="radio" name="contenttypemethod" value="autodetect">
auto-detect<br>
<input type="radio" name="contenttypemethod" value="list">
select from list: <select name="contenttypeselection" onchange="this.form.contenttypemethod[1].checked = true;">
[% PROCESS attachment/contenttypes %]
</select><br>
<input type="radio" name="contenttypemethod" value="manual">
enter manually: <input type="text" name="contenttypeentry" size="30" maxlength="200" onchange="if (this.value) this.form.contenttypemethod[2].checked = true;">
</td>
</tr>
<tr>
<th>Obsoletes:</th>
<td>
<em>(optional) Check each existing attachment made obsolete by your new attachment.</em><br>
[% IF attachments.size %]
[% FOREACH attachment = attachments %]
<input type="checkbox" name="obsolete" value="[% attachment.id %]">
<a href="attachment.cgi?id=[% attachment.id %]&action=edit">[% attachment.id %]: [% attachment.description FILTER html %]</a><br>
[% END %]
[% ELSE %]
[no attachments can be made obsolete]
[% END %]
</td>
</tr>
<tr>
<th>Comment:</th>
<td>
<em>(optional) Add a comment about this attachment to the bug.</em><br>
<textarea wrap="soft" name="comment" rows="6" cols="80"></textarea>
</td>
</tr>
<tr>
<th>&nbsp;</th>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
<script language="JavaScript" type="text/javascript">
<!--
function setContentTypeDisabledState()
{
var entryform = document.entryform;
var isdisabled = false;
if (entryform.ispatch.checked)
isdisabled = true;
for (var i=0 ; i<entryform.contenttypemethod.length ; i++)
entryform.contenttypemethod[i].disabled = isdisabled;
entryform.contenttypeselection.disabled = isdisabled;
entryform.contenttypeentry.disabled = isdisabled;
}
//-->
</script>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,56 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[% INCLUDE global/header
title = "Changes Submitted"
style = "th { text-align: left; }"
%]
<table border="1">
<tr>
<td>
<h2>
<a title="[% description FILTER html %]" href="attachment.cgi?id=[% attachid %]&action=edit">Attachment #[% attachid %]</a>
to <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a> Created
</h2>
[% mailresults %]
[% IF contenttypemethod == 'autodetect' %]
<p>
<b>Note:</b> Bugzilla automatically detected the content type
<em>[% contenttype %]</em> for this attachment. If this is
incorrect, correct the value by
<a href="attachment.cgi?id=[% attachid %]&action=edit">editing the attachment</a>.
</p>
[% END %]
</td>
<td>
<a href="show_bug.cgi?id=[% bugid %]">Go back to bug #[% bugid %]</a>
</td>
</tr>
</table>
<p>
<a href="attachment.cgi?bugid=[% bugid %]&action=enter">Create Another Attachment to Bug #[% bugid %]</a>
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,226 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[%# Define strings that will serve as the title and header of this page %]
[% title = BLOCK %]Edit Attachment #[% attachid %] for Bug #[% bugid %][% END %]
[% h1 = BLOCK %]Edit Attachment #[% attachid %] for <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a>[% END %]
[% h2 = BLOCK %][% bugsummary FILTER html %][% END %]
[% INCLUDE global/header
title = title
h1 = h1
h2 = h2
style = "
th { text-align: right; vertical-align: top; }
td { text-align: left; vertical-align: top; }
td#info { text-align: right; vertical-align: top; }
td#actions { text-align: right; vertical-align: bottom; }
td#noview { text-align: left; vertical-align: center; }
"
%]
<script type="application/x-javascript" language="JavaScript">
<!--
function editAsComment()
{
// Get the content of the document as a string.
var viewFrame = document.getElementById('viewFrame');
var aSerializer = new XMLSerializer();
var contentDocument = viewFrame.contentDocument;
var theContent = aSerializer.serializeToString(contentDocument);
// If this is a plaintext document, remove cruft that Mozilla adds
// because it treats it as an HTML document with a big PRE section.
// http://bugzilla.mozilla.org/show_bug.cgi?id=86012
var contentType = '[% contenttype %]';
if ( contentType == 'text/plain' )
{
theContent = theContent.replace( /^<html><head\/><body><pre>/ , "" );
theContent = theContent.replace( /<\/pre><\/body><\/html>$/ , "" );
theContent = theContent.replace( /&lt;/gi , "<" );
theContent = theContent.replace( /&gt;/gi , ">" );
theContent = theContent.replace( /&amp;/gi , "&" );
}
// Add mail-style quote indicators (>) to the beginning of each line.
// ".*\n" matches lines that end with a newline, while ".+" matches
// the rare situation in which the last line of a file does not end
// with a newline.
theContent = theContent.replace( /(.*\n|.+)/g , ">$1" );
hideElementById('viewFrame');
hideElementById('editButton');
hideElementById('smallCommentFrame');
showElementById('undoEditButton');
// Show the TEXTAREA that will contain the editable attachment
// and copy the content of the attachment into it.
showElementById('editFrame');
var editFrame = document.getElementById('editFrame');
editFrame.value = theContent;
editFrame.value += "\n\n";
}
function undoEditAsComment()
{
// Hide the "edit attachment as comment" TEXTAREA and the "undo" button.
hideElementById('undoEditButton');
hideElementById('editFrame');
// Show the "view attachment" IFRAME, the "redo" button that allows the user
// to go back to editing the attachment as a comment, and the small comment field.
showElementById('viewFrame');
showElementById('redoEditButton');
showElementById('smallCommentFrame');
}
function redoEditAsComment()
{
// Hide the "view attachment" IFRAME, the "redo" button that allows the user
// to go back to editing the attachment as a comment, and the small comment field.
hideElementById('viewFrame');
hideElementById('redoEditButton');
hideElementById('smallCommentFrame');
// Show the "edit attachment as comment" TEXTAREA and the "undo" button.
showElementById('undoEditButton');
showElementById('editFrame');
}
function hideElementById(id)
{
var elm = document.getElementById(id);
if (elm) {
elm.style.display = 'none';
}
}
function showElementById(id, val)
{
var elm = document.getElementById(id);
if (elm) {
if (!val) val = 'inline';
elm.style.display = val;
}
}
function normalizeComments()
{
// Remove the unused comment field from the document so its contents
// do not get transmitted back to the server.
var small = document.getElementById('smallCommentFrame');
var big = document.getElementById('editFrame');
if ( small.style.display == 'none' )
{
small.parentNode.removeChild(small);
}
if ( big.style.display == 'none' )
{
big.parentNode.removeChild(big);
}
}
//-->
</script>
<form method="post" action="attachment.cgi" onsubmit="normalizeComments();">
<input type="hidden" name="id" value="[% attachid %]">
<input type="hidden" name="action" value="update">
<input type="hidden" name="contenttypemethod" value="manual">
<table width="100%">
<tr>
<td width="25%">
<small>
<b>Description:</b><br>
<textarea rows="3" cols="25" name="description" wrap="soft">[% description FILTER html %]</textarea><br>
<b>MIME Type:</b><br>
<input type="text" size="20" name="contenttypeentry" value="[% contenttype FILTER html %]"><br>
<b>Flags:</b><br>
<input type="checkbox" name="ispatch" value="1"[% " checked" IF ispatch %]>patch
<input type="checkbox" name="isobsolete" value="1"[% " checked" IF isobsolete %]>obsolete<br>
[% IF statusdefs.size %]
<b>Status:</b><br>
[% FOREACH def = statusdefs %]
<input type="checkbox" name="status" value="[% def.id %]"[% " checked" IF statuses.${def.id} %]>[% def.name FILTER html %]<br>
[% END %]
[% END %]
<div id="smallCommentFrame">
<b>Comment (on the bug):</b><br>
<textarea name="comment" rows="5" cols="25" wrap="soft"></textarea><br>
</div>
<input type="submit" value="Submit">
</small>
</td>
[% IF isviewable %]
<td width="75%">
<textarea id="editFrame" name="comment" style="height: 400px; width: 100%; display: none;" cols="80" wrap="soft"></textarea>
<iframe id="viewFrame" src="attachment.cgi?id=[% attachid %]&action=view" style="height: 400px; width: 100%;">
<b>You cannot view the attachment while editing it because your browser does not support IFRAMEs.
<a href="attachment.cgi?id=[% attachid %]&action=view">View the attachment on a separate page</a>.</b>
</iframe>
<script type="application/x-javascript" language="JavaScript">
<!--
if (typeof document.getElementById == "function") {
document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment</button>');
document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment</button>');
document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment</button>');
}
//-->
</script>
</td>
[% ELSE %]
<td id="noview" width="50%">
<p><b>
Attachment cannot be viewed because its MIME type is not either text/*, image/*, or application/vnd.mozilla.*.
<a href="attachment.cgi?id=[% attachid %]&action=view">Download the attachment instead</a>.
</b></p>
</td>
[% END %]
</tr>
</table>
Attachments on this Bug:
[% FOREACH a = attachments %]
[% IF a == attachid %]
#[% a %]
[% ELSE %]
<a href="attachment.cgi?id=[% a %]&action=edit">#[% a %]</a>
[% END %]
[% "|" UNLESS loop.last() %]
[% END %]
</form>
<br>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,81 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
<br>
<table cellspacing="0" cellpadding="4" border="1">
<tr>
<th bgcolor="#cccccc" align="left">Attachment</th>
<th bgcolor="#cccccc" align="left">Type</th>
<th bgcolor="#cccccc" align="left">Modified</th>
<th bgcolor="#cccccc" align="left">Status</th>
<th bgcolor="#cccccc" align="left">Actions</th>
</tr>
[% FOREACH attachment = attachments %]
<tr>
<td valign="top">
[% IF attachment.isobsolete %]
<strike><a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=view">[% attachment.description FILTER html %]</a></strike>
[% ELSE %]
<a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=view">[% attachment.description FILTER html %]</a>
[% END %]
</td>
<td valign="top">
[% IF attachment.ispatch %]
<i>patch</i>
[% ELSE %]
[% attachment.contenttype FILTER html %]
[% END %]
</td>
<td valign="top">[% attachment.date %]</td>
<td valign="top">
[% IF attachment.statuses.size == 0 %]
<i>none</i>
[% ELSE %]
[% FOREACH s = attachment.statuses %]
[% s FILTER html FILTER replace('\s', '&nbsp;') %]<br>
[% END %]
[% END %]
</td>
<td valign="top">
[% IF attachment.canedit %]
<a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=edit">Edit</a>
[% ELSE %]
None
[% END %]
</td>
</tr>
[% END %]
<tr>
<td colspan="4">
<a href="attachment.cgi?bugid=[% bugid %]&amp;action=enter">Create a New Attachment</a> (proposed patch, testcase, etc.)
</td>
<td colspan="1">
<a href="attachment.cgi?bugid=[% bugid %]&amp;action=viewall">View All</a>
</td>
</tr>
</table>
<br>

Просмотреть файл

@ -0,0 +1,98 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[% filtered_summary = bugsummary FILTER html %]
[% INCLUDE global/header
title = "View All Attachments for Bug #$bugid"
h1 = "View All Attachments for <a href=\"show_bug.cgi?id=$bugid\">Bug #$bugid</a>"
h2 = filtered_summary
style = "
th { text-align: right; vertical-align: top; }
td { text-align: left; vertical-align: top; }
td#info { text-align: right; vertical-align: top; }
td#actions { text-align: right; vertical-align: bottom; }
"
%]
<br>
[% FOREACH a = attachments %]
<div align="center">
<table cellspacing="0" cellpadding="4" border="1" width="75%">
<tr>
<td valign="top" bgcolor="#cccccc" colspan="5">
<big><b>Attachment #[% a.attachid %]</b></big>
</td>
</tr>
<tr>
<td valign="top">
[% IF a.isobsolete %]
<strike>[% a.description FILTER html %]</strike>
[% ELSE %]
[% a.description FILTER html %]
[% END %]
</td>
<td valign="top">
[% IF a.ispatch %]
<i>patch</i>
[% ELSE %]
[% a.contenttype FILTER html %]
[% END %]
</td>
<td valign="top">[% a.date %]</td>
<td valign="top">
[% IF a.statuses.size == 0 %]
<i>none</i>
[% ELSE %]
[% FOREACH s = a.statuses %]
[% s FILTER html FILTER replace('\s', '&nbsp;') %]<br>
[% END %]
[% END %]
</td>
<td valign="top">
<a href="attachment.cgi?id=[% a.attachid %]&action=edit">Edit</a>
</td>
</tr>
</table>
[% IF a.isviewable %]
<iframe src="attachment.cgi?id=[% a.attachid %]&action=view" width="75%" height="350">
<b>You cannot view the attachment on this page because your browser does not support IFRAMEs.
<a href="attachment.cgi?id=[% a.attachid %]&action=view">View the attachment on a separate page</a>.</b>
</iframe>
[% ELSE %]
<p><b>
Attachment cannot be viewed because its MIME type is not text/*, image/*, or application/vnd.mozilla.*.
<a href="attachment.cgi?id=[% a.attachid %]&action=view">Download the attachment instead</a>.
</b></p>
[% END %]
</div>
<br><br>
[% END %]
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,46 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
# Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Changes Submitted"
style = "th { text-align: left; }"
%]
<hr>
<table border="1">
<tr>
<td>
<h2>Changes to
<a href="attachment.cgi?id=[% attachid %]&action=edit">attachment [% attachid %]</a>
of bug [% bugid %] submitted
</h2>
[% mailresults %]
</td>
<td>
<a href="show_bug.cgi?id=[% bugid %]">Back to Bug #[% bugid %]</a>
</td>
</tr>
</table>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,43 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# bug_id: integer. The bug ID.
#
# This template also needs to be called with the interface to the
# activity.html.tmpl template fulfilled.
#%]
[% INCLUDE global/header
title = "Changes made to bug $bug_id"
h1 = "Activity log"
h2 = "Bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
%]
<br>
[% INCLUDE show/activity.html.tmpl %]
<p>
<a href="show_bug.cgi?id=[% bug_id %]">Back to bug [% bug_id %]</a>
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,91 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# operations: array of hashes. May be empty. Each has has three members:
# who: string. who performed the operation
# when: string. when they performed it
# changes: hash. Details of what they changed. This hash has three
# compulsory and one optional member:
# field: string. The name of the field
# removed: string. What was removed from the field
# added: string. What was added to the field
# attach_id: integer. If the change was adding an attachment, its id.
# incomplete_data: boolean. True if some of the data is incomplete (because
# it was affected by an old Bugzilla bug.)
#%]
[% IF incomplete_data %]
<p>
There used to be a bug Bugzilla which caused activity data
to be lost if there was a large number of cc's or dependencies. That
has been fixed, however, there was some data already lost on this bug
that could not be regenerated. The changes that the script could not
reliably determine are prefixed by '?'.
</p>
[% END %]
[% IF operations.size > 0 %]
<table border cellpadding="4">
<tr>
<th>Who</th>
<th>When</th>
<th>What</th>
<th>Removed</th>
<th>Added</th>
</tr>
[% FOREACH operation = operations %]
<tr>
<td rowspan="[% operation.changes.size %]" valign="top">
[% operation.who %]
</td>
<td rowspan="[% operation.changes.size %]" valign="top">
[% operation.when %]
</td>
[% FOREACH change = operation.changes %]
[% "</tr><tr>" IF loop.index > 0 %]
<td>
[% IF change.attachid %]
<a href="attachment.cgi?id=[% change.attachid %]&amp;action=view">
Attachment #[% change.attachid %]</a>
[% END %]
[% change.field %]
</td>
<td>
[% IF change.removed %]
[% change.removed FILTER html %]
[% ELSE %]
&nbsp;
[% END %]
</td>
<td>
[% IF change.added %]
[% change.added FILTER html %]
[% ELSE %]
&nbsp;
[% END %]
</td>
[% END %]
</tr>
[% END %]
</table>
[% END %]

Просмотреть файл

@ -0,0 +1,47 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Display bugs as XML"
%]
<form method="get" action="xml.cgi">
<table>
<tr>
<td>
Display bugs as XML by entering a list of bug numbers here:
</td>
<td>
<input name="id" size="30" />
<input type="submit" value="Display as XML" />
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
(e.g. 1000, 2467, 852)
</td>
</tr>
</table>
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,36 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% UNLESS header_done %]
[% INCLUDE global/header
title = "Search by bug number"
%]
[% END %]
<form method="get" action="show_bug.cgi">
<p>
You may find a single bug by entering its bug id here:
<input name="id" size="6">
<input type="submit" value="Show Me This Bug">
</p>
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,54 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% DEFAULT start_at = 0 %]
[% count = 0 %]
[% FOREACH comment = comments %]
[% IF count >= start_at %]
[% PROCESS a_comment %]
[% END %]
[% count = count + 1 %]
[% END %]
[%############################################################################%]
[%# Block for individual comments #%]
[%############################################################################%]
[% BLOCK a_comment %]
[% IF count > 0 %]
<br>
<i>------- Additional Comment
<a name="c[% count %]" href="#c[% count %]">#[% count %]</a> From
<a href="mailto:[% comment.email FILTER html %]">[% comment.name FILTER html %]</a>
[%+ comment.time %] -------
</i>
[% END %]
<br>
[%# Don't indent the <pre> block, since then the spaces are displayed in the
# generated HTML
#%]
<pre>
[%- quoteUrls(comment.body) -%]
</pre>
[% END %]

Просмотреть файл

@ -0,0 +1,257 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
# Ville Skyttä <ville.skytta@iki.fi>
#%]
[% INCLUDE global/header
title = "Enter Bug"
h2 = "This page lets you enter a new bug into Bugzilla."
%]
<form method="post" action="post_bug.cgi">
<input type="hidden" name="product" value="[% product FILTER html %]" />
<table cellspacing="2" cellpadding="0" border="0">
<tr>
<td><br></td>
</tr>
<tr>
<td></td>
<td colspan="3">
Before filling this in, please read the
<a href="bugwritinghelp.html">bug-writing guidelines</a>.
</td>
</tr>
<tr>
<td><br></td>
</tr>
<tr>
<td align="right" valign="top"><strong>Reporter:</strong></td>
<td valign="top">[% reporter FILTER html %]</td>
<td align="right" valign="top"><strong>Product:</strong></td>
<td valign="top">[% product FILTER html %]</td>
</tr>
[%# We can't use the select block in these two cases for various reasons. %]
<tr>
<td align="right" valign="top">
<strong>Version:</strong>
</td>
<td>
<select name="version" size="5">
[%- FOREACH v = version %]
<option value="[% v FILTER html %]"
[% " selected=\"selected\"" IF v == default.version %]>[% v FILTER html -%]
</option>
[%- END %]
</select>
</td>
<td align="right" valign="top">
<strong>
<a href="describecomponents.cgi?product=[% product FILTER uri %]">
Component:</a>
</strong>
</td>
<td>
<select name="component" size="5">
[%- FOREACH c = component_ %]
<option value="[% c FILTER html %]"
[% " selected=\"selected\"" IF c == default.component_ %]>[% c FILTER html -%]
</option>
[%- END %]
</select>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"></td>
</tr>
<tr>
[% sel = { description => 'Platform', name => 'rep_platform' } %]
[% INCLUDE select %]
[% sel = { description => 'OS', name => 'op_sys' } %]
[% INCLUDE select %]
</tr>
<tr>
[% IF Param('letsubmitterchoosepriority') %]
[% sel = { description => 'Priority', name => 'priority' } %]
[% INCLUDE select %]
[% ELSE %]
<input type="hidden" name="priority" value="[% default.priority %]" />
[% END %]
[% sel = { description => 'Severity', name => 'bug_severity' } %]
[% INCLUDE select %]
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"></td>
</tr>
[% IF bug_status.size > 1 %]
<tr>
[% sel = { description => 'Initial State', name => 'bug_status' } %]
[% INCLUDE select %]
<td colspan="2"></td>
</tr>
[% ELSE %]
<input type="hidden" name="bug_status" value="[% default.bug_status %]" />
[% END %]
<tr>
<td align="right">
<strong>
<a href="bug_status.html#assigned_to">Assigned To:</a>
</strong>
</td>
<td colspan="3">
<input name="assigned_to" size="32"
value="[% assigned_to FILTER html %]" />
(Leave blank to assign to default component owner)
</td>
</tr>
<tr>
<td align="right"><strong>Cc:</strong></td>
<td colspan="3">
<input name="cc" size="45" value="[% cc FILTER html %]" />
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"></td>
</tr>
<tr>
<td align="right"<strong>URL:</strong></td>
<td colspan="3">
<input name="bug_file_loc" size="60"
value="[% bug_file_loc FILTER html %]" />
</td>
</tr>
<tr>
<td align="right"><strong>Summary:</strong></td>
<td colspan="3">
<input name="short_desc" size="60" value="[% short_desc FILTER html %]" />
</td>
</tr>
<tr><td align="right" valign="top"><strong>Description:</strong></td>
<td colspan="3">
<textarea wrap="hard" name="comment" rows="10" cols="80">
[% comment FILTER html %]</textarea>
<br>
</td>
</tr>
<tr>
<td></td>
<td colspan="3">
[% IF group.size %]
<br>
<strong>
Only users in the selected groups can view this bug:
</strong>
<br>
<font size="-1">
(Leave all boxes unchecked to make this a public bug.)
</font>
<br>
<br>
<!-- Checkboxes -->
[% FOREACH g = group %]
&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" name="bit-[% g.bit %]" value="1"
[% " checked=\"checked\"" IF g.checked %] />[% g.description %]<br />
[% END %]
<br>
[% END %]
</td>
</tr>
<tr>
<td></td>
<td colspan="3">
<input type="submit" value=" Commit "
onclick="if (this.form.short_desc.value == '')
{ alert('Please enter a summary sentence for this bug.');
return false; } return true;">
&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" name="maketemplate"
value="Remember values as bookmarkable template" />
</td>
</tr>
[% IF Param('usebrowserinfo') %]
<tr>
<td></td>
<td colspan="3">
<br>
We've made a guess at your operating system and platform.
Please check them and, if we got it wrong, email
[% Param('maintainer') %].
</td>
</tr>
[% END %]
</table>
<input type="hidden" name="form_name" value="enter_bug">
</form>
[% INCLUDE global/footer %]
[%############################################################################%]
[%# Block for SELECT fields #%]
[%############################################################################%]
[% BLOCK select %]
[% IF sel.description %]
<td align="right">
<strong>
<a href="bug_status.html#[% sel.name %]">[% sel.description %]:</a>
</strong>
</td>
[% END %]
<td>
<select name="[% sel.name %]">
[%- FOREACH x = ${sel.name} %]
<option value="[% x FILTER html %]"
[% " selected=\"selected\"" IF x == default.${sel.name} %]>[% x FILTER html -%]
</option>
[%- END %]
</select>
</td>
[% END %]

Просмотреть файл

@ -0,0 +1,47 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Bug $bug_id Submitted"
%]
<table border="1">
<tr>
<td>
<h2>Bug [% bug_id %] has been added to the database.</h2>
[% mailresults %]
</td>
<td>
<a href="show_bug.cgi?id=[% bug_id %]">Back To Bug# [% bug_id %]</a>
</td>
</tr>
</table>
<p>
<a href="attachment.cgi?bugid=[% bug_id %]&amp;action=enter">
Attach a file to this bug</a>.
</p>
[% INCLUDE show/navigate.html.tmpl %]
[% INCLUDE global/footer %]

Просмотреть файл

Просмотреть файл

@ -0,0 +1,33 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Bookmarks are your friend"
h1 = "Template constructed"
%]
<p>
If you bookmark <a href="enter_bug.cgi?[% url %]">this link</a>,
going to the bookmark will bring up the enter bug page with the fields
initialized as you've requested.
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,98 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# bug_id: integer. The number of the bug(s).
# multiple_bugs: boolean. True if bug_id contains > 1 bug number.
# doall: boolean. True if we are displaying every bug in the database.
# showsummary: boolean. True if we are showing bug summaries.
# rankdir: string. "TB" if we are ranking top-to-bottom,
"LR" if left-to-right.
# image_url: string. The URL of the graphic showing the dependencies.
# map_url: string. The URL of the map file for the image.
#%]
[% title = "Dependency Graph"
h1 = title
%]
[% IF NOT multiple_bugs %]
[% title = "$title for bug $bug_id"
h1 = "$h1 for bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
%]
[% END %]
[% INCLUDE global/header %]
<p>
Green circles represent open bugs.
</p>
<a href="[% map_url %]">
<img src="[% image_url %]" ismap>
</a>
<hr>
<form>
<table>
<tr>
<td>
Bug numbers:
<input name="id" value="[% bug_id %]">
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="doall"
[% " checked" IF doall %]>
Show <b>every</b> bug in the system with dependencies
</td>
</tr>
<tr>
<td colspan="3">
<input type="checkbox" name="showsummary"
[% " checked" IF showsummary %]>
Show the summaries of all displayed bugs
</td>
</tr>
<tr>
<td colspan="3">
<select name="rankdir">
<option value="TB"
[% " selected" IF rankdir == "TB" %]>
Orient top-to-bottom
</option>
<option value="LR"
[% " selected" IF rankdir == "LR" %]>
Orient left-to-right
</option>
</select>
</td>
</tr>
</table>
<input type="submit" value="Change Parameters">
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,208 @@
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Tobias Burnus <burnus@net-b.de>
# Ville Skyttä <ville.skytta@iki.fi>
# Myk Melez <myk@mozilla.org>
#%]
[% PROCESS global/header
title = "Dependency tree for Bug $bugid"
h1 = "Dependency tree for bug <a href=\"show_bug.cgi?id=$bugid\">$bugid</a>"
style = "strike { background-color: #d9d9d9; color: #000000; }"
%]
[% PROCESS depthControlToolbar %]
[%# Display the tree of bugs that this bug depends on. %]
<h3>Bugs that bug <a href="show_bug.cgi?id=[% bugid %]">[% bugid %]</a> depends on
[% IF dependson_ids.size > 0 %]
(<a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]">view as bug list</a>
[% IF canedit && dependson_ids.size > 1 %]
| <a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]&amp;tweak=1">change several</a>
[% END %])
[% IF maxdepth || hide_resolved %]
<small><b>
(Only [% "open" IF hide_resolved %] bugs
[% " whose depth is less than $maxdepth" IF maxdepth %]
will be shown)
</b></small>
[% END %]
</h3>
[% INCLUDE display_tree tree=dependson_tree bug_id=bugid %]
[% ELSE %]
</h3>
<p>None</p>
[% END %]
[%# Display the tree of bugs that this bug blocks. %]
<h3>Bugs that bug <a href="show_bug.cgi?id=[% bugid %]">[% bugid %]</a> blocks
[% IF blocked_ids.size > 0 %]
(<a href="buglist.cgi?branch_id=[% blocked_ids.join(",") %]">view as bug list</a>
[% IF canedit && blocked_ids.size > 1 %]
| <a href="buglist.cgi?branch_id=[% blocked_ids.join(",") %]&amp;tweak=1">change several</a>
[% END %])
[% IF maxdepth || hide_resolved %]
<small><b>
(Only [% "open" IF hide_resolved %] bugs
[% " whose depth is less than $maxdepth" IF maxdepth %]
will be shown)
</b></small>
[% END %]
</h3>
[% INCLUDE display_tree tree=blocked_tree bug_id=bugid %]
[% ELSE %]
</h3>
<p>None</p>
[% END %]
[% PROCESS depthControlToolbar %]
[% PROCESS global/footer %]
[%###########################################################################%]
[%# Block to display a tree #%]
[%###########################################################################%]
[% BLOCK display_tree %]
<ul>
[% FOREACH dep_id = tree.$bug_id.dependencies %]
[% dep = tree.$dep_id %]
<li>
[% "<strike>" IF !dep.open %]
<a href="show_bug.cgi?id=[% dep_id %]">[% dep_id %]
[[% dep.milestone FILTER html %],
[% dep.assignee_email FILTER html %]] -
[% IF dep.seen %]
<i>&lt;This bug appears elsewhere in this tree&gt;</i></a>
[% ELSE %]
[% dep.summary FILTER html %].</a>
[% END %]
[% "</strike>" IF !dep.open %]
[% INCLUDE display_tree bug_id=dep_id
IF dep.dependencies.size > 0 && !dep.seen %]
</li>
[% dep.seen = 1 %]
[% END %]
</ul>
[% END %]
[%###########################################################################%]
[%# Block for depth control toolbar #%]
[%###########################################################################%]
[% BLOCK depthControlToolbar %]
<table cellpadding="3" border="0" cellspacing="0" bgcolor="#d0d0d0">
<tr>
[%# Hide/show resolved button
Swaps text depending on the state of hide_resolved %]
<td align="center">
<form method="get" action="showdependencytree.cgi"
style="display: inline; margin: 0px;">
<input name="id" type="hidden" value="[% bugid %]">
[% IF maxdepth %]
<input name="maxdepth" type="hidden" value="$maxdepth">
[% END %]
<input type="hidden" name="hide_resolved" value="[% hide_resolved ? 0 : 1 %]">
<input type="submit" value="[% hide_resolved ? "Show" : "Hide" %] Resolved">
</form>
</td>
<td>
Max Depth:
</td>
<td>
&nbsp;
</td>
<td>
<form method="get" action="showdependencytree.cgi"
style="display: inline; margin: 0px;">
[%# set to one form %]
<input type="submit" value="&nbsp;1&nbsp;" [%
realdepth < 2 || maxdepth == 1 ? "disabled" : ""
%]>
<input name="id" type="hidden" value="[% bugid %]">
<input name="maxdepth" type="hidden" value="1">
<input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
</form>
</td>
<td>
<form method="get" action="showdependencytree.cgi"
style="display: inline; margin: 0px;">
[%# Minus one form
Allow subtracting only when realdepth and maxdepth > 1 %]
<input name="id" type="hidden" value="[% bugid %]">
<input name="maxdepth" type="hidden" value="[%
maxdepth == 1 ? 1
: ( maxdepth ? maxdepth - 1 : realdepth - 1 )
%]">
<input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
<input type="submit" value="&nbsp;&lt;&nbsp;" [%
realdepth < 2 || ( maxdepth && maxdepth < 2 ) ? "disabled" : ""
%]>
</form>
</td>
<td>
<form method="get" action="showdependencytree.cgi"
style="display: inline; margin: 0px;">
[%# Limit entry form: the button can not do anything when total depth
is less than two, so disable it %]
<input name="maxdepth" size="4" maxlength="4" value="[%
maxdepth > 0 ? maxdepth : ""
%]">
<input name="id" type="hidden" value="[% bugid %]">
<input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
<noscript>
<input type="submit" value="Change" [% realdepth < 2 ? "disabled" : "" %]>
</noscript>
</form>
</td>
<td>
<form method="get" action="showdependencytree.cgi"
style="display: inline; margin: 0px;">
[%# plus one form
Disable button if total depth < 2, or if depth set to unlimited %]
<input name="id" type="hidden" value="[% bugid %]">
[% IF maxdepth %]
<input name="maxdepth" type="hidden" value="[% maxdepth + 1 %]">
[% END %]
<input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
<input type="submit" value="&nbsp;&gt;&nbsp;" [%
realdepth < 2 || ! maxdepth || maxdepth >= realdepth ?
"disabled" : ""
%]>
</form>
</td>
<td>
<form method="get" action="showdependencytree.cgi"
style="display: inline; margin: 0px;">
[%# Unlimited button %]
<input name="id" type="hidden" value="[% bugid %]">
<input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
<input type="submit" value="&nbsp;Unlimited&nbsp;">
</form>
</td>
</tr>
</table>
[% END %]

Просмотреть файл

@ -0,0 +1,540 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% filtered_desc = bug.short_desc FILTER html %]
[% UNLESS header_done %]
[% INCLUDE global/header
title = "Bug $bug.bug_id - $bug.short_desc"
h1 = "Bugzilla Bug $bug.bug_id"
h2 = filtered_desc
extra = navigation_links()
%]
[% END %]
[% PROCESS show/navigate.html.tmpl %]
<hr>
<form name="changeform" method="post" action="process_bug.cgi">
<input type="hidden" name="delta_ts" value="[% bug.delta_ts %]">
<input type="hidden" name="longdesclength" value="[% bug.longdesclength %]">
<input type="hidden" name="id" value="[% bug.bug_id %]">
[%# *** Platform Reporter Product OS AddCC *** %]
<table cellspacing="1" cellpadding="1" border="0">
<tr>
<td align="right">
<b>Bug#:</b>
</td>
<td>
<a href="[% Param('urlbase') %]show_bug.cgi?id=[% bug.bug_id %]">
[% bug.bug_id %]</a>
</td>
<td>&nbsp;</td>
<td align="right">
<b>Platform:</b>
</td>
[% PROCESS select selname = "rep_platform" %]
<td align="right">
<b>Reporter:</b>
</td>
<td>
[% bug.reporter FILTER html %]
</td>
</tr>
<tr>
<td align="right">
<b>Product:</b>
</td>
[% PROCESS select selname => "product" %]
<td align="right">
<b>OS:</b>
</td>
[% PROCESS select selname => "op_sys" %]
<td align="right">
<b>Add&nbsp;CC:</b>
</td>
<td>
<input name="newcc" size="30" value="">
</td>
</tr>
[%# *** Component Version CC Priority Severity AssignedTo Milestone *** %]
<tr>
<td align="right">
<b>
<a href="describecomponents.cgi?product=[% bug.product FILTER uri %]">
Component</a>:
</b>
</td>
<td>
<select name="component">
[% FOREACH x = component_ %]
<option value="[% x FILTER html %]"
[% " selected" IF x == bug.component %]>[% x FILTER html %]
</option>
[% END %]
</select>
</td>
<td>&nbsp;</td>
<td align="right">
<b>Version:</b>
</td>
[% PROCESS select selname => "version" %]
<td rowspan="4" align="right" valign="top">
<b>CC:</b>
</td>
<td rowspan="4" valign="top">
[% IF bug.cc %]
<select name="cc" multiple size="5">
[% FOREACH c = bug.cc %]
<option value="[% c FILTER html %]">[% c FILTER html %]</option>
[% END %]
</select>
<br>
<input type="checkbox" name="removecc">Remove selected CCs
<br>
[% ELSE %]
<input type="hidden" name="cc" value="">
[% END %]
</td>
</tr>
<tr>
<td align="right">
<b>
<a href="bug_status.html">Status</a>:
</b>
</td>
<td>[% bug.bug_status FILTER html %]</td>
<td>&nbsp;</td>
<td align="right">
<b><a href="bug_status.html#priority">Priority</a>:</b>
</td>
[% PROCESS select selname => "priority" %]
</tr>
<tr>
<td align="right">
<b>
<a href="bug_status.html">Resolution</a>:
</b>
</td>
<td>[% bug.resolution FILTER html %]</td>
<td>&nbsp;</td>
<td align="right">
<b><a href="bug_status.html#severity">Severity</a>:</b>
</td>
[% PROCESS select selname = "bug_severity" %]
</tr>
<tr>
<td align="right">
<b>
<a href="bug_status.html#assigned_to">Assigned&nbsp;To</a>:
</b>
</td>
<td>[% bug.assigned_to FILTER html %]</td>
<td>&nbsp;</td>
[% IF Param("usetargetmilestone") && bug.target_milestone %]
<td align="right">
<b>
<a href="[% bug.milestoneurl FILTER uri %]">Target Milestone</a>:
</b>
</td>
[% PROCESS select selname = "target_milestone" %]
[% ELSE %]
<td colspan="3">&nbsp;</td>
[% END %]
</tr>
[%# *** QAContact URL Summary Whiteboard Keywords *** %]
[% IF Param('useqacontact') %]
<tr>
<td align="right">
<b>QA Contact:</b>
</td>
<td colspan="7">
<input name="qa_contact"
value="[% bug.qa_contact FILTER html %]" size="60">
</td>
</tr>
[% END %]
<tr>
<td align="right">
<b>
[% IF bug.bug_file_loc %]
<a href="[% bug.bug_file_loc FILTER uri %]">URL:</a>
[% ELSE %]
URL:
[% END %]
</b>
</td>
<td colspan="7">
<input name="bug_file_loc"
value="[% bug.bug_file_loc FILTER html %]" size="60">
</td>
</tr>
<tr>
<td align="right">
<b>Summary:</b>
</td>
<td colspan="7">
<input name="short_desc"
value="[% bug.short_desc FILTER html %]" size="60">
</td>
</tr>
[% IF Param('usestatuswhiteboard') %]
<tr>
<td align="right">
<b>Status Whiteboard:</b>
</td>
<td colspan="7">
<input name="status_whiteboard"
value="[% bug.status_whiteboard FILTER html %]" size="60">
</td>
</tr>
[% END %]
[% IF use_keywords %]
<tr>
<td align="right">
<b>
<a href="describekeywords.cgi">Keywords:</a>
</b>
<td colspan="7">
<input name="keywords"
value="[% bug.keywords.join(', ') FILTER html %]" size="60">
</td>
</tr>
[% END %]
</table>
[%# *** Attachments *** %]
[% INCLUDE attachment/list.atml
attachments = bug.attachments
bugid = bug.bug_id %]
[%# *** Dependencies Votes *** %]
[% IF Param('usedependencies') %]
<table>
<tr>
[% PROCESS dependencies
dep = { title => "depends on", fieldname => "dependson" } %]
<td rowspan="2">
<a href="showdependencytree.cgi?id=[% bug.bug_id %]">Show
dependency tree</a>
[% IF Param('webdotbase') %]
<br>
<a href="showdependencygraph.cgi?id=[% bug.bug_id %]">Show
dependency graph</a>
[% END %]
</td>
</tr>
<tr>
[% PROCESS dependencies
dep = { title => "blocks", fieldname => "blocked" } %]
</tr>
</table>
[% END %]
[% IF use_votes %]
<table>
<tr>
<th>
<a href="votehelp.html">Votes:</a>
</th>
<td>
[% bug.votes %]&nbsp;&nbsp;&nbsp;
<a href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]">Show
votes for this bug</a>&nbsp;&nbsp;&nbsp;
<a href="votes.cgi?action=show_user&bug_id=[% bug.bug_id %]">Vote
for this bug</a>
</td>
</tr>
</table>
[% END %]
[%# *** Comments Groups *** %]
<br>
<b>Additional Comments:</b>
<br>
<textarea wrap="hard" name="comment" rows="10" cols="80"
accesskey="c"></textarea>
<br>
[% IF groups.size > 0 %]
<br>
<b>Only users in the selected groups can view this bug:</b>
<br>
<font size="-1">(Unchecking all boxes makes this a public bug.)</font>
<br>
<br>
[% FOREACH group = groups %]
&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" name="bit-[% group.bit %]" value="1"
[% " checked='checked'" IF group.ison %]
[% " disabled='disabled'" IF NOT group.ingroup %]>
[% group.description %]
<br>
[% END %]
[% IF NOT user.inallgroups %]
<b>
Only members of a group can change the visibility of a bug for
that group
</b>
<br>
[% END %]
[% IF bug.inagroup %]
<p>
<b>But users in the roles selected below can always view this bug:</b>
<br>
<small>
(The assignee
[% IF (Param('useqacontact')) %]
and QA contact
[% END %]
can always see a bug, and this section does not take effect unless
the bug is restricted to at least one group.)
</small>
</p>
<p>
<input type="checkbox" name="reporter_accessible" value="1"
[% " checked" IF bug.reporter_accessible %]>Reporter
<input type="checkbox" name="cclist_accessible" value="1"
[% " checked" IF bug.cclist_accessible %]>CC List
</p>
[% END %]
[% END %]
[%# *** Knob *** %]
<br>
<input type="radio" name="knob" value="none" checked>
Leave as <b>[% bug.bug_status FILTER html %]&nbsp;
[% bug.resolution FILTER html %]</b>
<br>
[% knum = 1 %]
[% IF bug.bug_status == "UNCONFIRMED" &&
(user.canedit || user.canconfirm) %]
<input type="radio" name="knob" value="confirm">
Confirm bug (change status to <b>NEW</b>)
<br>
[% knum = knum + 1 %]
[% END %]
[% IF user.canedit %]
[% IF bug.isopened %]
[% IF bug.bug_status != "ASSIGNED" %]
<input type="radio" name="knob" value="accept">
Accept bug (
[% "confirm bug, " IF bug.isunconfirmed %]change
status to <b>ASSIGNED</b>)
<br>
[% knum = knum + 1 %]
[% END %]
[% IF bug.resolution %]
<input type="radio" name="knob" value="clearresolution">
Clear the resolution (remove the current resolution of
<b>[% bug.resolution FILTER html %]</b>)<br>
[% knum = knum + 1 %]
[% END %]
<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">
[% FOREACH r = resolution %]
<option value="[% r FILTER html %]">[% r FILTER html %]</option>
[% END %]
</select>
<br>
[% knum = knum + 1 %]
<input type="radio" name="knob" value="duplicate">
Resolve bug, mark it as duplicate of bug #
<input name="dup_id" size="6"
onchange="if (this.value != '')
{document.changeform.knob[[% knum %]].checked=true}">
<br>
[% knum = knum + 1 %]
<input type="radio" name="knob" value="reassign">
<a href="bug_status.html#assigned_to">Reassign</A> bug to
<input name="assigned_to" size="32"
onchange="if ((this.value != '[% bug.assigned_to_email FILTER js %]') &&
(this.value != '')) {
document.changeform.knob[[% knum %]].checked=true;
}"
value="[% bug.assigned_to_email FILTER html %]">
<br>
[% IF bug.isunconfirmed %]
&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="andconfirm">
and confirm bug (change status to <b>NEW</b>)
<br>
[% END %]
[% knum = knum + 1 %]
<input type="radio" name="knob" value="reassignbycomponent">
Reassign bug to owner
[% "and QA contact" IF useqacontact %]
of selected component
<br>
[% IF bug.isunconfirmed %]
&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="andconfirm">
and confirm bug (change status to <b>NEW</b>)
<br>
[% END %]
[% knum = knum + 1 %]
[% ELSE %]
[% IF bug.resolution != "MOVED" ||
(bug.resolution == "MOVED" && user.canmove) %]
<input type="radio" name="knob" value="reopen"> Reopen bug
<br>
[% knum = knum + 1 %]
[% END %]
[% IF bug.bug_status == "RESOLVED" %]
<input type="radio" name="knob" value="verify">
Mark bug as <b>VERIFIED</b><br>
[% knum = knum + 1 %]
[% END %]
[% IF bug.bug_status != "CLOSED" %]
<input type="radio" name="knob" value="close">
Mark bug as <b>CLOSED</b><br>
[% knum = knum + 1 %]
[% END %]
[% END %]
[% END %]
<input type="submit" value="Commit">
<input type="hidden" name="form_name" value="process_bug">
<p>
<font size="+1">
<b>
<a href="show_activity.cgi?id=[% bug.bug_id %]">View Bug Activity</a>
&nbsp; | &nbsp;
<a href="long_list.cgi?buglist=[% bug.bug_id %]">Format For Printing</a>
</b>
</font>
[% IF user.canmove %]
&nbsp; <font size="+1"><b> | </b></font> &nbsp;
<input type="submit" name="action"
value="[% Param("move-button-text") %]">
[% END %]
</p>
</form>
[%# *** Additional Comments *** %]
<table>
<tr>
<td align="left">
<b>
<a name="c0" href="#c0">Description</a>:
</b>
</td>
<td align="right" width="100%">
Opened: [% bug.creation_ts %]
</td>
</tr>
</table>
<hr>
[% PROCESS show/comments.tmpl
comments = bug.comments
%]
<hr>
[% PROCESS show/navigate.html.tmpl %]
<br>
[% INCLUDE global/footer %]
[%############################################################################%]
[%# Block for dependencies #%]
[%############################################################################%]
[% BLOCK dependencies %]
<th align="right">Bug [% bug.bug_id %] [%+ dep.title %]:</th>
<td>
[% FOREACH depbug = bug.${dep.fieldname} %]
[% GetBugLink(depbug, depbug) %][% " " %]
[% END %]
</td>
<td>
<input name="[% dep.fieldname %]"
value="[% bug.${dep.fieldname}.join(', ') %]">
</td>
[% END %]
[%############################################################################%]
[%# Block for SELECT fields #%]
[%############################################################################%]
[% BLOCK select %]
<td>
<select name="[% selname %]">
[% FOREACH x = ${selname} %]
<option value="[% x FILTER html %]"
[% " selected" IF x == bug.${selname} %]>[% x FILTER html %]
</option>
[% END %]
</select>
</td>
<td>&nbsp;</td>
[% END %]

Просмотреть файл

@ -0,0 +1,54 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% IF bug_list.size > 0 %]
[% this_bug_idx = lsearch(bug_list, bug.bug_id) %]
<b>Bug List:</b>
[% IF this_bug_idx != -1 %]
([% this_bug_idx + 1 %] of [% bug_list.size %])
[% END %]
<a href="show_bug.cgi?id=[% bug_list.first %]">First</a>
<a href="show_bug.cgi?id=[% bug_list.last %]">Last</a>
[% IF this_bug_idx != -1 %]
[% IF this_bug_idx > 0 %]
[% prev_bug = this_bug_idx - 1 %]
<a href="show_bug.cgi?id=[% bug_list.$prev_bug %]">Prev</a>
[% ELSE %]
<i><font color="#777777">Prev</font></i>
[% END %]
[% IF this_bug_idx + 1 < bug_list.size %]
[% next_bug = this_bug_idx + 1 %]
<a href="show_bug.cgi?id=[% bug_list.$next_bug %]">Next</a>
[% ELSE %]
<i><font color="#777777">Next</font></i>
[% END %]
[% ELSE %]
(This bug is not in your list)
[% END %]
&nbsp;&nbsp;<a href="buglist.cgi?regetlastlist=1">Show list</a>
[% END %]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="query.cgi">Query page</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="enter_bug.cgi">Enter new bug</a>

Просмотреть файл

@ -0,0 +1,156 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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>
# Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Full Text Bug Listing"
%]
[% IF bugs.first %]
[% FOREACH bug = bugs %]
[% PROCESS bug_display %]
[% END %]
[% ELSE %]
<p>
You'd have more luck if you gave me some bug numbers.
</p>
[% END %]
[% INCLUDE global/footer %]
[%###########################################################################%]
[%# Block for an individual bug #%]
[%###########################################################################%]
[% BLOCK bug_display %]
<img src="1x1.gif" width="1" height="80" align="left">
<div align="center">
<b>
<font ="+3">Bug [% bug.bug_id %] - [% bug.short_desc FILTER html %]</font>
</b>
</div>
<table width="100%">
<tr>
<td>
<b>Bug#:</b>
<a href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a>
</td>
[% PROCESS cell attr = { description => "Product",
name => "product" } %]
[% PROCESS cell attr = { description => "Version",
name => "version" } %]
[% PROCESS cell attr = { description => "Platform",
name => "rep_platform" } %]
</tr>
<tr>
[% PROCESS cell attr = { description => "OS/Version",
name => "op_sys" } %]
[% PROCESS cell attr = { description => "Status",
name => "bug_status" } %]
[% PROCESS cell attr = { description => "Severity",
name => "bug_severity" } %]
[% PROCESS cell attr = { description => "Priority",
name => "priority" } %]
</tr>
<tr>
[% PROCESS cell attr = { description => "Resolution",
name => "resolution" } %]
[% PROCESS cell attr = { description => "Assigned To",
name => "assigned_to" } %]
[% PROCESS cell attr = { description => "Reported By",
name => "reporter" } %]
[% IF Param('useqacontact') %]
[% PROCESS cell attr = { description => "QA Contact",
name => "qa_contact" } %]
[% END %]
</tr>
<tr>
<td colspan="2">
<b>Component:</b>&nbsp;
[% bug.component %]
</td>
<td colspan="2">
[% IF Param('usetargetmilestone') %]
<b>Target Milestone:</b>&nbsp;
[% bug.target_milestone FILTER html %]
[% END %]
</td>
</tr>
<tr>
<td colspan="4">
<b>URL:</b>&nbsp;
<A HREF="[% bug.bug_file_loc %]">[% bug.bug_file_loc FILTER html %]</a>
</tr>
<tr>
<td colspan="4">
<b>Summary:</b>&nbsp;[% bug.short_desc FILTER html %]
</td>
</tr>
[% IF use_keywords %]
<tr>
<td colspan="4">
<b>Keywords: </b>&nbsp;[% bug.keywords FILTER html %]
</td>
</tr>
[% END %]
[% IF Param("usestatuswhiteboard") %]
<tr>
<td colspan="4">
<b>Status Whiteboard:</b>&nbsp;
[% bug.status_whiteboard FILTER html %]
</td>
</tr>
[% END %]
<tr>
<td colspan="4">
<b>Description:</b>
</td>
</tr>
</table>
[% PROCESS show/comments.tmpl
comments = bug.comments %]
<hr>
[% END %]
[%###########################################################################%]
[%# Block for standard table cells #%]
[%###########################################################################%]
[% BLOCK cell %]
<td>
<b>[% attr.description%]:</b>&nbsp;
[% bug.${attr.name} FILTER html %]
</td>
[% END %]

Просмотреть файл

@ -0,0 +1,46 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Remove your votes?"
%]
<p>
You are about to remove all of your bug votes. Are you sure you wish to
remove your vote from every bug you've voted on?
</p>
<form action="votes.cgi" method="post">
<input type="hidden" name="action" value="vote">
<p>
<input type="radio" name="delete_all_votes" value="1">
Yes, delete all my votes
</p>
<p>
<input type="radio" name="delete_all_votes" value="0" checked="checked">
No, go back and review my votes
</p>
<p>
<input type="submit" value="Submit">
</p>
</form>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,49 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Show Votes"
h2 = "Bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
%]
<table cellspacing="4">
<tr>
<th>Who</th>
<th>Number of votes</th>
</tr>
[% FOREACH user = users %]
<tr>
<td>
<a href="votes.cgi?action=show_user&user=[% user.name %]">
[% user.name %]
</a>
</td>
<td align="right">
[% user.count %]
</td>
</tr>
[% END %]
</table>
<p>Total votes: [% total %]</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,130 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Show Votes"
h2 = user.name
%]
[% IF votes_recorded %]
<p>
<font color="red">
The changes to your votes have been saved.
</font>
</p>
[% ELSE %]
<br>
[% END %]
[% IF products.size %]
<form action="votes.cgi">
<input type="hidden" name="action" value="vote">
<table cellspacing="4">
<tr>
<td></td>
<th>Bug #</th>
<th>Summary</th>
<th>Votes</th>
</tr>
[% FOREACH product = products %]
<tr>
<th>[% product.name FILTER html %]</th>
<td></td>
[% IF product.maxperbug < product.maxvotes AND
product.maxperbug > 1 %]
<td>
<font size="-1">
(Note: only [% product.maxperbug %] vote
[% "s" IF product.maxperbug != 1 %] allowed per bug in
this product.)
</font>
</td>
[% END %]
</tr>
[% FOREACH bug = product.bugs %]
<tr>
<td></td>
<td>
[% "<strike>" IF NOT bug.opened %]
<a href="show_bug.cgi?id=[% bug.id %]">
[% bug.id %]</a>
[% "</strike>" IF NOT bug.opened %]
</td>
<td>
<a href="votes.cgi?action=show_bug&bug_id=[% bug.id %]">
[% bug.summary FILTER html %]
</a>
</td>
<td align="right">
[% IF user.canedit %]
[% IF product.onevoteonly %]
<input type="checkbox" name="[% bug.id %]" value="1"
[% " checked" IF bug.count %]>
[% ELSE %]
<input name="[% bug.id %]" value="[% bug.count %]"
size="2">
[% END %]
[% ELSE %]
[% bug.count %]
[% END %]
</td>
</tr>
[% END %]
<tr>
<td></td>
<td colspan="3">[% product.total %] vote
[% "s" IF product.total != 1 %] used out of [% product.maxvotes %]
allowed.
<br>
<br>
</td>
</tr>
[% END %]
</table>
[% IF user.canedit %]
<input type="submit" value="Change My Votes">
<br>
<br>
To change your votes, type in new numbers (using zero to
mean no votes) or change the checkbox, and then click
<b>Change My Votes</b>.
[% END %]
</form>
[% ELSE %]
<p>
[% IF user.canedit %]
You are
[% ELSE %]
This user is
[% END %]
currently not voting on any bugs.
</p>
[% END %]
<p>
<a href="votehelp.html">Help with voting</a>.
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,42 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% DEFAULT title = "Choose a Product" %]
[% INCLUDE global/header %]
<table>
[% FOREACH p = proddesc.keys.sort %]
<tr>
<th align="right" valign="top">
<a href="[% target %]?product=[% p FILTER uri %]">
[% p FILTER html %]</a>:
</th>
[% IF proddesc.$p %]
<td valign="top">&nbsp;[% proddesc.$p %]</td>
[% END %]
</tr>
[% END %]
</table>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,57 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% UNLESS header_done %]
[% INCLUDE global/header %]
[% END %]
<tt>
<p>
Bugzilla has suffered an internal error. Please save this page and send
it to [% Param("maintainer") %] with details of what you were doing at
the time this message appeared.
</p>
<script> <!--
document.write("<p>URL: " + document.location + "</p>");
// -->
</script>
</tt>
<table cellpadding="20">
<tr>
<td bgcolor="#ff0000">
<font size="+2">
[% error %]
</font>
</td>
</tr>
</table>
[% IF variables %]
<pre>
Variables:
[% FOREACH key = variables.keys %]
[%+ key %]: [%+ variables.$key %]
[% END %]
</pre>
[% END %]
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,6 @@
<!-- 1.0@bugzilla.org -->
[% PerformSubsts(Param('footerhtml')) %]
</body>
</html>

Просмотреть файл

@ -0,0 +1,64 @@
<!-- 1.0@bugzilla.org -->
[% DEFAULT
title = ""
h1 = title
h2 = ""
extra = ""
jscript = ""
style = ""
message = ""
%]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>[% title FILTER html %]</title>
[% Param('headerhtml') %]
[% jscript %]
<script type="application/x-javascript">
<!--
[%+ INCLUDE "help/show-hide.js.tmpl" %]
// -->
</script>
[% IF style %]
<style type="text/css">
[% style %]
</style>
[% END %]
[% IF style_url %]
<link href="[% style_url %]" rel="stylesheet" type="text/css">
[% END %]
</head>
<body [% Param('bodyhtml') %][% " " %][% extra %]>
[% PerformSubsts(Param('bannerhtml')) %]
[% IF h1 || h2 %]
<table border="0" cellspacing="0">
<tr>
<td valign="top" align="left">
<table border="0" cellpadding="0" cellspacing="2">
<tr>
<td valign="top" align="left" nowrap>
<font size="+1"><b>[% h1 %]</b></font>
</td>
</tr>
</table>
</td>
<td valign="middle">&nbsp;</td>
<td valign="middle" align="left">[% h2 %]</td>
</tr>
</table>
[% END %]
[% IF message %]
<table width="100%" cellspacing="0" cellpadding="5" border="1"><tr><td>
<font color="green">[% message %]</font>
</td></tr></table>
[% END %]

Просмотреть файл

@ -0,0 +1,32 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[%# INTERFACE:
# form: hash; the form fields/values for which to generate hidden fields.
# exclude: string; a regular expression matching fields to exclude
# from the list of hidden fields generated by this template
#%]
[%# Generate hidden form fields for non-excluded fields. %]
[% FOREACH field = form %]
[% NEXT IF field.key.search(exclude) %]
<input type="hidden" name="[% field.key %]" value="[% field.value FILTER html %]">
[% END %]

Просмотреть файл

@ -0,0 +1,17 @@
<!-- 1.0@bugzilla.org -->
[% DEFAULT title = "Bugzilla Message" %]
[% PROCESS global/header %]
[%# The "header" template automatically displays the contents of a "message"
variable if it finds one, so it is not necessary to display the message
here. %]
[%# Display a URL if the calling script has included one. %]
[% IF url && link %]
<p>
<a href="[% url %]">[% link %]</a>
</p>
[% END %]
[% PROCESS global/footer %]

Просмотреть файл

@ -0,0 +1,40 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% UNLESS header_done %]
[% INCLUDE global/header %]
[% END %]
<table cellpadding="20">
<tr>
<td bgcolor="#ff0000">
<font size="+2">
[% error %]
</font>
</td>
</tr>
</table>
<p>
Please press <b>Back</b> and try again.
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,88 @@
<!-- 1.0@bugzilla.org -->
[%# -*- mode: html -*- %]
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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>
# Jacob Steenhagen <jake@acutex.net>
#%]
[% INCLUDE global/header
title = 'Bugzilla Main Page'
%]
<script type="text/javascript" language="JavaScript">
<!--
function addSidebar() {
if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function"))
{
window.sidebar.addPanel ("Bugzilla", "[% Param('urlbase') %]sidebar.cgi", "");
}
else
{
var rv = window.confirm ("This page is enhanced for use with Netscape 6. " + "Would you like to upgrade now?");
if (rv)
document.location.href = "http://home.netscape.com/download/index.html";
}
}
//-->
</script>
<table width="100%"><tr>
<td>
<p>This is where we put in lots of nifty words explaining all about Bugzilla.</p>
But it all boils down to a choice of:
<p>
<a href="query.cgi">Query existing bug reports</a><br>
<a href="enter_bug.cgi">Enter a new bug report</a><br>
<a href="reports.cgi">Get summary reports</a><br>
</p><p>
[% IF username %]
<a href="[% PerformSubsts(Param('mybugstemplate'), subst) %]">My Bugs</a><br>
<a href="userprefs.cgi">Change password or user preferences</a><br>
<a href="relogin.cgi">Logout [% username FILTER html %]</a><br>
[% ELSE %]
<a href="query.cgi?GoAheadAndLogIn=1">Log in to an existing account</a><br>
<a href="createaccount.cgi">Open a new Bugzilla account</a><br>
[% END %]
</p><p>
<a href="javascript:addSidebar()">Add to Sidebar</a> (Requires Mozilla or Netscape 6)<br>
</p>
<form name="f" action="show_bug.cgi" method="get"
onsubmit="QuickSearch(f.id.value); return false;">
<p>
Enter a bug # or some search terms:<br>
<input type="text" name="id">
<input type="submit" value="Show">
<a href="quicksearch.html">[Help]</a>
</p>
</form>
</td>
<td align="right"><img src="ant.jpg" width=329 height=220 border=2 alt="ant.jpg [8.5k]"></td>
</tr></table>
<script type="text/javascript" language="JavaScript" src="localconfig.js"></script>
<script type="text/javascript" language="JavaScript" src="quicksearch.js"></script>
<script type="text/javascript">
<!--
document.forms['f'].id.focus();
//-->
</script>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,51 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Dave Lawrence <dkl@redhat.com>
#%]
[% INCLUDE global/header
title = "Change Columns"
%]
Check which columns you wish to appear on the list, and then click
on submit. (Cookies are required.)
<p>
<form action="colchange.cgi">
<input type="hidden" name="rememberedquery" value="[% buffer %]">
[% FOREACH column = masterlist %]
<input type="checkbox" id="[% column %]" name="column_[% column %]" [% "CHECKED" IF lsearch(collist, column) != -1 %]>
<label for="[% column %]">[% desc.${column} %]</label><br>
[% END %]
</p><p>
<input id="nosplitheader" type="radio" name="splitheader" value="0" [% "CHECKED" IF ! splitheader %]>
<label for="nosplitheader">Normal headers (prettier)</label><br>
<input id="splitheader" type="radio" name="splitheader" value="1" [% "CHECKED" IF splitheader %]>
<label for="splitheader">Stagger headers (often makes list more compact)</label>
</p><p>
<input type="submit" value="Submit">
</form>
<form action="colchange.cgi">
<input type="hidden" name="rememberedquery" value="[% buffer %]">
<input type="hidden" name="resetit" value="1">
<input type="submit" value="Reset to Bugzilla default">
</form>
</p>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,316 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
<script type="text/javascript" language="JavaScript">
var numelements = document.forms.changeform.elements.length;
function SetCheckboxes(value) {
var item;
for (var i=0 ; i<numelements ; i++) {
item = document.forms.changeform.elements[i];
item.checked = value;
}
}
document.write(' <input type="button" value="Uncheck All" onclick="SetCheckboxes(false);">');
document.write(' <input type="button" value="Check All" onclick="SetCheckboxes(true);">');
</script>
<hr />
<p><font size="-1">
To change multiple bugs:
<ol>
<li>Check the bugs you want to change above.</li>
<li>Make your changes in the form fields below. If the change
you are making requires an explanation, include it in
the comments box.</li>
<li>Click the <em>Commit</em> button.</li>
</ol>
</font></p>
<table id="form">
<tr>
<th><label for="product">Product:</label></th>
<td>
[% PROCESS selectmenu menuname = "product"
menuitems = products %]
</td>
<th><label for="version">Version:</label></th>
<td>
[% PROCESS selectmenu menuname = "version"
menuitems = versions %]
</td>
</tr>
<tr>
<th>
<label for="rep_platform">
<a href="bug_status.html#rep_platform">Platform:</a>
</label>
</th>
<td>
[% PROCESS selectmenu menuname = "rep_platform"
menuitems = platforms %]
</td>
<th>
<label for="priority">
<a href="bug_status.html#priority">Priority:</a>
</label>
</th>
<td>
[% PROCESS selectmenu menuname = "priority"
menuitems = priorities %]
</td>
</tr>
<tr>
<th><label for="component">Component:</label></th>
<td>
[% PROCESS selectmenu menuname = "component"
menuitems = components %]
</td>
<th>
<label for="bug_severity">
<a href="bug_status.html#severity">Severity:</a>
</label>
</th>
<td>
[% PROCESS selectmenu menuname = "bug_severity"
menuitems = severities %]
</td>
</tr>
<tr>
<th><label for="target_milestone">Target Milestone:</label></th>
<td colspan="3">
[% PROCESS selectmenu menuname = "target_milestone"
menuitems = targetmilestones %]
</td>
</tr>
[% IF Param("useqacontact") %]
<tr>
<th><label for="qa_contact">QA Contact:</label></th>
<td colspan="3">
<input id="qa_contact"
name="qa_contact"
value="[% dontchange FILTER html %]"
size="32">
</td>
</tr>
[% END %]
<tr>
<th><label for="masscc">CC List:</label></th>
<td colspan="3">
<input id="masscc" name="masscc" size="32">
<select name="ccaction">
<option value="add">Add these to the CC List</option>
<option value="remove">Remove these from the CC List</option>
</select>
</td>
</tr>
[% IF use_keywords %]
<tr>
<th>
<label for="keywords">
<a href="describekeywords.cgi">Keywords:</a>
</label>
</th>
<td colspan="3">
<input id="keywords" name="keywords" size="32">
<select name="keywordaction">
<option value="add">Add these keywords</option>
<option value="delete">Delete these keywords</option>
<option value="makeexact">Make the keywords be exactly this list</option>
</select>
</td>
</tr>
[% END %]
</table>
<input type="hidden" name="multiupdate" value="Y">
<label for="comment"><b>Additional Comments:</b></label><br />
<textarea id="comment" name="comment" rows="5" cols="80" wrap="hard"></textarea><br />
[% IF groups.size > 0 %]
<b>Groupset:</b><br />
<table border="1">
<tr>
<th>Don't<br />change<br />this group<br />restriction</td>
<th>Remove<br />bugs<br />from this<br />group</td>
<th>Add<br />bugs<br />to this<br />group</td>
<th>Group Name:</td>
</tr>
[% FOREACH group = groups %]
<tr>
<td align="center">
<input type="radio" name="bit-[% group.bit %]" value="-1" checked>
</td>
<td align="center">
<input type="radio" name="bit-[% group.bit %]" value="0">
</td>
[% IF group.isactive %]
<td align="center">
<input type="radio" name="bit-[% group.bit %]" value="1">
</td>
[% ELSE %]
<td>&nbsp;</td>
[% foundinactive = 1 %]
[% END %]
<td>
[% IF group.isactive %]
[% group.description %]
[% ELSE %]
[% group.description FILTER strike %]
[% END %]
</td>
</tr>
[% END %]
</table>
[% IF foundinactive %]
<font size="-1">(Note: Bugs may not be added to <strike>inactive
groups</strike>, only removed.)</font><br />
[% END %]
[% END %]
[% knum = 0 %]
<input id="knob-none" type="radio" name="knob" value="none" CHECKED>
<label for="knob-none">Do nothing else</label><br />
[% IF bugstatuses.size == 1 && bugstatuses.0 == unconfirmedstate %]
[% knum = knum + 1 %]
<input id="knob-confirm" type="radio" name="knob" value="confirm">
<label for="knob-confirm">
Confirm bugs (change status to <b>NEW</b>)
</label><br />
[% END %]
[% knum = knum + 1 %]
<input id="knob-accept" type="radio" name="knob" value="accept">
<label for="knob-accept">
Accept bugs (change status to <b>ASSIGNED</b>)
</label><br />
[%# If all the bugs being changed are open, allow the user to close them. %]
[% IF !bugstatuses.containsany(closedstates) %]
[% knum = knum + 1 %]
<input id="knob-clearresolution" type="radio" name="knob" value="clearresolution">
<label for="knob-clearresolution">Clear the resolution</label><br />
[% knum = knum + 1 %]
<input id="knob-resolve" type="radio" name="knob" value="resolve">
<label for="knob-resolve">
Resolve bugs, changing <A HREF="bug_status.html">resolution</A> to
</label>
<select name="resolution" onchange="document.forms.changeform.knob[[% knum %]].checked=true">
[% FOREACH resolution = resolutions %]
[% NEXT IF !resolution %]
<option value="[% resolution FILTER html %]" [% selected IF resolution == "FIXED" %]>
[% resolution FILTER html %]
</option>
[% END %]
</select><br />
[% END %]
[%# If all the bugs are closed, allow the user to reopen them. %]
[% IF !bugstatuses.containsany(openstates) %]
[% knum = knum + 1 %]
<input id="knob-reopen" type="radio" name="knob" value="reopen">
<label for="knob-reopen">Reopen bugs</label><br />
[% END %]
[% IF bugstatuses.size == 1 %]
[% IF bugstatuses.contains('RESOLVED') %]
[% knum = knum + 1 %]
<input id="knob-verify" type="radio" name="knob" value="verify">
<label for="knob-verify">Mark bugs as <b>VERIFIED</b></label><br />
[% ELSIF bugstatuses.contains('VERIFIED') %]
[% knum = knum + 1 %]
<input id="knob-close" type="radio" name="knob" value="close">
<label for="knob-close">Mark bugs as <b>CLOSED</b></label><br />
[% END %]
[% END %]
[% knum = knum + 1 %]
<input id="knob-reassign" type="radio" name="knob" value="reassign">
<label for="knob-reassign"><a href="bug_status.html#assigned_to">
Reassign</A> bugs to
</label>
<input name="assigned_to"
value="[% user FILTER html %]"
onchange="document.forms.changeform.knob[[% knum %]].checked = true;"
size="32"><br />
[% knum = knum + 1 %]
<input id="knob-reassignbycomponent"
type="radio"
name="knob"
value="reassignbycomponent">
<label for="knob-reassignbycomponent">
Reassign bugs to owner of selected component
</label><br />
<input type="submit" value="Commit">
[% IF ismover %]
<input type="submit" name="action" value="[% Param('move-button-text') %]">
[% END %]
[%############################################################################%]
[%# Select Menu Block #%]
[%############################################################################%]
[% BLOCK selectmenu %]
<select id="[% menuname %]" name="[% menuname %]">
<option value="[% dontchange FILTER html %]" selected>
[% dontchange FILTER html %]
</option>
[% FOREACH menuitem = menuitems %]
<option value="[% menuitem FILTER html %]">[% menuitem FILTER html %]</option>
[% END %]
</select>
[% END %]

Просмотреть файл

@ -0,0 +1,54 @@
[% template_version = "1.0@bugzilla.org" %]
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
<?xml version="1.0"?>
<!-- [% template_version %] -->
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:bz="http://www.bugzilla.org/rdf#">
<bz:result about="[% Param('urlbase') %]buglist.cgi?[% urlquerypart FILTER html %]">
<bz:bugs>
<Seq>
[% FOREACH bug = bugs %]
<li>
<bz:bug about="[% Param('urlbase') %]show_bug.cgi?id=[% bug.id %]">
<bz:id>[% bug.id %]</bz:id>
[% FOREACH column = displaycolumns %]
<bz:[% column %]>[% bug.$column FILTER html %]</bz:[% column %]>
[% END %]
</bz:bug>
</li>
[% END %]
</Seq>
</bz:bugs>
</bz:result>
</RDF>

Просмотреть файл

@ -0,0 +1,45 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[%############################################################################%]
[%# Initialization #%]
[%############################################################################%]
[% DEFAULT title = "Bug List" %]
[% title = title FILTER html %]
[%############################################################################%]
[%# Bug Table #%]
[%############################################################################%]
<html>
<head>
<title>[% title %]</title>
<link href="css/buglist.css" rel="stylesheet" type="text/css" />
</head>
<body>
[% PROCESS buglist/table.tmpl %]
</body>
</html>

Просмотреть файл

@ -0,0 +1,161 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[%############################################################################%]
[%# Template Initialization #%]
[%############################################################################%]
[% DEFAULT title = "Bug List" %]
[% style_url = "css/buglist.css" %]
[%############################################################################%]
[%# Page Header #%]
[%############################################################################%]
[% PROCESS global/header
title = title
style = style
%]
<div align="center">
<b>[% currenttime %]</b><br />
[% IF debug %]
<p>[% query FILTER html %]</p>
[% END %]
[% IF quip %]
<a href="quips.cgi"><i>[% quip FILTER html %]</i></a>
[% END %]
</div>
[% IF toolong %]
<h2>
This list is too long for Bugzilla's little mind; the
Next/Prev/First/Last buttons won't appear on individual bugs.
</h2>
[% END %]
<hr />
[%############################################################################%]
[%# Preceding Status Line #%]
[%############################################################################%]
[% IF bugs.size > 9 %]
[% bugs.size %] bugs found.
[% END %]
[%############################################################################%]
[%# Start of Change Form #%]
[%############################################################################%]
[% IF dotweak %]
<form name="changeform" method="post" action="process_bug.cgi">
[% END %]
[%############################################################################%]
[%# Bug Table #%]
[%############################################################################%]
[% FLUSH %]
[% PROCESS buglist/table.tmpl %]
[%############################################################################%]
[%# Succeeding Status Line #%]
[%############################################################################%]
[% IF bugs.size == 0 %]
Zarro Boogs found.
<p>
<a href="query.cgi">Query Page</a>
&nbsp;&nbsp;<a href="enter_bug.cgi">Enter New Bug</a>
<a href="query.cgi?[% urlquerypart %]">Edit this query</a>
</p>
[% ELSIF bugs.size == 1 %]
One bug found.
[% ELSE %]
[% bugs.size %] bugs found.
[% END %]
<br />
[%############################################################################%]
[%# Rest of Change Form #%]
[%############################################################################%]
[% IF dotweak %]
[% PROCESS "buglist/change-form.tmpl" %]
</form>
<hr />
[% END %]
[%############################################################################%]
[%# Navigation Bar #%]
[%############################################################################%]
[% IF bugs.size > 0 %]
<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> &nbsp;&nbsp;
<a href="enter_bug.cgi">Enter New Bug</a> &nbsp;&nbsp;
<a href="colchange.cgi?[% urlquerypart %]">Change Columns</a> &nbsp;&nbsp;
[% IF bugs.size > 1 && caneditbugs && !dotweak %]
<a href="buglist.cgi?[% urlquerypart %]
[%- "&order=$order" FILTER uri html IF order %]&tweak=1">Change Several
Bugs at Once</a>
&nbsp;&nbsp;
[% END %]
[% IF bugowners %]
<a href="mailto:[% bugowners %]">Send Mail to Bug Owners</a> &nbsp;&nbsp;
[% END %]
<a href="query.cgi?[% urlquerypart %]">Edit this Query</a> &nbsp;&nbsp;
</form>
[% END %]
[%############################################################################%]
[%# Page Footer #%]
[%############################################################################%]
[% PROCESS global/footer %]

Просмотреть файл

@ -0,0 +1,65 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Bugzilla Quip System"
h1 = "Add your own clever headline"
%]
[% IF added_quip %]
<p>
<font color="red">
Your quip '<tt>[% added_quip FILTER html %]</tt>' has been added.
</font>
</p>
[% END %]
<p>
Bugzilla will pick a random quip for the headline on each bug list, and
you can extend the quip list. Type in something clever or funny or boring
(but not obscene or offensive, please) and bonk on the button.
</p>
<form method="post" action="quips.cgi">
<input type="hidden" name="action" value="add" />
<input size="80" name="quip" />
<p>
<input type="submit" value="Add This Quip" />
</p>
</form>
[% IF show_quips %]
<h2>
Existing quips:
</h2>
<ul>
[% FOREACH quip = quips %]
<li>[% quip %]</li>
[% END %]
</ul>
[% ELSE %]
<p>
Those who like their wisdom in large doses can
<a href="quips.cgi?action=show">view the whole quip list</a>.
</p>
[% END %]
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,36 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
<html>
<head>
<title>Bugzilla is pondering your query</title>
</head>
<body>
<h1 style="margin-top: 20%; text-align: center;">Please stand by ...</h1>
[% IF debug %]
<p>
<code>[% query FILTER html %]</code>
</p>
[% END %]
</body>
</html>

Просмотреть файл

@ -0,0 +1,143 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Myk Melez <myk@mozilla.org>
#%]
[%############################################################################%]
[%# Initialization #%]
[%############################################################################%]
[%# Columns whose titles or values should be abbreviated to make the list
# more compact. For columns whose titles should be abbreviated,
# the shortened title is included. For columns whose values should be
# abbreviated, a maximum length is provided along with the ellipsis that
# should be added to an abbreviated value, if any.
#%]
[% abbrev =
{
"severity" => { size => 3 , title => "Sev" } ,
"priority" => { size => 3 , title => "Pri" } ,
"platform" => { size => 3 , title => "Plt" } ,
"status" => { size => 4 } ,
"reporter" => { size => 45 , ellipsis => "..." } ,
"owner" => { size => 45 , ellipsis => "..." } ,
"qa_contact" => { size => 45 , ellipsis => "..." , title => "QAContact" } ,
"resolution" => { size => 4 } ,
"summary" => { size => 60 , ellipsis => "..." } ,
"status_whiteboard" => { title => "StatusSummary" } ,
"component" => { size => 8 , title => "Comp" } ,
"product" => { size => 8 } ,
"version" => { size => 5 , title => "Vers" } ,
"os" => { size => 4 } ,
"target_milestone" => { title => "TargetM" } ,
}
%]
[%############################################################################%]
[%# Table Header #%]
[%############################################################################%]
[% tableheader = BLOCK %]
<table class="bz_buglist" cellspacing="0" cellpadding="4" width="100%">
<colgroup>
<col class="bz_id_column">
[% FOREACH id = displaycolumns %]
<col class="bz_[% id %]_column">
[% END %]
</colgroup>
<tr align="left">
<th colspan="[% splitheader ? 2 : 1 %]">
<a href="buglist.cgi?[% urlquerypart %]&amp;order=bugs.bug_id">ID</a>
</th>
[% IF splitheader %]
[% FOREACH id = displaycolumns %]
[% NEXT IF loop.count() % 2 == 0 %]
[% column = columns.$id %]
[% PROCESS columnheader %]
[% END %]
</tr><tr align="left"><th>&nbsp;</th>
[% FOREACH id = displaycolumns %]
[% NEXT UNLESS loop.count() % 2 == 0 %]
[% column = columns.$id %]
[% PROCESS columnheader %]
[% END %]
[% ELSE %]
[% FOREACH id = displaycolumns %]
[% column = columns.$id %]
[% PROCESS columnheader %]
[% END %]
[% END %]
</tr>
[% END %]
[% BLOCK columnheader %]
<th colspan="[% splitheader ? 2 : 1 %]">
<a href="buglist.cgi?[% urlquerypart %]&amp;order=
[% column.name FILTER uri html %]
[% ",$order" FILTER uri html IF order %]">
[%- abbrev.$id.title || column.title -%]</a>
</th>
[% END %]
[%############################################################################%]
[%# Bug Table #%]
[%############################################################################%]
[% FOREACH bug = bugs %]
[% FLUSH IF loop.count() % 10 == 1 %]
[%# At the beginning of every hundred bugs in the list, start a new table. %]
[% IF loop.count() % 100 == 1 %]
[% tableheader %]
[% END %]
<tr class="bz_[% bug.severity %] bz_[% bug.priority %] [%+ "bz_secure" IF (bug.groupset && !usebuggroups) %]">
<td>
[% IF dotweak %]<input type="checkbox" name="id_[% bug.id %]">[% END %]
<a href="show_bug.cgi?id=[% bug.id %]">[% bug.id %]</a>
</td>
[% FOREACH column = displaycolumns %]
<td>
[%+ bug.$column.truncate(abbrev.$column.size, abbrev.$column.ellipsis) FILTER html %]
</td>
[% END %]
</tr>
[%# At the end of every hundred bugs in the list, or at the end of the list,
# end the current table.
#%]
[% IF loop.last() || loop.count() % 100 == 0 %]
</table>
[% END %]
[% END %]

Просмотреть файл

@ -0,0 +1,88 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Bradley Baetz <bbaetz@student.usyd.edu.au>
#%]
[% filtered_product = product FILTER html %]
[% INCLUDE global/header
title = "Components for $product"
h2 = filtered_product %]
[% IF Param("useqacontact") %]
[% numcols = 3 %]
[% ELSE %]
[% numcols = 2 %]
[% END %]
[% IF components.size == 0 %]
This product has no components.
[% ELSE %]
<table>
<tr>
<th align="left">Component</th>
<th align="left">Default Owner</th>
[% IF Param("useqacontact") %]
<th align="left">Default QA Contact</th>
[% END %]
</tr>
[% FOREACH comp = components.sort %]
[% INCLUDE describe_comp %]
[% END %]
<tr>
<td colspan='[% numcols %]'>
<hr>
</td>
</tr>
</table>
[% END %]
[% INCLUDE global/footer %]
[%############################################################################%]
[%# BLOCK for components %]
[%############################################################################%]
[% BLOCK describe_comp %]
<tr>
<td colspan="[% numcols %]">
<hr>
</td>
</tr>
<tr>
<td rowspan='2'>
<a name="[% comp.name FILTER html %]">[% comp.name FILTER html %]</a>
</td>
<td>
<a href="mailto:[% comp.initialowner %][% Param('emailsuffix') %]">
[% comp.initialowner FILTER html %]</a>
</td>
[% IF Param("useqacontact") %]
<td>
<a href="mailto:[% comp.initialqacontact %][% Param('emailsuffix') %]">
[% comp.initialqacontact %]</a>
</td>
[% END %]
</tr>
<tr>
<td colspan="[% numcols - 1 %]">
[% comp.description %]
</td>
</tr>
[% END %]

Просмотреть файл

@ -0,0 +1,276 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# bugs: list of hashes. May be empty. Each hash has nine members:
# id: integer. The bug number
# count: integer. The number of dupes
# delta: integer. The change in count in the last $changedsince days
# component: string. The bug's component
# bug_severity: string. The bug's severity.
# op_sys: string. The bug's reported OS.
# target_milestone: string. The bug's TM.
# short_desc: string. The bug's summary.
# bug_status: string. The bug's status.
#
# bug_ids: list of integers. May be empty. The IDs of the bugs in $bugs.
# products: list of strings. The products this user can see.
#
# sortby: string. the column on which we are sorting the buglist.
# reverse: boolean. True if we are reversing the current sort.
# maxrows: integer. Max number of rows to display.
# changedsince: integer. The number of days ago for the changedsince column.
# openonly: boolean. True if we are only showing open bugs.
# product: string. Restrict to this product only.
#%]
[% IF product %]
[% title = "Most Frequently Reported Bugs for $product" %]
[% ELSE %]
[% title = "Most Frequently Reported Bugs" %]
[% END%]
[% INCLUDE global/header %]
<p>
<a href="#explanation">What is this data?</a>
<br>
<a href="#params">Change parameters</a>
</p>
[%# *** Column Headers *** %]
<table border>
<tr BGCOLOR="#CCCCCC">
[% FOREACH column = [ { name => "id", description => "Bug #" },
{ name => "count", description => "Dupe<br>Count" },
{ name => "delta",
description => "Change in last<br>$changedsince day(s)" },
{ name => "component", description => "Component" },
{ name => "bug_severity", description => "Severity" },
{ name => "op_sys", description => "Op Sys" },
{ name => "target_milestone",
description => "Target<br>Milestone" },
{ name => "short_desc", description => "Summary" } ]
%]
[%# Small hack to keep delta column out if we don't need it %]
[% NEXT IF column.name == "delta" AND NOT dobefore %]
<td>
<center>
<b>
[% bug_ids_string = bug_ids.join(',') %]
<a href="duplicates.cgi?sortby=[% column.name %]
[% "&reverse=1" IF NOT reverse AND sortby == column.name %]
[% "&maxrows=$maxrows" IF maxrows %]
[% "&changedsince=$changedsince" IF changedsince %]
[% "&openonly=1" IF openonly %]
[% "&product=$product" IF product %]
[% "&bug_id=$bug_ids_string&sortvisible=1" IF sortvisible %]">
[% column.description %]</a>
</b>
</center>
</td>
[% END %]
</tr>
[% IF NOT sortby %]
[% sortby = "count"; reverse = "1" %]
[% END %]
[% IF sortby == "id" OR sortby == "count" OR sortby == "delta" %]
[%# Numeric sort %]
[% sortedbugs = bugs.nsort(sortby) %]
[% ELSE %]
[% sortedbugs = bugs.sort(sortby) %]
[% END %]
[% IF reverse %]
[% bugs = sortedbugs.reverse %]
[% ELSE %]
[% bugs = sortedbugs %]
[% END %]
[%# *** Buglist *** %]
[%# We need to keep track of the bug IDs we are actually displaying, because
# if the user decides to sort the visible list, we need to know what that
# list actually is. %]
[% vis_bug_ids = [] %]
[% FOREACH bug = bugs %]
[% LAST IF loop.index() >= maxrows %]
[% vis_bug_ids.push(bug.id) %]
<tr>
<td>
<center>
[% "<strike>" IF bug.resolution != "" %]
<A HREF="show_bug.cgi?id=[% bug.id %]">[% bug.id %]</a>
[% "</strike>" IF bug.resolution != "" %]
</center>
</td>
<td>
<center>
[% bug.count %]
</center>
</td>
[% IF dobefore %]
<td><center>[% bug.delta %]</center></td>
[% END %]
<td>[% bug.component %]</td>
<td><center>[% bug.bug_severity %]</center></td>
<td><center>[% bug.op_sys %]</center></td>
<td><center>[% bug.target_milestone %]</center></td>
<td>[% bug.short_desc FILTER html %]</td>
</tr>
[% END %]
</table>
<br>
<br>
[%# *** Parameters *** %]
[% bug_ids_string = vis_bug_ids.join(',') %]
<h3><a name="params">Change Parameters</a></h3>
<form method="get" action="duplicates.cgi">
<input type="hidden" name="sortby" value="[% sortby %]" />
<input type="hidden" name="reverse" value="[% reverse %]" />
<input type="hidden" name="bug_id" value="[% bug_ids_string %]">
<table>
<tr>
<td>When sorting or restricting,
work with:</td>
<td>
<input type="radio" name="sortvisible" id="entirelist" value="0"
[% "checked" IF NOT sortvisible %] />
<label for="entirelist">
entire list
</label>
<br />
<input type="radio" name="sortvisible" id="visiblelist" value="1"
[% "checked" IF sortvisible %] />
<label for="visiblelist">
currently visible list
</label>
</td>
<td rowspan="4" valign="top">Restrict to products:</td>
<td rowspan="4" valign="top">
<select name="product" size="5" multiple>
[% FOREACH p = products %]
<option name="[% p %]"
[% " selected" IF product == p %]>[% p %]</option>
[% END %]
</select>
</td>
</tr>
<tr>
<td>Max rows:</td>
<td>
<input size="4" name="maxrows" value="[% maxrows %]" />
</td>
</tr>
<tr>
<td>Change column is change in the last:</td>
<td>
<input size="4" name="changedsince" value="[% changedsince %]" /> days
</td>
</tr>
<tr>
<td>
<label for="openonly">
Open bugs only:
</label>
</td>
<td>
<input type="checkbox" name="openonly" id="openonly" value="1"
[% "checked" IF openonly %] />
</td>
</tr>
</table>
<input type="submit" value="Change" />
</form>
<form method="post" action="buglist.cgi">
<input type="hidden" name="bug_id" value="[% bug_ids_string %]">
<input type="hidden" name="order" value="Reuse same sort as last time">
Or just give this to me as a <input type="submit" value="bug list">.
(Note: the order may not be the same.)
</form>
<hr />
<b>
<a name="explanation">What are "Most Frequently Reported Bugs"?</a>
</b>
<blockquote>
The Most Frequent Bugs page lists the known open bugs which
are reported most frequently in recent builds of Mozilla. It is
automatically generated from the Bugzilla database every 24 hours, by
counting the number of direct and indirect duplicates of bugs.
This information is provided in order to assist in minimizing
the amount of duplicate bugs entered into Bugzilla which in turn cuts down
on development time.
</blockquote>
<b>How do I use this list?</b>
<ul>
<li>Review the most frequent bugs list.</li>
<li>If problem is listed:</li>
<ul>
<li>Click on Bug # link to confirm that you have found the same bug and
comment if you have additional information. Or move on with your testing
of the product.
</li>
</ul>
<li>If problem not listed:</li>
<ul>
<li>Go to the <a href="query.cgi">Bugzilla Search</a>
page to try and locate a similar bug that has already been written.</li>
<li>If you find your bug in Bugzilla, feel free to comment with any new or
additional data you may have.</li>
<li>If you cannot find your problem already documented in Bugzilla, go to
the
<a href="http://www.mozilla.org/quality/help/bug-form.html">Bugzilla
Helper</a>
and post a new bug.</li>
</ul>
</ul>
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,75 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Gervase Markham <gerv@gerv.net>
#%]
[%# INTERFACE:
# keywords: array of hashes. May be empty. Each has has three members:
# name: the name of the keyword
# description: keyword description. May be HTML.
# bugcount: number of bugs with that keyword
# caneditkeywords: boolean. True if this user can edit keywords
%]
[% INCLUDE global/header
title = "Bugzilla Keyword Descriptions"
%]
[% FOREACH keyword = keywords %]
[% IF loop.index % 50 == 0 %]
[% IF loop.index != 0 %]
</table>
[% END %]
<table border="1" cellpadding="4" cellspacing="0">
<tr bgcolor="#6666FF">
<th align="left">Name</th>
<th align="left">Description</th>
<th align="left">Bugs</th>
</tr>
[% END %]
<tr>
<th>
<a name="[% keyword.name FILTER html %]">
[% keyword.name FILTER html %]</a>
</th>
<td>[% keyword.description %]</td>
<td align="right">
[% IF keyword.bugcount > 0 %]
<A HREF="buglist.cgi?keywords=[% keyword.name FILTER uri %]">
[% keyword.bugcount %]</a>
[% ELSE %]
none
[% END %]
</td>
</tr>
[% END %]
[% IF keywords.size > 0 %]
</table>
[% END %]
[% IF caneditkeywords %]
<p>
<a href="editkeywords.cgi">Edit keywords</a>.
</p>
[% END %]
[% INCLUDE global/footer %]

Просмотреть файл

@ -0,0 +1,869 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Chris Lahey <clahey@ximian.com> [javascript fixes]
# Christian Reis <kiko@async.com.br> [javascript rewrite]
# Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Search for bugs"
extra = " onLoad=\"selectProduct(document.forms['queryform']);\""
%]
[%# Note: use Template comments and not JS ones here, to avoid bloating
what we actually send to the browser %]
<script language="JavaScript" type="text/javascript"> <!--
var first_load = true; [%# is this the first time we load the page? %]
var last_sel = new Array(); [%# caches last selection %]
var cpts = new Array();
var vers = new Array();
[% IF Param('usetargetmilestone') %]
var tms = new Array();
[% END %]
[%# Create three arrays of components, versions and target milestones, indexed
# numerically according to the product they refer to. #%]
[% n = 0 %]
[% FOREACH p = product %]
cpts[[% n %]] = [
[%- FOREACH item = componentsbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
vers[[% n %]] = [
[%- FOREACH item = versionsbyproduct.$p -%]'[% item FILTER js %]', [%- END -%]];
[% IF Param('usetargetmilestone') %]
tms[[% n %]] = [
[%- FOREACH item = milestonesbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
[% END %]
[% n = n+1 %]
[% END %]
[%# updateSelect(array, sel, target, merging)
#
# Adds to the target select object all elements in array that
# correspond to the elements selected in source.
# - array should be a array of arrays, indexed by number. the
# array should contain the elements that correspond to that
# product.
# - sel is a list of selected items, either whole or a diff
# depending on merging.
# - target should be the target select object.
# - merging (boolean) determines if we are mergine in a diff or
# substituting the whole selection. a diff is used to optimize adding
# selections.
#
# Example (compsel is a select form control)
#
# var components = Array();
# components[1] = [ 'ComponentA', 'ComponentB' ];
# components[2] = [ 'ComponentC', 'ComponentD' ];
# source = [ 2 ];
# updateSelect(components, source, compsel, 0, 0);
#
# would clear compsel and add 'ComponentC' and 'ComponentD' to it.
#
%]
function updateSelect(array, sel, target, merging) {
var i, item;
[%# If we have no versions/components/milestones %]
if (array.length < 1) {
target.options.length = 0;
return false;
}
if (merging) {
[%# array merging/sorting in the case of multiple selections %]
[%# merge in the current options with the first selection %]
item = merge_arrays(array[sel[0]], target.options, 1);
[%# merge the rest of the selection with the results %]
for (i = 1 ; i < sel.length ; i++) {
item = merge_arrays(array[sel[i]], item, 0);
}
} else if ( sel.length > 1 ) {
[%# here we micro-optimize for two arrays to avoid merging with a
null array %]
item = merge_arrays(array[sel[0]],array[sel[1]], 0);
[%# merge the arrays. not very good for multiple selections. %]
for (i = 2; i < sel.length; i++) {
item = merge_arrays(item, array[sel[i]], 0);
}
} else { [%# single item in selection, just get me the list %]
item = array[sel[0]];
}
[%# clear select %]
target.options.length = 0;
[%# load elements of list into select %]
for (i = 0; i < item.length; i++) {
target.options[i] = new Option(item[i], item[i]);
}
return true;
}
[%# Returns elements in a that are not in b.
# NOT A REAL DIFF: does not check the reverse.
# - a,b: arrays of values to be compare. %]
function fake_diff_array(a, b) {
var newsel = new Array();
var found = false;
[%# do a boring array diff to see who's new %]
for (var ia in a) {
for (var ib in b) {
if (a[ia] == b[ib]) {
found = true;
}
}
if (!found) {
newsel[newsel.length] = a[ia];
}
found = false;
}
return newsel;
}
[%# takes two arrays and sorts them by string, returning a new, sorted
# array. the merge removes dupes, too.
# - a, b: arrays to be merge.
# - b_is_select: if true, then b is actually an optionitem and as
# such we need to use item.value on it. %]
function merge_arrays(a, b, b_is_select) {
var pos_a = 0;
var pos_b = 0;
var ret = new Array();
var bitem, aitem;
[%# iterate through both arrays and add the larger item to the return
list. remove dupes, too. Use toLowerCase to provide
case-insensitivity. %]
while ((pos_a < a.length) && (pos_b < b.length)) {
if (b_is_select) {
bitem = b[pos_b].value;
} else {
bitem = b[pos_b];
}
aitem = a[pos_a];
[%# smaller item in list a %]
if (aitem.toLowerCase() < bitem.toLowerCase()) {
ret[ret.length] = aitem;
pos_a++;
} else {
[%# smaller item in list b %]
if (aitem.toLowerCase() > bitem.toLowerCase()) {
ret[ret.length] = bitem;
pos_b++;
} else {
[%# list contents are equal, inc both counters. %]
ret[ret.length] = aitem;
pos_a++;
pos_b++;
}
}
}
[%# catch leftovers here. these sections are ugly code-copying. %]
if (pos_a < a.length) {
for (; pos_a < a.length ; pos_a++) {
ret[ret.length] = a[pos_a];
}
}
if (pos_b < b.length) {
for (; pos_b < b.length; pos_b++) {
if (b_is_select) {
bitem = b[pos_b].value;
} else {
bitem = b[pos_b];
}
ret[ret.length] = bitem;
}
}
return ret;
}
[%# Returns an array of indexes or values from a select form control.
# - control: select control from which to find selections
# - findall: boolean, store all options when true or just the selected
# indexes
# - want_values: boolean; we store values when true and indexes when
# false %]
function getSelection(control, findall, want_values) {
var ret = new Array();
if ((!findall) && (control.selectedIndex == -1)) {
return ret;
}
for (var i=0; i<control.length; i++) {
if (findall || control.options[i].selected) {
ret[ret.length] = want_values ? control.options[i].value : i;
}
}
return ret;
}
[%# Selects items in control that have index defined in sel
# - control: SELECT control to be restored
# - selnames: array of indexes in select form control %]
function restoreSelection(control, selnames) {
[%# right. this sucks. but I see no way to avoid going through the
# list and comparing to the contents of the control. %]
for (var j=0; j < selnames.length; j++) {
for (var i=0; i < control.options.length; i++) {
if (control.options[i].value == selnames[j]) {
control.options[i].selected = true;
}
}
}
}
[%# selectProduct reads the selection from f.product and updates
# f.version, component and target_milestone accordingly.
# - f: a form containing product, component, varsion and
# target_milestone select boxes.
# globals (3vil!):
# - cpts, vers, tms: array of arrays, indexed by product name. the
# subarrays contain a list of names to be fed to the respective
# selectboxes. For bugzilla, these are generated with perl code
# at page start.
# - first_load: boolean, specifying if it is the first time we load
# the query page.
# - last_sel: saves our last selection list so we know what has
# changed, and optimize for additions. %]
function selectProduct(f) {
[%# this is to avoid handling events that occur before the form
itself is ready, which could happen in buggy browsers. %]
if ((!f) || (!f.product)) {
return;
}
[%# if this is the first load and nothing is selected, no need to
merge and sort all components; perl gives it to us sorted. %]
if ((first_load) && (f.product.selectedIndex == -1)) {
first_load = false;
return;
}
[%# turn first_load off. this is tricky, since it seems to be
redundant with the above clause. It's not: if when we first load
the page there is _one_ element selected, it won't fall into that
clause, and first_load will remain 1. Then, if we unselect that
item, selectProduct will be called but the clause will be valid
(since selectedIndex == -1), and we will return - incorrectly -
without merge/sorting. %]
first_load = false;
[%# - sel keeps the array of products we are selected.
- merging says if it is a full list or just a list of products that
were added to the current selection. %]
var merging = false;
var sel = Array();
[%# if nothing selected, pick all %]
var findall = f.product.selectedIndex == -1;
sel = getSelection(f.product, findall, false);
if (!findall) {
[%# save sel for the next invocation of selectProduct() %]
var tmp = sel;
[%# this is an optimization: if we have just added products to an
existing selection, no need to clear the form controls and add
everybody again; just merge the new ones with the existing
options. %]
if ((last_sel.length > 0) && (last_sel.length < sel.length)) {
sel = fake_diff_array(sel, last_sel);
merging = true;
}
last_sel = tmp;
}
[%# save original options selected %]
var saved_cpts = getSelection(f.component, false, true);
var saved_vers = getSelection(f.version, false, true);
[% IF Param('usetargetmilestone') %]
var saved_tms = getSelection(f.target_milestone, false, true);
[% END %]
[%# do the actual fill/update, reselect originally selected options %]
updateSelect(cpts, sel, f.component, merging);
restoreSelection(f.component, saved_cpts);
updateSelect(vers, sel, f.version, merging);
restoreSelection(f.version, saved_vers);
[% IF Param('usetargetmilestone') %]
updateSelect(tms, sel, f.target_milestone, merging);
restoreSelection(f.target_milestone, saved_tms);
[% END %]
}
// -->
</script>
[% query_variants = [
{ value => "allwordssubstr", description => "contains all of the words/strings" },
{ value => "anywordssubstr", description => "contains any of the words/strings" },
{ value => "substring", description => "contains the string" },
{ value => "casesubstring", description => "contains the string (exact case)" },
{ value => "allwords", description => "contains all of the words" },
{ value => "anywords", description => "contains any of the words" },
{ value => "regexp", description => "matches the regexp" },
{ value => "notregexp", description => "doesn&#8217;t match the regexp" } ] %]
[%# The decent help requires Javascript %]
<script> <!--
document.write("<p><a href='query.cgi?help=1'>Give me help</a> with this form (reloads page.)</p>");
// -->
</script>
<noscript>
<p>
<a href="queryhelp.cgi">Give me help</a> with this form.
</p>
</noscript>
<form method="get" action="buglist.cgi" name="queryform">
[%# *** Summary *** %]
<table>
<tr>
<th align="right">Summary:</th>
<td>
<select name="short_desc_type">
[% FOREACH qv = query_variants %]
<option value="[% qv.value %]"
[% " selected" IF default.short_desc_type.0 == qv.value %]>[% qv.description %]</option>
[% END %]
</select>
</td>
<td>
<input name="short_desc" size="40" value="[% default.short_desc.0 FILTER html %]">
</td>
<td>
<input type="submit" value="Search">
</td>
</tr>
[%# *** Product Component Version Target *** %]
<tr>
<td colspan="4">
<table>
<tr valign="bottom">
<th align="left">Product:</th>
<th align="left"><a href="describecomponents.cgi">Component</a>:</th>
<th align="left">Version:</th>
[% IF (Param("usetargetmilestone")) %]
<th align="left">Target:</th>
[% END %]
</tr>
<tr valign="top">
[%# Can't use the select block here because of onChange and the fact that
'component' is a toolkit reserved word - we use 'component_' instead. %]
<td align="left">
<select name="product" multiple size="5" onChange="selectProduct(this.form);">
[% FOREACH p = product %]
<option value="[% p FILTER html %]"
[% " selected" IF lsearch(default.product, p) != -1 %]>
[% p FILTER html %]</option>
[% END %]
</select>
</td>
<td align="left">
<select name="component" multiple size="5">
[% FOREACH c = component_ %]
<option value="[% c FILTER html %]"
[% " selected" IF lsearch(default.component, c) != -1 %]>
[% c FILTER html %]</option>
[% END %]
</select>
</td>
[% PROCESS select sel = { name => 'version', size => 5 } %]
[% IF Param('usetargetmilestone') && target_milestone.size > 0 %]
[% PROCESS select sel = { name => 'target_milestone', size => 5 } %]
[% END %]
</tr>
</table>
</td>
</tr>
[%# *** Comment URL Whiteboard Keywords *** %]
[% FOREACH field = [
{ name => "long_desc", description => "A&nbsp;comment" },
{ name => "bug_file_loc", description => "The&nbsp;URL" },
{ name => "status_whiteboard", description => "Whiteboard" } ] %]
[% UNLESS field.name == 'status_whiteboard' AND NOT Param('usestatuswhiteboard') %]
<tr>
<th align="right">[% field.description %]:</th>
<td>
<select name="[% field.name %]_type">
[% FOREACH qv = query_variants %]
[% type = "${field.name}_type" %]
<option value="[% qv.value %]"
[% " selected" IF default.$type.0 == qv.value %]>[% qv.description %]</option>
[% END %]
</select>
</td>
<td><input name="[% field.name %]" size="40" value="
[% default.${field.name}.0 FILTER html %]">
</td>
<td></td>
</tr>
[% END %]
[% END %]
[% IF have_keywords %]
<tr>
<th align="right"><a href="describekeywords.cgi">Keywords</a>:</th>
<td>
<select name="keywords_type">
[% FOREACH qv = [
{ name => "anywords", description => "contains any of the keywords" },
{ name => "allwords", description => "contains all of the keywords" },
{ name => "nowords", description => "contains none of the keywords" } ] %]
<option value="[% qv.name %]"
[% " selected" IF default.keywords_type.0 == qv.name %]>
[% qv.description %]</option>
[% END %]
</select>
</td>
<td>
<input name="keywords" size="40" value="[% default.keywords.0 FILTER html %]">
</td>
</tr>
[% END %]
</table>
<hr>
[%# *** Status Resolution Severity Priority Hardware OS *** %]
<table>
<tr>
<th align="left"><a href="queryhelp.cgi#status">Status</a>:</th>
<th align="left"><a href="queryhelp.cgi#resolution">Resolution</a>:</th>
<th align="left"><a href="queryhelp.cgi#severity">Severity</a>:</th>
<th align="left"><a href="queryhelp.cgi#priority">Priority</a>:</th>
<th align="left"><a href="queryhelp.cgi#platform">Hardware</a>:</th>
<th align="left"><a href="queryhelp.cgi#opsys">OS</a>:</th>
</tr>
<tr valign="top">
[% PROCESS select sel = { name => 'bug_status', size => 7 } %]
[% PROCESS select sel = { name => 'resolution', size => 7 } %]
[% PROCESS select sel = { name => 'bug_severity', size => 7 } %]
[% PROCESS select sel = { name => 'priority', size => 7 } %]
[% PROCESS select sel = { name => 'rep_platform', size => 7 } %]
[% PROCESS select sel = { name => 'op_sys', size => 7 } %]
</tr>
</table>
<p>
[%# *** Email Numbering Votes *** %]
<table>
<tr>
<td>
<fieldset>
<legend>
<strong>
<a href="queryhelp.cgi#peopleinvolved">Email</a> and Numbering
</strong>
</legend>
<table>
<tr>
[% FOREACH n = [1, 2] %]
<td>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
Any of:
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="emailassigned_to[% n %]"
id="emailassigned_to[% n %]" value="1"
[% " checked" IF default.emailassigned_to.$n %]>
<label for="emailassigned_to[% n %]">
bug owner
</label>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="emailreporter[% n %]"
id="emailreporter[% n %]" value="1"
[% " checked" IF default.emailreporter.$n %]>
<label for="emailreporter[% n %]">
reporter
</label>
</td>
</tr>
[% IF Param('useqacontact') %]
<tr>
<td>
<input type="checkbox" name="emailqa_contact[% n %]"
id="emailqa_contact[% n %]" value="1"
[% " checked" IF default.emailqa_contact.$n %]>
<label for="emailqa_contact[% n %]">
QA contact
</label>
</td>
</tr>
[% END %]
<tr>
<td>
<input type="checkbox" name="emailcc[% n %]"
id="emailcc[% n %]" value="1"
[% " checked" IF default.emailcc.$n %]>
<label for="emailcc[% n %]">
CC list member
</label>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="emaillongdesc[% n %]"
id="emaillongdesc[% n %]" value="1"
[% " checked" IF default.emaillongdesc.$n %]>
<label for="emaillongdesc[% n %]">
commenter
</label>
</td>
</tr>
<tr>
<td>
<select name="emailtype[% n %]">
[% FOREACH qv = [
{ name => "substring", description => "contains" },
{ name => "exact", description => "is" },
{ name => "regexp", description => "matches regexp" },
{ name => "notregexp", description => "doesn&#8217;t match regexp" } ] %]
<option value="[% qv.name %]"
[% " selected" IF default.emailtype.$n == qv.name %]>[% qv.description %]</option>
[% END %]
</select>
</td>
</tr>
<tr>
<td>
<input name="email[% n %]" size="20" value="[% default.email.$n FILTER html %]">
</td>
</tr>
</table>
</td>
[% END %]
</tr>
</table>
<hr>
<table>
<tr>
<td>
<select name="bugidtype">
<option value="include"[% " selected" IF default.bugidtype.0 == "include" %]>Only include</option>
<option value="exclude"[% " selected" IF default.bugidtype.0 == "exclude" %]>Exclude</option>
</select>
bugs numbered:
</td>
<td>
<input type="text" name="bug_id" value="[% default.bug_id.0 FILTER html %]" size="20">
</td>
</tr>
<tr>
<td></td>
<td>(comma-separated list)</td>
</tr>
<tr>
<td align="right">
Only bugs with at least:
</td>
<td>
<input name="votes" size="3" value="[% default.votes.0 FILTER html %]"> votes
</td>
</tr>
</table>
</fieldset>
</td>
[%# *** Bug Changes *** %]
<td valign="top">
<fieldset>
<legend><strong>Bug Changes</strong></legend>
<dl>
<dt>Only bugs changed in the last </dt>
<dd><input name=changedin size=3 value="[% default.changedin.0 FILTER html %]"> days</dd>
</dl>
<dl>
<dt>Only bugs where any of the fields</dt>
<dd>
<select name="chfield" multiple size="4">
[% FOREACH field = chfield %]
<option value="[% field FILTER html %]"
[% " selected" IF lsearch(default.chfield, field) != -1 %]>
[% field FILTER html %]</option>
[% END %]
</select>
</dd>
<dt>were changed between</dt>
<dd>
<input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
<br>(YYYY-MM-DD)
</dd>
<dt>to this value: (optional)</dt>
<dd>
<input name="chfieldvalue" size="20" value="[% default.chfieldvalue.0 FILTER html %]">
</dd>
</dl>
</fieldset>
</td>
</tr>
[%# *** Action Selection *** %]
<tr>
<td colspan="2">
[% IF NOT userid %]
<input type="hidden" name="cmdtype" value="doit">
[% ELSE %]
<br>
<input type="radio" name="cmdtype" value="doit" checked> Run this query
<br>
[% IF namedqueries.size > 0 %]
<p>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
<input type="radio" name="cmdtype" value="editnamed">
Load my remembered query:
</td>
<td rowspan="3">
<select name="namedcmd">
[% FOREACH query = namedqueries %]
<option value="[% query FILTER html %]">[% query FILTER html %]</option>
[% END %]
</select>
</td>
</tr>
<tr>
<td>
<input type="radio" name="cmdtype" value="runnamed">
Run my remembered query:
</td>
</tr>
<tr>
<td>
<input type="radio" name="cmdtype" value="forgetnamed">
Forget my remembered query:
</td>
</tr>
</table>
</p>
[% END %]
<input type="radio" name="cmdtype" value="asdefault">
Remember this as my default query
<br>
<input type="radio" name="cmdtype" value="asnamed">
Remember this query, and name it:
<input type="text" name="newqueryname">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="tofooter" value="1">
and put it in my page footer
<br>
[% END %]
<br>
<div>
Sort results by:
<select name="order">
[% FOREACH order = orders %]
<option value="[% order FILTER html %]"
[% " selected" IF default.order.0 == order %]>[% order FILTER html %]</option>
[% END %]
</select>
<input type="submit" value="Search">
[% IF userdefaultquery %]
<p>
<a href="query.cgi?nukedefaultquery=1">
Set my default query back to the system default</a>
</p>
[% END %]
</div>
</td>
</tr>
</table>
[%# *** Boolean Charts *** %]
<hr>
[% types = [
{ name => "noop", description => "---" },
{ name => "equals", description => "is equal to" },
{ name => "notequals", description => "is not equal to" },
{ name => "substring", description => "contains the string" },
{ name => "casesubstring", description => "contains the string (exact case)" },
{ name => "notsubstring", description => "does not contain the string" },
{ name => "allwordssubstr", description => "contains all of the strings" },
{ name => "anywordssubstr", description => "contains any of the strings" },
{ name => "regexp", description => "contains regexp" },
{ name => "notregexp", description => "does not contain regexp" },
{ name => "lessthan", description => "is less than" },
{ name => "greaterthan", description => "is greater than" },
{ name => "anywords", description => "contains any of the words" },
{ name => "allwords", description => "contains all of the words" },
{ name => "nowords", description => "contains none of the words" },
{ name => "changedbefore", description => "changed before" },
{ name => "changedafter", description => "changed after" },
{ name => "changedfrom", description => "changed from" },
{ name => "changedto", description => "changed to" },
{ name => "changedby", description => "changed by" } ] %]
<p>
<strong>
<a name="chart" href="queryhelp.cgi#advancedquerying">
Advanced Querying Using Boolean Charts</a>:
</strong>
</p>
[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %]
[% jsmagic = "onclick=\"document.forms[0].action='query.cgi#chart'; document.forms[0].method='POST'; return 1;\"" %]
[% FOREACH chart = default.charts %]
[% chartnum = loop.count - 1 %]
<table>
[% FOREACH row = chart %]
[% rownum = loop.count - 1 %]
<tr>
[% FOREACH col = row %]
[% colnum = loop.count - 1 %]
<td>
<select name="[% "field${chartnum}-${rownum}-${colnum}" %]">
[% FOREACH field = fields %]
<option value="[% field.name %]"
[%- " selected" IF field.name == col.field %]>[% field.description %]</option>
[% END %]
</select>
<select name="[% "type${chartnum}-${rownum}-${colnum}" %]">
[% FOREACH type = types %]
<option value="[% type.name %]"
[%- " selected" IF type.name == col.type %]>[% type.description %]</option>
[% END %]
</select>
<input name="[% "value${chartnum}-${rownum}-${colnum}" %]"
value="[% col.value FILTER html %]">
</td>
[% IF NOT col == row.last %]
<td align="center">
Or
</td>
[% ELSE %]
<td>
[% newor = colnum + 1 %]
<input type="submit" value="Or"
name="cmd-add[% "${chartnum}-${rownum}-${newor}" %]" [% $jsmagic %]>
</td>
[% END %]
[% END %]
</tr>
[% IF NOT row == chart.last %]
<tr>
<td>And</td>
</tr>
[% ELSE %]
<tr>
<td>
[% newand = rownum + 1; newchart = chartnum + 1 %]
<input type="submit" value="And"
name="cmd-add[% "${chartnum}-${newand}-0" %]"[% $jsmagic %]>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="Add another boolean chart"
name="cmd-add[% newchart %]-0-0" [% $jsmagic %]>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
</tr>
[% END %]
[% END %]
</table>
<hr>
[% END %]
<p>Give me a <a href="queryhelp.cgi">clue</a> about how to use this form.</p>
</FORM>
[% INCLUDE global/footer %]
[%############################################################################%]
[%# Block for SELECT fields #%]
[%############################################################################%]
[% BLOCK select %]
<td align="left">
<select name="[% sel.name %]" multiple size="[% sel.size %]">
[% FOREACH name = ${sel.name} %]
<option value="[% name FILTER html %]"
[% " selected" IF lsearch(default.${sel.name}, name) != -1 %]>
[% name FILTER html %]</option>
[% END %]
</select>
</td>
[% END %]

Просмотреть файл

@ -0,0 +1,869 @@
<!-- 1.0@bugzilla.org -->
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Chris Lahey <clahey@ximian.com> [javascript fixes]
# Christian Reis <kiko@async.com.br> [javascript rewrite]
# Gervase Markham <gerv@gerv.net>
#%]
[% INCLUDE global/header
title = "Search for bugs"
extra = " onLoad=\"selectProduct(document.forms['queryform']);\""
%]
[%# Note: use Template comments and not JS ones here, to avoid bloating
what we actually send to the browser %]
<script language="JavaScript" type="text/javascript"> <!--
var first_load = true; [%# is this the first time we load the page? %]
var last_sel = new Array(); [%# caches last selection %]
var cpts = new Array();
var vers = new Array();
[% IF Param('usetargetmilestone') %]
var tms = new Array();
[% END %]
[%# Create three arrays of components, versions and target milestones, indexed
# numerically according to the product they refer to. #%]
[% n = 0 %]
[% FOREACH p = product %]
cpts[[% n %]] = [
[%- FOREACH item = componentsbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
vers[[% n %]] = [
[%- FOREACH item = versionsbyproduct.$p -%]'[% item FILTER js %]', [%- END -%]];
[% IF Param('usetargetmilestone') %]
tms[[% n %]] = [
[%- FOREACH item = milestonesbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
[% END %]
[% n = n+1 %]
[% END %]
[%# updateSelect(array, sel, target, merging)
#
# Adds to the target select object all elements in array that
# correspond to the elements selected in source.
# - array should be a array of arrays, indexed by number. the
# array should contain the elements that correspond to that
# product.
# - sel is a list of selected items, either whole or a diff
# depending on merging.
# - target should be the target select object.
# - merging (boolean) determines if we are mergine in a diff or
# substituting the whole selection. a diff is used to optimize adding
# selections.
#
# Example (compsel is a select form control)
#
# var components = Array();
# components[1] = [ 'ComponentA', 'ComponentB' ];
# components[2] = [ 'ComponentC', 'ComponentD' ];
# source = [ 2 ];
# updateSelect(components, source, compsel, 0, 0);
#
# would clear compsel and add 'ComponentC' and 'ComponentD' to it.
#
%]
function updateSelect(array, sel, target, merging) {
var i, item;
[%# If we have no versions/components/milestones %]
if (array.length < 1) {
target.options.length = 0;
return false;
}
if (merging) {
[%# array merging/sorting in the case of multiple selections %]
[%# merge in the current options with the first selection %]
item = merge_arrays(array[sel[0]], target.options, 1);
[%# merge the rest of the selection with the results %]
for (i = 1 ; i < sel.length ; i++) {
item = merge_arrays(array[sel[i]], item, 0);
}
} else if ( sel.length > 1 ) {
[%# here we micro-optimize for two arrays to avoid merging with a
null array %]
item = merge_arrays(array[sel[0]],array[sel[1]], 0);
[%# merge the arrays. not very good for multiple selections. %]
for (i = 2; i < sel.length; i++) {
item = merge_arrays(item, array[sel[i]], 0);
}
} else { [%# single item in selection, just get me the list %]
item = array[sel[0]];
}
[%# clear select %]
target.options.length = 0;
[%# load elements of list into select %]
for (i = 0; i < item.length; i++) {
target.options[i] = new Option(item[i], item[i]);
}
return true;
}
[%# Returns elements in a that are not in b.
# NOT A REAL DIFF: does not check the reverse.
# - a,b: arrays of values to be compare. %]
function fake_diff_array(a, b) {
var newsel = new Array();
var found = false;
[%# do a boring array diff to see who's new %]
for (var ia in a) {
for (var ib in b) {
if (a[ia] == b[ib]) {
found = true;
}
}
if (!found) {
newsel[newsel.length] = a[ia];
}
found = false;
}
return newsel;
}
[%# takes two arrays and sorts them by string, returning a new, sorted
# array. the merge removes dupes, too.
# - a, b: arrays to be merge.
# - b_is_select: if true, then b is actually an optionitem and as
# such we need to use item.value on it. %]
function merge_arrays(a, b, b_is_select) {
var pos_a = 0;
var pos_b = 0;
var ret = new Array();
var bitem, aitem;
[%# iterate through both arrays and add the larger item to the return
list. remove dupes, too. Use toLowerCase to provide
case-insensitivity. %]
while ((pos_a < a.length) && (pos_b < b.length)) {
if (b_is_select) {
bitem = b[pos_b].value;
} else {
bitem = b[pos_b];
}
aitem = a[pos_a];
[%# smaller item in list a %]
if (aitem.toLowerCase() < bitem.toLowerCase()) {
ret[ret.length] = aitem;
pos_a++;
} else {
[%# smaller item in list b %]
if (aitem.toLowerCase() > bitem.toLowerCase()) {
ret[ret.length] = bitem;
pos_b++;
} else {
[%# list contents are equal, inc both counters. %]
ret[ret.length] = aitem;
pos_a++;
pos_b++;
}
}
}
[%# catch leftovers here. these sections are ugly code-copying. %]
if (pos_a < a.length) {
for (; pos_a < a.length ; pos_a++) {
ret[ret.length] = a[pos_a];
}
}
if (pos_b < b.length) {
for (; pos_b < b.length; pos_b++) {
if (b_is_select) {
bitem = b[pos_b].value;
} else {
bitem = b[pos_b];
}
ret[ret.length] = bitem;
}
}
return ret;
}
[%# Returns an array of indexes or values from a select form control.
# - control: select control from which to find selections
# - findall: boolean, store all options when true or just the selected
# indexes
# - want_values: boolean; we store values when true and indexes when
# false %]
function getSelection(control, findall, want_values) {
var ret = new Array();
if ((!findall) && (control.selectedIndex == -1)) {
return ret;
}
for (var i=0; i<control.length; i++) {
if (findall || control.options[i].selected) {
ret[ret.length] = want_values ? control.options[i].value : i;
}
}
return ret;
}
[%# Selects items in control that have index defined in sel
# - control: SELECT control to be restored
# - selnames: array of indexes in select form control %]
function restoreSelection(control, selnames) {
[%# right. this sucks. but I see no way to avoid going through the
# list and comparing to the contents of the control. %]
for (var j=0; j < selnames.length; j++) {
for (var i=0; i < control.options.length; i++) {
if (control.options[i].value == selnames[j]) {
control.options[i].selected = true;
}
}
}
}
[%# selectProduct reads the selection from f.product and updates
# f.version, component and target_milestone accordingly.
# - f: a form containing product, component, varsion and
# target_milestone select boxes.
# globals (3vil!):
# - cpts, vers, tms: array of arrays, indexed by product name. the
# subarrays contain a list of names to be fed to the respective
# selectboxes. For bugzilla, these are generated with perl code
# at page start.
# - first_load: boolean, specifying if it is the first time we load
# the query page.
# - last_sel: saves our last selection list so we know what has
# changed, and optimize for additions. %]
function selectProduct(f) {
[%# this is to avoid handling events that occur before the form
itself is ready, which could happen in buggy browsers. %]
if ((!f) || (!f.product)) {
return;
}
[%# if this is the first load and nothing is selected, no need to
merge and sort all components; perl gives it to us sorted. %]
if ((first_load) && (f.product.selectedIndex == -1)) {
first_load = false;
return;
}
[%# turn first_load off. this is tricky, since it seems to be
redundant with the above clause. It's not: if when we first load
the page there is _one_ element selected, it won't fall into that
clause, and first_load will remain 1. Then, if we unselect that
item, selectProduct will be called but the clause will be valid
(since selectedIndex == -1), and we will return - incorrectly -
without merge/sorting. %]
first_load = false;
[%# - sel keeps the array of products we are selected.
- merging says if it is a full list or just a list of products that
were added to the current selection. %]
var merging = false;
var sel = Array();
[%# if nothing selected, pick all %]
var findall = f.product.selectedIndex == -1;
sel = getSelection(f.product, findall, false);
if (!findall) {
[%# save sel for the next invocation of selectProduct() %]
var tmp = sel;
[%# this is an optimization: if we have just added products to an
existing selection, no need to clear the form controls and add
everybody again; just merge the new ones with the existing
options. %]
if ((last_sel.length > 0) && (last_sel.length < sel.length)) {
sel = fake_diff_array(sel, last_sel);
merging = true;
}
last_sel = tmp;
}
[%# save original options selected %]
var saved_cpts = getSelection(f.component, false, true);
var saved_vers = getSelection(f.version, false, true);
[% IF Param('usetargetmilestone') %]
var saved_tms = getSelection(f.target_milestone, false, true);
[% END %]
[%# do the actual fill/update, reselect originally selected options %]
updateSelect(cpts, sel, f.component, merging);
restoreSelection(f.component, saved_cpts);
updateSelect(vers, sel, f.version, merging);
restoreSelection(f.version, saved_vers);
[% IF Param('usetargetmilestone') %]
updateSelect(tms, sel, f.target_milestone, merging);
restoreSelection(f.target_milestone, saved_tms);
[% END %]
}
// -->
</script>
[% query_variants = [
{ value => "allwordssubstr", description => "contains all of the words/strings" },
{ value => "anywordssubstr", description => "contains any of the words/strings" },
{ value => "substring", description => "contains the string" },
{ value => "casesubstring", description => "contains the string (exact case)" },
{ value => "allwords", description => "contains all of the words" },
{ value => "anywords", description => "contains any of the words" },
{ value => "regexp", description => "matches the regexp" },
{ value => "notregexp", description => "doesn&#8217;t match the regexp" } ] %]
[%# The decent help requires Javascript %]
<script> <!--
document.write("<p><a href='query.cgi?help=1'>Give me help</a> with this form (reloads page.)</p>");
// -->
</script>
<noscript>
<p>
<a href="queryhelp.cgi">Give me help</a> with this form.
</p>
</noscript>
<form method="get" action="buglist.cgi" name="queryform">
[%# *** Summary *** %]
<table>
<tr>
<th align="right">Summary:</th>
<td>
<select name="short_desc_type">
[% FOREACH qv = query_variants %]
<option value="[% qv.value %]"
[% " selected" IF default.short_desc_type.0 == qv.value %]>[% qv.description %]</option>
[% END %]
</select>
</td>
<td>
<input name="short_desc" size="40" value="[% default.short_desc.0 FILTER html %]">
</td>
<td>
<input type="submit" value="Search">
</td>
</tr>
[%# *** Product Component Version Target *** %]
<tr>
<td colspan="4">
<table>
<tr valign="bottom">
<th align="left">Product:</th>
<th align="left"><a href="describecomponents.cgi">Component</a>:</th>
<th align="left">Version:</th>
[% IF (Param("usetargetmilestone")) %]
<th align="left">Target:</th>
[% END %]
</tr>
<tr valign="top">
[%# Can't use the select block here because of onChange and the fact that
'component' is a toolkit reserved word - we use 'component_' instead. %]
<td align="left">
<select name="product" multiple size="5" onChange="selectProduct(this.form);">
[% FOREACH p = product %]
<option value="[% p FILTER html %]"
[% " selected" IF lsearch(default.product, p) != -1 %]>
[% p FILTER html %]</option>
[% END %]
</select>
</td>
<td align="left">
<select name="component" multiple size="5">
[% FOREACH c = component_ %]
<option value="[% c FILTER html %]"
[% " selected" IF lsearch(default.component, c) != -1 %]>
[% c FILTER html %]</option>
[% END %]
</select>
</td>
[% PROCESS select sel = { name => 'version', size => 5 } %]
[% IF Param('usetargetmilestone') && target_milestone.size > 0 %]
[% PROCESS select sel = { name => 'target_milestone', size => 5 } %]
[% END %]
</tr>
</table>
</td>
</tr>
[%# *** Comment URL Whiteboard Keywords *** %]
[% FOREACH field = [
{ name => "long_desc", description => "A&nbsp;comment" },
{ name => "bug_file_loc", description => "The&nbsp;URL" },
{ name => "status_whiteboard", description => "Whiteboard" } ] %]
[% UNLESS field.name == 'status_whiteboard' AND NOT Param('usestatuswhiteboard') %]
<tr>
<th align="right">[% field.description %]:</th>
<td>
<select name="[% field.name %]_type">
[% FOREACH qv = query_variants %]
[% type = "${field.name}_type" %]
<option value="[% qv.value %]"
[% " selected" IF default.$type.0 == qv.value %]>[% qv.description %]</option>
[% END %]
</select>
</td>
<td><input name="[% field.name %]" size="40" value="
[% default.${field.name}.0 FILTER html %]">
</td>
<td></td>
</tr>
[% END %]
[% END %]
[% IF have_keywords %]
<tr>
<th align="right"><a href="describekeywords.cgi">Keywords</a>:</th>
<td>
<select name="keywords_type">
[% FOREACH qv = [
{ name => "anywords", description => "contains any of the keywords" },
{ name => "allwords", description => "contains all of the keywords" },
{ name => "nowords", description => "contains none of the keywords" } ] %]
<option value="[% qv.name %]"
[% " selected" IF default.keywords_type.0 == qv.name %]>
[% qv.description %]</option>
[% END %]
</select>
</td>
<td>
<input name="keywords" size="40" value="[% default.keywords.0 FILTER html %]">
</td>
</tr>
[% END %]
</table>
<hr>
[%# *** Status Resolution Severity Priority Hardware OS *** %]
<table>
<tr>
<th align="left"><a href="queryhelp.cgi#status">Status</a>:</th>
<th align="left"><a href="queryhelp.cgi#resolution">Resolution</a>:</th>
<th align="left"><a href="queryhelp.cgi#severity">Severity</a>:</th>
<th align="left"><a href="queryhelp.cgi#priority">Priority</a>:</th>
<th align="left"><a href="queryhelp.cgi#platform">Hardware</a>:</th>
<th align="left"><a href="queryhelp.cgi#opsys">OS</a>:</th>
</tr>
<tr valign="top">
[% PROCESS select sel = { name => 'bug_status', size => 7 } %]
[% PROCESS select sel = { name => 'resolution', size => 7 } %]
[% PROCESS select sel = { name => 'bug_severity', size => 7 } %]
[% PROCESS select sel = { name => 'priority', size => 7 } %]
[% PROCESS select sel = { name => 'rep_platform', size => 7 } %]
[% PROCESS select sel = { name => 'op_sys', size => 7 } %]
</tr>
</table>
<p>
[%# *** Email Numbering Votes *** %]
<table>
<tr>
<td>
<fieldset>
<legend>
<strong>
<a href="queryhelp.cgi#peopleinvolved">Email</a> and Numbering
</strong>
</legend>
<table>
<tr>
[% FOREACH n = [1, 2] %]
<td>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
Any of:
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="emailassigned_to[% n %]"
id="emailassigned_to[% n %]" value="1"
[% " checked" IF default.emailassigned_to.$n %]>
<label for="emailassigned_to[% n %]">
bug owner
</label>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="emailreporter[% n %]"
id="emailreporter[% n %]" value="1"
[% " checked" IF default.emailreporter.$n %]>
<label for="emailreporter[% n %]">
reporter
</label>
</td>
</tr>
[% IF Param('useqacontact') %]
<tr>
<td>
<input type="checkbox" name="emailqa_contact[% n %]"
id="emailqa_contact[% n %]" value="1"
[% " checked" IF default.emailqa_contact.$n %]>
<label for="emailqa_contact[% n %]">
QA contact
</label>
</td>
</tr>
[% END %]
<tr>
<td>
<input type="checkbox" name="emailcc[% n %]"
id="emailcc[% n %]" value="1"
[% " checked" IF default.emailcc.$n %]>
<label for="emailcc[% n %]">
CC list member
</label>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="emaillongdesc[% n %]"
id="emaillongdesc[% n %]" value="1"
[% " checked" IF default.emaillongdesc.$n %]>
<label for="emaillongdesc[% n %]">
commenter
</label>
</td>
</tr>
<tr>
<td>
<select name="emailtype[% n %]">
[% FOREACH qv = [
{ name => "substring", description => "contains" },
{ name => "exact", description => "is" },
{ name => "regexp", description => "matches regexp" },
{ name => "notregexp", description => "doesn&#8217;t match regexp" } ] %]
<option value="[% qv.name %]"
[% " selected" IF default.emailtype.$n == qv.name %]>[% qv.description %]</option>
[% END %]
</select>
</td>
</tr>
<tr>
<td>
<input name="email[% n %]" size="20" value="[% default.email.$n FILTER html %]">
</td>
</tr>
</table>
</td>
[% END %]
</tr>
</table>
<hr>
<table>
<tr>
<td>
<select name="bugidtype">
<option value="include"[% " selected" IF default.bugidtype.0 == "include" %]>Only include</option>
<option value="exclude"[% " selected" IF default.bugidtype.0 == "exclude" %]>Exclude</option>
</select>
bugs numbered:
</td>
<td>
<input type="text" name="bug_id" value="[% default.bug_id.0 FILTER html %]" size="20">
</td>
</tr>
<tr>
<td></td>
<td>(comma-separated list)</td>
</tr>
<tr>
<td align="right">
Only bugs with at least:
</td>
<td>
<input name="votes" size="3" value="[% default.votes.0 FILTER html %]"> votes
</td>
</tr>
</table>
</fieldset>
</td>
[%# *** Bug Changes *** %]
<td valign="top">
<fieldset>
<legend><strong>Bug Changes</strong></legend>
<dl>
<dt>Only bugs changed in the last </dt>
<dd><input name=changedin size=3 value="[% default.changedin.0 FILTER html %]"> days</dd>
</dl>
<dl>
<dt>Only bugs where any of the fields</dt>
<dd>
<select name="chfield" multiple size="4">
[% FOREACH field = chfield %]
<option value="[% field FILTER html %]"
[% " selected" IF lsearch(default.chfield, field) != -1 %]>
[% field FILTER html %]</option>
[% END %]
</select>
</dd>
<dt>were changed between</dt>
<dd>
<input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
<br>(YYYY-MM-DD)
</dd>
<dt>to this value: (optional)</dt>
<dd>
<input name="chfieldvalue" size="20" value="[% default.chfieldvalue.0 FILTER html %]">
</dd>
</dl>
</fieldset>
</td>
</tr>
[%# *** Action Selection *** %]
<tr>
<td colspan="2">
[% IF NOT userid %]
<input type="hidden" name="cmdtype" value="doit">
[% ELSE %]
<br>
<input type="radio" name="cmdtype" value="doit" checked> Run this query
<br>
[% IF namedqueries.size > 0 %]
<p>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
<input type="radio" name="cmdtype" value="editnamed">
Load my remembered query:
</td>
<td rowspan="3">
<select name="namedcmd">
[% FOREACH query = namedqueries %]
<option value="[% query FILTER html %]">[% query FILTER html %]</option>
[% END %]
</select>
</td>
</tr>
<tr>
<td>
<input type="radio" name="cmdtype" value="runnamed">
Run my remembered query:
</td>
</tr>
<tr>
<td>
<input type="radio" name="cmdtype" value="forgetnamed">
Forget my remembered query:
</td>
</tr>
</table>
</p>
[% END %]
<input type="radio" name="cmdtype" value="asdefault">
Remember this as my default query
<br>
<input type="radio" name="cmdtype" value="asnamed">
Remember this query, and name it:
<input type="text" name="newqueryname">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="tofooter" value="1">
and put it in my page footer
<br>
[% END %]
<br>
<div>
Sort results by:
<select name="order">
[% FOREACH order = orders %]
<option value="[% order FILTER html %]"
[% " selected" IF default.order.0 == order %]>[% order FILTER html %]</option>
[% END %]
</select>
<input type="submit" value="Search">
[% IF userdefaultquery %]
<p>
<a href="query.cgi?nukedefaultquery=1">
Set my default query back to the system default</a>
</p>
[% END %]
</div>
</td>
</tr>
</table>
[%# *** Boolean Charts *** %]
<hr>
[% types = [
{ name => "noop", description => "---" },
{ name => "equals", description => "is equal to" },
{ name => "notequals", description => "is not equal to" },
{ name => "substring", description => "contains the string" },
{ name => "casesubstring", description => "contains the string (exact case)" },
{ name => "notsubstring", description => "does not contain the string" },
{ name => "allwordssubstr", description => "contains all of the strings" },
{ name => "anywordssubstr", description => "contains any of the strings" },
{ name => "regexp", description => "contains regexp" },
{ name => "notregexp", description => "does not contain regexp" },
{ name => "lessthan", description => "is less than" },
{ name => "greaterthan", description => "is greater than" },
{ name => "anywords", description => "contains any of the words" },
{ name => "allwords", description => "contains all of the words" },
{ name => "nowords", description => "contains none of the words" },
{ name => "changedbefore", description => "changed before" },
{ name => "changedafter", description => "changed after" },
{ name => "changedfrom", description => "changed from" },
{ name => "changedto", description => "changed to" },
{ name => "changedby", description => "changed by" } ] %]
<p>
<strong>
<a name="chart" href="queryhelp.cgi#advancedquerying">
Advanced Querying Using Boolean Charts</a>:
</strong>
</p>
[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %]
[% jsmagic = "onclick=\"document.forms[0].action='query.cgi#chart'; document.forms[0].method='POST'; return 1;\"" %]
[% FOREACH chart = default.charts %]
[% chartnum = loop.count - 1 %]
<table>
[% FOREACH row = chart %]
[% rownum = loop.count - 1 %]
<tr>
[% FOREACH col = row %]
[% colnum = loop.count - 1 %]
<td>
<select name="[% "field${chartnum}-${rownum}-${colnum}" %]">
[% FOREACH field = fields %]
<option value="[% field.name %]"
[%- " selected" IF field.name == col.field %]>[% field.description %]</option>
[% END %]
</select>
<select name="[% "type${chartnum}-${rownum}-${colnum}" %]">
[% FOREACH type = types %]
<option value="[% type.name %]"
[%- " selected" IF type.name == col.type %]>[% type.description %]</option>
[% END %]
</select>
<input name="[% "value${chartnum}-${rownum}-${colnum}" %]"
value="[% col.value FILTER html %]">
</td>
[% IF NOT col == row.last %]
<td align="center">
Or
</td>
[% ELSE %]
<td>
[% newor = colnum + 1 %]
<input type="submit" value="Or"
name="cmd-add[% "${chartnum}-${rownum}-${newor}" %]" [% $jsmagic %]>
</td>
[% END %]
[% END %]
</tr>
[% IF NOT row == chart.last %]
<tr>
<td>And</td>
</tr>
[% ELSE %]
<tr>
<td>
[% newand = rownum + 1; newchart = chartnum + 1 %]
<input type="submit" value="And"
name="cmd-add[% "${chartnum}-${newand}-0" %]"[% $jsmagic %]>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="Add another boolean chart"
name="cmd-add[% newchart %]-0-0" [% $jsmagic %]>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
</tr>
[% END %]
[% END %]
</table>
<hr>
[% END %]
<p>Give me a <a href="queryhelp.cgi">clue</a> about how to use this form.</p>
</FORM>
[% INCLUDE global/footer %]
[%############################################################################%]
[%# Block for SELECT fields #%]
[%############################################################################%]
[% BLOCK select %]
<td align="left">
<select name="[% sel.name %]" multiple size="[% sel.size %]">
[% FOREACH name = ${sel.name} %]
<option value="[% name FILTER html %]"
[% " selected" IF lsearch(default.${sel.name}, name) != -1 %]>
[% name FILTER html %]</option>
[% END %]
</select>
</td>
[% END %]

Просмотреть файл

@ -0,0 +1,123 @@
[% template_version = "1.0@bugzilla.org" %]
[%# -*- mode: sgml -*- %]
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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): Jacob Steenhagen <jake@acutex.net>
# Scott Collins <scc@mozilla.org>
#%]
<?xml version="1.0"?>
<!-- [% template_version %] -->
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
<?xml-stylesheet href="[% Param('urlbase') %]css/panel.css" type="text/css"?>
<window
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
orient="vertical"
onload="document.getElementById('query-field').addEventListener('keypress', initial_keypress_handler, true)">
// Load QuickSearch libraries
<script type="text/javascript" language="JavaScript" src="localconfig.js"/>
<script type="text/javascript" language="JavaScript" src="quicksearch.js"/>
<script type="text/javascript" language="JavaScript">
// Tell QuickSearch that the source of this is the sidebar
var sidebar = 1;
function load_relative_url( aRelativeURL ) {
aRelativeURL = '[% Param('urlbase') %]' + aRelativeURL;
_content.location = aRelativeURL;
}
function initial_keypress_handler( aEvent ) {
this.removeAttribute("class");
this.addEventListener("keypress", normal_keypress_handler, true);
this.removeEventListener("keypress", initial_keypress_handler, true);
}
function normal_keypress_handler( aEvent ) {
if ( aEvent.keyCode == 13 )
QuickSearch(this.value);
}
</script>
<textbox id="query-field" class="descriptive-content" value="enter query" onfocus="this.setSelectionRange(0,this.value.length)"/>
<separator class="groove"/>
<box autostretch="never" valign="top">
<box orient="vertical" flex="1">
<text class="text-link" onclick="load_relative_url('query.cgi')" value="new query"/>
<text class="text-link" onclick="load_relative_url('reports.cgi')" value="reports"/>
<text class="text-link" onclick="load_relative_url('enter_bug.cgi')" value="new bug"/>
<separator class="thin"/>
[% IF username %]
<text class="text-link" onclick="load_relative_url('userprefs.cgi')" value="edit prefs"/>
[% END %]
[% IF UserInGroup('tweakparams') %]
<text class="text-link" onclick="load_relative_url('editparams.cgi')" value="edit params"/>
[% END %]
[% IF UserInGroup('editusers') || blessgroupset %]
<text class="text-link" onclick="load_relative_url('editusers.cgi')" value="edit users"/>
[% END %]
[% IF UserInGroup('editcomponents') %]
<text class="text-link" onclick="load_relative_url('editcomponents.cgi')" value="edit components"/>
[% END %]
[% IF UserInGroup('creategroups') %]
<text class="text-link" onclick="load_relative_url('editgroups.cgi')" value="edit groups"/>
[% END %]
[% IF UserInGroup('editkeywords') %]
<text class="text-link" onclick="load_relative_url('editkeywords.cgi')" value="edit keywords"/>
[% END %]
[% IF UserInGroup('tweakparams') %]
<text class="text-link" onclick="load_relative_url('sanitycheck.cgi')" value="sanity check"/>
[% END %]
[% IF username %]
<text class="text-link" onclick="load_relative_url('relogin.cgi')" value="logout [% username FILTER html %]"/>
<separator class="thin"/>
[% END %]
[% IF mybugsurl %]
<text class="text-link" onclick="load_relative_url('[% mybugsurl FILTER html %]')" value="my bugs"/>
[% END %]
[% IF anyvotesallowed && username %]
<text class="text-link" onclick="load_relative_url('votes.cgi?action=show_user')" value="my votes"/>
[% END %]
[% FOREACH name = namedqueries %]
<text class="text-link" onclick="load_relative_url('buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% name FILTER uri %]')" value="[% name FILTER html %]"/>
[% END %]
[% IF NOT username %]
<text class="text-link" onclick="load_relative_url('createaccount.cgi')" value="new user"/>
<text class="text-link" onclick="load_relative_url('query.cgi?GoAheadAndLogIn=1')" value="log in"/>
[% END %]
</box>
</box>
<spring flex="1"/>
<box orient="horizontal">
<spring flex="1"/>
<html align="right">
<html:a class="text-link" href="[% Param('urlbase') %]sidebar.cgi">reload</html:a>
</html>
</box>
</window>