summaryrefslogtreecommitdiffstats
path: root/template
diff options
context:
space:
mode:
authormyk%mozilla.org <>2002-09-29 03:42:23 +0200
committermyk%mozilla.org <>2002-09-29 03:42:23 +0200
commit91b171e7584920d03abb9c45e779c84f3dee975c (patch)
treefc59becfe02d1a4dc84e5f3501f0139effcf1c7a /template
parent90975fe914d066726d06f53abe8696399b13a61a (diff)
downloadbugzilla-91b171e7584920d03abb9c45e779c84f3dee975c.tar.gz
bugzilla-91b171e7584920d03abb9c45e779c84f3dee975c.tar.xz
Fix for bug 98801: Implementation of the request tracker, a set of enhancements to attachment statuses.
r=gerv,bbaetz
Diffstat (limited to 'template')
-rw-r--r--template/en/default/account/prefs/email.html.tmpl20
-rw-r--r--template/en/default/admin/flag-type/confirm-delete.html.tmpl58
-rw-r--r--template/en/default/admin/flag-type/edit.html.tmpl189
-rw-r--r--template/en/default/admin/flag-type/list.html.tmpl107
-rw-r--r--template/en/default/attachment/edit.html.tmpl21
-rw-r--r--template/en/default/attachment/list.html.tmpl35
-rw-r--r--template/en/default/bug/edit.html.tmpl20
-rw-r--r--template/en/default/flag/list.html.tmpl94
-rw-r--r--template/en/default/global/code-error.html.tmpl42
-rw-r--r--template/en/default/global/messages.html.tmpl28
-rw-r--r--template/en/default/global/select-menu.html.tmpl12
-rw-r--r--template/en/default/global/useful-links.html.tmpl4
-rw-r--r--template/en/default/global/user-error.html.tmpl39
-rw-r--r--template/en/default/request/created-email.txt.tmpl41
-rw-r--r--template/en/default/request/fulfilled-email.txt.tmpl42
-rw-r--r--template/en/default/request/queue.html.tmpl193
-rw-r--r--template/en/default/request/verify.html.tmpl108
17 files changed, 1013 insertions, 40 deletions
diff --git a/template/en/default/account/prefs/email.html.tmpl b/template/en/default/account/prefs/email.html.tmpl
index e14ea9910..5d73a357b 100644
--- a/template/en/default/account/prefs/email.html.tmpl
+++ b/template/en/default/account/prefs/email.html.tmpl
@@ -83,9 +83,27 @@
<tr>
<td width="150"></td>
<td>
- <label for="ExcludeSelf">Only email me reports of changes made by other people</label>
<input type="checkbox" name="ExcludeSelf" id="ExcludeSelf" value="on"
[% " checked" IF excludeself %]>
+ <label for="ExcludeSelf">Only email me reports of changes made by other people</label>
+ <br>
+ </td>
+ </tr>
+ <tr>
+ <td width="150"></td>
+ <td>
+ <input type="checkbox" name="FlagRequestee" id="FlagRequestee" value="on"
+ [% " checked" IF FlagRequestee %]>
+ <label for="FlagRequestee">Email me when someone asks me to set a flag</label>
+ <br>
+ </td>
+ </tr>
+ <tr>
+ <td width="150"></td>
+ <td>
+ <input type="checkbox" name="FlagRequester" id="FlagRequester" value="on"
+ [% " checked" IF FlagRequester %]>
+ <label for="FlagRequester">Email me when someone sets a flag I asked for</label>
<br>
</td>
</tr>
diff --git a/template/en/default/admin/flag-type/confirm-delete.html.tmpl b/template/en/default/admin/flag-type/confirm-delete.html.tmpl
new file mode 100644
index 000000000..b022e621e
--- /dev/null
+++ b/template/en/default/admin/flag-type/confirm-delete.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): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%# Filter off the name here to be used multiple times below %]
+[% name = BLOCK %][% flag_type.name FILTER html %][% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = "Confirm Deletion of Flag Type '$name'"
+%]
+
+<p>
+ There are [% flag_count %] flags of type [% name %].
+ If you delete this type, those flags will also be deleted. Note that
+ instead of deleting the type you can
+ <a href="editflagtypes.cgi?action=deactivate&id=[% flag_type.id %]">deactivate it</a>,
+ in which case the type and its flags will remain in the database
+ but will not appear in the Bugzilla UI.
+</p>
+
+<table>
+ <tr>
+ <td colspan=2>
+ Do you really want to delete this type?
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <a href="editflagtypes.cgi?action=delete&id=[% flag_type.id %]">
+ Yes, delete
+ </a>
+ </td>
+ <td align="right">
+ <a href="editflagtypes.cgi">
+ No, don't delete
+ </a>
+ </td>
+ </tr>
+</table>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/flag-type/edit.html.tmpl b/template/en/default/admin/flag-type/edit.html.tmpl
new file mode 100644
index 000000000..ca01f6365
--- /dev/null
+++ b/template/en/default/admin/flag-type/edit.html.tmpl
@@ -0,0 +1,189 @@
+[%# 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>
+ #%]
+
+[%# The javascript and header_html blocks get used in header.html.tmpl. %]
+[% javascript = BLOCK %]
+ var usetms = 0; // do we have target milestone?
+ var first_load = 1; // is this the first time we load the page?
+ var last_sel = []; // caches last selection
+ var cpts = new Array();
+ [% FOREACH p = products %]
+ cpts['[% p FILTER js %]'] = [
+ [%- FOREACH item = components_by_product.$p %]'[% item FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ];
+ [% END %]
+[% END %]
+
+[% header_html = BLOCK %]
+ <script language="JavaScript" type="text/javascript" src="productmenu.js"></script>
+[% END %]
+
+[% IF type.target_type == "bug" %]
+ [% title = "Create Flag Type for Bugs" %]
+[% ELSE %]
+ [% title = "Create Flag Type for Attachments" %]
+[% END %]
+
+[% IF last_action == "copy" %]
+ [% title = "Create Flag Type Based on $type.name" %]
+[% ELSIF last_action == "edit" %]
+ [% title = "Edit Flag Type $type.name" %]
+[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = title
+ style = "
+ table#form th { text-align: right; vertical-align: baseline; white-space: nowrap; }
+ table#form td { text-align: left; vertical-align: baseline; }
+ "
+ onload="selectProduct(forms[0], 'product', 'component', '__Any__');"
+%]
+
+<form method="post" action="editflagtypes.cgi">
+ <input type="hidden" name="action" value="[% action %]">
+ <input type="hidden" name="id" value="[% type.id %]">
+ <input type="hidden" name="target_type" value="[% type.target_type %]">
+ [% FOREACH category = type.inclusions %]
+ <input type="hidden" name="inclusions" value="[% category %]">
+ [% END %]
+ [% FOREACH category = type.exclusions %]
+ <input type="hidden" name="exclusions" value="[% category %]">
+ [% END %]
+
+ <table id="form" cellspacing="0" cellpadding="4" border="0">
+ <tr>
+ <th>Name:</th>
+ <td>
+ a short name identifying this type<br>
+ <input type="text" name="name" value="[% type.name FILTER html %]"
+ size="50" maxlength="50">
+ </td>
+ </tr>
+
+ <tr>
+ <th>Description:</th>
+ <td>
+ a comprehensive description of this type<br>
+ <textarea name="description" rows="4" cols="80">[% type.description FILTER html %]</textarea>
+ </td>
+ </tr>
+
+ <tr>
+ <th>Category:</th>
+ <td>
+ the products/components to which [% type.target_type %]s must
+ (inclusions) or must not (exclusions) belong in order for users
+ to be able to set flags of this type for them
+ <table>
+ <tr>
+ <td style="vertical-align: top;">
+ <b>Product/Component:</b><br>
+ <select name="product" onChange="selectProduct(this.form, 'product', 'component', '__Any__');">
+ <option value="">__Any__</option>
+ [% FOREACH item = products %]
+ <option value="[% item %]" [% "selected" IF type.product.name == item %]>[% item %]</option>
+ [% END %]
+ </select><br>
+ <select name="component">
+ <option value="">__Any__</option>
+ [% FOREACH item = components %]
+ <option value="[% item %]" [% "selected" IF type.component.name == item %]>[% item %]</option>
+ [% END %]
+ </select><br>
+ <input type="submit" name="categoryAction" value="Include">
+ <input type="submit" name="categoryAction" value="Exclude">
+ </td>
+ <td style="vertical-align: top;">
+ <b>Inclusions:</b><br>
+ [% PROCESS "global/select-menu.html.tmpl" name="inclusion_to_remove" multiple=1 size=4 options=type.inclusions %]<br>
+ <input type="submit" name="categoryAction" value="Remove Inclusion">
+ </td>
+ <td style="vertical-align: top;">
+ <b>Exclusions:</b><br>
+ [% PROCESS "global/select-menu.html.tmpl" name="exclusion_to_remove" multiple=1 size=4 options=type.exclusions %]<br>
+ <input type="submit" name="categoryAction" value="Remove Exclusion">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <th>Sort Key:</th>
+ <td>
+ a number between 1 and 32767 by which this type will be sorted
+ when displayed to users in a list; ignore if you don't care
+ what order the types appear in or if you want them to appear
+ in alphabetical order<br>
+ <input type="text" name="sortkey" value="[% type.sortkey || 1 %]" size="5" maxlength="5">
+ </td>
+ </tr>
+
+ <tr>
+ <th>&nbsp;</th>
+ <td>
+ <input type="checkbox" name="is_active" [% "checked" IF type.is_active || !type.is_active.defined %]>
+ active (flags of this type appear in the UI and can be set)
+ </td>
+ </tr>
+
+ <tr>
+ <th>&nbsp;</th>
+ <td>
+ <input type="checkbox" name="is_requestable" [% "checked" IF type.is_requestable || !type.is_requestable.defined %]>
+ requestable (users can ask for flags of this type to be set)
+ </td>
+ </tr>
+
+ <tr>
+ <th>CC List:</th>
+ <td>
+ if requestable, who should get carbon copied on email notification of requests<br>
+ <input type="text" name="cc_list" value="[% type.cc_list FILTER html %]" size="80" maxlength="200">
+ </td>
+ </tr>
+
+ <tr>
+ <th>&nbsp;</th>
+ <td>
+ <input type="checkbox" name="is_requesteeble" [% "checked" IF type.is_requesteeble || !type.is_requesteeble.defined %]>
+ specifically requestable (users can ask specific other users to set flags of this type as opposed to just asking the wind)
+ </td>
+ </tr>
+
+ <tr>
+ <th>&nbsp;</th>
+ <td>
+ <input type="checkbox" name="is_multiplicable" [% "checked" IF type.is_multiplicable || !type.is_multiplicable.defined %]>
+ multiplicable (multiple flags of this type can be set on the same [% type.target_type %])
+ </td>
+ </tr>
+
+ <tr>
+ <th></th>
+ <td>
+ <input type="submit" value="[% (last_action == "enter" || last_action == "copy") ? "Create" : "Save Changes" %]">
+ </td>
+ </tr>
+
+ </table>
+
+</form>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/flag-type/list.html.tmpl b/template/en/default/admin/flag-type/list.html.tmpl
new file mode 100644
index 000000000..76a835639
--- /dev/null
+++ b/template/en/default/admin/flag-type/list.html.tmpl
@@ -0,0 +1,107 @@
+[%# 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>
+ #%]
+
+[% PROCESS global/header.html.tmpl
+ title = 'Administer Flag Types'
+ style = "
+ table#flag_types tr th { text-align: left; }
+ .inactive { color: #787878; }
+ "
+%]
+
+<p>
+ Flags are markers that identify whether a bug or attachment has been granted
+ or denied some status. Flags appear in the UI as a name and a status symbol
+ ("+" for granted, "-" for denied, and "?" for statuses requested by users).
+</p>
+
+<p>
+ For example, you might define a "review" status for users to request review
+ for their patches. When a patch writer requests review, the string "review?"
+ will appear in the attachment. When a patch reviewer reviews the patch,
+ either the string "review+" or the string "review-" will appear in the patch,
+ depending on whether the patch passed or failed review.
+</p>
+
+<h3>Flag Types for Bugs</h3>
+
+[% PROCESS display_flag_types types=bug_types %]
+
+<p>
+ <a href="editflagtypes.cgi?action=enter&target_type=bug">Create Flag Type for Bugs</a>
+</p>
+
+<h3>Flag Types for Attachments</h3>
+
+[% PROCESS display_flag_types types=attachment_types %]
+
+<p>
+ <a href="editflagtypes.cgi?action=enter&target_type=attachment">Create Flag Type For Attachments</a>
+</p>
+
+<script language="JavaScript">
+ <!--
+ function confirmDelete(id, name, count)
+ {
+ if (count > 0) {
+ var msg = 'There are ' + count + ' flags of type ' + name + '. ' +
+ 'If you delete this type, those flags will also be ' +
+ 'deleted.\n\nNote: to deactivate the type instead ' +
+ 'of deleting it, edit it and uncheck its "is active" ' +
+ 'flag.\n\nDo you really want to delete this flag type?';
+ if (!confirm(msg)) return false;
+ }
+ location.href = "editflagtypes.cgi?action=delete&id=" + id;
+ return false; // prevent strict JavaScript warning that this function
+ // does not always return a value
+ }
+ //-->
+</script>
+
+[% PROCESS global/footer.html.tmpl %]
+
+
+[% BLOCK display_flag_types %]
+ <table id="flag_types" cellspacing="0" cellpadding="4" border="1">
+
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th>Actions</th>
+ </tr>
+
+ [% FOREACH type = types %]
+
+ <tr class="[% type.is_active ? "active" : "inactive" %]">
+ <td>[% type.name FILTER html %]</td>
+ <td>[% type.description FILTER html %]</td>
+ <td>
+ <a href="editflagtypes.cgi?action=edit&id=[% type.id %]">Edit</a>
+ | <a href="editflagtypes.cgi?action=copy&id=[% type.id %]">Copy</a>
+ | <a href="editflagtypes.cgi?action=confirmdelete&id=[% type.id %]"
+ onclick="return confirmDelete([% type.id %], '[% type.name FILTER js %]',
+ [% type.flag_count %]);">Delete</a>
+ </td>
+ </tr>
+
+ [% END %]
+
+ </table>
+[% END %]
diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl
index ec2616bf9..32449f041 100644
--- a/template/en/default/attachment/edit.html.tmpl
+++ b/template/en/default/attachment/edit.html.tmpl
@@ -32,6 +32,8 @@
table.attachment_info th { text-align: right; vertical-align: top; }
table.attachment_info td { text-align: left; vertical-align: top; }
#noview { text-align: left; vertical-align: center; }
+
+ table#flags th, table#flags td { font-size: small; vertical-align: baseline; }
"
%]
@@ -158,8 +160,7 @@
<b>MIME Type:</b><br>
<input type="text" size="20" name="contenttypeentry" value="[% contenttype FILTER html %]"><br>
-
- <b>Flags:</b><br>
+
<input type="checkbox" id="ispatch" name="ispatch" value="1"
[% 'checked="checked"' IF ispatch %]>
<label for="ispatch">patch</label>
@@ -168,20 +169,14 @@
<label for="isobsolete">obsolete</label><br>
[% IF (Param("insidergroup") && UserInGroup(Param("insidergroup"))) %]
<input type="checkbox" name="isprivate" value="1"[% " checked" IF isprivate %]> private<br><br>
+ [% ELSE %]<br>
[% END %]
- [% IF statusdefs.size %]
- <b>Status:</b><br>
- [% FOREACH def = statusdefs %]
- <input type="checkbox" id="status-[% def.id %]" name="status"
- value="[% def.id %]"
- [% 'checked="checked"' IF statuses.${def.id} %]>
- <label for="status-[% def.id %]">
- [% def.name FILTER html %]
- </label><br>
- [% END %]
+ [% IF flag_types.size > 0 %]
+ <b>Flags:</b><br>
+ [% PROCESS "flag/list.html.tmpl" bug_id=bugid attach_id=attachid %]<br>
[% END %]
-
+
<div id="smallCommentFrame">
<b>Comment (on the bug):</b><br>
<textarea name="comment" rows="5" cols="25" wrap="soft"></textarea><br>
diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl
index e7aa8b0ef..59f749695 100644
--- a/template/en/default/attachment/list.html.tmpl
+++ b/template/en/default/attachment/list.html.tmpl
@@ -19,13 +19,18 @@
# Contributor(s): Myk Melez <myk@mozilla.org>
#%]
+[%# Whether or not to include flags. %]
+[% display_flags = num_attachment_flag_types > 0 %]
+
<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">Created</th>
- <th bgcolor="#cccccc" align="left">Status</th>
+ [% IF display_flags %]
+ <th bgcolor="#cccccc" align="left">Flags</th>
+ [% END %]
<th bgcolor="#cccccc" align="left">Actions</th>
</tr>
[% canseeprivate = !Param("insidergroup") || UserInGroup(Param("insidergroup")) %]
@@ -50,16 +55,24 @@
<td valign="top">[% attachment.date %]</td>
- <td valign="top">
- [% IF attachment.statuses.size == 0 %]
- <i>none</i>
- [% ELSE %]
- [% FOREACH s = attachment.statuses %]
- [% s FILTER html FILTER replace('\s', '&nbsp;') %]<br>
+ [% IF display_flags %]
+ <td valign="top">
+ [% IF attachment.flags.size == 0 %]
+ <i>none</i>
+ [% ELSE %]
+ [% FOR flag = attachment.flags %]
+ [% IF flag.setter %]
+ [% flag.setter.nick FILTER html %]:
+ [% END %]
+ [%+ flag.type.name %][% flag.status %]
+ [%+ IF flag.status == "?" && flag.requestee %]
+ ([% flag.requestee.nick %])
+ [% END %]<br>
+ [% END %]
[% END %]
- [% END %]
- </td>
-
+ </td>
+ [% END %]
+
<td valign="top">
[% IF attachment.canedit %]
<a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=edit">Edit</a>
@@ -72,7 +85,7 @@
[% END %]
<tr>
- <td colspan="4">
+ <td colspan="[% display_flags ? 4 : 3 %]">
<a href="attachment.cgi?bugid=[% bugid %]&amp;action=enter">Create a New Attachment</a> (proposed patch, testcase, etc.)
</td>
<td colspan="1">
diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl
index 9cf33b8b5..ef9ec2d7f 100644
--- a/template/en/default/bug/edit.html.tmpl
+++ b/template/en/default/bug/edit.html.tmpl
@@ -194,7 +194,7 @@
[% END %]
</tr>
-[%# *** QAContact URL Summary Whiteboard Keywords *** %]
+[%# *** QAContact URL Requests Summary Whiteboard Keywords *** %]
[% IF Param('useqacontact') %]
<tr>
@@ -218,17 +218,23 @@
[% END %]
</b>
</td>
- <td colspan="7">
+ <td colspan="5">
<input name="bug_file_loc" accesskey="u"
value="[% bug.bug_file_loc FILTER html %]" size="60">
</td>
+ <td rowspan="4" colspan="2" valign="top">
+ [% IF flag_types.size > 0 %]
+ <b>Flags:</b><br>
+ [% PROCESS "flag/list.html.tmpl" %]
+ [% END %]
+ </td>
</tr>
<tr>
<td align="right">
<b><u>S</u>ummary:</b>
</td>
- <td colspan="7">
+ <td colspan="5">
<input name="short_desc" accesskey="s"
value="[% bug.short_desc FILTER html %]" size="60">
</td>
@@ -239,7 +245,7 @@
<td align="right">
<b>Status <u>W</u>hiteboard:</b>
</td>
- <td colspan="7">
+ <td colspan="5">
<input name="status_whiteboard" accesskey="w"
value="[% bug.status_whiteboard FILTER html %]" size="60">
</td>
@@ -252,7 +258,7 @@
<b>
<a href="describekeywords.cgi"><u>K</u>eywords</a>:
</b>
- <td colspan="7">
+ <td colspan="5">
<input name="keywords" accesskey="k"
value="[% bug.keywords.join(', ') FILTER html %]" size="60">
</td>
@@ -263,8 +269,8 @@
[%# *** Attachments *** %]
[% PROCESS attachment/list.html.tmpl
- attachments = bug.attachments
- bugid = bug.bug_id %]
+ attachments = bug.attachments
+ bugid = bug.bug_id %]
[%# *** Dependencies Votes *** %]
diff --git a/template/en/default/flag/list.html.tmpl b/template/en/default/flag/list.html.tmpl
new file mode 100644
index 000000000..951f248db
--- /dev/null
+++ b/template/en/default/flag/list.html.tmpl
@@ -0,0 +1,94 @@
+[%# 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>
+ #%]
+
+<table id="flags">
+
+ [% FOREACH type = flag_types %]
+ [% FOREACH flag = type.flags %]
+ <tr>
+ <td>
+ [% flag.setter.nick FILTER html %]:
+ </td>
+ <td>
+ [% type.name FILTER html %]
+ </td>
+ <td>
+ <select name="flag-[% flag.id %]">
+ <option value="X"></option>
+ <option value="+" [% "selected" IF flag.status == "+" %]>+</option>
+ <option value="-" [% "selected" IF flag.status == "-" %]>-</option>
+ <option value="?" [% "selected" IF flag.status == "?" %]>?</option>
+ </select>
+ </td>
+ <td>
+ [% IF flag.status == "?" && flag.requestee %]([% flag.requestee.nick FILTER html %])[% END %]
+ </td>
+ </tr>
+ [% END %]
+ [% IF !type.flags || type.flags.size == 0 %]
+ <tr>
+ <td>&nbsp;</td>
+ <td>[% type.name %]</td>
+ <td>
+ <select name="flag_type-[% type.id %]">
+ <option value="X"></option>
+ <option value="+">+</option>
+ <option value="-">-</option>
+ [% IF type.is_requestable %]
+ <option value="?">?</option>
+ [% END %]
+ </select>
+ </td>
+ <td>
+ [% IF type.is_requestable && type.is_requesteeble %]
+ (<input type="text" name="requestee-[% type.id %]" size="8" maxlength="255">)
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ [% END %]
+
+ [% FOREACH type = flag_types %]
+ [% NEXT UNLESS type.flags.size > 0 && type.is_multiplicable %]
+ [% IF !separator_displayed %]
+ <tr><td colspan="3"><hr></td></tr>
+ [% separator_displayed = 1 %]
+ [% END %]
+ <tr>
+ <td colspan="2">addl. [% type.name %]</td>
+ <td>
+ <select name="flag_type-[% type.id %]">
+ <option value="X"></option>
+ <option value="+">+</option>
+ <option value="-">-</option>
+ [% IF type.is_requestable %]
+ <option value="?">?</option>
+ [% END %]
+ </select>
+ </td>
+ <td>
+ [% IF type.is_requestable && type.is_requesteeble %]
+ (<input type="text" name="requestee-[% type.id %]" size="8" maxlength="255">)
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+
+</table>
diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl
index bf93977ad..1981364f1 100644
--- a/template/en/default/global/code-error.html.tmpl
+++ b/template/en/default/global/code-error.html.tmpl
@@ -40,6 +40,10 @@
to any [% parameters %] which you may have set before calling
ThrowCodeError.
+ [% ELSIF error == "action_unrecognized" %]
+ I don't recognize the value (<em>[% variables.action FILTER html %]</em>)
+ of the <em>action</em> variable.
+
[% ELSIF error == "attachment_already_obsolete" %]
Attachment #[% attachid FILTER html %] ([% description FILTER html %])
is already obsolete.
@@ -78,10 +82,40 @@
[% ELSIF error == "no_bug_data" %]
No data when fetching bug [% bug_id %].
+ [% ELSIF error == "flag_nonexistent" %]
+ There is no flag with ID #[% variables.id %].
+
+ [% ELSIF error == "flag_status_invalid" %]
+ The flag status <em>[% variables.status FILTER html %]</em> is invalid.
+
+ [% ELSIF error == "flag_type_component_nonexistent" %]
+ The component <em>[% variables.component FILTER html %] does not exist
+ in the product <em>[% variables.product FILTER html %]</em>.
+
+ [% ELSIF error == "flag_type_component_without_product" %]
+ A component was selected without a product being selected.
+
+ [% ELSIF error == "flag_type_id_invalid" %]
+ The flag type ID <em>[% variables.id FILTER html %]</em> is not
+ a positive integer.
+
+ [% ELSIF error == "flag_type_nonexistent" %]
+ There is no flag type with the ID <em>[% variables.id %]</em>.
+
+ [% ELSIF error == "flag_type_product_nonexistent" %]
+ The product <em>[% variables.product FILTER html %]</em> does not exist.
+
+ [% ELSIF error == "flag_type_target_type_invalid" %]
+ The target type was neither <em>bug</em> nor <em>attachment</em>
+ but rather <em>[% variables.target_type FILTER html %]</em>.
+
[% ELSIF error == "no_y_axis_defined" %]
No Y axis was defined when creating report. The X axis is optional,
but the Y axis is compulsory.
+ [% ELSIF error == "request_queue_group_invalid" %]
+ The group field <em>[% group FILTER html %]</em> is invalid.
+
[% ELSIF error == "template_error" %]
[% template_error_msg %]
@@ -91,6 +125,14 @@
[% ELSIF error == "unknown_action" %]
Unknown action [% action FILTER html %]!
+ [% ELSIF error == "unknown_component" %]
+ [% title = "Unknown Component" %]
+ There is no component named <em>[% variables.component FILTER html %]</em>.
+
+ [% ELSIF error == "unknown_product" %]
+ [% title = "Unknown Product" %]
+ There is no product named <em>[% variables.product FILTER html %]</em>.
+
[% ELSE %]
[%# Give sensible error if error functions are used incorrectly.
#%]
diff --git a/template/en/default/global/messages.html.tmpl b/template/en/default/global/messages.html.tmpl
index 584c4a93e..85c678fdc 100644
--- a/template/en/default/global/messages.html.tmpl
+++ b/template/en/default/global/messages.html.tmpl
@@ -81,6 +81,34 @@
[% title = "Password Changed" %]
Your password has been changed.
+ [% ELSIF message_tag == "flag_type_created" %]
+ [% title = "Flag Type Created" %]
+ The flag type <em>[% name FILTER html %]</em> has been created.
+ <a href="editflagtypes.cgi">Back to flag types.</a>
+
+ [% ELSIF message_tag == "flag_type_changes_saved" %]
+ [% title = "Flag Type Changes Saved" %]
+ <p>
+ Your changes to the flag type <em>[% name FILTER html %]</em>
+ have been saved.
+ <a href="editflagtypes.cgi">Back to flag types.</a>
+ </p>
+
+ [% ELSIF message_tag == "flag_type_deleted" %]
+ [% title = "Flag Type Deleted" %]
+ <p>
+ The flag type <em>[% name FILTER html %]</em> has been deleted.
+ <a href="editflagtypes.cgi">Back to flag types.</a>
+ </p>
+
+ [% ELSIF message_tag == "flag_type_deactivated" %]
+ [% title = "Flag Type Deactivated" %]
+ <p>
+ The flag type <em>[% flag_type.name FILTER html %]</em>
+ has been deactivated.
+ <a href="editflagtypes.cgi">Back to flag types.</a>
+ </p>
+
[% ELSIF message_tag == "shutdown" %]
[% title = "Bugzilla is Down" %]
[% Param("shutdownhtml") %]
diff --git a/template/en/default/global/select-menu.html.tmpl b/template/en/default/global/select-menu.html.tmpl
index c27f60e8b..7b7fddb29 100644
--- a/template/en/default/global/select-menu.html.tmpl
+++ b/template/en/default/global/select-menu.html.tmpl
@@ -22,12 +22,18 @@
[%# INTERFACE:
# name: string; the name of the menu.
#
+ # multiple: boolean; whether or not the menu is multi-select
+ #
+ # size: integer; if multi-select, the number of items to display at once
+ #
# options: array or hash; the items with which to populate the array.
# If a hash is passed, the hash keys become the names displayed
# to the user while the hash values become the value of the item.
#
# default: string; the item selected in the menu by default.
#
+ # onchange: code; JavaScript to be run when the user changes the value
+ # selected in the menu.
#%]
[%# Get the scalar representation of the options reference,
@@ -37,7 +43,9 @@
#%]
[% options_type = BLOCK %][% options %][% END %]
-<select name="[% name FILTER html %]">
+<select name="[% name FILTER html %]"
+ [% IF onchange %]onchange="[% onchange %]"[% END %]
+ [% IF multiple %] multiple [% IF size %] size="[% size %]" [% END %] [% END %]>
[% IF options_type.search("ARRAY") %]
[% FOREACH value = options %]
<option value="[% value FILTER html %]"
@@ -45,7 +53,7 @@
[% value FILTER html %]
</option>
[% END %]
- [% ELSIF values_type.search("HASH") %]
+ [% ELSIF options_type.search("HASH") %]
[% FOREACH option = options %]
<option value="[% option.value FILTER html %]"
[% " selected" IF option.value == default %]>
diff --git a/template/en/default/global/useful-links.html.tmpl b/template/en/default/global/useful-links.html.tmpl
index 1e5b09df1..785a9d75e 100644
--- a/template/en/default/global/useful-links.html.tmpl
+++ b/template/en/default/global/useful-links.html.tmpl
@@ -50,6 +50,8 @@
<input name="id" size="6"> |
<a href="reports.cgi">Reports</a>
+
+ | <a href="request.cgi">Requests</a>
[% IF user.login && Param('usevotes') %]
| <a href="votes.cgi?action=show_user">My Votes</a>
@@ -68,7 +70,7 @@
|| user.canblessany %]
[% ', <a href="editproducts.cgi">products</a>'
IF user.groups.editcomponents %]
- [% ', <a href="editattachstatuses.cgi"> attachment&nbsp;statuses</a>'
+ [% ', <a href="editflagtypes.cgi">flags</a>'
IF user.groups.editcomponents %]
[% ', <a href="editgroups.cgi">groups</a>'
IF user.groups.creategroups %]
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
index c6f970df3..c9dca30d4 100644
--- a/template/en/default/global/user-error.html.tmpl
+++ b/template/en/default/global/user-error.html.tmpl
@@ -30,7 +30,7 @@
#%]
[% DEFAULT title = "Error" %]
-
+
[% error_message = BLOCK %]
[% IF error == "aaa_example_error_tag" %]
[% title = "Example Error" %]
@@ -75,6 +75,10 @@
Bug aliases cannot be longer than 20 characters.
Please choose a shorter alias.
+ [% ELSIF error == "authorization_failure" %]
+ [% title = "Authorization Failed" %]
+ You are not allowed to [% action %].
+
[% ELSIF error == "attachment_access_denied" %]
[% title = "Access Denied" %]
You are not permitted access to this attachment.
@@ -129,6 +133,23 @@
format like JPG or PNG, or put it elsewhere on the web and
link to it from the bug's URL field or in a comment on the bug.
+ [% ELSIF error == "flag_type_cc_list_invalid" %]
+ [% title = "Flag Type CC List Invalid" %]
+ The CC list [% cc_list FILTER html %] must be less than 200 characters long.
+
+ [% ELSIF error == "flag_type_description_invalid" %]
+ [% title = "Flag Type Description Invalid" %]
+ The description must be less than 32K.
+
+ [% ELSIF error == "flag_type_name_invalid" %]
+ [% title = "Flag Type Name Invalid" %]
+ The name <em>[% name FILTER html %]</em> must be 1-50 characters long.
+
+ [% ELSIF error == "flag_type_sortkey_invalid" %]
+ [% title = "Flag Type Sort Key Invalid" %]
+ The sort key must be an integer between 0 and 32767 inclusive.
+ It cannot be <em>[% variables.sortkey %]</em>.
+
[% ELSIF error == "illegal_at_least_x_votes" %]
[% title = "Your Query Makes No Sense" %]
The <em>At least ___ votes</em> field must be a simple number.
@@ -176,10 +197,6 @@
[% title = "Invalid Attachment ID" %]
The attachment id [% attach_id FILTER html %] is invalid.
- [% ELSIF error == "invalid_attach_status" %]
- [% title = "Invalid Attachment Status" %]
- One of the statuses you entered is not a valid status for this attachment.
-
[% ELSIF error == "invalid_content_type" %]
[% title = "Invalid Content-Type" %]
The content type <em>[% contenttype FILTER html %]</em> is invalid.
@@ -281,6 +298,18 @@
intentionally cleared out the "Reassign bug to"
field, [% Param("browserbugmessage") %]
+ [% ELSIF error == "requestee_too_short" %]
+ [% title = "Requestee Name Too Short" %]
+ One or two characters match too many users, so please enter at least
+ three characters of the name/email address of the user you want to set
+ the flag.
+
+ [% ELSIF error == "requestee_too_many_matches" %]
+ [% title = "Requestee String Matched Too Many Times" %]
+ The string <em>[% requestee FILTER html %]</em> matched more than
+ 100 users. Enter more of the name to bring the number of matches
+ down to a reasonable amount.
+
[% ELSIF error == "unknown_keyword" %]
[% title = "Unknown Keyword" %]
<code>[% keyword FILTER html %]</code> is not a known keyword.
diff --git a/template/en/default/request/created-email.txt.tmpl b/template/en/default/request/created-email.txt.tmpl
new file mode 100644
index 000000000..3edf10786
--- /dev/null
+++ b/template/en/default/request/created-email.txt.tmpl
@@ -0,0 +1,41 @@
+[%# 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>
+ #%]
+From: bugzilla-request-daemon
+To: [% flag.requestee.email IF flag.requestee.email_prefs.FlagRequestee %]
+CC: [% flag.type.cc_list %]
+Subject: [% flag.type.name %]: [Bug [% flag.target.bug.id %]] [% flag.target.bug.summary %]
+[%- IF flag.target.attachment.exists %] :
+ [Attachment [% flag.target.attachment.id %]] [% flag.target.attachment.summary %][% END %]
+
+[%+ USE wrap -%]
+[%- FILTER bullet = wrap(80) -%]
+[% flag.setter.identity %] has asked you for [% flag.type.name %] on bug #
+ [%- flag.target.bug.id %] ([% flag.target.bug.summary %])
+[%- IF flag.target.attachment.exists %], attachment #
+ [%- flag.target.attachment.id %] ([% flag.target.attachment.summary %])[% END %].
+
+[%+ IF flag.target.type == 'bug' -%]
+ [% Param('urlbase') %]show_bug.cgi?id=[% flag.target.bug.id %]
+[%- ELSIF flag.target.type == 'attachment' -%]
+ [% Param('urlbase') %]attachment.cgi?id=[% flag.target.attachment.id %]&action=edit
+[%- END %]
+
+[%- END %]
diff --git a/template/en/default/request/fulfilled-email.txt.tmpl b/template/en/default/request/fulfilled-email.txt.tmpl
new file mode 100644
index 000000000..84608c546
--- /dev/null
+++ b/template/en/default/request/fulfilled-email.txt.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): Myk Melez <myk@mozilla.org>
+ #%]
+[% statuses = { '+' => "approved" , '-' => 'denied' , 'X' => "cancelled" } %]
+From: bugzilla-request-daemon
+To: [% flag.setter.email IF flag.setter.email_prefs.FlagRequester %]
+CC: [% flag.type.cc_list %]
+Subject: [% flag.type.name %]: [Bug [% flag.target.bug.id %]] [% flag.target.bug.summary %]
+[%- IF flag.target.attachment.exists %] :
+ [Attachment [% flag.target.attachment.id %]] [% flag.target.attachment.summary %][% END %]
+
+[%+ USE wrap -%]
+[%- FILTER bullet = wrap(80) -%]
+[% user.realname %] <[% user.login %]> has [% statuses.${flag.status} %] your request for [% flag.type.name %] on bug #
+ [%- flag.target.bug.id %] ([% flag.target.bug.summary %])
+[%- IF flag.target.attachment.exists %], attachment #
+ [%- flag.target.attachment.id %] ([% flag.target.attachment.summary %])[% END %].
+
+[%+ IF flag.target.type == 'bug' -%]
+ [% Param('urlbase') %]show_bug.cgi?id=[% flag.target.bug.id %]
+[%- ELSIF flag.target.type == 'attachment' -%]
+ [% Param('urlbase') %]attachment.cgi?id=[% flag.target.attachment.id %]&action=edit
+[%- END %]
+
+[%- END %]
diff --git a/template/en/default/request/queue.html.tmpl b/template/en/default/request/queue.html.tmpl
new file mode 100644
index 000000000..14f244ab3
--- /dev/null
+++ b/template/en/default/request/queue.html.tmpl
@@ -0,0 +1,193 @@
+[%# 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>
+ #%]
+
+[%# The javascript and header_html blocks get used in header.html.tmpl. %]
+[% javascript = BLOCK %]
+ var usetms = 0; // do we have target milestone?
+ var first_load = 1; // is this the first time we load the page?
+ var last_sel = []; // caches last selection
+ var cpts = new Array();
+ [% FOREACH p = products %]
+ cpts['[% p FILTER js %]'] = [
+ [%- FOREACH item = components_by_product.$p %]'[% item FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ];
+ [% END %]
+[% END %]
+
+[% header_html = BLOCK %]
+ <script language="JavaScript" type="text/javascript" src="productmenu.js"></script>
+[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title="Request Queue"
+ style = "
+ table.requests th { text-align: left; }
+ table#filter th { text-align: right; }
+ "
+%]
+
+[% column_headers = {
+ "type" => "Flag" ,
+ "status" => "Status" ,
+ "bug" => "Bug" ,
+ "attachment" => "Attachment" ,
+ "requester" => "Requester" ,
+ "requestee" => "Requestee" ,
+ "created" => "Created" ,
+ "category" => "Product/Component" } %]
+
+[% DEFAULT display_columns = ["requester", "requestee", "type", "bug", "attachment", "created"]
+ group_field = "Requestee"
+ group_value = ""
+%]
+
+[% IF requests.size == 0 %]
+ <p>
+ No requests.
+ </p>
+[% ELSE %]
+ [% FOREACH request = requests %]
+ [% PROCESS start_new_table IF request.$group_field != group_value %]
+ <tr>
+ [% FOREACH column = display_columns %]
+ [% NEXT IF column == group_field || excluded_columns.contains(column) %]
+ <td>[% PROCESS "display_$column" %]</td>
+ [% END %]
+ </tr>
+ [% END %]
+ </table>
+[% END %]
+
+<h3>Filter the Queue</h3>
+
+<form action="request.cgi" method="get">
+ <input type="hidden" name="action" value="queue">
+
+ <table id="filter">
+ <tr>
+ <th>Requester:</th>
+ <td><input type="text" name="requester" value="[% form.requester FILTER html %]" size="20"></td>
+ <th>Product:</th>
+ <td>
+ <select name="product" onChange="selectProduct(this.form, 'product', 'component', 'Any');">
+ <option value="">Any</option>
+ [% FOREACH item = products %]
+ <option value="[% item FILTER html %]"
+ [% "selected" IF form.product == item %]>[% item FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+ <th>Flag:</th>
+ <td>
+ [% PROCESS "global/select-menu.html.tmpl"
+ name="type"
+ options=types
+ default=form.type %]
+ </td>
+
+ [%# We could let people see a "queue" of non-pending requests. %]
+ <!--
+ <th>Status:</th>
+ <td>
+ [%# PROCESS "global/select-menu.html.tmpl"
+ name="status"
+ options=["all", "?", "+-", "+", "-"]
+ default=form.status %]
+ </td>
+ -->
+
+ </tr>
+ <tr>
+ <th>Requestee:</th>
+ <td><input type="text" name="requestee" value="[% form.requestee FILTER html %]" size="20"></td>
+ <th>Component:</th>
+ <td>
+ <select name="component">
+ <option value="">Any</option>
+ [% FOREACH item = components %]
+ <option value="[% item FILTER html %]" [% "selected" IF form.component == item %]>
+ [% item FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+ <th>Group By:</th>
+ <td>
+ [% groups = {
+ "Requester" => 'requester' ,
+ "Requestee" => 'requestee',
+ "Flag" => 'type' ,
+ "Product/Component" => 'category'
+ } %]
+ [% PROCESS "global/select-menu.html.tmpl" name="group" options=groups default=form.group %]
+ </td>
+ <td><input type="submit" value="Filter"></td>
+ </tr>
+ </table>
+
+</form>
+
+[% PROCESS global/footer.html.tmpl %]
+
+[% BLOCK start_new_table %]
+ [% "</table>" UNLESS group_value == "" %]
+ <h3>[% column_headers.$group_field %]: [% request.$group_field FILTER html %]</h3>
+ <table class="requests" cellspacing="0" cellpadding="4" border="1">
+ <tr>
+ [% FOREACH column = display_columns %]
+ [% NEXT IF column == group_field || excluded_columns.contains(column) %]
+ <th>[% column_headers.$column %]</th>
+ [% END %]
+ </tr>
+ [% group_value = request.$group_field %]
+[% END %]
+
+[% BLOCK display_type %]
+ [% request.type FILTER html %]
+[% END %]
+
+[% BLOCK display_status %]
+ [% request.status %]
+[% END %]
+
+[% BLOCK display_bug %]
+ <a href="show_bug.cgi?id=[% request.bug_id %]">
+ [% request.bug_id %]: [%+ request.bug_summary FILTER html %]</a>
+[% END %]
+
+[% BLOCK display_attachment %]
+ [% IF request.attach_id %]
+ <a href="attachment.cgi?id=[% request.attach_id %]&action=edit">
+ [% request.attach_id %]: [%+ request.attach_summary FILTER html %]</a>
+ [% ELSE %]
+ N/A
+ [% END %]
+[% END %]
+
+[% BLOCK display_requestee %]
+ [% request.requestee FILTER html %]
+[% END %]
+
+[% BLOCK display_requester %]
+ [% request.requester FILTER html %]
+[% END %]
+
+[% BLOCK display_created %]
+ [% request.created FILTER html %]
+[% END %]
+
diff --git a/template/en/default/request/verify.html.tmpl b/template/en/default/request/verify.html.tmpl
new file mode 100644
index 000000000..ad4c07d2c
--- /dev/null
+++ b/template/en/default/request/verify.html.tmpl
@@ -0,0 +1,108 @@
+<!-- 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, mform: hashes; the form values submitted to the script, used by
+ # hidden-fields to generate hidden form fields replicating
+ # the original form
+ # flags: array; the flags the user made, including information about
+ # potential requestees for those flags (based on
+ # the string the user typed into the requestee fields)
+ # target: record; the bug/attachment for which the flags are being made
+ #%]
+
+[% UNLESS header_done %]
+ [% title = BLOCK %]
+ Verify Requests for Bug #[% target.bug.id %]
+ [% IF target.attachment %], Attachment #[% target.attachment.id %][% END %]
+ [% END %]
+
+ [% h1 = BLOCK %]
+ Verify Requests for <a href="show_bug.cgi?id=[% target.bug.id %]">Bug #[% target.bug.id %]</a>
+ [% IF target.attachment.exists %],
+ <a href="attachment.cgi?id=[% target.attachment.id %]&action=edit">Attachment #[% target.attachment.id %]</a>
+ [% END %]
+ [% END %]
+
+ [% h2 = BLOCK %]
+ [% target.bug.summary FILTER html %]
+ [% IF target.attachment.exists %]
+ : [% target.attachment.summary FILTER html %]
+ [% END %]
+ [% END %]
+
+ [% PROCESS global/header.html.tmpl %]
+[% END %]
+
+<form method="post">
+
+[% PROCESS "global/hidden-fields.html.tmpl"
+ exclude=("^(flag_type|requestee)-") %]
+
+[% FOREACH flag = flags %]
+ [% IF flag.requestees.size == 0 %]
+ <p>
+ Sorry, I can't find a user whose name or email address contains
+ the string <em>[% flag.requestee_str FILTER html %]</em>.
+ Double-check that the user's name or email address contains that
+ string, or try entering a shorter string.
+ </p>
+ <p>
+ Ask <input type="text" size="20" maxlength="255"
+ name="requestee-[% flag.type.id %]"
+ value="[% flag.requestee_str FILTER html %]">
+ for [% flag.type.name FILTER html %]
+ <input type="hidden" name="flag_type-[% flag.type.id %]" value="?">
+ </p>
+
+ [% ELSIF flag.requestees.size == 1 %]
+ <input type="hidden"
+ name="requestee-[% flag.type.id %]"
+ value="[% flag.requestee.email FILTER html %]">
+ <input type="hidden" name="flag_type-[% flag.type.id %]" value="?">
+
+ [% ELSE %]
+ <p>
+ More than one user's name or email address contains the string
+ <em>[% flag.requestee_str FILTER html %]</em>. Choose the user
+ you meant from the following menu or click the back button and try
+ again with a more specific string.
+ </p>
+ <p>
+ Ask <select name="requestee-[% flag.type.id %]">
+ [% FOREACH requestee = flag.requestees %]
+ <option value="[% requestee.email FILTER html %]">
+ [% requestee.identity FILTER html%]</option>
+ [% END %]
+ </select>
+ for [% flag.type.name %]
+ <input type="hidden" name="flag_type-[% flag.type.id %]" value="?">
+ </p>
+
+ [% END %]
+[% END %]
+
+<input type="submit" value="Commit">
+
+</form>
+
+[% PROCESS global/footer.html.tmpl %]
+