[%# 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 = "Подробный список $terms.Bug" 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="Сокращенный формат"> </form> </div> [% END %] [% ELSE %] <p> Список ошибок пуст. </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" %] 'Недопустимый номер [% terms.bug %]: [%+ bug.bug_id FILTER html %]' [% terms.bug %] с таким именем также не найдено. [% ELSIF bug.error == "NotPermitted" %] Недостаточно прав для просмотра [% terms.bug %]. [% ELSIF bug.error == "NotFound" %] [% terms.bug %] не найдена. [% 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>Учет времени:</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>Приложения:</th> <td colspan="3"> [% IF bug.show_attachment_flags %] <table> <tr> <th>Описание</th> <th>Согласования</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>Нет</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">Согласования:</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 %]