#! /perl/5.00502/bin/MSWin32-x86-object/perl -w
#  /usr/local/bin/perl
#use strict;


    my(%fields);

    my($sec, $min, $hour, $mday, $mon, $year) =     (localtime(time))[0..5]; $year += 1900;

    my($dataFile) = "/inetpub/wwwroot/eco/cgi-bin/DATA/gestbook.dat";

    $mon  = zeroFill($mon, 2);

    $hour = zeroFill($hour, 2);

    $min  = zeroFill($min, 2);

    $sec  = zeroFill($sec, 2);

    $fields{'timestamp'} = "$mon/$mday/$year, $hour:$min:$sec";


    getFormData(\%fields);

    if ($ENV{'QUERY_STRING'})
    {
        if ($ENV{'QUERY_STRING'} eq 'display')
           {
              displayPage();
           }
        elsif ($ENV{'QUERY_STRING'} eq 'add')
           {
              print("Location: /eco/addgest.htm\n\n");
           }

        else
           {
             displayError("Unknown Command:                <B>$ENV{'QUERY_STRING'}</B>");
           }
    }

    else
     {
       if (length($fields{'name'}) == 0)
        {
           displayError("Вы незаполнили обязательное поле: ФИО,<BR>\n");
        }

       if (length($fields{'work'}) == 0)
        {
           displayError("Вы незаполнили обязательное поле: Должность,<BR>\n");
        }

       if (length($fields{'comments'}) == 0)
        {
          displayError("Вы незаполнили обязательное поле: Коментарии,<BR>\n");
        }

       saveFormData(\%fields, $dataFile);
       displayPage();
     }

  exit(0);


sub displayError
 {
   print("Content-type: text/html\n\n");
   print("<HTML>\n");
   print("<HEAD><TITLE>Гостевая книга - Ошибка</TITLE></HEAD>\n");
   print("<H1>Гостевая книга</H1>\n");
   print("<HR>\n");
   print("@_<BR>\n");
   print("<HR>\n");
   printENV();
   print("</BODY>\n");
   print("</HTML>\n");
   exit(0);
 }

sub displayPage
  {
    my($hashRef) = shift;
    my($file)    = shift;
    open(FILE, $dataFile) or die("Cannot open file data: " . $dataFile);

    @lines=<FILE>;

    print("Content-type: text/html\n\n");

    print("<HTML>\n");

    print("<HEAD><TITLE>Гостевая книга</TITLE></HEAD>\n");
    print("<div align=\"center\">\n");
    print("<p><font color=\"\#00008B\"><b><font face=\"Courier New, Courier, mono\" size=\"+2\">Гостевая
    книга</font></b></font></p><br>\n");
    print("</div>\n");
    print("<p align=\"center\"><A HREF=\"/eco/cgi-bin/gestbook.pl?add\">Добавить запись</A></p>\n");

    #print("<LI><A HREF=\"/cgi-bin/gestbook.pl?display\
    #">Обновить</A>
    #print("</UL></TD>\n");

    print("<p align=\"center\"><IMG SRC=../CGI-BIN/blu.gif></p>\n");
    #print("<BR>\n");
    for ($i=$#lines; $i>=$[; $i--) #обрабатываем строки файла c конца
    {

     # Разделяем строку на части
     @item=split('~', $lines[$i]); #разделяем на части

     print("<p align=\"center\"> $item[0]:   <B>$item[1]</B>, <A HREF=mailto:$item[2]>$item[2]</A>, $item[3], $item[4]</p><BR>\n"); #ФИО, должность, город
          
     print("<p align=\"left\">$item[5]</p>\n");

     print("<p align=\"center\"><IMG SRC=blu.gif></p>\n");

    }

    print("</BODY>\n");

    print("</HTML>\n");
    close FILE;
}



sub readFormData {

    my($file)    = shift;

    my($hashRef) = shift;

    open(FILE, "<$file") or displayError("Невозможно открыть файл с данными");

    while (<FILE>) {

        my($timestamp, $name, $email, $comments) = split(/~/, $_);

        $hashRef->{$timestamp} = [ $name, $email, $comments ];

    }

    close(FILE);

}



sub getFormData {

    my($hashRef) = shift;

    my($buffer) = "";


    if ($ENV{'REQUEST_METHOD'} eq "GET") {

        $buffer = $ENV{'QUERY_STRING'};

    }

   else {

        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

    }

    foreach (split(/&/, $buffer)) {

        my($key, $value) = split(/=/, $_);

        $key   = decodeURL($key);

        $value = decodeURL($value);

        $value =~ s/(<P>\s*)+/<P>/g;   # compress multiple <P> tags.

        $value =~ s/</&lt;/g;           # turn off all HTML tags.

        $value =~ s/>/&gt;/g;

        $value =~ s/&lt;b&gt;/<b>/ig;    # turn on the bold tag.

        $value =~ s!&lt;/b&gt;!</b>!ig;

        $value =~ s/&lt;i&gt;/<b>/ig;    # turn on the italic tag.

        $value =~ s!&lt;/i&gt;!</b>!ig;

        $value =~ s!\cM!!g;            # Remove unneeded carriage returns.

        $value =~ s!\n\n!<P>!g;        # Convert 2 newlines into paragraph.

        $value =~ s!\n! !g;            # convert newline into space.

        %{$hashRef}->{$key} = $value;

    }

}



sub decodeURL {

    $_ = shift;

    tr/+/ /;

    s/%(..)/pack('c', hex($1))/eg;

    return($_);

}



sub zeroFill {

    my($temp) = shift;

    my($len)  = shift;

    my($diff) = $len - length($temp);

    return($temp) if $diff <= 0;

    return(('0' x $diff) . $temp);

}



sub saveFormData {

    my($hashRef) = shift;

    my($file)    = shift;

    open(FILE, ">>$file") or die("Невозможно открыть файл с данными.");

    print FILE ("$hashRef->{'timestamp'}~");

    print FILE ("$hashRef->{'name'}~");

    print FILE ("$hashRef->{'email'}~");

    print FILE ("$hashRef->{'work'}~");

    print FILE ("$hashRef->{'town'}~");

    print FILE ("$hashRef->{'comments'}~");

    #$host = $ENV{REMOTE_HOST};
    #print FILE ("$host");

    print FILE ("\n");

    close(FILE);

}



sub printENV {

    print "The Environment report<BR>\n";

    print "----------------------<BR><PRE>\n";

    print "REQUEST_METHOD:  *$ENV{'REQUEST_METHOD'}*\n";

    print "SCRIPT_NAME:     *$ENV{'SCRIPT_NAME'}*\n";

    print "QUERY_STRING:    *$ENV{'QUERY_STRING'}*\n";

    print "PATH_INFO:       *$ENV{'PATH_INFO'}*\n";

    print "PATH_TRANSLATED: *$ENV{'PATH_TRANSLATED'}*</PRE>\n";



    if ($ENV{'REQUEST_METHOD'} eq 'POST') {

        print "CONTENT_TYPE:    $ENV{'CONTENT_TYPE'}<BR>\n";

        print "CONTENT_FILE:    $ENV{'CONTENT_FILE'}<BR>\n";

        print "CONTENT_LENGTH:  $ENV{'CONTENT_LENGTH'}<BR>\n";

    }

    print("<BR>");



    foreach (sort(keys(%ENV))) {

        print("$_: $ENV{$_}<BR>\n");

    }

    print("<BR>");



     foreach (sort(keys(%fields))) {

        print("$_: $fields{$_}<BR>\n");

    }

    print("<BR>");

}