From dad297316ae335ccc20e5d0546525d1c117131c0 Mon Sep 17 00:00:00 2001 From: "gerv%gerv.net" <> Date: Tue, 29 Oct 2002 15:43:57 +0000 Subject: Bug 173005 - Add bar charts, pie charts etc. to reporting. Patch by gerv; 2xr=joel. --- template/en/default/reports/menu.html.tmpl | 8 +- template/en/default/reports/report-bar.png.tmpl | 54 +++++++ template/en/default/reports/report-line.png.tmpl | 53 +++++++ template/en/default/reports/report-pie.png.tmpl | 35 +++++ template/en/default/reports/report-table.csv.tmpl | 54 ++++--- template/en/default/reports/report-table.html.tmpl | 123 +++++----------- template/en/default/reports/report.csv.tmpl | 26 ++++ template/en/default/reports/report.html.tmpl | 156 +++++++++++++++++++++ 8 files changed, 389 insertions(+), 120 deletions(-) create mode 100644 template/en/default/reports/report-bar.png.tmpl create mode 100644 template/en/default/reports/report-line.png.tmpl create mode 100644 template/en/default/reports/report-pie.png.tmpl create mode 100644 template/en/default/reports/report.csv.tmpl create mode 100644 template/en/default/reports/report.html.tmpl (limited to 'template/en/default/reports') diff --git a/template/en/default/reports/menu.html.tmpl b/template/en/default/reports/menu.html.tmpl index d93717532..4e21bf4d6 100644 --- a/template/en/default/reports/menu.html.tmpl +++ b/template/en/default/reports/menu.html.tmpl @@ -29,7 +29,7 @@ %]

- Bugzilla allows you to view and track the state of your bug database in + Bugzilla allows you to view and track the state of the bug database in all manner of exciting ways.

@@ -46,6 +46,12 @@ - tables of bug counts in 1, 2 or 3 dimensions, as HTML or CSV. +
  • + + Graphical reports + - + line graphs, bar and pie charts. +
  • Change Over Time

    diff --git a/template/en/default/reports/report-bar.png.tmpl b/template/en/default/reports/report-bar.png.tmpl new file mode 100644 index 000000000..a3d73d45c --- /dev/null +++ b/template/en/default/reports/report-bar.png.tmpl @@ -0,0 +1,54 @@ +[%# 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 + #%] + +[% y_label = "Bugs" %] + +[% PROCESS "global/field-descs.html.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] + +[% 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, + 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; +-%] diff --git a/template/en/default/reports/report-line.png.tmpl b/template/en/default/reports/report-line.png.tmpl new file mode 100644 index 000000000..d0c7b2541 --- /dev/null +++ b/template/en/default/reports/report-line.png.tmpl @@ -0,0 +1,53 @@ +[%# 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 + #%] + +[% y_label = "Bugs" %] + +[% PROCESS "global/field-descs.html.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] + +[% IF cumulate %] + [% USE graph = GD.Graph.area(width, height) %] + [% graph.set(cumulate => "true") %] +[% ELSE %] + [% USE graph = GD.Graph.lines(width, height) %] +[% END %] + +[% FILTER null; + graph.set(x_label => col_field_disp, + y_label => y_label, + y_tick_number => 8, + x_label_position => 0.5, + legend_placement => "RT", + line_width => 2); + + # 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; +-%] + diff --git a/template/en/default/reports/report-pie.png.tmpl b/template/en/default/reports/report-pie.png.tmpl new file mode 100644 index 000000000..f34397e12 --- /dev/null +++ b/template/en/default/reports/report-pie.png.tmpl @@ -0,0 +1,35 @@ +[%# 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 + #%] + +[% PROCESS "global/field-descs.html.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] + +[% FILTER null; + USE graph = GD.Graph.pie(width, height); + + graph.set(title => col_field_disp, + pie_height => 20, + start_angle => 180); + + graph.plot(data.0).png | stdout(1); + END; +-%] diff --git a/template/en/default/reports/report-table.csv.tmpl b/template/en/default/reports/report-table.csv.tmpl index a80a618c8..60f3a4eef 100644 --- a/template/en/default/reports/report-table.csv.tmpl +++ b/template/en/default/reports/report-table.csv.tmpl @@ -19,39 +19,33 @@ # Contributor(s): Gervase Markham #%] [%# INTERFACE: - # See report.html.tmpl. + # See report-table.html.tmpl. #%] - -[% tbl_names = names.tbl.keys.sort %] -[% col_names = names.col.keys.sort %] -[% row_names = names.row.keys.sort %] +[% num_bugs = "Number of bugs" %] +[% tbl_field_disp = field_descs.$tbl_field || tbl_field %] +[% col_field_disp = field_descs.$col_field || col_field %] +[% row_field_disp = field_descs.$row_field || row_field %] -[% FOREACH tbl = tbl_names %] - [% IF tbl_field -%] - [% tbl FILTER html %] - [% END %] - - [% row_field FILTER csv -%] - - [% IF col_field -%] - \ [% col_field FILTER csv -%], - [% FOREACH col = col_names -%] - [% col FILTER csv -%], - [% END -%] - [% ELSE -%] - [% -%],Number of bugs - [% END %] +[% "$tbl_field_disp: $tbl\n" FILTER csv IF tbl_field %] +[% row_field_disp FILTER csv IF row_field %] +[% " / " IF col_field AND row_field %] +[% col_field_disp FILTER csv %], +[% IF col_field -%] +[% FOREACH col = col_names -%] + [% col FILTER csv -%], +[% END -%] +[% ELSE -%] + [% num_bugs %], +[% END %] - [% FOREACH row = row_names %] - [% row FILTER csv -%], - [% FOREACH col = col_names %] - [% IF data.$tbl AND data.$tbl.$col AND data.$tbl.$col.$row %] - [% data.$tbl.$col.$row -%], - [% ELSE %] - [% -%]0, - [% END %] +[% FOREACH row = row_names %] + [% row FILTER csv -%], + [% FOREACH col = col_names %] + [% IF data.$tbl AND data.$tbl.$col AND data.$tbl.$col.$row %] + [% data.$tbl.$col.$row -%], + [% ELSE %] + [% -%]0, [% END %] - [% END %] - + [% END %] diff --git a/template/en/default/reports/report-table.html.tmpl b/template/en/default/reports/report-table.html.tmpl index 9767f5030..5074484c3 100644 --- a/template/en/default/reports/report-table.html.tmpl +++ b/template/en/default/reports/report-table.html.tmpl @@ -21,92 +21,51 @@ #%] [%# INTERFACE: - # querybase: The base query for this table, in URL form - # query: The query for this table, in URL form - # data: hash of hash of hash of numbers. Bug counts. - # names: hash of hash of strings. Names of tables, rows and columns. + # buglistbase: The base query for this table, in URL form # col_field: string. Name of the field being plotted as columns. # row_field: string. Name of the field being plotted as rows. # tbl_field: string. Name of the field being plotted as tables. + # col_names: array. List of values for the field being plotted as columns. + # row_names: array. List of values for the field being plotted as rows. + # data: . Data to plot. Only data.$tbl is accessed. + # tbl: Name of a hash in data which is the table to be plotted. #%] [% PROCESS "global/field-descs.html.tmpl" %] -[% tbl_field_disp = field_descs.$tbl_field || tbl_field %] [% col_field_disp = field_descs.$col_field || col_field %] [% row_field_disp = field_descs.$row_field || row_field %] - -[% title = BLOCK %] - Report: - [% "$tbl_field_disp / " IF tbl_field %] - [% "$col_field_disp / " IF col_field %] - [% row_field_disp %] -[% END %] - -[% PROCESS global/header.html.tmpl - style = " - .t1 { background-color: #ffffff } /* white */ - .t2 { background-color: #dfefff } /* light blue */ - .t3 { background-color: #dddddd } /* grey */ - .t4 { background-color: #c3d3ed } /* darker blue */ - .ttotal { background-color: #cfffdf } /* light green */ - " -%] - -
    - [% time2str("%Y-%m-%d %H:%M:%S", time) %] -
    - -[% tbl_names = names.tbl.keys.sort %] -[% col_names = names.col.keys.sort %] -[% row_names = names.row.keys.sort %] - -[% total_name = "Total" %] - -[% FOREACH tbl = tbl_names %] - [% FOREACH row = row_names %] - [% FOREACH col = col_names %] - [% data.$tbl.$col.$row = (data.$tbl.$col.$row || 0) %] - - [% IF tbl_field %] - [%# Calculate values for the Total table %] - [% data.$total_name.$col.$row = - (data.$total_name.$col.$row || 0) + data.$tbl.$col.$row %] - [% END %] - [% END %] - [% END %] -[% END %] -[% IF tbl_field %] - [% tbl_names.push(total_name) %] +[% IF tbl == "-total-" %] + [% urlbase = BLOCK %]buglist.cgi?[% buglistbase %][% END %] +[% ELSE %] + [% urlbase = BLOCK %]buglist.cgi?[% buglistbase %]& + [% tbl_field FILTER url_quote %]=[% tbl FILTER url_quote %][% END %] [% END %] -
    - -[% FOREACH tbl = tbl_names %] - - [% IF tbl_field %] - - - - - [% END %] +
    - -

    [% tbl FILTER html %]

    -
    + [% IF tbl_field %] - + [% END %] + + + + - - - + + [% END %]
    - [% col_field_disp FILTER html %] + +

    [% tbl_disp %]

    + + [% col_field_disp FILTER html %] +
    - [% row_field_disp FILTER html %] - +
    + [% row_field_disp FILTER html %] + [% classes = [ [ "t1", "t2" ] , [ "t3", "t4" ] ] %] @@ -150,8 +109,7 @@ [% col_idx = 1 - col_idx %] [% IF data.$tbl.$col.$row AND data.$tbl.$col.$row > 0 %] - [% data.$tbl.$col.$row %] @@ -161,8 +119,7 @@ - [% row_total %] [% grand_total = grand_total + row_total %] @@ -179,8 +136,7 @@ [% NEXT IF col == "" %] - [% col_totals.$col %] @@ -188,24 +144,13 @@ [% END %] - [% grand_total %] + [% grand_total %]
    - - - - -
    - -[% END %] - - Edit this report -
    - -
    - -[% PROCESS global/footer.html.tmpl %] + + + diff --git a/template/en/default/reports/report.csv.tmpl b/template/en/default/reports/report.csv.tmpl new file mode 100644 index 000000000..727acb311 --- /dev/null +++ b/template/en/default/reports/report.csv.tmpl @@ -0,0 +1,26 @@ +[%# 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 + #%] +[% PROCESS "global/field-descs.html.tmpl" %] +[% FOREACH tbl = tbl_names %] + [% PROCESS "reports/report-table.csv.tmpl" %] + + +[% END %] diff --git a/template/en/default/reports/report.html.tmpl b/template/en/default/reports/report.html.tmpl new file mode 100644 index 000000000..c4a3edd56 --- /dev/null +++ b/template/en/default/reports/report.html.tmpl @@ -0,0 +1,156 @@ + +[%# 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 + #%] + +[%# INTERFACE: + # col_field: string. Name of the field being plotted as columns. + # row_field: string. Name of the field being plotted as rows. + # tbl_field: string. Name of the field being plotted as tables. + # tbl_names: array. List of values for the field being plotted as tables. + # time: integer. Seconds since the epoch. + # data: . Data to plot. + # format: string. Format of the individual reports. + # width: integer. For image charts, height of the image. + # height: integer. For image charts, width of the image. + # switchbase: string. Base URL for format switching. + # cumulate: boolean. For bar/line charts, whether to cumulate data sets. + #%] + +[% DEFAULT width = 600 + height = 350 +%] + +[%# We ignore row_field for pie charts %] +[% IF format == "pie" %] + [% row_field = "" %] +[% END %] + +[% PROCESS "global/field-descs.html.tmpl" %] + +[% tbl_field_disp = field_descs.$tbl_field || tbl_field %] +[% col_field_disp = field_descs.$col_field || col_field %] +[% row_field_disp = field_descs.$row_field || row_field %] + +[% title = BLOCK %] + Report: + [% tbl_field_disp IF tbl_field %] + [% " / " IF tbl_field AND (col_field OR row_field) %] + [% row_field_disp IF row_field %] + [% " / " IF col_field AND row_field %] + [% col_field_disp %] +[% END %] + +[% PROCESS global/header.html.tmpl + style = " + .t1 { background-color: #ffffff } /* white */ + .t2 { background-color: #dfefff } /* light blue */ + .t3 { background-color: #dddddd } /* grey */ + .t4 { background-color: #c3d3ed } /* darker blue */ + .ttotal { background-color: #cfffdf } /* light green */ + " + h3 = time2str("%Y-%m-%d %H:%M:%S", time) +%] + +[% IF debug %] +

    [% query FILTER html %]

    +[% END %] + +
    + + [% FOREACH tbl = tbl_names %] + [% IF tbl == "-total-" %] + [% tbl_disp = "Total" %] + [% ELSE %] + [% tbl_disp = tbl %] + [% END %] + + [% IF format == "table" %] + [% PROCESS "reports/report-table.html.tmpl" %] + [% ELSE %] + [% IF tbl %] +

    [% tbl_disp FILTER html %]

    + [% END %] + + [% imageurl = BLOCK %]report.cgi?[% imagebase %]&format= + [% format FILTER url_quote %]&ctype=png&action=plot& + [% IF tbl_field AND tbl != "-total-" %] + [% tbl_field FILTER url_quote %]=[% tbl FILTER url_quote %]& + [% END %]width=[% width %]&height=[% height %] + [% END %] + + + [% END %] +
    + [% END %] + + + + + + [% IF format != "table" %] + + + [% sizeurl = "report.cgi?$switchbase&action=wrap&format=$format" %] + + [% END %] + +
    + [% formats = [ { name => "pie", description => "Pie" }, + { name => "bar", description => "Bar" }, + { name => "line", description => "Line" }, + { name => "table", description => "Table" } ] %] + + [% formaturl = "report.cgi?$switchbase&width=$width&height=$height" _ + "&action=wrap" %] + [% FOREACH other_format = formats %] + [% NEXT IF other_format.name == "pie" AND row_field %] + [% UNLESS other_format.name == format %] + + [% END %] + [% other_format.description %] + [% "" UNLESS other_format.name == format %] | + [% END %] + CSV + +        + + Taller
    + Thinner * + Fatter    
    + Shorter
    +
    + +

    + [% IF format == "table" %] + Edit + this report + [% ELSE %] + Edit this report + [% END %] +

    + +
    + +[% PROCESS global/footer.html.tmpl %] -- cgit v1.2.3-24-g4f1b