#!/usr/bin/perl

#########################################
#         mY BILLBOARD v.1.0beta™       #
#  Copyright Elmar Mustaphin  1999-2000 #
#      written by Elmar Mustaphin       #
#         URL: perl.webservis.ru        #
#      E-mail: elmar@bugulma.oilnet.ru  #
#              elmar@aport.ru           #
#########################################

####КОНФИГУРАЦИЯ######
$mess =  10; #КОЛ-ВО_СООБЩЕНИЙ_НА_СТРАНИЦУ
$cgi1 = "board.pl"; #КАК_ВЫ_ОБОЗВАЛИ_СКРИПТ
$max_record_size = 500; #ЛИМИТ_ДЛИНЫ_СООБЩЕНИЯ
$max_word_lenth = 40; #ЛИМИТ_ДЛИНЫ_СЛОВА
###################

if ($ENV{'REQUEST_METHOD'} eq "POST")
    {
      read(STDIN, $bufer, $ENV{'CONTENT_LENGTH'});
    }
elsif ($ENV{'REQUEST_METHOD'} eq "GET")
    {
      $bufer=$ENV{'QUERY_STRING'};
    }
else {
    &fatal_error;
}
@pairs = split(/&/, $bufer);
foreach $pair (@pairs)
      {
        ($name, $value) = split(/=/, $pair);
        $name =~ tr/+/ /;
        $name =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
        $value =~ tr/+/ /;
        $value =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
        $value =~ s/<!--(.|\n)*-->//g;
        $value =~ s/\;/&#59;/g;
        $value =~ s/\Ўь//g;
        $value =~ s/\</&lt;/g;
        $value =~ s/\>/&gt;/g;
        $value =~ s/\\//g;
        $value =~ s/\n/<br>/g;
        $FORM{$name} = $value;
      }
@months = ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');
@days = ('Вс','Пн','Вт','Ср','Чт','Пт','Сб');
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year+=1900;
   if ($sec < 10) {
      $sec = "0$sec";
   }
   if ($min < 10) {
      $min = "0$min";
   }
   if ($hour < 10) {
      $hour = "0$hour";
   }
   if ($mon < 10) {
      $mon = "0$mon";
   }
   if ($mday < 10) {
      $mday = "0$mday";
   }
$date="$months[$mon] $mday, $year - $days[$wday] $hour:$min";
$action=$FORM{action};
$cat=$FORM{cat};
$page=$FORM{page};
$ip=$ENV{'REMOTE_ADDR'};

if ($action eq "add") {&add;}
if ($cat ne "") {&view;}

print "Content-type: text/html\n\n";
&htmlhead;
print "<center><h>Здесь вы можете оставит обьявление по покупке или продаже  <h2>саталитарной техники</h2> и не только!</h>\n";
&navigator;
print "<hr color=navy size=0>\n";
print "<br>\n";
&add_form;
&htmlfoot;
print "</body>";
print "</html>";

####################################################
sub navigator {
print "<hr color=navy size=0><center><font>\n";
print "<a href=$cgi1?cat=sale>Продаю</a> | \n";
print "<a href=$cgi1?cat=purchase>Куплю</a> | \n";
print "<a href=$cgi1?cat=change>Меняю</a></b>  | \n";
print "<a href=$cgi1?cat=sdau>Сдаю</a><br>\n";
print "<a href=$cgi1?cat=znakom>Знакомства</a> | \n";
print "<a href=$cgi1?cat=soob>Сообщения</a> | \n";
print "<a href=$cgi1?cat=uslugi>Услуги</a> | \n";
print "<a href=$cgi1?cat=rabota>Работа</a> | \n";
print "<a href=$cgi1?cat=raznoe>Разное</a> | \n";
print "<a href=$cgi1?cat=barter>Бартер</a>\n";
print "</font></center>\n";
}
sub add_form {
print qq~ <form action=$cgi1 method=post>
  <center><table border=1 cellpadding=0 cellspacing=0 width=468
  bgcolor=navy bordercolor=white>
  <input  type=hidden name=action value=add>
  ~;
if ($cat eq "") {
print qq~
      <tr>
      <td width=234><font face=Arial color=white><small><strong><small>Выберите
      раздел \*</small></strong></small></font></td>
      <td width=234 align=right> 
        <select name=cat>
        <option value=sale>Продаю</option>
        <option value=purchase>Куплю</option>
        <option value=change>Меняю</option>
             <option value=sdau>Сдаю</option>
        <option value=znakom>Знакомства</option>
        <option value=soob>Сообщения</option>
        <option value=uslugi>Услуги</option>
        <option value=rabota>Работа</option>
        <option value=raznoe>Разное</option>
           <option value=barter>Бартер</option>
        </select>
      </td>
    </tr> ~;
      } else {
      print "<input  type=hidden name=cat value=$cat>\n" }
print qq~
    <tr>
      <td width=234><font face=Arial color=white><small><strong><small> Ваше имя \*</small></strong></small></font></td>
      <td width=234 align=right><font face=Arial color=white><small><strong><small><input
      size=12 type=text maxlength=35 name=names></small></strong></small></font></td>
    </tr>
    <tr>
      <td width=234><font face=Arial color=white><small><strong><small> Город \*</small></strong></small></font></td>
      <td width=234 align=right><font face=Arial color=white><small><strong><small><input
      size=12 type=text maxlength=35 name=city></small></strong></small></font></td>
    </tr>
    <tr>
      <td width=234><font face=Arial color=white><small><strong><small> Адрес или
      телефон</small></strong></small></font></td>
      <td width=234 align=right><font face=Arial color=white><small><strong><small><input
      size=12 type=text maxlength=35 name=adres></small></strong></small></font></td>
    </tr>
    <tr>
      <td width=234><font face=Arial color=white><small><strong><small> Ваша
      домашняя страничка URL</small></strong></small></font></td>
      <td width=234 align=right><font face=Arial color=white><small><strong><small><input
      size=12 type=text maxlength=65 name=url value=http:\/\/></small></strong></small></font></td>
    </tr>
    <tr>
      <td width=234><font face=Arial color=white><small><strong><small> Ваш E-Mail</small></strong></small></font></td>
      <td width=234 align=right><font face=Arial color=white><small><strong><small><input
      size=12 type=text maxlength=65 name=mail></small></strong></small></font></td>
    </tr>
    <tr>
      <td width=468 colspan=2 align=center><center><p><font face=Arial
      color=white><small><strong><small>Текст объявления не более $max_record_size
      символов \*<br>Слова в сообщений не более $max_word_lenth символов \*</small></strong></small></font></td>
    </tr>
    <tr align=center>
      <td width=468 colspan=2 align=center><textarea rows=5 cols=37 name=text></textarea></td>
    </tr>
    <tr align=center>
      <td width=234 align=right><input type=submit value=Отправить></td>
      <td width=234 align=left><p><input type=reset value=Очистить></td>
    </tr>
  </table>
<font color=red>Пункты, помеченные \(\*\) должны быть обязательно заполнены</font>
  </center>
</form> ~;
}
sub messperpage
  {
   print "<center><table border=0 cellpadding=0 cellspacing=0 width=600>\n";
  	print "<tr><td>";
  	$all = int(($allmess-1) / $mess)+1;
  	print "Страница: - ";
  	for($i=1;$i <= $all;$i++)
  	  {
  	  	$to=$i*$mess-$mess;
  	  	$a=$page/$mess+1;
  	  	if($a ne $i)
  	  	  {
        print " <a href=$cgi1?cat=$cat&page=$to>$i</a> - ";}
  	  	else
        {
        print " $i - ";}
  	  }
  	print "</td></tr>\n";
   print "<tr><td>\n";
   print "<font color=\"$fnt_color\">Всего объявлений <font color=\"$allert_color\">$allmess</font></table>\n";
  }
sub viewmess {
  	for($i=$page;$i<=$pageend;$i++)
  	  {
  		($text,$city,$name,$ip,$adres,$url,$mail,$date) = split(/Ўь/,$DATA[$i]);
   if($name ne "") {
print "<center><table border=1 cellpadding=0 cellspacing=0 width=600 bgcolor=#D4D4D4 bordercolor=white>\n";
print "<tr>\n";
print "<td colspan=2 width=700><font stile=\"font-family: tahoma;\">$text</font></td></tr>\n";
print "<tr>\n";
if ($adres eq "0") {
$adres="";}
print "<td width=350><font>Город: $city</td><td width=350><font>Адрес (телефон): $adres</td></tr>\n";
print "<tr>\n";
print "<td width=350><font>Автор: $name</td><td width=350><font>Дата: $date</td></tr>\n";
if ($mail ne "0") {
                   print "<tr><td colspan=2 width=700>\n";
                   print "<font style=\"text-transform: lowercase\">E-Mail: <a href=mailto:mail>$mail</a></font>";
                   print "</td></tr>\n";
                }
if ($url ne "0") {
                   print "<tr><td colspan=2 width=700>\n";
                   print "<font style=\"text-transform: lowercase\">URL: <a href=$url>$url</a></font>";
                   print "</td></tr>\n";
                }
print "</table><br>\n";
             }
      }
}
sub view {
if ($cat eq "sale") {$name="Продаю";}
if ($cat eq "purchase") {$name="Куплю";}
if ($cat eq "change") {$name="Меняю";}
if ($cat eq "znakom") {$name="Знакомства";}
if ($cat eq "soob") {$name="Сообщения";}
if ($cat eq "uslugi") {$name="Услуги";}
if ($cat eq "rabota") {$name="Работа";}
if ($cat eq "raznoe") {$name="Разное";}
if  ($cat eq "barter") {$name="Бартер";}
print "Content-type: text/html\n\n";
&htmlhead;
print "<center><h2>$name</h2>\n";
&navigator;
print "<hr color=navy size=0>\n";
open(BOARD, "data/$cat.txt") || die {&error2};
@DATA=<BOARD>;
close (BOARD);
$allmess = @DATA;
$pageend = $page+$mess-1;
&messperpage;
print "<hr color=navy size=0><br>\n";
&viewmess;
print "<hr color=navy size=0>\n";
&messperpage;
print "<hr color=navy size=0>\n";
print "<br>\n";
&add_form;
&htmlfoot;
print "</body>";
print "</html>";
exit;
}
sub add {
$names=$FORM{names};
if($names eq "") {
&error;
}
$city=$FORM{city};
if($city eq "") {
&error;
}
$text=$FORM{text};
if($text eq "") {
&error;
}
if ($FORM{adres} ne "") {
$adres=$FORM{adres};
} else	{
$adres="0";
}
if ($FORM{mail} ne "") {
$mail=$FORM{mail};
} else {
$mail="0";
}
$mail="0" if (!($mail =~ /.*\@.*\..*/));
if ($FORM{url} ne "http:\/\/") {
$url=$FORM{url};
} else {
$url="0";
}
$url="0" if (!($url   =~ /.*\:.*\..*/ ));
$text_len = length ($text);
if ($text_len > $max_record_size) {&error;}
if ($text=~/\S{$max_word_lenth,}/)
{
&error;
}
$STRING = join("Ўь",$text,$city,$names,$ip,$adres,$url,$mail,$date);
open(BOARD, "+<data/$cat.txt") || die {&error2};
@DATA=<BOARD>;
@DATA=("$STRING\n",@DATA);
seek(BOARD,0,0);
print BOARD @DATA;
close (BOARD);
}
sub htmlhead {
open (HEAD, "header.txt");

	@head = <HEAD>;
	close (HEAD);
			foreach $lin (@head) {
			print "$lin";
		}
}
sub htmlfoot {
open (HEAD, "footer.txt");
	@foot = <HEAD>;
	close (HEAD);
			foreach $lin (@foot) {
			print "$lin";
		}
}
sub error
{
print "Content-type: text/html\n\n";
&htmlhead;    
print "<center><table border=0 cellpadding=0 cellspacing=0 width=468><tr><td>\n";
print "<center><font color=\"navy\"><H2>Ошибка</H2></center></font>\n";
print "<li><b>Вероятно вы забыли заполнить поле \"Имя\", \"Город\" или \"Сообщение\"</li>\n";
print "<li>Возможно ваше сообщение имеет длину более $max_record_size символов</font></li>";
print "<li>Может быть слова в сообщении содержат более $max_word_lenth символов</font></b></li>";
print "<p align=\"center\"><a href=\"javascript:history.go(-1);\">НАЗАД</a></p>\n";
print "</td></tr></table></center>\n";
&htmlfoot;
print "</body>";
print "</html>";
exit;}
sub error2
{    
print "<center><table border=0 cellpadding=0 cellspacing=0 width=468><tr><td>\n";
print "<center><font color=\"navy\"><H2>Ошибка</H2></font>\n";
print "<b>Внимание! Произошла внутренняя ошибка в программе</b></font></center><br>\n";
print "<li><b>Может вы не правильно вызываете Доску объявлений. Попробуй нажать <a href=\"$cgi1\">сюда</a></li>\n";
print "<li><b>Возможно вы переименовали папку с базой данных объявлений. Папка должна называться DATA</li>\n";
print "<li><b>Вероятно, что файлам баз данных объявлений не задан CHMOD 777 (UNIX)</li></b>\n";
print "<p align=\"center\"><a href=\"javascript:history.go(-1);\">НАЗАД</a></p></center>\n";
print "</td></tr></table></center>\n";
&htmlfoot;
print "</body>";
print "</html>";
exit;}
####################################################

#########################################
#         mY BILLBOARD v.1.0beta™       #
#  Copyright Elmar Mustaphin  1999-2000 #
#      written by Kalan studio       #
#         URL: www.satnews.da.ru        #
#      E-mail: elmar@bugulma.oilnet.ru  #
#              elmar@aport.ru           #
#########################################








