Annotation of loncom/cgi/plot.gif, revision 1.17

1.5       matthew     1: #!/usr/bin/perl
1.1       matthew     2: #
1.17    ! raeburn     3: # $Id: plot.gif,v 1.16 2016/10/12 18:50:02 musolffc Exp $
1.1       matthew     4: #
                      5: # Copyright Michigan State University Board of Trustees
                      6: #
                      7: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      8: #
                      9: # LON-CAPA is free software; you can redistribute it and/or modify
                     10: # it under the terms of the GNU General Public License as published by
                     11: # the Free Software Foundation; either version 2 of the License, or
                     12: # (at your option) any later version.
                     13: #
                     14: # LON-CAPA is distributed in the hope that it will be useful,
                     15: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     17: # GNU General Public License for more details.
                     18: #
                     19: # You should have received a copy of the GNU General Public License
                     20: # along with LON-CAPA; if not, write to the Free Software
                     21: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     22: #
                     23: # /home/httpd/cgi-bin/plot.gif
                     24: #
                     25: # http://www.lon-capa.org/
                     26: #
1.6       matthew    27: use strict;
                     28: 
                     29: $|=1;
1.4       matthew    30: 
1.5       matthew    31: my $tmpdir = '/home/httpd/perl/tmp/';
1.8       matthew    32: my %data;
                     33: foreach (split/&/,$ENV{'QUERY_STRING'}) {
                     34:     my ($name,$value)=split/=/;
                     35:     $data{$name}=$value;
1.7       matthew    36: }
1.8       matthew    37: my $filename = $data{'file'};
1.9       matthew    38: # unescape filename
                     39: $filename =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
1.8       matthew    40: die if ($filename =~ /\// || $filename !~ /_plot.data$/);
1.7       matthew    41: $filename = $tmpdir . $filename;
1.8       matthew    42: die "$data{'file'} does not exist\n" if (! -e $filename);
                     43: 
                     44: my $output = $data{'output'};
1.12      albertel   45: if ($output eq '') {
                     46:     $output = (split('\.',$0))[-1];
                     47: }
                     48: 
1.11      matthew    49: if ($output eq 'gif' || $output eq 'png') {
1.17    ! raeburn    50:     if (open(my $plot, "export LANG='en_US.UTF-8'; gnuplot $filename |")) {
1.16      musolffc   51: 
1.17    ! raeburn    52:         print <<"END";
1.11      matthew    53: Content-type: image/$output
1.1       matthew    54: 
1.5       matthew    55: END
1.17    ! raeburn    56:         while (my $line = <$plot>) {
        !            57: 	    print($line);
        !            58:         }
        !            59:         close($plot);
        !            60:     } else {
        !            61:         die "failed to open pipe to run gnuplot\n";        
1.16      musolffc   62:     }
1.13      albertel   63: 
1.8       matthew    64: } elsif ($output eq 'eps') {
1.10      matthew    65:     print <<"END";
                     66: Content-type: text/html
                     67: 
                     68: <html><head><title>eps plot creation</title></head>
                     69: <body>
                     70: <h2>Creating eps plot</h2>
                     71: 
                     72: END
1.17    ! raeburn    73:     if (! system ("export LANG='en_US.UTF-8'; gnuplot $filename")) {
1.14      raeburn    74:         print "<h2>An error occurred.</h2>\n".
1.10      matthew    75:             "I am not going to tell you about it as I have not bothered ".
                     76:             "to figure out how to get you the error text.\n";
                     77:     } else {
                     78:         print "<h2>EPS file generated successfully.</h2>\n";
                     79:     }
                     80:     print "</body></html>\n";
1.8       matthew    81: } else {
                     82:     die "output $output is not a recognized value or has no value\n";
1.4       matthew    83: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>