#!/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

BEGIN {
    # Set default current working directory
    if( $ENV{"SCRIPT_FILENAME"} && $ENV{"SCRIPT_FILENAME"} =~ /^(.+)\/[^\/]+$/ ) {
        chdir $1;
    }
    # Set library paths in @INC at compile time
    unshift @INC, '.';
    require 'setlib.cfg';
}

use CGI::Carp qw(fatalsToBrowser);
use CGI;
use TWiki;

&main();

sub suffixToMimeType
{ 
	my $config = shift;

    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($config, $$config{'TWiki::mimeTypesFilename'} ) );
        $mimeType = $types[0] if( @types );
    }
    return $mimeType;
}

sub main
{ 
   my %configHash; 
   my $config = \%configHash;
   my $twikiUri = $ENV{"SCRIPT_FILENAME"};
   $twikiUri =~ s!/+!/!g ; # remove multiple'/' 
   my @twikiUriItem = split ( '/' , $twikiUri ) ;
   $$config{'fileConfig'} = $ENV{"SERVER_NAME"} . "Port" . $ENV{"SERVER_PORT"} . $twikiUriItem[$#twikiUriItem - 2 ];

    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($config, $thePathInfo, $theRemoteUser, $theTopic, $theUrl, $query );

    my $tmpl= "";

    if( ! &TWiki::Store::webExists($config, $webName ) ) {
        my $url = &TWiki::getOopsUrl($config, $webName, $topic, "oopsnoweb" );
        TWiki::redirect($config, $query, $url );
        return;
    }

    my $fileName = $query->param( 'filename' );

    my $rev = $query->param( 'rev' ) || "";
    my $topRev = &TWiki::Store::getRevisionNumber($config, $webName, $topic, $fileName );

    if( ( $rev ) && ( $rev ne $topRev ) ) {
        my $fileContent = &TWiki::Store::readAttachmentVersion($config, $webName, $topic, $fileName, $rev ); 
        if( $fileContent ) {
            my $mimeType = suffixToMimeType($config, $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($config) ;
    my $host = $$config{'TWiki::urlHost'};
    TWiki::redirect($config, $query, "$host$pubUrlPath/$webName/$topic/$fileName" );
}
