nsbin/viewfile

91 lines
2.9 KiB
Perl
Executable File

#!/usr/bin/perl -wT
#
# TWiki Collaboration Platform, http://TWiki.org/
#
# Copyright (C) 1999-2003 Peter Thoeny, peter@thoeny.com
#
# For licensing info read license.txt file in the TWiki root.
# This program 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.
#
# This program 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, published at
# http://www.gnu.org/copyleft/gpl.html
# Set library paths in @INC, at compile time
BEGIN { unshift @INC, '.'; require 'setlib.cfg'; }
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use TWiki;
&main();
sub suffixToMimeType
{
my( $theFilename ) = @_;
my $mimeType = 'text/plain';
if( $theFilename =~ /\.(.+)$/ ) {
my $suffix = $1;
my @types = grep{ s/^\s*([^\s]+).*?\s$suffix\s.*$/$1/i }
map{ "$_ " }
split( /[\n\r]/, &TWiki::Store::readFile( $TWiki::mimeTypesFilename ) );
$mimeType = $types[0] if( @types );
}
return $mimeType;
}
sub main
{
my $query = new CGI;
my $thePathInfo = $query->path_info();
my $theRemoteUser = $query->remote_user();
my $theTopic = $query->param( 'topic' );
my $theUrl = $query->url;
( $topic, $webName ) =
&TWiki::initialize( $thePathInfo, $theRemoteUser, $theTopic, $theUrl, $query );
my $tmpl= "";
if( ! &TWiki::Store::webExists( $webName ) ) {
my $url = &TWiki::getOopsUrl( $webName, $topic, "oopsnoweb" );
TWiki::redirect( $query, $url );
return;
}
my $fileName = $query->param( 'filename' );
my $rev = $query->param( 'rev' ) || "";
my $topRev = &TWiki::Store::getRevisionNumber( $webName, $topic, $fileName );
if( ( $rev ) && ( $rev ne $topRev ) ) {
my $fileContent = &TWiki::Store::readAttachmentVersion( $webName, $topic, $fileName, $rev );
if( $fileContent ) {
my $mimeType = suffixToMimeType( $fileName );
print $query->header( -type => $mimeType,
-Content_Disposition => "inline;filename=$fileName");
print "$fileContent";
return;
} else {
# If no file content we'll try and show pub content, should there be a warning FIXME
}
}
# this should actually kick off a document conversion
# (.doc, .xls... to .html) and show the html file.
# Convert only if html file does not yet exist
# for now, show the original document:
# PTh 20 Jun 2000: Added host
my $pubUrlPath = &TWiki::getPubUrlPath();
my $host = $TWiki::urlHost;
TWiki::redirect( $query, "$host$pubUrlPath/$webName/$topic/$fileName" );
}