[%# 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:
  # This template has no interface. It's a list of the available report
  # types in Bugzilla.
  #%]

[% PROCESS global/variables.none.tmpl %]

[% PROCESS global/header.html.tmpl
  title = "Reporting and Charting Kitchen"
  doc_section = "reporting.html"
%]

<p>
  [% terms.Bugzilla %] allows you to view and track the state of the [% terms.bug %] database in
  all manner of exciting ways.
</p>

<h2>Current State</h2>

<ul>
  <li>
    <strong><a href="query.cgi">Search</a></strong> -
    list sets of [% terms.bugs %].
  </li>
  <li>
    <strong>
      <a href="query.cgi?format=report-table">Tabular reports</a>
    </strong> -
    tables of [% terms.bug %] counts in 1, 2 or 3 dimensions, as HTML or CSV.
  </li>
  <li>
    <strong>
      <a href="query.cgi?format=report-graph">Graphical reports</a>
    </strong> -
    line graphs, bar and pie charts.
  </li>
</ul>

<h2>Change Over Time</h2>

<ul>
  <li>
    <strong><a href="reports.cgi">Old Charts</a></strong> - 
    plot the status and/or resolution of [% terms.bugs %] against
    time, for each product in your database.
  </li>
  [% IF user.in_group(Param("chartgroup")) %]
    <li>
      <strong><a href="chart.cgi">New Charts</a></strong> - 
      plot any arbitrary search against time. Far more powerful.
    </li>
  [% END %]
</ul>

[% PROCESS global/footer.html.tmpl %]
