diff options
Diffstat (limited to 'template/en/default/bug')
35 files changed, 5846 insertions, 0 deletions
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 0000000..67ac689 --- /dev/null +++ b/template/en/default/bug/activity/show.html.tmpl @@ -0,0 +1,49 @@ +[%# 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: object. The bug whose activity is being displayed. + # operations: array of hashes, see activity/table.html.tmpl. + # + # This template also needs to be called with the interface to the + # activity/table.html.tmpl template fulfilled. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% filtered_desc = bug.short_desc FILTER html %] +[% PROCESS global/header.html.tmpl + title = "Changes made to $terms.bug $bug.bug_id" + header = "Activity log for $terms.bug $bug.bug_id: $filtered_desc" + %] + +<p> + [% "Back to $terms.bug $bug.bug_id" FILTER bug_link(bug) FILTER none %] +</p> + +[% PROCESS bug/activity/table.html.tmpl %] + +[% IF operations.size > 0 %] + <p> + [% "Back to $terms.bug $bug.bug_id" FILTER bug_link(bug) FILTER none %] + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] 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 0000000..2492534 --- /dev/null +++ b/template/en/default/bug/activity/table.html.tmpl @@ -0,0 +1,113 @@ +[%# 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> + # David D. Kilzer <ddkilzer@kilzer.net> + # Reed Loden <reed@reedloden.com> + #%] + +[%# 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.) + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS bug/time.html.tmpl %] + +[% IF incomplete_data %] + <p> + There used to be an issue in <a href="http://www.bugzilla.org/">Bugzilla</a> + which caused activity data to be lost if there were a large number of cc's + or dependencies. That has been fixed, but some data was already lost in + your activity table 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 FILTER email FILTER html %] + </td> + <td rowspan="[% operation.changes.size %]" valign="top"> + [% operation.when FILTER time %] + </td> + [% FOREACH change = operation.changes %] + [% "</tr><tr>" IF loop.index > 0 %] + <td> + [% IF change.attachid %] + <a href="attachment.cgi?id=[% change.attachid %]"> + Attachment #[% change.attachid %]</a> + [% END %] + [%+ field_descs.${change.fieldname} FILTER html %] + </td> + [% PROCESS change_column change_type = change.removed %] + [% PROCESS change_column change_type = change.added %] + [% END %] + </tr> + [% END %] + </table> +[% ELSE %] + <p> + No changes have been made to this [% terms.bug %] yet. + </p> +[% END %] + +[% BLOCK change_column %] + <td> + [% IF change_type.defined %] + [% IF change.fieldname == 'estimated_time' || + change.fieldname == 'remaining_time' || + change.fieldname == 'work_time' %] + [% PROCESS formattimeunit time_unit=change_type %] + [% ELSIF change.fieldname == 'blocked' || + change.fieldname == 'dependson' %] + [% change_type FILTER bug_list_link FILTER none %] + [% ELSIF change.fieldname == 'assigned_to' || + change.fieldname == 'reporter' || + change.fieldname == 'qa_contact' || + change.fieldname == 'cc' || + change.fieldname == 'flagtypes.name' %] + [% display_value(change.fieldname, change_type) FILTER email FILTER html %] + [% ELSE %] + [% display_value(change.fieldname, change_type) FILTER html %] + [% END %] + [% ELSE %] + + [% END %] + </td> +[% END %] diff --git a/template/en/default/bug/choose.html.tmpl b/template/en/default/bug/choose.html.tmpl new file mode 100644 index 0000000..9009d38 --- /dev/null +++ b/template/en/default/bug/choose.html.tmpl @@ -0,0 +1,35 @@ +[%# 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> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Search by $terms.bug number" + %] + +<form method="get" action="show_bug.cgi"> + <p> + You may find a single [% terms.bug %] by entering its [% terms.bug %] id here: + <input name="id" size="6"> + <input type="submit" id="show" value="Show Me This [% terms.Bug %]"> + </p> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl new file mode 100644 index 0000000..41b91d7 --- /dev/null +++ b/template/en/default/bug/comments.html.tmpl @@ -0,0 +1,235 @@ +[%# 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> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Shane H. W. Travis <travis@sedsystems.ca> + #%] + +[% PROCESS bug/time.html.tmpl %] + + <script type="text/javascript"> + <!-- + function updateCommentPrivacy(checkbox, id) { + var comment_elem = document.getElementById('comment_text_'+id).parentNode; + if (checkbox.checked) { + if (!comment_elem.className.match('bz_private')) { + comment_elem.className = comment_elem.className.concat(' bz_private'); + } + } + else { + comment_elem.className = + comment_elem.className.replace(/(\s*|^)bz_private(\s*|$)/, '$2'); + } + } + + /* The functions below expand and collapse comments */ + + function toggle_comment_display(link, comment_id) { + var comment = document.getElementById('comment_text_' + comment_id); + var re = new RegExp(/\bcollapsed\b/); + if (comment.className.match(re)) + expand_comment(link, comment); + else + collapse_comment(link, comment); + } + + function toggle_all_comments(action) { + var num_comments = [% comments.size FILTER html %]; + + // If for some given ID the comment doesn't exist, this doesn't mean + // there are no more comments, but that the comment is private and + // the user is not allowed to view it. + + for (var id = 0; id < num_comments; id++) { + var comment = document.getElementById('comment_text_' + id); + if (!comment) + continue; + + var link = document.getElementById('comment_link_' + id); + if (action == 'collapse') + collapse_comment(link, comment); + else + expand_comment(link, comment); + } + } + + function collapse_comment(link, comment) { + link.innerHTML = "[+]"; + link.title = "Expand the comment."; + YAHOO.util.Dom.addClass(comment, 'collapsed'); + } + + function expand_comment(link, comment) { + link.innerHTML = "[-]"; + link.title = "Collapse the comment"; + YAHOO.util.Dom.removeClass(comment, 'collapsed'); + } + + /* This way, we are sure that browsers which do not support JS + * won't display this link */ + + function addCollapseLink(count) { + document.write(' <a href="#" class="bz_collapse_comment"' + + ' id="comment_link_' + count + + '" onclick="toggle_comment_display(this, ' + count + + '); return false;" title="Collapse the comment.">[-]<\/a> '); + } + //--> + </script> + + +[% DEFAULT start_at = 0 mode = "show" %] +[% sort_order = user.settings.comment_sort_order.value %] + +[%# NOTE: (start_at > 0) means we came here from a midair collision, + # in which case we don't care what the user's preference is. + %] +[% IF (start_at > 0) %] + [% sort_order = "oldest_to_newest" %] +[% END %] + + +[%# Set up the variables as needed, depending on the sort order %] +[% IF sort_order == "oldest_to_newest" %] + [% count = 0 %] + [% description = 0 %] + [% increment = 1 %] +[% ELSE %] + [% increment = -1 %] + [% IF sort_order == "newest_to_oldest" %] + [% count = comments.size - 1 %] + [% description = 0 %] + [% ELSIF sort_order == "newest_to_oldest_desc_first" %] + [% count = comments.size %] + [% description = comments.size %] + [% END %] +[% END %] + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tr> +<td> + +[% FOREACH comment = comments %] + [% IF count >= start_at %] + [% PROCESS a_comment %] + [% END %] + + [% count = count + increment %] +[% END %] + +[%# Note: this template is used in multiple places; if you use this hook, + # make sure you are aware of this fact. + #%] +[% Hook.process("aftercomments") %] + +</td> +<td> + [% IF mode == "edit" %] + <ul class="bz_collapse_expand_comments"> + <li><a href="#" onclick="toggle_all_comments('collapse'); + return false;">Collapse All Comments</a></li> + <li><a href="#" onclick="toggle_all_comments('expand'); + return false;">Expand All Comments</a></li> + </ul> + [% END %] +</td> +</tr></table> + +[%############################################################################%] +[%# Block for individual comments #%] +[%############################################################################%] + +[% BLOCK a_comment %] + [% RETURN IF comment.is_private AND ! user.is_insider %] + + <div class="bz_comment[% " bz_private" IF comment.is_private %] + [% " bz_comment_hilite" IF marks.$count %] + [% " bz_first_comment" IF count == description %]"> + [% IF count == description %] + [% class_name = "bz_first_comment_head" %] + [% comment_label = "Description" %] + [% ELSE %] + [% class_name = "bz_comment_head" %] + [% comment_label = "Comment " _ count %] + [% END %] + + <div class="[% class_name FILTER html %]"> + + [% IF mode == "edit" %] + <span class="bz_comment_actions"> + <script type="text/javascript"><!-- + addReplyLink([% count %], [% comment.id %]); + addCollapseLink([% count %]); // --> + </script> + </span> + [% END %] + + [% IF mode == "edit" && user.is_insider %] + <div class="bz_private_checkbox"> + <input type="hidden" value="1" + name="defined_isprivate_[% comment.id %]"> + <input type="checkbox" + name="isprivate_[% comment.id %]" value="1" + id="isprivate_[% comment.id %]" + onClick="updateCommentPrivacy(this, [% count %])" + [% " checked=\"checked\"" IF comment.is_private %]> + <label for="isprivate_[% comment.id %]">Private</label> + </div> + [% END %] + + <span class="bz_comment_number"> + <a name="c[% count %]" + href="show_bug.cgi?id=[% bug.bug_id %]#c[% count %]"> + [%- comment_label FILTER html %]</a> + </span> + + <span class="bz_comment_user"> + [% INCLUDE global/user.html.tmpl who = comment.author %] + </span> + + <span class="bz_comment_user_images"> + [% FOREACH group = comment.author.direct_group_membership %] + [% NEXT UNLESS group.icon_url %] + <img src="[% group.icon_url FILTER html %]" + alt="[% group.name FILTER html %]" + title="[% group.name FILTER html %] - [% group.description FILTER html %]"> + [% END %] + </span> + + <span class="bz_comment_time"> + [%+ comment.creation_ts FILTER time %] + </span> + </div> + + [% IF user.is_timetracker && + (comment.work_time > 0 || comment.work_time < 0) %] + <br> + Additional hours worked: + [% PROCESS formattimeunit time_unit=comment.work_time %] + [% END %] + +[%# Don't indent the <pre> block, since then the spaces are displayed in the + # generated HTML + #%] +<pre class="bz_comment_text" + [% ' id="comment_text_' _ count _ '"' IF mode == "edit" %]> + [%- comment.body_full({ wrap => 1 }) FILTER quoteUrls(bug, comment) -%] +</pre> + </div> +[% END %] diff --git a/template/en/default/bug/create/comment-guided.txt.tmpl b/template/en/default/bug/create/comment-guided.txt.tmpl new file mode 100644 index 0000000..df04d8f --- /dev/null +++ b/template/en/default/bug/create/comment-guided.txt.tmpl @@ -0,0 +1,54 @@ +[%# 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: + # This template has no interface. + # + # Form variables from a bug submission (i.e. the fields on a template from + # enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to + # pull out various custom fields and format an initial Description entry + # from them. + #%] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] +User-Agent: [%+ cgi.user_agent() %] +Build Identifier: [%+ cgi.param("buildid") %] + +[%+ cgi.param("comment") IF cgi.param("comment") %] + +[%+ IF cgi.param("reproducible") != "Choose one..." -%] +Reproducible: [%+ cgi.param("reproducible") %] +[% END %] + +[% IF !(cgi.param("reproduce_steps").match('^1\.\s*2\.\s*3\.\s*$') || cgi.param("reproduce_steps").match('^\s*$')) %] +Steps to Reproduce: +[%+ cgi.param("reproduce_steps") %] +[% END %] + +[% IF cgi.param("actual_results") -%] +Actual Results: +[%+ cgi.param("actual_results") %] +[% END %] + +[% IF cgi.param("expected_results") %] +Expected Results: +[%+ cgi.param("expected_results") %] +[% END %] + +[%+ cgi.param("additional_info") %] diff --git a/template/en/default/bug/create/comment.txt.tmpl b/template/en/default/bug/create/comment.txt.tmpl new file mode 100644 index 0000000..e7339d3 --- /dev/null +++ b/template/en/default/bug/create/comment.txt.tmpl @@ -0,0 +1,32 @@ +[%# 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: + # This template has no interface. + # + # Form variables from a bug submission (i.e. the fields on a template from + # enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to + # pull out various custom fields and format an initial Description entry + # from them. + #%] +[% USE Bugzilla %] +[% Hook.process("form") %] + + +[% Bugzilla.cgi.param("comment") %] diff --git a/template/en/default/bug/create/confirm-create-dupe.html.tmpl b/template/en/default/bug/create/confirm-create-dupe.html.tmpl new file mode 100644 index 0000000..b0a5cdd --- /dev/null +++ b/template/en/default/bug/create/confirm-create-dupe.html.tmpl @@ -0,0 +1,57 @@ +[%# 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 Olav Vitters. + # + # Contributor(s): Olav Vitters <olav@bkor.dhs.org> + #%] + +[%# INTERFACE: + # bugid: integer. ID of the bug previously used to create a bug. + # allow_override: boolean int. Is 1 if the user may submit the bug again. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "Already filed $terms.bug" +%] + +[% USE Bugzilla %] + +<table cellpadding="20"> + <tr> + <td bgcolor="#ff0000"> + <font size="+2"> + You already used the form to file [% "$terms.bug $bugid" FILTER bug_link(bugid) FILTER none %]. + </font> + </td> + </tr> +</table> + +<p><font size="big">You are highly encouraged to visit [% "$terms.bug $bugid" +FILTER bug_link(bugid) FILTER none %].</font></p> + +[% IF allow_override %] + <p>If you are sure you used the same form to submit a new [% terms.bug %], + click 'File [% terms.bug %] again'.<p> + + <form name="create" id="create" method="post" action="post_bug.cgi" + [%- IF Bugzilla.cgi.param("data") %] enctype="multipart/form-data"[% END %]> + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^(Bugzilla_login|Bugzilla_password|ignore_token)$" %] + <input type="hidden" name="ignore_token" value="[% bugid FILTER html %]"> + <input type="submit" value="File [% terms.bug %] again" id="file_bug_again"> + </form> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/create/create-guided.html.tmpl b/template/en/default/bug/create/create-guided.html.tmpl new file mode 100644 index 0000000..9f2a21b --- /dev/null +++ b/template/en/default/bug/create/create-guided.html.tmpl @@ -0,0 +1,523 @@ +[%# 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> + # Christine Begle <cbegle@mozilla.org> + #%] + +[%# INTERFACE: + # This template has the same interface as create.html.tmpl + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/header.html.tmpl + title = "Enter $terms.ABug" + onload = "PutDescription()" + style = "#somebugs { width: 100%; height: 500px }" + %] + +<p> + <font color="red"> + This is a template used on mozilla.org. This template, and the + comment-guided.txt.tmpl template that formats the data submitted via + the form in this template, are included as a demo of what it's + possible to do with custom templates in general, and custom [% terms.bug %] + entry templates in particular. As much of the text will not apply, + you should alter it + if you want to use this form on your [% terms.Bugzilla %] installation. + </font> +</p> + +[% tablecolour = "#FFFFCC" %] + +[%# This script displays the descriptions for selected components. %] +<script type="text/javascript"> +var descriptions = [ +[% FOREACH c = product.components %] + '[% c.description FILTER js %]', +[% END %] +]; + +function PutDescription() { + if ((document.getElementById) && (document.body.innerHTML)) { + var componentIndex = document.getElementById('component').selectedIndex; + if (componentIndex != -1) { + var description = document.getElementById('description'); + description.innerHTML = descriptions[componentIndex]; + } + } +} +</script> + +<a name="step1"></a> +<h3>Step 1 of 3 - has your [% terms.bug %] already been reported?</h3> + +<p> + <font color="red">Please don't skip this step - half of all + [% terms.bugs %] filed are + reported already.</font> + Check the two lists of frequently-reported [% terms.bugs %]: +</p> + +[%# Include other products if sensible %] +[% IF product.name == "Firefox" %] + [% productstring = "product=Mozilla%20Application%20Suite&product=Firefox" %] +[% ELSIF product.name == "Thunderbird" %] + [% productstring = "product=Mozilla%20Application%20Suite&product=Thunderbird" %] +[% ELSE %] + [% productstring = BLOCK %]product=[% product.name FILTER url_quote %][% END %] +[% END %] + +<p> + <a href="duplicates.cgi?[% productstring %]&format=simple" target="somebugs">All-time Top 100</a> (loaded initially) | + <a href="duplicates.cgi?[% productstring %]&format=simple&sortby=delta&reverse=1&maxrows=100&changedsince=14" target="somebugs">Hot in the last two weeks</a> +</p> + +<iframe name="somebugs" id="somebugs" + style="border: 2px black solid" + src="duplicates.cgi?[% productstring %]&format=simple"> +</iframe> + +<p> + If your [% terms.bug %] isn't there, search [% terms.Bugzilla %] by entering + a few key words having to do with your [% terms.bug %] in this box. + For example: <tt><b>pop3 mail</b></tt> or <tt><b>copy paste</b></tt>. + The results will appear above. + </p> + +[%# All bugs opened inside the past six months %] + <form action="buglist.cgi" method="get" target="somebugs"> + <input type="hidden" name="format" value="simple"> + <input type="hidden" name="order" value="relevance desc"> + <input type="hidden" name="bug_status" value="__all__"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + [% IF product.name == "Firefox" OR + product.name == "Thunderbird" OR + product.name == "Mozilla Application Suite" OR + product.name == "Camino" %] + <input type="hidden" name="product" value="Core"> + <input type="hidden" name="product" value="Toolkit"> + <input type="hidden" name="product" value="PSM"> + <input type="hidden" name="product" value="NSPR"> + <input type="hidden" name="product" value="NSS"> + [% END %] + <input type="hidden" name="chfieldfrom" value="-6m"> + <input type="hidden" name="chfieldto" value="Now"> + <input type="hidden" name="chfield" value="[Bug creation]"> + <input type="text" name="content" size="40"> + <input type="submit" id="search" value="Search"> + </form> + +<p> + Look through the search results. If you get the + <tt><b>[% terms.zeroSearchResults %]</b></tt> message, [% terms.Bugzilla %] + found no [% terms.bugs %] that + match. Check for typing mistakes, or try fewer or different keywords. + If you find [% terms.abug %] that looks the same as yours, please add + any useful extra information you have to it, rather than opening a new one. +</p> + + +<a name="step2"></a> +<h3>Step 2 of 3 - give information</h3> + +<p> + If you've tried a few searches and your [% terms.bug %] really isn't in + there, tell us all about it. +</p> + +<form method="post" action="post_bug.cgi"> + <input type="hidden" name="format" value="guided"> + <input type="hidden" name="assigned_to" value=""> + <input type="hidden" name="priority" + value="[% default.priority FILTER html %]"> + <input type="hidden" name="version" + value="[% default.version FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + +<table valign="top" cellpadding="5" cellspacing="5" border="0"> + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Product</b> + </td> + <td valign="top"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + [% product.name FILTER html %] + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>Component</b> + </td> + <td valign="top"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr> + <td valign="top"> + <select name="component" id="component" + size="5" onchange="PutDescription()"> + [% IF NOT default.component_ %] + [%# Various b.m.o. products have a "General" component, + which is a useful default. %] + [% default.component_ = "General" %] + [% END %] + [% FOREACH c = product.components %] + <option value="[% c.name FILTER html %]" + [% " selected=\"selected\"" IF c.name == default.component_ %]> + [% c.name FILTER html %] + </option> + [% END %] + </select> + </td> + <td valign="top" width="100%"> + <div id="description" style="color: green; margin-left: 10px; + height: 5em; overflow: auto;"> + <script type="text/javascript"> + if ((document.getElementById) && (document.body.innerHTML)) { + document.write("\ + Select a component to see its description here."); + } + </script> + </div> + </td> + </tr> + </table> + + <p> + The area where the problem occurs. + To pick the right component, you could use the same one as + similar [% terms.bugs %] you found in your search, or read the full list of + <a target="_blank" href="describecomponents.cgi?product= + [% product.name FILTER url_quote %]">component + descriptions</a> (opens in new window) if you need more help. + </p> + </td> + </tr> + + [%# We override rep_platform and op_sys for simplicity. The values chosen + are based on which are most common in the b.m.o database %] + [% rep_platform = [ "PC", "Macintosh", "All", "Other" ] %] + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Hardware Platform</b> + </td> + <td valign="top"> + [% PROCESS select sel = 'rep_platform' %] + </td> + </tr> + + [% op_sys = [ "Windows 2000", "Windows XP", "Windows Vista", "Windows 7", + "Mac OS X", "Linux", "All", "Other" ] %] + + <tr> + <td align="right" valign="top"> + <b>Operating System</b> + </td> + <td valign="top"> + [% PROCESS select sel = 'op_sys' %] + </td> + </tr> + + [% IF product.name.match("Firefox|Camino|Mozilla Application Suite") %] + [% matches = cgi.user_agent('Gecko/(\d+)') %] + [% buildid = cgi.user_agent() IF matches %] + [% END %] + + [%# Accept URL parameter build ID for non-browser products %] + [% IF cgi.param("buildid") %] + [% buildid = cgi.param("buildid") %] + [% END %] + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Build Identifier</b> + </td> + <td valign="top"> + <input type="text" size="80" name="buildid" value="[% buildid FILTER html %]"> + <p> + This should identify the exact version of the product you were using. + If the above field is blank or you know it is incorrect, copy the + version text from the product's Help | + About menu (for browsers this will begin with "Mozilla/5.0..."). + If the product won't start, instead paste the complete URL you downloaded + it from. + </p> + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>URL</b> + </td> + <td valign="top"> + <input type="text" size="80" name="bug_file_loc" value="http://"> + <p> + URL that demonstrates the problem you are seeing (optional).<br> + <b>IMPORTANT</b>: if the problem is with a broken web page, you need + to report it + <a href="https://bugzilla.mozilla.org/page.cgi?id=broken-website.html">a different way</a>. + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Summary</b> + </td> + <td valign="top"> + <input type="text" size="80" name="short_desc" id="short_desc" + maxlength="255" spellcheck="true"> + <p> + A sentence which summarises the problem. + Please be descriptive and use lots of keywords. + </p> + <p> + <tt> + <font color="#990000">Bad example</font>: mail crashed + </tt> + <br> + <tt> + <font color="#009900">Good example</font>: + crash if I close the mail window while checking for new POP mail + </tt> + </p> + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>Details</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + minrows = 6 + cols = constants.COMMENT_COLS + %] + <p> + Expand on the Summary. Please be + as specific as possible about what is wrong. + </p> + <p> + <tt> + <font color="#990000">Bad example</font>: Mozilla crashed. + You suck! + </tt> + <br> + <tt> + <font color="#009900">Good example</font>: After a crash which + happened when I was sorting in the Bookmark Manager,<br> all of my + top-level bookmark folders beginning with the letters Q to Z are + no longer present. + </tt> + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Reproducibility</b> + </td> + <td valign="top"> + <select name="reproducible"> + <option name="AlwaysReproducible" value="Always"> + Happens every time. + </option> + <option name="Sometimes" value="Sometimes"> + Happens sometimes, but not always. + </option> + <option name="DidntTry" value="Didn't try"> + Haven't tried to reproduce it. + </option> + <option name="NotReproducible" value="Couldn't Reproduce"> + Tried, but couldn't reproduce it. + </option> + </select> + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>Steps to Reproduce</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'reproduce_steps' + minrows = 4 + cols = constants.COMMENT_COLS + defaultcontent = "1.\n2.\n3." + %] + <p> + Describe how to reproduce the problem, step by + step. Include any special setup steps. + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td valign="top" align="right"> + <b>Actual Results</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'actual_results' + minrows = 4 + cols = constants.COMMENT_COLS + %] + <p> + What happened after you performed the steps above? + </p> + </td> + </tr> + + <tr> + <td valign="top" align="right"> + <b>Expected Results</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'expected_results' + minrows = 4 + cols = constants.COMMENT_COLS + %] + <p> + What should the software have done instead? + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td valign="top" align="right"> + <b>Additional Information</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'additional_info' + minrows = 8 + cols = constants.COMMENT_COLS + %] + <p> + Add any additional information you feel may be + relevant to this [% terms.bug %], such as the <b>theme</b> you were + using (does the [% terms.bug %] still occur + with the default theme?), a + <b><a href="http://kb.mozillazine.org/Quality_Feedback_Agent">Talkback crash ID</a></b>, or special + information about <b>your computer's configuration</b>. Any information + longer than a few lines, such as a <b>stack trace</b> or <b>HTML + testcase</b>, should be added + using the "Add an Attachment" link on the [% terms.bug %], after + it is filed. If you believe that it's relevant, please also include + your build configuration, obtained by typing <tt>about:buildconfig</tt> + into your URL bar. + <br> + <br> + If you are reporting a crash, note the module in + which the software crashed (e.g., <tt>Application Violation in + gkhtml.dll</tt>). + </p> + </td> + </tr> + + <tr> + <td valign="top" align="right"> + <b>Severity</b> + </td> + <td valign="top"> + <select name="bug_severity"> + <option name="critical" value="critical"> + Critical: The software crashes, hangs, or causes you to + lose data. + </option> + <option name="major" value="major"> + Major: A major feature is broken. + </option> + <option name="normal" value="normal" selected="selected"> + Normal: It's [% terms.abug %] that should be fixed. + </option> + <option name="minor" value="minor"> + Minor: Minor loss of function, and there's an easy workaround. + </option> + <option name="trivial" value="trivial"> + Trivial: A cosmetic problem, such as a misspelled word or + misaligned text. + </option> + <option name="enhancement" value="enhancement"> + Enhancement: Request for new feature or enhancement. + </option> + </select> + <p> + Say how serious the problem is, or if your [% terms.bug %] is a + request for a new feature. + </p> + </td> + </tr> +</table> + + +<a name="step3"></a> +<h3>Step 3 of 3 - submit the [% terms.bug %] report</h3> + +<p> + <input type="submit" id="report" value=" Submit [% terms.Bug %] Report " + onclick="if (this.form.comment.value == '') + { alert('Please enter some details about this [% terms.bug %].'); + this.form.comment.focus(); + return false; } return true;"> +</p> + +<p> + That's it! Thanks very much. You'll be notified by email about any + progress that is made on fixing your [% terms.bug %]. + +<p> + Please be warned + that we get a lot of [% terms.bug %] reports filed - it may take quite a + while to get around to yours. You can help the process by making sure your + [%+ terms.bug %] is + complete and easy to understand, and by quickly replying to any questions + which may arrive by email. +</p> + + </form> + +[% PROCESS global/footer.html.tmpl %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <select name="[% sel %]"> + [%- IF default.$sel %] + <option value="[% default.$sel FILTER html %]" selected="selected"> + [% default.$sel FILTER html -%] + </option> + [% END %] + [%- FOREACH x = $sel %] + [% NEXT IF x == default.$sel %] + <option value="[% x FILTER html %]"> + [% x FILTER html -%] + </option> + [%- END %] + </select> +[% 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 0000000..4b17457 --- /dev/null +++ b/template/en/default/bug/create/create.html.tmpl @@ -0,0 +1,705 @@ +[%# 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> + # Shane H. W. Travis <travis@sedsystems.ca> + # Marc Schumann <wurblzap@gmail.com> + # Akamai Technologies <bugzilla-dev@akamai.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = BLOCK %]Enter [% terms.Bug %]: [% product.name FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = [ 'skins/standard/create_attachment.css', + 'skins/standard/yui/calendar.css' ] + javascript_urls = [ "js/attachment.js", "js/util.js", "js/yui/calendar.js", + "js/field.js", "js/TUI.js" ] + onload = 'set_assign_to();' +%] + +<script type="text/javascript"> +<!-- + +var initialowners = new Array([% product.components.size %]); +var last_initialowner; +var initialccs = new Array([% product.components.size %]); +var components = new Array([% product.components.size %]); +var comp_desc = new Array([% product.components.size %]); +var flags = new Array([% product.components.size %]); +[% IF Param("useqacontact") %] + var initialqacontacts = new Array([% product.components.size %]); + var last_initialqacontact; +[% END %] +[% count = 0 %] +[%- FOREACH c = product.components %] + components[[% count %]] = "[% c.name FILTER js %]"; + comp_desc[[% count %]] = "[% c.description FILTER html_light FILTER js %]"; + initialowners[[% count %]] = "[% c.default_assignee.login FILTER js %]"; + [% flag_list = [] %] + [% FOREACH f = c.flag_types.bug %] + [% NEXT UNLESS f.is_active %] + [% flag_list.push(f.id) %] + [% END %] + [% FOREACH f = c.flag_types.attachment %] + [% NEXT UNLESS f.is_active %] + [% flag_list.push(f.id) %] + [% END %] + flags[[% count %]] = [[% flag_list.join(",") FILTER js %]]; + [% IF Param("useqacontact") %] + initialqacontacts[[% count %]] = "[% c.default_qa_contact.login FILTER js %]"; + [% END %] + + [% SET initial_cc_list = [] %] + [% FOREACH cc_user = c.initial_cc %] + [% initial_cc_list.push(cc_user.login) %] + [% END %] + initialccs[[% count %]] = "[% initial_cc_list.join(', ') FILTER js %]"; + + [% count = count + 1 %] +[%- END %] + +function set_assign_to() { + // Based on the selected component, fill the "Assign To:" field + // with the default component owner, and the "QA Contact:" field + // with the default QA Contact. It also selectively enables flags. + var form = document.Create; + var assigned_to = form.assigned_to.value; + +[% IF Param("useqacontact") %] + var qa_contact = form.qa_contact.value; +[% END %] + + var index = -1; + if (form.component.type == 'select-one') { + index = form.component.selectedIndex; + } else if (form.component.type == 'hidden') { + // Assume there is only one component in the list + index = 0; + } + if (index != -1) { + var owner = initialowners[index]; + var component = components[index]; + if (assigned_to == last_initialowner + || assigned_to == owner + || assigned_to == '') { + form.assigned_to.value = owner; + last_initialowner = owner; + } + + document.getElementById('initial_cc').innerHTML = initialccs[index]; + document.getElementById('comp_desc').innerHTML = comp_desc[index]; + + [% IF Param("useqacontact") %] + var contact = initialqacontacts[index]; + if (qa_contact == last_initialqacontact + || qa_contact == contact + || qa_contact == '') { + form.qa_contact.value = contact; + last_initialqacontact = contact; + } + [% END %] + + // First, we disable all flags. Then we re-enable those + // which are available for the selected component. + var inputElements = document.getElementsByTagName("select"); + var inputElement, flagField; + for ( var i=0 ; i<inputElements.length ; i++ ) { + inputElement = inputElements.item(i); + if (inputElement.name.search(/^flag_type-(\d+)$/) != -1) { + var id = inputElement.name.replace(/^flag_type-(\d+)$/, "$1"); + inputElement.disabled = true; + // Also disable the requestee field, if it exists. + inputElement = document.getElementById("requestee_type-" + id); + if (inputElement) inputElement.disabled = true; + } + } + // Now enable flags available for the selected component. + for (var i = 0; i < flags[index].length; i++) { + flagField = document.getElementById("flag_type-" + flags[index][i]); + // Do not enable flags the user cannot set nor request. + if (flagField && flagField.options.length > 1) { + flagField.disabled = false; + // Re-enabling the requestee field depends on the status + // of the flag. + toggleRequesteeField(flagField, 1); + } + } + } +} + +function handleWantsAttachment(wants_attachment) { + if (wants_attachment) { + document.getElementById('attachment_false').style.display = 'none'; + document.getElementById('attachment_true').style.display = 'block'; + } + else { + document.getElementById('attachment_false').style.display = 'block'; + document.getElementById('attachment_true').style.display = 'none'; + clearAttachmentFields(); + } +} + + +TUI_alternates['expert_fields'] = 'Show Advanced Fields'; +// Hide the Advanced Fields by default, unless the user has a cookie +// that specifies otherwise. +TUI_hide_default('expert_fields'); + +--> +</script> + +[% USE Bugzilla %] +[% SET select_fields = {} %] +[% FOREACH field = Bugzilla.get_fields( + { type => constants.FIELD_TYPE_SINGLE_SELECT, custom => 0 }) +%] + [% select_fields.${field.name} = field %] +[% END %] + +<form name="Create" id="Create" method="post" action="post_bug.cgi" + enctype="multipart/form-data"> +<input type="hidden" name="product" value="[% product.name FILTER html %]"> +<input type="hidden" name="token" value="[% token FILTER html %]"> + +<table cellspacing="4" cellpadding="2" border="0"> +<tbody> + <tr> + <td colspan="4"> + [%# Migration note: The following file corresponds to the old Param + # 'entryheaderhtml' + #%] + [% PROCESS 'bug/create/user-message.html.tmpl' %] + </td> + </tr> + + <tr> + <td colspan="2"> + <a id="expert_fields_controller" class="controller bz_default_hidden" + href="javascript:TUI_toggle_class('expert_fields')">Hide + Advanced Fields</a> + [%# Show the link if the browser supports JS %] + <script type="text/javascript"> + YAHOO.util.Dom.removeClass('expert_fields_controller', + 'bz_default_hidden'); + </script> + </td> + <td colspan="2"> + (<span class="required_star">*</span> = + <span class="required_explanation">Required Field</span>) + </td> + </tr> + + <tr> + <th>Product:</th> + <td width="10%">[% product.name FILTER html %]</td> + + <th>Reporter:</th> + <td width="100%">[% user.login FILTER html %]</td> + </tr> + + [%# We can't use the select block in these two cases for various reasons. %] + <tr> + <th class="required"> + <a href="describecomponents.cgi?product=[% product.name FILTER url_quote %]"> + Component</a>: + </th> + <td> + <select name="component" onchange="set_assign_to();" size="7" + aria-required="true" class="required"> + [%# Build the lists of assignees and QA contacts if "usemenuforusers" is enabled. %] + [% IF Param("usemenuforusers") %] + [% assignees_list = user.get_userlist.clone %] + [% qa_contacts_list = user.get_userlist.clone %] + [% END %] + + [%- FOREACH c = product.components %] + <option value="[% c.name FILTER html %]" + [% " selected=\"selected\"" IF c.name == default.component_ %]> + [% c.name FILTER html -%] + </option> + [% IF Param("usemenuforusers") %] + [% INCLUDE build_userlist default_user = c.default_assignee, + userlist = assignees_list %] + [% INCLUDE build_userlist default_user = c.default_qa_contact, + userlist = qa_contacts_list %] + [% END %] + [%- END %] + </select> + </td> + + <td colspan="2"> + [%# Enclose the fieldset in a nested table so that its width changes based + # on the length on the component description. %] + <table> + <tr> + <td> + <fieldset> + <legend>Component Description</legend> + <div id="comp_desc" class="comment">Select a component to read its description.</div> + </fieldset> + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <th rowspan="3">Version:</th> + <td rowspan="3"> + <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> + + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.bug_severity, editable = 1, + value = default.bug_severity %] + </tr> + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.rep_platform, editable = 1, + value = default.rep_platform %] + </tr> + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.op_sys, editable = 1, + value = default.op_sys %] + </tr> +</tbody> + +<tbody class="expert_fields"> + <tr> + [% IF Param('usetargetmilestone') && Param('letsubmitterchoosemilestone') %] + [% sel = { description => 'Target Milestone', name => 'target_milestone' } %] + [% INCLUDE select %] + [% ELSE %] + <td colspan="2"> </td> + [% END %] + + [% IF Param('letsubmitterchoosepriority') %] + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.priority, editable = 1, + value = default.priority %] + [% ELSE %] + <td colspan="2"> </td> + [% END %] + </tr> +</tbody> + +[% IF !Param('defaultplatform') || !Param('defaultopsys') %] + <tbody> + <tr> + <th> </th> + <td colspan="3" class="comment"> + We've made a guess at your + [% IF Param('defaultplatform') %] + operating system. Please check it + [% ELSIF Param('defaultopsys') %] + platform. Please check it + [% ELSE %] + operating system and platform. Please check them + [% END %] + and make any corrections if necessary. + </td> + </tr> + </tbody> +[% END %] + +<tbody class="expert_fields"> + <tr> + <td colspan="4"> </td> + </tr> + + <tr> +[% IF bug_status.size <= 1 %] + <input type="hidden" name="bug_status" + value="[% default.bug_status FILTER html %]"> + <th>Initial State:</th> + <td>[% display_value("bug_status", default.bug_status) FILTER html %]</td> +[% ELSE %] + [% sel = { description => 'Initial State', name => 'bug_status' } %] + [% INCLUDE select %] +[% END %] + + <td> </td> + [%# Calculate the number of rows we can use for flags %] + [% num_rows = 6 + (Param("useqacontact") ? 1 : 0) + + (user.is_timetracker ? 3 : 0) + + (Param("usebugaliases") ? 1 : 0) + %] + + <td rowspan="[% num_rows FILTER html %]"> + [% IF product.flag_types.bug.size > 0 %] + [% display_flag_headers = 0 %] + [% any_flags_requesteeble = 0 %] + + [% FOREACH flag_type = product.flag_types.bug %] + [% NEXT UNLESS flag_type.is_active %] + [% display_flag_headers = 1 %] + [% SET any_flags_requesteeble = 1 IF flag_type.is_requestable && flag_type.is_requesteeble %] + [% END %] + + [% IF display_flag_headers %] + [% PROCESS "flag/list.html.tmpl" flag_types = product.flag_types.bug + any_flags_requesteeble = any_flags_requesteeble + flag_table_id = "bug_flags" + %] + [% END %] + [% END %] + </td> + </tr> + + <tr> + <th><a href="page.cgi?id=fields.html#assigned_to">Assign To</a>:</th> + <td colspan="2"> + [% INCLUDE global/userselect.html.tmpl + name => "assigned_to" + value => assigned_to + disabled => assigned_to_disabled + size => 30 + emptyok => 1 + custom_userlist => assignees_list + %] + <noscript>(Leave blank to assign to component's default assignee)</noscript> + </td> + </tr> + +[% IF Param("useqacontact") %] + <tr> + <th>QA Contact:</th> + <td colspan="2"> + [% INCLUDE global/userselect.html.tmpl + name => "qa_contact" + value => qa_contact + disabled => qa_contact_disabled + size => 30 + emptyok => 1 + custom_userlist => qa_contacts_list + %] + <noscript>(Leave blank to assign to default qa contact)</noscript> + </td> + </tr> +[% END %] + + <tr> + <th>CC:</th> + <td colspan="2"> + [% INCLUDE global/userselect.html.tmpl + name => "cc" + value => cc + disabled => cc_disabled + size => 30 + multiple => 5 + %] + </td> + </tr> + + <tr> + <th>Default CC:</th> + <td colspan="2"> + <div id="initial_cc"> + </div> + </td> + </tr> + + <tr> + <td colspan="3"> </td> + </tr> + +[% IF user.is_timetracker %] + <tr> + <th>Estimated Hours:</th> + <td colspan="2"> + <input name="estimated_time" size="6" maxlength="6" value="[% estimated_time FILTER html %]"> + </td> + </tr> + <tr> + <th>Deadline:</th> + <td colspan="2"> + <input name="deadline" size="10" maxlength="10" value="[% deadline FILTER html %]"> + <small>(YYYY-MM-DD)</small> + </td> + </tr> + + <tr> + <td colspan="3"> </td> + </tr> +[% END %] + +[% IF Param("usebugaliases") %] + <tr> + <th>Alias:</th> + <td colspan="2"> + <input name="alias" size="20" value="[% alias FILTER html %]"> + </td> + </tr> +[% END %] + + <tr> + <th>URL:</th> + <td colspan="2"> + <input name="bug_file_loc" size="40" + value="[% bug_file_loc FILTER html %]"> + </td> + </tr> +</tbody> + +<tbody class="expert_fields"> + [% USE Bugzilla %] + + [% FOREACH field = Bugzilla.active_custom_fields %] + [% NEXT UNLESS field.enter_bug %] + [% SET value = ${field.name}.defined ? ${field.name} : "" %] + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = field, value = value, editable = 1, + value_span = 3 %] + </tr> + [% END %] +</tbody> + +<tbody> + + <tr> + <th class="required">Summary:</th> + <td colspan="3"> + <input name="short_desc" size="70" value="[% short_desc FILTER html %]" + maxlength="255" spellcheck="true" aria-required="true" + class="required"> + </td> + </tr> + + <tr> + <th>Description:</th> + <td colspan="3"> + [% defaultcontent = BLOCK %] + [% IF cloned_bug_id %] ++++ This [% terms.bug %] was initially created as a clone of [% terms.Bug %] #[% cloned_bug_id %] +++ + + + [% END %] + [%-# We are within a BLOCK. The comment will be correctly HTML-escaped + # by global/textarea.html.tmpl. So we must not escape the comment here. %] + [% comment FILTER none %] + [%- END %] + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 10 + maxrows = 25 + cols = constants.COMMENT_COLS + defaultcontent = defaultcontent + %] + <br> + </td> + </tr> + + [% IF user.is_insider %] + <tr class="expert_fields"> + <th> </th> + <td colspan="3"> + + <input type="checkbox" id="commentprivacy" name="commentprivacy" + [% " checked=\"checked\"" IF commentprivacy %]> + <label for="commentprivacy"> + Make description private (visible only to members of the + <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> + </td> + </tr> + [% END %] + + <tr> + <th>Attachment:</th> + <td colspan="3"> + <script type="text/javascript"> + <!-- + document.write( '<div id="attachment_false">' + + '<input type="button" value="Add an attachment" ' + + 'onClick="handleWantsAttachment(true)"> ' + + '<em style="display: none">This button has no ' + + 'functionality for you because your browser does ' + + 'not support CSS or does not use it.<\/em>' + + '<\/div>' + + '<div id="attachment_true" style="display: none">' + + '<input type="button" ' + + 'value="Don\'t add an attachment " ' + + 'onClick="handleWantsAttachment(false)">'); + //--> + </script> + <fieldset> + <legend>Add an attachment</legend> + <table class="attachment_entry"> + [% PROCESS attachment/createformcontents.html.tmpl + flag_types = product.flag_types.attachment + any_flags_requesteeble = 1 + flag_table_id ="attachment_flags" %] + </table> + </fieldset> + <script type="text/javascript"> + <!-- + document.write('<\/div>'); + //--> + </script> + </td> + </tr> +</tbody> + +<tbody class="expert_fields"> + [% IF user.in_group('editbugs', product.id) %] + [% IF use_keywords %] + <tr> + <th><a href="describekeywords.cgi">Keywords</a>:</th> + <td colspan="3"> + <input id="keywords" name="keywords" size="40" + value="[% keywords FILTER html %]"> (optional) + </td> + </tr> + [% END %] + + <tr> + <th>Depends on:</th> + <td colspan="3"> + <input name="dependson" accesskey="d" value="[% dependson FILTER html %]"> + </td> + </tr> + <tr> + <th>Blocks:</th> + <td colspan="3"> + <input name="blocked" accesskey="b" value="[% blocked FILTER html %]"> + </td> + </tr> + [% END %] +</tbody> + +<tbody class="expert_fields"> + [% IF group.size %] + <tr> + <th> </th> + <td colspan="3"> + <br> + <strong> + Only users in all of the selected groups can view this [% terms.bug %]: + </strong> + <br> + <font size="-1"> + (Leave all boxes unchecked to make this a public [% terms.bug %].) + </font> + <br> + <br> + + <!-- Checkboxes --> + [% FOREACH g = group %] + + <input type="checkbox" id="bit-[% g.bit %]" + name="bit-[% g.bit %]" value="1" + [% " checked=\"checked\"" IF g.checked %]> + <label for="bit-[% g.bit %]">[% g.description FILTER html_light %]</label><br> + [% END %] + </td> + </tr> + [% END %] +</tbody> + +<tbody> + [%# Form controls for entering additional data about the bug being created. %] + [% Hook.process("form") %] + + <tr> + <th> </th> + <td colspan="3"> + <input type="submit" id="commit" value="Submit [% terms.Bug %]" + onclick="if (this.form.short_desc.value == '') + { alert('Please enter a summary sentence for this [% terms.bug %].'); + return false; } return true;"> + + <input type="submit" name="maketemplate" id="maketemplate" + value="Remember values as bookmarkable template" + class="expert_fields"> + </td> + </tr> +</tbody> + </table> + <input type="hidden" name="form_name" value="enter_bug"> +</form> + +[%# Links or content with more information about the bug being created. %] +[% Hook.process("end") %] + +[% PROCESS global/footer.html.tmpl %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + [% IF sel.description %] + <th> + <a href="page.cgi?id=fields.html#[% sel.name %]">[% sel.description %]</a>: + </th> + [% END %] + + <td> + <select name="[% sel.name %]" id="[% sel.name %]"> + [%- FOREACH x = ${sel.name} %] + <option value="[% x FILTER html %]" + [% " selected=\"selected\"" IF x == default.${sel.name} %]> + [% display_value(sel.name, x) FILTER html %] + </option> + [% END %] + </select> + + [% IF sel.name == "bug_status" %] + <script type="text/javascript"> + <!-- + [%+ INCLUDE "bug/field-events.js.tmpl" + field = select_fields.bug_status %] + //--> + </script> + [% END %] + </td> +[% END %] + +[% BLOCK build_userlist %] + [% user_found = 0 %] + [% default_login = default_user.login %] + [% RETURN UNLESS default_login %] + + [% FOREACH user = userlist %] + [% IF user.login == default_login %] + [% user_found = 1 %] + [% LAST %] + [% END %] + [% END %] + + [% userlist.push({login => default_login, + identity => default_user.identity, + visible => 1}) + UNLESS user_found %] +[% 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 0000000..d9eaccb --- /dev/null +++ b/template/en/default/bug/create/created.html.tmpl @@ -0,0 +1,61 @@ +[%# 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: + # id: number; the ID of the bug that was created. + # sentmail: array of hash; bugs for which BugMail should be sent, contains: + # type: string; type of change for this bug, either 'created' if this bug + # was created or 'dep' if it was added as a dependent/blocker + # id: integer; the ID of the bug + # bug: object; Bugzilla::Bug object of the bug that was created (used in + # template bug/edit.html.tmpl + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "bug/show-header.html.tmpl" %] +[% PROCESS global/header.html.tmpl + title = "$terms.Bug $id Submitted – $filtered_desc" + header = "$terms.Bug $id Submitted" +%] + +[% header_done = 1 %] + +[% FOREACH item = sentmail %] + [% PROCESS bug/process/results.html.tmpl + type = item.type + id = item.id + sent_bugmail = item + %] +[% END %] + +<br> + +<hr> + +[% PROCESS bug/edit.html.tmpl %] + +<hr> + +[% PROCESS bug/navigate.html.tmpl bottom_navigator => 1 %] + +<br> + +[% PROCESS global/footer.html.tmpl %] 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 0000000..1397483 --- /dev/null +++ b/template/en/default/bug/create/make-template.html.tmpl @@ -0,0 +1,46 @@ +[%# 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> + # Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # url: URL to a pre-filled bug entry form. + # short_desc: Bug summary as entered in the form. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Bookmarks are your friend" + header = "Template constructed" +%] + +<p> + You can bookmark this link: + “<a href="enter_bug.cgi?[% url FILTER html %]"> + [% IF short_desc %] + [% short_desc FILTER html %] + [% ELSE %] + [% terms.Bug %] entry template + [% END %]</a>”. + This bookmark will bring up the <em>Enter [% terms.Bug %]</em> page with the + fields initialized as you've requested. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/create/user-message.html.tmpl b/template/en/default/bug/create/user-message.html.tmpl new file mode 100644 index 0000000..ac2cc29 --- /dev/null +++ b/template/en/default/bug/create/user-message.html.tmpl @@ -0,0 +1,36 @@ +[%# 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): Matthew Tuck <matty@chariot.net.au> + #%] + +[%# Migration note: this file corresponds to the old Param + # 'entryheaderhtml' + #%] + +[%# You can make the output of this template product-specific by using + # Template Toolkit IF statements. The current product name is stored in + # the 'product' variable. + #%] + +[% PROCESS global/variables.none.tmpl %] + +Before reporting [% terms.abug %], please read the +<a href="page.cgi?id=bug-writing.html"> +[% terms.bug %] writing guidelines</a>, please look at the list of +<a href="duplicates.cgi">most frequently reported [% terms.bugs %]</a>, and please +<a href="query.cgi">search</a> for the [% terms.bug %]. 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 0000000..37dcde0 --- /dev/null +++ b/template/en/default/bug/dependency-graph.html.tmpl @@ -0,0 +1,106 @@ +[%# 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. (Optional) + # image_map: string. The image map for the graphic showing the + dependencies. (Optional) + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = "Dependency Graph" + header = title + %] + +[% IF NOT multiple_bugs AND NOT doall %] + [% filtered_desc = short_desc FILTER html %] + [% title = "$title for $terms.bug $bug_id" + header = "$header for $terms.bug <a href=\"show_bug.cgi?id=$bug_id\">$bug_id</a>" + subheader = filtered_desc + %] +[% END %] + +[% PROCESS global/header.html.tmpl %] + +[% image_map %] + +<p> + Green circles represent open [% terms.bugs %]. +</p> + +[% IF image_map %] + <img src="[% image_url %]" alt="Dependency graph" usemap="#imagemap"> +[% ELSE %] + <a href="[% map_url %]"> + <img src="[% image_url %]" alt="Dependency graph" ismap="ismap"> + </a> +[% END %] + +<hr> + +<form action="showdependencygraph.cgi" method="GET"> + <table> + <tr> + <th align="left"><label for="id">[% terms.Bug %] numbers</label>:</th> + <td><input id="id" name="id" value="[% bug_id %]"></td> + <td> + <input type="checkbox" id="showsummary" name="showsummary" [% " checked" IF showsummary %]> + <label for="showsummary">Show the summaries of all displayed [% terms.bugs %]</label> + </td> + </tr> + + <tr> + <th align="left"><label for="display">Display:</label></th> + <td colspan="2"> + <select id="display" name="display"> + <option value="tree"[% 'selected="selected"' IF (!display || display == "tree") %]> + Restrict to [% terms.bugs %] having a direct relationship with entered [% terms.bugs %]</option> + <option value="web" [% 'selected="selected"' IF display == "web" %]> + Show all [% terms.bugs %] having any relationship with entered [% terms.bugs %]</option> + <option value="doall" [% 'selected="selected"' IF display == "doall" %]> + Show every [% terms.bug %] in the system with dependencies</option> + </select> + </td> + </tr> + + <tr> + <th align="left"><label for="rankdir">Orientation:</label></th> + <td colspan="2"> + <select id="rankdir" name="rankdir"> + <option value="TB"[% " selected" IF rankdir == "TB" %]>Top to bottom</option> + <option value="BT"[% " selected" IF rankdir == "BT" %]>Bottom to top</option> + <option value="LR"[% " selected" IF rankdir == "LR" %]>Left to right</option> + <option value="RL"[% " selected" IF rankdir == "RL" %]>Right to left</option> + </select> + </td> + </tr> + </table> + <input type="submit" id="change" value="Change Parameters"> +</form> + +[% PROCESS global/footer.html.tmpl %] 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 0000000..c42c3c4 --- /dev/null +++ b/template/en/default/bug/dependency-tree.html.tmpl @@ -0,0 +1,266 @@ +[%# 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> + # André Batosti <batosti@async.com.br> + #%] + +[% PROCESS 'global/field-descs.none.tmpl' %] + +[% filtered_desc = blocked_tree.$bugid.short_desc FILTER html %] +[% PROCESS global/header.html.tmpl + title = "Dependency tree for $terms.Bug $bugid" + header = "Dependency tree for + <a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a>" + javascript_urls = ["js/expanding-tree.js"] + style_urls = ["skins/standard/dependency-tree.css"] + subheader = filtered_desc + doc_section = "hintsandtips.html#dependencytree" +%] + +[% PROCESS depthControlToolbar %] + +[% INCLUDE tree_section ids=dependson_ids type=1 %] + +[% INCLUDE tree_section ids=blocked_ids type=2 %] + +[% PROCESS depthControlToolbar %] + +[% PROCESS global/footer.html.tmpl %] + +[%###########################################################################%] +[%# Tree-drawing blocks #%] +[%###########################################################################%] + +[% BLOCK tree_section %] + [%# INTERFACE + # - ids: a list of bug IDs to be displayed as children + # - type: the type of tree. 1 = depends on, 2 = blockeds + # GLOBALS + # - seen: Maintains a global hash of bugs that have been displayed + #%] + [% global.seen = {} %] + [%# Display the tree of bugs that this bug depends on. %] + <h3> + <a href="show_bug.cgi?id=[% bugid %]">[% terms.Bug %] [%+ bugid %]</a> + [% IF type == 1 %] + [% tree_name = "dependson_tree" %] + [% IF ids.size %] + depends on + [% ELSE %] + does not depend on any [% terms.bugs %]. + [% END %] + [% ELSIF type == 2 %] + [% tree_name = "blocked_tree" %] + [% IF ids.size %] + blocks + [% ELSE %] + does not block any [% terms.bugs %]. + [% END %] + [% END %] + [% IF ids.size %] + [%+ (ids.size == 1) ? "one" : ids.size %] + [%+ IF hide_resolved %]open[% END %] + [%+ (ids.size == 1) ? terms.bug : terms.bugs %]: + [% END %] + </h3> + [% IF ids.size %] + ([% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END -%] + <a href="buglist.cgi?bug_id=[% ids.join(",") %]">view as [% terms.bug %] list</a> + [% IF user.in_group('editbugs') && ids.size > 1 %] + | <a href="buglist.cgi?bug_id=[% ids.join(",") %]&tweak=1">change several</a> + [% END %]) + <ul class="tree"> + [% INCLUDE display_tree tree=$tree_name %] + </ul> + [% END %] +[% END %] + + +[% BLOCK display_tree %] + [%# INTERFACE + # - bugid: the ID of the bug being displayed + # - tree: a hash of bug objects and of bug dependencies + #%] + [% bug = tree.$bugid %] + <li> + [%- INCLUDE bullet bugid=bugid tree=tree -%] + <span class="summ[% "_deep" IF tree.dependencies.$bugid.size %]" + id="[% bugid FILTER html %]" + [% IF global.seen.$bugid %] + onMouseover="duplicatedover('[% bugid FILTER html %]')" + onMouseout="duplicatedout('[% bugid FILTER html %]')" + [% END %]> + [%- INCLUDE buglink bug=bug bugid=bugid %] + </span> + [% IF global.seen.$bugid %] + <b><a title="Already displayed above; click to locate" + onclick="duplicated('[% bugid FILTER html %]')" + href="#b[% bugid %]">(*)</a></b> + [% ELSIF tree.dependencies.$bugid.size %] + <ul> + [% FOREACH depid = tree.dependencies.$bugid %] + [% INCLUDE display_tree bugid=depid %] + [% END %] + </ul> + [% END %] + </li> + [% global.seen.$bugid = 1 %] +[% END %] + +[% BLOCK bullet %] + [% IF tree.dependencies.$bugid.size && ! global.seen.$bugid %] + [% extra_class = " b_open" %] + [% extra_args = 'onclick="return doToggle(this, event)"' %] + [% END %] + <a name="b[% bugid %]" + class="b [%+ extra_class FILTER none %]" + title="Click to expand or contract this portion of the tree. Hold down the Ctrl key while clicking to expand or contract all subtrees." + [% extra_args FILTER none %]> </a> +[% END %] + +[% BLOCK buglink %] + [% isclosed = !bug.isopened %] + [% FILTER closed(isclosed) -%] + <a title="[% INCLUDE buginfo bug=bug %]" + href="show_bug.cgi?id=[% bugid %]"> + <b>[%- bugid %]:</b> + <span class="summ_text">[%+ bug.short_desc FILTER html %]</span> + <span class="summ_info">[[% INCLUDE buginfo %]]</span> + </a> + <a href="showdependencytree.cgi?id=[% bugid FILTER url_quote %]" + class="tree_link"> + <img src="skins/standard/dependency-tree/tree.png" + title="See dependency tree for [% terms.bug %] [%+ bugid FILTER html %]"> + </a> + [% END %] +[% END %] + +[% BLOCK buginfo %] + [% display_value("bug_status", bug.bug_status) FILTER html -%] [%+ display_value("resolution", bug.resolution) FILTER html %]; + [%-%] assigned to [% bug.assigned_to.login FILTER email FILTER html %] + [%-%][% "; Target: " _ bug.target_milestone IF bug.target_milestone %] +[% END %] + +[%###########################################################################%] +[%# Block for depth control toolbar #%] +[%###########################################################################%] + +[% BLOCK depthControlToolbar %] + <table cellpadding="3" border="0" cellspacing="0" bgcolor="#e0e0e0"> + <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" id="toggle_visibility" + value="[% IF hide_resolved %]Show[% ELSE %]Hide[% END %] 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" id="change_maxdepth" + value=" 1 " + [% "disabled" IF realdepth < 2 || maxdepth == 1 %]> + <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" id="decrease_depth" value=" < " + [% "disabled" IF realdepth < 2 || ( maxdepth && maxdepth < 2 ) %]> + </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 <= realdepth ? maxdepth : "" + %]"> + <input name="id" type="hidden" value="[% bugid %]"> + <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> + <noscript> + <input type="submit" id="change_depth" value="Change" + [% "disabled" IF realdepth < 2 %]> + </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" id="increase_depth" value=" > " + [% "disabled" IF realdepth < 2 || !maxdepth || maxdepth >= realdepth %]> + </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" id="remove_limit" + value=" Unlimited " + [% "disabled" IF maxdepth == 0 || maxdepth == realdepth %]> + </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 0000000..80c6fcd --- /dev/null +++ b/template/en/default/bug/edit.html.tmpl @@ -0,0 +1,1161 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + # Olav Vitters <olav@bkor.dhs.org> + # Guy Pyrzak <guy.pyrzak@gmail.com> + # Elliotte Martin <emartin@everythingsolved.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS bug/time.html.tmpl %] + +[% USE Bugzilla %] +[% SET select_fields = {} %] +[% FOREACH field = Bugzilla.get_fields( + { type => constants.FIELD_TYPE_SINGLE_SELECT, custom => 0 }) +%] + [% select_fields.${field.name} = field %] +[% END %] + + <script type="text/javascript"> + <!-- + + /* Outputs a link to call replyToComment(); used to reduce HTML output */ + function addReplyLink(id, real_id) { + /* XXX this should really be updated to use the DOM Core's + * createElement, but finding a container isn't trivial. + */ + [% IF user.settings.quote_replies.value != 'off' %] + document.write('[<a href="#add_comment" onclick="replyToComment(' + + id + ',' + real_id + '); return false;">reply<' + '/a>]'); + [% END %] + } + + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id) { + var prefix = "(In reply to comment #" + id + ")\n"; + var replytext = ""; + [% IF user.settings.quote_replies.value == 'quoted_reply' %] + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + + /* make sure we split on all newlines -- IE or Moz use \r and \n + * respectively. + */ + text = text.split(/\r|\n/); + + for (var i=0; i < text.length; i++) { + replytext += "> " + text[i] + "\n"; + } + + replytext = prefix + replytext + "\n"; + [% ELSIF user.settings.quote_replies.value == 'simple_reply' %] + replytext = prefix; + [% END %] + + [% IF user.is_insider %] + if (document.getElementById('isprivate_' + real_id).checked) { + document.getElementById('newcommentprivacy').checked = 'checked'; + } + [% END %] + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + textarea.value += replytext; + + textarea.focus(); + } + + if (typeof Node == 'undefined') { + /* MSIE doesn't define Node, so provide a compatibility object */ + window.Node = { + TEXT_NODE: 3, + ENTITY_REFERENCE_NODE: 5 + }; + } + + /* Concatenates all text from element's childNodes. This is used + * instead of innerHTML because we want the actual text (and + * innerText is non-standard). + */ + function getText(element) { + var child, text = ""; + for (var i=0; i < element.childNodes.length; i++) { + child = element.childNodes[i]; + var type = child.nodeType; + if (type == Node.TEXT_NODE || type == Node.ENTITY_REFERENCE_NODE) { + text += child.nodeValue; + } else { + /* recurse into nodes of other types */ + text += getText(child); + } + } + return text; + } + +[% IF user.is_timetracker %] + var fRemainingTime = [% bug.remaining_time %]; // holds the original value + function adjustRemainingTime() { + // subtracts time spent from remaining time + var new_time; + + // prevent negative values if work_time > fRemainingTime + new_time = + Math.max(fRemainingTime - document.changeform.work_time.value, 0.0); + // get upto 2 decimal places + document.changeform.remaining_time.value = + Math.round(new_time * 100)/100; + } + + function updateRemainingTime() { + // if the remaining time is changed manually, update fRemainingTime + fRemainingTime = document.changeform.remaining_time.value; + } + +[% END %] + + //--> + </script> + +<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.comments.size %]"> + <input type="hidden" name="id" value="[% bug.bug_id %]"> + <input type="hidden" name="token" value="[% issue_hash_token([bug.id, bug.delta_ts]) FILTER html %]"> + + [% PROCESS section_title %] + <table class="edit_form"> + <tr> + [%# 1st Column %] + <td id="bz_show_bug_column_1" class="bz_show_bug_column"> + <table> + [%# *** ID, product, component, status, resolution, Hardware, and OS *** %] + [% PROCESS section_status %] + + [% PROCESS section_spacer %] + + [% PROCESS section_details1 %] + + [% PROCESS section_spacer %] + + [%# *** severity, priority, version and milestone *** %] + [% PROCESS section_details2 %] + + [%# *** assigned to and qa contact *** %] + [% PROCESS section_people %] + + [% PROCESS section_spacer %] + + [% PROCESS section_url_keyword_whiteboard %] + + [% PROCESS section_spacer %] + + [%# *** Dependencies *** %] + [% PROCESS section_dependson_blocks %] + + </table> + </td> + <td> + <div class="bz_column_spacer"> </div> + </td> + [%# 2nd Column %] + <td id="bz_show_bug_column_2" class="bz_show_bug_column"> + <table cellpadding="3" cellspacing="1"> + [%# *** Reported and modified dates *** %] + [% PROCESS section_dates %] + + [% PROCESS section_cclist %] + + [% PROCESS section_spacer %] + + [% PROCESS section_see_also %] + + [% PROCESS section_customfields %] + + [% PROCESS section_spacer %] + + [% Hook.process("after_custom_fields") %] + + [% PROCESS section_flags %] + + </table> + </td> + </tr> + <tr> + <td colspan="3"> + <hr id="bz_top_half_spacer"> + </td> + </tr> + </table> + + <table id="bz_big_form_parts" cellspacing="0" cellpadding="0"><tr> + <td> + [% IF user.is_timetracker %] + [% PROCESS section_timetracking %] + [% END %] + + [%# *** Attachments *** %] + + [% PROCESS attachment/list.html.tmpl + attachments = bug.attachments + bugid = bug.bug_id + num_attachment_flag_types = bug.num_attachment_flag_types + show_attachment_flags = bug.show_attachment_flags + %] + + [% PROCESS comment_box %] + </td> + <td> + [% PROCESS section_restrict_visibility %] + </td> + </tr></table> + + [%# *** Additional Comments *** %] + <div id="comments"> + [% PROCESS bug/comments.html.tmpl + comments = bug.comments + mode = user.id ? "edit" : "show" + %] + </div> + +</form> + +[%############################################################################%] +[%# Block for the Title (alias and short desc) #%] +[%############################################################################%] + +[% BLOCK section_title %] + [%# That's the main table, which contains all editable fields. %] + <div class="bz_alias_short_desc_container edit_form"> + [% PROCESS commit_button id="_top"%] + <a href="show_bug.cgi?id=[% bug.bug_id %]"> + [%-# %]<b>[% terms.Bug %] [% bug.bug_id FILTER html %]</b> + [%-# %]</a> -<span id="summary_alias_container" class="bz_default_hidden"> + [% IF Param("usebugaliases") %] + [% IF bug.alias != "" %] + (<span id="alias_nonedit_display">[% bug.alias FILTER html %]</span>) + [% END %] + [% END %] + <span id="short_desc_nonedit_display">[% bug.short_desc FILTER quoteUrls(bug) %]</span> + [% IF bug.check_can_change_field('short_desc', 0, 1) || + bug.check_can_change_field('alias', 0, 1) %] + <small class="editme">(<a href="#" id="editme_action">edit</a>)</small> + [% END %] + </span> + + + <div id="summary_alias_input"> + <table id="summary"> + [% IF Param("usebugaliases") %] + <tr> + [% IF bug.check_can_change_field('alias', 0, 1) %] + <td> + <label + for="alias" + title="a name for the + [% terms.bug %] that can be used in place of its ID number, + [%%] e.g. when adding it to a list of dependencies" + >Alias</label>:</td><td> + [% ELSIF bug.alias %] + <td colspan="2">( + [% ELSE %] + <td colspan="2"> + [% END %] + [% PROCESS input inputname => "alias" + size => "20" + maxlength => "20" + no_td => 1 + %][% ")" IF NOT bug.check_can_change_field('alias', 0, 1) + && bug.alias %] + </td> + </tr> + [% END %] + [%# *** Summary *** %] + <tr> + <td> + <label accesskey="s" for="short_desc"><u>S</u>ummary</label>: + </td> + <td> + [% PROCESS input inputname => "short_desc" size => "80" colspan => 2 + maxlength => 255 spellcheck => "true" no_td => 1 %] + </td> + </tr> + </table> + </div> + </div> + <script type="text/javascript"> + hideAliasAndSummary('[% bug.short_desc FILTER js %]', '[% bug.alias FILTER js %]'); + </script> +[% END %] + +[%############################################################################%] +[%# Block for the first table in the "Details" section #%] +[%############################################################################%] + +[% BLOCK section_details1 %] + + [%#############%] + [%# PRODUCT #%] + [%#############%] + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.product, + override_legal_values = bug.choices.product + desc_url = 'describecomponents.cgi', value = bug.product + editable = bug.check_can_change_field('product', 0, 1) %] + </tr> + [%###############%] + [%# Component #%] + [%###############%] + <tr> + <td class="field_label"> + <label for="component" accesskey="m"> + <b><a href="describecomponents.cgi?product=[% bug.product FILTER url_quote %]"> + Co<u>m</u>ponent</a>: + </b> + </label> + </td> + [% PROCESS select selname => "component" %] + </tr> + <tr> + <td class="field_label"> + <label for="version"><b>Version</b></label>: + </td> + + [% PROCESS select selname => "version" %] + </tr> + [%############%] + [%# PLATFORM #%] + [%############%] + <tr> + <td class="field_label"> + <label for="rep_platform" accesskey="h"><b>Platform</b></label>: + </td> + <td class="field_value"> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.rep_platform, + no_tds = 1, value = bug.rep_platform + editable = bug.check_can_change_field('rep_platform', 0, 1) %] + [%+ INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.op_sys, + no_tds = 1, value = bug.op_sys + editable = bug.check_can_change_field('op_sys', 0, 1) %] + <script type="text/javascript"> + assignToDefaultOnChange(['product', 'component']); + </script> + </td> + </tr> + + + +[% END %] + +[%############################################################################%] +[%# Block for the status section #%] +[%############################################################################%] + +[% BLOCK section_status %] + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#status">Status</a></b>: + </td> + <td id="bz_field_status"> + <span id="static_bug_status"> + [% display_value("bug_status", bug.bug_status) FILTER html %] + [% IF bug.resolution %] + [%+ display_value("resolution", bug.resolution) FILTER html %] + [% IF bug.dup_id %] + of [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %] + [% END %] + [% END %] + [% IF bug.user.canedit || bug.user.isreporter %] + (<a href="#add_comment" + onclick="window.setTimeout(function() { document.getElementById('bug_status').focus(); }, 10)">edit</a>) + [% END %] + </span> + </td> + </tr> +[% END %] + +[%############################################################################%] +[%# Block for the second table in the "Details" section #%] +[%############################################################################%] + +[% BLOCK section_details2 %] + + [%###############################################################%] + [%# Importance (priority, severity and votes) #%] + [%###############################################################%] + <tr> + <td class="field_label"> + <label for="priority" accesskey="i"> + <b><a href="page.cgi?id=fields.html#importance"><u>I</u>mportance</a></b></label>: + </td> + <td> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.priority, + no_tds = 1, value = bug.priority + editable = bug.check_can_change_field('priority', 0, 1) %] + [%+ INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.bug_severity, + no_tds = 1, value = bug.bug_severity + editable = bug.check_can_change_field('bug_severity', 0, 1) %] + [% IF bug.use_votes %] + <span id="votes_container"> + [% IF bug.votes %] + with + <a href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]"> + [% bug.votes %] + [% IF bug.votes == 1 %] + vote + [% ELSE %] + votes + [% END %]</a> + [% END %] + (<a href="votes.cgi?action=show_user&bug_id= + [% bug.bug_id %]#vote_[% bug.bug_id %]">vote</a>) + </span> + [% END %] + </td> + </tr> + + [% IF Param("usetargetmilestone") && bug.target_milestone %] + <tr> + <td class="field_label"> + <label for="target_milestone"> + <a href="page.cgi?id=fields.html#target_milestone"> + Target Milestone</a></label>: + </td> + [% PROCESS select selname = "target_milestone" %] + </tr> + [% END %] + +[% END %] + +[%############################################################################%] +[%# Block for the table in the "People" section #%] +[%############################################################################%] + +[% BLOCK section_people %] + + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#assigned_to">Assigned To</a></b>: + </td> + <td> + [% IF bug.check_can_change_field("assigned_to", 0, 1) %] + <div id="bz_assignee_edit_container" class="bz_default_hidden"> + <span> + [% INCLUDE global/user.html.tmpl who = bug.assigned_to %] + (<a href="#" id="bz_assignee_edit_action">edit</a>) + </span> + </div> + <div id="bz_assignee_input"> + [% INCLUDE global/userselect.html.tmpl + id => "assigned_to" + name => "assigned_to" + value => bug.assigned_to.login + size => 30 + %] + <br> + <input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1"> + <label id="set_default_assignee_label" for="set_default_assignee">Reset Assignee to default</label> + </div> + <script type="text/javascript"> + hideEditableField('bz_assignee_edit_container', + 'bz_assignee_input', + 'bz_assignee_edit_action', + 'assigned_to', + '[% bug.assigned_to.login FILTER js %]' ); + initDefaultCheckbox('assignee'); + </script> + [% ELSE %] + [% INCLUDE global/user.html.tmpl who = bug.assigned_to %] + [% END %] + </td> + </tr> + + [% IF Param('useqacontact') %] + <tr> + <td class="field_label"> + <label for="qa_contact" accesskey="q"><b><u>Q</u>A Contact</b></label>: + </td> + <td> + [% IF bug.check_can_change_field("qa_contact", 0, 1) %] + [% IF bug.qa_contact != "" %] + <div id="bz_qa_contact_edit_container" class="bz_default_hidden"> + <span> + <span id="bz_qa_contact_edit_display"> + [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]</span> + (<a href="#" id="bz_qa_contact_edit_action">edit</a>) + </span> + </div> + [% END %] + <div id="bz_qa_contact_input"> + [% INCLUDE global/userselect.html.tmpl + id => "qa_contact" + name => "qa_contact" + value => bug.qa_contact.login + size => 30 + emptyok => 1 + %] + <br> + <input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1"> + <label for="set_default_qa_contact" id="set_default_qa_contact_label">Reset QA Contact to default</label> + </div> + <script type="text/javascript"> + [% IF bug.qa_contact != "" %] + hideEditableField('bz_qa_contact_edit_container', + 'bz_qa_contact_input', + 'bz_qa_contact_edit_action', + 'qa_contact', + '[% bug.qa_contact.login FILTER js %]'); + [% END %] + initDefaultCheckbox('qa_contact'); + </script> + [% ELSE %] + [% INCLUDE global/user.html.tmpl who = bug.qa_contact %] + [% END %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for URL Keyword and Whiteboard #%] +[%############################################################################%] +[% BLOCK section_url_keyword_whiteboard %] +[%# *** URL Whiteboard Keywords *** %] + <tr> + <td class="field_label"> + <label for="bug_file_loc" accesskey="u"><b> + [% IF bug.bug_file_loc + AND NOT bug.bug_file_loc.match("^(javascript|data)") %] + <a href="[% bug.bug_file_loc FILTER html %]"><u>U</u>RL</a> + [% ELSE %] + <u>U</u>RL + [% END %] + [%%]</b></label>: + </td> + <td> + [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %] + <span id="bz_url_edit_container" class="bz_default_hidden"> + [% IF bug.bug_file_loc + AND NOT bug.bug_file_loc.match("^(javascript|data)") %] + <a href="[% bug.bug_file_loc FILTER html %]" target="_blank" + title="[% bug.bug_file_loc FILTER html %]"> + [% bug.bug_file_loc FILTER truncate(40) FILTER html %]</a> + [% ELSE %] + [% bug.bug_file_loc FILTER html %] + [% END %] + (<a href="#" id="bz_url_edit_action">edit</a>)</span> + [% END %] + <span id="bz_url_input_area"> + [% url_output = PROCESS input no_td=1 inputname => "bug_file_loc" size => "40" colspan => 2 %] + [% IF NOT bug.check_can_change_field("bug_file_loc", 0, 1) %] + <a href="[% bug.bug_file_loc FILTER html %]">[% url_output FILTER none %]</a> + [% ELSE %] + [% url_output FILTER none %] + [% END %] + </span> + [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %] + <script type="text/javascript"> + hideEditableField('bz_url_edit_container', + 'bz_url_input_area', + 'bz_url_edit_action', + 'bug_file_loc', + "[% bug.bug_file_loc FILTER js %]"); + </script> + [% END %] + </td> + </tr> + + [% IF Param('usestatuswhiteboard') %] + <tr> + <td class="field_label"> + <label for="status_whiteboard" accesskey="w"><b><u>W</u>hiteboard</b></label>: + </td> + [% PROCESS input inputname => "status_whiteboard" size => "40" colspan => 2 %] + </tr> + [% END %] + + [% IF use_keywords %] + <tr> + <td class="field_label"> + <label for="keywords" accesskey="k"> + <b><a href="describekeywords.cgi"><u>K</u>eywords</a></b></label>: + </td> + [% PROCESS input inputname => "keywords" size => 40 colspan => 2 + value => bug.keywords.join(', ') %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Depends On / Blocks #%] +[%############################################################################%] +[% BLOCK section_dependson_blocks %] + <tr> + [% PROCESS dependencies + dep = { title => "Depends on", fieldname => "dependson" } %] + </tr> + + <tr> + [% PROCESS dependencies accesskey = "b" + dep = { title => "<u>B</u>locks", fieldname => "blocked" } %] + + <tr> + <th> </th> + + <td colspan="2" align="left" id="show_dependency_tree_or_graph"> + Show dependency <a href="showdependencytree.cgi?id=[% bug.bug_id %]&hide_resolved=1">tree</a> + + [% IF Param('webdotbase') %] + / <a href="showdependencygraph.cgi?id=[% bug.bug_id %]">graph</a> + [% END %] + </td> + </tr> +[% END %] + + +[%############################################################################%] +[%# Block for Restricting Visibility #%] +[%############################################################################%] + +[% BLOCK section_restrict_visibility %] + [% RETURN UNLESS bug.groups.size %] + + <div class="bz_group_visibility_section"> + [% inallgroups = 1 %] + [% inagroup = 0 %] + [% emitted_description = 0 %] + + [% FOREACH group = bug.groups %] + [% SET inallgroups = 0 IF NOT group.ingroup %] + [% SET inagroup = 1 IF group.ison %] + + [% NEXT IF group.mandatory %] + + [% IF NOT emitted_description %] + [% emitted_description = 1 %] + <div id="bz_restrict_group_visibility_help"> + <b>Only users in all of the selected groups can view this + [%+ terms.bug %]:</b> + <p class="instructions"> + Unchecking all boxes makes this a more public [% terms.bug %]. + </p> + </div> + [% END %] + + [% IF group.ingroup %] + <input type="hidden" name="defined_bit-[% group.bit %]" value="1"> + [% END %] + + <input type="checkbox" value="1" name="bit-[% group.bit %]" + id="bit-[% group.bit %]" + [% ' checked="checked"' IF group.ison %] + [% ' disabled="disabled"' IF NOT group.ingroup %]> + <label for="bit-[% group.bit %]"> + [%- group.description FILTER html_light %]</label> + <br> + [% END %] + + [% IF emitted_description %] + [% IF NOT inallgroups %] + <p class="instructions">Only members of a group can change the + visibility of [% terms.abug %] for that group.</p> + [% END %] + [% END %] + + [% IF inagroup %] + <div id="bz_enable_role_visibility_help"> + <b>Users in the roles selected below can always view + this [% terms.bug %]:</b> + </div> + <div id="bz_enable_role_visibility"> + <div> + [% user_can_edit_accessible = + bug.check_can_change_field("reporter_accessible", 0, 1) + %] + [% IF user_can_edit_accessible %] + <input type="hidden" name="defined_reporter_accessible" value="1"> + [% END %] + <input type="checkbox" value="1" + name="reporter_accessible" id="reporter_accessible" + [% " checked" IF bug.reporter_accessible %] + [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]> + <label for="reporter_accessible">Reporter</label> + </div> + <div> + [% user_can_edit_accessible = + bug.check_can_change_field("cclist_accessible", 0, 1) + %] + [% IF user_can_edit_accessible %] + <input type="hidden" name="defined_cclist_accessible" value="1"> + [% END %] + <input type="checkbox" value="1" + name="cclist_accessible" id="cclist_accessible" + [% " checked" IF bug.cclist_accessible %] + [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]> + <label for="cclist_accessible">CC List</label> + </div> + <p class="instructions"> + The assignee + [% IF (Param('useqacontact')) %] + and QA contact + [% END %] + can always see [% terms.abug %], and this section does not + take effect unless the [% terms.bug %] is restricted to at + least one group. + </p> + </div> + [% END %] + </div> [%# bz_group_visibility_section %] +[% END %] + +[%############################################################################%] +[%# Block for Dates #%] +[%############################################################################%] + +[% BLOCK section_dates %] + <tr> + <td class="field_label"> + <b>Reported</b>: + </td> + <td> + [% bug.creation_ts FILTER time %] by [% INCLUDE global/user.html.tmpl who = bug.reporter %] + </td> + </tr> + + <tr> + <td class="field_label"> + <b> Modified</b>: + </td> + <td> + [% bug.delta_ts FILTER time FILTER replace(':\d\d$', '') FILTER replace(':\d\d ', ' ')%] + (<a href="show_activity.cgi?id=[% bug.bug_id %]">[%# terms.Bug %]History</a>) + </td> + + </tr> +[% END %] + +[%############################################################################%] +[%# Block for CC LIST #%] +[%############################################################################%] +[% BLOCK section_cclist %] + <tr> + <td class="field_label"> + <label for="newcc" accesskey="a"><b>CC List</b>:</label> + </td> + <td> + [% IF user.id %] + [% IF NOT bug.cc || NOT bug.cc.contains(user.login) %] + [% has_role = bug.user.isreporter + || bug.assigned_to.id == user.id + || (Param('useqacontact') + && bug.qa_contact + && bug.qa_contact.id == user.id) %] + <input type="checkbox" id="addselfcc" name="addselfcc" + [% " checked=\"checked\"" + IF user.settings.state_addselfcc.value == 'always' + || (!has_role + && user.settings.state_addselfcc.value == 'cc_unless_role') %]> + <label for="addselfcc">Add me to CC list</label> + <br> + [% END %] + [% END %] + [% bug.cc.size || 0 FILTER html %] + [% IF bug.cc.size == 1 %] + user + [% ELSE %] + users + [% END %] + [% IF user.id %] + [% IF bug.cc.contains( user.email ) %] + including you + [% END %] + [% END %] + <span id="cc_edit_area_showhide_container" class="bz_default_hidden"> + (<a href="#" id="cc_edit_area_showhide">[% IF user.id %]edit[% ELSE %]show[% END %]</a>) + </span> + <div id="cc_edit_area"> + <br> + [% IF user.id %] + <div> + <div><label for="cc"><b>Add</b></label></div> + [% INCLUDE global/userselect.html.tmpl + id => "newcc" + name => "newcc" + value => "" + size => 30 + multiple => 5 + %] + </div> + [% END %] + [% IF bug.cc %] + <select id="cc" name="cc" multiple="multiple" size="5"> + [% FOREACH c = bug.cc %] + <option value="[% c FILTER email FILTER html %]"> + [% c FILTER email FILTER html %]</option> + [% END %] + </select> + [% IF user.id %] + <br> + <input type="checkbox" id="removecc" name="removecc"> + [%%]<label for="removecc">Remove selected CCs</label> + <br> + [% END %] + [% END %] + </div> + <script type="text/javascript"> + hideEditableField( 'cc_edit_area_showhide_container', + 'cc_edit_area', + 'cc_edit_area_showhide', + '', + ''); + </script> + </td> + </tr> +[% END %] + +[%############################################################################%] +[%# Block for See Also #%] +[%############################################################################%] +[% BLOCK section_see_also %] + [% IF Param('use_see_also') || bug.see_also.size %] + <tr> + [% INCLUDE bug/field.html.tmpl + field = bug_fields.see_also + value = bug.see_also + editable = bug.check_can_change_field('see_also', 0, 1) + %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for FLAGS #%] +[%############################################################################%] + +[% BLOCK section_flags %] + [%# *** Flags *** %] + [% show_bug_flags = 0 %] + [% FOREACH type = bug.flag_types %] + [% IF (type.flags && type.flags.size > 0) || (user.id && type.is_active) %] + [% show_bug_flags = 1 %] + [% LAST %] + [% END %] + [% END %] + [% IF show_bug_flags %] + <tr> + <td class="field_label flags_label"> + <label><b>Flags:</b></label> + </td> + <td></td> + </tr> + <tr> + <td colspan="2"> + [% IF bug.flag_types.size > 0 %] + [% PROCESS "flag/list.html.tmpl" flag_no_header = 1 + flag_types = bug.flag_types + any_flags_requesteeble = bug.any_flags_requesteeble %] + [% END %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Custom Fields #%] +[%############################################################################%] + +[% BLOCK section_customfields %] +[%# *** Custom Fields *** %] + + [% FOREACH field = Bugzilla.active_custom_fields %] + <tr> + [% PROCESS bug/field.html.tmpl value=bug.${field.name} + editable = bug.check_can_change_field(field.name, 0, 1) + value_span = 2 %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Section Spacer #%] +[%############################################################################%] + +[% BLOCK section_spacer %] + <tr> + <td colspan="2" class="bz_section_spacer"></td> + </tr> +[% END %] + + + + +[%############################################################################%] +[%# Block for dependencies #%] +[%############################################################################%] + +[% BLOCK dependencies %] + + <th class="field_label"> + <label for="[% dep.fieldname %]"[% " accesskey=\"$accesskey\"" IF accesskey %]> + [% dep.title %]</label>: + </th> + <td> + <span id="[% dep.fieldname %]_input_area"> + [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %] + <input name="[% dep.fieldname %]" id="[% dep.fieldname %]" + class="text_input" + value="[% bug.${dep.fieldname}.join(', ') %]"> + [% END %] + </span> + + [% FOREACH depbug = bug.${dep.fieldname} %] + [% depbug FILTER bug_link(depbug, use_alias => 1) FILTER none %][% " " %] + [% END %] + [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %] + <span id="[% dep.fieldname %]_edit_container" class="edit_me bz_default_hidden" > + (<a href="#" id="[% dep.fieldname %]_edit_action">edit</a>) + </span> + <script type="text/javascript"> + hideEditableField('[% dep.fieldname %]_edit_container', + '[% dep.fieldname %]_input_area', + '[% dep.fieldname %]_edit_action', + '[% dep.fieldname %]', + "[% bug.${dep.fieldname}.join(', ') %]"); + </script> + [% END %] + </td> + + [% accesskey = undef %] + +[% END %] + +[%############################################################################%] +[%# Block for Time Tracking Group #%] +[%############################################################################%] + +[% BLOCK section_timetracking %] + <table class="bz_time_tracking_table"> + <tr> + <th> + <label for="estimated_time">Orig. Est.</label> + </th> + <th> + Current Est. + </th> + <th> + <label for="work_time">Hours Worked</label> + </th> + <th> + <label for="remaining_time">Hours Left</label> + </th> + <th> + %Complete + </th> + <th> + Gain + </th> + <th> + <label for="deadline">Deadline</label> + </th> + </tr> + <tr> + <td> + <input name="estimated_time" id="estimated_time" + value="[% PROCESS formattimeunit + time_unit=bug.estimated_time %]" + size="6" maxlength="6"> + </td> + <td> + [% PROCESS formattimeunit + time_unit=(bug.actual_time + bug.remaining_time) %] + </td> + <td> + [% PROCESS formattimeunit time_unit=bug.actual_time %] + + <input name="work_time" id="work_time" + value="0" size="3" maxlength="6" + onchange="adjustRemainingTime();"> + </td> + <td> + <input name="remaining_time" id="remaining_time" + value="[% PROCESS formattimeunit + time_unit=bug.remaining_time %]" + size="6" maxlength="6" onchange="updateRemainingTime();"> + </td> + <td> + [% PROCESS calculatepercentage act=bug.actual_time + rem=bug.remaining_time %] + </td> + <td> + [% PROCESS formattimeunit time_unit=bug.estimated_time - (bug.actual_time + bug.remaining_time) %] + </td> + <td> + <input name="deadline" id="deadline" value="[% bug.deadline %]" + size="10" maxlength="10"><br /> + <small>(YYYY-MM-DD)</small> + </td> + </tr> + <tr> + <td colspan="7" class="bz_summarize_time"> + <a href="summarize_time.cgi?id=[% bug.bug_id %]&do_depends=1"> + Summarize time (including time for [% terms.bugs %] + blocking this [% terms.bug %])</a> + </td> + </tr> + </table> +[% END %] + +[%############################################################################%] +[%# Block for the Additional Comments box #%] +[%############################################################################%] + +[% BLOCK comment_box %] + <div class="bz_section_additional_comments"> + <a name="add_comment"></a> + [% IF user.id %] + <label for="comment" accesskey="c"><b>Additional + <u>C</u>omments</b></label>: + + [% IF user.is_insider %] + <input type="checkbox" name="commentprivacy" value="1" + id="newcommentprivacy" + onClick="updateCommentTagControl(this, form)"> + <label for="newcommentprivacy"> + Make comment private (visible only to members of the + <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> + [% END %] + + <!-- This table keeps the submit button aligned with the box. --> + <table><tr><td> + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 10 + maxrows = 25 + cols = constants.COMMENT_COLS + %] + [% Hook.process("after_comment_textarea", 'bug/edit.html.tmpl') %] + <br> + [% PROCESS commit_button id=""%] + + <table class="status" cellspacing="0" cellpadding="0"> + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#status">Status</a></b>: + </td> + <td> + <a name="bug_status_bottom"></a> + [% PROCESS bug/knob.html.tmpl %] + </td> + </tr> + </table> + </td></tr></table> + + [%# For logged-out users %] + [% ELSE %] + <table><tr><td><fieldset> + <legend>Note</legend> + You need to + <a href="show_bug.cgi?id= + [%- bug.bug_id %]&GoAheadAndLogIn=1">log in</a> + before you can comment on or make changes to this [% terms.bug %]. + </fieldset></table><tr></td> + [% END %] + </div> +[% END %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <td> + [% IF bug.check_can_change_field(selname, 0, 1) + AND bug.choices.${selname}.size > 1 %] + <select id="[% selname %]" name="[% selname %]"> + [% FOREACH x = bug.choices.${selname} %] + <option value="[% x.name FILTER html %]" + [% " selected" IF x.name == bug.${selname} %]> + [%- x.name FILTER html %] + </option> + [% END %] + </select> + [% ELSE %] + [% bug.${selname} FILTER html %] + [% END %] + </td> +[% END %] + +[%############################################################################%] +[%# Block for INPUT fields #%] +[%############################################################################%] + +[% BLOCK input %] + [% IF no_td != 1 %] + <td[% " colspan=\"$colspan\"" IF colspan %]> + [% END %] + [% val = value ? value : bug.$inputname %] + [% IF bug.check_can_change_field(inputname, 0, 1) %] + <input id="[% inputname %]" name="[% inputname %]" class="text_input" + value="[% val FILTER html %]"[% " size=\"$size\"" IF size %] + [% " maxlength=\"$maxlength\"" IF maxlength %] + [% " spellcheck=\"$spellcheck\"" IF spellcheck %]> + [% ELSE %] + [% IF size && val.length > size %] + <span title="[% val FILTER html %]"> + [% val FILTER truncate(size) FILTER html %] + </span> + [% ELSE %] + [% val FILTER html %] + [% END %] + [% END %] + [% IF no_td != 1 %] + </td> + [% END %] + [% no_td = 0 %] + [% maxlength = 0 %] + [% colspan = 0 %] + [% size = 0 %] + [% value = undef %] + [% spellcheck = undef %] +[% END %] +[% BLOCK commit_button %] + [% IF user.id %] + <div class="knob-buttons"> + <input type="submit" value="Save Changes" + id="commit[% id FILTER css_class_quote %]"> + [% IF bug.user.canmove %] + <input type="submit" name="action" id="action[% id FILTER css_class_quote %]" value="[% Param("move-button-text") %]"> + [% END %] + </div> + [% END %] +[% END %] diff --git a/template/en/default/bug/field-events.js.tmpl b/template/en/default/bug/field-events.js.tmpl new file mode 100644 index 0000000..06fba12 --- /dev/null +++ b/template/en/default/bug/field-events.js.tmpl @@ -0,0 +1,40 @@ +[%# 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 the San Jose State + # University Foundation. Portions created by the Initial Developer + # are Copyright (C) 2008 the Initial Developer. All Rights Reserved. + # + # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # field: a Bugzilla::Field object + #%] + +[% FOREACH controlled_field = field.controls_visibility_of %] + showFieldWhen('[% controlled_field.name FILTER js %]', + '[% field.name FILTER js %]', + '[% controlled_field.visibility_value.name FILTER js %]'); +[% END %] +[% FOREACH legal_value = field.legal_values %] + [% FOREACH controlled_field = legal_value.controlled_values.keys %] + [% SET cont_ids = [] %] + [% FOREACH val = legal_value.controlled_values.$controlled_field %] + [% cont_ids.push(val.id) %] + [% END %] + showValueWhen('[% controlled_field FILTER js %]', + [[% cont_ids.join(',') FILTER js %]], + '[% field.name FILTER js %]', + [% legal_value.id FILTER js %]); + [% END %] +[% END %] diff --git a/template/en/default/bug/field.html.tmpl b/template/en/default/bug/field.html.tmpl new file mode 100644 index 0000000..bb678d7 --- /dev/null +++ b/template/en/default/bug/field.html.tmpl @@ -0,0 +1,215 @@ +[%# 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> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Elliotte Martin <elliotte_martin@yahoo.com> + #%] + +[%# INTERFACE: + # field: a Bugzilla::Field object + # value: The value of the field for this bug. + # override_legal_values (optional): The list of legal values, for select fields. + # editable: Whether the field should be displayed as an editable + # <input> or as just the plain text of its value. + # allow_dont_change: display the --do_not_change-- option for select fields. + # value_span: A colspan for the table cell containing + # the field value. + # no_tds: boolean; if true, don't display the label <th> or the + # wrapping <td> for the field. + # desc_url: string; Normally the label of a non-custom field links to + # fields.html. If you want it to link elsewhere, specify the + # relative URL you want to link to, here. Remember to call + # url_quote on any query string arguments. + # bug (optional): The current Bugzilla::Bug being displayed, or a hash + # with default field values being displayed on a page. + #%] + +[% SET hidden = 0 %] +[% IF field.visibility_field.defined %] + [% IF !bug.${field.visibility_field.name} + .contains(field.visibility_value.name) + %] + [% SET hidden = 1 %] + [% END %] +[% END %] + +[% IF NOT no_tds %] + <th class="field_label [% ' bz_hidden_field' IF hidden %]" + id="field_label_[% field.name FILTER html %]"> + [% IF editable %] + <label for="[% field.name FILTER html %]"> + [% END %] + [% IF desc_url %] + <a href="[% desc_url FILTER html %]"> + [% ELSIF !field.custom %] + <a href="page.cgi?id=fields.html#[% field.name FILTER url_quote %]"> + [% END -%] + [% field_descs.${field.name} FILTER html %]: + [%- '</a>' IF (!field.custom || desc_url) %] + [% '</label>' IF editable %] + </th> +[% END %] + +[% IF NOT no_tds %] +<td class="field_value [% ' bz_hidden_field' IF hidden %]" + id="field_container_[% field.name FILTER html %]" + [% " colspan=\"$value_span\"" FILTER none IF value_span %]> +[% END %] +[% Hook.process('start_field_column') %] +[% IF editable %] + [% SWITCH field.type %] + [% CASE constants.FIELD_TYPE_FREETEXT %] + <input id="[% field.name FILTER html %]" class="text_input" + name="[% field.name FILTER html %]" + value="[% value FILTER html %]" size="40" + maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]"> + [% CASE constants.FIELD_TYPE_DATETIME %] + <input name="[% field.name FILTER html %]" size="20" + id="[% field.name FILTER html %]" + value="[% value FILTER html %]" + onchange="updateCalendarFromField(this)"> + <button type="button" class="calendar_button" + id="button_calendar_[% field.name FILTER html %]" + onclick="showCalendar('[% field.name FILTER js %]')"> + <span>Calendar</span> + </button> + + <div id="con_calendar_[% field.name FILTER html %]" + class="yui-skin-sam"></div> + + <script type="text/javascript"> + createCalendar('[% field.name FILTER js %]') + </script> + [% CASE constants.FIELD_TYPE_BUG_ID %] + <span id="[% field.name FILTER html %]_input_area"> + <input name="[% field.name FILTER html %]" id="[% field.name FILTER html %]" + value="[% value FILTER html %]" size="7"> + </span> + + [% IF bug.${field.name} %] + [% bug.${field.name} FILTER bug_link(bug.${field.name}) FILTER none %] + [% END %] + <span id="[% field.name FILTER html %]_edit_container" class="edit_me bz_default_hidden"> + (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>) + </span> + <script type="text/javascript"> + hideEditableField('[% field.name FILTER js %]_edit_container', + '[% field.name FILTER js %]_input_area', + '[% field.name FILTER js %]_edit_action', + '[% field.name FILTER js %]', + "[% bug.${field.name} FILTER js %]"); + </script> + [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT + constants.FIELD_TYPE_MULTI_SELECT ] %] + <select id="[% field.name FILTER html %]" + name="[% field.name FILTER html %]" + [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %] + [% SET field_size = 5 %] + [% IF field.legal_values.size < 5 %] + [% SET field_size = field.legal_values.size %] + [% END %] + size="[% field_size FILTER html %]" multiple="multiple" + [% END %] + > + [% IF allow_dont_change %] + <option value="[% dontchange FILTER html %]" + [% ' selected="selected"' IF value == dontchange %]> + [% dontchange FILTER html %] + </option> + [% END %] + [% IF override_legal_values %] + [% legal_values = override_legal_values %] + [% ELSE %] + [% legal_values = field.legal_values %] + [% END %] + [% FOREACH legal_value = legal_values %] + [% SET control_value = legal_value.visibility_value %] + [% SET control_field = field.value_field %] + <option value="[% legal_value.name FILTER html %]" + id="v[% legal_value.id FILTER html %]_ + [%- field.name FILTER html %]" + [%# We always show selected values, even if they should be + # hidden %] + [% IF value.contains(legal_value.name).size %] + selected="selected" + [% ELSIF (control_field && control_value + && !bug.${control_field.name}.contains(control_value.name)) + || !legal_value.is_active + %] + class="bz_hidden_option" disabled="disabled" + [% END %]> + [%- display_value(field.name, legal_value.name) FILTER html ~%] + </option> + [% END %] + </select> + [%# When you pass an empty multi-select in the web interface, + # it doesn't appear at all in the CGI object. Instead of + # forcing all users of process_bug to always specify every + # multi-select, we have this field defined if the multi-select + # field is defined, and then if this is passed but the multi-select + # isn't, we know that the multi-select was emptied. + %] + [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %] + <input type="hidden" name="defined_[% field.name FILTER html %]"> + [% END %] + + <script type="text/javascript"> + <!-- + initHidingOptionsForIE('[% field.name FILTER js %]'); + [%+ INCLUDE "bug/field-events.js.tmpl" field = field %] + //--> + </script> + + [% CASE constants.FIELD_TYPE_TEXTAREA %] + [% INCLUDE global/textarea.html.tmpl + id = field.name name = field.name minrows = 4 maxrows = 8 + cols = 60 defaultcontent = value %] + [% CASE constants.FIELD_TYPE_BUG_URLS %] + [% '<ul class="bug_urls">' IF value.size %] + [% FOREACH url = value %] + <li> + <a href="[% url FILTER html %]">[% url FILTER html %]</a> + [% IF editable %] + <label><input type="checkbox" value="[% url FILTER html %]" + name="remove_[% field.name FILTER html %]"> + Remove</label> + [% END %] + </li> + [% END %] + [% '</ul>' IF value.size %] + + [% IF editable && Param('use_see_also') %] + <label for="[% field.name FILTER html %]"> + <strong>Add [% terms.Bug %] URLs:</strong> + </label><br> + <input type="text" id="[% field.name FILTER html %]" size="40" + class="text_input" name="[% field.name FILTER html %]"> + [% END %] + [% END %] +[% ELSIF field.type == constants.FIELD_TYPE_TEXTAREA %] + <div class="uneditable_textarea">[% value FILTER wrap_comment(60) + FILTER html %]</div> +[% ELSIF field.type == constants.FIELD_TYPE_BUG_ID %] + [% IF bug.${field.name} %] + [% bug.${field.name} FILTER bug_link(bug.${field.name}) FILTER none %] + [% END %] +[% ELSE %] + [% value.join(', ') FILTER html %] +[% END %] +[% Hook.process('end_field_column') %] +[% '</td>' IF NOT no_tds %] diff --git a/template/en/default/bug/format_comment.txt.tmpl b/template/en/default/bug/format_comment.txt.tmpl new file mode 100644 index 0000000..7d33c23 --- /dev/null +++ b/template/en/default/bug/format_comment.txt.tmpl @@ -0,0 +1,68 @@ +[%# 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 Marc Schumann. + # Portions created by Marc Schumann are Copyright (c) 2008 Marc Schumann. + # All rights reserved. + # + # Contributor(s): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# NOTE: Everywhere you use this template, you must call + # "FILTER remove('^X')" on the result. This is unfortunately the only way + # to preserve leading whitespace in comments. + #%] + +[%# INTERFACE: + # comment: A Bugzilla::Comment object. + # is_bugmail: boolean; True if this comment is going into a plain-text + # bugmail. + #%] + +[%# Please don't use field-descs here. It can slow down Bugzilla. %] +[% PROCESS 'global/variables.none.tmpl' %] + +[% SET comment_body = comment.body %] + +[% IF comment.type == constants.CMT_DUPE_OF %] +X[% comment_body %] + +*** This [% terms.bug %] has been marked as a duplicate of [% terms.bug %] [%+ comment.extra_data %] *** +[% ELSIF comment.type == constants.CMT_HAS_DUPE %] +*** [% terms.Bug %] [%+ comment.extra_data %] has been marked as a duplicate of this [% terms.bug %]. *** +[% ELSIF comment.type == constants.CMT_POPULAR_VOTES %] +*** This [% terms.bug %] has been confirmed by popular vote. *** +[% ELSIF comment.type == constants.CMT_MOVED_TO %] +X[% comment_body %] + +[%+ terms.Bug %] moved to [% Param("move-to-url") %]. +If the move succeeded, [% comment.extra_data %] will receive a mail containing +the number of the new [% terms.bug %] in the other database. +If all went well, please paste in a link to the new [% terms.bug %]. +Otherwise, reopen this [% terms.bug %]. +[% ELSIF comment.type == constants.CMT_ATTACHMENT_CREATED %] +Created attachment [% comment.extra_data %] +[% IF is_bugmail %] + --> [% urlbase _ "attachment.cgi?id=" _ comment.extra_data %] +[% END %] +[%+ comment.attachment.description %] + +[%+ comment.body %] +[% ELSIF comment.type == constants.CMT_ATTACHMENT_UPDATED %] +Comment on attachment [% comment.extra_data %] +[% IF is_bugmail %] + --> [% urlbase _ "attachment.cgi?id=" _ comment.extra_data %] +[% END %] +[%+ comment.attachment.description %] + +[%+ comment.body %] +[% END %] diff --git a/template/en/default/bug/knob.html.tmpl b/template/en/default/bug/knob.html.tmpl new file mode 100644 index 0000000..ac14e6d --- /dev/null +++ b/template/en/default/bug/knob.html.tmpl @@ -0,0 +1,100 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Frédéric Buclin <LpSolit@gmail.com> + # Guy Pyrzak <guy.pyrzak@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] +<div id="status"> + [% PROCESS bug/field.html.tmpl + no_tds = 1 + field = bug_fields.bug_status + value = bug.bug_status + override_legal_values = bug.choices.bug_status + editable = bug.choices.bug_status.size > 1 + %] + + [% IF bug.resolution + OR bug.check_can_change_field('resolution', bug.resolution, 1) + %] + <noscript><br>resolved as </noscript> + [% END %] + + <span id="resolution_settings"> + [% PROCESS bug/field.html.tmpl + no_tds = 1 + field = bug_fields.resolution + value = bug.resolution + override_legal_values = bug.choices.resolution + editable = bug.check_can_change_field('resolution', bug.resolution, 1) + %] + </span> + + [% IF bug.check_can_change_field('dup_id', 0, 1) %] + <noscript><br> duplicate</noscript> + <span id="duplicate_settings">of + <span id="dup_id_container" class="bz_default_hidden"> + [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %] + (<a href="#" id="dup_id_edit_action">edit</a>) + </span + ><input id="dup_id" name="dup_id" size="6" + value="[% bug.dup_id FILTER html %]"> + </span> + [% IF bug.dup_id %] + <noscript>[% bug.dup_id FILTER bug_link(bug.dup_id) FILTER none %]</noscript> + [% END %] + <div id="dup_id_discoverable" class="bz_default_hidden"> + <a href="#" id="dup_id_discoverable_action">Mark as Duplicate</a> + </div> + [% ELSIF bug.dup_id %] + <noscript><br> duplicate</noscript> + <span id="duplicate_display">of + [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]</span> + [% END %] +</div> + +<script type="text/javascript"> + var close_status_array = [ + [% FOREACH status = bug.choices.bug_status %] + [% NEXT IF status.is_open %] + '[% status.name FILTER js %]'[% ',' UNLESS loop.last %] + [% END %] + ]; + YAHOO.util.Dom.removeClass('dup_id_discoverable', 'bz_default_hidden'); + hideEditableField( "dup_id_container", "dup_id", 'dup_id_edit_action', + 'dup_id', '[% bug.dup_id FILTER js %]' ) + showHideStatusItems( "", ['[% "is_duplicate" IF bug.dup_id %]', + '[% bug.bug_status FILTER js %]']); + YAHOO.util.Event.addListener( 'bug_status', "change", showHideStatusItems, + ['[% "is_duplicate" IF bug.dup_id %]', + '[% bug.bug_status FILTER js %]']); + YAHOO.util.Event.addListener( 'resolution', "change", showDuplicateItem); + YAHOO.util.Event.addListener( 'dup_id_discoverable_action', + 'click', + setResolutionToDuplicate, + '[% Param('duplicate_or_move_bug_status') + FILTER js %]'); + YAHOO.util.Event.addListener( window, 'load', showHideStatusItems, + ['[% "is_duplicate" IF bug.dup_id %]', + '[% bug.bug_status FILTER js %]'] ); + + [% INCLUDE "bug/field-events.js.tmpl" field = select_fields.bug_status %] + [% INCLUDE "bug/field-events.js.tmpl" field = select_fields.resolution %] +</script> diff --git a/template/en/default/bug/navigate.html.tmpl b/template/en/default/bug/navigate.html.tmpl new file mode 100644 index 0000000..4a3d063 --- /dev/null +++ b/template/en/default/bug/navigate.html.tmpl @@ -0,0 +1,87 @@ +[%# 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> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% IF bottom_navigator == 1 %] + <ul class="related_actions"> + <li><a href="show_bug.cgi?format=multiple&id= + [% bug.bug_id FILTER url_quote %]">Format For Printing</a></li> + <li> - <a href="show_bug.cgi?ctype=xml&id= + [% bug.bug_id FILTER url_quote %]">XML</a></li> + <li> - <a href="enter_bug.cgi?cloned_bug_id= + [% bug.bug_id FILTER url_quote %]">Clone This + [% terms.Bug %]</a></li> + [%# Links to more things users can do with this bug. %] + [% Hook.process("links") %] + <li> - <a href="#">Top of page </a></li> + </ul> +[% END %] + + +<div class="navigation"> +[% IF last_bug_list.size > 0 %] + [% this_bug_idx = lsearch(last_bug_list, bug.id) %] + <b>[% terms.Bug %] List:</b> + [% IF this_bug_idx != -1 %] + ([% this_bug_idx + 1 %] of [% last_bug_list.size %]) + [% END %] + + [% IF this_bug_idx != -1 %] + <a href="show_bug.cgi?id= + [%- last_bug_list.first FILTER url_quote %]">First</a> + <a href="show_bug.cgi?id= + [%- last_bug_list.last FILTER url_quote %]">Last</a> + [% END %] + + [% IF bug.bug_id %] + [% IF this_bug_idx != -1 %] + [% IF this_bug_idx > 0 %] + [% prev_bug = this_bug_idx - 1 %] + <a href="show_bug.cgi?id= + [%- last_bug_list.$prev_bug FILTER url_quote %]">Prev</a> + [% ELSE %] + <i><font color="#777777">Prev</font></i> + [% END %] + + [% IF this_bug_idx + 1 < last_bug_list.size %] + [% next_bug = this_bug_idx + 1 %] + <a href="show_bug.cgi?id= + [%- last_bug_list.$next_bug FILTER url_quote %]">Next</a> + [% ELSE %] + <i><font color="#777777">Next</font></i> + [% END %] + [% ELSE %] + (This [% terms.bug %] is not in your last search results) + [% END %] + [% ELSE %] + + [% END %] + + <a href="buglist.cgi?regetlastlist=1">Show last search results</a> +[% ELSE %] + [%# With no list, don't show link to search results %] + <i><font color="#777777">First</font></i> + <i><font color="#777777">Last</font></i> + <i><font color="#777777">Prev</font></i> + <i><font color="#777777">Next</font></i> + + <i><font color="#777777">No search results available</font></i> +[% END %] +</div> diff --git a/template/en/default/bug/process/bugmail.html.tmpl b/template/en/default/bug/process/bugmail.html.tmpl new file mode 100644 index 0000000..b0132a2 --- /dev/null +++ b/template/en/default/bug/process/bugmail.html.tmpl @@ -0,0 +1,60 @@ +[%# 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> + # J. Paul Reed <preed@sigkill.com> + #%] + +[%# INTERFACE: + # mailing_bugid: The bug ID that email is being sent for. + # sent_bugmail: The results of Bugzilla::BugMail::Send(). + #%] + +[% PROCESS global/variables.none.tmpl %] + +<dl> +[% PROCESS emails + description = "Email sent to" + names = sent_bugmail.sent +%] + +[% PROCESS emails + description = "Excluding" + names = sent_bugmail.excluded +%] +</dl> + +[%############################################################################%] +[%# Block for a set of email addresses #%] +[%############################################################################%] + +[% BLOCK emails %] + <dt>[% description FILTER html %]:</dt> + <dd> + [% IF user.can_see_bug(mailing_bugid) %] + [% IF names.size > 0 %] + [%+ FOREACH name = names %] + <code>[% name FILTER html %]</code>[% ", " UNLESS loop.last() %] + [% END %] + [% ELSE %] + no one + [% END %] + [% ELSE %] + (list of e-mails not available) + [% END %] + </dd> +[% END %] diff --git a/template/en/default/bug/process/confirm-duplicate.html.tmpl b/template/en/default/bug/process/confirm-duplicate.html.tmpl new file mode 100644 index 0000000..d89c8da --- /dev/null +++ b/template/en/default/bug/process/confirm-duplicate.html.tmpl @@ -0,0 +1,75 @@ +[%# 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: + # original_bug_id: number; the bug number for the bug + # against which a bug is being duped + # duplicate_bug_id: number; the bug number for the bug + # being duped + # cclist_accessible: boolean; whether or not users on the cc: list + # of the original bug can access that bug. + #%] + +[% PROCESS global/variables.none.tmpl %] +[% PROCESS global/header.html.tmpl title="Duplicate Warning" %] +[% orig_bug = "$terms.bug $original_bug_id" + FILTER bug_link(original_bug_id) %] + +<p> + When marking [% terms.abug %] as a duplicate, the reporter of the duplicate + is normally added to the CC list of the original. The permissions + on [% orig_bug FILTER none %] (the original) are currently set + such that the reporter would not normally be able to see it. +</p> + +<p> + <b>Adding the reporter to the CC list of [% orig_bug FILTER none %] + [% IF cclist_accessible %] + will immediately + [% ELSE %] + might, in the future, + [% END %] + allow him/her access to view this [% terms.bug %].</b> + Do you wish to do this? +</p> + +<form method="post" action="process_bug.cgi"> + +[% PROCESS "global/hidden-fields.html.tmpl" exclude="^Bugzilla_(login|password)$" %] + +<p> + <input type="radio" name="confirm_add_duplicate" value="1"> + Yes, add the reporter to CC list on [% orig_bug FILTER none %] +</p> +<p> + <input type="radio" name="confirm_add_duplicate" value="0" checked="checked"> + No, do not add the reporter to CC list on [% orig_bug FILTER none %] +</p> +<p> + [% "Throw away my changes, and revisit $terms.bug $duplicate_bug_id" + FILTER bug_link(duplicate_bug_id) FILTER none %] +</p> +<p> + <input type="submit" id="process" value="Submit"> +</p> + +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/process/header.html.tmpl b/template/en/default/bug/process/header.html.tmpl new file mode 100644 index 0000000..79f0126 --- /dev/null +++ b/template/en/default/bug/process/header.html.tmpl @@ -0,0 +1,46 @@ +[%# 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: + # As global/header.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] + +[% PROCESS "bug/show-header.html.tmpl" %] + +[% IF title_tag == "bug_processed" %] + [% title = BLOCK %] + [% IF Bugzilla.cgi.param('id') %] + [% terms.Bug %] [%+ id FILTER html %] + [% ELSE %] + [% terms.Bugs %] + [% END %] + processed + [% END %] +[% ELSIF title_tag == "mid_air" %] + [% title = "Mid-air collision!" %] +[% ELSIF title_tag == "change_votes" %] + [% title = "Change Votes" %] +[% END %] + +[% PROCESS global/header.html.tmpl %] diff --git a/template/en/default/bug/process/midair.html.tmpl b/template/en/default/bug/process/midair.html.tmpl new file mode 100644 index 0000000..34031fc --- /dev/null +++ b/template/en/default/bug/process/midair.html.tmpl @@ -0,0 +1,109 @@ +[%# 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: + # operations: array; bug activity since the user last displayed the bug form, + # used by bug/activity/table.html.tmpl to display recent changes that will + # be overwritten if the user submits these changes. See that template + # for further documentation. + # start_at: number; the comment at which show/comments.tmpl should begin + # displaying comments, either the index of the last comment (if the user + # entered a comment along with their change) or a number less than that + # (if they didn't), in which case no comments are displayed. + # comments: array; all the comments on the bug. + # bug: Bugzilla::Bug; the bug being changed. + #%] + +[%# The global Bugzilla->cgi object is used to obtain form variable values. %] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/variables.none.tmpl %] + +[% UNLESS header_done %] + [% PROCESS bug/process/header.html.tmpl %] +[% END %] + +<h1>Mid-air collision detected!</h1> + +<p> + Someone else has made changes to + [%+ "$terms.bug $bug.id" FILTER bug_link(bug) FILTER none %] + at the same time you were trying to. + The changes made were: +</p> + +<p> + [% PROCESS "bug/activity/table.html.tmpl" incomplete_data=0 %] +</p> + +[% IF comments.size > start_at %] +<p> + Added the comment(s): + <blockquote> + [% PROCESS "bug/comments.html.tmpl" %] + </blockquote> +</p> +[% END %] + +[% IF cgi.param("comment") %] +<p> + Your comment was:<br> + <blockquote><pre class="bz_comment_text"> + [% cgi.param("comment") FILTER wrap_comment FILTER html %] + </pre></blockquote> +</p> +[% END %] + +<p> +You have the following choices: +</p> + +<ul> + <li> + <form method="post" action="process_bug.cgi"> + <input type="hidden" name="delta_ts" + value="[% bug.delta_ts FILTER html %]"> + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^Bugzilla_login|Bugzilla_password|delta_ts$" %] + <input type="submit" id="process" value="Submit my changes anyway"> + This will cause all of the above changes to be overwritten + [% ", except for the added comment(s)" IF comments.size > start_at %]. + </form> + </li> + [% IF cgi.param("comment") %] + <li> + <form method="post" action="process_bug.cgi"> + <input type="hidden" name="id" value="[% cgi.param("id") FILTER html %]"> + <input type="hidden" name="delta_ts" value="[% bug.delta_ts FILTER html %]"> + <input type="hidden" name="comment" value="[% cgi.param("comment") FILTER html %]"> + <input type="hidden" name="commentprivacy" value="[% cgi.param("commentprivacy") FILTER html %]"> + <input type="hidden" name="token" value="[% cgi.param("token") FILTER html %]"> + <input type="submit" id="process_comment" value="Submit only my new comment"> + </form> + </li> + [% END %] + <li> + Throw away my changes, and + [%+ "revisit $terms.bug $bug.id" FILTER bug_link(bug) FILTER none %] + </li> +</ul> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/process/results.html.tmpl b/template/en/default/bug/process/results.html.tmpl new file mode 100644 index 0000000..ee218d4 --- /dev/null +++ b/template/en/default/bug/process/results.html.tmpl @@ -0,0 +1,58 @@ +[%# 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: + # id: number; the ID of the bug that was changed/checked. + # + # type: string; the type of change/check that was made: "bug" when a bug + # is changed, "dupe" when a duplication notation is added to a bug, + # and "dep" when a bug is checked for changes to its dependencies. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% UNLESS header_done %] + [% PROCESS bug/process/header.html.tmpl %] +[% END %] + +[% DEFAULT type="bug" %] + +[% Link = BLOCK %][% "$terms.Bug $id" FILTER bug_link(id) %][% END %] +[% link = BLOCK %][% "$terms.bug $id" FILTER bug_link(id) %][% END %] + +[% + title = { + 'bug' => "Changes submitted for $link" , + 'dupe' => "Duplicate notation added to $link" , + 'dep' => "Checking for dependency changes on $link" , + 'votes' => "$Link confirmed by number of votes" , + 'created' => "$Link has been added to the database" , + 'move' => "$Link has been moved to another database" , + } +%] + +<dl> + <dt>[% title.$type %]</dt> + <dd> + [% PROCESS "bug/process/bugmail.html.tmpl" mailing_bugid = id %] + [%# Links to more information about the changed bug. %] + [% Hook.process("links") %] + </dd> +</dl> diff --git a/template/en/default/bug/process/verify-new-product.html.tmpl b/template/en/default/bug/process/verify-new-product.html.tmpl new file mode 100644 index 0000000..1cc186c --- /dev/null +++ b/template/en/default/bug/process/verify-new-product.html.tmpl @@ -0,0 +1,205 @@ +[%# 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> + # Frédéric Buclin <LpSolit@gmail.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # product: object; the new product. + # versions: array; versions for the new product. + # components: array; components for the new product. + # milestones: array; milestones for the new product. + # defaults: hash; keys are names of fields, values are defaults for + # those fields + # + # verify_bug_groups: If groups need to be confirmed in addition to fields. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = 'Verify New Product Details...' %] + +<form action="process_bug.cgi" method="post"> + +[% SET exclude_items = ['version', 'component', 'target_milestone'] %] +[% IF verify_bug_groups %] + [% exclude_items.push('bit-\d+') %] +[% END %] +[% Hook.process('exclude') %] + +[% PROCESS "global/hidden-fields.html.tmpl" + exclude = '^' _ exclude_items.join('|') _ '$' %] + +<input type="hidden" name="confirm_product_change" value="1"> + +[%# Verify the version, component, and target milestone fields. %] +<h3>Verify Version, Component + [%- ", Target Milestone" + IF Param("usetargetmilestone") + && bug.check_can_change_field('target_milestone', 0, 1) %]</h3> + +<p> +[% IF Param("usetargetmilestone") + && bug.check_can_change_field('target_milestone', 0, 1) +%] + You are moving the [% terms.bug %](s) to the product + <b>[% product.name FILTER html %]</b>, + and the version, component, and/or target milestone fields are no longer + correct. Please set the correct version, component, and target milestone now: +[% ELSE %] + You are moving the [% terms.bug %](s) to the product + <b>[% product.name FILTER html %]</b>, + and the version and component fields are no longer correct. + Please set the correct version and component now: +[% END %] +</p> + +<table> + <tr> + <td> + <b>Version:</b><br> + [% IF versions.size == 1 %] + [% SET default_version = versions.0 %] + [% ELSE %] + [% SET default_version = defaults.version %] + [% END %] + [% PROCESS "global/select-menu.html.tmpl" + name="version" + options=versions + default=default_version + size=10 %] + </td> + <td> + <b>Component:</b><br> + [% IF components.size == 1 %] + [% SET default_component = components.0 %] + [% ELSE %] + [% SET default_component = defaults.component %] + [% END %] + [% PROCESS "global/select-menu.html.tmpl" + name="component" + options=components + default=default_component + size=10 %] + </td> + [% IF Param("usetargetmilestone") + && bug.check_can_change_field('target_milestone', 0, 1) + %] + <td> + <b>Target Milestone:</b><br> + [% PROCESS "global/select-menu.html.tmpl" + name="target_milestone" + options=milestones + default=defaults.milestone + size=10 %] + </td> + [% END %] + [% Hook.process('field') %] + </tr> +</table> + +[% IF verify_bug_groups %] + <h3>Verify [% terms.Bug %] Group</h3> + + [% IF old_groups.size %] + <p>These groups are not legal for the '[% product.name FILTER html %]' + product or you are not allowed to restrict [% terms.bugs %] to these groups. + [%+ terms.Bugs %] will no longer be restricted to these groups and may become + public if no other group applies:<br> + [% FOREACH group = old_groups %] + <input type="checkbox" id="bit-[% group.id FILTER html %]" + name="bit-[% group.id FILTER html %]" disabled="disabled" value="1"> + <label for="bit-[% group.id FILTER html %]"> + [% group.name FILTER html %]: [% group.description FILTER html %] + </label> + <br> + [% END %] + </p> + [% END %] + + [% mandatory_groups = [] %] + [% optional_groups = [] %] + + [% FOREACH gid = product.group_controls.keys %] + [% group = product.group_controls.$gid %] + [% NEXT UNLESS group.group.is_active %] + + [% IF group.membercontrol == constants.CONTROLMAPMANDATORY + || (group.othercontrol == constants.CONTROLMAPMANDATORY && !user.in_group(group.group.name)) %] + [% mandatory_groups.push(group) %] + [% ELSIF (group.membercontrol != constants.CONTROLMAPNA && user.in_group(group.group.name)) + || group.othercontrol != constants.CONTROLMAPNA %] + [% optional_groups.push(group) %] + [% END %] + [% END %] + + [% IF optional_groups.size %] + <p>These groups are optional. You can decide to restrict [% terms.bugs %] to + one or more of the following groups:<br> + [% FOREACH group = optional_groups %] + <input type="hidden" name="defined_bit-[% group.group.id FILTER html %]" + value="1"> + <input type="checkbox" id="bit-[% group.group.id FILTER html %]" + name="bit-[% group.group.id FILTER html %]" + [%+ ((group.membercontrol == constants.CONTROLMAPDEFAULT && user.in_group(group.group.name)) + || (group.othercontrol == constants.CONTROLMAPDEFAULT && !user.in_group(group.group.name)) + || cgi.param("bit-$group.group.id") == 1) ? + 'checked="checked"' : '' + %] value="1"> + <label for="bit-[% group.group.id FILTER html %]"> + [% group.group.name FILTER html %]: [% group.group.description FILTER html %] + </label> + <br> + [% END %] + </p> + [% END %] + + [% IF mandatory_groups.size %] + <p>These groups are mandatory and [% terms.bugs %] will be automatically + restricted to these groups:<br> + [% FOREACH group = mandatory_groups %] + <input type="checkbox" id="bit-[% group.group.id FILTER html %]" checked="checked" + name="bit-[% group.group.id FILTER html %]" value="1" disabled="disabled"> + <label for="bit-[% group.group.id FILTER html %]"> + [% group.group.name FILTER html %]: [% group.group.description FILTER html %] + </label> + <br> + [% END %] + </p> + [% END %] +[% END %] + +<input type="submit" id="change_product" value="Commit"> + +</form> +<hr> + +[%# If 'id' is defined, then we are editing a single bug. + # Else we are editing several bugs at once. %] + +[% IF cgi.param('id') AND cgi.param('id').match('^\d+$') %] + [% id = cgi.param('id') %] + Cancel and Return to [% "$terms.bug $id" FILTER bug_link(id) FILTER none %] +[% ELSE %] + Cancel and Return to <a href="buglist.cgi?regetlastlist=1">the last search results</a> +[% END %] + +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/bug/show-header.html.tmpl b/template/en/default/bug/show-header.html.tmpl new file mode 100644 index 0000000..3f81e57 --- /dev/null +++ b/template/en/default/bug/show-header.html.tmpl @@ -0,0 +1,50 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Bradley Baetz <bbaetz@student.usyd.edu.au> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# This template should be called with PROCESS before processing + # "global/header.html.tmpl" in any template that is going to load the + # bug form. It expects only a "bug" object, and can even manage to get + # along without that. Some of these variables are just defaults that will + # be overridden by the calling templates. + #%] + +[% filtered_desc = bug.short_desc FILTER html %] +[% subheader = filtered_desc %] +[% filtered_timestamp = bug.delta_ts FILTER time %] +[% title = "$terms.Bug $bug.bug_id – $filtered_desc" %] +[% header = "$terms.Bug $bug.bug_id" %] +[% header_addl_info = "Last modified: $filtered_timestamp" %] +[% javascript_urls = [ "js/util.js", "js/field.js", "js/yui/calendar.js" ] %] +[% style_urls = [ "skins/standard/yui/calendar.css", + "skins/standard/show_bug.css" ] %] +[% doc_section = "bug_page.html" %] + +[% bodyclasses = ['bz_bug', + "bz_status_$bug.bug_status", + "bz_product_$bug.product", + "bz_component_$bug.component", + "bz_bug_$bug.bug_id", + ] %] +[% FOREACH group = bug.groups_in %] + [% bodyclasses.push("bz_group_$group.name") %] +[% END %] 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 0000000..177bea1 --- /dev/null +++ b/template/en/default/bug/show-multiple.html.tmpl @@ -0,0 +1,366 @@ +[%# 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> + # Toms Baugis <toms@myrealbox.com> + # Olav Vitters <olav@bkor.dhs.org> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Elliotte Martin <emartin@everythingsolved.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "Full Text $terms.Bug Listing" + h1 = "" + style_urls = ["skins/standard/show_multiple.css", + "skins/standard/buglist.css"] + doc_section = "bug_page.html" +%] +[% PROCESS bug/time.html.tmpl %] +[% IF bugs.first %] + [% ids = [] %] + [% FOREACH bug = bugs %] + [% PROCESS bug_display %] + [% ids.push(bug.bug_id) UNLESS bug.error %] + [% END %] + [% IF ids.size > 1 %] + <div class="bz_query_buttons"> + <form method="post" action="buglist.cgi"> + <input type="hidden" name="bug_id" value="[% ids.join(",") FILTER html %]"> + <input type="submit" id="short_format" value="Short Format"> + </form> + </div> + [% END %] +[% ELSE %] + <p> + You'd have more luck if you gave me some [% terms.bug %] numbers. + </p> +[% END %] + + +[% PROCESS global/footer.html.tmpl %] + + +[%###########################################################################%] +[%# Block for an individual bug #%] +[%###########################################################################%] + +[% BLOCK bug_display %] + <h1> + [% terms.Bug %] + <a href="show_bug.cgi?id=[% bug.bug_id FILTER html %]">[% bug.bug_id FILTER html %]</a> + [% IF Param("usebugaliases") AND bug.alias AND NOT bug.error %] + (<a href="show_bug.cgi?id=[% bug.alias FILTER url_quote %]"> + [% bug.alias FILTER html %]</a>) + [% END %] + </h1> + + <table class="bugfields"> + [% IF bug.error %] + <tr> + <td class="error"> + [% IF bug.error == "InvalidBugId" %] + '[%+ bug.bug_id FILTER html %]' is not a valid [% terms.bug %] number + [%- IF Param("usebugaliases") %] nor a known [% terms.bug %] alias[% END %]. + [% ELSIF bug.error == "NotPermitted" %] + You are not allowed to view this [% terms.bug %]. + [% ELSIF bug.error == "NotFound" %] + This [% terms.bug %] cannot be found. + [% ELSE %] + [%+ bug.error FILTER html %] + [% END %] + </td> + </tr> + [% ELSE %] + [%# The rightcell block (also called by the row block) automatically shows + # the fields from rightcells %] + [% rightcells = ['reporter', 'assigned_to'] %] + [% IF Param('useqacontact') %] + [% rightcells.push('qa_contact') %] + [% END %] + [% rightcells.push('') %] + [% IF bug.cc %] + [% rightcells.push('cc') %] + [% END %] + [% IF bug.keywords %] + [% rightcells.push('keywords') %] + [% END %] + + [%# Determine if the bug has a flag %] + [% FOREACH type = bug.flag_types %] + [% IF type.flags.size %] + [% rightcells.push('flags') %] + [% LAST %] + [% END %] + [% END %] + + [% PROCESS row cell = "short_desc" fullrow = 1 %] + + <tr> + <th>[% field_descs.product FILTER html %]:</th> + <td> + [% IF Param("useclassification") && bug.classification_id != 1 %] + [[% bug.classification FILTER html %]] + [% END %] + [% bug.product FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + [% PROCESS row cell = "component" %] + + <tr> + <th>[% field_descs.bug_status FILTER html %]:</th> + <td> + [% display_value("bug_status", bug.bug_status) FILTER html %] + [%+ display_value("resolution", bug.resolution) FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + <tr> + <th>[% field_descs.bug_severity FILTER html %]:</th> + <td class="bz_[% bug.bug_severity FILTER css_class_quote -%]"> + [% display_value("bug_severity", bug.bug_severity) FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + <tr> + <th>[% field_descs.priority FILTER html %]:</th> + <td class="bz_[% bug.priority FILTER css_class_quote -%]"> + [% bug.priority FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + [% PROCESS row cell = "version" %] + [% PROCESS row cell = "target_milestone" IF Param('usetargetmilestone') %] + [% PROCESS row cell = "rep_platform" %] + [% PROCESS row cell = "op_sys" %] + + [% IF bug.bug_file_loc %] + <tr> + <th>[% field_descs.bug_file_loc FILTER html %]:</th> + <td colspan="3"> + [% IF bug.bug_file_loc.match("^(javascript|data)") %] + [% bug.bug_file_loc FILTER html %] + [% ELSE %] + <a href="[% bug.bug_file_loc FILTER html %]"> + [% bug.bug_file_loc FILTER html %]</a> + [% END %] + </td> + </tr> + [% END %] + + [% IF Param("usestatuswhiteboard") %] + [% PROCESS row cell = "status_whiteboard" fullrow = 1 %] + [% END %] + + [% USE Bugzilla %] + [% field_counter = 0 %] + [% FOREACH field = Bugzilla.active_custom_fields %] + [% field_counter = field_counter + 1 %] + [%# Odd-numbered fields get an opening <tr> %] + [% '<tr>' IF field_counter % 2 %] + [% PROCESS bug/field.html.tmpl value=bug.${field.name} editable=0 %] + [%# Even-numbered fields get a closing <tr> %] + [% '</tr>' IF !(field_counter % 2) %] + [% END %] + [%# And we have to finish the row if we ended on an odd number. %] + [% '<th></th><td></td></tr>' IF field_counter % 2 %] + + [% IF (bug.dependson.size || bug.blocked.size) %] + [% PROCESS dependencies name = "dependson" %] + [% PROCESS dependencies name = "blocked" %] + [% END %] + + [% IF user.is_timetracker %] + <tr> + <th>Time tracking:</th> + <td colspan="3"> + <table class="timetracking"> + <tr> + <th>[% field_descs.estimated_time FILTER html %]</th> + <th>[% field_descs.actual_time FILTER html %]</th> + <th>[% field_descs.work_time FILTER html %]</th> + <th>[% field_descs.remaining_time FILTER html %]</th> + <th>[% field_descs.percentage_complete FILTER html %]</th> + <th>Gain</th> + </tr> + <tr> + <td> + [% PROCESS formattimeunit time_unit = bug.estimated_time %] + </td> + <td> + [% PROCESS formattimeunit + time_unit=(bug.remaining_time + bug.actual_time) %] + </td> + <td>[% PROCESS formattimeunit time_unit = bug.actual_time %]</td> + <td> + [% PROCESS formattimeunit time_unit = bug.remaining_time %] + </td> + <td> + [% PROCESS calculatepercentage act = bug.actual_time + rem = bug.remaining_time %] + </td> + <td> + [% PROCESS formattimeunit + time_unit=bug.estimated_time - + (bug.actual_time + bug.remaining_time) %] + </td> + </tr> + </table> + </td> + </tr> + [% PROCESS row cell="deadline" %] + [% END %] + + [% IF bug.attachments.size %] + <tr> + <th>Attachments:</th> + <td colspan="3"> + [% IF bug.show_attachment_flags %] + <table> + <tr> + <th>Description</th> + <th>Flags</th> + </tr> + [% FOREACH attachment = bug.attachments %] + <tr> + <td> + <a href="attachment.cgi?id=[% attachment.id %]"> + [% attachment.description FILTER html %] + </a>[% "<br>" IF not loop.last() %] + </td> + <td> + [% IF attachment.flags.size == 0 %] + <i>none</i> + [% ELSE %] + [% FOREACH flag = attachment.flags %] + [% flag.setter.nick FILTER html %]: + [%+ flag.type.name FILTER html FILTER no_break %][% flag.status %] + [% IF flag.status == "?" && flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %][% ", " IF not loop.last() %] + [% END %] + [% END %] + </td> + </tr> + [% END %] + </table> + [% ELSE %] + [% FOREACH attachment = bug.attachments %] + <a href="attachment.cgi?id=[% attachment.id %]"> + [% attachment.description FILTER html %] + </a>[% "<br>" IF not loop.last() %] + [% END %] + [% END %] + </td> + </tr> + [% END %] + [% END %] + + [% Hook.process("last_row", "bug/show-multiple.html.tmpl") %] + + </table> + + + <br> + + [% PROCESS bug/comments.html.tmpl + comments = bug.comments %] + +[% END %] + + +[%###########################################################################%] +[%# Block for standard table rows #%] +[%###########################################################################%] + +[% BLOCK row %] + <tr> + <th>[% field_descs.${cell} FILTER html %]:</th> + <td[% " colspan=3" IF fullrow %]>[% display_value(cell, bug.${cell}) FILTER html %]</td> + [% PROCESS rightcell IF !fullrow %] + </tr> + [% fullrow = 0 %] +[% END %] + + +[%############################################################################%] +[%# Block for dependencies #%] +[%############################################################################%] + +[% BLOCK dependencies %] + <tr> + <th>[% terms.Bug %] [%+ field_descs.${name} FILTER html %]:</th> + <td> + [% FOREACH depbug = bug.${name} %] + [% depbug FILTER bug_link(depbug) FILTER none %][% ", " IF not loop.last() %] + [% END %] + </td> + + [% PROCESS rightcell %] + </tr> +[% END %] + +[%############################################################################%] +[%# Block for cells shown right of the table #%] +[%############################################################################%] + +[% BLOCK rightcell %] + [% IF rightcells %] + [% name = rightcells.shift %] + [% IF name == "cc" %] + <th class="rightcell">[% field_descs.cc FILTER html %]:</th> + <td> + [% FOREACH c = bug.cc %] + [% c FILTER email FILTER html %][% ", " IF not loop.last() %] + [% END %] + [% ELSIF name == "reporter" || name == "assigned_to" + || name == "qa_contact" %] + <th class="rightcell">[% field_descs.${name} FILTER html %]:</th> + <td>[% bug.${name}.identity FILTER email FILTER html %]</td> + [% ELSIF name == "flags" %] + <th class="rightcell">Flags:</th> + <td> + [% FOREACH type = bug.flag_types %] + [% FOREACH flag = type.flags %] + [% flag.setter.nick FILTER html %]: + [%+ flag.type.name FILTER html FILTER no_break %][% flag.status %] + [%+ IF flag.status == "?" && flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %]<br> + [% END %] + [% END %] + </td> + [% ELSIF name != "" %] + <th class="rightcell">[% field_descs.${name} FILTER html %]:</th> + <td>[% display_value(name, bug.${name}) FILTER html %]</td> + [% ELSE %] + <td> </td> + <td> </td> + [% END %] + [% END %] +[% END %] diff --git a/template/en/default/bug/show.html.tmpl b/template/en/default/bug/show.html.tmpl new file mode 100644 index 0000000..8d8e63a --- /dev/null +++ b/template/en/default/bug/show.html.tmpl @@ -0,0 +1,53 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Bradley Baetz <bbaetz@student.usyd.edu.au> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[%# This script/template only handles one bug #%] +[% bug = bugs.0 %] + +[% IF !header_done %] + [% PROCESS "bug/show-header.html.tmpl" %] + [% PROCESS global/header.html.tmpl %] +[% END %] + +[% IF nextbug %] + <hr> + <p> + The next [% terms.bug %] in your list is [% terms.bug %] + <a href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a>: + </p> + <hr> +[% END %] + +[% PROCESS bug/navigate.html.tmpl %] + +[% PROCESS bug/edit.html.tmpl %] + +<hr> + +[% PROCESS bug/navigate.html.tmpl bottom_navigator => 1%] + +<br> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/show.xml.tmpl b/template/en/default/bug/show.xml.tmpl new file mode 100644 index 0000000..2349602 --- /dev/null +++ b/template/en/default/bug/show.xml.tmpl @@ -0,0 +1,157 @@ +[%# 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> + # Colin Ogilvie <mozilla@colinogilvie.co.uk> + # + #%] +[% PROCESS bug/time.html.tmpl %] +<?xml version="1.0" [% IF Param('utf8') %]encoding="UTF-8" [% END %]standalone="yes" ?> +<!DOCTYPE bugzilla SYSTEM "[% urlbase FILTER html %]bugzilla.dtd"> + +<bugzilla version="[% constants.BUGZILLA_VERSION %]" + urlbase="[% urlbase FILTER xml %]" + [%# Note that the maintainer's email is not filtered, + # intentionally. Even logged-out users should be able + # to see that, since it will be in error messages anyway. + %] + maintainer="[% Param('maintainer') FILTER xml %]" +[% IF user.id %] + exporter="[% user.email FILTER email FILTER xml %]" +[% END %] +> + +[% FOREACH bug = bugs %] + [% IF bug.error %] + <bug error="[% bug.error FILTER xml %]"> + <bug_id>[% bug.bug_id FILTER xml %]</bug_id> + </bug> + [% ELSE %] + <bug> + [% FOREACH field = bug.fields %] + [% IF displayfields.$field %] + [%+ PROCESS bug_field %] + [% END %] + [% END %] + + [%# This is here so automated clients can still use process_bug.cgi %] + [% IF displayfields.token && user.id %] + <token>[% issue_hash_token([bug.id, bug.delta_ts]) FILTER xml %]</token> + [% END %] + + [%# Now handle 'special' fields #%] + [% IF displayfields.group %] + [% FOREACH g = bug.groups %] + [% NEXT UNLESS g.ison %] + <group id="[% g.bit FILTER xml %]">[% g.name FILTER xml %]</group> + [% END %] + [% END %] + + [%# Bug Flags %] + [% PROCESS section_flags obj => bug %] + + [% IF displayfields.long_desc %] + [% FOREACH c = bug.comments %] + [% NEXT IF c.is_private && !user.is_insider %] + <long_desc isprivate="[% c.is_private FILTER xml %]"> + <commentid>[% c.id FILTER xml %]</commentid> + [% IF c.is_about_attachment %] + <attachid>[% c.extra_data FILTER xml %]</attachid> + [% END %] + <who name="[% c.author.name FILTER xml %]">[% c.author.email FILTER email FILTER xml %]</who> + <bug_when>[% c.creation_ts FILTER time("%Y-%m-%d %T %z") FILTER xml %]</bug_when> + [% IF user.is_timetracker && (c.work_time - 0 != 0) %] + <work_time>[% PROCESS formattimeunit time_unit = c.work_time FILTER xml %]</work_time> + [% END %] + <thetext>[% c.body_full FILTER xml %]</thetext> + </long_desc> + [% END %] + [% END %] + + [% IF displayfields.attachment %] + [% FOREACH a = bug.attachments %] + [% NEXT IF a.isprivate && !user.is_insider %] + <attachment + isobsolete="[% a.isobsolete FILTER xml %]" + ispatch="[% a.ispatch FILTER xml %]" + isprivate="[% a.isprivate FILTER xml %]" + isurl="[% a.isurl FILTER xml %]" + > + <attachid>[% a.id %]</attachid> + <date>[% a.attached FILTER time("%Y-%m-%d %T %z") FILTER xml %]</date> + <delta_ts>[% a.modification_time FILTER time("%Y-%m-%d %T %z") FILTER xml %]</delta_ts> + <desc>[% a.description FILTER xml %]</desc> + <filename>[% a.filename FILTER xml %]</filename> + <type>[% a.contenttype FILTER xml %]</type> + <size>[% a.datasize FILTER xml %]</size> + <attacher>[% a.attacher.email FILTER email FILTER xml %]</attacher> + [%# This is here so automated clients can still use attachment.cgi %] + [% IF displayfields.token && user.id %] + <token>[% issue_hash_token([a.id, a.modification_time]) FILTER xml %]</token> + [% END %] + [% IF displayfields.attachmentdata %] + <data encoding="base64">[% a.data FILTER base64 %]</data> + [% END %] + + [% PROCESS section_flags obj => a %] + </attachment> + [% END %] + [% END %] + + [% Hook.process("bug_end") %] + + </bug> + [% END %] +[% END %] + +</bugzilla> + +[% BLOCK bug_field %] + [% FOREACH val = bug.$field %] + [%# We need to handle some fields differently. This should become + # nicer once we have custfields, and a type attribute for the fields + #%] + [% name = '' %] + [% IF field == 'reporter' OR field == 'assigned_to' OR + field == 'qa_contact' %] + [% name = val.name %] + [% val = val.email FILTER email %] + [% ELSIF field == 'cc' %] + [% val = val FILTER email %] + [% ELSIF field == 'creation_ts' OR field == 'delta_ts' %] + [% val = val FILTER time("%Y-%m-%d %T %z") %] + [% END %] + <[% field %][% IF name != '' %] name="[% name FILTER xml %]"[% END -%]> + [%- val FILTER xml %]</[% field %]> + [% END %] +[% END %] + +[% BLOCK section_flags %] + [% RETURN UNLESS displayfields.flag %] + + [% FOREACH flag = obj.flags %] + <flag name="[% flag.type.name FILTER xml %]" + id="[% flag.id FILTER xml %]" + type_id="[% flag.type_id FILTER xml %]" + status="[% flag.status FILTER xml %]" + setter="[% flag.setter.email FILTER email FILTER xml %]" + [% IF flag.status == "?" && flag.requestee %] + requestee="[% flag.requestee.email FILTER email FILTER xml %]" + [% END %] + /> + [% END %] +[% END %] diff --git a/template/en/default/bug/summarize-time.html.tmpl b/template/en/default/bug/summarize-time.html.tmpl new file mode 100644 index 0000000..eb5ba7a --- /dev/null +++ b/template/en/default/bug/summarize-time.html.tmpl @@ -0,0 +1,335 @@ +[%# 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. + # + # Contributor(s): Christian Reis <kiko@async.com.br> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = "Time Summary " %] +[% IF do_depends %] + [% title = title _ "for " %] + [% header = "$terms.Bug $ids.0" FILTER bug_link(ids.0) FILTER none %] + [% header = title _ header _ " (and $terms.bugs blocking it)" %] + [% title = title _ "$terms.Bug $ids.0" %] +[% ELSE %] + [% title = title _ "($ids.size $terms.bugs selected)" %] + [% header = title %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + header = header + style_urls = ["skins/standard/summarize-time.css"] + doc_section = "timetracking.html" + %] + +[% INCLUDE query_form %] + +[% IF do_report %] + + [% global.grand_total = 0 global.estimated = 0 global.remaining = 0 %] + + [% FOREACH workdata = part_list %] + [%# parts contains date ranges (from, to). %] + [% part = parts.shift %] + <div align="right"> + <h4 style="padding-right: 2em; margin: 0;"> + [% IF part.0 or part.1 %] + [% part.0 OR "Up" FILTER html %] to [% part.1 OR "now" FILTER html %] + [% ELSE %] + Full summary (no period specified) + [% END %] + </h4> + </div> + [% IF group_by == "number" %] + [% INCLUDE number_report %] + [% ELSE %] + [% INCLUDE owner_report %] + [% END %] + [% END %] + + [% IF detailed %] + <h4 style="margin: 0"> + Total of [% global.remaining FILTER format("%.2f") %]h remains from + original estimate of [% global.estimated FILTER format("%.2f") %]h + [% IF global.deadline %] + (deadline [% global.deadline FILTER html %]) + [% END %] + </h4> + [% END %] + + [% IF monthly %] + <h4 style="margin: 0">Total of [% global.grand_total FILTER format("%.2f") %] hours worked</h4> + <hr noshade size="1"> + [% END %] + + [% IF null.size > 0 %] + [% INCLUDE inactive_report %] + <h4 style="margin: 0">Total of [% null.size %] inactive [% terms.bugs %]</h4> + [% END %] + +[% END %] + +[% PROCESS global/footer.html.tmpl %] + +[%# + # + # Developer reporting + # + #%] + +[% BLOCK owner_report %] + [% global.total = 0 global.bug_count = {} global.owner_count = {} %] + <table cellpadding="4" cellspacing="0" width="90%" class="realitems owner"> + [% FOREACH owner = workdata.keys.sort %] + [% INCLUDE do_one_owner owner=owner ownerdata=workdata.$owner + detailed=detailed %] + [% END %] + + [% additional = "$global.owner_count.size developers @ + $global.bug_count.size $terms.bugs" %] + [% INCLUDE section_total colspan=3 additional=additional %] + </table> +[% END %] + +[% BLOCK do_one_owner %] + [% global.owner_count.$owner = 1 %] + <tr><td colspan="5" class="owner_header"> + <b>[% owner FILTER html %]</b> + </td></tr> + [% col = 0 subtotal = 0%] + [% FOREACH bugdata=ownerdata.nsort("bug_id") %] + [% bug_id = bugdata.bug_id %] + [% INCLUDE calc_bug_total id=bug_id %] + [% global.bug_count.$bug_id = 1 %] + [% IF detailed %] + [% INCLUDE bug_header cid=col id=bug_id bugdata=bugdata extra=1 %] + [% col = col + 1 %] + [% END %] + [% subtotal = subtotal + bugdata.total_time %] + [% END %] + <tr> + <td colspan="4" align="right"><b>Total</b>:</td> + <td align="right" class="subtotal" width="100"> + <b>[% subtotal FILTER format("%.2f") %]</b></td> + [% global.total = global.total + subtotal %] + </tr> +[% END %] + +[%# + # + # Bug Number reporting + # + #%] + +[% BLOCK number_report %] + [% global.total = 0 global.owner_count = {} global.bug_count = {} %] + + <table cellpadding="4" cellspacing="0" width="90%" class="realitems number"> + [% FOREACH bug = workdata.keys.nsort %] + [% INCLUDE do_one_bug id=bug bugdata=workdata.$bug + detailed=detailed %] + [% END %] + + [% additional = "$global.bug_count.size $terms.bugs & + $global.owner_count.size developers" %] + [% INCLUDE section_total additional=additional colspan=2 %] + </table> +[% END %] + +[% BLOCK do_one_bug %] + [% subtotal = 0.00 cid = 0 %] + [% INCLUDE calc_bug_total id=id %] + [% global.bug_count.$id = 1 %] + [% INCLUDE bug_header id=id %] + + [% FOREACH owner = bugdata.sort("login_name") %] + [% work_time = owner.total_time %] + [% subtotal = subtotal + work_time %] + [% login_name = owner.login_name %] + [% global.owner_count.$login_name = 1 %] + [% IF detailed %] + [% cid = cid + 1 %] + <tr class="owner_header[% 2 FILTER none IF cid % 2 %]"> + <td> </td> + <td colspan="2"><b>[% login_name FILTER html %]</b></td> + <td align="right"> + [% work_time FILTER format("%.2f") %]</td> + </tr> + [% END %] + [% END %] + <tr> + <td colspan="2"> </td> + <td align="right"> + <b>Total</b>: + </td> + <td align="right" class="subtotal" width="100"> + <b>[% subtotal FILTER format("%.2f") %]</b> + </td> + </tr> + [% global.total = global.total + subtotal %] +[% END %] + +[% BLOCK bug_header %] + <tr class="bug_header[% '2' IF cid % 2 %]"> + <td width="80" valign="top"> + <b>[% "$terms.Bug $id" FILTER bug_link(id) FILTER none %]</b> + </td> + <td width="100"><b>[% display_value("bug_status", bugs.$id.bug_status) FILTER html %]</b></td> + <td colspan="2">[% bugs.$id.short_desc FILTER html %]</td> + [% IF extra %] + <td align="right" valign="top">[% bugdata.total_time FILTER html %]</td> + [% END %] + </tr> + [% IF detailed %] + <tr class="bug_header[% '2' IF cid % 2 %]"> + <td> </td> + <td colspan="3"> + <table width="100%" cellpadding="0" cellspacing="0"> + <tr> + <td width="33%"> + Estimated: [% bugs.$id.estimated_time FILTER format("%.2f") %]h + </td> + <td width="33%"> + Remaining: [% bugs.$id.remaining_time FILTER format("%.2f") %]h + </td> + <td width="33%"> + Deadline: [% bugs.$id.deadline || "<b>Not set</b>" %] + </td> + </tr> + </table> + </td> + [% IF extra %] + <td> </td> + [% END %] + </tr> + [% END %] +[% END %] + +[% BLOCK calc_bug_total %] + [% IF !global.bug_count.$id %] + [% global.estimated = global.estimated + bugs.$id.estimated_time %] + [% global.remaining = global.remaining + bugs.$id.remaining_time %] + [% IF !global.deadline || bugs.$id.deadline && + global.deadline.replace("-", "") < bugs.$id.deadline.replace("-", "") %] + [% SET global.deadline = bugs.$id.deadline %] + [% END %] + [% END %] +[% END %] + +[% BLOCK inactive_report %] + <h3>Inactive [% terms.bugs %]</h3> + <table cellpadding="4" cellspacing="0" width="90%" class="zeroitems"> + [% cid = 0 %] + [% FOREACH bug_id = null.nsort %] + [% INCLUDE bug_header id=bug_id cid=cid %] + [% cid = cid + 1 %] + [% END %] + </table> +[% END %] + + +[% BLOCK section_total %] + [% IF global.total > 0 %] + <tr class="section_total"> + <td><b>Totals</b></td> + <td colspan="[% colspan FILTER html %]" align="right"><b>[% additional FILTER html %]</b></td> + <td align="right"><b>[% global.total FILTER format("%.2f") %]</b></td> + </tr> + [% ELSE %] + <tr> + <td>No time allocated during the specified period.</td> + </tr> + [% END %] + [% global.grand_total = global.grand_total + global.total %] +[% END %] + +[%# + # + # The query form + # + #%] + +[% BLOCK query_form %] +<hr noshade size=1> +<form method="post" name="summary" style="display: inline" action="summarize_time.cgi"> +<input type="hidden" name="do_depends" value="[% do_depends FILTER html %]"> +<input type="hidden" name="id" value="[% ids.join(",") FILTER html %]"> +<input type="hidden" name="do_report" value="1"> + +[% IF warn_swap_dates %] + <h4 style="border: 1px solid red; margin: 1em; padding: 0.5em">The + end date specified occurs before the start date, which doesn't + make sense; the dates below have therefore been swapped.</h4> +[% END %] + +<table> +<tr> +<td align="right"> + <b><label accesskey="s" + for="start_date">Period <u>s</u>tarting</label></b>: +</td><td colspan="3"> + <input type="text" id="start_date" name="start_date" size="11" + align="right" value="[% start_date FILTER html %]" maxlength="10"> + + <b>and <label accesskey="e" for="end_date"><u>e</u>nding</label></b>: + <input type="text" name="end_date" size="11" id="end_date" + align="right" value ="[% end_date FILTER html %]" maxlength="10"> +</td><td align="right"> + <input type="submit" id="summarize" value="Summarize"> +</td></tr> +<tr> +<td> </td><td colspan="4"> + <small>(Dates are optional, and in YYYY-MM-DD format)</small> +</td> +<tr><td align="right"> + <b>Group by</b>: +</td><td colspan="2"> + <input type="radio" name="group_by" id="number" value="number" [%+ + 'checked="checked"' IF group_by == "number" + %]><label + for="number" accesskey="n">[% terms.Bug %] <u>N</u>umber</label> + <input type="radio" name="group_by" id="owner" value="owner" [%+ + 'checked="checked"' IF group_by == "owner" + %]><label + for="owner" accesskey="d"><u>D</u>eveloper</label> +</td><td colspan="2"> + <label for="ctype"><b>Format</b></label>: <select name="ctype" id="ctype"> + <option value="html">HTML Report</option> + </select> +</td></tr><tr> +<td> </td><td colspan="4"> + <input type="checkbox" name="monthly" [% 'checked="checked"' IF + monthly %] id="monthly"> + <label for="monthly" accesskey="m">Split by <u>m</u>onth</label> + [%# XXX: allow splitting by other intervals %] + + <input type="checkbox" name="detailed" [% 'checked="checked"' IF + detailed %] id="detailed"> + <label for="detailed" accesskey="t">De<u>t</u>ailed summaries</label> + + <input type="checkbox" name="inactive" [% 'checked="checked"' IF + inactive %] id="inactive"> + <label for="inactive" accesskey="i">Also show <u>i</u>nactive + [%+ terms.bugs %]</label> +</td> +</tr></table> + +</form> +<script type="text/javascript"> +<!-- + document.forms['summary'].start_date.focus() +//--></script> +<hr noshade size=1> +[% END %] diff --git a/template/en/default/bug/time.html.tmpl b/template/en/default/bug/time.html.tmpl new file mode 100644 index 0000000..e070e7d --- /dev/null +++ b/template/en/default/bug/time.html.tmpl @@ -0,0 +1,47 @@ +[%# 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): Jeff Hedlund <jeff.hedlund@matrixsi.com> + # + #%] + +[% BLOCK formattimeunit %] + [%# INTERFACE: + # time_unit: the number converting, converts to 2 decimal places + # unless the last character is a 0, then it truncates to + # 1 decimal place + #%] + [% time_unit = time_unit FILTER format('%.2f') %] + [% IF time_unit.match('0\Z') %] + [% time_unit FILTER format('%.1f') %] + [% ELSE %] + [% time_unit FILTER format('%.2f') %] + [% END %] +[% END %] + +[% BLOCK calculatepercentage %] + [%# INTERFACE: + # act: actual time + # rem: remaining time + # %] + [% IF (act + rem) > 0 %] + [% (act / (act + rem)) * 100 + FILTER format("%d") %] + [% ELSE %] + 0 + [% END %] +[% 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 0000000..41b7512 --- /dev/null +++ b/template/en/default/bug/votes/delete-all.html.tmpl @@ -0,0 +1,51 @@ +[%# 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: + # This template has no interface. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Remove your votes?" + %] + +<p> + You are about to remove all of your [% terms.bug %] votes. Are you sure you wish to + remove your vote from every [% terms.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" id="vote" value="Submit"> + </p> +</form> + +[% PROCESS global/footer.html.tmpl %] 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 0000000..a599dc0 --- /dev/null +++ b/template/en/default/bug/votes/list-for-bug.html.tmpl @@ -0,0 +1,60 @@ +[%# 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. ID of the bug we are listing the votes for. + # users: list of hashes. May be empty. Each hash has two members: + # login_name: string. The login name of the user whose vote is attached + # vote_count: integer. The number of times that user has votes for this bug. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Show Votes" + subheader = "$terms.Bug <a href=\"show_bug.cgi?id=$bug_id\">$bug_id</a>" + %] + +[% total = 0 %] +<table cellspacing="4"> + <tr> + <th>Who</th> + <th>Number of votes</th> + </tr> + + [% FOREACH voter = users %] + [% total = total + voter.vote_count %] + <tr> + <td> + <a href="votes.cgi?action=show_user&user_id= + [%- voter.id FILTER url_quote %]"> + [% voter.login_name FILTER email FILTER html %] + </a> + </td> + <td align="right"> + [% voter.vote_count %] + </td> + </tr> + [% END %] +</table> + +<p>Total votes: [% total %]</p> + +[% PROCESS global/footer.html.tmpl %] 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 0000000..2f97616 --- /dev/null +++ b/template/en/default/bug/votes/list-for-user.html.tmpl @@ -0,0 +1,185 @@ +[%# 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: + # voting_user: hash containing a 'login' field + # + # products: list of hashes containing details of products relating to + # voting: + # name: name of product + # bugs: list of bugs the user has voted for + # bug_ids: list of bug ids the user has voted for + # onevoteonly: one or more votes allowed per bug? + # total: users current vote count for the product + # maxvotes: max votes allowed for a user in this product + # maxperbug: max votes per bug allowed for a user in this product + # + # bug_id: number; if the user is voting for a bug, this is the bug id + # + # canedit: boolean; Should the votes be presented in a form, or readonly? + # + # all_bug_ids: List of all bug ids the user has voted for, across all products + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% IF !header_done %] + [% subheader = voting_user.login FILTER html %] + [% IF canedit %] + [% title = "Change Votes" %] + [% IF bug_id %] + [%# We .select and .focus the input so it works for textbox and + checkbox %] + [% onload = "document.forms['voting_form'].bug_" _ bug_id _ + ".select();document.forms['voting_form'].bug_" _ bug_id _ + ".focus()" %] + [% END %] + [% ELSE %] + [% title = "Show Votes" %] + [% END %] + [% PROCESS global/header.html.tmpl + style_urls = [ "skins/standard/voting.css" ] + %] +[% ELSE %] + <hr> +[% END %] + +[% IF votes_recorded %] + <p> + <font color="red"> + The changes to your votes have been saved. + </font> + </p> +[% ELSE %] + <br> +[% END %] + +[% IF products.size %] + <form name="voting_form" method="post" action="votes.cgi"> + <input type="hidden" name="action" value="vote"> + <table cellspacing="4"> + <tr> + <td></td> + <th>Votes</th> + <th>[% terms.Bug %] #</th> + <th>Summary</th> + </tr> + + [% onevoteproduct = 0 %] + [% multivoteproduct = 0 %] + [% FOREACH product = products %] + [% IF product.onevoteonly %] + [% onevoteproduct = 1 %] + [% ELSE %] + [% multivoteproduct = 1 %] + [% END %] + <tr> + <th>[% product.name FILTER html %]</th> + <td colspan="2" ><a href="buglist.cgi?bug_id= + [%- product.bug_ids.join(",") FILTER url_quote %]">([% terms.bug %] list)</a> + </td> + <td> + [% IF product.maxperbug < product.maxvotes AND + product.maxperbug > 1 %] + <font size="-1"> + (Note: only [% product.maxperbug %] vote + [% "s" IF product.maxperbug != 1 %] allowed per [% terms.bug %] in + this product.) + </font> + [% END %] + </td> + </tr> + + [% FOREACH bug = product.bugs %] + <tr [% IF bug.id == bug_id && canedit %] + class="bz_bug_being_voted_on" [% END %]> + <td>[% IF bug.id == bug_id && canedit %]Enter New Vote here → + [%- END %]</td> + <td align="right"><a name="vote_[% bug.id %]"> + [% IF canedit %] + [% IF product.onevoteonly %] + <input type="checkbox" name="[% bug.id %]" value="1" + [% " checked" IF bug.count %] id="bug_[% bug.id %]"> + [% ELSE %] + <input name="[% bug.id %]" value="[% bug.count %]" + size="2" id="bug_[% bug.id %]"> + [% END %] + [% ELSE %] + [% bug.count %] + [% END %] + </a></td> + <td align="center"> + [% bug.id FILTER bug_link(bug) FILTER none %] + </td> + <td> + [% bug.summary FILTER html %] + (<a href="votes.cgi?action=show_bug&bug_id=[% bug.id %]">Show Votes</a>) + </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 canedit %] + <input type="submit" value="Change My Votes" id="change"> or + <a href="buglist.cgi?bug_id=[% all_bug_ids.join(",") FILTER url_quote %]">view all + as [% terms.bug %] list</a> + <br> + <br> + To change your votes, + [% IF multivoteproduct %] + type in new numbers (using zero to mean no votes) + [% " or " IF onevoteproduct %] + [% END %] + [% IF onevoteproduct %] + change the checkbox + [% END %] + and then click <b>Change My Votes</b>. + [% ELSE %] + <a href="buglist.cgi?bug_id=[% all_bug_ids.join(",") FILTER url_quote %]">View all + as [% terms.bug %] list</a> + [% END %] + </form> +[% ELSE %] + <p> + [% IF canedit %] + You are + [% ELSE %] + This user is + [% END %] + currently not voting on any [% terms.bugs %]. + </p> +[% END %] + +<p> + <a href="page.cgi?id=voting.html">Help with voting</a>. +</p> + +[% PROCESS global/footer.html.tmpl %] |