| [%# This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| # |
| # This Source Code Form is "Incompatible With Secondary Licenses", as |
| # defined by the Mozilla Public License, v. 2.0. |
| #%] |
| |
| [% PROCESS global/header.html.tmpl |
| title = "Full Text $terms.Bug Listing" |
| h1 = "" |
| style_urls = ['skins/standard/buglist.css'] |
| doc_section = "using/understanding.html" |
| %] |
| |
| [% USE Bugzilla %] |
| |
| [% 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 bug.alias.size AND NOT bug.error %] ( |
| [%- FOREACH alias IN bug.alias %]<a href="show_bug.cgi?id=[% alias FILTER uri %]"> |
| [% alias FILTER html %]</a>[% UNLESS loop.last %], [% END %] |
| [%- END %]) |
| [% END %] |
| </h1> |
| |
| <table class="bugfields"> |
| [% IF bug.error %] |
| <tr> |
| <td class="warning"> |
| [% IF bug.error == "InvalidBugId" %] |
| '[%+ bug.bug_id FILTER html %]' is not a valid [% terms.bug %] number |
| nor a known [% terms.bug %] alias. |
| [% 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.size %] |
| [% 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 %] |
| |
| [% 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) %] |
| [% 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> |
| [% END %] |
| [% IF Param("timetrackinggroup") && bug.deadline %] |
| [% 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 %]: |
| <span class="nowrap">[%+ flag.type.name FILTER html %][% flag.status %]</span> |
| [% 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 %]: |
| <span class="nowrap">[%+ flag.type.name FILTER html %][% flag.status %]</span> |
| [%+ 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 %] |