diff options
Diffstat (limited to 'report.cgi')
-rwxr-xr-x | report.cgi | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/report.cgi b/report.cgi new file mode 100755 index 000000000..525897771 --- /dev/null +++ b/report.cgi @@ -0,0 +1,130 @@ +#!/usr/bonsaitools/bin/perl -wT +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# 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> +# <rdean@cambianetworks.com> + +use diagnostics; +use strict; +use lib "."; + +require "CGI.pl"; + +use vars qw($template $vars); + +use Bugzilla::Search; + +ConnectToDatabase(); + +GetVersionTable(); + +quietly_check_login(); + +# If other report types are added, some of this code can be moved into a sub, +# and the correct sub chosen based on $::FORM{'type'}. + +$::FORM{'y_axis_field'} || ThrowCodeError("no_y_axis_defined"); + +my $col_field = $::FORM{'x_axis_field'}; +my $row_field = $::FORM{'y_axis_field'}; + +my %columns; +$columns{'bug_severity'} = "bugs.bug_severity"; +$columns{'priority'} = "bugs.priority"; +$columns{'rep_platform'} = "bugs.rep_platform"; +$columns{'assigned_to'} = "map_assigned_to.login_name"; +$columns{'reporter'} = "map_reporter.login_name"; +$columns{'qa_contact'} = "map_qa_contact.login_name"; +$columns{'bug_status'} = "bugs.bug_status"; +$columns{'resolution'} = "bugs.resolution"; +$columns{'component'} = "map_components.name"; +$columns{'product'} = "map_products.name"; +$columns{'version'} = "bugs.version"; +$columns{'op_sys'} = "bugs.op_sys"; +$columns{'votes'} = "bugs.votes"; +$columns{'keywords'} = "bugs.keywords"; +$columns{'target_milestone'} = "bugs.target_milestone"; + +my @axis_fields = ($row_field); +# The X axis (horizontal) is optional +push(@axis_fields, $col_field) if $col_field; + +my @selectnames = map($columns{$_}, @axis_fields); + +my $search = new Bugzilla::Search('fields' => \@selectnames, + 'url' => $::buffer); +my $query = $search->getSQL(); + +$query =~ s/DISTINCT//; +SendSQL($query, $::userid); + +# We have a hash for each direction for the totals, and a hash of hashes for +# the data itself. +my %data; +my %row_totals; +my %col_totals; +my $grand_total; + +# Read the bug data and increment the counts. +while (MoreSQLData()) { + my ($row, $col) = FetchSQLData(); + $row = "" if !defined($row); + $col = "" if !defined($col); + + $data{$row}{$col}++; + $row_totals{$row}++; + $col_totals{$col}++; + $grand_total++; +} + +$vars->{'data'} = \%data; +$vars->{'row_totals'} = \%row_totals; +$vars->{'col_totals'} = \%col_totals; +$vars->{'grand_total'} = $grand_total; + +# Determine the labels for the rows and columns +my @row_names = sort(keys(%row_totals)); +my @col_names = sort(keys(%col_totals)); + +$vars->{'row_names'} = \@row_names; +$vars->{'col_names'} = \@col_names; + +$vars->{'row_field'} = $row_field; +$vars->{'col_field'} = $col_field; + +$::buffer =~ s/format=[^&]*&?//g; + +# Calculate the base query URL for the hyperlinked numbers +my $buglistbase = $::buffer; +$buglistbase =~ s/$row_field=[^&]*&?//g; +$buglistbase =~ s/$col_field=[^&]*&?//g; + +$vars->{'buglistbase'} = $buglistbase; +$vars->{'buffer'} = $::buffer; + +$::FORM{'type'} =~ s/[^a-zA-Z\-]//g; + +# Generate and return the result from the appropriate template. +my $format = GetFormat("reports/$::FORM{'type'}", + $::FORM{'format'}, + $::FORM{'ctype'}); +print "Content-Type: $format->{'contenttype'}\n\n"; +$template->process("$format->{'template'}", $vars) + || ThrowTemplateError($template->error()); |