#!/usr/bin/perl

use CGI qw(:standard);

my $operation = param("operation") || "";
my $shownews = param("show") || "1";

my $sep = "-fart-bkseparator-id-00-00-00-";

retreive("slices/book.html");
printdata();

if ($operation eq "add") {
  exit;
  my $from = param("froma") || "";
  my $mail = param("maila") || "";
  my $message = param("messagea") || "";
  while (($message =~ /\n+$/) || ($message =~ /\r+$/)) {
    substr($message, -1) = "";
  }
  if (($from =~ m/$sep/) || ($mail =~ m/$sep/) || ($message =~ m/$sep/)) {
    $from = "Admin";
    $mail = "admin\@raww.net";
    $random = int( rand(100551))+10000;
    $message = "Security Violation Attempt with error $random.";
  }
  my @YMONTHS = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  $year += 1900;
  if ($hour < 10) {$hour = "0".$hour}
  if ($min < 10) {$min = "0".$min}
  $date = "$mday $YMONTHS[$mon] $year, $hour:$min";
  print "<font color=black face='Tahoma,Arial,Helvetica' size=-1><b>";
  if (($from) && ($message)) {
    updatenews("book.txt",$from,$mail,$date,$message);
  }
  print "</b></font>";
}

getnews($shownews, "book");
print "<br><font size=-2 face='Arial, Tahoma, Helvetica' color=black><b>CGI programming by <b>Heaven Aeroplane</b>. Updated by Spectre: 24.05.2004</b></font>";
print end_html();

# Retreive data from a file ###
sub retreive {
 open (FILE, "< $_[0]") or die "$_[0]: Error reading data file! \n";
 @DATA=<FILE>;
 close FILE or die "$_[0]: Error reading data file! \n";
}

# Print the data retreived ###
sub printdata {
 foreach $DATA (@DATA) {print $DATA}
}

# Delete CRLF chars
sub chopit {
 foreach $DATA (@DATA) { chop($DATA) }
}

# Get X news from a database, from N-th position
sub getnews {
  my $showem = $_[0];
  print "<font color=white face='Tahoma,Arial,Helvetica' size=-1><b>";
  my $fname = "data/$_[1].txt";
  retreive($fname);
  chopit();
  if (@DATA eq "") { exit; }
  my $newscount = 0;
  my $alllines = 0;
  my $allnews = 0;
  my $k = 0;
  my $j = 1; 
  my $TEMP;
  foreach $DATA (@DATA) { 
    $alllines++;
    if ($DATA eq $sep) { $allnews++ }   
  }
  print "<table width='100%' cellspacing=0 cellpadding=0 border=0>";
  while (($newscount < 20*$showem) && ($k < $alllines)) {
   if ($DATA[$k] eq $sep) {
    $TEMP[0] = $newscount;
    $newscount++;
     $j= 1; 
     if ($newscount >= (20*($showem-1)+1)) { 
     printsinglenewsmsg(@TEMP)
    }
    $TEMP[0]= "";
   } else {
    $TEMP[$j] = $DATA[$k];
    $j++;
   }
   $k++; 
  }
  print "</table>";
  $totalpages = $allnews/20+1;
  for ($j=1; $j<$totalpages; $j++) {
    if ($j != $showem) {
      print "<a href=\"/cgi-bin/book?show=$j\">$j</a>\&nbsp;\&nbsp;";
    } else {
      print "<font color=black face='Tahoma,Arial,Helvetica' size=-1>$j</font>\&nbsp;\&nbsp;";
    }  
  }
  print "<br>";
}

# Print a single news message
sub printsinglenewsmsg {
  print "<tr><td align=left valign=center bgcolor='#FFFFFF'><font color=black face='Tahoma,Arial,Helvetica' size=-1><b>";
  if ($_[2]) {
    print "$_[3] (<a href=\"mailto:$_[2]\">$_[1]</a>)";
  } else {
    print "$_[3] ($_[1])";
  }
  print "</b></font></td></tr>";
  print "<tr><td valign=top><p align=justify><font color=black face='Tahoma,Arial,Helvetica' size=-1><b>";
  my $lcount = 0;
  foreach $_(@_) { $lcount++ }
  for ($i = 4; $i<$lcount; $i++) { print $_[$i] }
  print "</b></font><br><br></td></tr>";
}

# Add a message to the newsbase
sub updatenews {
 retreive("data/$_[0]");
 open (FILE, "> data/$_[0]") or die "Error updating newsbase!";
  $_[1] = Cut($_[1]);
  $_[2] = Cut($_[2]);
  $_[4] = Cut($_[4]);
  $_[4] =~ s/\n/<br>/g;
 
  print FILE "$_[1]\n$_[2]\n$_[3]\n$_[4]\n$sep\n";
  foreach $DATA (@DATA) { print FILE "$DATA" }
  close FILE or die "Error closing newsbase!";
}

# Cut > < & " ' tags
sub Cut {
  my $cut = $_[0];
  $cut =~ s/\&/\&amp;/g;
  $cut =~ s/</\&lt;/g;
  $cut =~ s/>/\&gt;/g;
  $cut =~ s/"/\&quot;/g;
  $cut =~ s/'/\&#039;/g;
  return $cut;
}
