#!/usr/bin/perl # # $Id: graph.png,v 1.7 2002/01/22 15:12:05 minaeibi Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA 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 LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/cgi-bin/graph.gif # # http://www.lon-capa.org/ # # The LearningOnline Network with CAPA # Behrouz Minaei # YEAR=2001 # 9/13/2001, 9/25/2001, 10/6/2001, 10/9/2001, 12/25/2001 # # A CGI script that dynamically outputs a graphical chart for lonstatistics. # #### use strict; use GD::Graph::bars3d; use GD::Graph::colour; use GD::Graph::Data; $|=1; # Autoflush after each print/write my ($cid, $Tag, $Max, $PNo, $data) = split(/&/,$ENV{'QUERY_STRING'}); my @data1=split(/\,/,$data); my @xlabels; for (my $nIdx=0; $nIdx<$PNo; $nIdx++ ) { $xlabels[$nIdx]=$nIdx+1; } my @data =(\@xlabels,\@data1); my $Range; if ( $PNo > 10 ) {$Range = 30*$PNo;} else { $Range = 300+30*$PNo; } $Max += (10 - $Max % 10); my $MyGraph = GD::Graph::bars3d->new($Range, 400); $MyGraph->set( x_label => 'Problems #', y_label => $Tag, title => 'LON-CAPA Graphical Chart, Course: '.$cid, y_max_value => $Max, y_tick_number => 10, y_label_skip => 1, x_label_skip => 2, # colors dclrs => [ qw( green lblue lyellow lpurple cyan lorange)], # shadows bar_spacing => 4, shadow_depth => 1, shadowclr => 'dred', transparent => 0, ) or warn $MyGraph->error; # Tell the server we are sending a gif graphic print <plot(\@data)->png; undef $MyGraph; binmode(STDOUT); open IMG,"|pngtopnm|ppmtogif 2>/dev/null"; # convert into a gif image print IMG $BinaryData; # output image $|=1; # be sure to flush before closing close IMG;