#!/usr/bin/perl # The LearningOnline Network with CAPA # thumbnail.gif - a CGI script that ships out the thumbnail # # 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/html/adm/gpl.txt # # http://www.lon-capa.org/ # ### # Example usage: /cgi-bin/thumbnail.gif?url=... use strict; sub filelocation { my ($dir,$file) = @_; my $location; $file=~ s/^\s*(\S+)\s*$/$1/; ## strip off leading and trailing spaces if ($file=~m:^/~:) { # is a contruction space reference $location = $file; $location =~ s:/~(.*?)/(.*):/home/$1/public_html/$2:; } else { $file=~s/\/home\/httpd\/html//; $file=~s:^/*res::; if ( !( $file =~ m:^/:) ) { $location = $dir. '/'.$file; } else { $location = '/home/httpd/html/res'.$file; } } $location=~s://+:/:g; # remove duplicate / while ($location=~m:/\.\./:) {$location=~ s:/[^/]+/\.\./:/:g;} #remove dir/.. return $location; } my %env; $|=1; # Autoflush after each print/write foreach (split(/&/,$ENV{'QUERY_STRING'})) { my ($name, $value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; if ($name eq 'url') { $env{'form.'.$name}=$value; } } my $ofn=&filelocation('',$env{'form.url'}); my $fn=$ofn.'.thumbnail'; my $exists=1; my $generate=0; if (-e $ofn) { my ($dev,$ino,$mode,$nlink, $uid,$gid,$rdev,$size, $atime,$omtime,$ctime, $blksize,$blocks)=stat($ofn); if (-e $fn) { my ($dev,$ino,$mode,$nlink, $uid,$gid,$rdev,$size, $atime,$mtime,$ctime, $blksize,$blocks)=stat($fn); if ($omtime>$mtime) { $generate=1; } } else { $generate=1; } } else { $exists=0; } # FIXME: generate thumbnail instead if ($generate) { $exists=0; } unless ($exists) { $fn='/home/httpd/html/res/adm/pages/nothumb.gif'; } # Tell the server we are sending a gif graphic print <); # output image $|=1; # be sure to flush before closing close IN;