diff options
58 files changed, 6877 insertions, 0 deletions
diff --git a/template/en/default/account/cancel-token.txt.tmpl b/template/en/default/account/cancel-token.txt.tmpl new file mode 100644 index 000000000..b37d0da2d --- /dev/null +++ b/template/en/default/account/cancel-token.txt.tmpl @@ -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 %] + + diff --git a/template/en/default/account/create.html.tmpl b/template/en/default/account/create.html.tmpl new file mode 100644 index 000000000..e39d6ff5e --- /dev/null +++ b/template/en/default/account/create.html.tmpl @@ -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 %] diff --git a/template/en/default/account/created.html.tmpl b/template/en/default/account/created.html.tmpl new file mode 100644 index 000000000..46bc82ad2 --- /dev/null +++ b/template/en/default/account/created.html.tmpl @@ -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 %] diff --git a/template/en/default/account/email/change-new.txt.tmpl b/template/en/default/account/email/change-new.txt.tmpl new file mode 100644 index 000000000..5a5ae2535 --- /dev/null +++ b/template/en/default/account/email/change-new.txt.tmpl @@ -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 %] + diff --git a/template/en/default/account/email/change-old.txt.tmpl b/template/en/default/account/email/change-old.txt.tmpl new file mode 100644 index 000000000..82ecf1dfc --- /dev/null +++ b/template/en/default/account/email/change-old.txt.tmpl @@ -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 %] + diff --git a/template/en/default/account/email/confirm.html.tmpl b/template/en/default/account/email/confirm.html.tmpl new file mode 100644 index 000000000..4d4102968 --- /dev/null +++ b/template/en/default/account/email/confirm.html.tmpl @@ -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 %] diff --git a/template/en/default/account/exists.html.tmpl b/template/en/default/account/exists.html.tmpl new file mode 100644 index 000000000..a4357a5a0 --- /dev/null +++ b/template/en/default/account/exists.html.tmpl @@ -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 %] diff --git a/template/en/default/account/prefs/account.html.tmpl b/template/en/default/account/prefs/account.html.tmpl new file mode 100644 index 000000000..e1675c7fb --- /dev/null +++ b/template/en/default/account/prefs/account.html.tmpl @@ -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> diff --git a/template/en/default/account/prefs/email.html.tmpl b/template/en/default/account/prefs/email.html.tmpl new file mode 100644 index 000000000..f7d529c7c --- /dev/null +++ b/template/en/default/account/prefs/email.html.tmpl @@ -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> diff --git a/template/en/default/account/prefs/footer.html.tmpl b/template/en/default/account/prefs/footer.html.tmpl new file mode 100644 index 000000000..ea5753f0e --- /dev/null +++ b/template/en/default/account/prefs/footer.html.tmpl @@ -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> diff --git a/template/en/default/account/prefs/permissions.html.tmpl b/template/en/default/account/prefs/permissions.html.tmpl new file mode 100644 index 000000000..7ab7f1df9 --- /dev/null +++ b/template/en/default/account/prefs/permissions.html.tmpl @@ -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> diff --git a/template/en/default/account/prefs/prefs.html.tmpl b/template/en/default/account/prefs/prefs.html.tmpl new file mode 100644 index 000000000..5d9fc6eb3 --- /dev/null +++ b/template/en/default/account/prefs/prefs.html.tmpl @@ -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"> </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"> </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 %] + + + diff --git a/template/en/default/attachment/content-types.html.tmpl b/template/en/default/attachment/content-types.html.tmpl new file mode 100644 index 000000000..4e7cafc47 --- /dev/null +++ b/template/en/default/attachment/content-types.html.tmpl @@ -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> diff --git a/template/en/default/attachment/create.html.tmpl b/template/en/default/attachment/create.html.tmpl new file mode 100644 index 000000000..44533512e --- /dev/null +++ b/template/en/default/attachment/create.html.tmpl @@ -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> </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 %] + + + diff --git a/template/en/default/attachment/created.html.tmpl b/template/en/default/attachment/created.html.tmpl new file mode 100644 index 000000000..c46afe06b --- /dev/null +++ b/template/en/default/attachment/created.html.tmpl @@ -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 %] diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl new file mode 100644 index 000000000..1d06bfb6f --- /dev/null +++ b/template/en/default/attachment/edit.html.tmpl @@ -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( /</gi , "<" ); + theContent = theContent.replace( />/gi , ">" ); + theContent = theContent.replace( /&/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 %] diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl new file mode 100644 index 000000000..5bc5217c9 --- /dev/null +++ b/template/en/default/attachment/list.html.tmpl @@ -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 %]&action=view">[% attachment.description FILTER html %]</a></strike> + [% ELSE %] + <a href="attachment.cgi?id=[% attachment.attachid %]&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', ' ') %]<br> + [% END %] + [% END %] + </td> + + <td valign="top"> + [% IF attachment.canedit %] + <a href="attachment.cgi?id=[% attachment.attachid %]&action=edit">Edit</a> + [% ELSE %] + None + [% END %] + </td> + </tr> + [% END %] + + <tr> + <td colspan="4"> + <a href="attachment.cgi?bugid=[% bugid %]&action=enter">Create a New Attachment</a> (proposed patch, testcase, etc.) + </td> + <td colspan="1"> + <a href="attachment.cgi?bugid=[% bugid %]&action=viewall">View All</a> + </td> + </tr> +</table> +<br> diff --git a/template/en/default/attachment/show-multiple.html.tmpl b/template/en/default/attachment/show-multiple.html.tmpl new file mode 100644 index 000000000..88c92b969 --- /dev/null +++ b/template/en/default/attachment/show-multiple.html.tmpl @@ -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', ' ') %]<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 %] diff --git a/template/en/default/attachment/updated.html.tmpl b/template/en/default/attachment/updated.html.tmpl new file mode 100644 index 000000000..e24595747 --- /dev/null +++ b/template/en/default/attachment/updated.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/activity/show.html.tmpl b/template/en/default/bug/activity/show.html.tmpl new file mode 100644 index 000000000..387ba6d6c --- /dev/null +++ b/template/en/default/bug/activity/show.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/activity/table.html.tmpl b/template/en/default/bug/activity/table.html.tmpl new file mode 100644 index 000000000..43529bd23 --- /dev/null +++ b/template/en/default/bug/activity/table.html.tmpl @@ -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 %]&action=view"> + Attachment #[% change.attachid %]</a> + [% END %] + [% change.field %] + </td> + <td> + [% IF change.removed %] + [% change.removed FILTER html %] + [% ELSE %] + + [% END %] + </td> + <td> + [% IF change.added %] + [% change.added FILTER html %] + [% ELSE %] + + [% END %] + </td> + [% END %] + </tr> + [% END %] + </table> +[% END %] diff --git a/template/en/default/bug/choose-xml.html.tmpl b/template/en/default/bug/choose-xml.html.tmpl new file mode 100644 index 000000000..4456534f5 --- /dev/null +++ b/template/en/default/bug/choose-xml.html.tmpl @@ -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> </td> + <td> + (e.g. 1000, 2467, 852) + </td> + </tr> + </table> +</form> + +[% INCLUDE global/footer %] diff --git a/template/en/default/bug/choose.html.tmpl b/template/en/default/bug/choose.html.tmpl new file mode 100644 index 000000000..b776ff255 --- /dev/null +++ b/template/en/default/bug/choose.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl new file mode 100644 index 000000000..27177486e --- /dev/null +++ b/template/en/default/bug/comments.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl new file mode 100644 index 000000000..cb82c8401 --- /dev/null +++ b/template/en/default/bug/create/create.html.tmpl @@ -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> </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> </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> </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 %] + + <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;"> + + <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 %] diff --git a/template/en/default/bug/create/created.html.tmpl b/template/en/default/bug/create/created.html.tmpl new file mode 100644 index 000000000..9eba2edf5 --- /dev/null +++ b/template/en/default/bug/create/created.html.tmpl @@ -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 %]&action=enter"> + Attach a file to this bug</a>. +</p> + +[% INCLUDE show/navigate.html.tmpl %] + +[% INCLUDE global/footer %] diff --git a/template/en/default/bug/create/initial-comment.txt.tmpl b/template/en/default/bug/create/initial-comment.txt.tmpl new file mode 100644 index 000000000..21a9f3ff8 --- /dev/null +++ b/template/en/default/bug/create/initial-comment.txt.tmpl @@ -0,0 +1,21 @@ +[%# 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> + #%] +[% form.comment %] diff --git a/template/en/default/bug/create/make-template.html.tmpl b/template/en/default/bug/create/make-template.html.tmpl new file mode 100644 index 000000000..c5e017529 --- /dev/null +++ b/template/en/default/bug/create/make-template.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/dependency-graph.html.tmpl b/template/en/default/bug/dependency-graph.html.tmpl new file mode 100644 index 000000000..fff5f1b4d --- /dev/null +++ b/template/en/default/bug/dependency-graph.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/dependency-tree.html.tmpl b/template/en/default/bug/dependency-tree.html.tmpl new file mode 100644 index 000000000..ba0b8213f --- /dev/null +++ b/template/en/default/bug/dependency-tree.html.tmpl @@ -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(",") %]&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(",") %]&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><This bug appears elsewhere in this tree></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> + + </td> + + <td> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + [%# set to one form %] + <input type="submit" value=" 1 " [% + 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=" < " [% + 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=" > " [% + 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=" Unlimited "> + </form> + </td> + </tr> +</table> +[% END %] diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl new file mode 100644 index 000000000..9b77c23a2 --- /dev/null +++ b/template/en/default/bug/edit.html.tmpl @@ -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> </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 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> </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> </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> </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 To</a>: + </b> + </td> + <td>[% bug.assigned_to FILTER html %]</td> + <td> </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"> </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 %] + <a href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]">Show + votes for this bug</a> + <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 %] + + <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 %] + [% 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 %] + <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 %] + <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> + | + <a href="long_list.cgi?buglist=[% bug.bug_id %]">Format For Printing</a> + </b> + </font> + + [% IF user.canmove %] + <font size="+1"><b> | </b></font> + <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> </td> +[% END %] diff --git a/template/en/default/bug/navigate.html.tmpl b/template/en/default/bug/navigate.html.tmpl new file mode 100644 index 000000000..3713e0a0d --- /dev/null +++ b/template/en/default/bug/navigate.html.tmpl @@ -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 %] + + <a href="buglist.cgi?regetlastlist=1">Show list</a> +[% END %] + + <a href="query.cgi">Query page</a> + <a href="enter_bug.cgi">Enter new bug</a> diff --git a/template/en/default/bug/show-multiple.html.tmpl b/template/en/default/bug/show-multiple.html.tmpl new file mode 100644 index 000000000..8313323aa --- /dev/null +++ b/template/en/default/bug/show-multiple.html.tmpl @@ -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> + [% bug.component %] + </td> + + <td colspan="2"> + [% IF Param('usetargetmilestone') %] + <b>Target Milestone:</b> + [% bug.target_milestone FILTER html %] + [% END %] + </td> + </tr> + + <tr> + <td colspan="4"> + <b>URL:</b> + <A HREF="[% bug.bug_file_loc %]">[% bug.bug_file_loc FILTER html %]</a> + </tr> + + <tr> + <td colspan="4"> + <b>Summary:</b> [% bug.short_desc FILTER html %] + </td> + </tr> + + [% IF use_keywords %] + <tr> + <td colspan="4"> + <b>Keywords: </b> [% bug.keywords FILTER html %] + </td> + </tr> + [% END %] + + [% IF Param("usestatuswhiteboard") %] + <tr> + <td colspan="4"> + <b>Status Whiteboard:</b> + [% 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> + [% bug.${attr.name} FILTER html %] + </td> +[% END %] diff --git a/template/en/default/bug/votes/delete-all.html.tmpl b/template/en/default/bug/votes/delete-all.html.tmpl new file mode 100644 index 000000000..9a63f75af --- /dev/null +++ b/template/en/default/bug/votes/delete-all.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/votes/list-for-bug.html.tmpl b/template/en/default/bug/votes/list-for-bug.html.tmpl new file mode 100644 index 000000000..a9bcaf5c8 --- /dev/null +++ b/template/en/default/bug/votes/list-for-bug.html.tmpl @@ -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 %] diff --git a/template/en/default/bug/votes/list-for-user.html.tmpl b/template/en/default/bug/votes/list-for-user.html.tmpl new file mode 100644 index 000000000..96d9ad84a --- /dev/null +++ b/template/en/default/bug/votes/list-for-user.html.tmpl @@ -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 %] diff --git a/template/en/default/global/choose-product.html.tmpl b/template/en/default/global/choose-product.html.tmpl new file mode 100644 index 000000000..31d9ea7ba --- /dev/null +++ b/template/en/default/global/choose-product.html.tmpl @@ -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"> [% proddesc.$p %]</td> + [% END %] + </tr> +[% END %] + +</table> + +[% INCLUDE global/footer %] diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl new file mode 100644 index 000000000..9f1fe2964 --- /dev/null +++ b/template/en/default/global/code-error.html.tmpl @@ -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 %] diff --git a/template/en/default/global/footer.html.tmpl b/template/en/default/global/footer.html.tmpl new file mode 100644 index 000000000..98d525a78 --- /dev/null +++ b/template/en/default/global/footer.html.tmpl @@ -0,0 +1,6 @@ +<!-- 1.0@bugzilla.org --> +[% PerformSubsts(Param('footerhtml')) %] + +</body> +</html> + diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl new file mode 100644 index 000000000..4dc89e053 --- /dev/null +++ b/template/en/default/global/header.html.tmpl @@ -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"> </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 %] diff --git a/template/en/default/global/hidden-fields.html.tmpl b/template/en/default/global/hidden-fields.html.tmpl new file mode 100644 index 000000000..85df62435 --- /dev/null +++ b/template/en/default/global/hidden-fields.html.tmpl @@ -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 %] diff --git a/template/en/default/global/message.html.tmpl b/template/en/default/global/message.html.tmpl new file mode 100644 index 000000000..d0c8281eb --- /dev/null +++ b/template/en/default/global/message.html.tmpl @@ -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 %] diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl new file mode 100644 index 000000000..a76ad5fa7 --- /dev/null +++ b/template/en/default/global/user-error.html.tmpl @@ -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 %] diff --git a/template/en/default/index.html.tmpl b/template/en/default/index.html.tmpl new file mode 100644 index 000000000..40117297c --- /dev/null +++ b/template/en/default/index.html.tmpl @@ -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 %] diff --git a/template/en/default/list/change-columns.html.tmpl b/template/en/default/list/change-columns.html.tmpl new file mode 100644 index 000000000..d3b008c49 --- /dev/null +++ b/template/en/default/list/change-columns.html.tmpl @@ -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 %] + diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl new file mode 100644 index 000000000..c7c8d00bf --- /dev/null +++ b/template/en/default/list/edit-multiple.html.tmpl @@ -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> </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 %] diff --git a/template/en/default/list/list-rdf.rdf.tmpl b/template/en/default/list/list-rdf.rdf.tmpl new file mode 100644 index 000000000..c8beb50e3 --- /dev/null +++ b/template/en/default/list/list-rdf.rdf.tmpl @@ -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> diff --git a/template/en/default/list/list-simple.html.tmpl b/template/en/default/list/list-simple.html.tmpl new file mode 100644 index 000000000..883b278d7 --- /dev/null +++ b/template/en/default/list/list-simple.html.tmpl @@ -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> diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl new file mode 100644 index 000000000..150ac2c54 --- /dev/null +++ b/template/en/default/list/list.html.tmpl @@ -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> + <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> + <a href="enter_bug.cgi">Enter New Bug</a> + <a href="colchange.cgi?[% urlquerypart %]">Change Columns</a> + + [% 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> + + [% END %] + + [% IF bugowners %] + <a href="mailto:[% bugowners %]">Send Mail to Bug Owners</a> + [% END %] + + <a href="query.cgi?[% urlquerypart %]">Edit this Query</a> + + </form> + +[% END %] + + +[%############################################################################%] +[%# Page Footer #%] +[%############################################################################%] + +[% PROCESS global/footer %] + diff --git a/template/en/default/list/quips.html.tmpl b/template/en/default/list/quips.html.tmpl new file mode 100644 index 000000000..d05557650 --- /dev/null +++ b/template/en/default/list/quips.html.tmpl @@ -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 %] diff --git a/template/en/default/list/server-push.html.tmpl b/template/en/default/list/server-push.html.tmpl new file mode 100644 index 000000000..5a2dde0b1 --- /dev/null +++ b/template/en/default/list/server-push.html.tmpl @@ -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> diff --git a/template/en/default/list/table.html.tmpl b/template/en/default/list/table.html.tmpl new file mode 100644 index 000000000..2afc9bb9d --- /dev/null +++ b/template/en/default/list/table.html.tmpl @@ -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 %]&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> </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 %]&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 %] + diff --git a/template/en/default/reports/components.html.tmpl b/template/en/default/reports/components.html.tmpl new file mode 100644 index 000000000..c9dacca10 --- /dev/null +++ b/template/en/default/reports/components.html.tmpl @@ -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 %] diff --git a/template/en/default/reports/duplicates.html.tmpl b/template/en/default/reports/duplicates.html.tmpl new file mode 100644 index 000000000..1d2e1cbb8 --- /dev/null +++ b/template/en/default/reports/duplicates.html.tmpl @@ -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 %] diff --git a/template/en/default/reports/keywords.html.tmpl b/template/en/default/reports/keywords.html.tmpl new file mode 100644 index 000000000..1769df85d --- /dev/null +++ b/template/en/default/reports/keywords.html.tmpl @@ -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 %] diff --git a/template/en/default/search/search-advanced.html.tmpl b/template/en/default/search/search-advanced.html.tmpl new file mode 100644 index 000000000..85e66356b --- /dev/null +++ b/template/en/default/search/search-advanced.html.tmpl @@ -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’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 comment" }, + { name => "bug_file_loc", description => "The 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’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> <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 %]> + + <input type="submit" value="Add another boolean chart" + name="cmd-add[% newchart %]-0-0" [% $jsmagic %]> + + </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 %] diff --git a/template/en/default/search/search.html.tmpl b/template/en/default/search/search.html.tmpl new file mode 100644 index 000000000..85e66356b --- /dev/null +++ b/template/en/default/search/search.html.tmpl @@ -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’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 comment" }, + { name => "bug_file_loc", description => "The 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’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> <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 %]> + + <input type="submit" value="Add another boolean chart" + name="cmd-add[% newchart %]-0-0" [% $jsmagic %]> + + </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 %] diff --git a/template/en/default/sidebar.xul.tmpl b/template/en/default/sidebar.xul.tmpl new file mode 100644 index 000000000..02ee1bf9b --- /dev/null +++ b/template/en/default/sidebar.xul.tmpl @@ -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&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> |