#!/usr/bin/perl

require 'vp.cgi';
require 'header.cgi';

$adminEmail="spbfp\@atlant.ru";
$admin=0;
$SORTINGS=5;
@SORT_FILE=("../../data/reports/addsort.dat","../data/reports/datesort.dat","../data/reports/kmsort.dat","../data/reports/namesort.dat","../data/reports/compsort.dat");
$CSORT_FNAME="../../data/reports/cs";
$CSORT_FEXT=".dat";
$CATEG_FNAME="../../data/reports/category.dat";
$BASE_FILE="../../data/reports/lib.dat";
$NEWS_FILE="../../data/reports/new.dat";
@SORT_OPTIONS=("дате добавления в базу","дате проведения похода","длине маршрута","имени руководителя","сложности");
@OUTPUT_OPTIONS=("все сразу","по 10 на странице","по 20 на странице","по 30 на странице","по 40 на странице","по 50 на странице");
@complicacyName=('*','* *','* * *','* * * *','* * * * *','* * * * * *');
$hidField="";
$colsp=5;
$catCount=0;
$filePre="/rep/";

if($ENV{'REQUEST_METHOD'} eq 'GET')
 {
   $query=$ENV{'QUERY_STRING'};
   if($query eq "show")
    {
      $admin=0;
    }
   elsif($query eq "adminfunc")
    {
      $admin=1;
    }
   else {die;}
   $form{catout}="no";
   $form{showr}="yes";
   $form{tsort}=0;
   $form{output}=5;
 }
elsif($ENV{'REQUEST_METHOD'} eq 'POST')
 {
   sysread(STDIN,$query,$ENV{'CONTENT_LENGTH'});
 }
else {die "Unknown Method";}

@pairs=split('&',$query);
foreach(@pairs) {
   ($name,$val)=split('=',$_);
   $val=~tr/\+/ /;
   $val=~s/%([a-fA-F0-9]{2})/pack("C",hex($1))/ge;
   $val=~s/\&/&amp;/g;
   $val=~s/\"/&quot;/g;
   $val=~s/</\&lt\;/g;
   $val=~s/>/\&gt\;/g;
   $val=~s/(\x0D|\x0A)//g;
   $form{$name}=$val;
}

if(!&IsNumber($form{tsort},$form{output})) {die;}
if($form{tsort}<0 || $form{tsort}>($SORTINGS-1) || $form{output}<0 || $form{output}>5) {die;}

if($form{adminf} eq 'yes') {$admin=1;}
if($admin)
 {
   $colsp=8;
   $hidField="<input type=\"hidden\" name=\"adminf\" value=\"yes\">";
 }

$categBreak=($form{catout} eq "yes"?1:0);
$showRoutes=($form{showr} eq "yes"?1:0);

fopen(CATEG,"$CATEG_FNAME");
$catnum=0;
foreach(<CATEG>) {chomp($categList[$catnum++]=$_);}
fclose(CATEG);

print <<"(END_HEADER_PART0)";
Content-Type: text/html

<html><head>
<title>-=ВелоПитер=- - Походы - Библиотека отчётов</title>
</head>
<body text="#000000" leftmargin="3" topmargin="3" marginwidth="3" marginheight="3" bgcolor="#FFFFFF">
(END_HEADER_PART0)
&PrintHeader(1);
print <<"(END_HEADER_PART2)";
<font size=2>
<table width="100%" cellspacing="0" cellpadding="4">
<tr bgcolor="#EEEEEE"><td class=hd nowrap align="center">
<font size="3"><b>БИБЛИОТЕКА ОТЧЁТОВ<br>о походах и покатушках<br></b></font></td></tr></table>
<a name="sendReport"></a>
<p align="center"><b><a href="mailto:$adminEmail?subject=To Library">
Присылайте нам</a> ваши отчёты и рассказы о походах!</b><br>Только <b>обязательно</b> укажите
в начале письма <i>точные даты проведения мероприятия, примерный маршрут, его длину,
имя руководителя мероприятия и контактный e-mail (если есть)</i>.</p>
<p><table align="center" cellspacing="0" cellpadding="4" bgcolor="#EEEEEE">
<tr bgcolor="#336699"><td align="center" class=wh><font size=2>Опции</font></td></tr>
<tr><td>
<form action="library.cgi" method="POST">
<table><tr>
<td align="right"><font size="2">Сортировать по&nbsp;</font></td>
<td>$hidField
(END_HEADER_PART2)
&PrintOptions("tsort",1,0,4,$form{tsort},@SORT_OPTIONS);
print "</td><td>\&nbsp\;\&nbsp\;\&nbsp\;\&nbsp\;\&nbsp\;<INPUT type=\"checkbox\" name=\"catout\" value=\"yes\"";
if($categBreak) {print " checked";}
print "><font size=2>Разбивать на районы проведения</font></td>";
print "</tr><tr><td align=\"right\"><font size=2>Выдавать \&nbsp\;</font></td>\n<td>";
&PrintOptions("output",1,5,5,$form{output},@OUTPUT_OPTIONS);
print "</td><td>\&nbsp\;\&nbsp\;\&nbsp\;\&nbsp\;\&nbsp\;<INPUT type=\"checkbox\" name=\"showr\" value=\"yes\"";
if($showRoutes) {print " checked";}

print <<"(END_HEADER_PART4)";
>
<font size="2">Показывать маршруты походов</font></td>
</tr><tr><td colspan="3" align="center"><INPUT TYPE="SUBMIT" NAME="sb" VALUE="Показать отчёты"></td></tr>
</table></form></td></tr></table></p>
(END_HEADER_PART4)

if($admin) {print "<form action=\"addrep.cgi\" method=\"POST\">\n<input type=\"hidden\" name=\"editbase\" value=\"yes\">\n";}

print "<table align=\"center\" width=99% cellspacing=\"3\" cellpadding=\"3\" border=0>";
print "<tr bgcolor=\"#0066CC\" align=\"center\" class=wh>";

if(!$admin)
 {
   print "<td width=\"45%\"";
 }
else
 {
   print "<td width=\"6%\"><font size=2>Метка</font></td><td width=\"6%\"><font size=2>Показывать</font></td>\n<td width=\"3%\"><font size=2>New</font></td>\n<td width=\"30%\"";
 }

print <<"(END_HEADER)";
 align=\"left\" height=\"19\"><font size=2>\&nbsp\;Название и место проведения похода:</font></td>
<td width="10%"><font size=2>Длина маршрута:</font></td>
<td width="19%"><font size=2>Даты проведения:</font></td>
<td width="15%"><font size=2>Руководитель похода:</font></td>
<td width="10%"><font size=2>Сложность:</font></td></tr>
(END_HEADER)

fopen(BASE,"$BASE_FILE");

$recnum=0;
if(!$categBreak)
 {
   fopen(SORT,"$SORT_FILE[$form{tsort}]");
   foreach(<SORT>)
    {
      ($bnum,$bpos)=split(' ',$_);
      $recnum++;
      &PrintRecord($bpos,$bnum);
    }
   fclose(SORT);
 }
else
 {
   for($i=0; $i<$catnum; $i++)
    {
      $catCount=0;
      print "<tr bgcolor=\"#FFFFFF\"><td colspan=\"$colsp\" align=\"center\"><font size=2><b><br>$categList[$i]</b></font></td></tr>\n";
      fopen(SORT,"$CSORT_FNAME$i$CSORT_FEXT");
      binmode(SORT);
      chomp($recnum=<SORT>);

      $toskip=$form{tsort}*$recnum;
      for($k=0; $k<$toskip; $k++) {$str=<SORT>;}

      for($k=0; $k<$recnum; $k++)
       {
         chomp($str=<SORT>);
         ($bnum,$bpos)=split(' ',$str);
         &PrintRecord($bpos,$bnum);
       }
      fclose(SORT);
      print "<tr bgcolor=\"#FFFFFF\"><td colspan=\"$colsp\" align=\"right\"><font size=2>Отчётов в этой категории: $catCount</font></td></tr>\n";
    }
 }

fclose(BASE);

&PrintFooter;

sub PrintRecord
 {
   local($basePos,$baseNum)=@_;

   seek(BASE,$basePos,0);
   chomp($str=<BASE>);
   @param=split(' ',$str);
   if((!$param[0] || $param[0]==2) && !$admin) {return 0;}
   chomp($lname=<BASE>);
   chomp($rname=<BASE>);
   chomp($fname=<BASE>);
   chomp($lemail=<BASE>);
   chomp($route=<BASE>);
   $allCount++;
   if($categBreak) {$catCount++;}

   print "<tr bgcolor=\"#EEEEEE\" align=\"center\">";
   if(!$admin)
    {
      print "<td width=\"45%\"";
    }
   else
    {
      print "<td width=\"6%\"><INPUT type=\"checkbox\" name=\"o$baseNum\" value=\"1\"></td>\n";
      print "<td width=\"6%\"><INPUT type=\"checkbox\" name=\"s$baseNum\" value=\"1\"";
      if($param[0]!=0 && $param[0]!=2) {print " checked";}
      print "></td>\n<td width=\"3%\"><INPUT type=\"checkbox\" name=\"n$baseNum\" value=\"1\"";
      if($param[0]==3 || $param[0]==2) {print " checked";}
      print "></td>\n<td width=\"30%\"";
    }

   print " align=\"left\" height=\"19\"><font size=2>&nbsp\;";
   if($param[0]==3 || $param[0]==2) {print "<font color=\"#990000\"><b>new! </b></font>"}
   print "<a href=\"";
   unless($fname=~/\s*(http|ftp):\/\//i) {print "$filePre";}
   print "$fname\" target=\"_blank\">$rname<br></a>";
   if(!$categBreak) {print "&nbsp;$categList[$param[1]]<br>\n";}
   if($showRoutes) {print "&nbsp;<i>Маршрут:</i> $route\n";}
   print "</font></td><td width=\"10%\"><font size=2>$param[8] км</font></td>\n";
   print "<td width=\"19%\"><font size=2>";
   if($param[4])
    {
      print "$param[2].$param[3].$param[4]";
      unless($param[2]==$param[5] && $param[3]==$param[6] && $param[4]==$param[7]) {print " - $param[5].$param[6].$param[7]";}
    }
   else {print "?";}
   print "</font></td><td width=\"15%\"><font size=2>";
   if($lemail ne '') {print "<a href=\"mailto:$lemail\">$lname</a>";} else {print "$lname";}
   print "</font></td>\n";
   print "<td width=\"10%\"><font size=2><b>$complicacyName[$param[9]]</b></font></td></tr>\n";
   return 1;
 }

sub IsNumber
 {
   foreach $elm (@_) {if($elm=~/\D/) {return 0;}}
   return 1;
 }

sub PrintFooter
 {
   print "<tr><td align=\"center\" colspan=\"$colsp\"><font size=2><b>Всего отчётов в библиотеке: $allCount<\/b><\/font><\/td><\/tr>";
   if(!$admin)
    {
      print "</table>";
    }
   else
    {
      print "<tr><td colspan=$colsp align=\"center\"><table cellpadding=\"3\" bgcolor=\"#EEEEEE\"><tr><td align=\"center\"><font size=2>Помеченные записи:&nbsp;&nbsp;&nbsp;\n";
      print "<input type=\"radio\" name=\"whatdo\" value=\"delr\">Удалить&nbsp;&nbsp;<input type=\"radio\" name=\"whatdo\" value=\"editr\" checked>Редактировать</font></td></tr>";
      print "<tr><td><font size=2>Пароль:&nbsp;&nbsp;</font><INPUT type=\"password\" name=\"passw\" size=16>&nbsp;&nbsp;&nbsp;\n";
      print "<INPUT TYPE=\"SUBMIT\" NAME=\"sb\" VALUE=\"Внести изменения\"><INPUT TYPE=\"RESET\" NAME=\"rb\" VALUE=\"Очистить форму\">";
      print "</td></tr></table></td></tr></table></form>";
    }

print <<"(END_PAGE)";
<p align="center"><a href="#sendReport">Мы всегда ради вашим отчётам!</a></p>
</font>
(END_PAGE)
   &IncludeFile("../htmls/foot.htm");
   print "</body></html>";
 }
