| [%# 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. |
| #%] |
| |
| [%# INTERFACE: |
| # bugs: list of hashes. May be empty. Each hash has three members: |
| # bug: A Bugzilla::Bug object |
| # count: integer. The number of dupes |
| # delta: integer. The change in count in the last $changedsince days |
| # |
| # bug_ids: list of integers. May be empty. The IDs of the bugs in $bugs. |
| # |
| # sortby: string. the column on which we are sorting the buglist. |
| # reverse: boolean. True if we are reversing the current sort. |
| # maxrows: integer. Max number of rows to display. |
| # changedsince: integer. The number of days ago for the changedsince column. |
| # openonly: boolean. True if we are only showing open bugs. |
| # product: array of strings. Restrict to these products only. |
| #%] |
| |
| [%# *** Column Headers *** %] |
| |
| [% SET columns = [ |
| { name => "id", description => "$terms.Bug #" }, |
| { name => "count", description => "Dupe<br>Count" }, |
| { name => "delta", |
| description => "Change in last<br>$changedsince day(s)" }, |
| { name => "component", description => field_descs.component }, |
| { name => "bug_severity", description => field_descs.bug_severity }, |
| { name => "priority", description => field_descs.priority }, |
| { name => "target_milestone", description => field_descs.target_milestone }, |
| { name => "short_desc", description => field_descs.short_desc }, |
| ] %] |
| |
| [% SET base_args = [] %] |
| [% FOREACH param = ['maxrows', 'openonly', 'format', 'sortvisible', |
| 'changedsince', 'product'] |
| %] |
| [% NEXT IF NOT ${param}.defined %] |
| [% FOREACH value = ${param} %] |
| [% filtered_value = value FILTER uri %] |
| [% base_args.push("$param=$filtered_value") %] |
| [% END %] |
| [% END %] |
| [% IF sortvisible %] |
| [% bug_ids_string = bug_ids.nsort.join(',') FILTER uri %] |
| [% base_args.push("bug_id=$bug_ids_string") %] |
| [% END %] |
| [% base_args_string = base_args.join('&') %] |
| |
| [% IF bugs.size %] |
| <table id="duplicates_table"> |
| <thead> |
| <tr> |
| [% FOREACH column = columns %] |
| [% IF column.name == sortby %] |
| [%# We add this to the column object so it doesn't affect future |
| # iterations of the loop. |
| #%] |
| [% column.reverse_sort = reverse ? 0 : 1 %] |
| [% END %] |
| <th class="[% column.name FILTER html %]"> |
| <a href="duplicates.cgi?sortby=[% column.name FILTER uri %] |
| [% IF column.reverse_sort.defined %] |
| [%- %]&reverse=[% column.reverse_sort FILTER uri %] |
| [% END %] |
| [% IF base_args_string %] |
| [% "&$base_args_string" FILTER none %] |
| [% END %]" |
| >[% column.description FILTER none %]</a> |
| </th> |
| [% END %] |
| </tr> |
| </thead> |
| |
| [%# *** Buglist *** %] |
| |
| <tbody> |
| [% FOREACH item = bugs %] |
| [% SET bug = item.bug %] |
| <tr [% " class='resolved'" IF NOT bug.isopened %]> |
| <td class="id"> |
| [% bug.id FILTER bug_link(bug) FILTER none %] |
| </td> |
| <td class="count">[% item.count FILTER html %]</td> |
| <td class="delta">[% item.delta FILTER html %]</td> |
| <td class="component">[% bug.component FILTER html %]</td> |
| <td class="bug_severity"> |
| [%- display_value('bug_severity', bug.bug_severity) FILTER html %] |
| </td> |
| <td class="priority"> |
| [%- display_value('priority', bug.priority) FILTER html %] |
| </td> |
| <td class="target_milestone"> |
| [% display_value('target_milestone', |
| bug.target_milestone) FILTER html %] |
| </td> |
| <td class="short_desc">[% bug.short_desc FILTER html %]</td> |
| </tr> |
| [% END %] |
| </tbody> |
| </table> |
| [% ELSE %] |
| <h3>No duplicate [% terms.bugs %] found.</h3> |
| [% END %] |