X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fhtml%2FSearch%2FChart;fp=rt%2Fhtml%2FSearch%2FChart;h=ea52bb1f976f50e9f1e05e8d35a64a4ca063def0;hb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;hp=0000000000000000000000000000000000000000;hpb=a513c0bef534d05f03c1242831b6f3be19b97dae;p=freeside.git diff --git a/rt/html/Search/Chart b/rt/html/Search/Chart new file mode 100644 index 000000000..ea52bb1f9 --- /dev/null +++ b/rt/html/Search/Chart @@ -0,0 +1,148 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +%# +%# +%# (Except where explicitly superseded by other copyright notices) +%# +%# +%# LICENSE: +%# +%# This work is made available to you under the terms of Version 2 of +%# the GNU General Public License. A copy of that license should have +%# been provided with this software, but in any event can be snarfed +%# from www.gnu.org. +%# +%# This work is distributed in the hope that it will be useful, but +%# WITHOUT ANY WARRANTY; without even the implied warranty of +%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%# General Public License for more details. +%# +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +%# 02110-1301 or visit their web page on the internet at +%# http://www.gnu.org/copyleft/gpl.html. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +$Query => "id > 0" +$PrimaryGroupBy => 'Queue' +$SecondaryGroupBy => undef +$ChartStyle => 'bars' + +<%init> +my @keys; +my @values; +my $chart_class; +use GD; +use GD::Text; + +if ($ChartStyle eq 'pie') { + require GD::Graph::pie; + $chart_class = "GD::Graph::pie"; +} else { + require GD::Graph::bars; + $chart_class = "GD::Graph::bars"; +} + +use RT::Report::Tickets; +my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} ); +$tix->FromSQL( $Query ); +my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' ); +$tix->GroupBy( FIELD => $PrimaryGroupBy ); +my $value_name = $tix->Column( FIELD => $PrimaryGroupBy ); + +my $chart = $chart_class->new( 600 => 400 ); +if ($chart_class eq "GD::Graph::bars") { + $chart->set( + x_label => $tix->Label( $PrimaryGroupBy ), + x_labels_vertical => 1, + y_label => 'Tickets', + show_values => 1 + ); + $chart->set_legend_font( ['verdana', 'arial', gdMediumBoldFont], 12); +} + +my %class = ( + Queue => 'RT::Queue', + Owner => 'RT::User', +); +my $class = $class{ $PrimaryGroupBy }; + +while ( my $entry = $tix->Next ) { + if ( $class ) { + my $q = $class->new( $session{'CurrentUser'} ); + $q->Load( $entry->__Value( $value_name ) ); + push @keys, $q->Name; + } + else { + push @keys, $entry->__Value($value_name); + } + + $keys[-1] ||= loc('(no value)'); + if ($chart_class eq 'GD::Graph::pie') { + $keys[-1] .= " - ". $entry->__Value( $count_name ); + } + push @values, $entry->__Value($count_name); +} + +# XXX: Convert 1970-01-01 date to the 'Not Set' +# this code should be generalized!!! +if ( $PrimaryGroupBy =~ /(Daily|Monthly|Annually)$/ ) { + my $re; + $re = qr{1970-01-01} if $PrimaryGroupBy =~ /Daily$/; + $re = qr{1970-01} if $PrimaryGroupBy =~ /Monthly$/; + $re = qr{1970} if $PrimaryGroupBy =~ /Annually$/; + foreach (@keys) { + s/^$re/loc('Not Set')/e; + } +} + +unless (@keys && @values) { + @keys = (''); + @values = (0); +} + +my %data; +foreach my $key (@keys) { $data{$key} = shift @values; } +my @sorted_keys = sort @keys; +my @sorted_values = map { $data{$_}} @sorted_keys; + + + +my $plot = $chart->plot( [ [@sorted_keys], [@sorted_values] ] ) or die $chart->error; + +if ( $plot->can('png') ) { + $r->content_type('image/png'); + $m->out( $plot->png ); +} +elsif ( $plot->can('gif') ) { + $r->content_type('image/gif'); + $m->out( $plot->gif ); +} +else { + die "Your GD library appears to support neither PNG nor GIF"; +} +$m->abort(); +