#!/usr/bin/perl

use CGI qw/-no_xhtml :html2 :html3 :html4 :form :cgi/;
use CGI::Carp qw/fatalsToBrowser/;
use Time::localtime;
use Digest::MD5;

#$CGI::POST_MAX=6*1024*1024; # 6MB

charset('UTF-8');

$newStyle=<<END;
P.Alert {
  font-family: sans-serif;
  color: red;
}
-->
END

print header();
print start_html(-title=>'File Upload', -encoding=>'UTF-8', -lang=>'ja',
                 -style=>{-code=>$newStyle}), "\n";

print h1('三重大機械工用ゲスト ファイルアップロード'), "\n";

# Start a multipart form.
print start_multipart_form(),
    'お名前:', br. "\n",
     textfield('author','Your Name',45), br, br, "\n",
    'E-mail アドレス:', br, "\n",
    textfield('emailaddress','Your E-mail Address',45), br, br, "\n",
    'コメント:', br, "\n",
    textfield('comments','comments',45), br, br, "\n",
    strong('"参照"'), "\n",
    'ボタンをクリックしてアップロードするファイルを選んで下さい.', br, "\n",
    'ファイル名:', br, "\n",
    filefield('filename','',45), br, "\n",
    p({-class=>'Alert'}, '※ファイル名に', a({href=>"ascii.html"}, 'ASCII'),
    '文字 (いわゆる半角英数字) のみを用いて下さい'),"\n",
    '以上の入力が済んだら ', 
    strong('"アップロード"'), ' ボタンをクリックして下さい(完了すると下にファイル情報が表示されます)', br, "\n",
    reset('reset', 'リセット'), "\n",
    submit('submit','アップロード'), "\n",
    endform;


# Process the form if there is a file name entered
if ($file = param('filename')) {
    $author = param('author');
    $emailaddess = param('emailaddress');
    $comments = param('comments');
    $tmpfile = tmpFileName($file);
    $mimetype = uploadInfo($file)->{'Content-Type'};
    $date = ctime();
    $ofile = filename_conv($file);

    print hr(),
          h2($file),
          h4('Date:', $date),
          h4('MIME Type:',em($mimetype)),
          h4('User Agent:',em(user_agent));

    $charcters = 0;
    $datestring = $date;
    $datestring =~ s/ /_/g;
    $TARGETFILE="/home/www/guestsrvr/DATA/$datestring";
    $TARGETFILE="$TARGETFILE-$ofile.txt";
    $LOGFILE="$TARGETFILE.txt";
    $remotehost = remote_host();

    $md5 = Digest::MD5->new;
    open(OUT, ">>$LOGFILE");
    print OUT "Date:     ", $date, "\n";
    print OUT "Host:     ", $remotehost, "\n";
    print OUT "UA:       ", user_agent, "\n";
    print OUT "File:     ", $ofile, "\n";
    print OUT "Author:   ", $author, "\n";
    print OUT "E-mail:   ", $emailaddess, "\n";
    print OUT "Comments: ", $comments, "\n";
    close(OUT);
    open(OUT, ">>$TARGETFILE");
    while (<$file>) {
	$characters += length($_);
	$md5->add($_);
	print OUT $_;
    }
    close(OUT);
    close $file;
    $digest = $md5->hexdigest;
    print strong('Characters: '),$characters,br;
    print strong('MD5 Digest: '),$digest,br;
}

print end_html;

sub filename_conv {
    ($ret) = @_;
    $ret =~ s/.*\\//;
    $ret =~ s/ /_/g;
    $ret =~ s/<\/?[a-zA-Z!][^>]*>//g;
    $ret =~ s/&[a-zA-Z]+\;//g;
    $ret =~ s/&#[0-9]+\;//g;
    $ret =~ s/\t+/_/g;
    return $ret;
}
