[%# 1.0@bugzilla.org %]
[%# 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>
  #%]

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

[% y_label = "$terms.Bugs" %]

[% PROCESS "global/field-descs.none.tmpl" %]

[% col_field_disp = field_descs.$col_field || col_field %]

[% IF col_field == 'bug_status' %]
  [% FOR i IN [ 0 .. data.0.0.max ] %]
    [% data.0.0.$i = status_descs.${data.0.0.$i} %]
  [% END %]
[% END %]

[% IF col_field == 'resolution' %]
  [% FOR i IN [ 0 .. data.0.0.max ] %]
    [% data.0.0.$i = resolution_descs.${data.0.0.$i} %]
  [% END %]
[% END %]

[% IF row_field == 'bug_status' %]
  [% FOR i IN [ 0 .. row_names.max ] %]
    [% row_names.$i = status_descs.${row_names.$i} %]
  [% END %]
[% END %]

[% IF row_field == 'resolution' %]
  [% FOR i IN [ 0 .. row_names.max ] %]
    [% row_names.$i = resolution_descs.${row_names.$i} %]
  [% END %]
[% END %]

[% FILTER null;
  USE graph = GD.Graph.bars(width, height);

  graph.set(x_label           => col_field_disp,
            y_label           => y_label,
            y_tick_number     => 8,
            y_number_format   => "%d",
            x_label_position  => 0.5,
            x_labels_vertical => x_labels_vertical,
            bar_spacing       => 8,
            shadow_depth      => 4,
            shadowclr         => 'dred',
            show_values       => 1,
            legend_placement  => "RT");

  graph.set(cumulate          => "true",
            show_values       => 0) IF cumulate;

  # Workaround for the fact that set_legend won't take row_names directly,
  # because row_names is an array reference rather than an array.
  graph.set_legend(row_names.0, row_names.1, row_names.2, row_names.3,
                   row_names.4, row_names.5, row_names.6, row_names.7,
                   row_names.8, row_names.9, row_names.10, row_names.11,
                   row_names.12, row_names.13, row_names.14, row_names.15);

  graph.plot(data.0).png | stdout(1);
  END;
-%]
