--- /dev/null
+[%# 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:
+ # bugs: list of hashes. May be empty. Each hash has nine members:
+ # id: integer. The bug number
+ # count: integer. The number of dupes
+ # delta: integer. The change in count in the last $changedsince days
+ # component: string. The bug's component
+ # bug_severity: string. The bug's severity.
+ # op_sys: string. The bug's reported OS.
+ # target_milestone: string. The bug's TM.
+ # short_desc: string. The bug's summary.
+ # bug_status: string. The bug's status.
+ # resolution: string. The bug's resolution, if any.
+ #
+ # 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.
+ # query_products: list of strings. Restrict to these products only.
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[%# *** Column Headers *** %]
+
+[% IF bug_ids.size > 0 %]
+ <table border>
+ <thead>
+ <tr bgcolor="#CCCCCC">
+ [% FOREACH column = [ { name => "id", description => "$terms.Bug #" },
+ { name => "count", description => "Dupe<br>Count" },
+ { name => "delta",
+ description => "Change in last<br>$changedsince day(s)" },
+ { name => "component", description => "Component" },
+ { name => "bug_severity", description => "Severity" },
+ { name => "op_sys", description => "Op Sys" },
+ { name => "target_milestone",
+ description => "Target<br>Milestone" },
+ { name => "short_desc", description => "Summary" } ]
+ %]
+
+ [%# Small hack to keep delta column out if we don't need it %]
+ [% NEXT IF column.name == "delta" AND NOT dobefore %]
+
+ <th>
+ [% bug_ids_string = bug_ids.join(',') %]
+ <a href="duplicates.cgi?sortby=[% column.name %]
+ [% IF sortby == column.name %]
+ [% "&reverse=1" IF NOT reverse %]
+ [% ELSE %]
+ [%-# Some columns start off reversed %]
+ [% "&reverse=1" IF column.name.match('delta|count') %]
+ [% END %]
+ [% IF maxrows %]&maxrows=[% maxrows FILTER html %][% END %]
+ [% IF changedsince %]&changedsince=[% changedsince FILTER html %][% END %]
+ [% "&openonly=1" IF openonly %]
+ [% FOREACH p = query_products %]&product=[% p FILTER html %][% END %]
+ [% IF format %]&format=[% format FILTER html %][% END %]
+ [% IF sortvisible %]&bug_id=[% bug_ids_string FILTER html %]&sortvisible=1[% END %]">
+ [% column.description %]</a>
+ </th>
+ [% END %]
+ </tr>
+ </thead>
+
+ [% IF NOT sortby %]
+ [% sortby = "count"; reverse = "1" %]
+ [% END %]
+
+ [% IF sortby == "id" OR sortby == "count" OR sortby == "delta" %]
+ [%# Numeric sort %]
+ [% sortedbugs = bugs.nsort(sortby) %]
+ [% ELSE %]
+ [% sortedbugs = bugs.sort(sortby) %]
+ [% END %]
+
+ [% IF reverse %]
+ [% bugs = sortedbugs.reverse %]
+ [% ELSE %]
+ [% bugs = sortedbugs %]
+ [% END %]
+
+ [%# *** Buglist *** %]
+ <tbody>
+
+ [%# We need to keep track of the bug IDs we are actually displaying, because
+ # if the user decides to sort the visible list, we need to know what that
+ # list actually is. %]
+ [% vis_bug_ids = [] %]
+
+ [% FOREACH bug = bugs %]
+ [% LAST IF loop.index() >= maxrows %]
+ [% vis_bug_ids.push(bug.id) %]
+
+ <tr [% "class='resolved'" IF bug.resolution != "" %]>
+ <td>
+ <center>
+ [% bug.id FILTER bug_link(bug.id) FILTER none %]
+ </center>
+ </td>
+
+ <td>
+ <center>
+ [% bug.count %]
+ </center>
+ </td>
+
+ [% IF dobefore %]
+ <td><center>[% bug.delta %]</center></td>
+ [% END %]
+
+ <td>[% bug.component FILTER html %]</td>
+ <td><center>[% bug.bug_severity FILTER html %]</center></td>
+ <td><center>[% bug.op_sys FILTER html %]</center></td>
+ <td><center>[% bug.target_milestone FILTER html %]</center></td>
+ <td>[% bug.short_desc FILTER html %]</td>
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+[% ELSE %]
+ <h3>No duplicate [% terms.bugs %] found.</h3>
+[% END %]