#!/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" ); }