[%# 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 uri %]"> [% 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 is_safe_url(bug.bug_file_loc) %] <a href="[% bug.bug_file_loc FILTER html %]" rel="noreferrer"> [% bug.bug_file_loc FILTER html %]</a> [% ELSE %] [% bug.bug_file_loc FILTER html %] [% END %] </td> </tr> [% END %] [% IF bug.see_also.size %] <tr> <th>[% field_descs.see_also FILTER html %]:</th> <td colspan="3"> [% FOREACH see_also = bug.see_also %] <a href="[% see_also.name FILTER html %]">[% see_also.name FILTER html %]</a> [% "<br>" IF not loop.last() %] [% 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(product=>bug.product_obj,component=>bug.component_obj,bug_id=>bug.id) %] [% 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) %] [% IF extra_field_item %] [% field_counter = field_counter + 1 %] [% '<tr>' IF field_counter % 2 %] <th>[% extra_field_item.header FILTER none %]</th> <td>[% extra_field_item.data FILTER none %]</td> [% '</tr>' IF !(field_counter % 2) %] [% END %] [% 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 %]