[%# 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/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 %]

[% FILTER null;
  USE graph = GD.Graph.pie(width, height);
    
  graph.set(title          => col_field_disp,
            pie_height     => 20,
            suppress_angle => 2,
            start_angle    => 180);
    
  graph.plot(data.0).png | stdout(1);
  END;
-%]
